C++学生管理系统实战教程
一、项目需求学生信息学号、姓名、年龄、成绩功能列表添加学生删除学生按学号修改学生信息按学号查询显示所有学生按成绩排序信息保存到文件从文件加载数据技术栈vector存储学生主体数据map学号快速索引string字符串处理sort自定义排序fstream文件持久化类与对象封装二、完整代码实现#include iostream #include vector #include map #include string #include algorithm #include fstream #include iomanip using namespace std; // 学生结构体 struct Student { string id; // 学号 string name; // 姓名 int age; // 年龄 double score; // 成绩 }; // 学生管理类 class StudentManager { private: vectorStudent stuList; // 主存储 mapstring, int idIndex; // 学号 - 下标索引 // 更新索引 void updateIndex() { idIndex.clear(); for (int i 0; i stuList.size(); i) { idIndex[stuList[i].id] i; } } public: // 添加学生 void addStudent(const Student stu) { if (idIndex.find(stu.id) ! idIndex.end()) { cout 【错误】该学号已存在 endl; return; } stuList.push_back(stu); updateIndex(); cout 【成功】学生添加完成 endl; } // 删除学生 void deleteStudent(const string id) { if (idIndex.find(id) idIndex.end()) { cout 【错误】该学号不存在 endl; return; } int idx idIndex[id]; stuList.erase(stuList.begin() idx); updateIndex(); cout 【成功】学生删除完成 endl; } // 修改学生 void modifyStudent(const string id) { if (idIndex.find(id) idIndex.end()) { cout 【错误】该学号不存在 endl; return; } int idx idIndex[id]; Student stu stuList[idx]; cout 请输入新姓名; cin stu.name; cout 请输入新年龄; cin stu.age; cout 请输入新成绩; cin stu.score; cout 【成功】信息修改完成 endl; } // 按学号查询 void searchById(const string id) { if (idIndex.find(id) idIndex.end()) { cout 【错误】该学号不存在 endl; return; } int idx idIndex[id]; Student stu stuList[idx]; showOne(stu); } // 显示单个学生 void showOne(const Student stu) { cout left setw(10) stu.id setw(10) stu.name setw(6) stu.age setw(8) stu.score endl; } // 显示所有学生 void showAll() { if (stuList.empty()) { cout 【提示】暂无学生数据 endl; return; } cout left setw(10) 学号 setw(10) 姓名 setw(6) 年龄 setw(8) 成绩 endl; cout ------------------------------------------------ endl; for (auto stu : stuList) { showOne(stu); } } // 按成绩降序排序 void sortByScore() { sort(stuList.begin(), stuList.end(), [](const Student a, const Student b) { return a.score b.score; }); updateIndex(); cout 【成功】已按成绩降序排序 endl; } // 保存到文件 void saveToFile(const string filename) { ofstream ofs(filename); if (!ofs.is_open()) { cout 【错误】文件打开失败 endl; return; } for (auto stu : stuList) { ofs stu.id stu.name stu.age stu.score endl; } ofs.close(); cout 【成功】数据已保存到文件 endl; } // 从文件加载 void loadFromFile(const string filename) { ifstream ifs(filename); if (!ifs.is_open()) { cout 【提示】文件不存在跳过加载 endl; return; } stuList.clear(); idIndex.clear(); Student stu; while (ifs stu.id stu.name stu.age stu.score) { stuList.push_back(stu); } updateIndex(); ifs.close(); cout 【成功】数据加载完成 endl; } }; // 菜单界面 void showMenu() { cout \n 学生信息管理系统 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 请输入操作; } int main() { StudentManager manager; int op; string filename student.txt; // 启动加载文件 manager.loadFromFile(filename); while (true) { showMenu(); cin op; if (op 0) { cout 系统退出成功 endl; break; } if (op 1) { Student stu; cout 请输入学号; cin stu.id; cout 请输入姓名; cin stu.name; cout 请输入年龄; cin stu.age; cout 请输入成绩; cin stu.score; manager.addStudent(stu); } else if (op 2) { string id; cout 请输入要删除的学号; cin id; manager.deleteStudent(id); } else if (op 3) { string id; cout 请输入要修改的学号; cin id; manager.modifyStudent(id); } else if (op 4) { string id; cout 请输入要查询的学号; cin id; manager.searchById(id); } else if (op 5) { manager.showAll(); } else if (op 6) { manager.sortByScore(); } else if (op 7) { manager.saveToFile(filename); } else if (op 8) { manager.loadFromFile(filename); } else { cout 【错误】无效选项 endl; } } return 0; }三、项目核心知识点整合容器搭配vector动态存储主体数据适合遍历、排序map学号映射下标O (logn) 快速查找替代暴力遍历C11 特性Lambda 表达式自定义排序规则范围 for 遍历文件 IOifstream/ofstream实现数据持久化格式化输出setw、left实现对齐表格面向对象类封装所有功能高内聚低耦合四、系统运行效果 学生信息管理系统 1. 添加学生 2. 删除学生 3. 修改学生 4. 学号查询 5. 显示所有 6. 成绩排序 7. 保存文件 8. 加载文件 0. 退出系统 请输入操作支持全程交互、数据自动保存、重启不丢失。五、进阶优化方向可自行拓展增加按姓名模糊查询增加成绩区间筛选改用unordered_map提升查找速度增加密码登录权限支持 CSV 格式导出增加异常捕获防止非法输入崩溃六、全阶段学习复盘从零基础语法 → 面向对象 → STL 全容器 → 算法 → 高阶语法 → 综合项目完整走完 C 入门到进阶全链路。这套代码完全符合企业级基础规范是面试、课程设计、个人作品集的绝佳素材。