时间:2022-07-15 08:34:46 | 栏目:C代码 | 点击:次
本文实例为大家分享了C++实现教职工信息管理系统的具体代码,供大家参考,具体内容如下
/*教职工信息管理 基本要求: 定义职工(employee )类,其中至少包括姓名、性别、工号、电话、所在系部和职称。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入职工信息,并保存到文件中; 3、查询功能: 1)能够根据工号精确查询职工信息; 2)能够根据姓名、科室查询职工信息 3)分系部进行职称统计,计算各职称的人数 4、根据职工的职称排序输出 5、根据工号修改职工信息 6、根据工号删除职工信息*/ #include<iostream> #include<cstring> #include<fstream> using namespace std; class employee { public: employee() { } employee(char na[50], char sex[50], int num, char tel[20], char off[50], char pos[50]) :m_number(num) { strcpy(m_name, na); strcpy(m_sex, sex); strcpy(m_telephone, tel); strcpy(m_office, off); strcpy(m_posting, pos); } int getnum() { return m_number; } char *getna() // { return m_name; } char *getoff() { return m_office; } char *getposting() // { return m_posting; } friend ostream& operator <<(ostream &os, const employee & s) { os << "姓名:" << s.m_name << " 性别:" << s.m_sex << " 工号:" << s.m_number << " 电话:" << s.m_telephone << " 所在系部:" << s.m_office << " 职称:" << s.m_posting << endl; return os; } friend istream& operator >>(istream &is, employee &s) { is >> s.m_name >> s.m_sex >> s.m_number >> s.m_telephone >> s.m_office >> s.m_posting; return is; } ~employee() { } private: char m_name[50]; char m_sex[50]; int m_number; char m_telephone[20]; char m_office[50]; char m_posting[50]; };
菜单功能选择:
void menu() //1)菜单功能选择 { cout << "************************************* 教职工信息管理系统 *************************************" << endl; cout << "**----------------------------------------------------------------------------------------------**" << endl; cout << "** ----------------------------- **" << endl; cout << "** | * 1.录入人员信息并保存 | **" << endl; cout << "** | * 2.按工号查找人员 | **" << endl; cout << "** | * 3.按姓名+科室查找人员 | **" << endl; cout << "** | * 4.分系部职称人数统计 | **" << endl; cout << "** | * 5.按职称对人员排序 | **" << endl; cout << "** | * 6.按工号修改人员信息 | **" << endl; cout << "** | * 7.按工号删除人员信息 | **" << endl; cout << "** | * 8.查看所有人员信息 | **" << endl; cout << "** | * 0.关闭系统 | **" << endl; cout << "** ----------------------------- **" << endl; cout << "**----------------------------------------------------------------------------------------------**" << endl; cout << "**请输入序号使用对应的功能:(0,1,2,3,4,5,6,7,8) **" << endl; cout << "**************************************************************************************************" << endl; }
输入信息:
void input() //2)输入保存 { fstream fs; int len; cout << "请输入教职工人数:" << endl; cin >> len; employee *emp = new employee[len]; //开辟空间,存教职工数据 fs.open("guanli.dat", ios::out | ios::app | ios::binary); if (!fs) cout << "Open failed." << endl; else { cout << "Open succeedly." << endl; cout << "请输入教职工的姓名,性别,工号,电话,所在系部,职称:" << endl; for (int i = 0; i<len; i++) { cin >> emp[i]; fs.write((char *)& emp[i], sizeof(emp[i])); //fs<<emp[i]<<endl;二进制 } } fs.close(); delete[] emp; }
查询功能(根据工号):
void find1() //3-1)查询---能够根据工号精确查询职工信息; { int num; cout << "请输入教职工的工号:" << endl; cin >> num; fstream fs; fs.open("guanli.dat", ios::in | ios::binary); fs.seekg(0, ios::end); //文件调到末尾 int s = fs.tellg(); //告诉文件大小 int n = s / sizeof(employee); //计算职工人数 fs.seekg(ios::beg); //文件指针调到文件开头 employee *emp = new employee[n]; for (int i = 0; i<n; i++) fs.read((char *)& emp[i], sizeof(emp[i])); //读入到内存 fs.close(); int a = -100; for (i = 0; i<n; i++) { if (num == emp[i].getnum()) { cout << emp[i]; a = i; } } if (a == -100) cout << "工号不正确!无此人!" << endl; delete[] emp; }
查询功能(根据姓名、科室):
void find2() //3-2)查询---能够根据姓名、科室查询职工信息 { char na[50]; char off[50]; cout << "请输入教职工的姓名:" << endl; cin >> na; cout << "请输入教职工所属科室:" << endl; cin >> off; fstream fs; fs.open("guanli.dat", ios::in | ios::binary); fs.seekg(0, ios::end); int s = fs.tellg(); int n = s / sizeof(employee); fs.seekg(ios::beg); employee *emp = new employee[n]; for (int i = 0; i<n; i++) fs.read((char *)&emp[i], sizeof(emp[i])); fs.close(); int a = -100; for (i = 0; i<n; i++) { if (strcmp(na, emp[i].getna())==0 && strcmp(off, emp[i].getoff())==0) { cout << emp[i] << endl; a = i; } } if (a == -100) cout << "名字或所属科室不正确!无此人!" << endl; }
统计人数:
void find3() //3-3)分系部进行职称统计,计算各职称的人数 { char off[50], posting[50]; cout << "请输入所查系部:" << endl; cin >> off; cout << "请输入所查职称:" << endl; cin >> posting; fstream fs; fs.open("guanli.dat", ios::in | ios::binary); fs.seekg(0, ios::end); int s = fs.tellg(); int n = s / sizeof(employee); fs.seekg(ios::beg); employee *emp = new employee[n]; for (int i = 0; i<n; i++) fs.read((char *)&emp[i], sizeof(emp[i])); fs.close(); int sum = 0; for (i=0; i<n; i++) { if (strcmp(off, emp[i].getoff()) == 0 && strcmp(posting, emp[i].getposting()) == 0) sum++; } cout << "该部门此职称有" << sum << "人!" << endl; delete[] emp; }
排序输出:
void output() //4)根据职工的职称排序输出 { fstream fs; fs.open("guanli.dat", ios::in | ios::binary); fs.seekg(0, ios::end); int s = fs.tellg(); int n = s / sizeof(employee); fs.seekg(ios::beg); employee *emp = new employee[n]; for (int i = 0; i<n; i++) fs.read((char *)&emp[i], sizeof(emp[i])); fs.close(); employee temp; for (int j = 0; j<n - 1; j++) { for (int k = 0; k<n - 1 - j; k++) { if (strcmp(emp[k].getposting(), emp[k + 1].getposting())>0) { temp = emp[k]; emp[k] = emp[k + 1]; emp[k + 1] = temp; } } } for (i = 0; i<n; i++) cout << emp[i]; delete[] emp; }
修改功能:
void modify() //5)根据工号修改职工信息 { fstream fs; fs.open("guanli.dat", ios::in | ios::out | ios::binary); fs.seekg(0, ios::end); int s = fs.tellg(); int n = s / sizeof(employee); fs.seekg(ios::beg); employee *emp = new employee[n]; for (int i = 0; i<n; i++) fs.read((char *)&emp[i], sizeof(emp[i])); int num; cout << "请输入所修改的职工号:" << endl; cin >> num; int a=-100; for (i = 0; i < n; i++) { if (num == emp[i].getnum()) { fs.seekp(sizeof(employee)*i); employee e; cout << "请输入要修改的教职工的姓名,性别,工号,电话,所属系部,职称:" << endl; cin >> e; fs.write((char *)&e, sizeof(employee)); cout << "职工信息修改成功!" << endl; a = i; } } if(a==-100) cout << "工号不正确!无此人!" << endl; fs.close(); delete[] emp; }
删除功能:
void del() // 6)根据工号删除职工信息 { fstream fs; fs.open("guanli.dat", ios::in | ios::out | ios::binary); fs.seekg(0, ios::end); int s = fs.tellg(); int n = s / sizeof(employee); fs.seekg(ios::beg); employee *emp = new employee[n]; for (int i = 0; i<n; i++) { fs.read((char *)&emp[i], sizeof(emp[i])); } fs.close(); int num; cout << "请输入要删除的职工号:" << endl; cin >> num; int a=-100; for ( i = 0; i<n; i++) { if (num == emp[i].getnum()) a = i; } if(a==-100) cout << "工号不正确!无此人!" << endl; fs.open("guanli.dat", ios::out | ios::binary); if (!fs) cout << "Open failed." << endl; else { cout << "Open succeedly." << endl; for (int i = 0; i<n; i++) { if (i == a) continue; else fs.write((char *)& emp[i], sizeof(emp[i])); } } if (a >= 0 && a <= n) cout << "删除成功!" << endl; else cout << "删除失败!" << endl; fs.close(); fs.clear(); delete[] emp; }
查看功能:
void show() //8.查看所有人员信息 { fstream fs; fs.open("guanli.dat", ios::in | ios::binary); fs.seekg(0, ios::end); int s = fs.tellg(); int n = s / sizeof(employee); fs.seekg(ios::beg); employee *emp = new employee[n]; for (int i = 0; i<n; i++) { fs.read((char *)&emp[i], sizeof(emp[i])); cout << emp[i]; } fs.close(); delete[] emp; }
主函数:
int main() { char flag = 'n'; while (flag == 'n' || flag == 'N') //由y/n控制循环 { menu(); int judge; cin >> judge; if (judge >= 0 && judge <= 8) { switch (judge) { case 0: cout << "是否退出系统(y/n):" << endl; cin >> flag; break; case 1: input(); break; case 2: find1(); break; case 3: find2(); break; case 4: find3(); break; case 5: output(); break; case 6: modify(); break; case 7: del(); break; case 8: show(); break; default: break; } } else cout << "输入错误,请重新输入!" << endl; cout << "------------------------------------------Press any key to continue!------------------------------" << endl; getchar(); getchar(); system("cls"); } return 0; }
运行主界面:(其余的图就不图啦)