细节详解之后更新,这是运行效果:
貌似有几个功能没有完全实现,凑合看
// 高校人员信息管理系统.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include<windows.h>
#include <iostream>
#include<string>
#include<fstream>
using namespace std;
class people
{private:
string job;
int Job;
string ID;
string Name;
string Sex;
string Depart;
string Major;
bool ipName, ipID, ipJob, ipSex, ipDepart, ipMajor;
public:
bool find, Box;
//录入 函数原型//
void inse(people *p,int n)
{
Box = 1;
cout << "欢迎使用录入功能!!!\n";
cout << "请注意,工号是本系统内身份确认的凭证,请确保每个工号的唯一性!";
inseID(p,n);
inseName();
inseSex();
insejob();
inseDepart();
inseMajor();
}
void insejob();
void inseID(people* p, int n);
void inseSex();
void inseDepart();
void inseMajor();
void inseName();
/// <录入>
void print();/// <输出 函数原型>
void Delete(); /// <删除 函数原型>
people()
{
job=Major=Depart=Sex=Name=ID = "未录入";
Job = 0;
find=Box=ipName = ipID = ipJob = ipSex = ipDepart = ipMajor = 0;
}
friend void SearchAll( people* , string , int );
friend void SearchID(people* , string , int );
friend void SearchName(people* p, string d, int n);
friend void SearchSex(people* p, int n);
friend void SearchJob(people* p, int n);
friend void Sumall(people* p, int n);
friend void DeFi(people* p, int n);
friend void modi(people* p, int n);
friend void search(people* p, int n);
friend void CreatTxt(people* p, int n);
};
//<录入 函数体>
void people::insejob()
{
Box = 1;
E1: cout << "请输入你要录入的人员类别:\n(1)教师(2)教辅(3)行政(4)跳过\n";
string s; getline(cin,s); ipJob = 1;
if (s == "1")
{
cout << "成功录入为:教师\n"; Job = 1; job = "教师";
}
else if (s == "2")
{
cout << "成功录入为:教辅\n"; Job = 2; job = "教辅";
}
else if (s == "3")
{
cout << "成功录入为:行政\n"; Job = 3; job = "行政";
}
else if (s == "4")ipJob = 0;
else
{
ipJob = 0;
cout << "输入错误!!!\n"; goto E1;
}
}
void people::inseID(people* p, int n)
{
Box = 1;
cout << "请输入工号:(输入 000 可跳过此项)\n";
In: getline(cin,ID);
if (ID != "未录入")
{
for (int i = 0; i < n; i++)
{
if (ID == p[i].ID && p[i].ipID && p[i].Box)
{
cout << "工号已存在,请输入新的工号!\n";
goto In;
}
}
}
if (ID == "000")
ID = "未录入";
else
{
ipID = 1;
cout << "学号录入成功!\n";
}
}
void people::inseSex()
{
Box = 1;
E2: cout << "请输入你要录入的人员性别:\n(1)男(2)女(3)跳过\n";
string s; getline(cin,s); ipSex = 1;
if (s == "1")
{
cout << "成功录入为:男\n"; Sex = "男";
}
else if (s == "2")
{
cout << "成功录入为:女\n"; Sex = "女";
}
else if (s == "3")ipSex=0;
else
{
ipSex = 0;
cout << "输入错误!!!\n"; goto E2;
}
}
void people::inseDepart()
{
Box = 1;
cout << "请输入该人员所属院系(输入 000 可跳过此项)\n";
getline(cin, Depart);
if (Depart == "000")
Depart = "未录入";
else
{
ipDepart = 1;
cout << "院系录入成功!\n";
}
}
void people::inseMajor()
{
Box = 1;
cout << "请输入该人员所属专业(输入 000 可跳过此项)\n";
getline(cin, Major);
if (Major == "000")
Major = "未录入";
else
{
ipMajor = 1;
cout << "专业录入成功!\n";
}
}
void people::inseName()
{
Box = 1;
cout << "请输入该人员姓名(输入 000 可跳过此项)\n";
getline(cin, Name);
if (Name == "000")
Name = "未录入";
else
{
ipName = 1;
cout << "姓名录入成功!\n";
}
}
/// <录入>
/// ///
/// <输出 函数体>
void people::print()
{
cout << "工号:" << ID <<endl;
cout << "姓名:" << Name << endl;
cout << "性别:" << Sex << endl;
cout << "类别:" << job << endl;
cout << "院系:" << Depart << endl;
cout << "专业:" << Major << endl<<endl;
}
/// <输出>
/// ///
/// <删除 函数体>
void people::Delete()
{
job = Major = Depart = Sex = Name = ID = "未录入";
Job = 0;
Box = ipName = ipID = ipJob = ipSex = ipDepart = ipMajor = 0;
}
/// <删除>
///<查询功能>//
void SearchAll( people* p, string d,int n)
{
int temp[100],j=0;
bool b = 0;
for (int i = 0; i <= n; i++)
{
size_t pos = p[i].Name.find(d);
if (pos != string::npos && p[i].ipName && p[i].Box)//如果找到了且是录入过的人
{
p[i].print();
b = 1;
p[i].find = 1;
temp[j] = i;
j++;
}
}
for (int i = 0; i <= n; i++)
{
size_t pos = p[i].Depart.find(d);
if (pos != string::npos && p[i].ipDepart && p[i].Box&&!p[i].find)//按院系再找一次,且防止重复
{
p[i].print();
b = 1;
p[i].find = 1;
temp[j] = i;
j++;
}
}
for (int i = 0; i <= n; i++)
{
size_t pos = p[i].Major.find(d);
if (pos != string::npos && p[i].ipMajor && p[i].Box && !p[i].find)//按专业再找一次,且防止重复
{
p[i].print();
b = 1;
p[i].find = 1;
temp[j] = i;
j++;
}
}for (int i = 0; i <= n; i++)
{
size_t pos = p[i].ID.find(d);
if (pos != string::npos && p[i].ipID && p[i].Box && !p[i].find)//按工号再找一次,且防止重复
{
p[i].print();
b = 1;
p[i].find = 1;
temp[j] = i;
j++;
}
}
if(!b)
cout << "没有找到相关信息\n" << endl;
}/// <模糊查找>
void SearchID( people*p , string d,int n)
{
bool b = 0;
for (int i = 0; i <= n; i++)
{
if (d==p[i].ID && p[i].ipID && p[i].Box)//如果找到了且是录入过的人
{
p[i].print();
b = 1;
}
}
if (!b)cout << "没有找到相关信息\n";
}/// <工号精确查找>
void SearchName(people* p, string d, int n)
{
bool b = 0;
for (int i = 0; i <= n; i++)
{
size_t pos = p[i].Name.find(d);
if (d == p[i].Name && p[i].ipName && p[i].Box)//如果找到了且是录入过的人
{
p[i].print();
b = 1;
}
}
if (!b)cout << "没有找到相关信息\n";
}/// <姓名精确查找>
void SearchSex(people* p, int n)
{
cout << "正在按性别查找 \n";
Out:cout<<"请选择:1、男 2、女 3、返回\n";
string x;
bool b = 0;
getline(cin, x);
if (x == "1" || x == "男")x = "男";
else if (x == "2" || x == "女")x = "女";
else if (x == "3" || x == "返回") {
b = 1; goto End;
}
else
{
cout << "错误!你所在的地区目前只承认二元性别,请重新输入……\n";
goto Out;
}
for (int i = 0; i <= n; i++)
{
if (x == p[i].Sex && p[i].ipSex && p[i].Box)//如果找到了且是录入过的人
{
p[i].print();
b = 1;
}
}
End: if (!b)cout << "没有找到相关信息\n";
}/// <按性别查询>
void SearchJob(people* p, int n)
{
cout << "正在按类别查找 \n";
Out:cout << "请选择:1、教师 2、教辅 3、行政\n";
string x;
bool b = 0;
getline(cin, x);
if (x == "1" || x == "教师")x = "教师";
else if (x == "2" || x == "教辅")x = "教辅";
else if (x == "3" || x == "行政")x = "行政";
else
{
cout << "错误!目前本校职工分类只有上述三种,请重新输入\n";
goto Out;
}
for (int i = 0; i <= n; i++)
{
if (x == p[i].ID && p[i].ipID && p[i].Box)//如果找到了且是录入过的人
{
p[i].print();
b = 1;
}
}
if (!b)cout << "没有找到相关信息\n";
}/// <按类别查询>
///<统计功能> //
void Sumall(people* p, int n)
{
int Sum = 0;
Head:cout << "===============================================================\n";
cout << "1、按性别统计 2、按类别统计 3、按院系统计 4、按专业统计 5、返回\n";
cout << "===============================================================\n";
string s;
getline(cin, s);
if (s == "1")
{
cout << "正在按性别统计 \n";
Out1:cout << "请选择:1、男 2、女 3、返回\n";
string x;
bool b = 0;
getline(cin, x);
if (x == "1" || x == "男")x = "男";
else if (x == "2" || x == "女")x = "女";
else if (x == "3" || x == "返回") goto Head;
else
{
cout << "错误!你所在的地区目前只承认二元性别,请重新输入……\n";
goto Out1;
}
b = 1;
for (int i = 0; i < n; i++)
if (x == p[i].Sex && p[i].ipSex && p[i].Box)
Sum++;
if (b) cout << "性别为" << x << "的共有" << Sum << "人\n";
}
else if (s == "2")
{
cout << "正在按类别统计 \n";
Out2:cout << "请选择:1、教师 2、教辅 3、行政 4、返回\n";
string x;
bool b = 0;
getline(cin, x);
if (x == "1" || x == "教师")x = "教师";
else if (x == "2" || x == "教辅")x = "教辅";
else if (x == "3" || x == "行政")x = "行政";
else if (x == "4" || x == "返回") goto Head;
else
{
cout << "错误!目前本校职工分类只有上述三种,请重新输入\n";
goto Out2;
}
b = 1;
for (int i = 0; i < n; i++)
if (x == p[i].job && p[i].ipJob && p[i].Box)
Sum++;
if (b) cout << "类别为" << x << "的共有" << Sum << "人\n";
}
else if (s == "3")
{
cout << "正在按院系统计 \n";
cout << "请输入你要统计人数的院系(输入000返回)\n";
string x;
bool b = 0;
getline(cin, x);
if (x == "000" || x == "返回") goto Head;
else
{
for (int i = 0; i < n; i++)
if (x == p[i].Depart && p[i].ipDepart && p[i].Box)
Sum++;
cout << "院系为" << x << "的共有" << Sum << "人\n";
}
}
else if (s == "4")
{
cout << "正在按专业统计 \n";
cout << "请输入你要统计人数的专业(输入000返回)\n";
string x;
bool b = 0;
getline(cin, x);
if (x == "000" || x == "返回") goto Head;
else
{
for (int i = 0; i < n; i++)
if (x == p[i].Major && p[i].ipMajor && p[i].Box)
Sum++;
cout << "院系为" << x << "的共有" << Sum << "人\n";
}
}
else if (s == "5");
else
{
cout << "你输入的指令有误!!请重新输入\n";
goto Head;
}
}
///<删除功能> ///
void DeFi(people* p, int n)
{
string id;
int t;
cout << "==============================================\n";
cout << "删除功能需要提供准确的工号,以防出现误删的情况\n";
cout << "==============================================\n";
cout << "请在此处输入工号(输入000返回上一级菜单):";
getline(cin, id);
bool b = 0;
for (int i = 0; i <= n; i++)
{
if (id == p[i].ID && p[i].ipID && p[i].Box)//如果找到了且是录入过的人
{
p[i].print();
b = 1;
t = i;
}
}
if (!b)cout << "没有找到相关信息\n";
else
{
string g;
cout << "==============================================================\n";
cout << "工号:" << id << "的人员信息如上,请问是否删除?删除后无法找回\n";
cout << "==============================================================\n";
cout << "是(请输入1) 否(请输入任意内容)\n";
getline(cin, g);
if (g == "1")p[t].Delete();
}
}
/// <初始动画>/// //
void ani()
{
cout << "=========================================================\n";
cout << "$ 高校人员信息管理系统 $\n";
cout << "=========================================================\n";
cout << "loading";
for (int i = 0; i <= 8; i++)
{
Sleep(625);
cout << "。";
}
cout << "\n加载成功!!!!!!\n";
char a[29] = "欢迎使用高校人员信息管理系统";
for (int i = 0; i < 29; i++)
{
Sleep(40);
cout << a[i];
}
cout << "!!!!!!!\n";
}
/// <菜单ui>///
int Home()
{
cout << "===============================================================\n";
cout << "1、添加 2、查询 3、编辑 4、删除 5、统计 6、保存 7、显示 8、退出\n";
cout << "===============================================================\n";
cout << "请选择你要使用的功能:";
St:string n;
getline(cin, n);
if (n == "1" ||n== "添加")
return 1;
else if (n == "2" || n == "查询")
return 2;
else if (n == "3" || n == "编辑")
return 3;
else if (n == "4" || n == "删除")
return 4;
else if (n == "5" || n == "统计")
return 5;
else if (n == "6" || n == "保存")
return 6;
else if (n == "7" || n == "显示")
return 7;
else if (n == "8" || n == "退出")
return 8;
else
{
cout << "没有这个功能,请重新输入!\n";
goto St;
}
}
/// <编辑修改>/
void modi(people* p, int n)
{
string id;
int t;
cout << "==============================================\n";
cout << "编辑功能需要提供准确的工号,以精确定位\n";
cout << "==============================================\n";
cout << "请在此处输入工号(输入000返回上一级菜单):";
getline(cin, id);
bool b = 0;
for (int i = 0; i <= n; i++)
{
if (id == p[i].ID && p[i].ipID && p[i].Box)//如果找到了且是录入过的人
{
p[i].print();
b = 1;
t = i;
}
}
if (!b)cout << "没有找到相关信息\n";
else
{
string g;
cout << "==============================================================\n";
cout << "工号:" << id << "的人员信息如上,请选择要进行修改的项目\n";
cout << "==============================================================\n";
Co: cout << "1、工号 2、姓名 3、性别 4、类别 5、院系 6、专业 7、返回上一级\n";
getline(cin, g);
if (g == "1" || g == "工号")
{
string s = p[t].ID;
p[t].ipID = 0;
p[t].inseID(p, n);
if (p[t].ipID)cout << "工号已更改为" << p[t].ID << endl;
else
{
cout << "您刚刚似乎选择了跳过,请问是要将工号重置为默认还是不做更改呢?\n";
cout << "重置(输入1) 不做更改(输入任意内容)\n";
string d;
getline(cin, d);
if (d != "1")p[t].ID = s;
}
goto Co;
}
else if (g == "2" || g == "姓名")
{
string s = p[t].Name;
p[t].ipName = 0;
p[t].inseName();
if (p[t].ipName)cout << "姓名已更改为:" << p[t].Name << endl;
else
{
cout << "您刚刚似乎选择了跳过,请问是要将姓名重置为默认还是不做更改呢?\n";
cout << "重置(输入1) 不做更改(输入任意内容)\n";
string d;
getline(cin, d);
if (d != "1")p[t].Name = s;
}
goto Co;
}
else if (g == "3" || g == "性别")
{
string s = p[t].Sex;
p[t].ipSex = 0;
p[t].inseSex();
if (p[t].ipSex)cout << "性别已更改为:" << p[t].Sex << endl;
else
{
cout << "您刚刚似乎选择了跳过,请问是要将性别重置为默认还是不做更改呢?\n";
cout << "重置(输入1) 不做更改(输入任意内容)\n";
string d;
getline(cin, d);
if (d != "1")p[t].Sex = s;
}
goto Co;
}
else if (g == "4" || g == "类别")
{
string s = p[t].job;
p[t].ipJob = 0;
p[t].insejob();
if (p[t].ipJob)cout << "类别已更改为:" << p[t].job << endl;
else
{
cout << "您刚刚似乎选择了跳过,请问是要将类别重置为默认还是不做更改呢?\n";
cout << "重置(输入1) 不做更改(输入任意内容)\n";
string d;
getline(cin, d);
if (d != "1")p[t].job= s;
}
goto Co;
}
else if (g == "5" || g == "院系")
{
string s = p[t].Depart;
p[t].ipDepart = 0;
p[t].inseDepart();
if (p[t].ipDepart)cout << "院系已更改为:" << p[t].Depart << endl;
else
{
cout << "您刚刚似乎选择了跳过,请问是要将院系重置为默认还是不做更改呢?\n";
cout << "重置(输入1) 不做更改(输入任意内容)\n";
string d;
getline(cin, d);
if (d != "1")p[t].Depart = s;
}
goto Co;
}
else if (g == "6" || g == "专业")
{
string s = p[t].Depart;
p[t].ipMajor = 0;
p[t].inseMajor();
if (p[t].ipMajor)cout << "专业已更改为:" << p[t].Major << endl;
else
{
cout << "您刚刚似乎选择了跳过,请问是要将专业重置为默认还是不做更改呢?\n";
cout << "重置(输入1) 不做更改(输入任意内容)\n";
string d;
getline(cin, d);
if (d != "1")p[t].Major = s;
}
goto Co;
}
else if (g == "7" || g == "返回上一级");
else cout << "抱歉,无法为您更改,现在为您返回到上一级菜单\n";
}
}
void search(people *p,int n)
{
cout << "欢迎使用查找功能!!!\n";
cout << "=========================================================================\n";
cout << "1、关键词查找 2、按工号精确查找 3、按姓名查找 4、按性别查询 5、按类别查询\n";
cout << "=========================================================================\n";
string s;
string d;
getline(cin, s);
if (s == "1" || s == "关键词查找")
{
cout << "请输入你要查找的关键字:\n";
getline(cin, d);
SearchAll(p, d, n);
}
else if (s == "2" || s == "按工号精确查找")
{
cout << "请输入你要查找的人员工号:\n";
getline(cin, d);
SearchID(p, d, n);
}
else if (s == "3" || s == "按姓名精确查找")
{
cout << "请输入你要查找的人员姓名:\n";
getline(cin, d);
SearchName(p, d, n);
}
else if (s == "4" || s == "按性别查询")
{
// cout << "请输入你要查询的性别:\n";
// getline(cin, d);
SearchSex(p, n);
}
else if (s == "5" || s == "按类别查询")
{
// cout << "请输入你要查询的类别:\n";
// getline(cin, d);
SearchJob(p, n);
}
else cout << "抱歉,没有这个功能,已为您返回上一级菜单\n";
}
void CreatTxt(people *p,int n)
{
ofstream fout("人员信息名单.txt");
if (fout.is_open())
{
// 写入内容到文件
for (int i = 0; i < n; i++) {
if (p[i].Box) {
fout << "工号:" << p[i].ID << endl;
fout << "姓名:" << p[i].Name << endl;
fout << "性别:" << p[i].Sex << endl;
fout << "类别:" << p[i].job << endl;
fout << "院系:" << p[i].Depart << endl;
fout << "专业:" << p[i].Major << endl << endl;
}
}
fout.close();
cout << "文件写入成功!" << endl;
}
else
cout << "无法打开文件!" << endl;
}
int main()
{
people* pe;
pe = new people[1000];
int num = 0;
int sum = 0;
ani();
bool out = 0;
while (1)
{
switch (Home())
{
case 1:
pe[num].inse(pe, sum);
num++;
sum++; break;
case 2:
if (sum == 0)cout << "系统为空,请先录入信息!\n";
else search(pe, sum); break;
case 3:
if (sum == 0)cout << "系统为空,请先录入信息!\n";
else modi(pe, sum); break;
case 4:
if (sum == 0)cout << "系统为空,请先录入信息!\n";
else DeFi(pe, sum); num--;
sum--; break;
case 5:
if (sum == 0)cout << "系统为空,请先录入信息!\n";
else Sumall(pe, sum); break;
case 6:if (sum == 0)cout << "系统为空,请先录入信息!\n";
else CreatTxt(pe, sum); break;
case 7:if (sum == 0)cout << "系统为空,请先录入信息!\n";
for (int i = 0; i < num; i++)
{
pe[i].print();
}break;
case 8:out = 1; break;
default:cout << "没有这个功能,请重新输入!\n";
}
if (out)break;
}
}