您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 人事档案/员工关系 > 学校人员信息管理系统
1一、设计目的课程设计是学习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()函数。在屏幕上打印所有的数据记录;打印时,先打印学生的记录,后打印教师的记录。并且按学生(教工号)升序打印。2(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.系统类的程序关系32.类的主要框架描述***************************************************************************基类:***************************************************************************classpeople{public:intnum;charname[30];charsex[15];charmajor_or_department[50];chardate[30];intage;people(intn,charnam[30],chars[15],charo[50],chard[30],inta){num=n;strcpy(name,nam);strcpy(sex,s);strcpy(major_or_department,o);strcpy(date,d);age=a;}};***************************************************************************教师类:***************************************************************************classteacher:virtualpublicpeople{public:4teacher(intn=0,charnam[30]=,chars[15]=,charo[50]=,chard[30]=,inta=0,charj[50]=,doublesa=0):people(n,nam,s,o,d,a),salary(sa){strcpy(job,j);}charjob[50];doublesalary;friendistream&operator(istream&is,teacher&tea);//重载运算符函数声明friendostream&operator(ostream&os,teacher&tea);//重载运算符函数声明voidAddData();voidDisplayData();}tea[10];***************************************************************************学生类:***************************************************************************classstudent:virtualpublicpeople{public:student(intn=0,charnam[30]=,chars[15]=,charo[50]=,chard[15]=,inta=0,intc=0,inte=0,intm=0):people(n,nam,s,o,d,a),score_chinese(c),score_english(e),score_mathematices(m){}intscore_chinese;intscore_english;intscore_mathematices;friendistream&operator(istream&is,student&stu);//重载运算符函数声明friendostream&operator(ostream&os,student&stu);//重载运算符函数声明voidAddData();voidDisplayData();}stu[10];***************************************************************************教师类功能函数***************************************************************************templatetypenameQQMax(Q*x,intlen)voidTAddData()//对教师类对象的添加功能函数voidTDeleteData()//对教师类对象的删除功能函数5voidTUpdateData()//对教师类对象的修改功能函数voidTSearchData_num()//按教工号查询教师类对象voidTSearchData_nam()//按姓名查询教师类对象voidTSearchData_sex()//按性别查询教师类对象voidTFindMaxData()//对教师类对象的最高工资查询功能函数voidTDisplayData()//对教师类对象按教工号升序排序打印功能函数voidTsave()//对教师类对象的保存功能函数voidTload()//对教师类对象的读取功能函数***************************************************************************学生类功能函数***************************************************************************templatetypenameQQMax(Q*x,intlen)voidSAddData()//对学生类对象的添加功能函数voidSDeleteData()//对学生类对象的删除功能函数voidSUpdateData()//对学生类对象的修改功能函数voidSSearchData_num()//按学号查询学生类对象voidSSearchData_nam()//按姓名查询学生类对象voidSSearchData_sex()//按性别查询学生类对象voidSFindMaxData()//对学生类对象的最高英语成绩查询功能函数voidSDisplayData()//对学生类对象按学号升序排序打印功能函数voidSsave()//对学生类对象的保存功能函数voidSload()//对学生类对象的读取功能函数***************************************************************************功能函数***************************************************************************voidShowmenu()voidMenu()voidMenu1()voidAddData()//添加功能函数voidDeleteData()//删除功能函数voidUpdateData()//修改功能函数voidSearchData()//查询功能函数voidFindMaxDataS()//英语成绩最高学生查询函数voidFindMaxDataT()//工资最高教师查询函数voidDisplayData()//显示全部人员记录函数voidsave()//保存功能函数voidload()//读取功能函数intmain()四、系统测试用例主菜单界面6异常处理教工号学号输入重复报错按升序排列所有记录7保存记录五、错误记录及原因分析1.字符数组直接赋值发生错误错误原因分析:字符数组不可直接赋值,而要用stycpy函数进行赋值。2.在派生类析构函数中初始化出现问题。错误原因分析:要给形参赋初值。3.排序功能有错误错误原因分析:排序功能函数只有一个循环,当没有按顺序输入教工号或学号时,不能输出排序。要在循环外再加一个循环进行控制。4.添加记录输入重复教工号或学号时不会显示输入有误错误原因分析:当输入有误时再次调用添加函数,添加函数里有清屏函数,会将错误提示清屏掉。应再从主函数中调用添加函数。8六、源程序#includeiostream#includestring#includefstream#includestdlib.h#includewindows.husingnamespacestd;intmain();staticintT=0;//用于标记老师类对象的个数staticintS=0;//用于标记学生类对象的个数classpeople{public:intnum;charname[30];charsex[15];charmajor_or_department[50];chardate[30];intage;people(intn,charnam[30],chars[15],charo[50],chard[30],inta){num=n;strcpy(name,nam);strcpy(sex,s);strcpy(major_or_department,o);strcpy(date,d);age=a;}};classteacher:virtualpublicpeople9{public:teacher(intn=0,charnam[30]=,char
本文标题:学校人员信息管理系统
链接地址:https://www.777doc.com/doc-3507491 .html