0


课程设计:c++实现学生成绩管理系统

  1. 学生成绩管理系统课程设计,作为计算机科学专业学生的一门必修课,印象非常深刻,上机,编码,写报告,答辩,最后很多人勉强完成了功课,但是却很少能学到东西,算是一种遗憾吧,即使我们毕业了,仍然会想回去再做一遍。
  2. 今天就来复习一遍这个课题,也让自己学习学习。
  3. 学生成绩管理系统,对于刚学编程的人来说,是有一些难度的,有循环要考虑,还需要注意界面打印,菜单管理,输入输出控制,文件读写操作,排序算法等等技巧。
  4. 学生成绩管理系统,可以分为如下几个功能:
  5. ![](https://img-blog.csdnimg.cn/20201128101023731.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  6. 系统菜单:首先进入系统,我们会看见我们的系统菜单,根据提示,我们可以选择我们需要的操作编号:
  7. ![](https://img-blog.csdnimg.cn/20201128103319471.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)

** 输入学生成绩**:该功能是每次录入都会将新录入信息替换原来的学生成绩信息,仅限初次使用,后续慎用,类似新增,但是它是每次都会擦除原来学生信息。

  1. ![](https://img-blog.csdnimg.cn/20201128101302296.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  2. **统计学生成绩**:将学生成绩按照平均分显示,是一个简单的输出。
  3. ![](https://img-blog.csdnimg.cn/20201128101347962.png)
  4. **查找学生成绩**:按照学生学号查询。
  5. ![](https://img-blog.csdnimg.cn/2020112810143347.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  6. **修改学生成绩**:这里只是将对应学号的学生成绩修改,而不是连班级、学号、姓名也改变。
  7. ![](https://img-blog.csdnimg.cn/20201128101536690.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  8. 修改之后:
  9. ![](https://img-blog.csdnimg.cn/20201128101557606.png)
  10. **删除学生成绩**:按照学号删除对应学生成绩信息记录。
  11. ![](https://img-blog.csdnimg.cn/2020112810165187.png)
  12. 删除之后,学号为3的成绩记录就没有了:
  13. ![](https://img-blog.csdnimg.cn/20201128101710488.png)
  14. **新增学生成绩**:在原来学生成绩的基础上,新增学生成绩信息。
  15. ![](https://img-blog.csdnimg.cn/20201128101804430.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  16. **按平均分排序**:按照平均分降序排序,这里使用了简单的冒泡排序算法。
  17. ![](https://img-blog.csdnimg.cn/20201128101844598.png)
  18. **显示学生成绩**:遍历所有学生成绩,然后打印出来。
  19. ![](https://img-blog.csdnimg.cn/20201128101915183.png)
  20. **退出管理系统**: 退出菜单。
  21. 学生成绩管理系统,主要是管理学生成绩信息的,这里可以简单的理解有这么一个对象,包含班级、学号、姓名、电子成绩、C++成绩、多媒体成绩、英语成绩、数学成绩、大学物理成绩、体育成绩、政治成绩,平均分这几项属性。这样我们可以定义这样的一个学生Student结构体或者类:
  1. class Student{
  2. private:
  3. char class_0[20]; //班级,因为class是关键字,我们用了class_0来表示班级
  4. int num; //学号
  5. char name[8]; //姓名 姓名定义的长度是8,如果输入拼音或者英文,很有可能超出这个范围,要小心处理。
  6. float elec; //电子
  7. float c_program; //C++
  8. float media; //多媒体
  9. float english; //大学英语
  10. float math; //高等数学
  11. float sport; //体育
  12. float polity; //政治
  13. float average; //平均分
  14. }stu[100];
  1. 课程分数实际上都是整数,很难有小数点,但是平均分大概率是一个浮点数,所以必须用浮点数表示。但是使用浮点数表示分数也没有问题。
  2. 因为数据来源于文本文件,所以这里对文件读写操作非常频繁,涉及到读写操作的:1:输入,4:删除,5:修改,6:新增,7:排序。这些操作都有一个共同的特点,就是需要写入操作(Write)。这里因为是文件系统,没有办法做到增量修改,每次只能是覆盖式的写入。为了保留原来的纪录,可能还需要读取操作(Read)。
  3. 这个程序,如果第一次运行,没有进行学生信息录入,即菜单项中的[1]输入学生成绩,默认如果执行[8]显示所有学生成绩,会报错,因为没有score.txt文件生成,只有进行了[1]操作之后,才会生成这个文件,所以为了避免程序报错,我们可以在项目路径下创建一个score.txt文件。
  4. 默认,我们手动创建的这个文件中如果有中文,编码默认是UTF-8,保存之后,显示在界面上,会显示乱码,因为cmd终端默认的编码是ANSI格式,所以这个文件我们需要保存为ANSI格式,才能正确显示中文。
  5. 初始文件score.txt格式如下:
  1. 2
  2. 10601 2 刘莹 86 84 90 80 88 82 85 85
  3. 10601 1 吴昊 89 90 91 90 89 91 90 90
  1. 该文件第一行,表示学生成绩总数,这个数字需要我们手动写入到文件里面,后面换行才是学生成绩,没有列标题,依次对应:班级、学号、姓名、电子成绩、C++成绩、多媒体成绩、英语成绩、数学成绩、大学物理成绩、体育成绩、政治成绩、平均分。一条记录占一行。
  2. 读的时候,首先读取记录数,然后按行读取学生成绩信息,所以有这样的代码:
  3. ![](https://img-blog.csdnimg.cn/20201128095027982.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  4. 同理,写入文件的时候,我们也要先写入记录数,然后依次写入学生成绩信息:
  5. ![](https://img-blog.csdnimg.cn/20201128095149863.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  6. 我们没有使用很复杂的数据结构,这里就是利用了数组来操作学生成绩,涉及到修改的操作,基本就是先将文本文件中的数据读入数组,然后操作数组来实现新增,修改,删除,排序操作,最后将新的数组写入文件成为新的文件。
  7. 下面给出源码:
  1. #if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
  2. #define _CRT_SECURE_NO_DEPRECATE
  3. #endif
  4. #include <iostream>
  5. #include <fstream>
  6. #include <string>
  7. using namespace std;
  8. class Student{
  9. public:
  10. friend void Input(Student stu[]);
  11. friend void Statistic(Student stu[]);
  12. friend void Lookup(Student stu[]);
  13. friend void Modify(Student stu[]);
  14. friend void Delete(Student stu[]);
  15. friend void Output(Student stu[]);
  16. friend void Insert(Student stu[]);
  17. friend void Sort(Student stu[]);
  18. friend void Write(Student stu[],int n);
  19. friend int Read(Student stu[]);
  20. private:
  21. int num;
  22. char name[8];
  23. char class_0[20];
  24. float elec;
  25. float c_program;
  26. float english;
  27. float math;
  28. float media;
  29. float sport;
  30. float polity;
  31. float average;
  32. int order;
  33. }stu[100];
  34. void Write(Student stu[], int n) {
  35. fstream myFile;
  36. myFile.open("score.txt", ios::out | ios::binary);
  37. if (!myFile) {
  38. cout << "score.txt can't open!" << endl;
  39. abort();
  40. }
  41. int count = n;
  42. myFile << count << endl<<endl;
  43. for (int i = 0; i < count; i++) {
  44. myFile << stu[i].class_0 << "\t"
  45. << stu[i].num << "\t"
  46. << stu[i].name << "\t"
  47. << stu[i].elec << "\t"
  48. << stu[i].c_program<< "\t"
  49. << stu[i].media << "\t"
  50. << stu[i].english << "\t"
  51. << stu[i].math << "\t"
  52. << stu[i].sport << "\t"
  53. << stu[i].polity << "\t"
  54. << stu[i].average << endl;
  55. }
  56. myFile.close();
  57. }
  58. int Read(Student stu[]) {
  59. fstream myFile;
  60. myFile.open("score.txt", ios::in | ios::binary);
  61. if (!myFile) {
  62. cout << "score.txt can't open!" << endl;
  63. abort();
  64. }
  65. int count;
  66. myFile.seekg(0);
  67. myFile >> count;
  68. for (int i = 0; i <= count; i++) {
  69. myFile >> stu[i].class_0 >> stu[i].num >> stu[i].name
  70. >> stu[i].elec >> stu[i].c_program >> stu[i].media
  71. >> stu[i].english >> stu[i].math >> stu[i].sport
  72. >> stu[i].polity >> stu[i].average;
  73. }
  74. myFile.close();
  75. return count;
  76. }
  77. void Input(Student stu[]) {
  78. system("cls");
  79. int i = 0;
  80. int flag;
  81. char sign = '0';
  82. cout << endl<<"======>> 请输入学生成绩 <<======"<<endl;
  83. while (sign != 'n' && sign != 'N') {
  84. cout << "班级:";
  85. cin >> stu[i].class_0;
  86. loop:
  87. cout << "学号:";
  88. cin >> stu[i].num;
  89. int c = 0;
  90. while (c < i) {
  91. c++;
  92. if (stu[i].num == stu[i - c].num) {
  93. cout << "您输入的学号已存在!请重新输入。" << endl;
  94. goto loop;
  95. }
  96. }
  97. cout << "姓名:";
  98. cin >> stu[i].name;
  99. do {
  100. flag = 0;
  101. cout << "电子技术成绩:";
  102. cin >> stu[i].elec;
  103. if (stu[i].elec > 100 || stu[i].elec < 1) {
  104. cout << " 对不起,请输入1-100之间的数字!!\n";
  105. }
  106. else {
  107. flag = 1;
  108. }
  109. } while (flag == 0);
  110. do {
  111. flag = 0;
  112. cout << "C++程序设计成绩:";
  113. cin >> stu[i].c_program;
  114. if (stu[i].c_program > 100 || stu[i].c_program < 1) {
  115. cout << " 对不起,请输入1-100之间的数字!!\n";
  116. }
  117. else {
  118. flag = 1;
  119. }
  120. } while (flag == 0);
  121. do {
  122. flag = 0;
  123. cout << "多媒体技术成绩:";
  124. cin >> stu[i].media;
  125. if (stu[i].media > 100 || stu[i].media < 1) {
  126. cout << " 对不起,请输入1-100之间的数字!!\n";
  127. }
  128. else {
  129. flag = 1;
  130. }
  131. } while (flag == 0);
  132. do {
  133. flag = 0;
  134. cout << "大学英语成绩:";
  135. cin >> stu[i].english;
  136. if (stu[i].english > 100 || stu[i].english < 1) {
  137. cout << " 对不起,请输入1-100之间的数字!!\n";
  138. }
  139. else {
  140. flag = 1;
  141. }
  142. } while (flag == 0);
  143. do {
  144. flag = 0;
  145. cout << "高等数学成绩:";
  146. cin >> stu[i].math;
  147. if (stu[i].math > 100 || stu[i].math < 1) {
  148. cout << " 对不起,请输入1-100之间的数字!!\n";
  149. }
  150. else {
  151. flag = 1;
  152. }
  153. } while (flag == 0);
  154. do {
  155. flag = 0;
  156. cout << "大学体育成绩:";
  157. cin >> stu[i].sport;
  158. if (stu[i].sport > 100 || stu[i].sport < 1) {
  159. cout << " 对不起,请输入1-100之间的数字!!\n";
  160. }
  161. else {
  162. flag = 1;
  163. }
  164. } while (flag == 0);
  165. do {
  166. flag = 0;
  167. cout << "马克思主义基本原理成绩:";
  168. cin >> stu[i].polity;
  169. if (stu[i].polity > 100 || stu[i].polity < 1) {
  170. cout << " 对不起,请输入1-100之间的数字!!\n";
  171. }
  172. else {
  173. flag = 1;
  174. }
  175. } while (flag == 0);
  176. stu[i].average = (stu[i].elec + stu[i].c_program + stu[i].media + stu[i].english + stu[i].math +
  177. stu[i].sport + stu[i].polity) / 7;
  178. cout << " 平均分为:" << stu[i].average<<endl;
  179. cout << "======>> 提示:是否继续写入学生成绩 ?(y/n)";
  180. cin >> sign;
  181. i++;
  182. }
  183. Write(stu, i);
  184. }
  185. void Statistic(Student stu[]) {
  186. system("cls");
  187. int n = Read(stu);
  188. cout << endl << "======>> 输出学生统计数据 <<======\n" << endl;
  189. cout << "---------------------------------------" << endl;
  190. cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t" << "平均分" << endl;
  191. cout << "---------------------------------------" << endl;
  192. for (int i = 0; i < n; i++)
  193. cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t" << stu[i].average << endl;
  194. cout << "---------------------------------------" << endl;
  195. system("pause");
  196. }
  197. void Lookup(Student stu[]) {
  198. system("cls");
  199. int n = Read(stu);
  200. int s;
  201. int i = 0;
  202. cout << endl << "======>> 查找学生成绩 <<======" << endl;
  203. cout << "请输入要查找学生的学号:";
  204. cin >> s;
  205. while ((stu[i].num - s) != 0 && i < n)i++;
  206. if (i == n) {
  207. cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
  208. }
  209. else {
  210. cout << "----------------------------" << endl;
  211. cout << "班级:" << stu[i].class_0 << endl;
  212. cout << "学号:" << stu[i].num << endl;
  213. cout << "姓名:" << stu[i].name << endl;
  214. cout << "电子技术:" << stu[i].elec << endl;
  215. cout << "C++程序设计:" << stu[i].c_program << endl;
  216. cout << "多媒体技术:" << stu[i].media << endl;
  217. cout << "大学英语:" << stu[i].english << endl;
  218. cout << "高等数学:" << stu[i].math << endl;
  219. cout << "大学体育:" << stu[i].sport << endl;
  220. cout << "马克思主义基本原理:" << stu[i].polity << endl;
  221. cout << "平均分:" << stu[i].average << endl;
  222. }
  223. }
  224. void Modify(Student stu[]) {
  225. system("cls");
  226. int n = Read(stu);
  227. int s;
  228. int i = 0;
  229. cout << endl << "======>> 修改学生成绩 <<======" << endl;
  230. cout << "请输入要修改成绩学生的学号:";
  231. cin >> s;
  232. while ((stu[i].num - s) != 0 && i < n)i++;
  233. if (i == n) {
  234. cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
  235. }
  236. else {
  237. cout << "------------------------------------------------------------------------------------" << endl;
  238. cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t"
  239. << "电子" << "\t" << "C++" << "\t" << "多媒体" << "\t"
  240. << "英语" << "\t" << "数学" << "\t" << "体育" << "\t"
  241. << "政治" << "\t" << "平均分" << endl;
  242. cout << "------------------------------------------------------------------------------------" << endl;
  243. cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t"
  244. << stu[i].elec << "\t" << stu[i].c_program << "\t" << stu[i].media << "\t"
  245. << stu[i].english << "\t" << stu[i].math << "\t" << stu[i].sport << "\t"
  246. << stu[i].polity << "\t" << stu[i].average << endl;
  247. cout << endl << "请重新输入该学生成绩: " << endl;
  248. cout << "电子技术成绩:";
  249. cin >> stu[i].elec;
  250. cout << "C++成绩:";
  251. cin >> stu[i].c_program;
  252. cout << "多媒体技术成绩:";
  253. cin >> stu[i].media;
  254. cout << "大学英语成绩:";
  255. cin >> stu[i].english;
  256. cout << "高等数学成绩:";
  257. cin >> stu[i].math;
  258. cout << "大学体育成绩:";
  259. cin >> stu[i].sport;
  260. cout << "马克思主义基本原理成绩:";
  261. cin >> stu[i].polity;
  262. stu[i].average = (stu[i].elec + stu[i].c_program + stu[i].media +
  263. stu[i].english + stu[i].math + stu[i].sport + stu[i].polity) / 7;
  264. cout << "平均分:" << stu[i].average << endl;
  265. char c;
  266. cout << "======>> 是否保存数据 ?(y/n)";
  267. cin >> c;
  268. if (c != 'n' && c != 'N')
  269. Write(stu, n);
  270. }
  271. }
  272. void Delete(Student stu[]) {
  273. system("cls");
  274. int n = Read(stu);
  275. int s;
  276. int i = 0, j ;
  277. cout << endl << "======>> 删除学生成绩 <<======" << endl;
  278. cout << "请输入要删除的学生的学号:";
  279. cin >> s;
  280. while ((stu[i].num - s) != 0 && i < n)i++;
  281. if (i == n) {
  282. cout << "======>> 对不起,无法找到该学生...... <<======" << endl;
  283. }
  284. else {
  285. for (j = i; j < n - 1; j++) {
  286. strcpy(stu[j].class_0,stu[j + 1].class_0);
  287. stu[j].num = stu[j + 1].num;
  288. strcpy(stu[j].name, stu[j + 1].name);
  289. stu[j].elec = stu[j + 1].elec;
  290. stu[j].c_program = stu[j + 1].c_program;
  291. stu[j].media = stu[j + 1].media;
  292. stu[j].english = stu[j + 1].english;
  293. stu[j].math = stu[j + 1].math;
  294. stu[j].sport = stu[j + 1].sport;
  295. stu[j].polity = stu[j + 1].polity;
  296. stu[j].average = stu[j + 1].average;
  297. }
  298. cout << "======>> 提示:已成功删除!" << endl;
  299. }
  300. Write(stu, n - 1);
  301. }
  302. void Insert(Student stu[]) {
  303. system("cls");
  304. int n = Read(stu);
  305. char s='0';
  306. cout << endl << "=======>> 增加学生成绩 <<========" << endl;
  307. while (s != 'n' && s != 'N') {
  308. cout << "班级:";
  309. cin >> stu[n].class_0;
  310. cout << "学号:";
  311. cin >> stu[n].num;
  312. cout << "姓名:";
  313. cin >> stu[n].name;
  314. cout << "电子技术成绩:";
  315. cin >> stu[n].elec;
  316. cout << "C++成绩:";
  317. cin >> stu[n].c_program;
  318. cout << "多媒体技术成绩:";
  319. cin >> stu[n].media;
  320. cout << "大学英语成绩:";
  321. cin >> stu[n].english;
  322. cout << "高等数学成绩:";
  323. cin >> stu[n].math;
  324. cout << "大学体育成绩:";
  325. cin >> stu[n].sport;
  326. cout << "马克思主义基本原理成绩:";
  327. cin >> stu[n].polity;
  328. stu[n].average = (stu[n].elec + stu[n].c_program + stu[n].media +
  329. stu[n].english + stu[n].math + stu[n].sport + stu[n].polity) / 7;
  330. cout << "平均分:" << stu[n].average << endl;
  331. n++;
  332. cout << "======>> 是否继续插入(y/n)";
  333. cin >> s;
  334. }
  335. Write(stu, n);
  336. }
  337. void Sort(Student stu[]) {
  338. system("cls");
  339. int i, j, k;
  340. float s;
  341. char t[20];
  342. cout << endl << "======>> 降序排列 <<======" << endl;
  343. int n = Read(stu);
  344. for (i = 0; i < n-1; i++) {
  345. for (j = 0; j < n - 1; j++) {
  346. if (stu[j].average < stu[j + 1].average) {
  347. //交换课程
  348. strcpy(t, stu[j + 1].class_0);
  349. strcpy(stu[j + 1].class_0, stu[j].class_0);
  350. strcpy(stu[j].class_0, t);
  351. //num
  352. k = stu[j + 1].num;
  353. stu[j + 1].num = stu[j].num;
  354. stu[j].num = k;
  355. //name
  356. strcpy(t, stu[j + 1].name);
  357. strcpy(stu[j + 1].name, stu[j].name);
  358. strcpy(stu[j].name, t);
  359. //elec
  360. s = stu[j + 1].elec;
  361. stu[j + 1].elec = stu[j].elec;
  362. stu[j].elec = s;
  363. //c_program
  364. s = stu[j + 1].c_program;
  365. stu[j + 1].c_program = stu[j].c_program;
  366. stu[j].c_program = s;
  367. //media
  368. s = stu[j + 1].media;
  369. stu[j + 1].media = stu[j].media;
  370. stu[j].media = s;
  371. //english
  372. s = stu[j + 1].english;
  373. stu[j + 1].english = stu[j].english;
  374. stu[j].english = s;
  375. //math
  376. s = stu[j + 1].math;
  377. stu[j + 1].math = stu[j].math;
  378. stu[j].math = s;
  379. //sport
  380. s = stu[j + 1].sport;
  381. stu[j + 1].sport = stu[j].sport;
  382. stu[j].sport = s;
  383. //polity
  384. s = stu[j + 1].polity;
  385. stu[j + 1].polity = stu[j].polity;
  386. stu[j].polity = s;
  387. //average
  388. s = stu[j + 1].average;
  389. stu[j + 1].average = stu[j].average;
  390. stu[j].average = s;
  391. }
  392. }
  393. }
  394. cout << "------------------------------------------------------------------------------------" << endl;
  395. cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t"
  396. << "电子" << "\t" << "C++" << "\t" << "多媒体" << "\t"
  397. << "英语" << "\t" << "数学" << "\t" << "体育" << "\t"
  398. << "政治" << "\t" << "平均分" << endl;
  399. cout << "------------------------------------------------------------------------------------" << endl;
  400. for (int i = 0; i < n; i++) {
  401. stu[i].order = i + 1;
  402. cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t"
  403. << stu[i].elec << "\t" << stu[i].c_program << "\t" << stu[i].media << "\t"
  404. << stu[i].english << "\t" << stu[i].math << "\t" << stu[i].sport << "\t"
  405. << stu[i].polity << "\t" << stu[i].average << endl;
  406. }
  407. Write(stu, n);
  408. }
  409. void Output(Student stu[]) {
  410. system("cls");
  411. int n = Read(stu);
  412. cout << endl << "======>> 显示全部学生成绩 <<======" << endl;
  413. if (!stu) {
  414. cout << "没有记录";
  415. }
  416. else {
  417. cout << "------------------------------------------------------------------------------------" << endl;
  418. cout << "班级" << "\t" << "学号" << "\t" << "姓名" << "\t"
  419. << "电子" << "\t" << "C++" << "\t" << "多媒体" << "\t"
  420. << "英语" << "\t" << "数学" << "\t" << "体育" << "\t"
  421. << "政治" << "\t" << "平均分" << endl;
  422. cout << "------------------------------------------------------------------------------------" << endl;
  423. for (int i = 0; i < n; i++) {
  424. cout << stu[i].class_0 << "\t" << stu[i].num << "\t" << stu[i].name << "\t"
  425. << stu[i].elec << "\t" << stu[i].c_program << "\t" << stu[i].media << "\t"
  426. << stu[i].english << "\t" << stu[i].math << "\t" << stu[i].sport << "\t"
  427. << stu[i].polity << "\t" << stu[i].average << endl;
  428. }
  429. cout << "------------------------------------------------------------------------------------" << endl;
  430. }
  431. }
  432. int menu() {
  433. char c;
  434. do {
  435. system("cls");
  436. cout << "******************************************************" << endl;
  437. cout << "----------------欢迎使用学生成绩管理系统---------------" << endl;
  438. cout << " * 【1】输入学生成绩 * " << endl;
  439. cout << " * 【2】显示统计数据 * " << endl;
  440. cout << " * 【3】查找学生成绩 * " << endl;
  441. cout << " * 【4】修改学生成绩 * " << endl;
  442. cout << " * 【5】删除学生成绩 * " << endl;
  443. cout << " * 【6】插入学生成绩 * " << endl;
  444. cout << " * 【7】按平均分排列 * " << endl;
  445. cout << " * 【8】显示学生成绩 * " << endl;
  446. cout << " * 【0】退出管理系统 * " << endl;
  447. cout << "******************************************************" << endl;
  448. cout << "请选择您的操作 (0-8):" << endl;
  449. c = getchar();
  450. } while (c < '0' || c > '8');
  451. return (c - '0');
  452. }
  453. int main() {
  454. for (;;) {
  455. switch (menu()) {
  456. case 1:
  457. Input(stu);
  458. break;
  459. case 2:
  460. Statistic(stu);
  461. break;
  462. case 3:
  463. Lookup(stu);
  464. system("pause");
  465. break;
  466. case 4:
  467. Modify(stu);
  468. system("pause");
  469. break;
  470. case 5:
  471. Delete(stu);
  472. system("pause");
  473. break;
  474. case 6:
  475. Insert(stu);
  476. system("pause");
  477. break;
  478. case 7:
  479. Sort(stu);
  480. system("pause");
  481. break;
  482. case 8:
  483. Output(stu);
  484. system("pause");
  485. break;
  486. case 0:
  487. cout << endl << "================感谢您使用学生成绩管理系统==============\n" << endl;
  488. exit(0);
  489. }
  490. }
  491. return 0;
  492. }
  1. 该代码在visual studio 2019上运行没有问题,不知道在别的IDE中有没有问题,这是一个纯c++实现的,没有参杂c的内容,但是如果用c来实现,也基本就是这个样子,就是前面的Student类换成结构体struct,输入输出改为scanf,printf ,文件读写改为c的,其他的没有太大的改变。
  2. 如下所示,当我们一开始运行这个程序,没有录入学生成绩,直接点击【8】显示学生成绩,它会提示失败,并抛出错误:
  3. ![](https://img-blog.csdnimg.cn/20201128105007215.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2ZlaW5pZmk=,size_16,color_FFFFFF,t_70)
  4. 这就是前面提到的那个问题,我们需要手动创建一个score.txt文件并写入相关记录,文件格式以及数据在前面你已经提到,或者我们点击【1】输入学生成绩,创建这个文件也是可以的,后续反复运行这个程序也不会报错了。

本文转载自: https://blog.csdn.net/feinifi/article/details/110249811
版权归原作者 luffy5459 所有, 如有侵权,请联系我们删除。

“课程设计:c++实现学生成绩管理系统”的评论:

还没有评论