图书馆显示借阅者还书的信息。 假设一个学生免费借阅图书30天,超出的天数按照书价和书的类型,每超出一天罚金如下:教材0.001元,参考书0.005元,新书0.01元,基础罚金分别是1、1.5、 3元。提前还书都有奖励积分,三种类型书的奖分分别是1、 2、3。奖分只能用于抵消罚金,7分抵1元罚金。 使用java编写该功能,具体要求: 程序共有3个类——学生Student,图书Book和借阅Rental,Student类有属性title、price、category,Rental类有属性book、borrower、dayRented,方法有calculateFIneAndBonus(),Student类有属性name、bonus、rentals,方法有returendMessage()。
时间: 2023-07-10 12:34:52 浏览: 135
好的,我明白了您的问题。这是一个关于图书馆借阅者还书信息的问题,并涉及到罚款和奖励积分。您需要一个使用 Java 编写的程序,包括三个类:Student、Book 和 Rental。其中 Student 类有属性 title、price、category,Rental 类有属性 book、borrower、dayRented,方法有 calculateFineAndBonus(),Student 类有属性 name、bonus、rentals,方法有 returnedMessage()。
下面是一个简单的实现,您可以参考一下:
```java
public class Book {
String title;
double price;
String category;
}
public class Rental {
Book book;
Student borrower;
int dayRented;
public double calculateFine() {
double fine = 0;
int daysOverdue = dayRented - 30;
if (daysOverdue > 0) {
if (book.category.equals("教材")) {
fine += daysOverdue * 0.001;
} else if (book.category.equals("参考书")) {
fine += daysOverdue * 0.005;
} else if (book.category.equals("新书")) {
fine += daysOverdue * 0.01;
}
if (fine < 1.0) {
fine = 1.0;
}
}
return fine;
}
public int calculateBonus() {
if (dayRented <= 27) {
if (book.category.equals("教材")) {
return 1;
} else if (book.category.equals("参考书")) {
return 2;
} else if (book.category.equals("新书")) {
return 3;
}
}
return 0;
}
}
public class Student {
String name;
int bonus;
List<Rental> rentals;
public double calculateTotalFine() {
double totalFine = 0;
for (Rental rental : rentals) {
totalFine += rental.calculateFine();
}
return totalFine;
}
public int calculateTotalBonus() {
int totalBonus = 0;
for (Rental rental : rentals) {
totalBonus += rental.calculateBonus();
}
return totalBonus;
}
public String returnedMessage() {
double totalFine = calculateTotalFine();
int totalBonus = calculateTotalBonus();
if (totalFine == 0 && totalBonus == 0) {
return "您没有欠款或奖励积分。";
}
String message = "";
if (totalFine > 0) {
message += "您有 " + totalFine + " 元的罚款。";
if (totalBonus > 0) {
int bonusToOffset = (int) (totalFine * 7);
if (bonusToOffset > totalBonus) {
bonusToOffset = totalBonus;
}
message += "您有 " + bonusToOffset + " 分奖励积分可用于抵消罚款。";
totalFine -= bonusToOffset / 7.0;
totalBonus -= bonusToOffset;
}
message += "您还需要支付 " + totalFine + " 元的罚款。";
}
if (totalBonus > 0) {
message += "您有 " + totalBonus + " 分奖励积分可用于借阅新书。";
}
return message;
}
}
```
以上是一个简单的实现,可能需要根据具体情况进行修改。希望能对您有所帮助!
阅读全文