搜索
查看: 4351|回复: 14
打印 上一主题 下一主题

[原创] 学生成绩管理系统

[复制链接]
跳转到指定楼层
楼主
发表于 2012-10-1 14:42:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 rosynirvana 于 2014-10-8 11:33 编辑
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define SIZE 100000
  5. typedef struct  tagStudent
  6. {
  7.   int n;                    /*顺序号*/
  8.   int nNum;                 /*学号*/
  9.   char name[10];            /*姓名*/
  10.   int iCn;                  /*语文成绩*/
  11.   int iMaths;               /*数学成绩*/
  12.   int iEn;                  /*英语成绩*/
  13.   int iPhy;                 /*物理成绩*/
  14.   int iCom;                 /*计算机成绩*/
  15.   float fAvage;             /*平均成绩*/
  16. } Student;
  17. Student stu[SIZE];
  18. /*录入数据*/
  19. void Student_Input()
  20. {
  21.   int i,p;  
  22.   FILE *fp;
  23.   fp=fopen("studentfile.dat","wb");                     
  24.   for(i=0;i<SIZE;i++)
  25.   {
  26.     printf("\n\r请输入序号i(当输入i=-1时,返回),i=",i++);
  27.     scanf("%d",&i);
  28.     if(i==-1|| i ==0)               
  29.     {
  30.       fclose(fp);      
  31.       return;
  32.     }
  33.     else                                      
  34.     {
  35.       printf("\n\r请输入学号(数字型):");
  36.       scanf("%d",&stu[i].nNum);
  37.       printf("\n\r请输入姓名(字符型):");
  38.       scanf("%s",stu[i].name);
  39.       printf("\n\r请输入语文成绩(0~100):");
  40.       scanf("%d",&stu[i].iCn);
  41.       printf("\n\r请输入数学成绩(0~100):");
  42.       scanf("%d",&stu[i].iMaths);
  43.       printf("\n\r请输入英语成绩(0~100)");
  44.       scanf("%d",&stu[i].iEn);
  45.       printf("\n\r请输入物理成绩(0~100)");
  46.       scanf("%d",&stu[i].iPhy);
  47.       printf("\n\r请输入计算机成绩(0~100):");
  48.       scanf("%d",&stu[i].iCom);
  49.       stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
  50.       stu[i].n=i+1;
  51.       fwrite(&stu[i],sizeof(Student),1,fp);
  52.     }
  53.   }
  54.   fclose(fp);
  55. }
  56. /*输出数据*/
  57. void Student_ListOut()
  58. {
  59.   FILE *fp;
  60.   int i;
  61.   fp=fopen("studentfile.dat","rb");                       
  62.   printf("***********************************************************************\n");
  63.   printf("    成绩列表\n");
  64.   printf("-----------------------------------------------------------------------\n");
  65.   printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  66.   printf("-----------------------------------------------------------------------\n");
  67.   for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  68.   {
  69.     printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  70.       stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  71.   }
  72.   printf("-----------------------------------------------------------------------\n");
  73.   fclose(fp);
  74. }
  75. /*查找数据*/
  76. void Student_Search()
  77. {
  78.   FILE *fp;
  79.   int i,num;
  80.   fp=fopen("studentfile.dat","rb");   
  81.   rewind(fp);
  82.   printf("请输入要查找的学号:");
  83.   scanf("%d",&num);
  84.   printf("***********************************************************************\n");
  85.   printf("    查询结果\n");
  86.   printf("-----------------------------------------------------------------------\n");
  87.   printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  88.   printf("-----------------------------------------------------------------------\n");
  89.   for(i=0;i<=SIZE;i++)
  90.     if(stu[i].nNum==num)
  91.     {
  92.       printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  93.         stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  94.     }
  95.     printf("-----------------------------------------------------------------------\n");
  96.     printf("***********************************************************************\n");
  97.     fclose(fp);
  98. }
  99. /*增加数据*/
  100. void Student_Add()
  101. {
  102.   int i,s;
  103.   FILE *fp;
  104.   fp=fopen("studentfile.dat","ab+");   
  105.   rewind(fp);
  106.   printf("***********************************************************************\n");
  107.   printf("      成绩列表\n");
  108.   printf("-----------------------------------------------------------------------\n");
  109.   printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  110.   printf("-----------------------------------------------------------------------\n");
  111.   for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  112.   {
  113.     printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  114.       stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  115.   }
  116.   printf("***********************************************************************\n");
  117.   s=i;
  118.   for(i=s;i<SIZE;i++)
  119.   {
  120.     printf("输入序号i(当输入i=-1时,返回),i=",i);
  121.     scanf("%d",&i);
  122.     if(i==-1|| i ==0)                                 
  123.     {
  124.       fclose(fp);
  125.       return;
  126.     }
  127.     else
  128.     {
  129.       printf("\n\r请输入学号(数字型):");
  130.       scanf("%d",&stu[i].nNum);
  131.       printf("\n\r请输入姓名(字符型):");
  132.       scanf("%s",stu[i].name);
  133.       printf("\n\r请输入语文成绩(0~100):");
  134.       scanf("%d",&stu[i].iCn);
  135.       printf("\n\r请输入数学成绩(0~100):");
  136.       scanf("%d",&stu[i].iMaths);
  137.       printf("\n\r请输入英语成绩(0~100)");
  138.       scanf("%d",&stu[i].iEn);
  139.       printf("\n\r请输入物理成绩(~100)");
  140.       scanf("%d",&stu[i].iPhy);
  141.       printf("\n\r请输入计算机成绩(0~100):");
  142.       scanf("%d",&stu[i].iCom);
  143.       stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
  144.       stu[i].n=i+1;
  145.       fwrite(&stu[i],sizeof(Student),1,fp);
  146.       printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  147.         stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  148.     }
  149.   }
  150.   fclose(fp);
  151. }
  152. /*删除数据*/
  153. void Student_Delete()
  154. {
  155.   FILE *fp;
  156.   int i,num,n;
  157.   int total =0;
  158.   int flag=0;   
  159.   fp=fopen("studentfile.dat","rb");
  160.   printf("***********************************************************************\n");
  161.   printf("      成绩列表\n");
  162.   printf("-----------------------------------------------------------------------\n");
  163.   printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  164.   printf("-----------------------------------------------------------------------\n");
  165.   for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  166.   {
  167.     printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  168.       stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  169.   }
  170.   printf("-----------------------------------------------------------------------\n");
  171.   printf("***********************************************************************\n");
  172.   fclose(fp);
  173.   
  174.   total = i-1;
  175.   
  176.   printf("请输入要删除学生的学号:");
  177.   scanf("%d",&num);
  178.   for(i=0;i<=SIZE;i++)
  179.     if(stu[i].nNum==num)
  180.     {
  181.       printf("***********************************************************************\n");
  182.       printf("要删除的学生信息\n");
  183.       printf("-----------------------------------------------------------------------\n");
  184.       printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  185.       printf("-----------------------------------------------------------------------\n");
  186.       printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  187.         stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  188.       printf("-----------------------------------------------------------------------\n");
  189.       printf("***********************************************************************\n");
  190.       n=i+1;
  191.       flag=1;
  192.       break;
  193.     }
  194.   if(flag==0)
  195.     {
  196.       printf("***********************************************************************\n");
  197.       printf("    输入错误!\n");
  198.       printf("    请返回!\n");
  199.       printf("***********************************************************************\n");
  200.       return;
  201.     }
  202.     printf("\n\n\n");  
  203.     for(i=n;i<=total;i++)
  204.     {
  205.       memcpy(&stu[i-1],&stu[i],sizeof(Student));
  206.     }
  207.     memset(&stu[total],0,sizeof(Student));
  208.    
  209.     fp=fopen("studentfile.dat","wb+");
  210.     for(i=0;i<total;i++)
  211.     {
  212.       fwrite(&stu[i],sizeof(Student),1,fp);
  213.     }   
  214.     fclose(fp);
  215.    
  216.     fp=fopen("studentfile.dat","rb");
  217.     printf("***********************************************************************\n");
  218.     printf("当前成绩列表\n");
  219.     printf("-----------------------------------------------------------------------\n");
  220.     printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  221.     printf("-----------------------------------------------------------------------\n");
  222.     for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  223.     {
  224.       printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  225.         stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  226.     }
  227.     printf("-----------------------------------------------------------------------\n");
  228.     printf("***********************************************************************\n");
  229.     fclose(fp);
  230. }
  231. /*修改数据*/
  232. void Student_Change()
  233. {
  234.   FILE *fp;
  235.   int i,num,n;
  236.   int flag=0;   
  237.   printf("请输入要修改学生的学号:");
  238.   scanf("%d",&num);
  239.   for(i=0;i<=SIZE;i++)
  240.     if(stu[i].nNum==num)
  241.     {
  242.       printf("***********************************************************************\n");
  243.       printf("      成绩列表\n");
  244.       printf("-----------------------------------------------------------------------\n");
  245.       printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  246.       printf("-----------------------------------------------------------------------\n");
  247.       printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  248.         stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  249.       printf("-----------------------------------------------------------------------\n");
  250.       printf("***********************************************************************\n");
  251.       n=i+1;
  252.       flag=1;
  253.       break;
  254.     }
  255.     if(flag==0)
  256.     {
  257.       printf("***********************************************************************\n");
  258.       printf("    输入错误!\n");
  259.       printf("    请返回!\n");
  260.       printf("***********************************************************************\n");
  261.       return;
  262.     }
  263.     printf("\n\n\n");  
  264.     fp=fopen("studentfile.dat","rb+");
  265.     fseek(fp,n*sizeof(Student),0);
  266.     printf("\n\r请输入学号(数字型):");
  267.     scanf("%d",&stu[i].nNum);
  268.     printf("\n\r请输入姓名(字符型):");
  269.     scanf("%s",stu[i].name);
  270.     printf("\n\r请输入语文成绩(0~100):");
  271.     scanf("%d",&stu[i].iCn);
  272.     printf("\n\r请输入数学成绩(0~100):");
  273.     scanf("%d",&stu[i].iMaths);
  274.     printf("\n\r请输入英语成绩(0~100)");
  275.     scanf("%d",&stu[i].iEn);
  276.     printf("\n\r请输入物理成绩(0~100)");
  277.     scanf("%d",&stu[i].iPhy);
  278.     printf("\n\r请输入计算机成绩(0~100):");
  279.     scanf("%d",&stu[i].iCom);
  280.     stu[i].fAvage=(stu[i].iCn+stu[i].iMaths+stu[i].iEn+stu[i].iPhy+stu[i].iCom)/5.0;
  281.     stu[i].n=i+1;
  282.     fwrite(&stu[i],sizeof(Student),1,fp);
  283.     fclose(fp);
  284.     fp=fopen("studentfile.dat","rb");
  285.     printf("***********************************************************************\n");
  286.     printf("      成绩列表\n");
  287.     printf("-----------------------------------------------------------------------\n");
  288.     printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  289.     printf("-----------------------------------------------------------------------\n");
  290.     for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  291.     {
  292.       printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  293.         stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  294.     }
  295.     printf("-----------------------------------------------------------------------\n");
  296.     printf("***********************************************************************\n");
  297.     fclose(fp);
  298. }
  299. /*成绩排序*/
  300. void Student_Order()
  301. {
  302.   int i,j,n;
  303.   FILE *fp;
  304.   Student t;
  305.   fp=fopen("studentfile.dat","rb");
  306.   printf("***********************************************************************\n");
  307.   printf("      成绩列表\n");
  308.   printf("-----------------------------------------------------------------------\n");
  309.   printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  310.   printf("-----------------------------------------------------------------------\n");
  311.   for(i=0;fread(&stu[i],sizeof(Student),1,fp)==1;i++)
  312.   {
  313.     printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  314.       stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  315.   }
  316.   printf("-----------------------------------------------------------------------\n");
  317.   printf("***********************************************************************\n");
  318.   fclose(fp);
  319.   n=i;
  320.   for(i=0;i<n;i++)
  321.     for(j=i+1;j<n;j++)
  322.       if(stu[i].fAvage<stu[j].fAvage)
  323.       {
  324.         t=stu[i];
  325.         stu[i]=stu[j];
  326.         stu[j]=t;
  327.       }
  328.       fp=fopen("studentfile.dats","wb");
  329.       printf("\n\n\n");
  330.       printf("***********************************************************************\n");
  331.       printf("      成绩列表\n");
  332.       printf("-----------------------------------------------------------------------\n");
  333.       printf("序号  学号     姓名    语文    数学    英语    物理    计算机    平均\n");
  334.       printf("-----------------------------------------------------------------------\n");
  335.       for(i=0;i<n;i++)
  336.       {
  337.         printf("%d%8d%8s%8d%8d%8d%8d%8d%10.2f\n",stu[i].n,stu[i].nNum,stu[i].name,stu[i].iCn,
  338.           stu[i].iMaths,stu[i].iEn,stu[i].iPhy,stu[i].iCom,stu[i].fAvage);
  339.         fwrite(&stu[i],sizeof(Student),1,fp);
  340.       }
  341.       printf("***********************************************************************\n");
  342.       fclose(fp);
  343. }
  344. /*主函数*/
  345. main()
  346. {
  347.   int n;
  348.   for(;;)
  349.   {
  350.     printf("\n");
  351.     printf("/******************************************\\\n");
  352.     printf("*                                          *\n");
  353.     printf("*             学生信息管理系统             *\n");
  354.     printf("*                  主菜单                  *\n");
  355.     printf("*                                          *\n");
  356.     printf("*                1.录入数据                *\n");
  357.     printf("*                2.删除数据                *\n");
  358.     printf("*                3.输出数据                *\n");
  359.     printf("*                4.查找数据                *\n");
  360.     printf("*                5.增加数据                *\n");
  361.     printf("*                6.修改数据                *\n");
  362.     printf("*                7.成绩排序                *\n");  
  363.     printf("*                8.退出系统                *\n");
  364.     printf("*                                          *\n");
  365.     printf("[url=file://\\******************************************/\n\n]\\******************************************/\n\n[/url]");
  366.     printf("请输入选择项(1-8):");
  367.     scanf("%d",&n);
  368.     printf("\n\n\n\n");
  369.     if(n>0&&n<=8)
  370.     {
  371.       switch(n)
  372.       {
  373.       case 1:Student_Input();break;
  374.       case 2:Student_Delete();break;
  375.       case 3:Student_ListOut();break;
  376.       case 4:Student_Search();break;
  377.       case 5:Student_Add();break;
  378.       case 6:Student_Change();break;
  379.       case 7:Student_Order();break;  
  380.       case 8:exit(0);  
  381.       }
  382.     }
  383.     else
  384.     {
  385.       printf("***********************************************************************\n");
  386.       printf("*                                                                      *\n");
  387.       printf("*                             按任意键                                *\n");
  388.       printf("*                               退出!                                 *\n");
  389.       printf("*                                                                      *\n");
  390.       printf("***********************************************************************\n");
  391.       break;
  392.     }
  393.   }
  394. }
