用链式存储用c++做一个教师管理系统 功能有增 删 改 查
时间: 2024-02-12 08:03:32 浏览: 28
好的,我可以为您提供一个包含增删改查功能的教师管理系统的代码实现。代码如下:
```c++
#include <iostream>
#include <string>
using namespace std;
// 教师类
class Teacher {
public:
string name; // 姓名
string id; // 工号
char gender; // 性别
int age; // 年龄
Teacher* next; // 指向下一个节点的指针
};
// 链表类
class TeacherList {
public:
TeacherList() {
head = tail = nullptr;
}
~TeacherList() {
Teacher* p = head;
while (p != nullptr) {
Teacher* q = p->next;
delete p;
p = q;
}
}
// 添加教师
void addTeacher(Teacher* t) {
if (head == nullptr) {
head = tail = t;
} else {
tail->next = t;
tail = t;
}
}
// 删除教师
void removeTeacher(string id) {
Teacher* p = head;
Teacher* prev = nullptr;
while (p != nullptr) {
if (p->id == id) {
if (prev == nullptr) {
head = p->next;
} else {
prev->next = p->next;
}
if (p == tail) {
tail = prev;
}
delete p;
break;
}
prev = p;
p = p->next;
}
}
// 修改教师
void updateTeacher(string id) {
Teacher* p = head;
while (p != nullptr) {
if (p->id == id) {
cout << "请输入新的姓名:";
cin >> p->name;
cout << "请输入新的性别:";
cin >> p->gender;
cout << "请输入新的年龄:";
cin >> p->age;
break;
}
p = p->next;
}
}
// 查找教师
void findTeacher(string id) {
Teacher* p = head;
while (p != nullptr) {
if (p->id == id) {
cout << "姓名:" << p->name << endl;
cout << "工号:" << p->id << endl;
cout << "性别:" << p->gender << endl;
cout << "年龄:" << p->age << endl;
return;
}
p = p->next;
}
cout << "查无此人!" << endl;
}
// 打印所有教师
void printAllTeachers() {
Teacher* p = head;
while (p != nullptr) {
cout << "姓名:" << p->name << endl;
cout << "工号:" << p->id << endl;
cout << "性别:" << p->gender << endl;
cout << "年龄:" << p->age << endl;
cout << endl;
p = p->next;
}
}
private:
Teacher* head; // 头指针
Teacher* tail; // 尾指针
};
int main() {
TeacherList list;
// 添加教师
Teacher* t1 = new Teacher{"张三", "001", 'M', 35, nullptr};
Teacher* t2 = new Teacher{"李四", "002", 'F', 28, nullptr};
Teacher* t3 = new Teacher{"王五", "003", 'M', 42, nullptr};
list.addTeacher(t1);
list.addTeacher(t2);
list.addTeacher(t3);
while (true) {
// 显示菜单
cout << "请选择要执行的操作:" << endl;
cout << "1. 添加教师" << endl;
cout << "2. 删除教师" << endl;
cout << "3. 修改教师" << endl;
cout << "4. 查找教师" << endl;
cout << "5. 打印所有教师" << endl;
cout << "6. 退出" << endl;
// 接收用户输入
int choice;
cout << "请输入要执行的操作编号:";
cin >> choice;
switch (choice) {
case 1: {
// 添加教师
string name, id;
char gender;
int age;
cout << "请输入姓名:";
cin >> name;
cout << "请输入工号:";
cin >> id;
cout << "请输入性别:";
cin >> gender;
cout << "请输入年龄:";
cin >> age;
Teacher* t = new Teacher{name, id, gender, age, nullptr};
list.addTeacher(t);
cout << "添加成功!" << endl;
break;
}
case 2: {
// 删除教师
string id;
cout << "请输入要删除的教师工号:";
cin >> id;
list.removeTeacher(id);
cout << "删除成功!" << endl;
break;
}
case 3: {
// 修改教师
string id;
cout << "请输入要修改的教师工号:";
cin >> id;
list.updateTeacher(id);
cout << "修改成功!" << endl;
break;
}
case 4: {
// 查找教师
string id;
cout << "请输入要查找的教师工号:";
cin >> id;
list.findTeacher(id);
break;
}
case 5: {
// 打印所有教师
list.printAllTeachers();
break;
}
case 6: {
// 退出
cout << "再见!" << endl;
return 0;
}
default: {
cout << "无效的操作编号,请重新输入!" << endl;
break;
}
}
}
return 0;
}
```
以上就是一个简单的基于链式存储的教师管理系统的完整代码实现。您可以根据需要对其进行扩展和优化。