题目
小书屋是以图书出租为主要业务的店铺。其图书分为三种类型:
- 普通图书:租金1元/天
- 计算机图书:租金1.5元/天
- 新书:前3天1.5元/天,之后2元/天
客户租书时要先说明租赁几天,然后缴纳租金,方可租走图书。
实体设计
- 书籍类:用来存储书籍的信息,包括书名、书籍类型等
- 客户类:用来存储借书者信息,包括客户姓名,所借书籍信息等
- 租赁类:用来存储客户租书信息,包括书名,租赁天数等
打印租赁清单
Tom 借书记录:
==============================================================
书名:JAVA 借阅天数:2 租金:3.0元
书名:地球 借阅天数:3 租金:3.0元
书名:读者 借阅天数:5 租金:8.5元
==============================================================
总租金:14.5元
代码
package org.hbin.brs.entities;
/**
*
* @author hbin
* @date 2020/11/17
*/
public class Book {
private static int _id = 0;
private long id;
private String name;
private BookType type;
public Book(String name, BookType type) {
this.id = ++_id;
this.name = name;
this.type = type;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BookType getType() {
return type;
}
public void setType(BookType type) {
this.type = type;
}
}
package org.hbin.brs.entities;
/**
*
* @author hbin
* @date 2020/11/17
*/
public enum BookType {
COMMON_BOOK(1), COMPUTER_BOOK(2), NEW_BOOK(3);
private int value;
private BookType(int value) {
this.value = value;
}
public int value() {
return this.value;
}
public static BookType valueOf(int value) {
for (BookType type : BookType.values()) {
if(type.value == value) {
return type;
}
}
return BookType.COMMON_BOOK;
}
}
package org.hbin.brs.entities;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author hbin
* @date 2020/11/17
*/
public class Customer {
private static int _id = 0;
private long id;
private String name;
private List<Rental> list = new ArrayList<>();
public Customer(String name) {
this.id = ++_id;
this.name = name;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void addRental(Rental r) {
list.add(r);
}
public void bill() {
StringBuilder b = new StringBuilder(this.name).append(" ").append("借书记录:\r\n");
b.append("==================================================================\r\n");
int total = 0;
for (Rental rental : list) {
b.append("书名:").append(rental.getBook().getName()).append("\t")
.append("借阅天数:").append(rental.getLeaseDays()).append("\t")
.append("租金:").append(rental.bill()/10.0).append("元\r\n");
total += rental.bill();
}
b.append("==================================================================\r\n");
b.append("总租金:").append(total/10.0).append("元");
System.out.println(b.toString());
}
}
package org.hbin.brs.entities;
/**
*
* @author hbin
* @date 2020/11/17
*/
public class Rental {
private static int _id = 0;
private long id;
private Book book;
private int leaseDays;
public Rental(Book book, int leaseDays) {
this.id = ++_id;
this.book = book;
this.leaseDays = leaseDays;
}
public long getId() {
return id;
}
public void setId(long id) {
_id++;
this.id = id;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public int getLeaseDays() {
return leaseDays;
}
public void setLeaseDays(int leaseDays) {
this.leaseDays = leaseDays;
}
public int bill() {
switch (book.getType()) {
case COMMON_BOOK:
return 10 * leaseDays;
case COMPUTER_BOOK:
return 15 * leaseDays;
case NEW_BOOK:
return leaseDays <= 3 ? 15 * leaseDays : 15 * 3 + 20 * (leaseDays - 3);
default:
return 0;
}
}
}
package org.hbin.brs.entities;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/**
*
* @author hbin
* @date 2020/11/17
*/
public class BorrowBook {
private static final Scanner scan = new Scanner(System.in);
private static final Map<String, Customer> map = new HashMap<>();
public static void main(String[] args) {
borrow();
}
public static void borrow() {
boolean continueFlag = true;
while(continueFlag) {
System.out.println("请输入用户名称:");
String name = scan.next();
if(!map.containsKey(name)) {
map.put(name, new Customer(name));
}
System.out.println("请输入书的名称:");
String bookName = scan.next();
System.out.println("请输入书的类型(1-普通书,2-计算机书,3-新书):");
BookType bookType = BookType.valueOf(scan.nextInt());
Book book = new Book(bookName, bookType);
System.out.println("请输入租借天数:");
int leaseDays = scan.nextInt();
Rental rental = new Rental(book, leaseDays);
map.get(name).addRental(rental);
System.out.println("是否继续借书(Y/N):");
String next = scan.next().toUpperCase();
continueFlag = "Y".equals(next) || "YES".equals(next);
map.get(name).bill();
}
}
}