数据结构程序设计实验三
1 //[问题描述] 每个员工的信息包括:编号、姓名、性别、出生年月、学历、职务、电话、住址等。 2 //系统能够完成员工信息的查询、更新、插入、删除、排序等功能。 3 //[基本要求] (1) ok排序:按不同关键字,对所有员工的信息进行排序。(2) ok查询:按特定条件查找员工。 4 //(3) ok更新:按编号对某个员工的某项信息进行修改。 (4) ok插入:加入新员工的信息。 (5) ok删除:按编号删除已离职的员工的信息。 5 6 7 8 #include<iostream> 9 #include<cstdio> 10 #include<string> 11 #include<vector> 12 #include<algorithm> 13 using namespace std; 14 15 class Management { 16 public: 17 int ID;//编号 18 string name;//姓名 19 string sex;//性别 20 string birth;//出生年月 21 string diploma;//学历 22 string job;//职务 23 string tele;//电话 24 string address;//住址 25 public: 26 Management(){} 27 Management(int id,string Name,string Sex,string Birth,string Diploma, 28 string Job,string Tele,string Address):ID(id),name(Name),sex(Sex), 29 birth(Birth),diploma(Diploma),job(Job),tele(Tele),address(Address){} 30 31 friend ostream& operator<<(ostream& out, const Management& e); 32 friend istream& operator>>(istream& in, Management& e); 33 }; 34 35 istream& operator>>(istream& in, Management& e) 36 { 37 cout << "输入ID:"; cin >> e.ID;cout << "输入姓名:"; cin >> e.name; 38 cout << "输入性别:"; cin >> e.sex; cout << "输入出生年月:"; cin >> e.birth; 39 cout << "输入学历:"; cin >> e.diploma; cout << "输入职务:"; cin >> e.job; 40 cout << "输入电话:"; cin >> e.tele; cout << "输入住址:"; cin >> e.address; 41 return in;//输入编号、姓名、性别、出生年月、学历、职务、电话、住址 42 } 43 44 ostream& operator<<(ostream& out, const Management& e) 45 { 46 cout << "ID:"; out<< e.ID<<endl; cout << "姓名:"; out << e.name << endl; 47 cout << "性别:"; out << e.sex << endl; cout << "出生年月:"; out << e.birth << endl; 48 cout << "学历:"; out << e.diploma << endl; cout << "职务:"; out << e.job << endl; 49 cout << "电话:"; out << e.tele << endl; cout << "住址:"; out << e.address << endl; 50 return out;//输出 51 } 52 53 class EmployeeManagement :public Management { 54 private: 55 vector<Management>employees; 56 public: 57 void addEmployee(const Management& e) {//添加员工 58 employees.push_back(e); 59 } 60 61 void deleteEmployee(int id) {//删除员工 62 auto it = remove_if(employees.begin(), employees.end(), [id](const Management& e) { 63 return e.ID == id; 64 });//将对应ID员工放在容器末尾 65 employees.erase(it, employees.end()); 66 } 67 68 void updateEmployee(int id) {//更新员工信息 69 for (auto& e : employees){ 70 if (e.ID == id){ 71 Management ne; 72 cout << "输入该员工新信息:\n"; 73 cin >> ne; 74 e = ne; 75 } 76 } 77 cout << "未找到员工信息!\n"; 78 } 79 80 void findEmployee(int id) {//按id查找员工 81 for (const auto& e : employees){ 82 if (e.ID == id){ 83 cout << e; 84 return; 85 } 86 } 87 cout << "未找到员工信息!\n"; 88 } 89 90 void sortEmployees(int option) {//按不同方式排序 91 if (option == 1) { 92 // 按编号排序 93 sort(employees.begin(), employees.end(), [](const Management& e1, const Management& e2) { 94 return e1.ID < e2.ID; 95 }); 96 } 97 else if (option == 2) { 98 // 按姓名排序 99 sort(employees.begin(), employees.end(), [](const Management& e1, const Management& e2) { 100 return e1.name < e2.name; 101 }); 102 } 103 else if (option == 3) { 104 // 按职位排序 105 sort(employees.begin(), employees.end(), [](const Management& e1, const Management& e2) { 106 return e1.job < e2.job; 107 }); 108 } 109 cout << "排序完成!\n"; 110 } 111 112 void displayEmoployees()const{//显示所有员工信息 113 if (employees.empty()) { 114 cout << "没有员工信息!\n"; 115 return; 116 } 117 int i = 1; 118 for (const auto& e : employees){ 119 cout << string(20, '-') << "第" << i << "位员工信息" << string(20, '-') << endl; 120 cout << e ; 121 i++; 122 } 123 } 124 }; 125 126 void menu() 127 { 128 cout << "\n员工管理系统\n"; 129 cout << "1.添加员工\n"; 130 cout << "2.删除员工\n"; 131 cout << "3.更新员工信息\n"; 132 cout << "4.按ID查找员工\n"; 133 cout << "5.对员工排序\n"; 134 cout << "6.显示所有员工\n"; 135 cout << "0.退出系统\n"; 136 cout << "请输入选择:"; 137 } 138 139 int main() 140 { 141 EmployeeManagement manager; 142 int choice; 143 while (true) 144 { 145 menu(); 146 cin >> choice; 147 if (choice == 0) 148 break; 149 switch (choice) { 150 case 1: { 151 Management e; 152 cout << "输入要添加的员工信息:\n"; 153 cin >> e; 154 manager.addEmployee(e); 155 break; 156 } 157 case 2: { 158 int id; 159 cout << "输入要删除的员工ID:\n"; 160 cin >>id; 161 manager.deleteEmployee(id); 162 break; 163 } 164 case 3: { 165 int id; 166 cout << "输入要更新的员工ID:\n"; 167 cin >> id; 168 manager.updateEmployee(id); 169 break; 170 } 171 case 4:{ 172 int id; 173 cout << "输入要查找的员工ID:\n"; 174 cin >> id; 175 manager.findEmployee(id); 176 break; 177 } 178 case 5: { 179 int option; 180 cout << "1.按编号排序\n"; 181 cout << "2.按姓名排序\n"; 182 cout << "3.按职位排序\n"; 183 cout << "输入选择的排序方式:"; 184 cin >> option; 185 manager.sortEmployees(option); 186 break; 187 } 188 case 6: { 189 cout << "所有员工信息如下:\n"; 190 manager.displayEmoployees(); 191 break; 192 } 193 194 } 195 } 196 return 0; 197 }