PTA-6-312 使用多态实现图书馆计算罚金功能

题目:

图书馆提供给读者借阅服务,包括借阅书籍及音像制品。如果借阅超时需要缴纳罚金。对于不同类型的书籍和音像制品罚款规则不同。

成人书籍:允许借阅的时间是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 stub
      Scanner 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+"元");
      else
          System.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;
    }
    @Override
    public double calFines(int borrowDays) {
        if(borrowDays<=21)
            return 0;
        else if(borrowDays-21<=3)
            return (borrowDays-21)*2;
        else
            return (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;
        else
            return 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;
        else
            return (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 使用多态实现图书馆计算罚金功能 的全部内容了,希望能对你有所帮助!

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值