Java 类和对象练习2

文章描述了一个编程实现的班级投票程序,使用Voter类表示学生,包含姓名、投票数等属性,通过静态变量和HashSet防止重复投票。投票过程控制了投票次数,当投票总数达到100或投票结束时,会显示投票结果。
摘要由CSDN通过智能技术生成

某班级投票竞选班干部,班级学生人数为100人,每个学生只能投一票。

本任务要求,编程实现一个投票程序,每个学生只能投一次票,投票成功提示“感谢你的投票”,若重复投票,提示“请勿重复投票”。当投票总数达到100时或者主观结束投票时,同时统计投票学生人数和投票结果。

【实现思路】

(1)通过任务描述可知,需要定义一个参与投票的学生类Voter类,它具有姓名,最大投票数,当前投票总数,和投票意见。

(2)因为所有参与投票的学生都会改变同一个数据,即投票次数,一次把它定义成静态变量:private static int count;

(3)另外,为了防止学生重复投票,必须保存参与投票的学生信息,可采用一个集合来存放已经投票的学生对象。

private static Set<Voter> voters = new HashSet<Voter>();

(4)最后编写测试Voter类的投票和打印投票结果功能。

import java.util.HashSet;
    import java.util.Set;
    public class Voter {
        // 属性的定义
                private static final int MAX_COUNT = 100;    // 最大投票数
        private static int count;                   // 投票数
        // 静态变量,存放已经投票的学生
                private static Set<Voter> voters = new HashSet<Voter>();
        private String name;
        private String answer;
        // 构造方法
                public Voter(String name) {
                    this.name = name;
                }
          //无参构造方法
           public Voter(){
               count =0;
               name="unknown";
               answer ="unknown";
          }
    //name取值方法
    public String getName() {
        return name;
    }
    //answer取值方法
    public String getAnswer() {
       return answer;
    }
    //count取值方法
    public int getCount(){
       return count;
    }
    //answer赋值方法
    public void setAnswer(String answer) {
       this.answer = answer;
    }
    //name赋值方法
    public void setName(String name) {
       this.name = name;
    }
    //count赋值方法
    public static void setCount(int count) {
       Voter.count = count;
    }
    

    // 投票
                public void voterFor(String answer) {
                    if (count == MAX_COUNT){
                            System.out.println("投票结束。");
                            return ;
                        }
                    if (voters.contains(this)){
                            System.out.println(name+",请勿重复投票。");
                        } else {
                            this.answer = answer;
                            count ++;
                            voters.add(this);
                            System.out.println(name+" 感谢你的投票。");
                        }
                }
        // 打印投票结果
                public static void printVoterResult() {
                    System.out.println("当前投票数为:"+count);
                    System.out.println("参与投票的学生和结果如下:");

                    for (Voter voter: voters) {
                            System.out.println(voter.name+" 意见 "+voter.answer);
                        }
                }
    public static void main(String[] args) {
                // 创建参与投票的学生对象
                Voter tom = new Voter("Tom");
                    Voter jack = new Voter("Jack");
                    Voter mike = new Voter("Mike");
                    // 学生开始投票
                    tom.voterFor("是");
                    tom.voterFor("否");
                    jack.voterFor("是");
                    mike.voterFor("是");
                    // 打印投票结果
                    Voter.printVoterResult();
                }
}

基于控制台的购书系统

(1)通过任务描述可知,该系统中必须包括3个实体类,类名及属性设置如下:

  1. 图书类(Book):库存数量(storage)图书单价(price)图书名称(name)图书编号(id)
  2. 订单项类(OrderItem):购买数量(num)
  3. 订单类(Order):订单项列表(items)订单总额(total)订单号(orderID)图书(book)

2由于购买图书时需要选择图书的数量所以需要在订单项类里定义获取图书对象以及图书数量的方法

3由于需要指定订单项以及获取订单的订单列表、订单号、订单总额等信息,所以需要有订单列表、订单号、订单总额指定订单项等方法。

public class Book {
    private int id;    // 编号
    private String name;  // 书名
    private double price;  // 价格
    private int storage;   // 库存


  // 有参构造
           public Book(int id, String name, double price, int storage) {
               this.id = id;
               this.name = name;
               this.price = price;
               this.storage = storage;
           }
    //无参构造
    public Book(){
        id=0;
        name ="unknown";
        price=0;
        storage=0;
    }
   // 获取书号
           public int getId() {
              return id;
           }
    // 获取书名
            public String getName() {
               return name;
           }
    // 获取价格
            public double getPrice() {
              return price;
           }
   // 获取库存
            public int getStorage() {
               return storage;
           }
    //书号赋值

