在学校教完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”之外的字符,则直接让程序报错就行。