Java小实验-封装一个类

Java小实验封装一个类

设计一个基于控制台的购书系统。该系统主要有以下类完成

  1. 设计一个图书类(Book),该类处于shopping.book包中,该类具有以下成员变量和成员方法。

    1. 成员变量:图书编号(bookid),图书名称(bookname),图书单价(bookprice),库存数量(bookstorage);其中图书单价和库存数量均被private修饰
    2. 成员方法:计算图书折扣率的方法getBookDiscount(),当库存数量<50本时,原有价格打5折;当100>库存数量=>50本时,原有价格打6折;当200>库存数量=>100本时,原有价格打8折;当库存数量>=200时,不打折。
    3. 建议:由于同学们还未接触过数据库和文件存储数据,所以可以在Book类中直接为图书编号、图书名称、库存数量赋初值。如:
      1
      2
      3
      public String bookname="Java程序设计";
      private float bookprice=28.2f;
      private int bookstorage=150;
  2. 设计一个图书管理类(BookManger),该类处于shopping.manager包中,该类的主要功能是接受控制台中来自用户的输入信息,并进行相应的处理,同时通过不同功能的成员方法将处理结果返回,如能够返回图书编号、价格、折扣价格和共支付总额的信息。建议每一个返回信息均通过不同的方法完成,如可在该类中创建getBookId()的方法,返回图书编号信息,其它依此类推。如当用户在命令行后输入:Java程序设计20BookManger类会将处理结果,图书编号:100123345,价格:28.2元,折扣价:20元,共支付:400元,分别通过getBookId()等4个不同的方法返回对应信息。

  3. 编写测试类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());

//var result = book.Id + book.GetPrice() + 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个时,提示警告并且正确执行
too-low

当命令行参数大于需要的参数个,系统抛出异常
too-many

正常输出
stardand


Java小实验-封装一个类
http://cvrain.cloudvl.cn/2023/11/29/Java/java-example-3/
作者
ClaudeRainer
发布于
2023年11月29日
许可协议