找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2973|回复: 2
打印 上一主题 下一主题
收起左侧

C语言学生成绩管理系源代码

[复制链接]
跳转到指定楼层
楼主

学生成绩管理系统,可以输入学生成绩,并且可以查看统计平均分总分等,并可以实现成绩的实时存储。代码有注释哦~

C语言源程序如下:
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<conio.h>
  4. #include<stdlib.h>
  5. #define N 10/*定义学生人数*/
  6. #define M 4 /*定义学科人数*/
  7. typedef struct student/*定义结构体数组*/
  8. {
  9.         int number; /*学号*/
  10.         char name[10];/*姓名*/
  11.         char zhuanye[10];/*专业*/
  12.         int cla;/*班级*/
  13.         float score[M];/*分数*/
  14.         float sum;/*总分*/
  15.         float average;/*平均分*/
  16. }STU;
  17. STU stu[N];
  18. void menu(void);
  19. void input(void);
  20. void savescore(void);
  21. void loadf(void);
  22. void inoutput(void);
  23. void sumaverage(STU stu[N]);
  24. void paixu(STU stu[N]);
  25. void tongji1(STU stu[N]);
  26. void tongji2(STU stu[N]);
  27. void shuchuone(int i);
  28. void output2(STU stu[N]);
  29. void xiugai(int n);
  30. void xianshi(STU stu[N]);
  31. void chazhao(STU stu[N]);
  32. void chazhao1(int n);
  33. void main()
  34. {
  35.         char choice;
  36.         system("color F0");
  37.         do
  38.         {        menu();               
  39.                 printf("\n\tPress a key for your choice: ");
  40.                 switch(choice=getchar())                                                       
  41.                 {        case '1':        inoutput();break;/*输入学生成绩并保存加载显示*/
  42.                     case '2':   chazhao(stu);break;/*查找学生信息及各个统计结果*/
  43.                         case '3':        xiugai(N);break;/*修改学生信息*/       
  44.                         case '4':   xianshi(stu);break;/*显示统计结果*/
  45.                         case '5':        goto QUIT;/*安全退出*/
  46.                         case '\n':        break;                                                       
  47.                         default:        printf("\t输入错误,请重新输入!");/*输入错误时的处理*/
  48.                                        
  49.                 }
  50.                 getch();                                                       
  51.    }while(1);  
  52. QUIT:       
  53.         printf("\n\t谢谢使用,再见!\n\n\t");       
  54.         getch();
  55.         exit(0);
  56. }
  57. void menu(void)/*定义菜单函数*/
  58. {
  59.         system("cls");/*清屏*/
  60.         printf("\n\n\t*********欢迎使用学生信息管理系统************\n");
  61.         printf("\n\t     1、添加学生信息并显示:\n");
  62.         printf("\t     2、查找学生信息:\n");
  63.         printf("\t     3、修改学生信息:\n");
  64.         printf("\t     4、显示所有学生信息及统计结果:\n");
  65.         printf("\t     5、退出。\n");
  66.         printf("\n\n\t*********************************************");
  67. }
  68. void input(void)/*定义输入函数*/
  69. {
  70.         int i,j;
  71.         system("CLS");
  72.         printf("输入学生各科成绩:\n");
  73.         puts("学号\t姓名\t专业\t班级\t英语\t高数\t物理\t体育");
  74.         for(i=0;i<N;i++)
  75.         {
  76.                 printf("输入%d的学生信息:\n",i+1);
  77.                 scanf("%d%s%s%d",&stu[i].number,stu[i].name,stu[i].zhuanye,&stu[i].cla);
  78.                 printf("输入%d的学生各科成绩:\n",i+1);
  79.                 for(j=0;j<M;j++)
  80.                         scanf("%f",&stu[i].score[j]);
  81.         }
  82.         printf("\n已输入%d个学生数据.\n",N);
  83. }
  84. void savescore(void)/*定义保存成绩到文件函数*/
  85. {
  86.         FILE * fp;
  87.         int i,flag=1;
  88.         char m;
  89.         puts("是否现在保存成绩(Y/N)");
  90.         scanf("%s",&m);
  91.         if(m=='Y')
  92.         {
  93.                 if((fp=fopen("c:\\student.dat","wb"))==NULL)
  94.                 {
  95.                         printf("无法打开文件\n");
  96.                         return;
  97.                 }
  98.                 for(i=0;i<N;i++)
  99.                 {
  100.                         if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
  101.                         {
  102.                                 printf("文件写入错误\n");
  103.                                 flag=0;
  104.                         }
  105.                 }
  106.                 if(flag==1)
  107.                         puts("文件成功保存!");
  108.                 fclose(fp);/*及时关闭文件*/
  109.         }
  110.         else
  111.                 return;
  112. }
  113. void loadf(void)/*定义加载文件函数*/
  114. {
  115.         FILE *fp;
  116.         int i,flag=1;
  117.         char m;
  118.         puts("是否现在打开文件!(Y/N)");
  119.         scanf("%s",&m);
  120.         if(m=='Y')
  121.         {
  122.                 if((fp=fopen("c:\\student.dat","rb"))==NULL)
  123.                 {
  124.                         printf("无法打开文件\n");
  125.                         flag=0;
  126.                         return;
  127.                 }
  128.                 for(i=0;!feof(fp);i++)
  129.                         fread(&stu[i],sizeof(STU),1,fp);
  130.                 if(flag==1)
  131.                         puts("文件加载成功!");
  132.                 fclose(fp);
  133.         }
  134.         else
  135.                 return;
  136. }
  137. void sumaverage(STU stu[N])/*定义求和与求平均值函数*/
  138. {
  139.         FILE *fp;
  140.         int i,j;
  141.         if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
  142.         {
  143.                 printf("error!");
  144.                 exit(0);
  145.         }
  146.         for(i=0;!feof(fp);i++)
  147.                 fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
  148.         fclose(fp);
  149.         for(i=0;i<N;i++)
  150.         {
  151.                 stu[i].sum=0.0;
  152.                 for(j=0;j<M;j++)
  153.                         stu[i].sum+=stu[i].score[j];
  154.                 stu[i].average=stu[i].sum/M;
  155.         }
  156. }
  157. void paixu(STU stu[N])/*定义排序函数*/
  158. {
  159.         int i,j,k;
  160.         STU temp;
  161.         for(i=0;i<N-1;i++)
  162.         {
  163.                 k=i;
  164.                 for(j=i+1;j<N;j++)
  165.                 if(stu[i].sum<stu[j].sum)
  166.                         k=j;
  167.                 if(i!=k)
  168.                 {
  169.                         temp=stu[i];
  170.                         stu[i]=stu[k];
  171.                         stu[k]=temp;
  172.                 }
  173.         }
  174. }
  175. void tongji1(STU stu[N])/*定义统计成绩率函数*/
  176. {
  177.         int m,i;
  178.         float a=0.0,b=0.0,c=0.0;
  179.         FILE *fp;
  180.         if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
  181.         {
  182.                 printf("error!");
  183.                 exit(0);
  184.         }
  185.         for(i=0;!feof(fp);i++)
  186.                 fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
  187.         fclose(fp);
  188.         printf("********************选择统计学科**********************\n"); /*选择功能菜单*/
  189.         printf("统计英语成绩不及格率、通过率及优秀率请按:1\n");
  190.         printf("统计高数成绩不及格率、通过率及优秀率请按:2\n");           
  191.         printf("统计物理成绩不及格率、通过率及优秀率请按:3\n");
  192.         printf("统计体育成绩不及格率、通过率及优秀率请按:4\n");
  193.         printf("******************************************************\n");
  194.         scanf("%d",&m);                     
  195.         for(i=0;i<N;i++)
  196.         {
  197.                 if(stu[i].score[m-1]<60)
  198.                         a++;
  199.                 else
  200.                         b++;
  201.                 if(stu[i].score[m-1]>=90)
  202.                         c++;
  203.         }
  204.                 printf("不及格率为%.1f,通过率为%.1f,优秀率为%.1f\n",a/N,b/N,c/N);
  205.                 printf(" ******************************************************");
  206. }
  207. void tongji2(STU stu[N])/*定义查找最高分函数*/
  208. {
  209.         int i,m,k=0;
  210.         FILE *fp;
  211.         if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
  212.         {
  213.                 printf("error!");
  214.                 exit(0);
  215.         }
  216.         for(i=0;!feof(fp);i++)
  217.                 fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
  218.         fclose(fp);
  219.         printf("********************输入查找选项**********************\n");
  220.         printf("1、查找英语成绩最高学生请按:1\n");
  221.         printf("2、查找高数成绩最高学生请按:2\n");           
  222.         printf("3、查找物理成绩最高学生请按:3\n");
  223.         printf("4、查找体育成绩最高学生请按:4\n");
  224.         printf("*****************************************************\n");
  225.         scanf("%d",&m);                        
  226.         for(i=0;i<N;i++)               
  227.         {
  228.                 if(stu[i].score[m-1]>stu[k].score[m-1])
  229.                         k=i;
  230.         }
  231.         sumaverage(stu);
  232.         printf("最高分学生信息如下:\n");
  233.         shuchuone(k);
  234.         printf(" 输出结束\n");
  235.         printf(" **********************************************************");
  236. }
  237. void shuchuone(int i)/*定义输出一个学生函数*/
  238. {
  239.         printf("学号:%d  姓名:%s  专业:%s  班级:%d\n",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
  240.         printf("英语:%.1f  高数:%.1f  物理:%.1f  体育:%.1f  总分:%.1f  平均分:%.1f\n",stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);
  241. }
  242. void inoutput(void)/*定义输入成绩与保存加载显示函数*/
  243. {
  244.         int i,j;
  245.         input();/*调用输入成绩函数*/
  246.         savescore();/*调用保存函数*/
  247.         loadf();/*定定义加载函数*/
  248.         puts("学号\t姓名\t专业\t班级\t英语\t高数\t物理\t体育");
  249.         for(i=0;i<N;i++)
  250.         {
  251.                 printf("%d\t%s\t%s\t%d\t",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
  252.                 for(j=0;j<M;j++)
  253.                         printf("%.1f\t",stu[i].score[j]);
  254.                 printf("\n");
  255.         }
  256. }
  257. void output2(STU stu[N])/*定义输出成绩函数*/
  258. {
  259.         int i,j;
  260.         FILE *fp;
  261.         if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
  262.         {
  263.                 printf("error!");
  264.                 exit(0);
  265.         }
  266.         for(i=0;!feof(fp);i++)
  267.                 fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
  268.         fclose(fp);
  269.         puts("学号\t姓名\t专业\t班级\t英语\t高数\t物理\t体育\t总分\t平均分");
  270.         for(i=0;i<N;i++)
  271.         {
  272.                 printf("%d\t%s\t%s\t%d\t",stu[i].number,stu[i].name,stu[i].zhuanye,stu[i].cla);
  273.                 for(j=0;j<M;j++)
  274.                 {
  275.                         printf("%.1f\t",stu[i].score[j]);
  276.                 }
  277.                 sumaverage(stu);
  278.                 printf("%.1f\t",stu[i].sum);
  279.                 printf("%.1f\t",stu[i].average);
  280.         }
  281. }
  282. void xiugai(int n)/*定义修改信息函数*/
  283. {
  284.         STU some;
  285.         int k=-1,m,i;
  286.         FILE *fp;
  287.         if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
  288.         {
  289.                 printf("error!");
  290.                 exit(0);
  291.         }
  292.         for(i=0;!feof(fp);i++)
  293.                 fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
  294.         fclose(fp);
  295.         printf("\n请输入要修改的同学的学号:");
  296.         scanf("%d",&m);
  297.         for(i=0;i<n;i++)
  298.         {
  299.                 if(m==stu[i].number)
  300.                 {
  301.                         k=i;
  302.                         break;
  303.                 }
  304.         }
  305.         if(k<0)
  306.                 printf("\n输入学号有误,请重新输入!");
  307.         else
  308.         {
  309.                 printf("请输入要修改学生修改后的的信息\n");
  310.                 printf("学号\t专业\t班级\t英语\t高数\t物理\t体育\n");
  311.                 scanf("%d\t%s\t%d\t%f\t%f\t%f\t%f",&some.number,some.zhuanye,&some.cla,&some.score[0],&some.score[1],&some.score[2],&some.score[3]);
  312.                 strcpy(some.name,stu[i].name);
  313.                 some.sum=(some.score[0]+some.score[1]+some.score[2]+some.score[3]);   
  314.                 some.average=some.sum/M;
  315.                 stu[k]=some;
  316.                 shuchuone(k);
  317.                 printf("\n修改成功!恭喜!\n");
  318.         }


  319. }
  320. void xianshi(STU stu[N])/*定义显示成绩函数*/
  321. {
  322.         sumaverage(stu);
  323.         paixu(stu);
  324.         output2(stu);
  325. }
  326. void chazhao(STU stu[N])/*定义查找函数*/
  327. {
  328.         int m,i;
  329.         FILE *fp;
  330.         if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
  331.         {
  332.                 printf("error!");
  333.                 exit(0);
  334.         }
  335.         for(i=0;!feof(fp);i++)
  336.                 fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
  337.         fclose(fp);
  338.         sumaverage(stu);/*求平均值和总分*/
  339.         printf("********************输入查找选项**********************\n");
  340.         printf("1、查找成绩最高学生请按:1\n");
  341.         printf("2、查看学生的各项成绩率请按:2\n");
  342.         printf("3、查找单个学生信息请按:3\n");
  343.         printf("******************************************************\n");
  344.         scanf("%d",&m);
  345.         if(m==1)
  346.                 tongji2(stu);
  347.         if(m==2)
  348.                 tongji1(stu);
  349.         if(m==3)
  350.             chazhao1(N);
  351. }
  352. void chazhao1(int n)/*定义查找单个学生成绩函数*/
  353. {
  354.         int k=-1,a,i;
  355.         FILE *fp;
  356.         if((fp=fopen("c:\\student.dat","rb"))==NULL)/*以读方式打开文件并查询文件是否存在*/
  357.         {
  358.                 printf("error!");
  359.                 exit(0);
  360.         }
  361.         for(i=0;!feof(fp);i++)
  362.                 fread(&stu[i],sizeof(STU),1,fp);/*一次读出所有数据*/
  363.         fclose(fp);
  364.         printf("请输入要查找的同学的学号:\n");
  365.         scanf("%d",&a);
  366.         for(i=0;i<n;i++)
  367.         {
  368.                 if(a==stu[i].number)
  369.                 {
  370.                         k=i;
  371.                         break;
  372.                 }
  373.         }
  374.         if(k<0)
  375.                 printf("\n输入学号有误,请重新输入!");
  376.         else
  377.                 sumaverage(stu);
  378.                 shuchuone(k);
  379. }
复制代码

所有资料51hei提供下载:
学生成绩管理系统.rar (222 KB, 下载次数: 19)


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1010056 发表于 2022-4-16 09:48 | 只看该作者
这个地方要加个换行,不然显示全部信息的时候,第二排开始全乱了

{9SU2PG]6G)M}B)V)M_Q7IK.png (94.28 KB, 下载次数: 36)

{9SU2PG]6G)M}B)V)M_Q7IK.png
回复

使用道具 举报

板凳
ID:68847 发表于 2022-6-25 19:00 | 只看该作者
没有时间和年代信息,不实用~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表