提示信息

C++ 学生管理系统的详细实现与解析

听风雨 已关注

创建一个C++学生管理系统可以帮助我们理解面向对象编程(OOP)的基本概念,如类、对象、继承和文件操作。下面是一个简单的学生管理系统的实现,并附带详细解析。

系统功能

  1. 添加学生信息
  2. 查看所有学生信息
  3. 修改学生信息
  4. 删除学生信息
  5. 保存到文件
  6. 从文件读取

实现步骤

1. 定义学生类

首先,定义一个Student类,用于封装学生信息。

  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <string>
  5. class Student {
  6. public:
  7. int id;
  8. std::string name;
  9. int age;
  10. std::string major;
  11. Student(int i, std::string n, int a, std::string m)
  12. : id(i), name(n), age(a), major(m) {}
  13. void display() const {
  14. std::cout << "ID: " << id << ", Name: " << name
  15. << ", Age: " << age << ", Major: " << major << std::endl;
  16. }
  17. };

2. 创建菜单函数

编写一个函数用于显示菜单并处理用户输入。

  1. void displayMenu() {
  2. std::cout << "Student Management System" << std::endl;
  3. std::cout << "1. Add Student" << std::endl;
  4. std::cout << "2. View All Students" << std::endl;
  5. std::cout << "3. Update Student" << std::endl;
  6. std::cout << "4. Delete Student" << std::endl;
  7. std::cout << "5. Save to File" << std::endl;
  8. std::cout << "6. Load from File" << std::endl;
  9. std::cout << "7. Exit" << std::endl;
  10. std::cout << "Choose an option: ";
  11. }

3. 实现主要功能

创建一个容器(如std::vector)用于存储学生信息,并实现系统的核心功能。

  1. std::vector<Student> students;
  2. // 添加学生
  3. void addStudent() {
  4. int id, age;
  5. std::string name, major;
  6. std::cout << "Enter ID: ";
  7. std::cin >> id;
  8. std::cout << "Enter Name: ";
  9. std::cin >> name;
  10. std::cout << "Enter Age: ";
  11. std::cin >> age;
  12. std::cout << "Enter Major: ";
  13. std::cin >> major;
  14. students.push_back(Student(id, name, age, major));
  15. std::cout << "Student added successfully!" << std::endl;
  16. }
  17. // 查看所有学生
  18. void viewStudents() {
  19. for (const auto& student : students) {
  20. student.display();
  21. }
  22. }
  23. // 编辑学生信息
  24. void updateStudent() {
  25. int id;
  26. std::cout << "Enter ID of student to update: ";
  27. std::cin >> id;
  28. for (auto& student : students) {
  29. if (student.id == id) {
  30. std::cout << "Enter new Name: ";
  31. std::cin >> student.name;
  32. std::cout << "Enter new Age: ";
  33. std::cin >> student.age;
  34. std::cout << "Enter new Major: ";
  35. std::cin >> student.major;
  36. std::cout << "Student updated successfully!" << std::endl;
  37. return;
  38. }
  39. }
  40. std::cout << "Student not found." << std::endl;
  41. }
  42. // 删除学生
  43. void deleteStudent() {
  44. int id;
  45. std::cout << "Enter ID of student to delete: ";
  46. std::cin >> id;
  47. for (auto it = students.begin(); it != students.end(); ++it) {
  48. if (it->id == id) {
  49. students.erase(it);
  50. std::cout << "Student deleted successfully!" << std::endl;
  51. return;
  52. }
  53. }
  54. std::cout << "Student not found." << std::endl;
  55. }
  56. // 保存到文件
  57. void saveToFile() {
  58. std::ofstream file("students.txt");
  59. for (const auto& student : students) {
  60. file << student.id << "," << student.name << ","
  61. << student.age << "," << student.major << std::endl;
  62. }
  63. file.close();
  64. std::cout << "Students saved to file successfully!" << std::endl;
  65. }
  66. // 从文件读取
  67. void loadFromFile() {
  68. std::ifstream file("students.txt");
  69. std::string line;
  70. students.clear();
  71. while (std::getline(file, line)) {
  72. std::istringstream ss(line);
  73. int id, age;
  74. std::string name, major;
  75. std::getline(ss, name, ',');
  76. ss >> id;
  77. ss.ignore(); // 忽略逗号
  78. std::getline(ss, name, ',');
  79. ss >> age;
  80. ss.ignore(); // 忽略逗号
  81. std::getline(ss, major, ',');
  82. students.push_back(Student(id, name, age, major));
  83. }
  84. file.close();
  85. std::cout << "Students loaded from file successfully!" << std::endl;
  86. }

4. 主函数

实现主循环以处理用户输入。

  1. int main() {
  2. int choice;
  3. while (true) {
  4. displayMenu();
  5. std::cin >> choice;
  6. switch (choice) {
  7. case 1: addStudent(); break;
  8. case 2: viewStudents(); break;
  9. case 3: updateStudent(); break;
  10. case 4: deleteStudent(); break;
  11. case 5: saveToFile(); break;
  12. case 6: loadFromFile(); break;
  13. case 7: return 0;
  14. default: std::cout << "Invalid option, try again." << std::endl;
  15. }
  16. }
  17. return 0;
  18. }

解析

  • 类与对象Student类用于封装学生信息,每个学生是Student类的一个对象。
  • 数据结构std::vector用于存储学生对象,实现动态数组。
  • 文件操作:使用ifstreamofstream处理文件读写,实现数据持久化。
  • 用户交互:通过标准输入输出实现简单的用户交互界面。

这是一个基础的学生管理系统示例,功能简单但可以进一步扩展,比如添加更多的属性、完善异常处理、优化用户界面等。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
听风雨 关注 已关注

最近一次登录:2024-11-19 22:09:16   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图