当前位置:   article > 正文

【C/C++】【学生成绩管理系统】深度剖析

【C/C++】【学生成绩管理系统】深度剖析

可接各类C/C++管理系统课设

目录

实现功能

部分1:系统设置和主菜单

1. 引入头文件

2. 定义结构体

3. 函数声明

4. 主函数

部分2:添加学生信息

部分3:删除学生信息

部分4:修改学生信息

部分5:查询学生信息

部分6:显示信息列表

部分7:统计学生数据

部分8:清空系统数据

部分9: 退出系统函数

总结代码


该学生成绩管理系统是一个用C++实现的程序,通过控制台界面实现对学生信息的增删改查。系统包括以下功能:添加学生信息、删除学生信息、修改学生信息、查询学生信息、显示所有学生信息、统计学生成绩数据和清空系统数据。

实现功能

  1. 添加学生信息: 用户可以通过输入学生的ID、姓名、年龄、性别和成绩来添加学生信息。新添加的学生信息会被存储在一个向量中。

  2. 删除学生信息: 用户可以通过输入学生的ID来删除学生信息。程序会在向量中查找对应的学生ID,如果找到则删除该学生的信息。

  3. 修改学生信息: 用户可以通过输入学生的ID来修改学生信息。程序会在向量中查找对应的学生ID,如果找到则允许用户修改该学生的姓名、年龄、性别和成绩。

  4. 查询学生信息: 用户可以通过输入学生的ID来查询学生信息。程序会在向量中查找对应的学生ID,如果找到则显示该学生的详细信息。

  5. 显示信息列表: 程序会显示所有存储在向量中的学生信息列表,包括每个学生的ID、姓名、年龄、性别和成绩。使用格式化输出使信息更加整齐美观。

  6. 统计学生数据: 程序会计算并显示学生成绩的平均值、最高值和最低值。这有助于用户了解整体的学生成绩分布情况。

  7. 清空系统数据: 用户可以选择清空系统中所有学生的数据。这会删除向量中存储的所有学生信息。

  8. 退出系统: 用户选择退出系统时,程序会显示退出提示信息,并终止运行。

部分1:系统设置和主菜单

首先设置程序的基本结构和主菜单界面。

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <iomanip>
  5. using namespace std;
  6. // 定义一个结构体来保存学生信息
  7. struct Student {
  8. int id;
  9. string name;
  10. int age;
  11. string gender;
  12. double grade;
  13. };
  14. // 函数声明
  15. void addStudent(vector<Student>& students);
  16. void deleteStudent(vector<Student>& students);
  17. void modifyStudent(vector<Student>& students);
  18. void queryStudent(const vector<Student>& students);
  19. void displayStudents(const vector<Student>& students);
  20. void statistics(const vector<Student>& students);
  21. void clearData(vector<Student>& students);
  22. void exitSystem();
  23. int main() {
  24. vector<Student> students;
  25. int choice;
  26. while (true) {
  27. cout << "*****************欢迎来到学生成绩管理系统*****************\n";
  28. cout << "你可以进行以下操作:\n";
  29. cout << "1. 添加学生信息\n";
  30. cout << "2. 删除学生信息\n";
  31. cout << "3. 修改学生信息\n";
  32. cout << "4. 查询学生信息\n";
  33. cout << "5. 显示信息列表\n";
  34. cout << "6. 统计学生数据\n";
  35. cout << "7. 清空系统数据\n";
  36. cout << "0. 退出\n";
  37. cout << "请输入你的选择: ";
  38. cin >> choice;
  39. switch (choice) {
  40. case 1:
  41. addStudent(students);
  42. break;
  43. case 2:
  44. deleteStudent(students);
  45. break;
  46. case 3:
  47. modifyStudent(students);
  48. break;
  49. case 4:
  50. queryStudent(students);
  51. break;
  52. case 5:
  53. displayStudents(students);
  54. break;
  55. case 6:
  56. statistics(students);
  57. break;
  58. case 7:
  59. clearData(students);
  60. break;
  61. case 0:
  62. exitSystem();
  63. return 0;
  64. default:
  65. cout << "无效的选择,请重新输入。\n";
  66. }
  67. }
  68. return 0;
  69. }

1. 引入头文件

首先,引入了C++标准库中的必要头文件:

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <iomanip>
  • iostream:用于输入输出操作。
  • vector:用于动态数组(向量)的使用。
  • string:用于字符串操作。
  • iomanip:用于格式化输出。

2. 定义结构体

定义了一个结构体 Student,用于保存学生信息:

  1. struct Student {
  2. int id; // 学生ID
  3. string name; // 学生姓名
  4. int age; // 学生年龄
  5. string gender; // 学生性别
  6. double grade; // 学生成绩
  7. };

