当前位置:   article > 正文

《C语言编写 学生成绩管理系统》_编写一个c语言程序:学生成绩管理系统(录入、查询、删除、修改、插入成绩,排序,统计学生人数,退出)

编写一个c语言程序:学生成绩管理系统(录入、查询、删除、修改、插入成绩,排序,统计学生人数,退出)

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称: 学生成绩管理系统
* 作 者: 刘江波
* 完成日期: 2012 年 6 月 23 日
* 版 本 号: v.623

* 对任务及求解方法的描述部分
* 程序头部的注释结束
*/

  1. #include "stdio.h"
  2. #include"string"
  3. /*定义学生结构体*/
  4. struct Student
  5. {
  6. char ID[20];
  7. char Name[20];
  8. float Mark1;
  9. float Mark2;
  10. float Mark3;
  11. float Average;
  12. };
  13. /*声明学生数组及学生数量*/
  14. struct Student students[1000];
  15. int num=0;
  16. /*求平均值*/
  17. float Avg(struct Student stu)
  18. {
  19. return (stu.Mark1+stu.Mark2+stu.Mark3)/3;
  20. }
  21. /*通过学号返回数组下标*/
  22. int Student_SearchByIndex(char id[])
  23. {
  24. int i;
  25. for (i=0;i<num;i++)
  26. {
  27. if (strcmp(students[i].ID,id)==0)
  28. {
  29. return i;
  30. }
  31. }
  32. return -1;
  33. }
  34. /*通过姓名返回数组下标*/
  35. int Student_SearchByName(char name[])
  36. {
  37. int i;
  38. for (i=0;i<num;i++)
  39. {
  40. if (strcmp(students[i].Name,name)==0)
  41. {
  42. return i;
  43. }
  44. }
  45. return -1;
  46. }
  47. /*显示单条学生记录*/
  48. void Student_DisplaySingle(int index)
  49. {
  50. printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
  51. printf("-------------------------------------------------------------\n");
  52. printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,
  53. students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);
  54. }
  55. /*插入学生信息*/
  56. void Student_Insert()
  57. {
  58. while(1)
  59. {
  60. printf("请输入学号:");
  61. scanf("%s",&students[num].ID);
  62. getchar();
  63. printf("请输入姓名:");
  64. scanf("%s",&students[num].Name);
  65. getchar();
  66. printf("请输入成绩:");
  67. scanf("%f",&students[num].Mark1);
  68. getchar();
  69. printf("请输入成绩:");
  70. scanf("%f",&students[num].Mark2);
  71. getchar();
  72. printf("请输入成绩:");
  73. scanf("%f",&students[num].Mark3);
  74. getchar();
  75. students[num].Average=Avg(students[num]);
  76. num++;
  77. printf("是否继续?(y/n)");
  78. if (getchar()=='n')
  79. {
  80. break;
  81. }
  82. }
  83. }
  84. /*修改学生信息*/
  85. void Student_Modify()
  86. {
  87. //float mark1,mark2,mark3;
  88. while(1)
  89. {
  90. char id[20];
  91. int index;
  92. printf("请输入要修改的学生的学号:");
  93. scanf("%s",&id);
  94. getchar();
  95. index=Student_SearchByIndex(id);
  96. if (index==-1)
  97. {
  98. printf("学生不存在!\n");
  99. }
  100. else
  101. {
  102. printf("你要修改的学生信息为:\n");
  103. Student_DisplaySingle(index);
  104. printf("-- 请输入新值--\n");
  105. printf("请输入学号:");
  106. scanf("%s",&students[index].ID);
  107. getchar();
  108. printf("请输入姓名:");
  109. scanf("%s",&students[index].Name);
  110. getchar();
  111. printf("请输入成绩:");
  112. scanf("%f",&students[index].Mark1);
  113. getchar();
  114. printf("请输入成绩:");
  115. scanf("%f",&students[index].Mark2);
  116. getchar();
  117. printf("请输入成绩:");
  118. scanf("%f",&students[index].Mark3);
  119. getchar();
  120. students[index].Average=Avg(students[index]);
  121. }
  122. printf("是否继续?(y/n)");
  123. if (getchar()=='n')
  124. {
  125. break;
  126. }
  127. }
  128. }
  129. /*删除学生信息*/
  130. void Student_Delete()
  131. {
  132. int i;
  133. while(1)
  134. {
  135. char id[20];
  136. int index;
  137. printf("请输入要删除的学生的学号:");
  138. scanf("%s",&id);
  139. getchar();
  140. index=Student_SearchByIndex(id);
  141. if (index==-1)
  142. {
  143. printf("学生不存在!\n");
  144. }
  145. else
  146. {
  147. printf("你要删除的学生信息为:\n");
  148. Student_DisplaySingle(index);
  149. printf("是否真的要删除?(y/n)");
  150. if (getchar()=='y')
  151. {
  152. for (i=index;i<num-1;i++)
  153. {
  154. students[i]=students[i+1];//把后边的对象都向前移动
  155. }
  156. num--;
  157. }
  158. getchar();
  159. }
  160. printf("是否继续?(y/n)");
  161. if (getchar()=='n')
  162. {
  163. break;
  164. }
  165. }
  166. }
  167. /*按姓名查询*/
  168. void Student_Select()
  169. {
  170. while(1)
  171. {
  172. char name[20];
  173. int index;
  174. printf("请输入要查询的学生的姓名:");
  175. scanf("%s",&name);
  176. getchar();
  177. index=Student_SearchByName(name);
  178. if (index==-1)
  179. {
  180. printf("学生不存在!\n");
  181. }
  182. else
  183. {
  184. printf("你要查询的学生信息为:\n");
  185. Student_DisplaySingle(index);
  186. }
  187. printf("是否继续?(y/n)");
  188. if (getchar()=='n')
  189. {
  190. break;
  191. }
  192. }
  193. }
  194. /*按平均值排序*/
  195. void Student_SortByAverage()
  196. {
  197. int i,j;
  198. struct Student tmp;
  199. for (i=0;i<num;i++)
  200. {
  201. for (j=1;j<num-i;j++)
  202. {
  203. if (students[j-1].Average<students[j].Average)
  204. {
  205. tmp=students[j-1];
  206. students[j-1]=students[j];
  207. students[j]=tmp;
  208. }
  209. }
  210. }
  211. }
  212. /*显示学生信息*/
  213. void Student_Display()
  214. {
  215. int i;
  216. printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");
  217. printf("-------------------------------------------------------------\n");
  218. for (i=0;i<num;i++)
  219. {
  220. printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,
  221. students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);
  222. }
  223. }
  224. /*将学生信息从文件读出*/
  225. void IO_ReadInfo()
  226. {
  227. FILE *fp;
  228. int i;
  229. if ((fp=fopen("Database.txt","rb"))==NULL)
  230. {
  231. printf("不能打开文件!\n");
  232. return;
  233. }
  234. if (fread(&num,sizeof(int),1,fp)!=1)
  235. {
  236. num=-1;
  237. }
  238. else
  239. {
  240. for(i=0;i<num;i++)
  241. {
  242. fread(&students[i],sizeof(struct Student),1,fp);
  243. }
  244. }
  245. fclose(fp);
  246. }
  247. /*将学生信息写入文件*/
  248. void IO_WriteInfo()
  249. {
  250. FILE *fp;
  251. int i;
  252. if ((fp=fopen("Database.txt","wb"))==NULL)
  253. {
  254. printf("不能打开文件!\n");
  255. return;
  256. }
  257. if (fwrite(&num,sizeof(int),1,fp)!=1)
  258. {
  259. printf("写入文件错误!\n");
  260. }
  261. for (i=0;i<num;i++)
  262. {
  263. if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)
  264. {
  265. printf("写入文件错误!\n");
  266. }
  267. }
  268. fclose(fp);
  269. }
  270. /*主程序*/
  271. void main()
  272. {
  273. int choice;
  274. IO_ReadInfo();
  275. while(1)
  276. {
  277. /*主菜单*/
  278. printf("\n------ 学生成绩管理系统------\n");
  279. printf("1. 增加学生记录\n");
  280. printf("2. 修改学生记录\n");
  281. printf("3. 删除学生记录\n");
  282. printf("4. 按姓名查询学生记录\n");
  283. printf("5. 按平均成绩排序\n");
  284. printf("6. 退出\n");
  285. printf("请选择(1-6):");
  286. scanf("%d",&choice);
  287. getchar();
  288. switch(choice)
  289. {
  290. case 1:
  291. Student_Insert();
  292. break;
  293. case 2:
  294. Student_Modify();
  295. break;
  296. case 3:
  297. Student_Delete();
  298. break;
  299. case 4:
  300. Student_Select();
  301. break;
  302. case 5:
  303. Student_SortByAverage();
  304. Student_Display();
  305. break;
  306. case 6:
  307. exit(0);
  308. break;
  309. }
  310. IO_WriteInfo();
  311. }
  312. }


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

闽ICP备14008679号