• C语言学生成绩信息管理系统【结构体+文本】


    功能描述:

    1、录入成绩

    2、显示不及格学生信息

    3、统计每档学生数量

    4、总成绩统计

    代码:

    1. #include
    2. #define N 30
    3. //结构体:
    4. typedef struct STUDENT
    5. {
    6. char  id[10];//学号
    7. char  name[20];//姓名
    8. float score[3];//三门成绩,分别代表:数学 英语 计算机
    9. float sum;//用于计算总分
    10. } Stu;
    11. Stu stu[N];//创建一个30个数量的结构体
    12. //打印学生信息函数
    13. void printStuInfo(Stu st)//打印学生信息数据
    14. {
    15. printf("学号:%s\t姓名:%s\t数学:%3.2f\t英语:%3.2f\t计算机:%3.2f\t总分:%3.2f\n",
    16.        //学号  //姓名  //数学成绩
    17.        st.id, st.name, st.score[0],
    18.        //英语成绩  //计算机成绩  //总分
    19.        st.score[1], st.score[2], st.sum);
    20. }
    21. //读取文本信息函数
    22. void readStuList()
    23. {
    24. int i = 0;
    25. int k;
    26. float sum;
    27. FILE *fp = fopen("score.txt", "r");//以读的方式打开文件
    28. if(fp == NULL)
    29. {
    30. return; /*若打不开则返回*/
    31. }
    32. while(!feof(fp))//逐条读取文件信息
    33. {
    34. fscanf(fp, "%s\t%s\t%f\t%f\t%f\n",
    35.         //学号  //姓名  //数学成绩
    36.         &stu[i].id, &stu[i].name, &stu[i].score[0],
    37.         //英语成绩  //计算机成绩
    38.         &stu[i].score[1], &stu[i].score[2]);
    39.     //计算总分
    40.     sum = 0;
    41. for(k=0; k<3; k++){
    42. sum += stu[i].score[k];
    43. }
    44. //存入总分
    45. stu[i].sum = sum;
    46. i++;
    47. }
    48. fclose(fp);//关闭文件
    49. }
    50. //写入数据到文件的函数
    51. void writeStuInfo(Stu st) //存入一条学生信息
    52. {
    53. FILE *fp = fopen("score.txt", "a+");//添加一条信息到score.txt末尾
    54. if(fp == NULL)
    55. {
    56. printf("打不开文件Cannot open the file\n");
    57. return; /*若打不开则返回*/
    58. }
    59. //存入信息
    60. fprintf(fp, "%s\t%s\t%3.2f\t%3.2f\t%3.2f\n",
    61.         //学号  //姓名  //数学成绩
    62.         st.id, st.name, st.score[0],
    63.         //英语成绩  //计算机成绩
    64.         st.score[1], st.score[2]);
    65. fclose(fp);//关闭文件
    66. }
    67. //菜单函数
    68. void menu() //菜单
    69. {
    70. printf("\n\t\t--------------1、录入成绩--------------\n");
    71. printf("\t\t--------------2、显示不及格学生信息--------------\n");
    72. printf("\t\t--------------3、统计每档学生数量--------------\n");
    73. printf("\t\t--------------4、总成绩统计--------------\n");
    74. printf("\t\t--------------0、退出程序--------------\n");
    75. }
    76. //统计每科的五档水平的人数的函数
    77. void showLevel(char* score[3])
    78. {
    79. int i, k;
    80. int level[3][5] = {0};//每科5档水平
    81. for(k=0; k<3; k++)
    82. {
    83. printf("%s学科每档人数如下:\n", score[k]);
    84. for(i=0; i
    85. {
    86. switch((int)(stu[i].score[k]) / 10){//除以10取整
    87. case 9://>=90
    88. level[k][0]++;
    89. break;
    90. case 8://80-89
    91. level[k][1]++;
    92. break;
    93. case 7://70-79
    94. level[k][2]++;
    95. break;
    96. case 6://60-69
    97. level[k][3]++;
    98. break;
    99. default://<60
    100. level[k][4]++;
    101. break;
    102. }
    103. }
    104. printf("A档学生人数有【%d】人\n", level[k][0]);
    105. printf("B档学生人数有【%d】人\n", level[k][1]);
    106. printf("C档学生人数有【%d】人\n", level[k][2]);
    107. printf("D档学生人数有【%d】人\n", level[k][3]);
    108. printf("E档学生人数有【%d】人\n\n", level[k][4]);
    109. }
    110. }
    111. //主函数
    112. int main()
    113. {
    114. int i, j, k, l;
    115. Stu tempStu;
    116. // int sort[N];
    117. float sumAvg;//总成绩平均分
    118. char* score[3] = {"数学", "英语", "计算机"};
    119. while(1)
    120. {
    121. menu();//菜单
    122. readStuList();//读取学生信息
    123. printf("请输入你的选择:");
    124. scanf("%d", &l);
    125. if(l == 0)
    126. {
    127. printf("谢谢使用!程序已退出!\n");
    128. return 0;//退出程序
    129. }
    130. else if(l == 1)
    131. {
    132. for(i=0; i
    133. {
    134. printf("输入第[%d]个学生信息:\n",i+1);
    135. printf("学号:");
    136. scanf("%s",stu[i].id);
    137. printf("姓名:");
    138. scanf("%s",stu[i].name);
    139. for(k=0; k<3; k++)
    140. {
    141. printf("%s成绩:", score[k]);
    142. scanf("%f",&stu[i].score[k]);
    143. }
    144. writeStuInfo(stu[i]);//保存输入的信息到score.txt文本中
    145. //        printf("数学成绩:");
    146. //        scanf("%f", &stu[i].score[0]);
    147. //        printf("英语成绩:");
    148. //        scanf("%f", &stu[i].score[0]);
    149. //        printf("计算机成绩:");
    150. //        scanf("%f", &stu[i].score[0]);
    151. //        stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
    152. // sort[i] = i;
    153. }
    154. }
    155. else if(l == 2)
    156. {
    157. /* 2. 统计各课及格和不及格的人数,输出对应学生的数据信息。 */
    158. for(k=0; k<3; k++)
    159. {
    160. printf("%s不及格学生如下:\n", score[k]);
    161. j = 0;
    162. for(i=0; i
    163. {
    164. if(stu[i].score[k] < 60)
    165. {
    166. //学号 姓名 对应单科成绩
    167. printf("%s\t%s\t%3.2f\n",
    168.        stu[i].id, stu[i].name, stu[i].score[k]);
    169. j++;//计算不及格人数
    170. }
    171. }
    172. printf("%s不及格学生人数有【%d】个。\n\n", score[k], j);
    173. }
    174. }
    175. else if(l == 3)
    176. {
    177. showLevel(score);//显示每档学生人数
    178. }
    179. else if(l == 4)
    180. {
    181. //总成绩统计
    182. /* 1.按总分排序 */
    183. //冒泡排序
    184. for(i=0; i-1; i++)
    185. {
    186. for(j=0; j-1; j++)
    187. {
    188. if (stu[j].sum < stu[j+1].sum)//如果前一个比后一个分数小,就交换
    189. {
    190. tempStu = stu[j];//tempStu为交换媒介
    191. stu[j] = stu[j+1];
    192. stu[j+1] = tempStu;
    193. }
    194. }
    195. }
    196. printf("按总分排名的学生信息如下:\n");
    197. for(i=0; i
    198. {
    199. sumAvg += stu[i].sum;//逐个累加总成绩
    200. printStuInfo(stu[i]);//逐个输出学生信息
    201. }
    202. printf("总成绩平均分为【%3.2f】\n", sumAvg / N);//累加的总成绩除以人数
    203. printf("总成绩最高分为【%3.2f】\n", stu[0].sum);//第一位即为最高分
    204. printf("总成绩最低分为【%3.2f】\n", stu[N-1].sum);//最后一位即为最低分
    205. }
    206. else
    207. {
    208. printf("输入有误!请重新输入!\n");
    209. }
    210. }
    211. return 0;
    212. }

    结果截图:

    1. 菜单截图:

           

    2、选择1录入学生信息截图:

    3、选择2显示不及格学生信息截图:

    4、选择3统计每档学生数量截图:

    5、选择4总成绩统计截图:

    6、选择0退出。

    7、选择其他数字提示错误的截图:

    • Score.txt文件内容【自己创建在代码同级目录下,内容也可以自己编写,格式是一行一条记录,每条记录里每个字段之间是一个tab键(也就是\t)】。

    文档排版我是直接复制粘贴的,所以有点问题,可以自行调整,或者下载我开头挂载的文档也行。

  • 相关阅读:
    第6章 java内部类
    Stable Diffusion 模型分享:Henmix_Real(人像、真实、写真、亚洲面孔)
    简单宠物网页设计作业 静态HTML动物介绍网页作业 DW宠物网站模板下载 大学生简单野生动物网页作品代码
    Vite2.0+Vue3.0+Element-Plus+TypeScript 项目配置及初始化
    Mybatis 中 ResultHandler 的用法(获取大结果集,实现结果流式输出)
    VMware创建Linux虚拟机之(四)ZooKeeper&HBase完全分布式安装
    【操作系统笔记】任务调度&信号处理&CPU上下文
    【运维知识高级篇】超详细的Jenkins教程4(参数化构建+脚本传参+代码秒级发布+秒级回滚)
    电脑技巧:盘点10个非常实用且有趣的网站
    2022杭电多校第七场题解
  • 原文地址:https://blog.csdn.net/qq_63462564/article/details/136325039