    public void setId(int id) {
        this.id = id;
    }

    //书名赋值

    public void setName(String name) {
        this.name = name;
    }

    //价格赋值

    public void setPrice(double price) {
        this.price = price;
    }

    //库存赋值

    public void setStorage(int storage) {
        this.storage = storage;
    }
}
public class Order {
    private String orderId;
    private OrderItem items[];
    private double total;

    // 有参构造
    public Order(String orderId) {
        this.orderId = orderId;
        this.items = new OrderItem[3];
    }
    //无参构造
    public Order(){

    }
    // 获取订单号
    public String getOrderId() {
        return orderId;
    }

    // 获取订单列表
    public OrderItem[] getItems() {
        return items;
    }

    // 获取订单总额
    public double getTotal() {
        calTotal();
        return total;
    }
    //订单号赋值

    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }

    //订单列表赋值

    public void setItems(OrderItem[] items) {
        this.items = items;
    }

    //订单总额赋值

    public void setTotal(double total) {
        this.total = total;
    }

    // 指定一个订单项
    public void setItem(OrderItem item, int i) {
        this.items[i] = item;
    }

    // 计算订单总额
    public void calTotal() {
        double total = 0;
        for (int i = 0; i < items.length; i++) {
            total += items[i].getNum() * items[i].getBook().getPrice();
        }
        this.total = total;
    }
}
public class OrderItem {
    private Book book;
    private int num;

    // 有参构造方法
    public OrderItem(Book book, int num) {
        this.book = book;
        this.num = num;
    }
    //无参构造方法
    public OrderItem(){
        num=0;
    }
    // 获取图书对象
    public Book getBook() {
        return book;
    }

    // 获取订购图书数量
    public int getNum() {
        return num;
    }
    //图书对象赋值

    public void setBook(Book book) {
        this.book = book;
    }

    //订购图书数量赋值

    public void setNum(int num) {
        this.num = num;
    }
}
import Book.Book;
import Book.Order;
import Book.OrderItem;
import java.util.Scanner;
public class PayBooks {
    public static void main(String[] args) {
        Book books[] = new Book[3];
        //模拟从数据库中读取图书信息并输出
        outBooks(books);
        // 顾客购买图书
        Order order = purchase(books);
        // 输出订单信息
        outOrder(order);
    }
    // 顾客购买图书
    public static Order purchase(Book books[]) {
        Order order = new Order("00001");
        OrderItem item = null;
        Scanner in = new Scanner(System.in);
        for (int i = 0; i < 3; i ++) {
            System.out.println("请输入图书编号选择图书:");
            int cno = in.nextInt();
            System.out.println("请输入购买图书数量:");
            int pnum = in.nextInt();
            item = new OrderItem(books[cno-1],pnum);
            order.setItem(item, i);
            System.out.println("请继续购买图书。");
        }
        in.close();
        return order;
    }
    // 输出订单信息
    public static void outOrder(Order order) {
        System.out.println("\n\t图书订单");
        System.out.println("图书订单号:"+order.getOrderId());
        System.out.println("图书名称\t购买数量\t图书单价");
        System.out.println("--------------------------------------");
        OrderItem items[] = order.getItems();
        for(int i = 0; i < items.length; i ++) {
            System.out.println(items[i].getBook().getName()+"\t"+items[i].getNum(
            )+"\t"+items[i].getBook().getPrice());
            //System.out.println("\n");
        }
        System.out.println("---------------------------------------");
        System.out.println("订单总额:\t\t"+order.getTotal());
    }
    // 模拟从数据库中读取图书信息并输出
    public static void outBooks(Book books[]) {
        books[0] = new Book(1,"Java教程",30.6,30);
        books[1] = new Book(2,"JSP教程",42.1,40);
        books[2] = new Book(3,"SSH架构",47.3,15);
        System.out.println("\t图书列表");
        System.out.println("图书编号\t图书名称\t\t图书单价\t库存数量");
        System.out.println("---------------------------------------");
        for (int i = 0; i < books.length; i ++) {
            System.out.println(i+1+"\t"+books[i].getName()+"\t"+
                    books[i].getPrice()+"\t"+books[i].getStorage());
        }
        System.out.println("---------------------------------------");
    }
}

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值