题目:
图书馆提供给读者借阅服务,包括借阅书籍及音像制品。如果借阅超时需要缴纳罚金。对于不同类型的书籍和音像制品罚款规则不同。
成人书籍:允许借阅的时间是21天,每超时1天,需要缴纳罚金2元;如果超时3天以上,超出的每天需要缴纳罚金5元。 、
儿童书籍:允许借阅的时间是21天,每超时1天,需要缴纳罚金1元。
音像制品(CD或DVD):允许借阅的时间是14天,每超时1天,需要缴纳罚金5元;如果超时3天以上,超出的每天需要缴纳罚金10元。
每位读者可以一次借阅多本书和多张CD或DVD,请通过多态实现计算罚金的功能。
类的定义:
(1)定义父类 Book,属性包括名称、借阅期限。定义方法calFines(int borrowDays)。
(2)定义子类AdultBook、KidBook及Disc。它们分别继承自Book类。根据图书馆借阅超时缴纳罚金的规则,重写父类的calFines()方法。
(3)定义借阅者类Customer。在该类中定义方法calTotalFines(Book books[],int borrowDays),计算总罚金。
裁判测试程序样例:
//请完成类的定义
public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);Book[] books=new Book[5];books[0]=new AdultBook("半小时漫画中国史");books[1]=new AdultBook("博弈论");books[2]=new KidBook("法布尔昆虫记");books[3]=new KidBook("最好的朋友");books[4]=new Disc("白雪公主");Customer customer=new Customer();int borrowDays=scan.nextInt();double fines=customer.calTotalFines(books, borrowDays);System.out.println("您共归还书籍"+books.length+"本");for(int i=0;i<books.length;i++)System.out.println((i+1)+" "+books[i].getName());System.out.println("借阅时间:"+borrowDays+"天");if(fines>0)System.out.println("共需缴纳罚金:"+fines+"元");elseSystem.out.println("借阅书籍未超期");scan.close();}}/* 请在这里填写答案 */
根据题目要求,代码实现如下:
import java.util.Scanner;class Book {String name;int borrowDays;public double calFines(int borrowDays) {return 0.0;}public String getName() {return name;}
}
class AdultBook extends Book {public AdultBook(String name) {this.name=name;}@Overridepublic double calFines(int borrowDays) {if(borrowDays<=21)return 0;else if(borrowDays-21<=3)return (borrowDays-21)*2;elsereturn (borrowDays-21)*5-3*3;}
}class KidBook extends Book {public KidBook(String name) {this.name=name;}public double calFines(int borrowDays) {if(borrowDays<=21)return 0;elsereturn borrowDays-21;}
}
class Disc extends Book {public Disc(String name) {this.name=name;}public double calFines(int borrowDays) {if(borrowDays<=14)return 0;else if(borrowDays-14<=3)return (borrowDays-14)*5;elsereturn (borrowDays-14)*10-5*3;}
}class Customer extends Book{public double calTotalFines(Book books[],int borrowDays) {double sum = 0;for (int i = 0;i<books.length;i++) {sum += books[i].calFines(borrowDays);}return sum;}
}
以上就是 PTA-6-312 使用多态实现图书馆计算罚金功能 的全部内容了,希望能对你有所帮助!