- 《使用Java实现面向对象编程》阶段测试
一、语言和环境
A、实现语言
Java
B、环境要求
JDK 8.0、Eclipse
二、功能要求
开发基于控制台的购书系统。具体要求如下:
(1)输出所有图书的信息:包括每本图书的图书编号、图书名称、图书单价和库存数量。
(2)顾客购买图书:根据提示输入图书编号来购买图书,并根据提示输入购买图书数量(用户必须连续购书三次)。
(3)购书完毕后输出顾客的订单信息:包括订单号、订单明细、订单总额和订单日期。
- List item
系统运行界面如图-1所示。
图-1 系统运行界面
三、类的设计
该系统中必须包括三个类,类名及属性设置如下。
图书类(Book)
图书编号(bookId)
图书名称(bookName)
图书单价(price)
库存数量(storage)
订单项类(OrderItem)
图书名称(bookName)
图书单价(price)
购买数量(num)
订单类(Order):
订单号(orderId)
订单总额(total)
订单日期(date)
订单项列表(items)
四、具体要求及推荐实现步骤
1、创建图书类,根据业务需要提供需要的setter/getter方法。
2、创建订单项类,根据业务需要提供需要的setter/getter方法。
3、创建订单类,根据业务需要提供需要的setter/getter方法。
4、创建测试类Test,实现顾客购买图书。
A、获取所有图书信息并输出:创建至少三个图书对象并输出即可。
B、顾客购买图书:顾客通过输入图书编号来购买图书,并输入购买数量。
C、输出订单信息:包括订单号、订单明细、订单总额、订单日期。
在这里插入代码片
package sellBook;
public class Book {
private int bookId;
private String bookName;
private double price;
private int srotage;
public int getBookId() {
return bookId;
}
public void setBookId(int bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getSrotage() {
return srotage;
}
public void setSrotage(int srotage) {
this.srotage = srotage;
}
}
package sellBook;
import java.util.Date;
public class Order {
private String orderId;
private double total;
private Date date;
private OrderItem[] items;
public String getOrderId() {
return orderId;
}
public void setOrderId(String string) {
this.orderId = string;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public OrderItem[] getItems() {
return items;
}
public void setItems(OrderItem[] items) {
this.items = items;
}
}
package sellBook;
;
public class OrderItem {
private String bookName;
private double price;
private int num;
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
package sellBook;
import java.util.Date;
import java.util.Scanner;
public class SystemMenu {
private Book[] books = null;
private Scanner in = new Scanner(System.in);
public void init() {
/*一个初始化方法
void说明没返回值,init是方法名
()里面是参数列表。这里没有参数。
函数体自己随便写,不过函数既然起的这个名字通常情况下是
用来写一些初始化的语句的。
*/
books = new Book[50];
//创建图书对象,并存入数组
Book book1 = new Book();
book1.setBookId(1);
book1.setBookName("Java教程");
book1.setPrice(30.6);
book1.setSrotage(30);
Book book2 = new Book();
book2.setBookId(2);
book2.setBookName("JSP指南");
book2.setPrice(42.1);
book2.setSrotage(40);
Book book3 = new Book();
book3.setBookId(3);
book3.setBookName("SSH架构");
book3.setPrice(47.3);
book3.setSrotage(15);
//存入数组
books[0] = book1;
books[1] = book2;
books[2] = book3;
}
//输出图书信息
public void show() {
//init();//不建议这种方式,这样会让程序粘连性过强,不利于扩展
System.out.println("\t\t图书列表");
System.out.println("图书编号\t图书名称\t图书单价\t库存数量");
System.out.println("----------------------------------");
//遍历显示
for (int i = 0; i < books.length; i++) {
if(books[i] == null) {
break;
}
System.out.println(books[i].getBookId()+"\t"+books[i].getBookName()+"\t"+books[i].getPrice()+"\t"+books[i].getSrotage());
}
System.out.println("----------------------------------");
}
public void buy() {
OrderItem[] items = new OrderItem[3];
double total = 0;
for (int i = 0; i < 3; i++) {
System.out.print("请输入图书编号选择图书:");
int id = in.nextInt();
//通过id获取图书信息
Book book = getBookById(id);
System.out.print("请输入购买图书数量:");
int num = in.nextInt();
//累加当前金额
total += (num * book.getPrice());
//创建订单项
OrderItem item = new OrderItem();
item.setBookName(book.getBookName());
item.setNum(num);
item.setPrice(book.getPrice());
//将订单项存入数组
items[i] = item;
if(i < 2) {
System.out.println("请继续购买图书");
}
}
//创建图书订单
Order order = new Order();
order.setOrderId("00001");
//获取订单总额
order.setTotal(total);
//存放订单项列表
order.setItems(items);
order.setDate(new Date());
//输出图书订单
showOrder(order);
}
//显示订单
public void showOrder(Order order) {
System.out.println("\t\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].getBookName()+"\t"+items[i].getNum()+"\t"+items[i].getPrice());
}
System.out.println("-------------------------------");
System.out.println("订单总额:\t\t\t"+order.getTotal());
System.out.println("日期:"+order.getDate().toString());
}
//通过id获取图书对象
public Book getBookById(int id) {
Book book = null;
for (int i = 0; i < books.length; i++) {
if(books[i] == null) {
break;
}
if(books[i].getBookId() == id) {//编号相等,就是需要查找的书籍
book = books[i];
break;//找到就结束查找
}
}
return book;
}
public void start() {
init();
show();
buy();
}
}
在这里插入代码片
package sellBook;
public class test {
public static void main(String[] args) {
// TODO Auto-generated method stub
SystemMenu menu = new SystemMenu();
menu.start();
}
}