【补档】C++高校人员信息管理系统

博客展示了C++程序的运行效果,虽有几个功能未完全实现,但可先凑合查看,细节详解后续更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

细节详解之后更新,这是运行效果:

貌似有几个功能没有完全实现,凑合看

// 高校人员信息管理系统.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;
    }
}

1、问题描述 某高校有四类员工教师、实验员、行政人员教师兼行政人员共有的信息包括编号、姓名、性别、年龄等。其中教师还包含的信息有所在系部、专业、职称实验员还包含的信息由所在实验室、职务行政人员还包含的信息有政治面貌、职称等。 2、功能要求 (1)添加功能程序能够任意添加上述四类人员的记录可提供选择界面供用户选择所要添加的人员类别要求员工的编号要唯一如果添加了重复编号的记录时则提示数据添加重复并取消添加。 (2)查询功能可根据编号、姓名等信息对已添加的记录进行查询如果未找到给出相应的提示信息如果找到则显示相应的记录信息。 (3)显示功能可显示当前系统中所有记录每条记录占据一行。 (4)编辑功能可根据查询结果对相应的记录进行修改修改时注意编号的唯一性。 (5)删除功能主要实现对已添加的人员记录进行删除。如果当前系统中没有相应的人员记录则提示“记录为空”并返回操作否则输入要删除的人员的编号或姓名根据所输入的信息删除该人员记录如果没有找到该人员信息则提示相应的记录不存。 (6)统计功能能根据多种参数进行人员的统计。能统计四类人员数量以及总数,统计男、女员工的数量。 (7)保存功能可将当前系统中各类人员记录存入文件中存入方式任意。 (8)读取功能可将保存在文件中的人员信息读入到当前系统中供用户进行使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值