《《面向对象程序设计》课程设计任务书(1周).docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》课程设计任务书(1周).docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C+面对对象程序设计课程设计任务书一、课程设计目标通过 C+课程设计,使学生能将学到的面对对象的程序设计思想用到具体的工作和学习中,加深对类与对象的理解,是将计算机课程与实际问题相联接的关键步骤。通过课程设计,能够提高同学们查阅资料、独立分析问题和解决问题的力气。二、课程设计的根本要求1、考核方式(1) 要求利用面对对象的方法以及c+的编程思想来完成系统的设计;(2) 要求在设计的过程中,建立清楚的类层次;(3) 在系统中至少要定义两个类,每个类中要有各自的属性和方法;(3) 在系统的设计中,至少要用到面对对象的一种机制;(4) 创要求在根本要求到达后,可进展创设计;(5) 写出课程设计报告,
2、流程图和类图要清楚。(6) 把握用VC+6.0 开发软件的方法。(7) 编写程序的要求:a. 系统应给出足够的提示信息,如“请选择1 借书 2 还书:”提示用户选择。 b.程序具有确定的强健性,不会由于用户的输入错误引起程序运行错误而中断执行。 对输入值的类型、大小范围、字符串的长度等,进展正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重输入c.对删除数据应给出警告d.程序要自己完成,不行抄袭2、课程设计报告根本格式课程设计报告内容应包括封面、名目、正文、附录等。 1封面:课程设计名称、专业、班级、学号、姓名、设计时间等。2) 名目:课程设计报告的名目。3) 正文:l 系统设计目
3、标及意义、功能介绍。l 系统的具体设计思路。l 系统流程图、类关系UML图、主要运行界面图、运行结果图。l 说明系统设计、开发过程中遇到的问题及创点。l 课程设计心得体会。4) 附录:程序源代码及简要系统使用说明、测试报告等。3、评分标准任课教师可以自己设定课程设计的评分标准,应重点考核学生对实际问题的抽象力气、调试程序及创力气。可参考以下评分标准:课程设计成绩=源程序局部 60%+课程设计报告25%+辩论15%辩论局部包括学生自己阐述系统的设计思路及教师对学生提问。1) 完成了课程设计的目标,系统运行结果正确,交互性和容错性良好,并且有确定的系统功能扩展和创,则评为“优”。2) 完成了课程设
4、计的目标,运行结果正确,并且有良好的交互性和强健性,则评为“良”。3) 完成了课程设计的目标,运行结果正确,则评为“中”。4) 只完成了课程设计的根本目标,并调试成功,则评为“中”。5) 未完成课程设计规定内容,或是程序运行有较大错误,或是完全抄袭别人代码,则评为“不及格”。三、课程设计的题目任选一题题目一:学生信息治理系统要求完成以下功能:1) 从屏幕上输入学生信息并保存数据,例如承受文件方式保存。学生信息包括地址、诞生日期、学科成绩语文,英语,数学,物理、个人信息姓名,性别,民族,国籍,学历、联系方式手机,家庭 ,学校 等。2) 从文件中删除一个学生信息。3) 显示全部学生信息。4) 能够
5、按编号或姓名对学生的信息进展检索并将检索结果显示在屏幕上。5) 能够对单个学生进展编辑。6) 可以统计全部学生的总成绩,及其在班上的排名。(选做)7) 能够统计各科的平均成绩及及格率。选做8) 要求有错误提示功能,例如性别只能输入男女,输入错误提示重输入。9) 假设检索不到相应的信息应提示用户。10要求利用菜单的形式进展治理。可以承受文本菜单,假设图形菜单更好提示: 可以用单链表每个节点存储一个学生的信息。可以承受文件存储。需要创立链表类,操作类,地址类,链表结点类,学生类,分数类, 号码类 等题目二:图书治理系统设计要求完成以下功能:(1) 借书。图书借阅信息:借阅人、借阅人所在单位、借书证
6、号、所借书名、借阅日期、归还日期、逾期罚款等。借阅期限为一个月,逾期1 天,罚款 1 角。(2) 还书。(3) 图书维护:删除图书,增加图书等。图书根本信息:图书编号、书名、作者要考虑多个作者状况、出版社、出版日期、定价、馆藏数、借阅数等。(4) 读者维护:包括增读者、更改读者信息、查找读者、读者信息删除、读者信息输出。(5) 要求利用菜单的形式进展治理。可以承受文本菜单,假设图形菜单更好。提示:建议对读者和图书都使用类进展治理 。需要创立类 读者类包括读者编号、读者姓名、所借图书等,实现对读者的信息的描述 图书类包括图书的编号、书名、是否借出等,实现对图书的描述。 读者库类读者信息保存在一个
7、文本文件中以下假定为reader.txt,实现利用文本文件建立读者的个人资料、按编号查找、输出或删除全部读者信息 图书库类图书信息保存在一个文本文件中以下假定为 book.txt,实现对图书的维护、查找和删除等 。题目三:通讯录治理系统要求完成以下功能:1) 录入成员信息。根本信息:姓名、现就读大学名称及班级名、专业、家庭住址、家庭联系 、 、本人联系 等。2) 删除一个成员信息。3) 修改成员信息并保存。4) 能够按姓名对成员信息进展检索并将检索结果显示在屏幕上。5) 能够按专业对成员信息进展检索并将检索结果显示在屏幕上。6) 显示全部成员信息。7) 要求利用菜单的形式进展治理。可以承受文本
8、菜单,假设图形菜单更好题目四:五子棋要求完成以下功能:1) 可以实现初步的人机对弈2) 程序主界面、棋盘布局合理美观3) 显示双方黑白棋子美观、尺寸合理、颜色准确4) 双方棋子落子位置准确、无重复落子5) 能自动推断输赢,自动完毕玩耍6) 棋局能够重开头、保存和载入提示:相关数据构造链表形式表示当前盘面的状况,目的是可以允许用户进展悔棋、回退等,递归搜寻算法,可以自定义五子棋规章,胜败推断规章,上网查找五子棋算法。四、进度安排共 1 周第 1 天:布置课程设计任务。 查阅资料,制定方案,进展程序总体设计和具体设计。第 25 天:具体设计 , 系统调试整理,撰写设计或调研报告,验收,提交设计报告
9、, 评定成绩。五、课程设计指导书、参考书1. C+程序设计课程设计 机械工业出版社 刘振安2. C+语言课程设计 机械工业出版社3、C+语言程序设计案例教程 清华大学出版社 郑莉4、C+根底教程从问题分析到程序设计 清华大学出版社5、 :/ chinaoak /C+学习资源网课程设计报告例子:高等院校人员治理系统1、系统设计目标及意义、功能此题目要完成一个高等院校的人员信息治理系统,能够实现学校中各类人员的信息录入、查询、修改、删除、统计、保存、显示等操作。假设高校中有三类人员:授课教师、行政人员、行政人员兼职教师既上课又完成行政人员的工作。系统具体实现的功能如下:1) 从文件中加载员工信息:
10、系统可以实现把存储在文件 person.txt 中的学校人员根本信息加载到系统中,可以避开数据的重复录入。2) 增加学校员工信息:系统可以实现键盘录入员工信息,员工信息包括员工编号、类型、姓名、性别、年龄、政治面貌、学历、工资等。假设目前学校无员工,则直接录入员工信息; 假设有员工,则自动生成员工的编号增加 1。学校人员分为授课教师、行政人员、行政人员兼职教师三类,各类员工的工资计算方法如下:授课教师工资=根本工资+课时费30*学时数 行政人员工资=根本工资+行政补贴行政人员兼职教师工资=根本工资+行政补贴+课时费20*学时数3) 查询学校员工信息:系统可以实现按“编号”或“姓名”查询员工,并
11、输出相关信息。4) 修改学校员工信息:系统可以实现对录入的员工信息重进展编辑、修改,分别修改员工的姓名、性别、年龄、政治面貌、学历和工资信息。 5删除学校员工信息:系统可以实现当员工离开学校时删除相关信息。6) 统计学校员工信息:系统可以统计学校中的党员人数和女员工人数。7) 学校员工信息存盘:系统可以实现把员工根本信息存储到磁盘文件person.txt 中,便利用户以后读取数据,避开重复录入。 8显示全部员工信息:系统可以输出学校全部员工的信息,包括员工编号、姓名、性别、年龄、政治面貌、学历、工资、人员类型等。 9系统界面承受文本菜单方式,交互性好,系统界面如图10 所示:系统数据存盘文件p
12、erson.txt 的格式如下:编号姓名性别年龄政治面貌学历工资员工类型1000张莉女32党员博士750011001白飞女28群众硕士250021002孟丹男40党员博士105003其中员工类型为 1 表示授课教师,2 表示行政人员,3 表示行政人员兼职教师2、系统具体设计系统使用类来组织治理数据,共包括五个类,分别是学校类school、员工类person、任课教师类teacher、行政人员类 staff、行政人员兼职教师类 staffteacher。员工类 person 用来描述学校内各类人员具有的公共属性及操作,由于学校里授课教师、行政人员、行政人 员兼职教师这三类人员工资的计算方法不同,
13、表现出多态性,因此以person 类为基类,分别派生出授课教师类teacher、行政人员类staff,再以teacher 类和 staff 类为基类,派生出行政人员兼职教师类 staffteacher。由于学校里人员总数允许变动、不确定,因此学校类 school 承受链表保存全部人员信息,并用共同的方法操作全部人员,类school 与类person 之间是类的聚合关系,上述类关系用UML 标识如图 11 所示:学校类 school员工类 person授课教师类 teacher行政人员类 staff行政人员兼职教师类 staffteacher图 11 高等院校人员治理系统类关系的UML 图l 员
14、工类person。类属性包括编号(no)、姓名(name)、性别(sex)、年龄(age)、政治面貌(party)、学历(study)、工资(pay)、员工类型(type)、指向下一个员工的指针(mynext),实现对员工类的描述。成员函数包括提取员工编号(getnum)、提取姓名(getname)、提取性别(getsex)、提取年龄(getage)、设置年龄(getagee)、提取政治面貌(getparty)、提取学历(getstudy)、提取员工类型(gettype)、提取工资(getpay)、设置工资(getpayy)、提取指向下一个员工指针(getnext)、设置指向下一个员工指针(s
15、etnext)、输出员工信息(output)等。l 授课教师类teacher。类属性包括职称(teachpos)、每小时课时费(coursefee)、课时数(coursenum) 。成员函数包括提取工资(getpay)。l 行政人员类staff。类属性包括职务级别(pos)、行政补贴(stafffee)。成员函数包括提取工资(getpay)。l 行政人员兼职教师类staffteacher。成员函数包括提取工资(getpay)。l 学校类school。类属性包括指向学校中第一位员工的指针(myfirst)。成员函数包括从文件中加载员工信息(load)、增加员工信息(add、input、inser
16、t)、按编号查询员工信息(findnum)、 按姓名查询员工信息(findname)、修改员工信息(modify)、删除员工信息(deleteperson)、统计员工信息(count)、员工信息存盘(save)、显示学校所 有员工信息(showall)等 。在基于UML 的可视化建模工具Rational Rose 中高等院校人员治理系统各类关系的UML 图形标识如图 12 所示:图 12 Rational Rose 中系统类关系的UML 图3、系统主要功能模块流程图开头创立学校对象显示系统操作菜单依据输入执行不同操作信息存盘员工信息系统图 13 主函数 main 的流程图1)主函数main 的
17、流程图见图 13员员员员员员工工工工工工信信信信信信息息息息息息加增查修删统信员显退载加询改除计息工示出2) 从文件中加载员工信息school:load 流程图见图 143) 增加员工信息 school:add、school:input、school:insert 流程图见图 15开头开头YN翻开学校员工数据文件 person.txt学校目前是否有员工?(add)Y文件读取失败或文件完毕N读取一条员工记录N文件未读到尾Y学校员工链表中参与结点员工编号自动加 1键盘输入员工编号键盘输入员工根本信息类型、姓名、性别、年龄、政治面貌、学历(input)依据员工的类型调用相应派生类的成员函数 getp
18、ay 计算员工工资学校员工链表中参与创立员工结(点insert)关闭文件完毕开头输入待修改员工的编号N学校是否有员工Y遍历学校员工链表N有待修改员工吗Y修改此员工信息姓名、性别、年龄、政治面貌、学历、工资输出无此员工图 17 修改员工信息流程图开头输入待查员工的编号和姓名N学校是否有员工Y遍历学校员工链表N是否有待查员工Y输出此员工信息 output输出无此员工图 16 按编号或姓名查询员工信息流程图4) 按编号或姓名查询员工信息school:findnum、school:findname 流程图见图 16 5修改员工信息school:modify 流程图见图 17开头输入待删除员工的编号N学
19、校是否有员工Y遍历学校员工链表N有待删除员工吗Y删除链表中此员工结点并修改学校员工链表输出无此员工图 18 删除员工信息流程图开头统计计数器初始化 amount=012输入统计的选项遍历学校员工链表统计员工党员人数遍历学校员工链表统计女员工人数输出学校中党员人数 amount输出学校中女员工人数 amount图 19 统计员工信息流程图6删除员工信息school:deleteperson 流程图见图 18 7统计员工信息school:count 流程图见图 19 8员工信息存盘school: save 流程图见图 20开头翻开学校员工数据文件 person.txt遍历学校员工链表,将人员结点信
20、息写入到文件 person.txt 中关闭文件完毕图 20 员工信息存盘流程图4、源程序及说明整个程序包含 5 个文件:school.h、school.cpp 是学校类的类定义文件和类实现文件; person.h、person.cpp 是员工类及其派生类的类定义文件和类实现文件;main.cpp 是主函数文件。1) 员工类person 的定义person.h #include#include#include/包含文件流对象文件#includeusing namespace std;class person/员工类的定义 protected:intno;/编号charname20;/姓名char
21、sex10;/性别intage;/年龄 charparty20;/政治面貌charstudy30;/学历floatpay;/工资inttype;/员工类型,1:授课教师 2:行政人员 3:表示行政人员兼职教师person *mynext;/指向下一个员工的指针public:person;/员工类无参构造函数的定义person(intpnum,charpname,charpsex,int,charpparty,charpstudy,float ppay,int ntype);/员工类有参构造函数的定义person(int pnum,char pname,char psex,int ,char p
22、party,char pstudy,float ppay,int ntype,person *next); /员工类有参构造函数的定义int getnum;/提取员工编号函数的定义char *getname ;/提取员工姓名函数的定义char *getsex ;/提取员工性别函数的定义int getage ;/提取员工年龄函数的定义 void getagee(int as);/设置员工年龄函数的定义 char *getparty ;/提取员工政治面貌函数的定义char *getstudy;/提取员工学历函数的定义virtual float getpay;/计算员工工资函数的定义 void ge
23、tpayy(float temp); /设置员工工资函数的定义int gettype;/提取员工类型函数的定义person *getnext;/提取指向下一个员工指针函数的定义void setnext(person *next); /设置指向下一个员工指针函数的定义void output;/输出员工信息函数的定义;2) 员工类person 的实现person.cpp #include“person.h“person:person/员工类无参构造函数no=0; strcpy(name,“);strcpy(sex,“); age=0; strcpy(party,“);strcpy(study,“)
24、; pay=0.0; type=0;mynext=NULL;person:person(int pnum,char pname,char psex,int ,char pparty,char pstudy,float ppay,int ptype)/员工类有参构造函数no=pnum; strcpy(name,pname); strcpy(sex,psex); age=; strcpy(party,pparty); strcpy(study,pstudy); pay=ppay; type=ptype; mynext=NULL; person:person(int pnum,char pname,
25、char psex,int ,char pparty,char pstudy,floatppay,int ptype,person *next) /员工类有参构造函数no=pnum; strcpy(name,pname); strcpy(sex,psex); age=; strcpy(party,pparty); strcpy(study,pstudy); pay=ppay; type=ptype; mynext=next; intperson:getnumchar * person:getname char * person:getsexreturn no;return name; retu
26、rn sex;char * person:getparty char * person:getstudyintperson:getagereturn party; return study; return age;voidperson:getagee(int as)age=as;floatperson:getpayreturn pay;voidperson:getpayy(float temp)pay=temp;intperson:gettypereturn type;void person:setnext(person *next) mynext=next; person *person:g
27、etnext return mynext; void person:outputcout“编号:“no“姓名:“nameendl; cout“性别:“sex“年龄:“ageendl; cout“政治面貌:“party“学历:“studyendl; cout“工资:“pay“人员类型:“typeendl; 3) 授课教师类teacher 的定义person.hclass teacher:virtual public person/授课教师类的定义 protected:char teachpos20;/职称float coursefee;/每节课的课时费float coursenum;/学时数pu
28、blic:teacher;/教师类无参构造函数的定义float getpay;/计算教师工资函数的定义;4) 授课教师类teacher 的实现person.cppteacher:teacher/教师类无参构造函数的实现coutteachpos;coursefee=30.0;coutcoursenum;float teacher:getpay/计算工资函数的实现 if(strcmp(teachpos,“教授“)=0) pay=1600;if(strcmp(teachpos,“副教授“)=0) pay=1200;if(strcpy(teachpos,“讲师“)=0) pay=800;pay=pay
29、+coursefee*coursenum; return pay;5) 行政人员类staff 的定义person.hclass staff:virtual public person/行政人员类的定义 protected:char pos20;/行政职务float stafffee;/行政补贴public:staff;/行政人员类无参构造函数的定义float getpay;/计算行政人员工资函数的定义;6) 行政人员类staff 的实现person.cppstaff:staff/行政人员类无参构造函数的实现coutpos;coutstafffee;float staff:getpay/计算工资
30、函数的实现if(strcmp(pos,“处级“)=0) pay=2500;if(strcmp(pos,“科级“)=0) pay=2023;if(strcmp(pos,“科员“)=0) pay=1500;pay=pay+stafffee; return pay;7) 行政人员兼职教师类staffteacher 的定义person.hclass staffteacher:public staff,public teacher/行政人员类的定义 public:staffteacher;/类无参构造函数的定义float getpay;/计算工资函数的定义;8) 行政人员兼职教师类staffteache
31、r 的实现person.cppstaffteacher:staffteacher/类无参构造函数的实现 coursefee=20.0;float staffteacher:getpay/计算工资函数的实现if(strcmp(pos,“处级“)=0)if(strcmp(teachpos,“教授“)=0) pay=2023;else if(strcmp(teachpos,“副教授“)=0) pay=1800;elsepay=1600; if(strcmp(pos,“科级“)=0)if(strcmp(teachpos,“教授“)=0) pay=1800;else if(strcmp(teachpos
32、,“副教授“)=0) pay=1600;elsepay=1400; if(strcmp(pos,“科员“)=0) if(strcmp(teachpos,“教授“)=0) pay=1600;else if(strcmp(teachpos,“副教授“)=0) pay=1400;elsepay=1200; pay=pay+coursenum*coursefee+stafffee; return pay;9) 学校类school 的定义school.h#include“person.h“ classschool private:person *myfirst;/指向学校人员链表中结点的指针public
33、:school;/school 类无参构造函数的定义school(int nnum,char nname,char nsex,int nage,char nparty,char nstudy,float npay,int ntype);/school 类带参数构造函数的定义school;/school 类析构函数的定义void load;/从文件中加载员工信息void add;/增加员工信息void input(int number);/键盘输入员工根本信息void insert(int nnum,char nname,char nsex,int nage,char nparty,char n
34、study,float npay,int ntype);/学校员工链表中插入员工结点bool findnum;/按编号查询员工信息bool findname( );/按姓名查询员工信息bool modify;/修改员工信息bool deleteperson( );/删除员工信息void count;/统计员工信息void save;/员工信息存盘voidshowall;/显示学校全部员工信息;10) 学校类school 的实现school.cpp #include“school.h“school:school ( )/school 类无参构造函数的实现myfirst=NULL;school:s
35、chool(int nnum,char nname,char nsex,int nage,char nparty,char nstudy,float npay,int ntype)/school 类带参数构造函数的实现myfirst=new person(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype); school:school( )/school 类析构函数的实现 person *next=myfirst,*temp; while(next!=NULL)temp=next; next=next-getnext; delete temp; myf
36、irst=NULL;void school:load/从文件中加载员工信息int nnum,nage,ntype;char nname20,nsex20,nparty20,nstudy20; float npay;ifstream fin(“person.txt“,ios:in); while(fin.good)finnnumnnamensexnagenpartynstudynpayntype; if(!(fin.eof)insert(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype); fin.close;coutendl“存储在文件中的学校人员信息
37、已加载到系统中“endl;void school:add/增加员工int tmpnum,number1,number2; person *p=myfirst; if(p=NULL)couttmpnum;input(tmpnum); elseif(p-getnext=NULL) number1=p-getnum+1; input(number1);else while(p-getnext!=NULL) p=p-getnext;number2=p-getnum+1; input(number2);void school:input(int number) /键盘输入员工根本信息int nage,n
38、type; float npay;char nname20,nsex20,nparty20,nstudy20;cout“请选择是任课教师(输入 1),行政人员(输入 2)还是行政人员兼职教师(输入 3): “ntype;cout“请输入编号为“number“的员工信息“endl; cout“输入姓名:“nname;cout“输入性别:“nsex;cout“输入年龄:“nage;cout“输入政治面貌:群众还是党员?“nparty;cout“输入学历:小学,初中,高中,专科,本科,硕士,博士:“nstudy;cout“下面计算工资:“endl; if(ntype=1) teacher t1;np
39、ay=t1.getpay; else if(ntype=2) staff s1;npay=s1.getpay; else if(ntype=3)coutgetnext!=NULL)p=p-getnext; p-setnext(newperson(nnum,nname,nsex,nage,nparty,nstudy,npay,ntype,p-getnext);bool school:findnum/按编号查询员工信息int id;person *ahead=myfirst; person *follow=ahead;cout“请输入员工的编号:“id;if(ahead=NULL)cout“本校暂无员工信息!“getnum=id)ahead-output;return true; elsefollow=ahead;ahead=ahead-getnext; cout“本校无此员工信息!“endl; return false;bool school:findname( )/按姓名查询员工信息char tmpname20; person *ahead=myfirst; person *follow=ahead;couttmpname; if(ahead=NULL)cout“本校暂无员工信息!“endl;return false; elsewhile(ahead!=NUL