厦门理工学院+-学校人员信息管理系统

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《C++面向对象程序设计》课程设计报告(2012—2013学年第3学期)题目:学校人员信息管理系统专业:计算机科学与技术班级:计算机科学与技术姓名学号:DEBUG指导教师:成绩:计算机科学与技术系2012年6月21日一、设计目的课程设计是学习C++程序设计的一个重要环节。通过课程设计的综合训练,可以使学生在学习理论知识并在实验中进行了一系列基本训练的基础上,进一步加强学生对实际问题分析、编程和动手能力的提高,强化综合应用能力,扩充知识,开阔视野。学生在熟练运用VisualC++6.0以后,通过使用VisualC++6.0的训练,扩展程序设计的知识面,提高综合应用C++知识能力的要求。二、设计内容设计一个学校人员信息管理系统,可以实现对学校人事的信息管理。基本功能要求如下:(1)建立人员信息数据。包括学号(教工号)、姓名、性别、专业(工作系别部门)、出生时间、年龄。其中,1)对学生,还包括3门课的成绩(Chinese,English,Mathematics)。三门课的成绩为int型数据。2)对教师,还包括职称(如教授/副教授/讲师),工资(如1432.50)。工资为double型数据。(2)使用继承的方法构造3个类,对相应的对象放置10个学生(教师)信息。People类——虚基类Student类——派生类Teacher类——派生类(3)数据基本功能:增加数据:AddData()函数。删除数据:DeleteData()函数。根据学号(教工号),删除该人员的记录。修改数据:UpdateData()函数。对学生,根据学号,能够修改3门课的成绩;对教师,根据教工号,能够修改“职称”和“工资”。查找功能:1)SearchData()函数。要求能够根据“学号(教工号)”、“姓名”、“性别”三项实现查询,并能在屏幕上显示满足条件的数据记录。2)FindMaxData()函数。对学生,查找“English”课程成绩最高的学生记录并打印;对教师,查找“工资”最高的教师记录并打印。要求:采用函数模板实现。显示功能:DisplayData()函数。在屏幕上打印所有的数据记录;打印时,先打印学生的记录,后打印教师的记录。并且按学生(教工号)升序打印。(4)重载功能:要求对“<<”和“>>”运算符进行重载。考虑到输人学生(教工)姓名时,名字中可能引入空格,所以重载“>>”运算符时,需要满足这个要求。(5)异常处理功能:设置异常处理,对教师工资为负数的情况给出提示。(6)文件的输入输出功能:能够从文件中读入数据。外部文件为Student_ext.dat,Teacher_ext.dat。能够将数据保存到相应目录的文件中。保存数据时,分两个文件分别保存Student.dat,Teacher.dat。(7)参考系统界面如示:1-增加一位人员(教师、学生)记录2-删除一个人员记录3-修改一个人员记录4-根据“学号(教工号)”、“姓名”、“性别”查找记录5-根据人员类别(学生、教师)查找“English”课程成绩最高的学生,或最高工资的教师6-显示全部人员记录7-从外部文件追加数据8-将所有数据保存到磁盘文件9-退出系统。三、总体设计1、系统类的层次关系classpeople{//基类classstudent:virtualpublicpeople{//学生派生类classteacher:virtualpublicpeople{//老师派生类2、类的主要框架描述classpeople{//基类public:intnum;charname[30];charsex[15];charmajor_or_department[50];chardate[30];intage;voidsetpeople(int&z){if(z==1){cout学号;}else{cout工号;}cinnum;cout名字;cinname;cout性别;cinsex;if(z==1){cout专业;}else{cout部门;}cinmajor_or_department;cout出生年月日;cindate;cout年龄;cinage;}};classstudent:virtualpublicpeople{//学生派生类public:intscore_chinese;intscore_english;intscore_mathematices;charxuanxiu[50];intscore_xuanxiu;voidsetstudent(int&z){setpeople(z);cout语文;cinscore_chinese;cout英语;cinscore_english;cout数学;cinscore_mathematices;cout选修;cinxuanxiu;cout选修成绩;cinscore_xuanxiu;}}stud[100];classteacher:virtualpublicpeople{//老师派生类public:charjob[50];doublesalary;charlesson[50];voidsetteacher(int&z){setpeople(z);cout职称;cinjob;cout工资;cinsalary;cout课程;cinlesson;}}teacher1[100];四、系统测试用例1、增加数据和修改数据和删除数据功能通过学号或工号,姓名,和性别查找老师或学生的信息学生选课输出英语成绩最高的学生和工资最高的老师显示所有数据学生数学平均成绩保存数据到磁盘再次运行时,从磁盘中读取数据五、错误记录及原因分析1、错误的记录主要在保存和读取数据的时候运到的,由于要求先保存数据再读取数据,这样就让我忽视了一点就是当你要读取数据到相应的类里面的是时候,你保存的数据也要是该类的类型,这样才能轻易的读取,最好选择用二进制的保存方法这样可以对整个类型的对象进行保存读取的时候也可以直接将数据赋值给对象,使读取更方便简单。2、排序功能有错误错误原因分析:排序功能函数只有一个循环,当没有按顺序输入教工号或学号时,不能输出排序。要在循环外再加一个循环进行控制。由于是升序排序,当后面一个小于前面一个时候,我是拿后面的和前面的交换,但我忘记了判断只有一个学生或老师时不用排序和判断,这时判断后交换反而是会错的,这样就会出错。于是我加了一个判断人数为一的时候是不用判断的。3.让名字可以接收空格也是错误百出,首先是要对缓存清理,然后书上的cin.getchar()才派上用场,不然你下次输入时肯定会出错,缓存清理要用到fflush(stdin);std:cin.sync();同学提到的,就解决了名字输入空格的问题。六、源程序#includeiostream#includestring#includefstream#includestdlib.h#includewindows.husingnamespacestd;staticintS=0;//储存学生的人数staticintT=0;//储存老师的人数staticinttemp=0;//用来判断一段代码是否有运行过intmain();classpeople{//基类public:intnum;charname[30];charsex[15];charmajor_or_department[50];chardate[30];intage;voidsetpeople(int&z){if(z==1){cout学号:;}else{cout工号:;}cinnum;fflush(stdin);std:cin.sync();cout名字:;cin.getline(name,30,'\n');cout性别:;cinsex;if(z==1){cout专业:;}else{cout部门:;}cinmajor_or_department;cout出生年月日:;cindate;cout年龄:;cinage;}};classstudent:virtualpublicpeople{//学生派生类public:intscore_chinese;intscore_english;intscore_mathematices;charxuanxiu[50];intscore_xuanxiu;voidsetstudent(int&z){setpeople(z);cout语文:;cinscore_chinese;cout英语:;cinscore_english;cout数学:;cinscore_mathematices;cout选修:;cinxuanxiu;cout选修成绩:;cinscore_xuanxiu;}}stud[100];classteacher:virtualpublicpeople{//老师派生类public:charjob[50];doublesalary;charlesson[50];voidsetteacher(int&z){setpeople(z);cout职称:;cinjob;cout工资:;cinsalary;cout课程:;cinlesson;}}teacher1[100];voidAddDate(){//增加一条数据的函数inti=1;loop1:while(i){system(cls);cout1学生endl;cout2老师endl;cout3键退出endl;intz;cinz;switch(z){case1:system(cls);{intg=S+1;for(inti=S;ig;i++){stud[i].setstudent(z);::S++;}for(intj=0;jS-1;j++){if(stud[j].num==stud[i-1].num){S--;cout学号输入一样重新添加endl;getchar();getchar();gotoloop1;}}cout增加成功endl;getchar();getchar();}break;case2:system(cls);{intg=T+1;for(inti=T;ig;i++){teacher1[i].setteacher(z);::T++;}for(intj=0;jT-1;j++){if(teacher1[j].num==teacher1[i-1].num){T--;cout工号输入一样重新添加endl;getchar();getchar();gotoloop1;}}try//处理教师工资合法性{if(teacher1[i-1].salary0){throwteacher1[i-1].salary;}}catch(double){cout工资输入有误,请重新输入endl;getchar();getchar();T--;gotoloop1;}cout增加成功endl;getchar();getchar();}break;case3:system(cls);i=0;break;}}main();}voidDeleteData()//删除功能函数{system(cls);cout1学生endl;cout2老师endl;cout3键退出endl;intz;cinz;system(cls);if(z==1){cout输入学号;intn;cinn;for(inti=0;iS;i++){if(stud[i].num==n){for(;iS;i++)stud[i]=stud[i+1];S--;cout删除成功endl;temp=12;}//temp用来判断删除记录有没运行,有运行就赋值为12}if

1 / 21
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功