1.         定义一个表示时间的类Time,它提供下面操作:

a)         Time(hours,minutes,seconds) 创建一个时间对象;

b)        t.hours()t.minutes()t.seconds() 分别返回时间对象t的小时、分钟和秒钟值;

c)         Time对象定义加法和减法操作(用运算符 + -);

d)        定义时间对象的等于和小于关系运算(用运算符 == <)。

注意:Time类的对象可以采用不同的内部表示方式。例如,可以给每个对象定义三个数据属性hoursminutesseconds,基于这种表示实现操作。也可以用一个属性seconds,构造对象时算出参数相对于基准时间000秒的秒值,同样可以实现所有操作。请从各方面权衡利弊,选择合适的设计。

上面的情况体现出“抽象数据类型”的抽象性,其内部实现与使用良好隔离,可以换一种实现方式(或改变一些操作的实现技术)但不影响使用它的代码。

2.         请参考前一题有关时间类提出的问题,定义一个类实现表示时间的Date抽象数据类型。请为其定义一组有用的操作。

3.         扩充正文中给出的有理数类,加入一些功能:

e)         其他运算符的定义;

f)         各种比较和判断运算符的定义;

g)        转换到整数(取整)和浮点数的方法;

h)        给初始化函数加入从浮点数构造有理数的功能(Python标准库浮点数类型的as_integer_ratio()函数可以用在这里)。

对应运算符的特殊函数名请查看语言手册3.3.7节(Emulating numeric types)。

4.         请扩充7.2.4节的程序,增加几个新的表示其他形状的类,并扩充一批类似area的操作,使之都可以用于各种形状或形状的表(集合等)。

5.         请查看第6章有关信息管理和记录的讨论,从那里找出几个例子,采用面向对象的思想重新分析和设计,实现相应的程序,并从各方面对比这两种不同实现。

6.         请扩充7.2.4节的客户类和客户管理系统,使之更接近实际企业的需要。

7.         请基于继承的技术,重新定义一组有用的形状类(扩充,并根据需要修改第7.2.4节的程序)。请说明为什么你采用这种方式构造这一组类。

8.         请为7.4.1节的程序定义一个检查三元组是否合法日期的谓词。

9.         请基于7.2.4节和7.3.2节的客户和客户管理类,采用数据驱动技术(第6章)实现一个客户管理的主程序,它应该不断接受命令并执行命令。请务必为这个系统增加持久性功能,使得企业在下班时可以自动保存已有的客户信息,第二天早上启动系统时可以重新装入以前积累的客户信息。

10.     请扩充7.3.2节的客户类和客户管理系统,使之更接近实际企业的需要。

11.     请分析你所在(或所毕业)的学校的学生学号和教职工编号的规则,设法修改7.4节中定义的大学人员类,实现这些编号规则。注意,你应该使编号的生成自动化,绝不应该有人工干预(以避免出错情况)。请讨论你所提供的功能能否完全满足你学校的需要,如果不能满足,请说明为什么,还需要什么信息。并请进一步分析你学校所采用的编号系统的合理性(请从实际需要和计算机实现两个角度评价)。

12.     请开发一个大学学生管理系统,其中使用7.4节给出的各种学生类。

13.     请继续扩充7.4节的人事管理类,定义一个教师类和一个职员类。

14.     请开发一个大学职工管理系统,其中使用前一题中扩充的人事类。

15.     请考虑为银行设计一个计算机管理系统,其中:

a)         定义一个银行职员类,定义必要的操作;

b)        定义一个银行账户类,定义必要的操作;

c)         基于银行职员类和账户类,实现银行管理系统。

16.     请考虑一个图书馆管理系统,其中:

a)         定义一个表示图书的类;

b)        定义一个表示影视媒体资料的类;

c)         定义一个读者类;

d)        基于上述几个类,实现图书馆管理系统。你可以设计一套图书和影视材料的借阅使用规则,并设法实现这些规则。

17.     请考虑一个用于医院的医疗管理系统的设计和实现:

a)         定义一组适当的类,并实现相应的管理系统;

b)        根据真实世界的系统需求,讨论你所做的设计与实现的不足。