• 学生成绩管理系统(c语言)


    目录

    题目需求

    程序编写

    定义学生结构体:

    选择菜单:

    文件读入结构体变量:

    结构体变量写入文件:

    输入检查:

    输入记录:

    打印记录:

    修改记录: 

    删除记录:

    查找信息:

    最终代码:

    调试:

    软件准备:

    测试数据: 

    直接复制测试数据版本:

    输入,打印输出功能测试:

    统计功能测试:

    其他功能测试:


    题目

            编写一个C语言程序,实现学生成绩管理系统,至少能够管理30条的成绩信息。其中:学生成绩信息主要包括:学号,姓名,各科成绩(假设四科成绩:数学,英语,政治,程序设计),用结构类型数组保存学生成绩信息;学生成绩信息保存到文件中;注:成绩为良以上的需用文件保存数据;每一功能用函数实现; 具体功能要求如下:

            1)【录入】能够从文件中读学生成绩信息,也能够随时录入1条学生成绩信息。

            2)【修改】能够随时按学号修改1条学生信息,包括:对已录入的信息进行修改。

            3)【删除】能够随时按学号删除1条学生信息。

            4)【显示】能够按照要求把结果显示到屏幕上。

            5)【查询】能够按照输入要求把查询结果显示到屏幕上(例:按学号查询,结果有一条或没有相应信息显示,或按成绩查询,结果可能有多条记录或没有相应信息显示)。

            6【统计】能够按照输入要求统计相应功能(例:统计每门课平均成绩并显示,统计每门课优秀率学生人数并显示)。

            7)【存储】能够将当前系统中的所有信息保存到文件中。

    程序编写

    定义学生结构体:

    1. #define MAX_STUDENTS 30
    2. // 定义结构体类型
    3. typedef struct Student {
    4. int id; // 学号
    5. char name[20]; // 姓名
    6. int scores[4];// 各科成绩(数学、英语、政治、程序设计)
    7. }STU;
    8. STU students[MAX_STUDENTS];

            首先我们将学生的信息全部封装成一个结构体,这样我们才能方便后续使用。 

    选择菜单:

    1. #include
    2. void menu(void);
    3. void main(void)
    4. {
    5. short int flag = 0;
    6. menu();
    7. do
    8. {
    9. flag = 1;
    10. switch (getch())
    11. {
    12. case '1':; break;
    13. case '7':exit(0);
    14. default: printf("输入有误\n");
    15. }
    16. printf("按任意键继续\n");
    17. getch();
    18. menu();
    19. } while (flag == 1);
    20. }
    21. /*选择菜单*/
    22. void menu(void)
    23. {
    24. system("cls");
    25. printf("\n");
    26. printf("*********欢迎进入学生成绩管理系统**************\n");
    27. printf(" 菜单 \n");
    28. printf("输入记录-------------------------------------1\n");
    29. printf("修改记录-------------------------------------2\n");
    30. printf("删除记录-------------------------------------3\n");
    31. printf("查询记录-------------------------------------4\n");
    32. printf("统计记录-------------------------------------5\n");
    33. printf("显示记录-------------------------------------6\n");
    34. printf("退出系统-------------------------------------7\n");
    35. printf("**********************************************\n");
    36. printf("请输入您的选择\n");
    37. }

    这段代码实现了一个学生成绩管理系统的菜单选择功能。以下是代码的解析:

    1. 包含头文件:#include 包含了C语言的标准输入输出库,使得程序可以使用printfgetch等函数。
    2. 函数声明:void menu(void); 声明了一个名为menu的函数,该函数没有参数,也没有返回值。
    3. 主函数:void main() 是程序的入口点。
    4. 变量声明和初始化:short int flag = 0; 声明了一个名为flag的短整型变量,并初始化为0。
    5. 调用函数:menu(); 调用了menu函数,用于显示系统的菜单。
    6. do-while循环:do {...} while (flag == 1); 是一个do-while循环,用于反复显示菜单,直到用户输入'7'为止。
    7. switch语句:switch (getch()) {...} 用于根据用户的输入执行相应的操作。
    8. break语句:case '1':; break; 中的break语句用于结束switch语句,防止程序继续执行下一个case。
    9. 退出程序:exit(0); 用于退出程序。
    10. system函数:system("cls"); 用于清空控制台屏幕,这是一个Windows特有的函数。在Linux或macOS下,可以使用system("clear");
    11. printf函数:用于输出欢迎信息和菜单选项。

    文件读入结构体变量

    1. void file_read(void)
    2. {
    3. // 定义文件指针 fp,用于指向要读取的文件 "file.txt"
    4. FILE* fp;
    5. fp = fopen("file.txt", "r");
    6. // 初始化学生数量为0
    7. student_cnt = 0;
    8. // 通过循环逐行读取文件中的学生信息
    9. // 每行数据包括学号、姓名、四门成绩,以空格分隔
    10. // fscanf 函数将每行数据按照格式化字符串 "%d%s%d%d%d%d" 进行解析,并将结果存储到相应的变量中
    11. // 如果读取失败,fscanf 返回 -1,循环结束
    12. while (fscanf(fp, "%d%s%d%d%d%d", &students[student_cnt].id, students[student_cnt].name, &students[student_cnt].scores[0], &students[student_cnt].scores[1], &students[student_cnt].scores[2], &students[student_cnt].scores[3]) != -1)
    13. {
    14. // 学生数量加1
    15. student_cnt++;
    16. }
    17. // 关闭文件指针
    18. fclose(fp);
    19. }

     我们通过这个函数将文本文件中的数据,按照格式读取出来,文本中的数据内容以空格分开。并在这个时候更新我们的定义的数据内容。

    结构体变量写入文件

    1. void file_wirte(void)
    2. {
    3. // 定义一个整型变量 i,用于循环计数
    4. int i;
    5. // 定义一个文件指针 fp,用于指向要写入的文件 "file.txt"
    6. FILE* fp;
    7. fp = fopen("file.txt", "w");
    8. // 通过循环逐个将学生信息写入文件中
    9. // 循环条件是 i < student_cnt,即学生数量小于文件中的学生数量时继续循环
    10. for (i = 0; i < student_cnt; i++)
    11. {
    12. // 使用 fprintf 函数将学生信息按照指定格式写入文件中
    13. fprintf(fp, "%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    14. }
    15. // 关闭文件指针
    16. fclose(fp);
    17. }
    1. 定义一个整型变量 i,用于循环计数。
    2. 定义一个文件指针 fp,用于指向要写入的文件 "file.txt"。
    3. 使用 fopen 函数打开文件 "file.txt",并以写入模式 "w" 打开它。如果文件不存在,会创建一个新文件;如果文件已经存在,则会清空文件内容。
    4. 使用 for 循环逐个将学生信息写入文件中。循环条件是 i < student_cnt,即当学生数量小于文件中的学生数量时继续循环。
    5. 在循环内部,使用 fprintf 函数将学生信息按照指定格式写入文件中。其中,%d 表示整数类型的数据,\t 表示制表符,%s 表示字符串类型的数据,\n 表示换行符。
    6. 最后,使用 fclose 函数关闭文件指针。

    输入检查:

    1. /*输入检查*/
    2. int input_check(STU student)
    3. {
    4. int rt = 1,x=0;
    5. if (student.id < 1 || student.id>100)
    6. {
    7. rt = 0;
    8. printf("输入学号不合法\n");
    9. }
    10. while (x < 4)
    11. {
    12. if (student.scores[x] > 100 || student.scores[x] < 0)
    13. {
    14. rt = 0;
    15. printf("输入成绩%d不合法\n", x);
    16. }
    17. x++;
    18. }
    19. return rt;
    20. }

            定义一个输入检查函数,这个函数的主要作用就说将输入进来的数据合法性进行检查,其中学生号在【1,100】 ,学生的成绩在【0,100】区间内。其他输入均判定为输入不合法。

    输入记录:

    1. void input(void)
    2. {
    3. STU student;
    4. FILE* fp;
    5. fp = fopen("file.txt", "a+");
    6. printf("请输入学生的学号、姓名和各科成绩:\n");
    7. printf("学号:");
    8. scanf("%d", &student.id);
    9. printf("姓名:");
    10. scanf("%s", student.name);
    11. printf("数学成绩:");
    12. scanf("%d", &student.scores[0]);
    13. printf("英语成绩:");
    14. scanf("%d", &student.scores[1]);
    15. printf("政治成绩:");
    16. scanf("%d", &student.scores[2]);
    17. printf("程序设计成绩:");
    18. scanf("%d", &student.scores[3]);
    19. if (input_check(student))
    20. {
    21. printf("添加学生信息成功!!!\n");
    22. fprintf(fp, "%d\t%s\t%d\t%d\t%d\t%d\n", student.id, student.name, student.scores[0], student.scores[1], student.scores[2], student.scores[3]);
    23. }
    24. else
    25. printf("添加学生信息失败!!!\n");
    26. fclose(fp);
    27. }

            该函数主要功能是通过scanf分别将输入的数据保存到结构体中,在进行数据检查后,将其写入到文件当中。

    打印记录:

    1. void output()
    2. {
    3. int i;
    4. file_read();
    5. printf("学号\t姓名\t\t数学\t英语\t政治\t程序设计\n");
    6. for(i=0;i
    7. printf("%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    8. }

            这个函数的主要实现就是调用了文件读取函数file_read();将所有文件中的数据读出来,放在结构体中,我们就可以将它通过表格的样式打印出来了。

    修改记录: 

    1. void revamp(void)
    2. {
    3. int i,id;
    4. STU student;
    5. file_read();
    6. printf("请输入学号:");
    7. scanf("%d",&id);
    8. for (i=0;i
    9. {
    10. if (id == students[i].id)
    11. {
    12. printf("请输入学生的学号、姓名和各科成绩:\n");
    13. printf("学号:");
    14. scanf("%d", &student.id);
    15. printf("姓名:");
    16. scanf("%s", student.name);
    17. printf("数学成绩:");
    18. scanf("%d", &student.scores[0]);
    19. printf("英语成绩:");
    20. scanf("%d", &student.scores[1]);
    21. printf("政治成绩:");
    22. scanf("%d", &student.scores[2]);
    23. printf("程序设计成绩:");
    24. scanf("%d", &student.scores[3]);
    25. students[i] = student;
    26. printf("学生信息修改成功!!!\n");
    27. break;
    28. }
    29. }
    30. if(i!= student_cnt)
    31. file_wirte();
    32. else
    33. printf("没有找到学生信息!!!\n");
    34. }

            这个函数的主要作用是首先将它的从文本中读取出来,然后 通过学号的方式来查找到学生,将他的信息全部修改,如果没有找到的话,我们就不写入文件了,输出没有找到学生信息。

    删除记录:

    1. void del(void)
    2. {
    3. int i, id,flag=0;
    4. file_read();
    5. printf("请输入学号:");
    6. scanf("%d", &id);
    7. for (i = 0; i < student_cnt; i++)
    8. {
    9. if (flag==0&&id == students[i].id)
    10. {
    11. flag = 1;
    12. printf("学生信息删除成功!!!\n");
    13. }
    14. if (flag == 1)students[i] = students[i+1];
    15. }
    16. if (i == student_cnt)
    17. {
    18. student_cnt--;
    19. file_wirte();
    20. }
    21. else
    22. printf("没有找到学生信息!!!\n");
    23. }

            函数的作用是从学生数组中删除具有特定学号的学生信息。函数首先提示用户输入要删除的学生的学号,然后遍历学生数组,查找与输入学号匹配的学生信息。如果找到了匹配的学生信息,函数会将其从数组中删除,并输出“学生信息删除成功!!!”。如果遍历完整个数组后仍未找到匹配的学生信息,则输出“没有找到学生信息!!!”。最后,如果成功删除了学生信息,函数会减少学生数组的长度,并将更新后的数组写回文件。

    查找信息:

    1. void find(void)
    2. {
    3. int i,mode ,id, scores,flag=0;
    4. file_read();
    5. printf("请输入查询方式(1.学号,2.数学成绩,3.英语成绩、4.政治成绩、5.程序设计成绩):");
    6. scanf("%d", &mode);
    7. if (mode == 1)
    8. {
    9. printf("请输入学号:");
    10. scanf("%d", &id);
    11. }
    12. else
    13. {
    14. printf("请输入成绩:");
    15. scanf("%d", &scores);
    16. }
    17. printf("学号\t姓名\t\t数学\t英语\t政治\t程序设计\n");
    18. for (i = 0; i < student_cnt; i++)
    19. {
    20. if (mode == 1)
    21. {
    22. if (id == students[i].id)
    23. {
    24. flag = 1;
    25. printf("%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    26. }
    27. }
    28. else
    29. {
    30. if (scores == students[i].scores[mode-2])
    31. {
    32. flag = 1;
    33. printf("%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    34. }
    35. }
    36. }
    37. if (flag==0)
    38. printf("没有找到学生信息!!!\n");
    39. }

            函数首先提示用户输入查询方式,包括学号、数学成绩、英语成绩、政治成绩和程序设计成绩等选项。根据用户选择的查询方式,函数会要求用户输入相应的信息(如学号或成绩)。

            然后,函数会遍历存储在学生数组中的学生信息,查找与用户输入相匹配的学生信息。如果找到了匹配的学生信息,函数会输出该学生的所有信息(学号、姓名以及各科的成绩)。如果未找到匹配的学生信息,则输出“没有找到学生信息”的提示。

            函数首先提示用户输入查询方式,包括平均分和优秀率等选项。根据用户选择的查询方式,函数会进行相应的计算。

            在计算平均分时,函数会遍历所有学生的信息,将每个学生的成绩累加到avgor数组中对应的元素中。最后,函数将每个元素的值除以学生的总数,并输出每个科目的平均成绩。

            在计算优秀率时,函数同样会遍历所有学生的信息。对于每个科目,函数会累加成绩大于等于90的分数的个数,并将结果保存在avgor数组中对应的元素中。最后,函数将每个元素的值除以学生的总数,并输出每个科目的优秀率。

    最终代码:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. #include
    4. #include
    5. #include
    6. #define MAX_STUDENTS 100
    7. // 定义结构体类型
    8. typedef struct Student {
    9. int id; // 学号
    10. char name[20]; // 姓名
    11. int scores[4];// 各科成绩(数学、英语、政治、程序设计)
    12. }STU;
    13. STU students[MAX_STUDENTS];
    14. int student_cnt = 0;
    15. void menu(void);
    16. void input(void);
    17. void output(void);
    18. void revamp(void);
    19. void del(void);
    20. void find(void);
    21. void statistics(void);
    22. void main()
    23. {
    24. short int flag = 0;
    25. menu();
    26. do
    27. {
    28. flag = 1;
    29. switch (getch())
    30. {
    31. case '1':input(); break;
    32. case '2':revamp(); break;
    33. case '3':del(); break;
    34. case '4':find(); break;
    35. case '5':statistics(); break;
    36. case '6':output(); break;
    37. case '7':exit(0);
    38. default: printf("输入有误\n");
    39. }
    40. printf("按任意键继续\n");
    41. getch();
    42. menu();
    43. } while (flag == 1);
    44. }
    45. /*选择菜单*/
    46. void menu(void)
    47. {
    48. system("cls");
    49. printf("\n");
    50. printf("*********欢迎进入学生成绩管理系统**************\n");
    51. printf(" 菜单 \n");
    52. printf("输入记录-------------------------------------1\n");
    53. printf("修改记录-------------------------------------2\n");
    54. printf("删除记录-------------------------------------3\n");
    55. printf("查询记录-------------------------------------4\n");
    56. printf("统计记录-------------------------------------5\n");
    57. printf("显示记录-------------------------------------6\n");
    58. printf("退出系统-------------------------------------7\n");
    59. printf("**********************************************\n");
    60. printf("请输入您的选择\n");
    61. }
    62. void file_read(void)
    63. {
    64. // 定义文件指针 fp,用于指向要读取的文件 "file.txt"
    65. FILE* fp;
    66. fp = fopen("file.txt", "r");
    67. // 初始化学生数量为0
    68. student_cnt = 0;
    69. // 通过循环逐行读取文件中的学生信息
    70. // 每行数据包括学号、姓名、四门成绩,以空格分隔
    71. // fscanf 函数将每行数据按照格式化字符串 "%d%s%d%d%d%d" 进行解析,并将结果存储到相应的变量中
    72. // 如果读取失败,fscanf 返回 -1,循环结束
    73. while (fscanf(fp, "%d%s%d%d%d%d", &students[student_cnt].id, students[student_cnt].name, &students[student_cnt].scores[0], &students[student_cnt].scores[1], &students[student_cnt].scores[2], &students[student_cnt].scores[3]) != -1)
    74. {
    75. // 学生数量加1
    76. student_cnt++;
    77. }
    78. // 关闭文件指针
    79. fclose(fp);
    80. }
    81. void file_wirte(void)
    82. {
    83. // 定义一个整型变量 i,用于循环计数
    84. int i;
    85. // 定义一个文件指针 fp,用于指向要写入的文件 "file.txt"
    86. FILE* fp;
    87. fp = fopen("file.txt", "w");
    88. // 通过循环逐个将学生信息写入文件中
    89. // 循环条件是 i < student_cnt,即学生数量小于文件中的学生数量时继续循环
    90. for (i = 0; i < student_cnt; i++)
    91. {
    92. // 使用 fprintf 函数将学生信息按照指定格式写入文件中
    93. fprintf(fp, "%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    94. }
    95. // 关闭文件指针
    96. fclose(fp);
    97. }
    98. /*输入检查*/
    99. int input_check(STU student)
    100. {
    101. int rt = 1, x = 0;
    102. if (student.id < 1 || student.id>100)
    103. {
    104. rt = 0;
    105. printf("输入学号不合法\n");
    106. }
    107. while (x < 4)
    108. {
    109. if (student.scores[x] > 100 || student.scores[x] < 0)
    110. {
    111. rt = 0;
    112. printf("输入成绩%d不合法\n", x);
    113. }
    114. x++;
    115. }
    116. return rt;
    117. }
    118. void input(void)
    119. {
    120. STU student;
    121. FILE* fp;
    122. fp = fopen("file.txt", "a+");
    123. printf("请输入学生的学号、姓名和各科成绩:\n");
    124. printf("学号:");
    125. scanf("%d", &student.id);
    126. printf("姓名:");
    127. scanf("%s", student.name);
    128. printf("数学成绩:");
    129. scanf("%d", &student.scores[0]);
    130. printf("英语成绩:");
    131. scanf("%d", &student.scores[1]);
    132. printf("政治成绩:");
    133. scanf("%d", &student.scores[2]);
    134. printf("程序设计成绩:");
    135. scanf("%d", &student.scores[3]);
    136. if (input_check(student))
    137. {
    138. printf("添加学生信息成功!!!\n");
    139. fprintf(fp, "%d\t%s\t%d\t%d\t%d\t%d\n", student.id, student.name, student.scores[0], student.scores[1], student.scores[2], student.scores[3]);
    140. }
    141. else
    142. printf("添加学生信息失败!!!\n");
    143. fclose(fp);
    144. }
    145. void output()
    146. {
    147. int i;
    148. file_read();
    149. printf("学号\t姓名\t\t数学\t英语\t政治\t程序设计\n");
    150. for (i = 0; i < student_cnt; i++)
    151. printf("%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    152. }
    153. void revamp(void)
    154. {
    155. int i, id;
    156. STU student;
    157. file_read();
    158. printf("请输入学号:");
    159. scanf("%d", &id);
    160. for (i = 0; i < student_cnt; i++)
    161. {
    162. if (id == students[i].id)
    163. {
    164. printf("请输入学生的学号、姓名和各科成绩:\n");
    165. printf("学号:");
    166. scanf("%d", &student.id);
    167. printf("姓名:");
    168. scanf("%s", student.name);
    169. printf("数学成绩:");
    170. scanf("%d", &student.scores[0]);
    171. printf("英语成绩:");
    172. scanf("%d", &student.scores[1]);
    173. printf("政治成绩:");
    174. scanf("%d", &student.scores[2]);
    175. printf("程序设计成绩:");
    176. scanf("%d", &student.scores[3]);
    177. students[i] = student;
    178. printf("学生信息修改成功!!!\n");
    179. break;
    180. }
    181. }
    182. if (i != student_cnt)
    183. file_wirte();
    184. else
    185. printf("没有找到学生信息!!!\n");
    186. }
    187. void del(void)
    188. {
    189. int i, id, flag = 0;
    190. file_read();
    191. printf("请输入学号:");
    192. scanf("%d", &id);
    193. for (i = 0; i < student_cnt; i++)
    194. {
    195. if (flag == 0 && id == students[i].id)
    196. {
    197. flag = 1;
    198. printf("学生信息删除成功!!!\n");
    199. }
    200. if (flag == 1)students[i] = students[i + 1];
    201. }
    202. if (i == student_cnt)
    203. {
    204. student_cnt--;
    205. file_wirte();
    206. }
    207. else
    208. printf("没有找到学生信息!!!\n");
    209. }
    210. void find(void)
    211. {
    212. int i, mode, id, scores, flag = 0;
    213. file_read();
    214. printf("请输入查询方式(1.学号,2.数学成绩,3.英语成绩、4.政治成绩、5.程序设计成绩):");
    215. scanf("%d", &mode);
    216. if (mode == 1)
    217. {
    218. printf("请输入学号:");
    219. scanf("%d", &id);
    220. }
    221. else
    222. {
    223. printf("请输入成绩:");
    224. scanf("%d", &scores);
    225. }
    226. printf("学号\t姓名\t\t数学\t英语\t政治\t程序设计\n");
    227. for (i = 0; i < student_cnt; i++)
    228. {
    229. if (mode == 1)
    230. {
    231. if (id == students[i].id)
    232. {
    233. flag = 1;
    234. printf("%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    235. }
    236. }
    237. else
    238. {
    239. if (scores == students[i].scores[mode - 2])
    240. {
    241. flag = 1;
    242. printf("%d\t%-8s\t%d\t%d\t%d\t%d\n", students[i].id, students[i].name, students[i].scores[0], students[i].scores[1], students[i].scores[2], students[i].scores[3]);
    243. }
    244. }
    245. }
    246. if (flag == 0)
    247. printf("没有找到学生信息!!!\n");
    248. }
    249. void statistics(void)
    250. {
    251. int i, j, mode;
    252. float avgor[4] = { 0,0,0,0 };
    253. file_read();
    254. printf("请输入查询方式(1.平均分,2.优秀率>=90):");
    255. scanf("%d", &mode);
    256. for (i = 0; i < student_cnt; i++)
    257. {
    258. if (mode == 1)
    259. {
    260. for (j = 0; j < 4; j++)
    261. {
    262. avgor[j] += students[i].scores[j];
    263. }
    264. }
    265. else
    266. {
    267. for (j = 0; j < 4; j++)
    268. {
    269. if (students[i].scores[j] >= 90) avgor[j]++;
    270. }
    271. }
    272. }
    273. if (mode == 1)
    274. {
    275. printf("数学平均成绩:%.2f\n", avgor[0] / student_cnt);
    276. printf("英语平均成绩:%.2f\n", avgor[1] / student_cnt);
    277. printf("政治平均成绩:%.2f\n", avgor[2] / student_cnt);
    278. printf("程序设计平均成绩:%.2f\n", avgor[3] / student_cnt);
    279. }
    280. else
    281. {
    282. printf("数学优秀率:%.2f\n", avgor[0] / student_cnt);
    283. printf("英语优秀率:%.2f\n", avgor[1] / student_cnt);
    284. printf("政治优秀率:%.2f\n", avgor[2] / student_cnt);
    285. printf("程序设计优秀率:%.2f\n", avgor[3] / student_cnt);
    286. }
    287. }

    调试:

    软件准备:

    超详细的visual studio 2022图文安装教程+新建一个c语言程序-CSDN博客

    测试数据: 

    学号姓名数学英语政治程序设计
    001张三85789088
    002李四92847689
    003王五79867783
    004赵六88898591
    005刘七75717977
    006陈八82878186
    007周九94919395
    008吴十76797278
    009张十一89858288
    010李十二93929194
    011王十三77757374
    012赵十四84838082
    013刘十五95949697
    014陈十六73727170
    015周十七86888485

    直接复制测试数据版本:

    1. 1
    2. 001
    3. 张三
    4. 85
    5. 78
    6. 90
    7. 88
    8. 1
    9. 002
    10. 李四
    11. 92
    12. 84
    13. 76
    14. 89
    15. 1
    16. 003
    17. 王五
    18. 79
    19. 86
    20. 77
    21. 83
    22. 1
    23. 004
    24. 赵六
    25. 88
    26. 89
    27. 85
    28. 91
    29. 1
    30. 005
    31. 刘七
    32. 75
    33. 71
    34. 79
    35. 77
    36. 1
    37. 006
    38. 陈八
    39. 82
    40. 87
    41. 81
    42. 86
    43. 1
    44. 007
    45. 周九
    46. 94
    47. 91
    48. 93
    49. 95
    50. 1
    51. 008
    52. 吴十
    53. 76
    54. 79
    55. 72
    56. 78
    57. 1
    58. 009
    59. 张十一
    60. 89
    61. 85
    62. 82
    63. 88
    64. 1
    65. 010
    66. 李十二
    67. 93
    68. 92
    69. 91
    70. 94
    71. 1
    72. 011
    73. 王十三
    74. 77
    75. 75
    76. 73
    77. 74
    78. 1
    79. 012
    80. 赵十四
    81. 84
    82. 83
    83. 80
    84. 82
    85. 1
    86. 013
    87. 刘十五
    88. 95
    89. 94
    90. 96
    91. 97
    92. 1
    93. 014
    94. 陈十六
    95. 73
    96. 72
    97. 71
    98. 70
    99. 1
    100. 015
    101. 周十七
    102. 86
    103. 88
    104. 84
    105. 85

            运行程序后直接复制可以一口气导入15条数据,非常方便,不用一条一条的输入,原理就是在每个数据的前方加一个1选择输入数据,输入完接着下一条数据,ctrl+v 粘贴键是不能使用的哦,需要鼠标右键粘贴。 由于加入代码块会复制其他信息导致程序运行错误,直接以文本方式贴出来。

    输入,打印输出功能测试:

            将全部代码复制到软件中,点击运行。

    之后会显示菜单如下图:

    点击该博文中的直接复制数据,我们来测试下输入和输出的功能是否正常。

    点击复制按钮。

    点开运行窗口的情况下,直接右键就一次性的输入15条学生信息。

    回车后,我们输入6就可以显示输入的记录了.

     上面这种出现重复的数据这种情况我们需要将文件删除掉,因为多次添加操作的缘故。文件地址在工程根目录。名称为file.txt

    删除这个文件重新执行添加信息即可。

    统计功能测试:

            我们输入"5",即可查询到统计的记录。

    本次查询我们选择查询平均分,所以我们输入"1".下面就会输入我们的统计结果了。

     

    其他功能测试:

           直接输入后面代表的序号就可以测试相关的功能了。

            

  • 相关阅读:
    【Java】和【C语言】实现一个有序数组的二分查找
    2024有哪些免费的苹果mac电脑系统清理软件?
    R语言ggplot2可视化:使用ggpubr包的ggline函数可视化分组折线图(点线图、line plot)、palette参数自定义不同分组折线图的颜色
    《回炉重造 Java 基础》——集合(容器)
    nginx 的使用命令
    为什么只会编程的程序员无法成为优秀的开发者?
    Mac - 安装Nginx
    uniapp collapse动态生成多个折叠面板手动展开收起(包括uni-ui版)
    Java8新特性
    Scala 高阶(七):集合内容汇总(上篇)
  • 原文地址:https://blog.csdn.net/Tom_Jerry__/article/details/133962961