Skip to content

Latest commit

 

History

History

README.md

实验二

题目一:工资支付系统

Tip

代码在 SalaryPayment.java

某公司编写一个工资支付系统,用于计算某一类员工的月薪

该公司共有四类员工

  • 领固定月薪(SalariedEmployee)
  • 计时取酬(HourlyEmployee,如果一月工时超过160小时,则还需对额外的工时支付加班费)
  • 按销售额提成(CommissionEmployee)
  • 带底薪并按销售额提成(BasePlusCommissionEmployee)

其继承层次结构如下所示

已知每类员工均有表示员工工号、姓名和出生年月的属性,和用于计算员工月薪的方法

创建一个 Employee 变量数组,保存 Employee 类层次结构中每个具体类对象的引用,对每个 Employee 显示其工号、姓名、出生年月和月收入

如果当月是 Employee 的生日所在的月份,则还另发给他 100 元作为红包

题目二:歌手比赛的分数评定系统

吐槽:不是这说的也太乱了 =-=

Tip

代码在 SingerJudgingLine.java

如果对象 a 含有对象 b 的引用,对象 b 含有对象 c 的引用,那么就可以使用 a、b、c 搭建流水线

即建立一个类,该类同时组合 a、b、c 三个对象

流水线的作用是:用户只需将要处理的数据交给流水线,流水线会依次让流水线上的对象来处理数据,即流水线上首先由对象a处理数据

a 处理数据后,自动将处理的数据交给 b,b 处理数据后,自动将处理的数据交给 c

例如,在歌手比赛时,只需将评委给出的分数交给设计好的流水线,就可以得到选手的最后得分

流水线上的第一个对象负责录入裁判给选手的分数,第二个对象负责去掉一个最高分和一个最低分,最后一个对象负责计算出平均成绩

请根据下面各类的说明,用流水线完成分数评定系统

  • InputScore 类的对象负责录入分数,InputScore 类组合了 DelScore 类的对象
  • DelScore 类的对象负责去掉一个最高分和一个最低分,DelScore 类组合了 ComputerAver 类的对象
  • ComputerAver 类的对象负责计算平均值

Line 类组合了 InputScore、 DelScore 和 ComputerAver 3 个类的实例

提示

对象的组合

一个类的成员变量可以是 Java 允许的任何数据类型,因此一个类可以把某个对象作为自己的一个成员变量

该类的对象将其他对象作为自己的组成部分,这就是人们常说的 Has-A

如果一个对象 a 组合了对象 b,那么对象 a 就可以委托对象 b 调用其方法,即对象 a 以组合的方式复用对象 b 的方法

例如

class circle{
    double getArea() {…….}
}
class circular {
    circle bottom;  // 圆锥组合圆
    double height;

    double getVolume() {
        return bottom.getArea()*height/3.0
    }
}

请自行设计合理的数据

注意分析程序中有可能产生的异常,根据需要进行异常捕获和处理

题目三:模拟主板集成板卡

Tip

代码在 SimulatedComputer.java

请模拟实现如下情形:计算机包括主板,主板上有5个PCI插槽,可插装显卡、声卡、网卡等PCI设备。主板启动、关机时,依次启动、关闭主板上的各设备

以命令行的形式输出,展示为

【开机】显卡启动-显卡运行 声卡启动--声卡运行 网卡启动--网卡运行

【关机】显卡停止 声卡停止 网卡停止

设计思路

  • ①理解接口与实现类之间的关系,以及类如何实现接口;
  • ②理解何时需要应用接口数组,如何定义和使用接口数组。
  • ③PCI 接口有启动、运行、关闭三个方法,显卡、声卡、网卡等类实现PCI 接口;主板上有能容纳 5个元素的 PCI 数组(代表5个PCI 插槽),另有计算机类。

题目四:模拟消费宝

Tip

代码在 ConsumingPay.java

假设某电商平台推出消费宝,可关联多张银行卡

支付时默认时从第一张银行卡扣款,若第一张不足以消费,则扣完第一张卡后,自动从第二张卡扣款

如此继续,若所有银行卡的余额总数不足以满足消费,则不能支付

支付后以命令行给出消费信息,向商家X支付Y元,支付情况如下:工商银行卡支付a元,余额 m元;建设银行卡支付b元,余额n元

设计思路:

  • ①每个银行存取信息不同,都有ID、姓名、密码、余额、存/取、验证。关联银行卡需要验证,如关联某银行卡X时,先输入X的账号信息和密码,通过后可关联;取消关联银行卡,也要输入银行卡密码。
  • ②消费宝有密码,银行卡关联成功后,支付时只需要输入消费宝密码。多卡消费时,也只需输入一次消费宝的密码。
  • ③不需要文件和数据库存储。

题目五:军训列队

Tip

代码在 Lineup.java

军训时,经常需要将士兵进行列队。请给出几种列队策略,在某次训练时,可以从给出的策略中选择一种策略用于列队。列队策略可以身高从低到高或按身高从高到低或不管高矮排方正队列等等,也可自行设计。

题目六:书写工具生产

Tip

代码在 PenFactory.java

可能有很多“书写工具”,例如钢笔,圆珠笔或毛笔等,我们不想让用户看到“书写工具”的生产过程(不想让用户使用new得到类的实例)再得到这种书写工具(比如钢笔或圆珠笔等)。请使用工厂方法模式设计几个类,为用户提供几种“书写工具”,比如钢笔,毛笔或圆珠笔。