郑州大学现远程教育《面向对象程序设计》.docx
《郑州大学现远程教育《面向对象程序设计》.docx》由会员分享,可在线阅读,更多相关《郑州大学现远程教育《面向对象程序设计》.docx(16页珍藏版)》请在冰点文库上搜索。
郑州大学现远程教育《面向对象程序设计》
郑州大学现代远程教育《面向对象程序设计》
(计算机科学与技术本科)
课程作业
请保存为WORD格式的文档,登陆学习平台(
要求:
建议1-3选一题,4-7选一题,8-10任选一题,且所有学生题目要相同。
1、编写一个程序模拟超市的收银系统。
具体要求如下:
(1)提示输入顾客买的商品名称和单价(以元为单位),直到所有购买商品输入完毕(空格键表示输入完毕)。
(2)在屏幕上输出顾客购买的所有商品的名称和单价,每种商品的总价,顾客应付钱数;(3)提示输入实际交的钱数,计算应找钱数并显示。
(4)按回车键返回第一步,按ESC键推出程序运行。
程序运行结果如下所示:
输入商品名称:
薯片
输入单价:
1.00
输入数量:
10
输入商品名称:
洗衣粉
输入单价:
9.8
输入数量:
1
(按空格键,退出输入过程)
商品名称单价数量总价
薯片1.001010
洗衣粉9.819.8
应付:
19.8(元)
输入实际付:
20元
找零:
0.2元
(按回车键返回第一行)
商品名称:
×××
。
。
。
(按ESC则退出)
2、编写一个程序实现24小时计时转换为12进制计时。
具体要求:
以四位整数表示24小时计时法时间,pm表示下午,am表示上午
运行示例:
例1:
输入24小时计时法时间:
1743
12小时计时法时间:
1743是5.43p.m.
例2:
输入24小时计时法时间:
0904
12小时计时法时间:
0904is9.04a.m.
3、编写一个简单的加密程序:
输入四位整数,按照以下加密算法处理后,生成加密后的四位整数输出。
加密算法:
(每一位的数字+8)mod10,处理后的数字中第1位和第四位交换,第2位和第3位交换。
运行示例:
输入四位整数:
7523
加密后的四位整数是:
1035
4、编写一个简单的学生成绩管理系统。
具体要求如下:
建立两个类StudentList和StudentListTester.StudentList类用数组存放一组Student对象,记录当前数组中记录的学生数量。
.设计方法:
在数组中增加一个Student对象;检查数组是否已满,是否空;获得数组中某个位置的Student对象,获得Student对象的众数。
其他具体内容请看下图:
StudentListTester类用于测试StudentList类.
程序首先提示输入数组大小,然后创建指定大小的StudentList类。
程序允许用户从下面的菜单中连续选择:
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
如果选择1,提示用户输入学生的姓名,学号,以及数学,英语和程序设计三门课的成绩。
如果选择2,显示当前数组中所有学生的名字,数量,每个人的各门课程的成绩和平均成绩
如果选择3和4显示那些满足条件的学生的情况。
选择5,显示退出信息后退出程序。
程序运行示例:
输入学生最大数量:
3
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
输入选择[1-5]:
1
输入学生名字:
张三
输入学号:
9908
输入张三的成绩
数学?
48
英语?
62
程序设计?
55
***张三已经加入学生名单***
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
输入选择[1-5]:
1
输入学生名字:
李四
输入学号:
9904
输入李四的成绩
数学?
67
英语?
53
程序设计?
75
***李四已经加入学生名单***
输入选择[1-5]:
1
输入学生名字:
人似惊鸿
输入学号:
9811
输入人似惊鸿的成绩
数学?
25
英语?
30
程序设计?
35
***人似惊鸿已经加入学生名单***
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
输入选择[1-5]:
1
***不能增加,学生数量已满***
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
输入选择[1-5]:
2
***学生信息***
张三:
9908
数学:
48英语:
62程序设计:
55平均成绩:
55.0
李四:
9904
数学:
67英语:
53程序设计:
75平均成绩:
65.0
人似惊鸿:
9811
数学:
25英语:
30程序设计:
35平均成绩:
30.0
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
输入选择[1-5]:
3
***学生信息***
人似惊鸿:
9811
数学:
25英语:
30程序设计:
35平均成绩:
30.0
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
输入选择[1-5]:
4
***学生信息***
张三:
9908
数学:
48英语:
62程序设计:
55平均成绩:
55.0
[1]增加一个学生
[2]显示数组中所有的学生以及他们的成绩
[3]显示数组中平均成绩<40的学生以及他们的成绩
[4]显示数组中姓张的学生以及他们的成绩
[5]退出
输入选择[1-5]:
5
***再见***
5、编写一个自动点歌系统
具体要求:
创建两个类PlayList和JukeBox.。
PlayList类用数组放一组字符串,还记录了当前字符串的个数。
这个类中要设计方法完成以下功能:
增加一个字符串,删除一个字符串,获得指定位置的字符串,获得当前字符串的个数,检查字符串数组是否为空,是否已满。
其他内容见UML图:
JukeBox类用来测试PlayList类,,它模拟点歌操作。
每一个字符串代表歌名。
程序首先提示用户输入歌曲的最大个数,然后创建Pllayist对象。
接着程序允许用户选择:
[1]增加一首歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选项1,输入歌曲的名字和歌手的名字
选项2显示第一首歌的名字,然后删除
选项3显示当前所有歌曲列表
选项4:
显示:
再见,退出程序
程序运行示例:
***点歌台***
歌曲最大个数:
2
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
3
***没有歌曲***
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
1
输入歌曲名称和歌手名字–周杰伦:
听妈妈的话
***加入歌曲***
周杰伦:
听妈妈的话
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
1
输入歌曲名称和歌手名字–S.H.E:
SuperStar
***加入歌曲***
S.H.E:
SuperStar
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
1
***不能增加,歌曲表已满***
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
2
***现在播放***
周杰伦:
听妈妈的话
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
3
***当前歌曲列表***
S.H.E:
SuperStar
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
1
输入歌曲名称和歌手名字–周杰伦:
发如雪
***加入歌曲***
周杰伦:
发如雪
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
3
***当前歌曲列表***
S.H.E:
SuperStar
周杰伦:
发如雪
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
2
***现在播放***
S.H.E:
SuperStar
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
6
***无效操作***
[1]增加歌曲
[2]播放第一首
[3]显示歌曲列表
[4]退出
选择[1-4]:
4
***欢迎再次光临,再见***
6、编写一个简单的工资管理系统。
具体要求:
设计三个类Employee类,Manager类和HourlyWorker类。
Manager类和HourlyWorker类是Employee类的子类。
Emloyee类记录职工的姓名和编号,Manager类增加了经理的工资属性;Hwourlyworker记录钟点工每小时的工资数和一个月的工作小时数。
每一个类中必须包含构造函数,析构函数,修改和获取所有数据成员的函数,计算职工工资,显示职工姓名和编号的虚函数。
主函数中设计一个数组存放所有职工对象。
提示用户选择:
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
选择1时,输入职工名字,编号,职工类别,工资情况
选择2时,显示数组中所有职工的姓名,编号和工资
选择3时,显示数组中所有经理的姓名,编号和工资
选择4时,显示数组中所有钟点工的姓名,编号和工资
选择5,提示“谢谢使用,再会”后,退出。
程序运行示例:
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
输入选择:
1
输入职工信息:
姓名:
张三
编号:
9904
类别:
经理
月工资:
2000
***增加一个职工***
张三99042000
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
输入选择:
1
输入职工信息:
姓名:
李四
编号:
9905
类别:
经理
月工资:
1000
***增加一个职工***
李四99051000
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
输入选择:
1
输入职工信息:
姓名:
王五
编号:
9906
类别:
钟点工
小时工资:
10
月工作小时数:
50
***增加一个职工***
王五9906小时工资:
10,月工作小时数:
50
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
输入选择:
2
***职工工资表***
张三99042000
李四99051000
王五9906500
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
输入选择:
3
***经理工资表***
张三99042000
李四99051000
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
输入选择:
4
***钟点工工资表***
王五99061050500
[1]增加一个职工
[2]显示数组中所有的职工以及他们的工资
[3]显示数组中所有的经理以及他们的工资
[4]显示数组中钟点工以及他们的工资
[5]退出
输入选择:
5
***谢谢使用,再会***
7、定义如下整数链表的函数成员
classLIST{
structNODE{
intvalue;
NODE*next;
NODE(int,NODE*);
}*head;
public:
LIST(void);
LIST(constLIST&);
intfind(intvalue)const;//查找元素value,若找到返回1,否则返回0
intoperator[](intk)const;//取表的第k个元素
virtualLISToperator+(constLIST&);//表的合并运算
virtualLISToperator+(intvalue);//插入一个元素
virtualLISToperator-(intvalue);//删除一个元素
virtualLIST&operator+=(constLIST&);//表的合并运算
virtualLIST&operator+=(intvalue);//插入一个元素
virtualLIST&operator-=(intvalue);//输出一个元素
virtualLIST&operator=(constLIST&);//赋值
virtual~LIST(void);
}
8、定义如下集合类的函数成员
classSET{
int*elem;存放集合元素的动态内存
intcount,total;目前元素个数及最大元素个数
public:
SET(inttotal);
SET(constSET&);
intfind(intval)const;//查找元素val,若找到返回1,否则返回0
intfull(void)const;//集合满时返回1,否则返回0
intempty(void)const;//集合空时返回1,否则返回0
virtualSEToperator+(constSET&);//集合的并集
virtualSEToperator-(constSET&);//集合的差集
virtualSEToperator*(constSET&);//集合的交集
virtualSEToperator<<(intvalue);//增加一个元素
virtualSEToperator>>(intvalue);//删除一个元素
virtualSET&operator+=(constSET&);//集合的并集
virtualSET&operator-=(constSET&);//集合的差集
virtualSET&operator*=(constSET&);//集合的交集
virtualSET&operator<<=(constSET&);//增加一个元素
virtualSET&operator>>=(constSET&);//删除一个元素
virtualSET&operator=(constSET&);
virtual~SET(void);
}
9、定义类描述有限状态自动机,状态的输入和输出关系可以描述为链表数据成员:
classSTATE;
classLIST{
LIST*next;
charinput;
STATE*output;
LIST(charin,STATE*out);//私有,仅供STATE使用
~LIST();
friendSTATE;
}
classSTATE{
char*name;//状态名
LIST*list;//输入及输出列表
staticSTATE*error;//自动机陷阱
public:
voidenlist(charin,STATE*out);//插入list
constSTATE*next(charin)const;//输入in转移到下一个状态
constSTATEstart(char)const;//启动有限自动机
STATE(char*name);
~STATE();
}
使用有限自动机编程解决如下问题:
有一人带着狼,羊和草来到河的左岸,左岸只有一条无人摆渡的船。
这个人要从左岸过河到右岸,可是这条船最多只能装一个人河其他三者之一,否则便会沉没。
如果没有人看管,狼会吃掉羊,或者羊会吃掉草。
问如何过河才能保证羊和草的安全。
提示:
作为有限状态自动机的输入,人单独过河用字符m表示,人带狼过河用字符w表示,人带羊过河用字符s表示,人带草过河用字符g表示,声明有限自动机夫人start,stop以及error状态对象,如果start.start(“smwsgms”)=&stop,则过河成功,否则如果start.start(“smwsgms”)=&error,则过河失败。
10、在二维坐标系上定义GRAPH抽象类,该类具有基点坐标和图形显示等纯虚函数。
从该类派生出三角形,圆形,和四边形等特定图形类,从圆类和三角形类派生出圆内接三角形类,并为特定图形类定义相应纯虚函数。
定义每一个类的构造函数,析构函数,绘图函数以及相应的数据成员。
设计Draw类,其中设计一个数组数据成员存放各种图形对象,设计一个方法绘出每个图形的形状。