m0_59861294 2022-04-18 22:16 采纳率: 100%
浏览 85
已结题

根据要求对java案例之一的图书购买系统进行特殊修改

在学校教完java的图书管理系统后,我对案例中所写的系统不够满足,希望对案例要求用户必须完成三次购买订单这一点进行修改

这是原案例中的Book类的代码


package newjava;

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 int getId() {
        return id;
    }
    // 获取书名
    public String getName() {
        return name;
    }
    // 获取价格
    public double getPrice() {
        return price;
    }
    // 获取库存
    public int getStorage() {
        return storage;
    }
}

这是原案例中的OrderItem类的代码


package newjava;

public class OrderItem {
    private Book book;
    private int num;
    // 有参构造方法
    public OrderItem(Book book, int num) {
        this.book = book;
        this.num = num;
    }
    // 获取图书对象
    public Book getBook() {
        return book;
    }
    // 获取订购图书数量
    public int getNum() {
        return num;
    }
}

这是原案例中的Order类的代码

package newjava;

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 String getOrderId() {
        return orderId;
    }
    // 获取订单列表
    public OrderItem[] getItems() {
        return items;
    }
    // 获取订单总额
    public double getTotal() {
        calTotal();
        return 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;
    }
}

这是原案例中的PayBooks类的代码

package newjava;

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("---------------------------------------");
    }
}

尝试在PayBooks类中进行了修改,主要是想添加一个if判断用户输入的字符串,如果用户在一次购买结束够输入yes则继续进行下一次订单,输入no则中断,但是没有具体的思路,一直尝试也没有成功。

希望将要求用户必须完成三次购买订单这一点修改成“用户可以在每次购买结束后选择是否进行下一次购买”,每一次购买结束后对用户发出是否进行继续购买的提问,如果用户输入“yes”则继续下一次购买,最多三次购买后结算订单总金额;如果用户输入“no”则中断购买,结算已有订单的总金额;如果用户输入“yes”或“no”之外的字符,则直接让程序报错就行。

  • 写回答

4条回答 默认 最新

  • CSDN专家-sinJack 2022-04-18 23:13
    关注

    输出时,需要判断一下当前book是否为空。

    
     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("是否继续购买图书,输入yes继续购买,输入no退出购买。");
                String str = in.next();
                if("yes".equals(str)){
                    continue;
                }else if("no".equals(str)){
                    break;
                }else{
                  System.out.println("输入异常");
                  return order;//输入错误,后面还需要输出吗?
                }
            }
            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&& items[i]!=null; 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());
        }
        
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月19日
  • 已采纳回答 4月19日
  • 修改了问题 4月18日
  • 修改了问题 4月18日
  • 展开全部

悬赏问题

  • ¥15 删除虚拟显示器驱动 删除所有 Xorg 配置文件 删除显示器缓存文件 重启系统 可是依旧无法退出虚拟显示器
  • ¥15 vscode程序一直报同样的错,如何解决?
  • ¥15 关于使用unity中遇到的问题
  • ¥15 开放世界如何写线性关卡的用例(类似原神)
  • ¥15 关于并联谐振电磁感应加热
  • ¥60 请查询全国几个煤炭大省近十年的煤炭铁路及公路的货物周转量
  • ¥15 请帮我看看我这道c语言题到底漏了哪种情况吧!
  • ¥66 如何制作支付宝扫码跳转到发红包界面
  • ¥15 pnpm 下载element-plus
  • ¥15 解决编写PyDracula时遇到的问题