Java小实验封装一个类
设计一个基于控制台的购书系统。该系统主要有以下类完成
设计一个图书类(Book),该类处于shopping.book包中,该类具有以下成员变量和成员方法。
- 成员变量:图书编号(bookid),图书名称(bookname),图书单价(bookprice),库存数量(bookstorage);其中图书单价和库存数量均被private修饰
- 成员方法:计算图书折扣率的方法getBookDiscount(),当库存数量<50本时,原有价格打5折;当100>库存数量=>50本时,原有价格打6折;当200>库存数量=>100本时,原有价格打8折;当库存数量>=200时,不打折。
- 建议:由于同学们还未接触过数据库和文件存储数据,所以可以在Book类中直接为图书编号、图书名称、库存数量赋初值。如:
1 2 3
| public String bookname="Java程序设计"; private float bookprice=28.2f; private int bookstorage=150;
|
设计一个图书管理类(BookManger),该类处于shopping.manager包中,该类的主要功能是接受控制台中来自用户的输入信息,并进行相应的处理,同时通过不同功能的成员方法将处理结果返回,如能够返回图书编号、价格、折扣价格和共支付总额的信息。建议每一个返回信息均通过不同的方法完成,如可在该类中创建getBookId()的方法,返回图书编号信息,其它依此类推。如当用户在命令行后输入:Java程序设计20BookManger类会将处理结果,图书编号:100123345,价格:28.2元,折扣价:20元,共支付:400元,分别通过getBookId()等4个不同的方法返回对应信息。
编写测试类AllUsers,当用户从命令行后输入书名和数量时,会显示该书图书编号、价格,以及用户需要支付的金额。
运行结果
代码部分
shopping/Manager.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| package shopping;
import java.util.Calendar;
public class Manager { private final Book book;
public Manager(String bookName, Double bookPrice, Integer bookStorage) { book = new Book(); var date = Calendar.getInstance().getTimeInMillis(); book.bookId = String.valueOf(date); book.SetStorage(bookStorage).SetPrice(bookPrice).SetBookName(bookName); }
public void DisplayTotal() { var result = String.format("图书编号: %s\t价格: %.2f\t折扣价:%.2f元\t共支付:%.2f元\n", book.bookId, book.GetPrice(), book.GetBookDiscount(), book.GetStorage() * book.GetBookDiscount());
System.out.println(result); }
}
|
shopping/Book.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| package shopping; public class Book { public String bookId; public String bookName; private double bookPrice; private int bookStorage; public Book SetPrice(double price) { bookPrice = price; return this; } public Book SetStorage(int storage) { bookStorage = storage; return this; } public Book SetBookName(String name) { bookName = name; return this; } public double GetPrice() { return bookPrice; } public double GetStorage() { return bookStorage; } public double GetBookDiscount() { if (bookStorage < 50) { return calcDiscount(5); } else if (bookStorage < 100) { return calcDiscount(6); } else if (bookStorage < 200) { return calcDiscount(8); } return bookPrice; } public double calcDiscount(double rate) { return bookStorage * rate * 0.1; } }
|
Main.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| import shopping.Manager; import shopping.Book; import java.util.Scanner; public class Main { public static void main(String[] args) throws Exception { Manager manager; if (args.length == 3) { manager = new Manager(args[0], Double.valueOf(args[1]), Integer.valueOf(args[2])); manager.DisplayTotal(); } else if (args.length < 3) { System.out.println("Too few argument, at lest 4"); } else { System.out.println("Too many argument, 4 arguments at most"); throw new Exception("Too many argument, 4 arguments at most"); } var scanner = new Scanner(System.in); var name = scanner.nextLine(); var price = scanner.nextDouble(); var storage = scanner.nextInt(); manager = new Manager(name, price, storage); manager.DisplayTotal(); } }
|
输出
当命令行参数小于4个时,提示警告并且正确执行
当命令行参数大于需要的参数个,系统抛出异常
正常输出