前言
🎬本文章是 【C++笔记】 专栏的文章,主要是C++黑马的笔记、自己的实验与课设
🔗C++笔记 传送门
问题描述
某高校有四类员工:教师、实验员、行政人员、教师兼行政人员
- 共有的信息:编号、姓名、性别、年龄
- 教师的信息:所在系部、专业、职称
- 实验员的信息:所在实验室、职务
- 行政人员的信息:政治面貌、职称
功能要求
- 添加功能:程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消
- 添加查询:功能可根据编号、姓名等信息对已添加的记录进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息
- 显示功能:可显示当前系统中所有记录,每条记录占据一行
- 编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性
- 删除功能:主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录,则提示“记录为空!”并返回操作;否则,输入要除的人员的编号或姓名,根据所输入的信息删除该人员记录,如果没有找到该人员信息,则提示相应的记录不存
- 统计功能:能根据多种参数进行人员的统计。例如:统计四类人员数量以及总数,或者统计男、女员工的数量,或者统计某年龄段人员的数量等
- 保存功能:可将当前系统中各类人员记录存入文件中,存入方式任意
- 读取功能:可将保存在文件中的人员信息读入到当前系统中,供用户进行使用
分析
继承关系分析
全局函数说明
代码
可以从仓库地址下一份,或者自己新建项目把代码粘进去。
/*
@Author:张时贰
@Date:2022年05月16日
@CSDN:张时贰
@Blog:zhangshier.vip
*/
#include <iostream>
using namespace std;
#include<string>
#include <fstream>
#define MAX 200 //每一类人员上限200
//声明全局函数
void Statistics();//统计函数
void Statisticstotal();//统计总人数
void Statisticman();//统计男员工
void Statisticwomen();//统计女员工
void Statisticage();//统计年龄段
//人 类
class Person
{
public:
char id[10]; //编号
char name[5];//姓名
char sex[10];//性别
int age; //年龄
};
//教师类
class Teacher :virtual public Person
{
friend class Tea_Po; //声明友元,教师兼行政人员类访问教师私有变量
public:
void Add();//添加
void Seach();//查询
void Show();//显示
void Edit();//编辑
void Delete();//删除
void Save();//保存
void Read();//读取
void Seachid();//编号查询
void Seachname();//姓名查询
void Showone();
private:
char t_dept[20];//所在系部
char t_major[20];//专业
char t_title[10];//职称
}; Teacher Tea[MAX]; int Teatop = 0;
void Teacher::Add()
{
Teacher t_temp;//临时变量
if (Teatop < MAX)
{
cout << "编号:"; cin >> t_temp.id;
for (int i = 0; i < Teatop; i++)
{
if (!strcmp(Tea[i].id, t_temp.id))
{
cout << "id已存在" << endl;
return;
}
}
cout << "姓名:"; cin >> t_temp.name;
cout << "性别:"; cin >> t_temp.sex;
cout << "年龄:"; cin >> t_temp.age;
cout << "系部:"; cin >> t_temp.t_dept;
cout << "专业:"; cin >> t_temp.t_major;
cout << "职称:"; cin >> t_temp.t_title;
Tea[Teatop] = t_temp;
Teatop++;
}
else
{
cout << "当前教师已招满" << endl;
}
}
void Teacher::Seach()
{
while (true)
{
int c;
cout << endl;
cout << " | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|" << endl;
cout << " | 教师管理平台-查询 |" << endl;
cout << " | 1.编号查询 |" << endl;
cout << " | 2.姓名查询 |" << endl;
cout << " | 0.退出 |" << endl;
cout << " |______________________________|" << endl << endl;
cout << "请选择"; cin >> c;
switch (c)
{
case 1:
Seachid();
break;
case 2:
Seachname();
break;
case 0:
return;
break;
default:
cout << "输入错误请重新输入" << endl;
break;
}
}
}
void Teacher::Show()
{
if (Teatop == 0)
{
cout << "当前教师系统内为空" << endl;
}
else
{
for (int i = 0; i < Teatop; i++)
{
Tea[i].Showone();
}
}
}
void Teacher::Edit()
{
Teacher t_temp;
while (true)
{
int c;
cout << endl;
cout << " | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|" << endl;
cout << " | 教师管理平台-编辑 |" << endl;
cout << " | 1.根据编号查询并修改 |" << endl;
cout << " | 2.根据姓名查询并修改 |" << endl;
cout << " | 0.退出 |" << endl;
cout << " |______________________________|" << endl << endl;
cout << "请选择"; cin >> c;
if (c == 1)
{
char sid[10];
int i;
cout << "请输入编号"; cin >> sid;
for (i = 0; i < Teatop; i++)
{
if (!strcmp(Tea[i].id, sid))
break;
}
if (i == Teatop)
cout << "输入编号无效,系统内不存在" << endl;
else
{
cout << "编号:"; cin >> t_temp.id;
cout << "姓名:"; cin >> t_temp.name;
cout << "性别:"; cin >> t_temp.sex;
cout << "年龄:"; cin >> t_temp.age;
cout << "系部:"; cin >> t_temp.t_dept;
cout << "专业:"; cin >> t_temp.t_major;
cout << "职称:"; cin >> t_temp.t_title;
Tea[i] = t_temp;
}
break;
}
else if (c == 2)
{
char sname[5];
int i;
cout << "请输入姓名"; cin >> sname;
for (i = 0; i < Teatop; i++)
{
if (!strcmp(Tea[i].name, sname))
break;
}
if (i == Teatop)
cout << "输入编号无效,系统内不存在" << endl;
else
{
cout << "编号:"; cin >> t_temp.id;
cout << "姓名:"; cin >> t_temp.name;
cout << "性别:"; cin >> t_temp.sex;
cout << "年龄:"; cin >> t_temp.age;
cout << "系部:"; cin >> t_temp.t_dept;
cout << "专业:"; cin >> t_temp.t_major;
cout << "职称:"; cin >> t_temp.t_title;
Tea[i] = t_temp;
}
break;
}
else if (c == 0)
{
break;
}
else
{
cout << "输入错误请重新选择" << endl;
}
}
}
void Teacher::Delete()
{
if (Teatop == 0)
{
cout << "当前记录为空" << endl;
return;
}
while (true)
{
int c;
cout << endl;
cout << " | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|" << endl;
cout << " | 教师管理平台-删除 |" << endl;
cout << " | 1.根据编号查询并删除 |" << endl;
cout << " | 2.根据姓名查询并删除 |" << endl;
cout << " | 0.退出 |" << endl;
cout << " |______________________________|" << endl << endl;
cout << "请选择"; cin >> c;
if (c == 1)
{
char sid[10];
int i;
cout << "请输入编号"; cin >> sid;
for (i = 0; i < Teatop; i++)
{
if (!strcmp(Tea[i].id, sid))
break;
}
if (i == Teatop)
cout << "输入编号无效,系统内不存在" << endl;
else
{
for (i; i < Teatop; i++)
{
Tea[i] = Tea[i + 1];
}
cout << "删除成功" << endl;
Teatop--;
}
break;
}
else if (c == 2)
{
char sname[5];
int i;
cout << "请输入姓名"; cin >> sname;
for (i = 0; i < Teatop; i++)
{
if (!strcmp(Tea[i].name, sname))
break;
}
if (i == Teatop)
cout << "输入姓名无效,系统内不存在" << endl;
else
{
for (i; i < Teatop; i++)
{
Tea[i] = Tea[i + 1];
}
cout << "删除成功" << endl;
Teatop--;
}
break;
}
else if (c == 0)
{
break;
}
else
{
cout << "输入错误请重新选择" << endl;
}
}
}
void Teacher::Save()
{
int i;
ofstream outfile, outfile1;
outfile1.open("Teatop.dat", ios::out); //写文件Teatop.dat
outfile1 << Teatop;
outfile.open("Tea_data.dat", ios::binary);
if (!outfile)
{
cerr << "open error!" << endl; return;
}
for (i = 0; i < Teatop; i++)
outfile.write((char *)&Tea[i], sizeof(Tea[i]));
outfile.close();
cout << "保存成功!" << endl;
}
void Teacher::Read()
{
int i;
ifstream infile, infile1;
infile1.open("Teatop.dat", ios::in);
infile1 >> Teatop;
infile.open("Tea_data.dat", ios::binary);
if (!infile)
{
cerr << "open error!" << endl; return;
}
for (i = 0; i < Teatop; i++)
infile.read((char *)&Tea[i], sizeof(Tea[i]));
infile.close();
cout << "读取成功!" << endl;
}
void Teacher::Seachid()
{
char sid[10];
cout << "请输入编号" << endl; cin >> sid;
int i;
for (i = 0; i < Teatop; i++)
{
if (!strcmp(Tea[i].id, sid))
{
Tea[i].Showone();
break;
}
}
if (i == Teatop)
{
cout << "该编号不存在" << endl;
}
}
void Teacher::Seachname()
{
char sname[5];
cout << "请输入姓名" << endl; cin >> sname;
int i;
for (i = 0; i < Teatop; i++)
{
if (!strcmp(Tea[i].name, sname))
{
Tea[i].Showone();
break;
}
}
if (i == Teatop)
{
cout << "该姓名不存在" << endl;
}
}
void Teacher::Showone()
{
cout << "编号\t" << id << "\t姓