c++软件工程师管理系统信息添加、修改、删除、排序、查找、显示、保存
时间: 2023-12-23 20:03:08 浏览: 25
以下是一个C++软件工程师管理系统的示例,包括信息添加、修改、删除、排序、查找、显示和保存功能。该系统使用文件进行数据的保存和修改。
```c++
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
// 虚基类Staff
class Staff {
public:
Staff(string name, int age, string gender, string id) : name(name), age(age), gender(gender), id(id) {}
virtual void display() = 0; // 纯虚函数
virtual string getType() = 0; // 纯虚函数
string getName() { return name; }
int getAge() { return age; }
string getGender() { return gender; }
string getId() { return id; }
protected:
string name;
int age;
string gender;
string id;
};
// 工程师类Engineer
class Engineer : public Staff {
public:
Engineer(string name, int age, string gender, string id, string major) : Staff(name, age, gender, id), major(major) {}
void display() {
cout << "工程师:" << name << ",年龄:" << age << ",性别:" << gender << ",工号:" << id << ",专业:" << major << endl;
}
string getType() { return "Engineer"; }
private:
string major;
};
// 领导类Leader
class Leader : public Staff {
public:
Leader(string name, int age, string gender, string id, string department) : Staff(name, age, gender, id), department(department) {}
void display() {
cout << "领导:" << name << ",年龄:" << age << ",性别:" << gender << ",工号:" << id << ",部门:" << department << endl;
}
string getType() { return "Leader"; }
private:
string department;
};
// 主任工程师类Chairman
class Chairman : public Staff {
public:
Chairman(string name, int age, string gender, string id, string major, string department) : Staff(name, age, gender, id), major(major), department(department) {}
void display() {
cout << "主任工程师:" << name << ",年龄:" << age << ",性别:" << gender << ",工号:" << id << ",专业:" << major << ",部门:" << department << endl;
}
string getType() { return "Chairman"; }
private:
string major;
string department;
};
// 管理类Manager
class Manager {
public:
Manager(string filename) : filename(filename) {
ifstream fin(filename);
if (!fin) {
ofstream fout(filename);
fout.close();
} else {
fin.close();
}
}
void addStaff(Staff* staff) {
staffs.push_back(staff);
}
void updateStaff(string id) {
for (auto staff : staffs) {
if (staff->getId() == id) {
string name, gender;
int age;
cout << "请输入姓名:";
cin >> name;
cout << "请输入年龄:";
cin >> age;
cout << "请输入性别:";
cin >> gender;
staff->name = name;
staff->age = age;
staff->gender = gender;
cout << "修改成功!" << endl;
return;
}
}
cout << "未找到该员工!" << endl;
}
void deleteStaff(string id) {
for (auto it = staffs.begin(); it != staffs.end(); it++) {
if ((*it)->getId() == id) {
staffs.erase(it);
cout << "删除成功!" << endl;
return;
}
}
cout << "未找到该员工!" << endl;
}
void sortStaffs() {
sort(staffs.begin(), staffs.end(), [](Staff* a, Staff* b) { return a->getId() < b->getId(); });
cout << "排序成功!" << endl;
}
void searchStaff(string id) {
for (auto staff : staffs) {
if (staff->getId() == id) {
staff->display();
return;
}
}
cout << "未找到该员工!" << endl;
}
void displayAllStaffs() {
for (auto staff : staffs) {
staff->display();
}
}
void saveToFile() {
ofstream fout(filename);
for (auto staff : staffs) {
fout << staff->getType() << " " << staff->getName() << " " << staff->getAge() << " " << staff->getGender() << " " << staff->getId();
if (staff->getType() == "Engineer") {
Engineer* engineer = dynamic_cast<Engineer*>(staff);
fout << " " << engineer->getType();
} else if (staff->getType() == "Leader") {
Leader* leader = dynamic_cast<Leader*>(staff);
fout << " " << leader->getType();
} else if (staff->getType() == "Chairman") {
Chairman* chairman = dynamic_cast<Chairman*>(staff);
fout << " " << chairman->getType() << " " << chairman->major << " " << chairman->department;
}
fout << endl;
}
fout.close();
cout << "保存成功!" << endl;
}
private:
string filename;
vector<Staff*> staffs;
};
// 主函数
int main() {
Manager manager("staffs.txt");
while (true) {
cout << "请选择操作:1.添加员工 2.修改员工 3.删除员工 4.排序员工 5.查找员工 6.显示所有员工 7.保存员工信息 0.退出" << endl;
int choice;
cin >> choice;
if (choice == 0) {
break;
} else if (choice == 1) {
cout << "请选择员工类型:1.工程师 2.领导 3.主任工程师" << endl;
int type;
cin >> type;
string name, gender, id;
int age;
cout << "请输入姓名:";
cin >> name;
cout << "请输入年龄:";
cin >> age;
cout << "请输入性别:";
cin >> gender;
cout << "请输入工号:";
cin >> id;
if (type == 1) {
string major;
cout << "请输入专业:";
cin >> major;
Engineer* engineer = new Engineer(name, age, gender, id, major);
manager.addStaff(engineer);
cout << "添加成功!" << endl;
} else if (type == 2) {
string department;
cout << "请输入部门:";
cin >> department;
Leader* leader = new Leader(name, age, gender, id, department);
manager.addStaff(leader);
cout << "添加成功!" << endl;
} else if (type == 3) {
string major, department;
cout << "请输入专业:";
cin >> major;
cout << "请输入部门:";
cin >> department;
Chairman* chairman = new Chairman(name, age, gender, id, major, department);
manager.addStaff(chairman);
cout << "添加成功!" << endl;
} else {
cout << "输入错误!" << endl;
}
} else if (choice == 2) {
string id;
cout << "请输入要修改的员工工号:";
cin >> id;
manager.updateStaff(id);
} else if (choice == 3) {
string id;
cout << "请输入要删除的员工工号:";
cin >> id;
manager.deleteStaff(id);
} else if (choice == 4) {
manager.sortStaffs();
} else if (choice == 5) {
string id;
cout << "请输入要查找的员工工号:";
cin >> id;
manager.searchStaff(id);
} else if (choice == 6) {
manager.displayAllStaffs();
} else if (choice == 7) {
manager.saveToFile();
} else {
cout << "输入错误!" << endl;
}
}
return 0;
}
```