3. 函数声明

main 函数之前,声明了一些函数,这些函数将在后续部分实现:

  1. void addStudent(vector<Student>& students);
  2. void deleteStudent(vector<Student>& students);
  3. void modifyStudent(vector<Student>& students);
  4. void queryStudent(const vector<Student>& students);
  5. void displayStudents(const vector<Student>& students);
  6. void statistics(const vector<Student>& students);
  7. void clearData(vector<Student>& students);
  8. void exitSystem();

4. 主函数

主函数包含了一个无限循环,用于显示菜单并处理用户的选择:

  1. int main() {
  2. vector<Student> students;
  3. int choice;
  4. while (true) {
  5. cout << "*****************欢迎来到学生成绩管理系统*****************\n";
  6. cout << "你可以进行以下操作:\n";
  7. cout << "1. 添加学生信息\n";
  8. cout << "2. 删除学生信息\n";
  9. cout << "3. 修改学生信息\n";
  10. cout << "4. 查询学生信息\n";
  11. cout << "5. 显示信息列表\n";
  12. cout << "6. 统计学生数据\n";
  13. cout << "7. 清空系统数据\n";
  14. cout << "0. 退出\n";
  15. cout << "请输入你的选择: ";
  16. cin >> choice;
  17. switch (choice) {
  18. case 1:
  19. addStudent(students);
  20. break;
  21. case 2:
  22. deleteStudent(students);
  23. break;
  24. case 3:
  25. modifyStudent(students);
  26. break;
  27. case 4:
  28. queryStudent(students);
  29. break;
  30. case 5:
  31. displayStudents(students);
  32. break;
  33. case 6:
  34. statistics(students);
  35. break;
  36. case 7:
  37. clearData(students);
  38. break;
  39. case 0:
  40. exitSystem();
  41. return 0;
  42. default:
  43. cout << "无效的选择,请重新输入。\n";
  44. }
  45. }
  46. return 0;
  47. }
  • vector<Student> students:定义一个用于存储学生信息的向量。
  • int choice:用于存储用户的选择。

部分2:添加学生信息

这个功能允许用户输入新的学生信息到系统中。

  1. void addStudent(vector<Student>& students) {
  2. Student newStudent;
  3. cout << "请输入学生ID: ";
  4. cin >> newStudent.id;
  5. cout << "请输入学生姓名: ";
  6. cin >> newStudent.name;
  7. cout << "请输入学生年龄: ";
  8. cin >> newStudent.age;
  9. cout << "请输入学生性别: ";
  10. cin >> newStudent.gender;
  11. cout << "请输入学生成绩: ";
  12. cin >> newStudent.grade;
  13. students.push_back(newStudent);
  14. cout << "学生信息添加成功!\n";
  15. }
  • 使用 cin 获取用户输入的学生信息,并存储在 newStudent 变量中。
  • newStudent 添加到 students 向量中。
  • 提示用户添加成功。

部分3:删除学生信息

这个功能允许用户根据学生ID删除学生信息。

  1. void deleteStudent(vector<Student>& students) {
  2. int id;
  3. cout << "请输入要删除的学生ID: ";
  4. cin >> id;
  5. for (auto it = students.begin(); it != students.end(); ++it) {
  6. if (it->id == id) {
  7. students.erase(it);
  8. cout << "学生信息删除成功!\n";
  9. return;
  10. }
  11. }
  12. cout << "未找到该学生ID。\n";
  13. }
  • 获取用户输入的学生ID。
  • 使用迭代器遍历 students 向量,找到匹配的学生ID并删除。
  • 提示用户删除成功或未找到该学生ID。

部分4:修改学生信息

这个功能允许用户修改现有的学生信息。

  1. void modifyStudent(vector<Student>& students) {
  2. int id;
  3. cout << "请输入要修改的学生ID: ";
  4. cin >> id;
  5. for (auto& student : students) {
  6. if (student.id == id) {
  7. cout << "请输入新的学生姓名: ";
  8. cin >> student.name;
  9. cout << "请输入新的学生年龄: ";
  10. cin >> student.age;
  11. cout << "请输入新的学生性别: ";
  12. cin >> student.gender;
  13. cout << "请输入新的学生成绩: ";
  14. cin >> student.grade;
  15. cout << "学生信息修改成功!\n";
  16. return;
  17. }
  18. }
  19. cout << "未找到该学生ID。\n";
  20. }
  • 获取用户输入的学生ID。
  • 遍历 students 向量,找到匹配的学生ID并获取新的学生信息进行修改。
  • 提示用户修改成功或未找到该学生ID。

