学生信息管理系统

来源:互联网 发布:禁止安装任何软件方法 编辑:程序博客网 时间:2024/06/05 02:07
/********************
保存功能使用了文件
*********************/
学生信息管理系统,要求完成以下基本任务:
1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。
2.将功能补充完全(基于文件处理,完成刷新和保存功能)。
3.将学生信息改为更好的数据组织,而非离散形式(结构体)。

  1. #include<stdio.h>//I/O函数
  2. #include<stdlib.h>//其它说明
  3. #include<string.h>//字符串函数
  4. #define LEN 8// 学号和姓名最大字符数,实际请更改
  5. #define N 20// 最大学生人数,实际请更改
  6. int k=1,n=0, m=0;    // n代表当前记录的学生人数
  7. void help();
  8. void freshen();        //刷新(录入)学生信息 
  9. void seek();
  10. void modify();
  11. void insert();
  12. void sort();
  13. void del();
  14. void display();
  15. void save();
  16. void menu();


  17. //定义结构体
  18. struct Student{      
  19. char code[N];// 学号
  20. char name[N];// 姓名
  21. int age;// 年龄
  22. char sex[3];// 性别
  23. int score[3];
  24.     }stu[N];


  25. int main()
  26. while(k)
  27. {
  28. menu();
  29. }
  30. system("pause");
  31. return 0;


  32. void menu()    //开始界面
  33. {
  34. int num;
  35. printf(" \n\n                    \n\n");
  36. printf("  ****************************************************\n\n");
  37. printf("                   学生信息管理系统                    \n");
  38. printf("                                                      \n\n"); 
  39. printf("  *******************系统功能菜单********************* \n\n");
  40. printf("     --------------------   ----------------------   \n\n");
  41. printf("     ********************************************    \n\n");
  42. printf("     * 0.系统帮助及说明  * *  1.刷新学生信息    *    \n\n");
  43. printf("     * 2.查询学生信息    * *  3.修改学生信息    *    \n\n");
  44. printf("     * 4.增加学生信息    * *  5.按学号删除信息  *    \n\n");
  45. printf("     * 6.显示当前信息    * *  7.保存当前学生信息*    \n\n");
  46. printf("     * 8.退出系统        * *                    *    \n\n");
  47. printf("     ********************************************    \n\n");
  48. printf("     --------------------   ----------------------   \n\n");
  49. printf("请选择菜单编号:");
  50. scanf("%d",&num);
  51. switch(num)
  52. { 
  53. case 0:help();break;
  54. case 1:freshen();break;
  55. case 2:seek();break;
  56. case 3:modify();break;
  57. case 4:insert();break;
  58. case 5:del();break;
  59.   case 6:display();break;
  60. case 7:save();break;
  61. case 8:k=0;break;
  62. default:printf("请在0-8之间选择\n");
  63. }
  64. }


  65. void help()
  66. {  
  67. printf("\n0.欢迎使用系统帮助!\n");
  68. printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
  69. printf("\n2.按照菜单提示键入数字代号;\n");
  70. printf("\n3.增加学生信息后,切记保存;\n");
  71. printf("\n4.谢谢您的使用!\n");




  72. void freshen()
  73. {                     //刷新及录入
  74. int i=0;
  75. printf("请输入需录入信息的学生的数量:\n");
  76. scanf("%d",&n);
  77. do{
  78. printf("请输入第%d 个学生的学号:\n",i+1);
  79. scanf("%s",&stu[i].code);
  80. printf("请输入第%d 个学生的姓名:\n",i+1);
  81. scanf("%s",&stu[i].name);
  82. printf("请输入第%d 个学生的年龄:\n",i+1);
  83. scanf("%d",&stu[i].age);
  84. printf("请输入第%d 个学生的性别:\n",i+1);
  85. scanf("%s",&stu[i].sex);
  86. printf("请输入第%d 个学生的C语言成绩\n",i+1);
  87. scanf("%d",&stu[i].score[0]);
  88. printf("请输入第%d 个学生的高等数学成绩:\n",i+1);
  89. scanf("%d",&stu[i].score[1]);
  90. printf("请输入第%d 个学生的大学英语成绩:\n",i+1);
  91. scanf("%d",&stu[i].score[2]);
  92. i++;
  93. }while(i<n);
  94. }




  95. void seek()      //查找
  96. {
  97. int i,item,flag;
  98. char s1[21]; // 以姓名和学号最长长度+1为准
  99. printf("----------------------\n");
  100. printf("-----1.按学号查询-----\n");
  101. printf("-----2.按姓名查询-----\n");
  102. printf("-----3.退出本菜单-----\n");
  103. printf("----------------------\n");
  104. while(1)
  105. {
  106. printf("请选择子菜单编号:");
  107. scanf("%d",&item);
  108. flag=0;
  109. switch(item)
  110. {
  111. case 1:
  112. printf("请输入要查询的学生的学号:\n");
  113. scanf("%s",s1);
  114. for(i=0;i<n;i++)
  115. if(strcmp(stu[i].code,s1)==0)
  116. {
  117. flag=1;
  118. printf("学生学号    学生姓名  年龄   性别  C语言成绩  高等数学  大学英语成绩\n");
  119. printf("--------------------------------------------------------------------\n");
  120. printf("%6s %7s %6d %6s %9.1d %10.1d %10.1d\n",stu[i].code,stu[i].name,
  121. stu[i].age,stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  122. }
  123. if(0==flag)
  124. printf("该学号不存在!\n"); break;
  125. case 2:
  126. printf("请输入要查询的学生的姓名:\n");
  127. scanf("%s",s1);
  128. for(i=0;i<n;i++)
  129. if(strcmp(stu[i].name,s1)==0)
  130. {
  131. flag=1;
  132. printf("学生学号    学生姓名  年龄   性别  C语言成绩  高等数学  大学英语成绩\n");
  133. printf("--------------------------------------------------------------------\n");
  134. printf("%6s %7s %6d %6s %9.1d %10.1d %10.1d\n",stu[i].code,stu[i].name,
  135. stu[i].age,stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  136. }
  137. if(0==flag)
  138. printf("该姓名不存在!\n"); break;
  139. case 3:return;
  140. default:printf("请在1-3之间选择\n");
  141.      }
  142.    }




  143. void modify() //修改信息
  144. {
  145. int i,item,num;
  146. char s1[LEN+1],s2[LEN+1]; // 以姓名和学号最长长度+1为准
  147. printf("请输入要要修改的学生的学号:\n");
  148. scanf("%s",s1);
  149. for(i=0;i<n;i++)
  150. if(strcmp(stu[i].code,s1)==0) //比较字符串是否相等
  151. num=i;
  152. printf("------------------\n");
  153. printf("1.修改姓名\n");
  154. printf("2.修改年龄\n");
  155. printf("3.修改性别\n");
  156. printf("4.修改C语言成绩\n");
  157. printf("5.修改高等数学成绩\n");
  158. printf("6.修改大学英语成绩\n");
  159. printf("7.退出本菜单\n");
  160. printf("------------------\n");
  161. while(1)
  162. {
  163. printf("请选择子菜单编号:");
  164. scanf("%d",&item);
  165. switch(item)
  166. {
  167. case 1:
  168. printf("请输入新的姓名:\n");
  169. scanf("%s",s2);
  170. strcpy(stu[num].name,s2); break;
  171. case 2:
  172. printf("请输入新的年龄:\n");
  173. scanf("%d",&stu[num].age);break;
  174. case 3:
  175. printf("请输入新的性别:\n");
  176. scanf("%s",&stu[num].sex);
  177.     break;
  178. case 4:
  179. printf("请输入新的C语言成绩:\n");
  180. scanf("%d",&stu[num].score[0]);
  181. break;
  182. case 5:
  183. printf("请输入新的高等数学成绩:\n");
  184. scanf("%d",&stu[num].score[1]);
  185. break;
  186. case 6:
  187. printf("请输入新的大学英语成绩:\n");
  188. scanf("%d",&stu[num].score[2]);
  189. break;
  190. case 7:return;
  191. default:printf("请在1-7之间选择\n");
  192. }
  193. }




  194. void sort()    //按学号排序
  195. {
  196. int i,j,k,*p,*q,s;
  197. char temp[LEN+1],ctemp[3];
  198. int ftemp;
  199. for(i=0;i<n-1;i++)
  200. {
  201. for(j=n-1;j>i;j--)
  202. if(strcmp(stu[j-1].code,stu[j].code)>0)
  203. {
  204. strcpy(temp,stu[j-1].code);
  205. strcpy(stu[j-1].code,stu[j].code);
  206. strcpy(stu[j].code,temp);
  207. strcpy(temp,stu[j-1].name);
  208. strcpy(stu[j-1].name,stu[j].name);
  209. strcpy(stu[j].name,temp);
  210. strcpy(ctemp,stu[j-1].sex);
  211. strcpy(stu[j-1].sex,stu[j].sex);
  212. strcpy(stu[j].sex,ctemp);
  213. p=&stu[j-1].age;
  214. q=&stu[j].age;
  215. s=*q;
  216. *q=*p;
  217. *p=s;
  218. for(k=0;k<3;k++)
  219. {
  220. ftemp=stu[j-1].score[k];
  221. stu[j-1].score[k]=stu[j].score[k];
  222. stu[j].score[k]=ftemp;
  223. }
  224. }
  225.     }


  226. void insert()  //插入函数
  227. {
  228. int j=n;
  229. printf("请输入待增加的学生数:\n");
  230. scanf("%d",&m);
  231. do
  232. {
  233.  printf("请输入第%d 个学生的学号:\n",j-n+1);
  234. scanf("%s",&stu[j].code);
  235. printf("请输入第%d 个学生的姓名:\n",j-n+1);
  236. scanf("%s",&stu[j].name);
  237. printf("请输入第%d 个学生的年龄:\n",j-n+1);
  238. scanf("%d",&stu[j].age);
  239. printf("请输入第%d 个学生的性别:\n",j-n+1);
  240. scanf(" %s",&stu[j].sex);
  241. printf("请输入第%d 个学生的C语言成绩\n",j-n+1);
  242. scanf("%d",&stu[j].score[0]);
  243. printf("请输入第%d 个学生的高等数学成绩:\n",j-n+1);
  244. scanf("%d",&stu[j].score[1]);
  245. printf("请输入第%d 个学生的大学英语成绩:\n",j-n+1);
  246. scanf("%d",&stu[j].score[2]);

  247. j++;
  248. }while(j<n+m);
  249. n+=m;
  250. printf("信息增加完毕!\n\n");
  251. sort();


  252. void del()    //删除功能
  253. {
  254. int i,j,flag=0;
  255. char s1[LEN+1];
  256. printf("请输入要删除学生的学号:\n");
  257. scanf("%s",s1);
  258. for(i=0;i<n;i++)
  259. if(strcmp(stu[i].code,s1)==0)
  260. {
  261. flag=1;
  262. for(j=i;j<n-1;j++)
  263. strcpy(stu[j].code,stu[j+1].code);
  264.        strcpy(stu[j].name,stu[j+1].name);
  265.        stu[j].age=stu[j+1].age;
  266.         strcpy(stu[j].sex,stu[j+1].sex);
  267.     stu[j].score[0]=stu[j+1].score[0];
  268.                 stu[j].score[1]=stu[j+1].score[1];
  269. stu[j].score[2]=stu[j+1].score[2];

  270. }
  271. if(flag==0)
  272. printf("该学号不存在!\n");
  273. if(flag==1)
  274. {
  275. printf("删除成功,显示结果请选择菜单\n");
  276. n--;
  277. }




  278. void display()  //展示功能
  279. {
  280. int i;
  281. printf("共有%d位学生的信息:\n",n);
  282. if(0!=n)
  283. {
  284. printf("学生学号  学生姓名 年龄  性别  C语言成绩  高等数学  大学英语成绩\n");
  285. printf("-----------------------------------------------------------------\n");
  286. for(i=0;i<n;i++)
  287. printf("%7s %7s %6d %6s %9.1d %10.1d %10.1d\n",stu[i].code,stu[i].name,stu[i].age,
  288. stu[i].sex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);
  289. }
  290. }




  291. void save(){     
  292. FILE *fp;
  293. int i=0,j=0;        //定义一个指向文件型数据的指针变量
  294. char * h[7]={"学号","姓名","年龄","性别","C语言","高数","大英"}; //文件中的标题栏
  295. if((fp=fopen("C:\\Users\\HDD\\Desktop\\save.txt","w"))==NULL)
  296. {
  297. printf("该文件为空!");
  298. exit(0);
  299. }
  300. for(j;j<7;j++){     //在文件中显示标题栏
  301. fputs(h[j],fp);fputs("  ",fp);
  302. }
  303. fputs("\n",fp);
  304. for(i;i<n;i++){     //在文件中显示学生的信息
  305. fputs(stu[i].code,fp);fputs("     ",fp);
  306. fputs(stu[i].name,fp);fputs("     ",fp);
  307. fprintf(fp,"%2d",stu[i].age);fputs("    ",fp);
  308. fputs(stu[i].sex,fp);fputs("     ",fp);
  309. fprintf(fp,"%2d",stu[i].score[0]);fputs("     ",fp);
  310. fprintf(fp,"%2d",stu[i].score[1]);fputs("     ",fp);
  311. fprintf(fp,"%2d",stu[i].score[2]);fputs("\n",fp);
  312. }
  313. printf("写入成功!");
  314. fclose(fp);      //关闭文件
  315. }
0 0