萝卜头IT论坛

了解更多
搜索
查看: 1408|回复: 5
收起左侧

翻出学C语言时的练习 学生成绩管理系统

[复制链接]
发表于 2016-11-4 21:47:53 | 显示全部楼层 |阅读模式
  1. #include"stdio.h"
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include"process.h"
  5. #include"ctype.h"
  6. typedef struct
  7. {
  8.     char num[10];
  9.     char name[10];
  10.     int chinese;
  11.     int math;
  12.     int english;
  13.         int dianlu;
  14.         double aver;
  15. }Student;
  16. Student stu[99];


  17.                                                             
  18. int shuru(Student stud[],int n)/*输入若干条记录*/
  19. {
  20.         int i=0;
  21.         char sign,x[10];
  22.         double a=0.0;   
  23. while(sign!='n'&&sign!='N')
  24. {
  25. printf("输入学生学号:");
  26. scanf("%s",stu[n+i].num);
  27. printf("输入学生姓名:");
  28. scanf("%s",stu[n+i].name);                                    
  29. printf("输入学生的语文、数学、英语、电路分数:");
  30. scanf("%d%d%d%d",&stu[n+i].chinese,&stu[n+i].math,&stu[n+i].english,&stu[n+i].dianlu);
  31. a=1.0*(stu[n+i].chinese+stu[n+i].math+stu[n+i].english+stu[n+i].dianlu)/4;
  32. stu[n+i].aver=a;
  33. gets(x);   /*清除多余的输入*/
  34. printf("是否继续输入?(Y/N):\n");
  35. scanf("%c",&sign);
  36. i++;
  37. }
  38. return(n+i);
  39. }


  40. void xianshi(Student stud[],int n) /*显示所有记录*/
  41. {
  42.   int i ;
  43.   printf("----------------------------------------------------------\n"); /*格式头*/
  44.   printf("学号    姓名       语文       数学      英语     电路      平均成绩 \n");
  45.   printf("----------------------------------------------------------\n");
  46.   for(i=0;i<n;i++)
  47.   {
  48.     printf("%-10s%-10s%-10d%-10d%-10d%-10d%-10.2lf\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,stu[i].dianlu,stu[i].aver);                                                
  49.   }
  50. }


  51. void xiugai(Student stud[],int n)/*修改*/
  52. {
  53. int i=0,choice=1;
  54. char x[10];
  55.     while(choice!=0)
  56.     {   printf("请输入您要修改的学生的学号:\n");
  57.         scanf("%s",x);
  58.                 for(i=0;;i++)
  59.                 {
  60.                         if(strcmp(stu[i].num,x)==0)  break;
  61.                     
  62.                 }
  63.         printf("请选择您要修改的内容:\n");
  64.         printf(" ---------------------- \n");
  65.                 printf("| 姓名              请按 1 |\n");
  66.                 printf("| 语文              请按 2 |\n");
  67.                 printf("| 数学分数          请按 3 |\n");
  68.                 printf("| 英语分数          请按 4 |\n");
  69.              printf("| 电路              请按 5 |\n");
  70.                 printf("| 退出              请按 0|\n");
  71.         printf("+----------------------+\n");
  72.         printf("请输入您的选择:");
  73.         scanf("%d", &choice);
  74.         switch(choice)
  75.         {                                                         
  76.             case 0:break;
  77.             case 1:
  78.                 printf("请输入新姓名:");
  79.                 scanf("%s", stu[i].name);
  80.                 break;
  81.             case 2:                                               
  82.                 printf("请输入新的语文分数:");   
  83.                scanf("%d", &stu[i].chinese);
  84.                 break;
  85.                         case 3:
  86.                 printf("请输入新的数学分数:");
  87.                scanf("%d",&stu[i].math);
  88.                 break;
  89.                         case 4:
  90.                 printf("请输入新的英语分数:");                                          
  91.                scanf("%d", &stu[i].english);
  92.                 break;
  93.             case 5:
  94.                 printf("请输入新的电路分数:");                                          
  95.                scanf("%d", &stu[i].dianlu);
  96.                 break;
  97.             default:
  98.                 printf("\n无效选项!");
  99.                 break;
  100.                 } break;
  101.        
  102.        }
  103.    
  104.         return;
  105. }                                                                    
  106. int shanchu(Student stud[],int n) /*按姓名查找,删除一条记录*/  
  107. { char s[20];
  108. int i;
  109. int j;
  110. i=0;
  111. printf("输入要删除记录的姓名:");
  112. scanf("%s",s);
  113. while(strcmp(stu[i].name,s)!=0&&i<n) i++;
  114. if(i==n)
  115. {printf("not find!\n");
  116. return(n); }                                                                    
  117. for(j=i;j<n-1;j++) /*删除操作*/
  118. {
  119. strcpy(stu[j].num,stu[j+1].num);
  120. strcpy(stu[j].name,stu[j+1].name);
  121. stu[j].chinese=stu[j+1].chinese;
  122. stu[j].math=stu[j+1].math;
  123. stu[j].english=stu[j+1].english;
  124. stu[j].dianlu=stu[j+1].dianlu;
  125. stu[j].aver=stu[j+1].aver;
  126. }
  127. printf("Delete Successed!\n");
  128. return(n-1);
  129. }


  130. void chaxun_xingming(Student stud[],int n) /*按姓名查找并显示一个记录*/
  131. { char s[20];                    
  132. int i=0;
  133. printf("输入姓名:");
  134. scanf("%s",s);
  135. while(strcmp(stu[i].name,s)!=0&&i<n) i++; /*查找判断*/
  136. if(i==n)
  137. {printf("not find!\n"); /*输入失败信息*/
  138. return;  }
  139. printf("他的姓名、学号是:%s   %s\n",stu[i].name,stu[i].num); /*输出该学生信息*/
  140. printf("语文 高数 英语 电路 平均成绩是:%d,%d,%d,%d,%lf\n",stu[i].chinese,stu[i].math,stu[i].english,stu[i].dianlu,stu[i].aver);               
  141. }  

  142.                                 
  143. void chaxun_pingjun(Student stud[],int n) /*按平均成绩查找并显示一个记录*/
  144. { double s;                  
  145. int i=0;
  146. printf("输入平均成绩:");
  147. scanf("%lf",&s);
  148. while(stu[i].aver!=s && i<n) i++;
  149. if(i==n)
  150. { printf("not find!\n"); /*输入失败信息*/
  151. return;                                       
  152. }
  153. printf("他的学号是:%s\n",stu[i].num); /*输出该学生信息*/
  154. printf("他的姓名是:%s\n",stu[i].name);
  155. printf("他的语文、数学、英语、电路分数是:%d %d %d %d \n",stu[i].chinese,stu[i].math,stu[i].english,stu[i].dianlu);               
  156. }

  157. void paixu_xuehao(Student stud[],int n) /*按学号排序*/
  158. { int i,j,p,q,r,w;
  159.   double y;
  160.   char x[20],t[10];
  161. for(i=0;i<n-1;i++) /*冒泡法排序*/
  162. for(j=0;j<n-1-i;j++)
  163. if(strcmp(stud[j].num,stud[j+1].num)>0)
  164. { strcpy(t,stud[j].num);
  165.   strcpy(stud[j].num,stud[j+1].num);
  166.   strcpy(stud[j+1].num,t);
  167.   strcpy(x,stud[j].name);
  168.   strcpy(stud[j].name,stud[j+1].name);
  169.   strcpy(stud[j+1].name,x);
  170.   y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
  171.   p=stu[j].chinese;stu[j].chinese=stu[j+1].chinese;stu[j+1].chinese=p;
  172.   q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
  173.   r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
  174.   w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;
  175. }
  176. return;
  177. }


  178. void paixu_pingjun(Student stud[],int n) /*按平均成绩排序*/
  179. { int i,j,p,q,r,w;
  180.   double y;
  181.   char x[20],t[10];
  182.   for(i=0;i<n-1;i++) /*冒泡法排序*/
  183. for(j=0;j<n-1-i;j++)

  184.    if(stu[j].aver>stu[j+1].aver)

  185.    {   y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
  186.        p=stu[j].chinese;stu[j].chinese=stu[j+1].chinese;stu[j+1].chinese=p;
  187.            q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
  188.            r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
  189.            w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;
  190.          strcpy(x,stu[j].name);
  191.              strcpy(stu[j].name,stu[j+1].name);
  192.              strcpy(stu[j+1].name,x);
  193.          strcpy(t,stu[j].num);
  194.          strcpy(stu[j].num,stu[j+1].num);
  195.              strcpy(stu[j+1].num,t);          
  196.    }
  197.           return;

  198. }


  199. void paixu_chinese(Student stud[],int n) /*按语文成绩排序*/
  200. { int i,j,p,q,r,w;
  201.   double y;
  202.   char x[20],t[10];
  203.   for(i=0;i<n-1;i++) /*冒泡法排序*/
  204.   for(j=0;j<n-1-i;j++)
  205.   
  206.    if(stu[j].chinese>stu[j+1].chinese)

  207.    {   
  208.        y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
  209.        p=stu[j].chinese;stu[j].chinese=stu[j+1].chinese;stu[j+1].chinese=p;
  210.            q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
  211.            r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
  212.            w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;
  213.          strcpy(x,stu[j].name);
  214.              strcpy(stu[j].name,stu[j+1].name);
  215.              strcpy(stu[j+1].name,x);
  216.          strcpy(t,stu[j].num);
  217.          strcpy(stu[j].num,stu[j+1].num);
  218.              strcpy(stu[j+1].num,t);          
  219.    }
  220.           return;

  221. }


  222. void paixu_english(Student stud[],int n) /*按英语成绩排序*/
  223. { int i,j,p,q,r,w;
  224.   double y;
  225.   char x[20],t[10];
  226.   for(i=0;i<n-1;i++) /*冒泡法排序*/
  227.   for(j=0;j<n-1-i;j++)
  228.   
  229.    if(stu[j].english>stu[j+1].english)

  230.    {   
  231.        y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
  232.        p=stu[j].chinese;stu[j].chinese=stu[j+1].chinese;stu[j+1].chinese=p;
  233.            q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
  234.            r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
  235.            w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;
  236.          strcpy(x,stu[j].name);
  237.              strcpy(stu[j].name,stu[j+1].name);
  238.              strcpy(stu[j+1].name,x);
  239.          strcpy(t,stu[j].num);
  240.          strcpy(stu[j].num,stu[j+1].num);
  241.              strcpy(stu[j+1].num,t);          
  242.    }
  243.           return;

  244. }



  245. void paixu_math(Student stud[],int n) /*按数学成绩排序*/
  246. { int i,j,p,q,r,w;
  247.   double y;
  248.   char x[20],t[10];
  249.   for(i=0;i<n-1;i++) /*冒泡法排序*/
  250.   for(j=0;j<n-1-i;j++)
  251.   
  252.    if(stu[j].math>stu[j+1].math)

  253.    {   
  254.        y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
  255.        p=stu[j].chinese;stu[j].chinese=stu[j+1].chinese;stu[j+1].chinese=p;
  256.            q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
  257.            r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
  258.            w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;
  259.          strcpy(x,stu[j].name);
  260.              strcpy(stu[j].name,stu[j+1].name);
  261.              strcpy(stu[j+1].name,x);
  262.          strcpy(t,stu[j].num);
  263.          strcpy(stu[j].num,stu[j+1].num);
  264.              strcpy(stu[j+1].num,t);          
  265.    }
  266.           return;

  267. }


  268. void paixu_dianlu(Student stud[],int n) /*按电路成绩排序*/
  269. { int i,j,p,q,r,w;
  270.   double y;
  271.   char x[20],t[10];
  272.   for(i=0;i<n-1;i++) /*冒泡法排序*/
  273.   for(j=0;j<n-1-i;j++)
  274.   
  275.    if(stu[j].dianlu>stu[j+1].dianlu)

  276.    {   
  277.        y=stu[j].aver;stu[j].aver=stu[j+1].aver;stu[j+1].aver=y;
  278.        p=stu[j].chinese;stu[j].chinese=stu[j+1].chinese;stu[j+1].chinese=p;
  279.            q=stu[j].math;stu[j].math=stu[j+1].math;stu[j+1].math=q;
  280.            r=stu[j].english;stu[j].english=stu[j+1].english;stu[j+1].english=r;
  281.            w=stu[j].dianlu;stu[j].dianlu=stu[j+1].dianlu;stu[j+1].dianlu=w;
  282.          strcpy(x,stu[j].name);
  283.              strcpy(stu[j].name,stu[j+1].name);
  284.              strcpy(stu[j+1].name,x);
  285.          strcpy(t,stu[j].num);
  286.          strcpy(stu[j].num,stu[j+1].num);
  287.              strcpy(stu[j+1].num,t);          
  288.    }
  289.           return;

  290. }




  291. void tongji(Student stud[],int n)//按分数段统计人数
  292. {      int i,j,a,max,min,k,l,q,p,w;
  293.        k=0,l=0,p=0,q=0,w=0;
  294.       printf("你想统计哪科成绩: 1语文 2数学  3英语  4电路 5平均 \n");
  295.       scanf("%d",&j);
  296.       printf("input 2 score:\n");
  297.       scanf("%d%d",&max,&min);
  298.       if(max<min)
  299.           {
  300.       a=max;max=min;min=a;  
  301.           }
  302.             if(j==1)
  303.                 {
  304.                         for(i=0;i<99;i++)
  305.                         {
  306.                             if(stu[i].chinese>min&&stu[i].chinese<max)  k++;
  307.                         }
  308.                     printf("分数段的人数为 :%d",k);
  309.                 }
  310.             else if(j==2)
  311.                 {
  312.                         for(i=0;i<99;i++)
  313.                         {
  314.                             if(stu[i].math>min&&stu[i].math<max)  l++;
  315.                         }
  316.                     printf("分数段的人数为 :%d",l);
  317.                 }
  318.             else if(j==3)
  319.                 {
  320.                         for(i=0;i<99;i++)
  321.                         {
  322.                             if(stu[i].english>min&&stu[i].english<max)  p++;
  323.                         }
  324.                     printf("分数段的人数为 :%d",p);
  325.                 }
  326.        else if(j==4)
  327.              {
  328.                         for(i=0;i<99;i++)
  329.                         {
  330.                             if(stu[i].dianlu>min&&stu[i].dianlu<max)  
  331.                                         w++;
  332.                         }
  333.                     printf("分数段的人数为 :%d",w);
  334.                 }
  335.             else if(j==5)
  336.                
  337.                 {
  338.                         for(i=0;i<99;i++)
  339.                         {
  340.                             if(stu[i].aver>min&&stu[i].aver<max)  q++;
  341.                         }
  342.                     printf("分数段的人数为 :%d",q);
  343.                 }
  344.     return;
  345. }


  346. int wenjian2(Student stud[],int n) /*从文件中读入数据*/
  347. { int i=0,num;
  348. FILE *fp; /*定义文件指针*/
  349. char filename[20]; /*定义文件名*/
  350. printf("\t\t\tInput the filename:");
  351. scanf("\t\t\t%s",filename); /*输入文件名*/
  352. if((fp=fopen(filename,"rb"))==NULL) /*打开文件*/
  353. { printf("\t\t\tcann't open the file\n"); /*打开失败信息*/
  354. printf("\t\t\t");
  355. system("pause");
  356. return(n);
  357. }
  358. fscanf(fp,"%d",&num); /*读入总记录量*/
  359. while(i<num) /*循环读入数据*/
  360. {
  361. fscanf(fp,"%s %s %d %d %d %d %lf\n",stu[n+i].num,stu[n+i].name,&stu[n+i].chinese,&stu[n+i].math,&stu[n+i].english,&stu[n+i].dianlu,&stu[n+i].aver);
  362. i++;
  363. }
  364. n+=num;
  365. fclose(fp); /*关闭文件*/
  366. printf("\t\t\tSuccessed!\n");
  367. printf("\t\t\t");
  368. system("pause");
  369. return(n);
  370. }   
  371. void wenjian1(Student stud[],int n)               /*将所有记录写入文件*/
  372. {
  373. int i=0;
  374. FILE *fp;                     /*定义文件指针*/
  375. char filename[20];                    /*定义文件名*/           
  376.    printf("Input the filename:");/*输入文件名*/
  377.    scanf("%s",filename);
  378.    if((fp=fopen(filename,"w"))==NULL)             /*打开文件*/
  379.    {
  380.      printf("cann't open the file\n");
  381.      return;
  382.     }
  383.    fprintf(fp,"%d\n",n);             /*循环写入数据*/
  384.    while(i<n)
  385.    {
  386. fprintf(fp,"%s %s %d %d %d %d %lf\n",stu[i].num,stu[i].name,stu[i].chinese,stu[i].math,stu[i].english,stu[i].dianlu,stu[i].aver);
  387.             i++;
  388.                }
  389.    fclose(fp);           /*关闭文件*/
  390.    printf("Successed!\n");          /*返回成功信息*/
  391. }




  392. int menu()          /*菜单函数*/
  393. {
  394. int c;                                                     
  395. do{
  396.    printf("\t\t****学生信息管理系统菜单****\n");
  397.    printf("\t\t  1. 编辑 \n");
  398.    printf("\t\t  2. 显示 \n");
  399.    printf("\t\t  3. 查询 \n");
  400.    printf("\t\t  4. 排序\n");
  401.    printf("\t\t  5. 统计\n");
  402.    printf("\t\t  6. 文件 \n");
  403.    printf("\t\t  0. 退出 \n");
  404.    printf("************************************************************\n");
  405.      printf("\t\t\t请选择(0-6):");
  406.      scanf("%d",&c);
  407. }while(c<0||c>6);
  408. return(c-0); /*返回选择*/

  409. }   


  410. int bianji()
  411. {int i;
  412. printf("\t\t 1. 录入\n");
  413. printf("\t\t 2 .修改\n");
  414. printf("\t\t 3. 删除 \n");
  415. printf("\t\t 按其它数字键退出 \n");
  416. scanf("%d",&i);
  417. return i;
  418. }


  419. int chaxun()
  420. {int i;
  421. printf("\t\t 1. 按姓名查询\n");
  422. printf("\t\t 2 .按平均成绩查询\n");  
  423. printf("\t\t  按其它数字键退出\n");
  424. scanf("%d",&i);
  425. return i;
  426. }


  427. int paixu()
  428. {int i;
  429.      printf("\t\t 1. 按学号\n");
  430.      printf("\t\t 2 .按语文成绩\n");
  431.      printf("\t\t 3 .按数学成绩\n");
  432.      printf("\t\t 4 .按英语成绩\n");
  433.      printf("\t\t 5 .按电路成绩\n");
  434.          printf("\t\t 6 .按平均成绩\n");
  435.      printf("\t\t按其它数字键退出\n");

  436.      
  437.       scanf("%d",&i);
  438.       return i;
  439. }


  440. int wenjian()
  441. {int i;
  442. printf("\t\t 1. 从文件中读入数据\n");
  443. printf("\t\t 2 .将所有记录写入文件\n");  
  444. printf("\t\t   按其它数字键退出 \n");


  445. scanf("%d",&i);
  446. return i;
  447. }



  448. void main()    /*主函数*/
  449. {
  450. int n=0;
  451. for(;;)
  452. {
  453.      for(;;)
  454.         {
  455.         switch(menu())
  456.                 {
  457.   case 1:  switch(bianji())
  458.                         {
  459.                case 1:n=shuru(stu,n);xianshi(stu,n); break;
  460.                                   
  461.                case 2:xiugai(stu ,n);xianshi(stu,n); break;
  462.                            case 3:shanchu(stu ,n);xianshi(stu,n); break;
  463.                    } break;
  464.   case 2:xianshi(stu,n);break;
  465.   case 3:
  466.              switch(chaxun())
  467.                         {
  468.                case 1:chaxun_xingming(stu,n);break;
  469.                case 2:chaxun_pingjun(stu ,n);break;                          
  470.                    } break;
  471.   case 4:  switch(paixu())
  472.                         {
  473.                case 1:paixu_xuehao(stu,n);xianshi(stu,n); break ;         
  474.                case 2:paixu_chinese(stu ,n);xianshi(stu,n);break;
  475.                            case 3:paixu_math(stu ,n);xianshi(stu,n); break;
  476.                case 4:paixu_english(stu ,n);xianshi(stu,n); break;
  477.                            case 5:paixu_dianlu(stu ,n);xianshi(stu,n); break;
  478.                            case 6:paixu_pingjun(stu ,n);xianshi(stu,n); break;
  479.                    } break;
  480.   case 5:tongji(stu,n);break;
  481.   case 6:
  482.             switch(wenjian())
  483.                         {
  484.                case 1:n=wenjian2(stu,n);break;
  485.             
  486.                case 2:wenjian1(stu ,n);break;
  487.                           
  488.                    } break;
  489.             
  490.        case 0:
  491.               exit(0);   /*结束程序*/
  492.                 }
  493.          }
  494. }
  495. }
复制代码


评分

1

查看全部评分

相关帖子

回复

使用道具 举报

 楼主| 发表于 2016-11-4 21:52:51 | 显示全部楼层
本来想上传编译出来的附件的
结果上传需要flash插件
还是算了
需要的自己编译吧
用vc6.0肯定没问题
别的不清楚
多少年前的小玩意了
经历过C语言课的基本都懂这个程序意味着啥

回复

使用道具 举报

发表于 2016-11-4 22:52:21 | 显示全部楼层
回复

使用道具 举报

发表于 2016-11-5 10:36:30 | 显示全部楼层

怎么了?表示一大堆数组……我都是用c++ vector的……
回复

使用道具 举报

 楼主| 发表于 2016-11-5 12:59:04 | 显示全部楼层
只是纯C语言啊
连注释的格式都是纯C的
现在基本没啥人用纯C写程序了
C也就干干底层
信息安全如果需要二进制位操作可能纯C会好用一点
连控件都没有的C是一种信仰而已
当然可移植性也是很舒服的
就是编码很恶心
尤其是中文的
Unicode
Unicode
Unicode
代码没啥意思
交作业用的代码
连对齐都没调
回复

使用道具 举报

 楼主| 发表于 2016-11-6 00:39:28 | 显示全部楼层
为什么锁进全是乱的?这个和Unicode应该无关了吧……


回复

使用道具 举报

联系站长|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2018-10-16 04:13 , Processed in 0.105298 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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