部分5:查询学生信息

这个功能允许用户根据学生ID查询并显示学生信息。

  1. void queryStudent(const vector<Student>& students) {
  2. int id;
  3. cout << "请输入要查询的学生ID: ";
  4. cin >> id;
  5. for (const auto& student : students) {
  6. if (student.id == id) {
  7. cout << "学生ID: " << student.id << "\n";
  8. cout << "学生姓名: " << student.name << "\n";
  9. cout << "学生年龄: " << student.age << "\n";
  10. cout << "学生性别: " << student.gender << "\n";
  11. cout << "学生成绩: " << student.grade << "\n";
  12. return;
  13. }
  14. }
  15. cout << "未找到该学生ID。\n";
  16. }
  • 获取用户输入的学生ID。
  • 遍历 students 向量,找到匹配的学生ID并显示学生信息。
  • 提示用户未找到该学生ID。

部分6:显示信息列表

这个功能显示所有学生的信息列表。

  1. void displayStudents(const vector<Student>& students) {
  2. cout << setw(10) << "学生ID" << setw(20) << "学生姓名" << setw(10) << "年龄" << setw(10) << "性别" << setw(10) << "成绩" << "\n";
  3. for (const auto& student : students) {
  4. cout << setw(10) << student.id << setw(20) << student.name << setw(10) << student.age << setw(10) << student.gender << setw(10) << student.grade << "\n";
  5. }
  6. }
  • 使用 setw 设置输出格式,确保信息对齐。
  • 遍历 students 向量,显示每个学生的信息。

部分7:统计学生数据

这个功能提供学生成绩的基本统计信息。

  1. void statistics(const vector<Student>& students) {
  2. if (students.empty()) {
  3. cout << "没有学生数据。\n";
  4. return;
  5. }
  6. double sum = 0;
  7. double maxGrade = students[0].grade;
  8. double minGrade = students[0].grade;
  9. for (const auto& student : students) {
  10. sum += student.grade;
  11. if (student.grade > maxGrade) {
  12. maxGrade = student.grade;
  13. }
  14. if (student.grade < minGrade) {
  15. minGrade = student.grade;
  16. }
  17. }
  18. double average = sum / students.size();
  19. cout << "学生成绩统计:\n";
  20. cout << "平均成绩: " << average << "\n";
  21. cout << "最高成绩: " << maxGrade << "\n";
  22. cout << "最低成绩: " << minGrade << "\n";
  23. }
  • 计算并显示学生成绩的平均值、最高值和最低值。
  • 如果没有学生数据,提示用户。

部分8:清空系统数据

这个功能清除系统中的所有学生数据。

  1. void clearData(vector<Student>& students) {
  2. students.clear();
  3. cout << "系统数据已清空。\n";
  4. }
  • 清空 students 向量中的所有数据。
  • 提示用户数据已清空。

部分9: 退出系统函数

实现了退出系统时的提示功能:

  1. void exitSystem() {
  2. cout << "感谢使用学生成绩管理系统,再见!\n";
  3. }
  • 提示用户系统退出信息。

总结代码

