第一个类:图书类:用于输出图书的信息;
//封装类,封装图书的信息
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) {
super();
this.id = id;
this.name = name;
this.price = price;
this.storage = storage;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getStorage() {
return storage;
}
public void setStorage(int storage) {
this.storage = storage;
}
}
订单信息类:用于输出订单买的哪本书,购买数量
//订单的信息
public class order {
private book book;//图书,就是指定买的哪本书
private int num;//购买这本书的数量
public order(book book, int num) {
this.book = book;
this.num = num;
}
public book getBook() {
return book;
}
public void setBook(book book) {
this.book = book;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
订单类用于输出订单号,订单总金额,订单列表;
//订单类,用于输出订单号,订单总额,订单项列表
public class orders1 {
private String oid;//订单号
private order[] items;//订单项列表
private double total;//订单总额
//创建构造函数
public orders1(String oid) {
super();
this.oid = oid;
//new出item数组
this.items=new order[3];
}
public String getOid() {
return oid;
}
public void setOid(String oid) {
this.oid = oid;
}
//用于输出订单项列表
public order[] getItems() {
return items;
}
//因为是一个数组对象,所以要处理一下,用i来索引,把值传入成员变量里面
public void setItems(order items,int i) {
this.items[i] = items;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
private void calcTotal() {
//用来计算订单的总价格。
double total=0;
//getNum用来获取对于订单项的数量,items[i].getBook().getPrice()用来获取对应的图书.的价格
for(int i=0;i<items.length;i++) {
total +=items[i].getNum()*items[i].getBook().getPrice();
}
//不可以用return返回值,就用this关键字传值给成员变量
this.total=total;
}
}
最后就是测试类;
import java.time.*;
import java.util.Iterator;
import java.util.Scanner;
//购买书的测试类
public class BookDemo {
public static void main(String[] args) {
// TODO Auto-generated method stub
//三本书就定义3
book[] books=new book[3];
//输出每个图书的信息,把books值传入里面
outbook(books);
//定义购买图书的方法,调用buy方法获得啦订单列表,用一个订单对象来接受
orders1 order1=buy(books);
//打印订单信息
printfinfo(order1);
}
private static void printfinfo(orders1 order1) {
// TODO Auto-generated method stub
System.out.println("订单编号:"+order1.getOid());
System.out.println("图书的名称\t\t图书单价\t\t购买数量");
//把传进来的order1的订单项列表赋值给items
order[] items=order1.getItems();
for (int i = 0; i < items.length; i++) {
System.out.println(items[i].getBook().getName()+"\t"+items[i].getBook().getPrice()+"\t"+items[i].getNum());
}
System.out.println("总金额:"+order1.getTotal());
}
private static orders1 buy(book[] books) {
// TODO Auto-generated method stub
//因为每购买一次会产生一个订单,要记得赋值,因为orders1类里面构造方法有参数
//这里有一个快捷键alt+/,点击第二个
orders1 order=new orders1("001");
Scanner sc=new Scanner(System.in);
for (int i = 0; i < books.length; i++) {
System.out.println("请输入图书的编号");
int id=sc.nextInt();
System.out.println("请输入购买数量");
int price=sc.nextInt();
//再这里用到order订单信息类,把订单信息打到item里面,再order类里面的构造方法的形参列表是books的,所以需要用到books数组传值进去,id-1;
order item=new order(books[id-1],price);
//把订单信息保存到订单项列表里面,用这边的i来做索引
order.setItems(item,i);
}
return order;
}
//这个方法这里要加static关键字,因为程序无法这个类里面无法调用非静态的方法
public static void outbook(book[] books) {
//书的存储
books[0]=new book (1,"java程序设计",60,30);
books[1]=new book (2,"程序设计",16,15);
books[2]=new book (3,"c程序设计",12,20);
//输出图书的信息
System.out.println("--------------------------------------------------------------");
System.out.println("图书编号\t\t图书名称\t\t图书价格\t\t图书库存");
for(int i=0;i<books.length;i++) {
//创建一个图书的临时变量,用于保存数组books的值
book b=books[i];
System.out.println(b.getId()+"\t\t"+b.getName()+"\t\t"+b.getPrice()+"\t\t"+b.getStorage());
}
}
}