👉博__主👈:米码收割机
👉技__能👈:C++/Python语言
👉专__注👈:专注主流机器人、人工智能等相关领域的开发、测试技术。
【C++】C+±教师信息管理系统(含源码)【独一无二】
目录
- 【C++】C++-教师信息管理系统(含源码)【独一无二】
- 一、设计要求
- **教师开课信息管理系统 - 设计要求**
- **1. 功能需求**
- **2. 数据存储方式**
- 二、设计思路
- 1. 数据结构模块
- 设计思路
- 代码
- 2. 数据存储模块
- 设计思路
- 代码
- 3. 文件读写模块
- 设计思路
- 代码
- 4. 添加教师信息模块
- 设计思路
- 代码
- 5. 浏览教师信息模块
- 设计思路
- 代码
- 6. 查询教师信息模块
- 设计思路
- 代码
- 7. 删除教师信息模块
- 设计思路
- 代码
- 8. 修改教师信息模块
- 设计思路
- 代码
- 9. 主函数与菜单交互模块
- 设计思路
- 代码
- 三、可视化分析
一、设计要求
教师开课信息管理系统 - 设计要求
本系统用于管理教师的开课信息,提供信息的录入、查询、修改、删除及数据存储功能。数据存储在本地文件 teachers.txt
,确保系统关闭后数据不丢失。
1. 功能需求
(1)数据加载
程序启动时,从 teachers.txt
读取教师数据,存入内存列表。如果文件不存在或格式错误,则初始化为空数据。
(2)添加教师信息
用户输入教师 职工号、姓名、职称、电话、开课名称和可容纳人数,职工号需唯一,否则提示错误。添加成功后,数据同步存入 teachers.txt
。
(3)浏览教师信息
系统以列表形式展示所有教师的开课信息,包括 职工号、姓名、职称、电话、开课名称和可容纳人数。
(4)查询教师信息
用户可按 职工号或姓名 查询,若匹配成功,显示教师详细信息,否则提示未找到。
(5)删除教师信息
用户输入 职工号 删除教师信息。若存在该教师,则从列表和 teachers.txt
中删除,否则提示错误。
(6)修改教师信息
用户输入 职工号,可修改 姓名、职称、电话、开课名称和可容纳人数,但职工号不可更改。修改后数据同步更新至 teachers.txt
。
(7)退出系统
确保所有修改已保存,防止数据丢失。
2. 数据存储方式
(1)文件格式:每行存储一名教师信息,字段间以空格分隔,例如:
(2)数据结构:使用 struct Teacher
结构体存储教师信息,vector<Teacher>
作为数据容器。
二、设计思路
1. 数据结构模块
设计思路
使用 struct Teacher
定义教师信息的数据结构,其中包含教师的职工号、姓名、职称、电话、开课名称及可容纳人数等属性。这是整个系统的核心数据单元,用于存储每条教师的开课信息。
代码
struct Teacher {
std::string id; // 职工号
std::string name; // 姓名
std::string title; // 职称
std::string phone; // 电话
std::string course; // 开课名称
int capacity; // 可容纳人数
};
2. 数据存储模块
设计思路
采用全局 std::vector<Teacher>
变量 teachers 存储所有教师信息。这样可以方便地对教师信息进行增加、查询、删除和修改等操作。
代码
std::vector<Teacher> teachers;
3. 文件读写模块
设计思路
为保持教师信息的持久化,需要将数据保存到文件中,也可在程序启动时从文件中加载数据。
- loadFromFile() 函数负责从指定的文本文件中读取教师信息,并将数据存到全局
teachers
容器中。 - saveToFile() 函数将当前的教师信息写入文件,覆盖之前的数据。
代码
void loadFromFile(const std::string& filename) {
std::ifstream file(filename);
if (!file.is_open()) return;
teachers.clear();
Teacher t;
while (file >> t.id >> t.name >> t.title >> t.phone >> t.course >> t.capacity) {
//此处略去20+行代码
}
4. 添加教师信息模块
设计思路
提供 addTeacher()
函数,通过用户输入教师的信息,构造一个 Teacher 对象。
添加前先判断教职工号是否已存在(利用 std::find_if
查重),若不存在则将其加入到 teachers
容器中并保存到文件;否则提示添加失败。
代码
void addTeacher() {
Teacher t;
std::cout << "请输入职工号: ";
std::cin >> t.id;
std::cout << "请输入姓名: ";
std::cin >> t.name;
//此处略去20+行代码
if (it == teachers.end()) {
teachers.push_back(t);
saveToFile("teachers.txt");
std::cout << "教师开课信息已添加!" << std::endl;
} else {
std::cout << "职工号已存在,添加失败!" << std::endl;
}
}
5. 浏览教师信息模块
设计思路
viewTeachers()
函数遍历全局容器 teachers
,依次打印每个教师的所有信息,便于用户查看当前所有的教师开课记录。
代码
void viewTeachers() {
for (const auto& t : teachers) {
std::cout << "职工号: " << t.id
<< ", 姓名: " << t.name
<< ", 职称: " << t.title
<< ", 电话: " << t.phone
<< ", 开课名称: " << t.course
<< ", 可容纳人数: " << t.capacity << std::endl;
}
}
6. 查询教师信息模块
设计思路
queryTeacher()
函数允许用户通过输入姓名或职工号来查询教师开课信息。遍历 teachers
容器,若教师的姓名或职工号与关键字匹配,则输出对应信息。
代码
void queryTeacher() {
std::string keyword;
std::cout << "请输入姓名或职工号进行查询: ";
std::cin >> keyword;
for (const auto& t : teachers) {
if (t.name == keyword || t.id == keyword) {
std::cout << "职工号: " << t.id
<< ", 姓名: " << t.name
<< ", 职称: " << t.title
<< ", 电话: " << t.phone
<< ", 开课名称: " << t.course
<< ", 可容纳人数: " << t.capacity << std::endl;
}
}
}
7. 删除教师信息模块
设计思路
deleteTeacher()
函数通过输入要删除教师的职工号,在 teachers
容器中查找对应教师并删除(利用 std::remove_if
),删除后更新文件内容。如果没找到则提示用户。
代码
void deleteTeacher() {
std::string id;
std::cout << "请输入要删除的教师的职工号: ";
std::cin >> id;
a//此处略去20+行代码
} else {
std::cout << "找不到该教师的职工号!" << std::endl;
}
}
8. 修改教师信息模块
设计思路
modifyTeacher()
函数允许用户输入要修改的教师职工号,如果存在则进一步要求输入新的信息,更新该教师对象的各个属性,并保存到文件;若找不到则提示错误。
代码
void modifyTeacher() {
std::string id;
std::cout << "请输入要修改的教师的职工号: ";
std::cin >> id;
//此处略去20+行代码
saveToFile("teachers.txt");
std::cout << "教师开课信息已修改!" << std::endl;
} else {
std::cout << "找不到该教师的职工号!" << std::endl;
}
}
9. 主函数与菜单交互模块
设计思路
在 main()
函数中,先调用 loadFromFile()
从文件加载教师信息,然后通过一个 do–while 循环不断显示菜单,让用户选择相应操作(输入、浏览、查询、删除、修改),直到选择退出程序。每个选项调用上述相应模块函数,完成具体操作。
代码
int main() {
loadFromFile("teachers.txt");
int choice;
do {
std::cout << "1. 输入教师开课信息\n"
<< "2. 浏览教师开课信息\n"
<< "3. 查询教师开课信息\n"
<< "4. 删除教师开课信息\n"
<< "5. 修改教师开课信息\n"
<< "0. 退出\n"
<< "请选择: ";
std::cin >> choice;
switch (choice) {
case 1:
addTeacher();
break;
case 2:
viewTeachers();
break;
case 3:
queryTeacher();
break;
case 4:
deleteTeacher();
break;
case 5:
modifyTeacher();
break;
}
} while (choice != 0);
return 0;
}
-
数据结构模块
使用Teacher
结构体存储教师信息。 -
数据存储模块
使用全局std::vector<Teacher>
存储所有教师记录。 -
文件读写模块
通过loadFromFile()
和saveToFile()
实现数据的持久化(将信息保存到 “teachers.txt” 文件中)。 -
CRUD 操作模块
提供添加、浏览、查询、删除、修改教师信息的具体函数,每个函数均调用文件操作函数保持数据同步。 -
主函数与菜单交互
在main()
函数中循环显示菜单,根据用户选择执行相应操作,直到用户退出程序。