三木社区

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 349|回复: 0
打印 上一主题 下一主题

学生成绩管理系统

[复制链接]

1562

主题

1564

帖子

4904

积分

博士

Rank: 8Rank: 8

积分
4904
跳转到指定楼层
楼主
发表于 2017-9-1 10:19:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "stdio.h"
  2. #include"string"
  3. /*定义学生结构体*/
  4. struct Student  
  5.   
  6. {  
  7.   
  8.      char ID[20];  
  9.   
  10.      char Name[20];  
  11.   
  12.      float Mark1;  
  13.   
  14.      float Mark2;  
  15.   
  16.      float Mark3;  
  17.   
  18.      float Average;  
  19.   
  20. };  
  21.   
  22.   
  23. /*声明学生数组及学生数量*/  
  24.   
  25. struct Student students[1000];  
  26.   
  27. int num=0;  
  28.   
  29.    
  30.   
  31. /*求平均值*/  
  32.   
  33. float Avg(struct Student stu)  
  34.   
  35. {  
  36.   
  37.      return (stu.Mark1+stu.Mark2+stu.Mark3)/3;  
  38.   
  39. }  
  40.   
  41.    
  42.   
  43. /*通过学号返回数组下标*/  
  44.   
  45. int Student_SearchByIndex(char id[])  
  46.   
  47. {  
  48.   
  49.      int i;  
  50.   
  51.      for (i=0;i<num;i++)  
  52.   
  53.      {  
  54.   
  55.          if (strcmp(students[i].ID,id)==0)  
  56.   
  57.          {  
  58.   
  59.               return i;  
  60.   
  61.          }  
  62.   
  63.      }  
  64.   
  65.      return -1;  
  66.   
  67. }  
  68.   
  69.    
  70.   
  71. /*通过姓名返回数组下标*/  
  72.   
  73. int Student_SearchByName(char name[])  
  74.   
  75. {  
  76.   
  77.      int i;  
  78.   
  79.      for (i=0;i<num;i++)  
  80.   
  81.      {  
  82.   
  83.          if (strcmp(students[i].Name,name)==0)  
  84.   
  85.          {  
  86.   
  87.               return i;  
  88.   
  89.          }  
  90.   
  91.      }  
  92.   
  93.      return -1;  
  94.   
  95. }  
  96.   
  97.    
  98.   
  99. /*显示单条学生记录*/  
  100.   
  101. void Student_DisplaySingle(int index)  
  102.   
  103. {  
  104.   
  105.      printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");  
  106.   
  107.      printf("-------------------------------------------------------------\n");  
  108.   
  109.      printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[index].ID,students[index].Name,  
  110.   
  111.               students[index].Mark1,students[index].Mark2,students[index].Mark3,students[index].Average);  
  112.   
  113. }  
  114.   
  115.    
  116.   
  117. /*插入学生信息*/  
  118.   
  119. void Student_Insert()  
  120.   
  121. {  
  122.   
  123.      while(1)  
  124.   
  125.      {  
  126.   
  127.          printf("请输入学号:");  
  128.   
  129.          scanf("%s",&students[num].ID);  
  130.   
  131.          getchar();  
  132.   
  133.    
  134.   
  135.          printf("请输入姓名:");  
  136.   
  137.          scanf("%s",&students[num].Name);  
  138.   
  139.          getchar();  
  140.   
  141.    
  142.   
  143.          printf("请输入成绩:");  
  144.   
  145.          scanf("%f",&students[num].Mark1);  
  146.   
  147.          getchar();  
  148.   
  149.    
  150.   
  151.          printf("请输入成绩:");  
  152.   
  153.          scanf("%f",&students[num].Mark2);  
  154.   
  155.          getchar();  
  156.   
  157.    
  158.   
  159.          printf("请输入成绩:");  
  160.   
  161.          scanf("%f",&students[num].Mark3);  
  162.   
  163.          getchar();  
  164.   
  165.    
  166.   
  167.          students[num].Average=Avg(students[num]);  
  168.   
  169.          num++;  
  170.   
  171.    
  172.   
  173.          printf("是否继续?(y/n)");  
  174.   
  175.          if (getchar()=='n')  
  176.   
  177.          {  
  178.   
  179.               break;  
  180.   
  181.          }  
  182.   
  183.      }  
  184.   
  185.    
  186.   
  187. }  
  188.   
  189.    
  190.   
  191. /*修改学生信息*/  
  192.   
  193. void Student_Modify()  
  194.   
  195. {  
  196.   
  197.      //float mark1,mark2,mark3;  
  198.   
  199.      while(1)  
  200.   
  201.      {  
  202.   
  203.          char id[20];  
  204.   
  205.          int index;  
  206.   
  207.          printf("请输入要修改的学生的学号:");  
  208.   
  209.          scanf("%s",&id);  
  210.   
  211.          getchar();  
  212.   
  213.          index=Student_SearchByIndex(id);  
  214.   
  215.          if (index==-1)  
  216.   
  217.          {  
  218.   
  219.               printf("学生不存在!\n");  
  220.   
  221.          }  
  222.   
  223.          else  
  224.   
  225.          {  
  226.   
  227.               printf("你要修改的学生信息为:\n");  
  228.   
  229.               Student_DisplaySingle(index);  
  230.   
  231.               printf("-- 请输入新值--\n");  
  232.   
  233.   
  234.               printf("请输入学号:");  
  235.   
  236.               scanf("%s",&students[index].ID);  
  237.   
  238.               getchar();  
  239.   
  240.   
  241.               printf("请输入姓名:");  
  242.   
  243.               scanf("%s",&students[index].Name);  
  244.   
  245.               getchar();  
  246.   
  247.   
  248.               printf("请输入成绩:");  
  249.   
  250.               scanf("%f",&students[index].Mark1);  
  251.   
  252.               getchar();  
  253.   
  254.   
  255.               printf("请输入成绩:");  
  256.   
  257.               scanf("%f",&students[index].Mark2);  
  258.   
  259.               getchar();  
  260.   
  261.   
  262.               printf("请输入成绩:");  
  263.   
  264.               scanf("%f",&students[index].Mark3);  
  265.   
  266.               getchar();  
  267.   
  268.   
  269.               students[index].Average=Avg(students[index]);  
  270.   
  271.          }  
  272.   
  273.          printf("是否继续?(y/n)");  
  274.   
  275.          if (getchar()=='n')  
  276.   
  277.          {  
  278.   
  279.               break;  
  280.   
  281.          }  
  282.   
  283.      }  
  284.   
  285. }  
  286.   
  287.    
  288.   
  289. /*删除学生信息*/  
  290.   
  291. void Student_Delete()  
  292.   
  293. {  
  294.   
  295.      int i;  
  296.   
  297.      while(1)  
  298.   
  299.      {  
  300.   
  301.          char id[20];  
  302.   
  303.          int index;  
  304.   
  305.          printf("请输入要删除的学生的学号:");  
  306.   
  307.          scanf("%s",&id);  
  308.   
  309.          getchar();  
  310.   
  311.          index=Student_SearchByIndex(id);  
  312.   
  313.          if (index==-1)  
  314.   
  315.          {  
  316.   
  317.               printf("学生不存在!\n");  
  318.   
  319.          }  
  320.   
  321.          else  
  322.   
  323.          {  
  324.   
  325.               printf("你要删除的学生信息为:\n");  
  326.   
  327.               Student_DisplaySingle(index);  
  328.   
  329.               printf("是否真的要删除?(y/n)");  
  330.   
  331.               if (getchar()=='y')  
  332.   
  333.               {  
  334.   
  335.                    for (i=index;i<num-1;i++)  
  336.   
  337.                    {  
  338.   
  339.                        students[i]=students[i+1];//把后边的对象都向前移动  
  340.   
  341.                    }  
  342.   
  343.                    num--;  
  344.   
  345.               }  
  346.   
  347.               getchar();  
  348.   
  349.          }  
  350.   
  351.          printf("是否继续?(y/n)");  
  352.   
  353.          if (getchar()=='n')  
  354.   
  355.          {  
  356.   
  357.               break;  
  358.   
  359.          }  
  360.   
  361.      }  
  362.   
  363. }  
  364.   
  365.    
  366.   
  367. /*按姓名查询*/  
  368.   
  369. void Student_Select()  
  370.   
  371. {  
  372.   
  373.      while(1)  
  374.   
  375.      {  
  376.   
  377.          char name[20];  
  378.   
  379.          int index;  
  380.   
  381.          printf("请输入要查询的学生的姓名:");  
  382.   
  383.          scanf("%s",&name);  
  384.   
  385.          getchar();  
  386.   
  387.          index=Student_SearchByName(name);  
  388.   
  389.          if (index==-1)  
  390.   
  391.          {  
  392.   
  393.               printf("学生不存在!\n");  
  394.   
  395.          }  
  396.   
  397.          else  
  398.   
  399.          {  
  400.   
  401.               printf("你要查询的学生信息为:\n");  
  402.   
  403.               Student_DisplaySingle(index);  
  404.   
  405.          }  
  406.   
  407.          printf("是否继续?(y/n)");  
  408.   
  409.          if (getchar()=='n')  
  410.   
  411.          {  
  412.   
  413.               break;  
  414.   
  415.          }  
  416.   
  417.      }  
  418.   
  419. }  
  420.   
  421.    
  422.   
  423. /*按平均值排序*/  
  424.   
  425. void Student_SortByAverage()  
  426.   
  427. {  
  428.   
  429.      int i,j;  
  430.   
  431.      struct Student tmp;  
  432.   
  433.      for (i=0;i<num;i++)  
  434.   
  435.      {  
  436.   
  437.          for (j=1;j<num-i;j++)  
  438.   
  439.          {  
  440.   
  441.               if (students[j-1].Average<students[j].Average)  
  442.   
  443.               {  
  444.   
  445.                    tmp=students[j-1];  
  446.   
  447.                    students[j-1]=students[j];  
  448.   
  449.                    students[j]=tmp;  
  450.   
  451.               }  
  452.   
  453.          }  
  454.   
  455.      }  
  456.   
  457. }  
  458.   
  459.    
  460.   
  461. /*显示学生信息*/  
  462.   
  463. void Student_Display()  
  464.   
  465. {  
  466.   
  467.      int i;  
  468.   
  469.      printf("%10s%10s%8s%8s%8s%10s\n","学号","姓名","成绩","成绩","成绩","平均成绩");  
  470.   
  471.      printf("-------------------------------------------------------------\n");  
  472.   
  473.      for (i=0;i<num;i++)  
  474.   
  475.      {  
  476.   
  477.          printf("%10s%10s%8.2f%8.2f%8.2f%10.2f\n",students[i].ID,students[i].Name,  
  478.   
  479.               students[i].Mark1,students[i].Mark2,students[i].Mark3,students[i].Average);  
  480.   
  481.      }  
  482.   
  483. }  
  484.   
  485.    
  486.   
  487. /*将学生信息从文件读出*/  
  488.   
  489. void IO_ReadInfo()  
  490.   
  491. {  
  492.   
  493.      FILE *fp;  
  494.   
  495.      int i;  
  496.   
  497.      if ((fp=fopen("Database.txt","rb"))==NULL)  
  498.   
  499.      {  
  500.   
  501.          printf("不能打开文件!\n");  
  502.   
  503.          return;  
  504.   
  505.      }  
  506.   
  507.      if (fread(&num,sizeof(int),1,fp)!=1)  
  508.   
  509.      {  
  510.   
  511.          num=-1;  
  512.   
  513.      }  
  514.   
  515.      else  
  516.   
  517.      {  
  518.   
  519.          for(i=0;i<num;i++)  
  520.   
  521.          {  
  522.   
  523.               fread(&students[i],sizeof(struct Student),1,fp);  
  524.   
  525.          }  
  526.   
  527.      }  
  528.   
  529.      fclose(fp);  
  530.   
  531. }  
  532.   
  533.    
  534.   
  535. /*将学生信息写入文件*/  
  536.   
  537. void IO_WriteInfo()  
  538.   
  539. {  
  540.   
  541.      FILE *fp;  
  542.   
  543.      int i;  
  544.   
  545.      if ((fp=fopen("Database.txt","wb"))==NULL)  
  546.   
  547.      {  
  548.   
  549.          printf("不能打开文件!\n");  
  550.   
  551.          return;  
  552.   
  553.      }  
  554.   
  555.      if (fwrite(&num,sizeof(int),1,fp)!=1)  
  556.   
  557.      {  
  558.   
  559.          printf("写入文件错误!\n");  
  560.   
  561.      }  
  562.   
  563.      for (i=0;i<num;i++)  
  564.   
  565.      {  
  566.   
  567.          if (fwrite(&students[i],sizeof(struct Student),1,fp)!=1)  
  568.   
  569.          {  
  570.   
  571.               printf("写入文件错误!\n");  
  572.   
  573.          }  
  574.   
  575.      }      
  576.   
  577.      fclose(fp);  
  578.   
  579. }  
  580.   
  581.    
  582.   
  583.    
  584.   
  585. /*主程序*/  
  586.   
  587. void main()  
  588.   
  589. {  
  590.   
  591.      int choice;  
  592.   
  593.      IO_ReadInfo();  
  594.   
  595.      while(1)  
  596.   
  597.      {  
  598.   
  599.          /*主菜单*/  
  600.   
  601.          printf("\n------ 学生成绩管理系统------\n");  
  602.   
  603.          printf("1. 增加学生记录\n");  
  604.   
  605.          printf("2. 修改学生记录\n");  
  606.   
  607.          printf("3. 删除学生记录\n");  
  608.   
  609.          printf("4. 按姓名查询学生记录\n");  
  610.   
  611.          printf("5. 按平均成绩排序\n");  
  612.   
  613.          printf("6. 退出\n");  
  614.   
  615.          printf("请选择(1-6):");  
  616.   
  617.          scanf("%d",&choice);  
  618.   
  619.          getchar();  
  620.   
  621.          switch(choice)  
  622.   
  623.          {  
  624.   
  625.          case 1:  
  626.   
  627.               Student_Insert();  
  628.   
  629.               break;  
  630.   
  631.          case 2:  
  632.   
  633.               Student_Modify();  
  634.   
  635.               break;  
  636.   
  637.          case 3:  
  638.   
  639.               Student_Delete();  
  640.   
  641.               break;  
  642.   
  643.          case 4:  
  644.   
  645.               Student_Select();  
  646.   
  647.               break;  
  648.   
  649.          case 5:  
  650.   
  651.               Student_SortByAverage();  
  652.   
  653.               Student_Display();  
  654.   
  655.               break;  
  656.   
  657.          case 6:  
  658.   
  659.               exit(0);  
  660.   
  661.               break;  
  662.   
  663.          }  
  664.   
  665.          IO_WriteInfo();  
  666.   
  667.      }  
  668.   
  669. }  
复制代码


回复

使用道具 举报

Archiver|手机版|小黑屋|三木电子社区 ( 辽ICP备11000133号-4 )

辽公网安备 21021702000620号

GMT+8, 2025-10-22 00:40 , Processed in 0.024516 second(s), 22 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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