员工管理_某学校人员信息管理教材_第1页
员工管理_某学校人员信息管理教材_第2页
员工管理_某学校人员信息管理教材_第3页
员工管理_某学校人员信息管理教材_第4页
员工管理_某学校人员信息管理教材_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

一、设计目的课程设计是学习C+程序设计的一个重要环节。通过课程设计的综合训练,可以使学生在学习理论知识并在实验中进行了一系列基本训练的基础上,进一步加强学生对实际问题分析、编程和动手能力的提高,强化综合应用能力,扩充知识,开阔视野。学生在熟练运用Visual C+ 6.0以后,通过使用Visual C+ 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.系统类的程序关系2.类的主要框架描述*基类:*class peoplepublic:int num;char name30;char sex15;char major_or_department50;char date30;int age;people(int n,char nam30,char s15,char o50,char d30,int a)num=n;strcpy(name,nam);strcpy(sex,s);strcpy(major_or_department,o);strcpy(date,d);age=a;* 教师类:*class teacher:virtual public peoplepublic: teacher(int n=0,char nam30=,char s15=,char o50=,char d30=,int a=0,char j50=,double sa=0):people(n,nam,s,o,d,a),salary(sa)strcpy(job,j);char job50;double salary;friend istream &operator( istream &is,teacher &tea);/重载运算符函数声明friend ostream &operator( ostream &os,teacher &tea) ;/重载( istream &is,student &stu);/重载运算符函数声明friend ostream &operator( ostream &os,student &stu);/重载运算符函数声明 void AddData();void DisplayData();stu10;*教师类功能函数*template Q Max(Q * x,int len) void TAddData()/对教师类对象的添加功能函数void TDeleteData()/对教师类对象的删除功能函数void TUpdateData()/对教师类对象的修改功能函数void TSearchData_num()/按教工号查询教师类对象void TSearchData_nam()/按姓名查询教师类对象void TSearchData_sex()/按性别查询教师类对象void TFindMaxData()/对教师类对象的最高工资查询功能函数void TDisplayData()/对教师类对象按教工号升序排序打印功能函数void Tsave()/对教师类对象的保存功能函数void Tload()/对教师类对象的读取功能函数*学生类功能函数*template Q Max(Q * x,int len) void SAddData()/对学生类对象的添加功能函数void SDeleteData()/对学生类对象的删除功能函数void SUpdateData()/对学生类对象的修改功能函数void SSearchData_num()/按学号查询学生类对象void SSearchData_nam()/按姓名查询学生类对象void SSearchData_sex()/按性别查询学生类对象void SFindMaxData()/对学生类对象的最高英语成绩查询功能函数void SDisplayData()/对学生类对象按学号升序排序打印功能函数void Ssave()/对学生类对象的保存功能函数void Sload()/对学生类对象的读取功能函数*功能函数*void Showmenu() void Menu()void Menu1()void AddData()/添加功能函数void DeleteData()/删除功能函数void UpdateData()/修改功能函数void SearchData()/查询功能函数void FindMaxDataS()/英语成绩最高学生查询函数void FindMaxDataT()/工资最高教师查询函数void DisplayData()/显示全部人员记录函数void save()/保存功能函数void load()/读取功能函数int main()四、系统测试用例主菜单界面异常处理教工号学号输入重复报错按升序排列所有记录保存记录五、错误记录及原因分析1.字符数组直接赋值发生错误错误原因分析:字符数组不可直接赋值,而要用stycpy函数进行赋值。2.在派生类析构函数中初始化出现问题。错误原因分析:要给形参赋初值。3.排序功能有错误错误原因分析:排序功能函数只有一个循环,当没有按顺序输入教工号或学号时,不能输出排序。要在循环外再加一个循环进行控制。4.添加记录输入重复教工号或学号时不会显示输入有误错误原因分析:当输入有误时再次调用添加函数,添加函数里有清屏函数,会将错误提示清屏掉。应再从主函数中调用添加函数。六、源程序#include#include#include#include#includeusing namespace std;int main();static int T=0;/用于标记老师类对象的个数static int S=0;/用于标记学生类对象的个数class peoplepublic:int num;char name30;char sex15;char major_or_department50;char date30;int age;people(int n,char nam30,char s15,char o50,char d30,int a)num=n;strcpy(name,nam);strcpy(sex,s);strcpy(major_or_department,o);strcpy(date,d);age=a;class teacher:virtual public peoplepublic: teacher(int n=0,char nam30=,char s15=,char o50=,char d30=,int a=0,char j50=,double sa=0):people(n,nam,s,o,d,a),salary(sa)strcpy(job,j);char job50;double salary;friend istream &operator( istream &is,teacher &tea)/重载运算符函数声明 istea.num; is.getline(,30,n); /使其能够读入字符串中的空格 istea.sex; istea.major_or_department; istea.date; istea.age; istea.job; istea.salary;return is; /退出函数friend ostream &operator( ostream &os,teacher &tea) /重载运算符函数声明 ostea.numn; n; ostea.sexn; ostea.major_or_departmentn; ostea.daten; ostea.agen;ostea.jobn;ostea.salaryn;return os; /退出函数 void AddData()system(cls);coutnum;for(int k=1;k11;k+)if(num=k)k=11;if(k=11)cout请输入10以内的教工号endl;AddData();coutname;coutsex;coutmajor_or_department;coutdate;coutage;coutjob;coutsalary;try /处理教师工资合法性if (salary0)throw salary;catch(double )cout输入有误,请重新输入endl;main();void DisplayData()cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * endl;cout教工号 姓名 性别 工作部门 出生时间 年龄 职称 工资endl;cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * endl;coutnumtnametsextmajor_or_departmenttdatetagetjobtsalaryendl;cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * endl;void save(ofstream &outf)outf教工号 姓名 性别 工作部门 出生时间 年龄 职称 工资endl;outfnumtnametsextmajor_or_departmenttdatetagetjobtsalarynumnamesexmajor_or_departmentdateagejobsalary;tea10;template Q Max(Q * x,int len) Q max=x0; for(int i=1;ixi? max:xi; return i; void TAddData()/对教师类对象的添加功能函数teaT.AddData();for(int i=0;i10;i+)if(i!=T&teaT.num=teai.num)cout输入教工号重复,请重新输入!endl;main();cout添加记录成功!endl;teaT.DisplayData();T+;void TDeleteData()/对教师类对象的删除功能函数int n;if(T=0)cout没有可删除的记录!endl;elsecoutn;for(int i=0;iT;i+)if(teai.num=n) for(;iT;i+)teai=teai+1;T-;cout成功删除记录!endl;void TUpdateData()/对教师类对象的修改功能函数int n;if(T=0)cout没有可删除的记录!endl;elsecoutn;for(int i=0;iT;i+)if(teai.num=n)cout原有的记录:endl;teai.DisplayData();cout请输入新的记录:endl;coutteai.job; coutteai.salary;cout新的记录:endl;teai.DisplayData();void TSearchData_num()/按教工号查询教师类对象int n;coutn;for(int i=0;iT;i+)if(teai.num=n)teai.DisplayData();i=T;if(i=T)cout查询的记录不存在,请重新输入!endl;TSearchData_num();void TSearchData_nam()/按姓名查询教师类对象char nam_s30;cout请输入教师名字:nam_s;for(int j=0;jT;j+)if(strcmp(,nam_s)=0)teaj.DisplayData();j=T;if(j=T)cout查询的记录不存在,请重新输入!endl;TSearchData_nam();void TSearchData_sex()/按性别查询教师类对象char sex_s15;cout请输入教师性别:sex_s;for(int p=0;pT;p+)if(strcmp(teap.sex,sex_s)=0)teap.DisplayData();p=T;if(p=T)cout查询的记录不存在,请重新输入!endl;TSearchData_sex();void TFindMaxData()/对教师类对象的最高工资查询功能函数int nu;double t10;for(int a=0;aT;a+)ta=teaa.salary;nu=Max(t,T);teanu-1.DisplayData();void TDisplayData()/对教师类对象按教工号升序排序打印功能函数for(int i=1;i11;i+)for(int c=0;cT;c+)if(teac.num=i)teac.DisplayData();void Tsave()/对教师类对象的保存功能函数ofstream outf(c:teacher.dat,ios:out);for(int i=0;iT;i+)teai.save(outf);outf.close();cout成功保存记录!endl;void Tload()/对教师类对象的读取功能函数ifstream inf(c:teacher_ext.dat,ios:out);for(int i=0;iT;i+)teai.load(inf);inf.close();cout成功读取记录!endl;cout所有教师记录:endl;for(i=0;i( istream &is,student &stu)/重载运算符函数声明 isstu.num; is.getline(,30,n); /使其能够读入字符串中的空格 isstu.sex; isstu.major_or_department; isstu.date; isstu.age; isstu.score_chinese; isstu.score_english; isstu.score_mathematices; return is; /退出函数friend ostream &operator( ostream &os,student &stu)/重载运算符函数声明 osstu.numn; n; osstu.sexn; osstu.major_or_departmentn; osstu.daten; osstu.agen; osstu.score_chinesen; osstu.score_englishn; osstu.score_mathematicesn; return os; /退出函数 void AddData() system(cls);coutnum;for(int k=1;k11;k+)if(num=k)k=11;if(k=11)cout请输入10以内的学号endl;AddData();coutname;coutsex;coutmajor_or_department;coutdate;coutage;coutscore_chinese;cinscore_english;cinscore_mathematices;void DisplayData()cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl;cout学号 姓名 性别 专业 出生时间 年龄 语文成绩 英语成绩 数学成绩endl;cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl;coutnumtnametsextmajor_or_departmenttdatetagetscore_chinesetscore_englishtscore_mathematicesendl;cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl;void save(ofstream &outf)outf学号 姓名 性别 专业 出生时间 年龄 语文成绩 英语成绩 数学成绩endl;outfnumtnametsextmajor_or_departmenttdatetagetscore_chinesetscore_englishtscore_mathematicesnumnamesexmajor_or_departmentdateagescore_chinesescore_englishscore_mathematices; stu10;void SAddData()/对学生类对象的添加功能函数stuS.AddData();for(int i=0;i10;i+)if(i!=S&stuS.num=stui.num)cout输入学号重复,请重新输入!endl; main();cout添加记录成功!endl;stuS.DisplayData();S+;void SDeleteData()/对学生类对象的删除功能函数int n;if(S=0)cout没有可删除的记录!endl;elsecoutn;for(int i=0;iS;i+)if(stui.num=n) for(;iS;i+)stui=stui+1;S-;cout成功删除记录!endl;void SUpdateData()/对学生类对象的修改功能函数 int n;if(S=0)cout没有可删除的记录!endl;elsecoutn;for(int i=0;iS;i+)if(stui.num=n)cout原有的记录:endl;stui.DisplayData();cout请输入新的记录:endl;coutstui.score_chinese;cinstui.score_english;cinstui.score_mathematices;cout新的记录:endl;stui.DisplayData();void SSearchData_num()/按学号查询学生类对象int n;coutn;for(int i=0;iS;i+)if(stui.num=n)stui.DisplayData();i=S;if(i=S)cout查询的记录不存在,请重新输入!endl;SSearchData_num();void SSearchData_nam()/按姓名查询学生类对象char nam_s15;cout请输入学生名字:nam_s;for(int j=0;jS;j+)if(=nam_s) stuj.DisplayData();j=S;if(j=S)cout查询的记录不存在,请重新输入!endl;SSearchData_nam();void SSearchData_sex()/按性别查询学生类对象char sex_s15;cout请输入学生性别:sex_s;for(int p=0;pS;p+)if(stup.sex=sex_s)stup.DisplayData();p=S;if(p=S)cout查询的记录不存在,请重新输入!endl;SSearchData_sex();void SFindMaxData()/对学生类对象的最高英语成绩查询功能函数int nu;double t10;for(int a=0;aS;a+)ta=stua.score_english;nu=Max(t,S);stunu-1.DisplayData();void SDisplayData()/对学生类对象按学号升序排序打印功能函数for(int i=1;i11;i+)for(int c=0;cS;c+)if(stuc.num=i)stuc.DisplayData();void Ssave()/对学生类对象的保存功能函数ofstream outf(c:student.dat,ios:out);for(int i=0;iS;i+)stui.save(outf);outf.close();cout成功保存记录!endl;void Sload()/对学生类对象的读取功能函数ifstream inf(c:student_ext.dat,ios:out);for(int i=0;iS;i+)stui.load(inf);inf.close();cout成功读取记录!endl;cout所有学生记录:endl;for(i=0;iS;i+)stui.DisplayData();void Showmenu() cout* * * * * * * * * * * *欢迎进入人员信息管理系统* * * * * * * * * * * *endl; cout* * 1.添加数据 * *endl;cout* * 2.删除数据 * *endl;cout* * 3.修改数据 * *endl; cout* * 4.查询记录 * *endl;cout* * 5.英语成绩最高学生查询* *endl;cout* * 6.工资最高教师查询 * *endl;cout* * 7.显示全部人员记录 * *endl;cout* * 8.保存数据 * *endl;cout* * 9.读取数据 * *endl;cout* * 10.退出系统 * *endl;cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl; void Menu()cout* * * * * * * * * *请输入操作对象* * * * * * * * * * * * * * *endl;cout* * 1.教师 * *endl; cout* * 2.学生 * *endl; cout* * 3.退出 * *endl; cout* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *endl;void Menu1()system(cls);cout* * * * * * * * * * *请输入操作对象* * * * * * * * * * * * * * *endl;cout* * 1.按教工号/学号查询 * *endl; cout* * 2.按姓名查询 * *endl; cout* * 3.按性别查询 * *endl; cout* * 4.退出 * *endl;cou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论