将所有部分整合在一起,形成完整的学生成绩管理系统代码如下:

  1. #include <iostream>
  2. #include <vector>
  3. #include <string>
  4. #include <iomanip>
  5. using namespace std;
  6. struct Student {
  7. int id;
  8. string name;
  9. int age;
  10. string gender;
  11. double grade;
  12. };
  13. void addStudent(vector<Student>& students);
  14. void deleteStudent(vector<Student>& students);
  15. void modifyStudent(vector<Student>& students);
  16. void queryStudent(const vector<Student>& students);
  17. void displayStudents(const vector<Student>& students);
  18. void statistics(const vector<Student>& students);
  19. void clearData(vector<Student>& students);
  20. void exitSystem();
  21. int main() {
  22. vector<Student> students;
  23. int choice;
  24. while (true) {
  25. cout << "*****************欢迎来到学生成绩管理系统*****************\n";
  26. cout << "你可以进行以下操作:\n";
  27. cout << "1. 添加学生信息\n";
  28. cout << "2. 删除学生信息\n";
  29. cout << "3. 修改学生信息\n";
  30. cout << "4. 查询学生信息\n";
  31. cout << "5. 显示信息列表\n";
  32. cout << "6. 统计学生数据\n";
  33. cout << "7. 清空系统数据\n";
  34. cout << "0. 退出\n";
  35. cout << "请输入你的选择: ";
  36. cin >> choice;
  37. switch (choice) {
  38. case 1:
  39. addStudent(students);
  40. break;
  41. case 2:
  42. deleteStudent(students);
  43. break;
  44. case 3:
  45. modifyStudent(students);
  46. break;
  47. case 4:
  48. queryStudent(students);
  49. break;
  50. case 5:
  51. displayStudents(students);
  52. break;
  53. case 6:
  54. statistics(students);
  55. break;
  56. case 7:
  57. clearData(students);
  58. break;
  59. case 0:
  60. exitSystem();
  61. return 0;
  62. default:
  63. cout << "无效的选择,请重新输入。\n";
  64. }
  65. }
  66. return 0;
  67. }
  68. void addStudent(vector<Student>& students) {
  69. Student newStudent;
  70. cout << "请输入学生ID: ";
  71. cin >> newStudent.id;
  72. cout << "请输入学生姓名: ";
  73. cin >> newStudent.name;
  74. cout << "请输入学生年龄: ";
  75. cin >> newStudent.age;
  76. cout << "请输入学生性别: ";
  77. cin >> newStudent.gender;
  78. cout << "请输入学生成绩: ";
  79. cin >> newStudent.grade;
  80. students.push_back(newStudent);
  81. cout << "学生信息添加成功!\n";
  82. }
  83. void deleteStudent(vector<Student>& students) {
  84. int id;
  85. cout << "请输入要删除的学生ID: ";
  86. cin >> id;
  87. for (auto it = students.begin(); it != students.end(); ++it) {
  88. if (it->id == id) {
  89. students.erase(it);
  90. cout << "学生信息删除成功!\n";
  91. return;
  92. }
  93. }
  94. cout << "未找到该学生ID。\n";
  95. }
  96. void modifyStudent(vector<Student>& students) {
  97. int id;
  98. cout << "请输入要修改的学生ID: ";
  99. cin >> id;
  100. for (auto& student : students) {
  101. if (student.id == id) {
  102. cout << "请输入新的学生姓名: ";
  103. cin >> student.name;
  104. cout << "请输入新的学生年龄: ";
  105. cin >> student.age;
  106. cout << "请输入新的学生性别: ";
  107. cin >> student.gender;
  108. cout << "请输入新的学生成绩: ";
  109. cin >> student.grade;
  110. cout << "学生信息修改成功!\n";
  111. return;
  112. }
  113. }
  114. cout << "未找到该学生ID。\n";
  115. }
  116. void queryStudent(const vector<Student>& students) {
  117. int id;
  118. cout << "请输入要查询的学生ID: ";
  119. cin >> id;
  120. for (const auto& student : students) {
  121. if (student.id == id) {
  122. cout << "学生ID: " << student.id << "\n";
  123. cout << "学生姓名: " << student.name << "\n";
  124. cout << "学生年龄: " << student.age << "\n";
  125. cout << "学生性别: " << student.gender << "\n";
  126. cout << "学生成绩: " << student.grade << "\n";
  127. return;
  128. }
  129. }
  130. cout << "未找到该学生ID。\n";
  131. }
  132. void displayStudents(const vector<Student>& students) {
  133. cout << setw(10) << "学生ID" << setw(20) << "学生姓名" << setw(10) << "年龄" << setw(10) << "性别" << setw(10) << "成绩" << "\n";
  134. for (const auto& student : students) {
  135. cout << setw(10) << student.id << setw(20) << student.name << setw(10) << student.age << setw(10) << student.gender << setw(10) << student.grade << "\n";
  136. }
  137. }
  138. void statistics(const vector<Student>& students) {
  139. if (students.empty()) {
  140. cout << "没有学生数据。\n";
  141. return;
  142. }
  143. double sum = 0;
  144. double maxGrade = students[0].grade;
  145. double minGrade = students[0].grade;
  146. for (const auto& student : students) {
  147. sum += student.grade;
  148. if (student.grade > maxGrade) {
  149. maxGrade = student.grade;
  150. }
  151. if (student.grade < minGrade) {
  152. minGrade = student.grade;
  153. }
  154. }
  155. double average = sum / students.size();
  156. cout << "学生成绩统计:\n";
  157. cout << "平均成绩: " << average << "\n";
  158. cout << "最高成绩: " << maxGrade << "\n";
  159. cout << "最低成绩: " << minGrade << "\n";
  160. }
  161. void clearData(vector<Student>& students) {
  162. students.clear();
  163. cout << "系统数据已清空。\n";
  164. }
  165. void exitSystem() {
  166. cout << "感谢使用学生成绩管理系统,再见!\n";
  167. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/790751
推荐阅读
相关标签
  

闽ICP备14008679号