1 / 20
文档名称:

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

格式:pdf   大小:592KB   页数:20页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

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

上传人:baba 2023/3/26 文件大小:592 KB

下载得到文件列表

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

文档介绍

文档介绍:该【厦门理工学院+-学校人员信息管理系统 】是由【baba】上传分享,文档一共【20】页,该文档可以免费在线阅读,需要了解更多关于【厦门理工学院+-学校人员信息管理系统 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:.
《C++面向对象程序设计》
课程设计报告
(2012—2013学年第3学期)
题目:学校人员信息管理系统
专业:计算机科学与技术
班级:计算机科学与技术
姓名学号:DEBUG
指导教师:
成绩:
计算机科学与技术系
2012年6月21日:.
一、设计目的
课程设计是学****C++程序设计的一个重要环节。通过课程设计的综合训练,可以使学生
在学****理论知识并在实验中进行了一系列基本训练的基础上,进一步加强学生对实际问题分
析、编程和动手能力的提高,强化综合应用能力,扩充知识,开阔视野。学生在熟练运用
VisualC++,通过使用VisualC++,扩展程序设计的知识面,提高综
合应用C++知识能力的要求。
二、设计内容
设计一个学校人员信息管理系统,可以实现对学校人事的信息管理。基本功能要求如下:
(1)建立人员信息数据。包括学号(教工号)、姓名、性别、专业(工作系别部门)、
出生时间、年龄。其中,
1)对学生,还包括3门课的成绩(Chinese,English,Mathematics)。三门课的
成绩为int型数据。
2)对教师,还包括职称(如教授/副教授/讲师),工资()。工资为double
型数据。
(2)使用继承的方法构造3个类,对相应的对象放置10个学生(教师)信息。
➢People类——虚基类
➢Student类——派生类
➢Teacher类——派生类
(3)数据基本功能:
➢增加数据:AddData()函数。
➢删除数据:DeleteData()函数。根据学号(教工号),删除该人员的记录。
➢修改数据:UpdateData()函数。对学生,根据学号,能够修改3门课的成绩;
对教师,根据教工号,能够修改“职称”和“工资”。
➢查找功能:
1)SearchData()函数。要求能够根据“学号(教工号)”、“姓名”、“性别”
三项实现查询,并能在屏幕上显示满足条件的数据记录。
2)FindMaxData()函数。对学生,查找“English”课程成绩最高的学生记录
并打印;对教师,查找“工资”最高的教师记录并打印。要求:采用函数
模板实现。
➢显示功能:DisplayData()函数。在屏幕上打印所有的数据记录;打印时,先
打印学生的记录,后打印教师的记录。并且按学生(教工号)升序打印。
:.
(4)重载功能:
➢要求对“<<”和“>>”运算符进行重载。考虑到输人学生(教工)姓名时,
名字中可能引入空格,所以重载“>>”运算符时,需要满足这个要求。
(5)异常处理功能:
➢设置异常处理,对教师工资为负数的情况给出提示。
(6)文件的输入输出功能:
➢能够从文件中读入数据。,。
➢能够将数据保存到相应目录的文件中。保存数据时,分两个文件分别保存
,。
(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<<"工号";}cin>>num;
cout<<"名字";cin>>name;
cout<<"性别";cin>>sex;
if(z==1){cout<<"专业";}
else{cout<<"部门";}cin>>major_or_department;
cout<<"出生年月日";cin>>date;
cout<<"年龄";cin>>age;
}
};
classstudent:virtualpublicpeople{//学生派生类
public:
intscore_chinese;
intscore_english;
intscore_mathematices;
charxuanxiu[50];
intscore_xuanxiu;
voidsetstudent(int&z)
{
setpeople(z);
cout<<"语文";cin>>score_chinese;
cout<<"英语";cin>>score_english;
cout<<"数学";cin>>score_mathematices;
cout<<"选修";cin>>xuanxiu;
cout<<"选修成绩";cin>>score_xuanxiu;
}
}stud[100];
classteacher:virtualpublicpeople{//老师派生类
public:
charjob[50];
doublesalary;
charlesson[50];
voidsetteacher(int&z)
{setpeople(z);
cout<<"职称";cin>>job;
cout<<"工资";cin>>salary;
cout<<"课程";cin>>lesson;
}
}teacher1[100];
四、系统测试用例
1、
增加数据和修改数据和删除数据功能:.
通过学号或工号,姓名,和性别查找老师或学生的信息
学生选课
输出英语成绩最高的学生和工资最高的老师
显示所有数据
学生数学平均成绩
保存数据到磁盘
再次运行时,从磁盘中读取数据:.
五、错误记录及原因分析
1、
错误的记录主要在保存和读取数据的时候运到的,由于要求先保存数据再读取数据,这样
就让我忽视了一点就是当你要读取数据到相应的类里面的是时候,你保存的数据也要是该
类的类型,这样才能轻易的读取,最好选择用二进制的保存方法这样可以对整个类型的对
象进行保存读取的时候也可以直接将数据赋值给对象,使读取更方便简单。
2、
排序功能有错误
错误原因分析:排序功能函数只有一个循环,当没有按顺序输入教工号或学号时,不能输
出排序。要在循环外再加一个循环进行控制。由于是升序排序,当后面一个小于前面一个
时候,我是拿后面的和前面的交换,但我忘记了判断只有一个学生或老师时不用排序和判
断,这时判断后交换反而是会错的,这样就会出错。于是我加了一个判断人数为一的时候
是不用判断的。
3.
让名字可以接收空格也是错误百出,首先是要对缓存清理,()才派上
用场,不然你下次输入时肯定会出错,缓存清理要用到fflush(stdin);std:();同学提到
的,就解决了名字输入空格的问题。
六、源程序
#include<iostream>
#include<string>
#include<fstream>
#include<>
#include<>
usingnamespacestd;
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<<"工号:";}cin>>num;
fflush(stdin);
std:();
cout<<"名字:";(name,30,'\n');
cout<<"性别:";cin>>sex;
if(z==1){cout<<"专业:";}
else{cout<<"部门:";}cin>>major_or_department;
cout<<"出生年月日:";cin>>date;
cout<<"年龄:";cin>>age;
}
};
classstudent:virtualpublicpeople{//学生派生类
public:
intscore_chinese;
intscore_english;
intscore_mathematices;
charxuanxiu[50];
intscore_xuanxiu;
voidsetstudent(int&z)
{
setpeople(z);
cout<<"语文:";cin>>score_chinese;
cout<<"英语:";cin>>score_english;
cout<<"数学:";cin>>score_mathematices;
cout<<"选修:";cin>>xuanxiu;
cout<<"选修成绩:";cin>>score_xuanxiu;
}
}stud[100];
classteacher:virtualpublicpeople{//老师派生类
public:
charjob[50];
doublesalary;
charlesson[50];
voidsetteacher(int&z)
{setpeople(z);
cout<<"职称:";cin>>job;
cout<<"工资:";cin>>salary;
cout<<"课程:";cin>>lesson;
}
}teacher1[100];
voidAddDate(){//增加一条数据的函数
inti=1;
loop1:
while(i)
{system("cls");
cout<<"1学生"<<endl;
cout<<"2老师"<<endl;:.
cout<<"3键退出"<<endl;
intz;
cin>>z;
switch(z)
{
case1:system("cls");
{intg=S+1;
for(inti=S;i<g;i++)
{stud[i].setstudent(z);
::S++;
}
for(intj=0;j<S-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;i<g;i++)
{
teacher1[i].setteacher(z);
::T++;
}
for(intj=0;j<T-1;j++)
{
if(teacher1[j].num==teacher1[i-1].num){T--;cout<<"工号输入一样重新添
加"<<endl;getchar();getchar();gotoloop1;}
}
try//处理教师工资合法性
{if(teacher1[i-1].salary<0)
{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");
cout<<"1学生"<<endl;
cout<<"2老师"<<endl;
cout<<"3键退出"<<endl;
intz;
cin>>z;
system("cls");
if(z==1)
{
cout<<"输入学号";
intn;
cin>>n;
for(inti=0;i<S;i++)
{
if(stud[i].num==n){
for(;i<S;i++)
stud[i]=stud[i+1];
S--;cout<<"删除成功"<<endl;temp=12;}//temp用来判断删除记录有没运
行,有运行就赋值为12
}
if(temp!=12){cout<<"没有该记录"<<endl;}
temp=0;
}
if(z==2)
{
cout<<"输入工号";
intm;
cin>>m;
for(inti=0;i<T;i++)
{
if(teacher1[i].num==m){
for(;i<T;i++)
teacher1[i]=teacher1[i+1];
cout<<"删除成功"<<endl;T--;temp=12;}//temp用来判断删除记录有没运
行,有运行就赋值为12
}
if(temp!=12){cout<<"没有该记录"<<endl;}
temp=0;
}
if(z==3){main();}
getchar();getchar();
main();
}
voidUpdateDate()//修改数据记录函数
{:.
cout<<"1学生"<<endl;
cout<<"2老师"<<endl;
cout<<"3键退出"<<endl;
intz;
cin>>z;
if(z==1)
{system("cls");
cout<<"输入学号";
intn;
cin>>n;
for(inti=0;i<S;i++)
{
if(stud[i].num==n){cout<<"修改为:"<<endl;stud[i].setstudent(z);cout<<"
修改成功"<<endl;temp=12;}//temp用来判断修改记录有没运行,有运行就赋值为12
}
if(temp!=12){cout<<"没有该数据记录"<<endl;}
temp=0;
}
if(z==2)
{system("cls");
cout<<"输入工号";
intn;
cin>>n;
for(inti=0;i<T;i++)
{
if(teacher1[i].num==n){cout<<"修改
为:"<<endl;teacher1[i].setteacher(z);cout<<"修改成功"<<endl;temp=12;}//temp用来判断
修改记录有没运行,有运行就赋值为12
}
if(temp!=12){cout<<"没有该数据记录"<<endl;}
temp=0;
}
if(z==3){main();}
getchar();
getchar();
main();
}
voidSearchData()//查找函数
{
intn;
cout<<"请输入学号或教工号:";//查找有个人信息要有三个条件学号或教工,名字,性
别。
cin>>n;
charnam_s[30];
cout<<"请输入名字:";
cin>>nam_s;
charsex_s[15];
cout<<"请输入性别:";
cin>>sex_s;
for(inti=0;i<T;i++)
{
if(teacher1[i].num==n&&strcmp(teacher1[i].name,nam_s)==0&&strcmp(teacher1[i].se:.
x,sex_s)==0)
{
cout<<"老师:"<<endl;
cout<<"工号:"<<teacher1[i].num<<"姓名:"<<teacher1[i].name<<"性
别:"<<teacher1[i].sex<<"部门:"<<teacher1[i].major_or_department;
cout<<"出生年月日:"<<teacher1[i].date<<"年龄:"<<teacher1[i].age<<"职
称:"<<teacher1[i].job<<"工资:"<<teacher1[i].salary<<"课程:"<<teacher1[i].lesson;
cout<<endl;temp=12;
}
}
for(intj=0;j<S;j++)
{
if(stud[j].num==n&&strcmp(stud[j].name,nam_s)==0&&strcmp(stud[j].sex,sex_s)==0)
{
cout<<"学生:"<<endl;
cout<<"学号:"<<stud[j].num<<"姓名:"<<stud[j].name<<"性
别:"<<stud[j].sex<<"专业:"<<stud[j].major_or_department;
cout<<"出生年月日:"<<stud[j].date<<"年龄:"<<stud[j].age<<"语
文:"<<stud[j].score_chinese<<"英语:"<<stud[j].score_english<<"数
学:"<<stud[j].score_mathematices<<"选修:"<<stud[j].xuanxiu<<"选修成
绩:"<<stud[j].score_xuanxiu;
cout<<endl;temp=12;
}
}
if(temp!=12){cout<<"没有这个人的信息"<<endl;temp=0;}
getchar();
getchar();
main();
}
voidFindLesson()//选课的函数
{
chara[50];
cout<<"输入想选修的课程或上选修课老师的名字";
cin>>a;
for(inti=0;i<T;i++)
{if(strcmp(teacher1[i].lesson,a)==0||strcmp(teacher1[i].name,a)==0)
{
cout<<"教这门的教师是:";
cout<<"工号:"<<teacher1[i].num<<"姓名:"<<teacher1[i].name<<"性
别:"<<teacher1[i].sex<<"部门:"<<teacher1[i].major_or_department;
cout<<"出生年月日:"<<teacher1[i].date<<"年龄:"<<teacher1[i].age<<"职
称:"<<teacher1[i].job<<"工资:"<<teacher1[i].salary<<"课程:"<<teacher1[i].lesson;
cout<<endl;temp=12;
}
}
if(temp!=12){cout<<"没有教这门的教师"<<endl;temp=0;getchar();getchar();main();}
cout<<"输入你的学号"<<endl;
intx;
cin>>x;
for(intj=0;j<S;j++)
{
if(stud[j].num==x){:.
strcpy(stud[j].xuanxiu,teacher1[i-1].lesson);
cout<<"输入选修课成绩"<<endl;cin>>stud[j].score_xuanxiu;
cout<<"输出选课成功"<<endl;
}
}
getchar();
getchar();
main();
}
template<typenameQ>
doubleMax(Qj)
{
doublemax=0;
if(teacher1[j-1].salary<teacher1[j].salary)
{
max=teacher1[j].salary;
}
returnmax;
}
voidFindMaxDataT()//查找最高英语分数的学生和最高工资的教师
{
doublemax=teacher1[0].salary;
for(intj=1;j<T;j++)
{
max=Max(j);
}
cout<<"工资最高的教师"<<endl;
for(inti=0;i<T;i++)
{if(teacher1[i].salary==max)
{
cout<<"工号:"<<teacher1[i].num<<"姓名:"<<teacher1[i].name<<"性
别:"<<teacher1[i].sex<<"部门:"<<teacher1[i].major_or_department;
cout<<"出生年月日:"<<teacher1[i].date<<"年龄:"<<teacher1[i].age<<"职
称:"<<teacher1[i].job<<"工资:"<<teacher1[i].salary<<"课程:"<<teacher1[i].lesson;
cout<<endl;
}
}
}
template<typenameQ>
doubleSMax(Qj)
{
doublemax=0;
if(stud[j-1].score_english<stud[j].score_english)
{
max=stud[j].score_english;
}
returnmax;
}
voidFindMaxDataS()
{:.
intmax=stud[0].score_english;
for(inti=1;i<S;i++)
{
max=SMax(i);
}
cout<<"英语成绩最高的是:"<<endl;
for(intj=0;j<S;j++)
{if(stud[j].score_english==max)
{
cout<<"学号:"<<stud[j].num<<"姓名:"<<stud[j].name<<"性
别:"<<stud[j].sex<<"专业:"<<stud[j].major_or_department;
cout<<"出生年月日:"<<stud[j].date<<"年龄"<<stud[j].age<<"语
文:"<<stud[j].score_chinese<<"英语:"<<stud[j].score_english<<"数
学:"<<stud[j].score_mathematices<<"选修:"<<stud[j].xuanxiu<<"选修成
绩:"<<stud[j].score_xuanxiu;
cout<<endl;
}
}
FindMaxDataT();
getchar();
getchar();
main();
}
voidDisplayData()//显示所有的学生和教师的信息
{
for(intx=0;x<S;x++)
{if(S==1)break;
for(inty=0;y<S-1;y++)
{
if(stud[y].num>stud[y+1].num)
{studenttem;
tem=stud[y];
stud[y]=stud[y+1];
stud[y+1]=tem;
}
}
}
for(intj=0;j<S;j++)
{cout<<"学生"<<j+1<<endl;
cout<<"学号:"<<stud[j].num<<"姓名:"<<stud[j].name<<"性
别:"<<stud[j].sex<<"专业:"<<stud[j].major_or_department;
cout<<"生日:"<<stud[j].date<<"年龄:"<<stud[j].age<<"语
文:"<<stud[j].score_chinese<<"英语:"<<stud[j].score_english<<"数
学:"<<stud[j].score_mathematices<<"选修:"<<stud[j].xuanxiu<<"选修成绩
"<<stud[j].score_xuanxiu;
cout<<endl;
}
for(intg=0;g<T;g++)
{if(T==1)break;
for(inty=0;y<T-1;y++)
{:.
if(teacher1[y].num>teacher1[y+1].num)
{teachertem;
tem=teacher1[y];
teacher1[y]=teacher1[y+1];
teacher1[y+1]=tem;
}
}
}
for(inti=0;i<T;i++)
{
cout<<"教师"<<i+1<<endl;
cout<<"工号:"<<teacher1[i].num<<"姓名:"<<teacher1[i].name<<"性
别:"<<teacher1[i].sex<<"部门:"<<teacher1[i].major_or_department;
cout<<"出生年月日:"<<teacher1[i].date<<"年龄:"<<teacher1[i].age<<"职
称:"<<teacher1[i].job<<"工资:"<<teacher1[i].salary<<"课程:"<<teacher1[i].lesson;
cout<<endl;
}
getchar();
getchar();
main();
}
voidSsave()//对学生