复制代码

234.jpg (32.85 KB, 下载次数: 6)

234.jpg

学生成绩管理系统.rar

41.77 KB, 下载次数: 140

沙发
发表于 2012-10-5 20:52:52 | 只看该作者
顶啊,好样的,你发了源码
板凳
发表于 2012-10-5 21:00:09 | 只看该作者

真的牛
相当牛
地板
发表于 2012-10-8 20:14:50 | 只看该作者
放啊哈C里没办法运行啊
5#
 楼主| 发表于 2012-10-8 21:34:07 | 只看该作者
TanGom 发表于 2012-10-8 20:14
放啊哈C里没办法运行啊

我是用啊哈C写的
6#
发表于 2012-10-14 15:25:29 | 只看该作者
厉害.......
7#
发表于 2012-10-18 15:28:35 | 只看该作者
用啊哈C运行程序提示啊哈C有误
8#
发表于 2012-11-7 10:11:53 | 只看该作者
放在软件了 一运行就自动关闭了  不能运行
9#
发表于 2012-11-7 11:07:39 | 只看该作者
为何将代码放入啊哈C中点击运行,软件就会关闭?
10#
发表于 2012-11-26 02:21:49 | 只看该作者
请阐述一下编译环境!!ahaC 运行的话直接停止了!!
个人曾经尝试在VC6.0下编译,但是弹出相当多的问题@@
一共100多个错误!!另外。非常感谢分享@@
11#
发表于 2012-12-28 21:25:24 | 只看该作者
编译的时候有各种各样的报错
12#
发表于 2012-12-31 21:47:01 | 只看该作者
非常感谢分享
13#
发表于 2013-1-31 15:37:47 | 只看该作者
能用吗?求解!!!!!
14#
发表于 2013-2-4 19:02:07 | 只看该作者
收藏学习    感谢分享
15#
发表于 2017-2-18 22:11:49 | 只看该作者
有问题啊编译没问题但是运行时成绩不能录入
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表