面向对象编程实验报告
题目: 高校人员信息管理系统设计与实现
学生姓名:
学 号:
院 (系): 电气与信息工程学院
专 业: 网络工程
2016 年 6月 25日
一、 实验目的
1.要求能够熟练掌握C++语言的基本知识和技能。
2.基本掌握面向对象程序设计的基本思路和方法。
3.能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
二、 实验内容
1、问题描述
某高校有四类员工:教师、实验员、行政人员,教师兼行政人员;共有的信息包括:编号、姓名、性别、年龄等。其中,教师还包含的信息有:所在系部、专业、职称;实验员还包含的信息由:所在实验室、职务;行政人员还包含的信息有:政治面貌、职称等。
2、功能要求
(1)添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
(2)查询功能:可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息。
(3)显示功能:可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则,输入要删除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存。
(6)统计功能:能根据多种参数进行人员的统计。能统计四类人员数量以及总数,
统计男、女员工的数量。
(7)保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意。
(8)读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用。
三、 实验环境
Microsoft Visual studio 2010
四、 设计思路或方案
1.类设计
此系统共设计了5个类:公有类(class CCommon),教师类(class Cteacher),实验员类(class Cassistant),行政人员类(class Cexecution),教师兼行政人员类(class Ctea_exe)
(1) 人员的管理需包含人员的基本信息,所以定义一个公有类如下表所示
表一 公有类
类名 |
公有类 |
数据成员 |
protected: int number; //编号 string name; //姓名 string sex; //性别 int age; //年龄 |
(2) 根据高校人员的工作性质的不同,将所以员工分为五类, 分别是教师类(class Cteacher),实验员类(class Cassistant),行政人员类(class Cexecution),教师兼行政人员类(class Ctea_exe)
表二 教师类
类名 |
教师类 |
数据成员 |
protected: string department;//所在系部 string profession;//专业 string position;//职称 |
成员函数 |
public: void set(int _number,string _name,string_sex,int_age,string_department,string_profession,string _position) void output() |
表三 实验员类
类名 |
实验员类 |
数据成员 |
protected: string laboratory; //所在实验室 string position; //职称 |
成员函数 |
public: void set(int_number,string _name,string_sex,int_age,string_laboratory,string_position) void output() |
表四 行政人员类
类名 |
行政人员类 |
数据成员 |
protected: string politics;//政治面貌 string position;//职称 |
成员函数 |
public:void set(int _number,string _name,string _sex,int _age,string _politics,string _position) void output() |
表五 教师兼行政人员类
类名 |
教师兼行政人员类 |
数据成员 |
protected: string politics;//政治面貌 string department;//所在系部 string profession;//专业 string position;//职称 |
成员函数 |
public:void . set(int _number, string _name,string_sex,int_age,string_politics,string_department,string _profession,string _position) void output() |
2.类之间的关系
公有类是基类,教师类、实验员类、行政人员类是其派生类,教师兼行政人员类是教师和行政人员类的派生类,这样定义能使程序变得更加简单,派生类的成员函数和数据成员可使用基类的,使用了派生和继承,使程序变得简单化。
3.函数设计
定义了教师菜单函数,实验员菜单函数,行政人员菜单函数,教师兼行政人员类,这些函数可调用派生类中的添加成员函数,查询成员函数,显示成员函数,编辑成员函数,删除成员函数,统计成员函数,保存成员函数,读取成员函数。
五、 程序清单
/*-------------------------------------共 有 类-------------------------------------*/
class CCommon//公有类
{
protected:
int number;//编号
string name;//姓名
string sex;//性别
int age;//年龄
};
/*------------------------教 师 类--------------------------------------*/
class Cteacher:
public CCommon//教师类
{
protected:
string department;//所在系部
string profession;//专业
string position;//职称
public:
void set(int _number,string _name,string _sex,int_age,string _department,string
_profession,string _position)
{
number = _number;
name = _name;
sex = _sex;
age = _age;
department = _department;
profession = _profession;
position = _position;
}//输入教师数据
void output();
~Cteacher()
{
}//析构函数
friend int find_nu(Cteacher teacher[], int _nu, int&t);
friend int find_na(Cteacher teacher[], string _na, int&t);
friend void add(Cteacher teacher[], int _fa);
friend void dele(Cteacher teacher[], int _fa);
friend void closefile(Cteacher teacher[] ,int &t);
friend void _statistics(Cteacher teacher[], int &t);
};
void teacher_manage();
/*----------------------------实 验 员 类-------------------------------------------*/
class Cassistant:public CCommon//实验员类
{
protected:
string laboratory;//所在实验室
string position;//职称
public:
void set(int _number,string _name,string _sex,int_age,string _laboratory,string
_position)
{
number = _number;
name = _name;
sex = _sex;
age = _age;
laboratory = _laboratory;
position = _position;
}//输入实验员数据
void output();
~Cassistant()
{
}//析构函数
friend int find_nu(Cassistant assistant[], int _nu, int&t);
friend int find_na(Cassistant assistant[], string _na,int &t);
friend void add(Cassistant assistant[], int _fa);
friend void dele(Cassistant assistant[], int _fa);
friend voidclosefile(Cassistant assistant[] ,int &t);
friend void _statistics(Cassistant assistant[], int&t);
};
void assistant_manage();
/*----------------------------行 政 人 员 类--------------------------------------------*/
class Cexecution:public CCommon//行政人员类
{
protected:
string politics;//政治面貌
string position;//职称
public:
void set(int _number,string _name,string _sex,int_age,string _politics,string
_position)
{
number = _number;
name = _name;
sex = _sex;
age = _age;
politics = _politics;
position = _position;
}//输入行政人员数据
void output();
~Cexecution()
{
}//析构函数
friend int find_nu(Cexecution execution[], int _nu, int&t);
friend int find_na(Cexecution execution[], string _na,int &t);
friend void add(Cexecution execution[], int _fa);
friend void dele(Cexecution execution[], int _fa);
friend void closefile(Cexecution execution[] ,int&t);
friend void _statistics(Cexecution execution[], int&t);
};
void execution_manage();
/*---------------------------行 政 人 员 兼 教 师 类-------------------------------------*/
class Ctea_exe:public CCommon//行政人员兼教师类
{
protected:
string politics;//政治面貌
string department;//所在系部
string profession;//专业
string position;//职称
public:
void set(int _number,string _name,string _sex,int_age,string _politics,string
_department,string _profession,string _position)
{
number = _number;
name = _name;
sex = _sex;
age = _age;
politics = _politics;
department = _department;
profession =_profession;
position = _position;
}//输入行政人员兼教师数据
void output();
~Ctea_exe()
{
}//析构函数
friend int find_nu(Ctea_exe tea_exe[], int _nu, int&t);
friend int find_na(Ctea_exe tea_exe[], string _na, int&t);
friend void add(Ctea_exe tea_exe[], int _fa);
friend void dele(Ctea_exe tea_exe[], int _fa);
friend void closefile(Ctea_exe tea_exe[] ,int &t);
friend void _statistics(Ctea_exe tea_exe[], int &t);
};
void tea_exe_manage();
/*---------------------------------统 计 总 人 数---------------------------------------*/
void statistics_all();//数据统计数
void statistics_teacher();
void statistics_assistant();
void statistics_execution();
void statistics_tea_exe();
void order();
const int Max = 100;//各人员总人数最大值
#endif
共设计了5个类:公有类(class CCommon), 教师类(class Cteacher),实验员类(class Cassistant),行政人员类(class Cexecution),教师兼行政人员类(class Ctea_exe)
函数部分
教师系统(部分代码)
/*----------------------------教师类中的各个函数操作-----------------------*/
void _add(Cteacher *teacher, int &t)//1教师添加信息
{
int number,age;
stringname,sex,department,profession,position;
cout<<"添加信息->请输入:"< while(1) { number=t+1; cout<<"姓名(输入0结束输入)"; cin>>name; if("0"== name) break; cout<<"性别(M--man,W--woman)"; while(1) { cin>>sex; if(sex =="M"||sex == "W") { cout<<"年龄"; cin>>age; cout<<"系部"; cin>>department; cout<<"专业"; cin>>profession; cout<<"职称"; cin>>position; teacher[t].set(number,name,sex,age,department,profession,position); ++t; break; } else cout<<"输入性别错误,请重新输入!"< } } } void _query(Cteacher teacher[], int &t)//2查询信息 { int choice; int flag,nu; string na; cout<<"1---编号,2---姓名"< while(1) { cin>>flag; if(1 == flag||2== flag) break; else cout<<"输入错误请重新输入!"< } switch(flag) { case 1://编号查询 { do { cout<<"请输入编号!"< cin>>nu; if(find_nu(teacher,nu,t) < t) teacher[find_nu(teacher,nu,t)].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice == 2) break; }while(choice== 1); };break; case 2://姓名查询 { do { cout<<"请输入姓名!"< cin>>na; if(find_na(teacher,na,t) teacher[find_na(teacher,na,t) ].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice == 2) break; }while(choice== 1); };break; } } int find_nu(Cteacher teacher[], int _nu, int &t)//编号查询方式 { int i; for(i=0;i if(teacher[i].number==_nu) return i; return t; } int find_na(Cteacher teacher[], string _na, int &t)//姓名查询方式 { int i; for(i=0;i if(teacher[i].name==_na) return i; return t; } void _display(Cteacher teacher[], int &t)//3显示功能 { int i; cout< cout<<"编号\t姓名\t性别\t年龄\t系部\t专业\t职称"< for(i=0;i teacher[i].output(); cout<<"--------------------------------------------"< } void _delete(Cteacher teacher[], int &t)//删除数据 { intscore,de,choice1; while(1) { cout<<"请输入需要删除的编号!"< cin>>score; de=find_nu(teacher,score,t); if(de { teacher[ de].output(); dele(teacher,de); } else cout<<"查无此人!"< cout<<"是否继续(1是2否):"; cin>>choice1; if(choice1 == 2) { cout<<"已退出!"< break; } } } void teacher_put()//退出 { cout<<"谢谢使用教师系统!"< } void teacher_manage()//教师类总调用函数- { Cteacherteacher[Max]; int i,t; while (1) { t =openfile(teacher);//文件中的行数 teacher_muen();//打印菜单 cin >> i; switch (i) { case 1:_add(teacher,t); break;//添加功能 case 2:_query(teacher, t); break;//查询功能 case 3:_display(teacher, t); break;//显示功能 case 4:_edit(teacher, t); break;//编辑功能 case 5: _delete(teacher,t); break;//删除功能 case 6:_statistics(teacher,t); break;//统计功能 default :teacher_put(); goto loop;//退出功能 } closefile(teacher,t); } loop: cout<<"--------------------------------------------"< } void _statistics(Cteacher teacher[], int &t)//统计数据 { inti,boy=0,girl=0,sum=0; for(i=0;i { if(teacher[i].sex== "W") girl++; if(teacher[i].sex=="M") boy++; } sum = girl+boy; cout<<"教师总共有"< cout<<"男有"< } void statistics_teacher()//教师统计函数 { int t; Cteacherteacher[Max]; t =openfile(teacher); _statistics(teacher,t); } 实验员系统(部分代码) /*****************实 验 员*********************/ /*--------------------------添 加 数 据------------------------*/ void _add(Cassistant *assistant, int &t) { int number,age; stringname,sex,laboratory,position; cout<<"添加信息->请输入:"< while(1) { number=t+1; cout<<"姓名(输入0结束):"; cin>>name; if(name=="0") break; cout<<"性别(M--man,W--woman):"; while(1) { cin>>sex; if(sex =="M"||sex == "W") { cout<<"年龄:"; cin>>age; cout<<"实验室:"; cin>>laboratory; cout<<"职称:"; cin>>position; assistant[t].set(number,name,sex,age,laboratory,position); ++t; break; } else cout<<"输入性别错误,请重新输入!"< } } }//添加信息 /*------------------------查 询 数 据-----------------------------*/ void _query(Cassistant assistant[], int &t) { int choice; int flag,nu; string na; cout<<"1---编号,2---姓名"< while(1) { cin>>flag; if(1 == flag||2== flag) break; else cout<<"输入错误请重新输入"; } switch(flag) { case 1://编号查询 { do { cout<<"请输入编号!"< cin>>nu; if(find_nu(assistant,nu,t) assistant[find_nu(assistant,nu,t) ].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice == 2) break; }while(choice ==1); };break; case 2://姓名查询 { do { cout<<"请输入姓名!"< cin>>na; if(find_na(assistant,na,t) assistant[find_na(assistant,na,t) ].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice == 2) break; }while(choice== 1); };break; }; }//查询信息 /*------------使 用 编 号 查 询 数 据 方 式--------------------*/ int find_nu(Cassistant assistant[], int _nu, int &t) { int i; for(i=0;i if(assistant[i].number==_nu) return i; return t; }//编号查询方式 /*---------使 用 姓 名 查 询 数 据 方 式-----------------*/ int find_na(Cassistant assistant[], string _na, int&t) { int i; for(i=0;i if(assistant[i].name==_na) return i; return t; }//姓名查询方式 /*----------------------------删 除 数 据--------------------------*/ void _delete(Cassistant assistant[], int &t) { intscore,de,choice1; while(1) { cout<<"请输入需要删除的编号!"< cin>>score; de=find_nu(assistant,score,t); if(de { assistant[ de].output(); dele(assistant,de); } else cout<<"查无此人!"< cout<<"是否继续(1是2否):"; cin>>choice1; if(choice1 == 2) { cout<<"已退出!"< break; } } } /*-----------------统 计 数 据--------------------------------*/ void _statistics(Cassistant assistant[], int &t) { inti,boy=0,girl=0,sum=0; for(i=0;i { if(assistant[i].sex=="W") girl++; if(assistant[i].sex=="M") boy++; } sum=girl+boy; cout<<"实验员总共有"< cout<<"男有"< }//统计 /*-----------------------实 验 员 类 总 调 用 函 数-----------------------------*/ void assistant_manage() { Cassistantassistant[Max]; int i,t; while (1) { t=openfile(assistant); assistant_muen();//打印菜单 cin >> i; switch (i) { case 1:_add(assistant,t); break;//添加功能 case 2:_query(assistant, t); break;//查询功能 case 3:_display(assistant, t); break;//显示功能 case 4:_edit(assistant, t); break;//编辑功能 case 5:_delete(assistant,t); break;//删除功能 case 6:_statistics(assistant,t); break;//统计功能 default :assistant_put(); goto loop;//退出功能 } closefile(assistant,t); } loop: cout<<"--------------------------------------------"< } /*--------------------------------实 验 员 统 计 函 数-----------------------------*/ void statistics_assistant() { int t; Cassistant assistant[Max]; t=openfile(assistant); _statistics(assistant,t); } 行政人员系统(部分代码) /*************************行 政 人 员*****************************/ /*----------------------------添 加 数 据-----------------*/ void _add(Cexecution *execution, int &t) { int number,age; stringname,sex,politics,position; cout<<"添加信息->请输入:"< while(1) { number=t+1; cout<<"姓名(输入0结束):"; cin>>name; if(name=="0") break; cout<<"性别(M--man,W--woman):"; while(1) { cin>>sex; if(sex =="M"||sex == "W") { cout<<"年龄:"; cin>>age; cout<<"政治面貌:"; cin>>politics; cout<<"职称:"; cin>>position; execution[t].set(number,name,sex,age,politics,position); ++t; break; } else cout<<"输入性别错误,请重新输入!"< } } }//添加信息 /*---------------------------查 询 数 据--------------------*/ void _query(Cexecution execution[], int &t) { int choice; int flag,nu; string na; cout<<"1---编号,2---姓名"< while(1) { cin>>flag; if(1 == flag||2== flag) break; else cout<<"输入错误请重新输入"; } switch(flag) { case 1://编号查询 { do { cout<<"请输入编号!"< cin>>nu; if(find_nu(execution,nu,t) execution[find_nu(execution,nu,t) ].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice == 2) break; }while(choice== 1); };break; case 2://姓名查询 { do { cout<<"请输入姓名!"< cin>>na; if(find_na(execution,na,t) execution[ find_na(execution,na,t)].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice == 2) break; }while(choice ==1); };break; } }//查询信息 /*-----------------使 用 编 号 查 询 数 据 方 式------------------*/ int find_nu(Cexecution execution[], int _nu, int &t) { int i; for(i=0;i if(execution[i].number==_nu) return i; return t; }//编号查询方式 /*---------------------------使 用 姓 名 查 询 数 据 方 式 ----------------------------*/ int find_na(Cexecution execution[], string _na, int&t) { int i; for(i=0;i if(execution[i].name==_na) return i; return t; }//姓名查询方式 /*-----------------------------------编 辑 数 据-----------------------------*/ void _edit(Cexecution execution[], int &t) { intscore,fa,choice; while(1) { cout<<"请输入需要编辑的编号:"< cin>>score; fa =find_nu(execution,score,t); if(fa { execution[fa].output(); add(execution,fa); } else cout<<"查无此人!"< cout<<"是否继续(1是2否):"; cin>>choice; if(choice !=1) break; } }//编辑功能 /*----------------------------删 除 数 据-----------------------*/ void _delete(Cexecution execution[], int &t) { intscore,de,choice1; while(1) { cout<<"请输入需要删除的编号!"< cin>>score; de=find_nu(execution,score,t); if(de { execution[ de].output(); dele(execution,de); } else cout<<"查无此人!"< cout<<"是否继续(1是2否):"; cin>>choice1; if(choice1 == 2) { cout<<"已退出!"< break; } } } /*-------------------------统 计 数 据-----------------------------*/ void _statistics(Cexecution execution[], int &t) { inti,boy=0,girl=0,sum=0; for(i=0;i { if(execution[i].sex=="W") girl++; if(execution[i].sex=="M") boy++; } sum=girl+boy; cout<<"实验员总共有"< cout<<"男有"< }//统计 /*--------------------------------退 出--------------------------------*/ void execution_put() { cout<<"谢谢使用教师系统!"< }//退出 /*-----------------------行 政 人 员 类 总 调 用 函 数-----------------*/ void execution_manage() { Cexecutionexecution[Max]; int i,t; while (1) { t=openfile(execution); execution_muen();//打印菜单 cin >> i; switch (i) { case 1:_add(execution,t); break;//添加功能 case 2:_query(execution, t); break;//查询功能 case 3:_display(execution, t); break;//显示功能 case 4:_edit(execution, t); break;//编辑功能 case 5:_delete(execution,t); break;//删除功能 case 6:_statistics(execution,t); break;//统计功能 default :execution_put(); goto loop;//退出功能 } closefile(execution,t); } loop: cout<<"--------------------------------------------"< } 行政人员兼教师系统(部分代码) *************************行 政 人 员 兼 教 师******************/ //主菜单 /*----------------------------添 加 数 据-------------------------*/ void _add(Ctea_exe *tea_exe, int &t) { int number,age; stringname,sex,politics,department,profession,position; cout<<"添加信息->请输入:"< while(1) { number=t+1; cout<<"姓名(输入0结束):"; cin>>name; if(name == "0") break; cout<<"性别(M--man,W--woman):"; while(1) { cin>>sex; if(sex =="M"||sex == "W") { cout<<"年龄:"; cin>>age; cout<<"政治面貌:"; cin>>politics; cout<<"系部:"; cin>>department; cout<<"专业:"; cin>>profession; cout<<"职称:"; cin>>position; tea_exe[t].set(number,name,sex,age,politics,department,profession,position ); ++t; break; } else cout<<"输入性别错误,请重新输入!"< } } }//添加信息 /*----------------------------------查 询 数 据-----------------------------*/ void _query(Ctea_exe tea_exe[], int &t) { int choice; int flag,nu; string na; cout<<"1---编号,2---姓名"< while(1) { cin>>flag; if(1 == flag||2== flag) break; else cout<<"输入错误请重新输入!"< } switch(flag) { case 1://编号查询 { do { cout<<"请输入编号!"< cin>>nu; if(find_nu(tea_exe,nu,t) tea_exe[find_nu(tea_exe,nu,t) ].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice== 2) break; }while(choice== 1); };break; case 2://姓名查询 { do { cout<<"请输入姓名!"< cin>>na; if(find_na(tea_exe,na,t) tea_exe[find_na(tea_exe,na,t) ].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"< cin>>choice; if(choice == 2) break; }while(choice== 1); };break; } }//查询信息 /*--------------------使 用 编 号 查 询 数 据 方 式-----------------*/ int find_nu(Ctea_exe tea_exe[], int _nu, int &t) { int i; for(i=0;i if(tea_exe[i].number==_nu) return i; return t; }//编号查询方式 /*-----------------使 用 姓 名 查 询 数 据 方 式-------------*/ int find_na(Ctea_exe tea_exe[], string _na, int&t) { int i; for(i=0;i if(tea_exe[i].name==_na) return i; return t; }//姓名查询方式 /*---------------------------------显 示 数 据-----------------------------*/ void _display(Ctea_exe tea_exe[], int &t) { int i; cout<<"编号\t姓名\t性别\t年龄\t政治面貌\t系部\t专业\t职称"< for(i=0;i tea_exe[i].output(); }//显示功能 /*----------------------------------编 辑 数 据--------------------------*/ void _edit(Ctea_exe tea_exe[], int &t) { intscore,fa,choice; while(1) { cout<<"请输入需要编辑的编号:"; cin>>score; fa =find_nu(tea_exe,score,t); if(fa { tea_exe[ fa].output(); add(tea_exe,fa); } else cout<<"查无此人!"< cout<<"是否继续(1是2否):"; cin>>choice; if(choice != 1) break; } }//编辑功能 /*----------------------------删 除 数 据----------------------------*/ void _delete(Ctea_exe tea_exe[], int &t) { intscore,de,choice1; while(1) { cout<<"请输入需要删除的编号!"< cin>>score; de=find_nu(tea_exe,score,t); if(de { tea_exe[ de].output(); dele(tea_exe,de); } else cout<<"查无此人!"< cout<<"是否继续(1是2否):"; cin>>choice1; if(choice1 == 2) { cout<<"已退出!"< break; } } } /*---------------------------统 计 数 据---------------------------*/ void _statistics(Ctea_exe tea_exe[], int &t) { inti,boy=0,girl=0,sum=0; for(i=0;i { if(tea_exe[i].sex=="W") girl++; if(tea_exe[i].sex=="M") boy++; } sum=girl+boy; cout<<"行政人员兼教师总共有"< cout<<"男有"< }//统计 /*-------------------------------------退 出-------------------------------*/ void tea_exe_put() { cout<<"谢谢使用教师系统!"< }//退出 void tea_exe_manage() { Ctea_exetea_exe[Max]; int i,t; while (1) { t=openfile(tea_exe); tea_exe_muen();//打印菜单 cin >> i; switch (i) { case 1:_add(tea_exe,t); break;//添加功能 case 2:_query(tea_exe, t); break;//查询功能 case 3:_display(tea_exe, t); break;//显示功能 case 4:_edit(tea_exe, t); break;//编辑功能 case 5:_delete(tea_exe,t); break;//删除功能 case 6:_statistics(tea_exe,t); break;//统计功能 default :tea_exe_put(); goto loop;//退出功能 } closefile(tea_exe,t); } loop: cout<<"--------------------------------------------"< } /*--------------------行 政 人 员 兼 教 师 统 计 函 数------------------------*/ void statistics_tea_exe() { int t; Ctea_exetea_exe[Max]; t=openfile(tea_exe); _statistics(tea_exe,t); } 测试代码 #include"HEAD.h" void statistics_all()//数据统计行数 { statistics_teacher(); statistics_assistant(); statistics_execution(); statistics_tea_exe(); } void muen() { cout<<"**********欢迎进入高校信息管理系统***********"< cout<<" 1---教师信息,2---实验员信息"< cout<<" 3---行政人员,4---教师兼行政人员"< cout<<" 5---统计人数,6---退出系统"< cout<<"*********************************************"< cout<<"请输入您的选择--->:"; } int main() { int i; while(1) { muen(); cin>>i; switch(i) { case 1:teacher_manage(); break;//教师 case 2:assistant_manage(); break;//实验员 case 3:execution_manage(); break;//行政 case 4:tea_exe_manage(); break;//教师兼行政 case 5:statistics_all(); break;//统计 default:cout<<"欢迎再次使用!"< exit(0); } } return 0; } 六、 调试结果及分析 主界面: 按1进入教师信息界面进行部分操作演示 按2进入实验员信息界面并进行部分操作演示 按3进入行政人员信息系统并演示部分操作 按7进入教师兼行政人员信息界面并进行部分操作 按5统计人数 按6退出系统 七、 总结 本次课程设计完成的基本顺利,有些不明白的已经自己看书或向同学请教后明白了,我觉得我设计好的系统各项功能都能实现,优点是可实现的功能很全,而且很简单,缺点是实现各项功能的方法较少,基本只有一种或两种方法。可改进的地方是实现各功能的方法,可以按多种渠道实现功能。这次课程设计让我增长了很多知识更深一步地掌握了虚函数,纯虚函数,继承与派生,文件的使用方法。当我自己独立完成这个设计的时候,内心有一种很强的满足感。对此,我要感谢我的指导老师田延安的辛苦教导。最后,我很高兴完成这项设计,因为我受益匪浅。 八、参考文献 [1]谭浩强著.C程序设计第三版北京清华大学出版社 [2]吕凤翥编著.C++语言基础教程第二版北京清华大学出版社 附源代码: 头文件 Head.h #ifndef_HEADC_H #define_HEADC_H #include #include #include #include usingnamespace std; /*-------------------------------------共 有 类-------------------------------------*/ classCCommon//公有类 { protected: intnumber;//编号 stringname;//姓名 stringsex;//性别 intage;//年龄 }; /*------------------------教 师 类--------------------------------------*/ classCteacher: publicCCommon//教师类 { protected: stringdepartment;//所在系部 stringprofession;//专业 string position;//职称 public: voidset(int _number,string _name,string _sex,int _age,string _department,string _profession,string_position) { number =_number; name =_name; sex =_sex; age =_age; department= _department; profession= _profession; position= _position; }//输入教师数据 voidoutput(); ~Cteacher() { }//析构函数 friendint find_nu(Cteacher teacher[], int _nu, int &t); friendint find_na(Cteacher teacher[], string _na, int &t); friendvoid add(Cteacher teacher[], int _fa); friendvoid dele(Cteacher teacher[], int _fa); friendvoid closefile(Cteacher teacher[] ,int &t); friendvoid _statistics(Cteacher teacher[], int &t); }; voidteacher_manage(); /*----------------------------实 验 员 类-------------------------------------------*/ classCassistant:public CCommon//实验员类 { protected: stringlaboratory;//所在实验室 stringposition;//职称 public: voidset(int _number,string _name,string _sex,int _age,string _laboratory,string _position) { number =_number; name =_name; sex =_sex; age =_age; laboratory= _laboratory; position= _position; }//输入实验员数据 voidoutput(); ~Cassistant() { }//析构函数 friendint find_nu(Cassistant assistant[], int _nu, int &t); friendint find_na(Cassistant assistant[], string _na, int &t); friendvoid add(Cassistant assistant[], int _fa); friendvoid dele(Cassistant assistant[], int _fa); friend void closefile(Cassistant assistant[],int &t); friendvoid _statistics(Cassistant assistant[], int &t); }; voidassistant_manage(); /*----------------------------行 政 人 员 类--------------------------------------------*/ classCexecution:public CCommon//行政人员类 { protected: stringpolitics;//政治面貌 stringposition;//职称 public: voidset(int _number,string _name,string _sex,int _age,string _politics,string _position) { number =_number; name =_name; sex =_sex; age =_age; politics= _politics; position= _position; }//输入行政人员数据 voidoutput(); ~Cexecution() { }//析构函数 friendint find_nu(Cexecution execution[], int _nu, int &t); friendint find_na(Cexecution execution[], string _na, int &t); friendvoid add(Cexecution execution[], int _fa); friendvoid dele(Cexecution execution[], int _fa); friendvoid closefile(Cexecution execution[] ,int &t); friendvoid _statistics(Cexecution execution[], int &t); }; voidexecution_manage(); /*---------------------------行 政 人 员 兼 教 师 类-------------------------------------*/ classCtea_exe:public CCommon//行政人员兼教师类 { protected: stringpolitics;//政治面貌 stringdepartment;//所在系部 stringprofession;//专业 stringposition;//职称 public: voidset(int _number,string _name,string _sex,int _age,string _politics,string _department,string_profession,string _position) { number =_number; name =_name; sex =_sex; age =_age; politics= _politics; department= _department; profession = _profession; position= _position; }//输入行政人员兼教师数据 voidoutput(); ~Ctea_exe() { }//析构函数 friendint find_nu(Ctea_exe tea_exe[], int _nu, int &t); friendint find_na(Ctea_exe tea_exe[], string _na, int &t); friendvoid add(Ctea_exe tea_exe[], int _fa); friendvoid dele(Ctea_exe tea_exe[], int _fa); friendvoid closefile(Ctea_exe tea_exe[] ,int &t); friendvoid _statistics(Ctea_exe tea_exe[], int &t); }; voidtea_exe_manage(); /*---------------------------------统 计 总 人 数---------------------------------------*/ voidstatistics_all();//数据统计数 voidstatistics_teacher(); voidstatistics_assistant(); voidstatistics_execution(); voidstatistics_tea_exe(); voidorder(); const intMax = 100;//各人员总人数最大值 #endif 函数部分代码 函数.cpp #include"HEAD.h" /*----------------------------教师类中的各个函数操作-----------------------*/ voidCteacher::output()//教师读出数据内容 { cout< cout< cout< cout< } voidteacher_muen()//教师主菜单 { cout< cout<<"----------欢迎进入教师信息管理系统----------"< cout<<" 1---添加信息, 2---查询信息"< cout<<" 3---显示信息, 4---编辑信息"< cout<<" 5---删除信息, 6---统计信息"< cout<<" 7---退出"< cout<<"--------------------------------------------"< cout<<"请输入您的选择--->:"; } void_add(Cteacher *teacher, int &t)//1教师添加信息 { int number,age; stringname,sex,department,profession,position; cout<<"添加信息->请输入:"< while(1) { number=t+1; cout<<"姓名(输入0结束输入)"; cin>>name; if("0" == name) break; cout<<"性别(M--man,W--woman)"; while(1) { cin>>sex; if(sex == "M"||sex =="W") { cout<<"年龄"; cin>>age; cout<<"系部"; cin>>department; cout<<"专业"; cin>>profession; cout<<"职称"; cin>>position; teacher[t].set(number,name,sex,age,department,profession,position); ++t; break; } else cout<<"输入性别错误,请重新输入!"< } } } void_query(Cteacher teacher[], int &t)//2查询信息 { int choice; int flag,nu; string na; cout<<"1---编号,2---姓名"< while(1) { cin>>flag; if(1 == flag||2 == flag) break; else cout<<"输入错误请重新输入!"< } switch(flag) { case 1://编号查询 { do { cout<<"请输入编号!"< cin>>nu; if(find_nu(teacher,nu,t) < t) teacher[find_nu(teacher,nu,t)].output(); else cout<<"查无此人!"< cout<<"是否继续1是2否"<