《程序设计实践学校人员信息管理实验报告》
(2018-2019 学年 第 3 学期)
姓名:
学号:
班
级:
指导教师:
开设时间:
2019.6.24-2019.7.12
报告日期:
评
分:
2019.7.12
计算机与信息工程学院
1
目录
1.学校人员信息管理系统......................................................................... 3
1.1 问题描述........................................................................................ 3
1.2 基本要求........................................................................................ 3
1.3 整体框架........................................................................................ 5
1.4 模块划分........................................................................................ 6
1.5 源程序............................................................................................ 6
1.6 测试数据及测试情况................................................................. 23
2.实验总结............................................................................................... 25
3.日志........................................................................................................27
2
1.学校人员信息管理系统
1.1 问题描述
近年来,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进
入人类社会的各个领域并发挥着越来越重要的作用,信息的自动处理以及网络
式的信息交互方式也越来越被人们认可和应用。学校人员信息管理系统是一个
学校单位不可缺少的部分。但一直以来人们使用传统人工的方式管理文件信息,
这种管理方式存在着许多缺点如:效率低、保密性差 ,而且时间一长 , 将产生
大量的文件和数据 , 这对于查找、更新和维护都带来了不少的困难。所以利用
计算机来管理学生的信息是现在各个学校都在积极进行的工作之一。
本程序针对这样的问题,使用计算机对学生信息进行管理,能够极大地提
高学生基本信息管理的效率。
1.2 基本要求
设计任务:设计一个学校人员信息管理系统,可以实现对学校人事的信息管理。
基本功能要求:
(1)建立人员信息数据
包括学号(教工号)、姓名、性别、专业(工作系别部门)、出生时间、年龄。其
中,
对学生,还包括 3 门课的成绩(Chinese, English, Mathematics)。三门课的成绩为
int 型数据。
对教师,还包括职称(如教授/副教授/讲师),工资(如 1432.50)。工资为 double
型数据。
【英语命名提示】:
3
姓名:name; 性别:sex; 专业:major; 工作系别:department
教授:professor; 副教授:Associate Professor; 讲师:Lecturer
工资:salary
(2)使用继承的方法构造 3 个类,对相应的对象放置 10 个学生(教师)信息。
People 类——虚基类
Student 类——派生类
Teacher 类——派生类
(1)数据基本功能:
增加数据:AddData()函数。
删除数据:DeleteData()函数。根据学号(教工号),删除该人员的记录。
修改数据: UpdateData()函数。对学生,根据学号,能够修改 3 门课的成绩;对教
师,根据教工号,能够修改“职称”和“工资”。
查找功能:
1)SearchData()函数。要求能够根据“学号(教工号)”、“姓名”、“性别”三项
实现查询,并能在屏幕上显示满足条件的数据记录。
2)FindMaxData()函数。对学生,查找“English”课程成绩最高的学生记录并打
印;对教师,查找“工资”最高的教师记录并打印。要求:采用函数模板实现。
显示功能:DisplayData()函数。在屏幕上打印所有的数据记录;打印时,先打印
学生的记录,后打印教师的记录。并且按学生(教工号)升序打印(选择)。
(2)重载功能:
要求对“<<”和“>>”运算符进行重载。考虑到输人学生(教工)姓名时,
名字中可能引入空格,所以重载“>>”运算符时,需要满足这个要求。
(3)异常处理功能:
设置异常处理,对教师工资为负数的情况给出提示。
(4)文件的输入输出功能(选择):
能够从文件中读入数据。外部文件为 Student_ext.dat, Teacher_ext.dat。
能够将数据保存到相应目录的文件中。保存数据时,分两个文件分别保存
Student.dat, Teacher.dat。
(5)参考系统界面如示:
4
参考系统界面如下:
1-增加一位人员(教师、学生)记录
2-删除一个人员记录
3-修改一个人员记录
4-根据“学号(教工号)”、“姓名”、“性别”查找记录
5-根据人员类别(学生、教师)查找“English”课程成绩最高的学生,或最高工
资的教师
6-显示全部人员记录
7-从外部文件追加数据
8-将所有数据保存到磁盘文件
9-退出系统。
如下例题所示:
1.3 整体框架
5
图 1.1 学校人员信息管理系统整体框架
1.4 模块划分
1)菜单函数 menu(),利用开关语句选择进入各功能函数。
2)增加人员函数 AddData(),可以选择增加一个学生或一个老师的信息。
3)删除成员函数 DeleteData(),可以输入学号或工号选择删除一个学生
或一个老师的信息
4)输出所有人员信息 DisplayData(),先输出所有学生,然后输出所有老
师。
5)查询学生中英语成绩最高分和查询所有老师中工资最高的人
FindMaxDataS()、FindMaxDataT()、TMax()函数、SMax()函数,利用模板函数,
对所有学生和老师进行成绩排序和工资排序最后输出。
6)读取信息函数 load()、Tload()、Sload(),通过 load()函数来选择读
取学生信息或者读取老师信息。
7)读取信息函数 save()、Tsave()、Ssave(),通过 save()函数来选择保
存学生信息或者保存老师信息。
8)查找人员信息 SearchData()函数,输入工号或学号以及姓名和性别查
询相应人员。
9)修改人员信息 UpdateDate()函数。,输入工号或学号来修改老师或者学
生的信息。
1.5 源程序
学校人员信息管理.cpp
#include
#include
#include
#include
#include
using namespace std;
static int S=0;//储存学生的人数
static int T=0;//储存老师的人数
static int temp=0;//用来判断一段代码是否有运行过
int main();
class people {
//基类
public:
6
int num;
char name[10];
char sex;
char major_or_department[20];
char date[11];
int age;
char S[4],S1[2];
void setpeople(int &z) {
A:
;
if(z==1) {
cout<<"学号(请输入 10 位学号):";
} else {
cout<<"工号(请输入 10 位工号):";
}
cin>>num;
char temp[30];
itoa(num,temp,10);
for(int i=0; temp[i]!='\0'; i++) {
if(!(temp[i]>='0'&&temp[i]<='9')) {
printf("输入格式错误!请输入有效数字字符!\n") ;
goto A;
}
}
if(strlen(temp)<10) {
printf("输入长度过少!请输入 10 位有效数字字符!\n") ;
goto A;
}
if(strlen(temp)>10) {
printf("输入长度过多!请输入 10 位有效数字字符!\n") ;
goto A;
}
fflush(stdin);
cin.sync();
std:
B:
;
cout<<"名字:";
cin.getline(name,10,'\n');
for(int i=0; name[i]!='\0'; i++) {
if(name[i]>=33&&name[i]<=64) {
cout<<"输入格式错误!请输入有效字符!"<
}
C:
;
cout<<"性别(F 或 M):";
cin>>sex;
if(sex!='M'&&sex!='F') {
cout<<"输入格式错误!请输入有效字符!"<>major_or_department;
D:
E:
;
int ans=0;
cout<<"出生年月(输入格式为:XXXX/XX):"<>date;
;
cout<<"年龄:";
cin>>age;
if(age>100||age<5) {
cout<<"年龄输入错误!"<>score_chinese;
A:
8