首页 > 代码库 > [项目记录] 用c语言完成的一个学生成绩管理系统

[项目记录] 用c语言完成的一个学生成绩管理系统

 一、要求:

学生成绩管理系统

 

某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入)。使用链表编程实现如下菜单驱动的学生成绩管理系统。

  1. 从文件读入每个学生个人信息和成绩信息,可以由键盘输入文件名。读入成功提示读入学生记录的个数,不成功提示相应出错信息。
  2. 增量式手动录入每个学生的学号、姓名和各科考试成绩。不考虑中文姓名,但需要考虑重名情况下的处理,学生的学号是唯一的。
  3. 计算每门课程的总分和平均分;
  4. 计算每个学生的总分和平均分;
  5. 按每个学生的总分由高到低排出名次表;
  6. 按每个学生的总分由低到高排出名次表;
  7. 按学号由小到大排出成绩表;
  8. 按姓名的字典顺序排出成绩表;
  9. 按学号查询学生排名及其考试成绩;
  10. 按姓名查询学生排名及其考试成绩;需要考虑学生重名的情况。
  11. 按优秀(100-90)、良好(89-80)、中等(79-70)、及格(69-60)、不及格(59-0)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;并将计算结果输出到文件,文件名可由键盘输入。
  12. 将每个学生的学号、姓名、各科考试成绩、总分和平均分输出到显示器;
  13. 将每个学生的个人信息和成绩写入文件,可由键盘输入文件名;

 

 二、程序结构与设计

  1. 模块划分:

整个函数划分为: 

      a. 用户欢迎与权限通过界面

                b. 主菜单与用户退出界面

                c. 函数调用用程序执行界面

三个模块。

2.主函数的主要功能:

     a. 通过switch函数调用各功能函数

     b. 构建良好亲和的用户体验界面

3. 各子函数主要功能:

F1:  从文件读入每个学生个人信息和成绩信息,可以由键盘输入文件名。读入成功提示读入学生记录的个数,不成功提示相应出错信息。

F2:增量式手动录入每个学生的学号、姓名和各科考试成绩。不考虑中文姓名,但需要考虑重名情况下的处理,学生的学号是唯一的。

F3:计算每门课程的总分和平均分;

F4:计算每个学生的总分和平均分;

F5:按每个学生的总分由高到低排出名次表;

F6:按每个学生的总分由低到高排出名次表;

F7:按学号由小到大排出成绩表;

F8:按姓名的字典顺序排出成绩表;

F9:按学号查询学生排名及其考试成绩;

F10:按姓名查询学生排名及其考试成绩;需要考虑学生重名的情况。

F11:按优秀(100-90)、良好(89-80)、中等(79-70)、及格(69-60)、不及格(59-0)5个类别,对每门课程分别统计每个类别的人数以及所占的百分比;并将计算结果输出到文件,文件名可由键盘输入。

F12:将每个学生的学号、姓名、各科考试成绩、总分和平均分输出到显示器;

F13:将每个学生的个人信息和成绩写入文件,可由键盘输入文件名;

4.函数之间的调用关系:

以结构体数组为主体,辅以链表,通过switch函数调用各功能函数。

Main函数负责对各个小函数的调用,而f1---f13分别完成对题目所要求的13个操作的实现,程序整体大方整洁,风格良好,有较好的结构化特点

 

三、项目代码

技术分享
  1 /*student achievement management system*/  2 #include<stdio.h>  3 #include<stdlib.h>  4 #include<math.h>  5 #include<string.h>  6 #include<windows.h>  7 #define L 32  8 #define N 6  9 #define M 30 10 #define LEN sizeof(struct student) 11 struct student 12 { 13     char name [L];                          ///姓名 14     int num;                                ///学号 15     float ach[N];                           ///成绩数组 16     float total;                            ///总分 17     struct student *next; 18 }; 19 struct student stu[M]; 20 int count=0,n,m,j,i,k,l; 21 char filename[L]={0};                       ///声明变量 存储文件名 22 int f1(int m,int n,char filename[L]); 23 int f2(int m,int n,char filename[L]); 24 int f3(int m,int n,char filename[L]); 25 int f4(int m,int n,char filename[L]); 26 int f5(int m,int n,char filename[L]); 27 int f6(int m,int n,char filename[L]); 28 int f7(int m,int n,char filename[L]); 29 int f8(int m,int n,char filename[L]); 30 int f9(int m,int n,char filename[L]); 31 int f10(int m,int n,char filename[L]); 32 int f11(int m,int n,char filename[L]); 33 int f12(int m,int n,char filename[L]); 34 int f13(int m,int n,char filename[L]); 35 int main() 36 { 37     int cishu=5; 38  r0:    system("CLS"); 39     system("color  0C"); 40     char mima[L]; 41     printf("-------------------------------------------------------------------------------\n"); 42     printf("|                          欢迎使用学生信息管理系统                           |"); 43     printf("-------------------------------------------------------------------------------\n"); 44     printf("\n\n\n\n++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); 45     printf("+                         系  统  权  限  认  证                             +\n"); 46     printf(">>>>>>>>>>>>>>>>>>>>>请提供管理员权限,输入系统启动密码<<<<<<<<<<<<<<<<<<<<<<<\n"); 47     printf("+                                                                            +\n"); 48     printf("+----------------------------------------------------------------------------+\n"); 49     printf("\n>>>>>>    密  码:   "); 50     scanf("%s",&mima); 51     cishu --; 52     for(;strcmp(mima,"LLL1996")!=0;) 53     { 54         if(cishu==0) 55         { 56             printf("对不起,程序即将关闭,谢谢使用"); 57             getchar(); 58             getchar(); 59             exit (1); 60         } 61         else 62         { 63             printf("对不起,密码错误,请重新输入(你还有%d次输入机会)",cishu); 64             getchar(); 65             getchar(); 66             goto r0; 67         } 68     } 69     getchar(); 70     system("CLS"); 71     system("color  BC"); 72     printf("-------------------------------------------------------------------------------\n"); 73     printf("|                        WELCOME  TO  USE  THE  SYSTEM                         |"); 74     printf("-------------------------------------------------------------------------------\n"); 75     printf(" 建议:1. 使用本系统时需要首先输入班级总人数、总科目数、录入信息文件   \n"); 76     printf("       2. 如果您已经有输入文件,建议请先选择选项1,用于检查文件信息总数  \n"); 77     printf("          与录入人数、科目数是否一致,避免计算出错         \n"); 78     printf("       3. 如果您是初次使用本系统请先选择选项2用于创建学生信息文件,录入 \n"); 79     printf("          信息时填写数据较多,并耐心仔细地录入学生信息 \n                         O(∩_∩)O谢谢合作!!\n"); 80     printf("-------------------------------------------------------------------------------\n\n"); 81     printf("\n<<<< 请输入班级的总人数:     "); 82     scanf("%d",&m); 83     printf("\n<<<< 请输入课程总数:     "); 84     scanf("%d",&n); 85     printf("\n<<<< 请输入要读取或录入信息的文件的名字:     ");                   ///提示输入文件名 86     getchar(); 87     gets(filename);                                                 ///接收输入 88     for(j;;j++) 89     { 90         char  xuanze[3]={0}; 91         printf("\n\n>>>>>>>>如果想进行清屏操作请输入yes,如果想跳过清屏直接继续请按任意键!<<<<<<<<\n"); 92         getchar(); 93         gets(xuanze); 94         if(strcmp(xuanze,"yes")==0)    system("CLS"); 95         printf("\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  * * * *"); 96         printf("\n *                      欢迎进入学生成绩信息管理系统                          *"); 97         printf("\n *  一、读取文件                           >>请按1                            *"); 98         printf("\n *  二、录入学生成绩信息                   >>请按2                            *"); 99         printf("\n *  三、课程总成绩与平均分数据统计         >>请按3                            *");100         printf("\n *  四、学生个人总成绩与平均分统计         >>请按4                            *");101         printf("\n *  五、学生成绩降序排名                   >>请按5                            *");102         printf("\n *  六、学生成绩升序排名                   >>请按6                            *");103         printf("\n *  七、学生成绩按学号大小排序             >>请按7                            *");104         printf("\n *  八、姓名字典顺序排出成绩表             >>请按8                            *");105         printf("\n *  九、按学号查询学生排名及其考试成绩     >>请按9                            *");106         printf("\n *  十、按姓名查询学生排名及其考试成绩     >>请按10                           *");107         printf("\n * 十一、学生成绩各等级数据统计            >>请按11     Designd by:刘佳维     *");108         printf("\n * 十二、学生信息输出到屏幕                >>请按12                刘成亮     *");109         printf("\n * 十三、学生信息导出到文件                >>请按13                李乐       *");110         printf("\n *  零 、退出系统                          >>请按0                            *");111         printf("\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *  * * * * * * * * * \n");112         printf("\n请从菜单中选择一项进行操作>>>>>>>>>>\n");113         scanf("%d",&i);114         if(i==0)115             break;116         else117             switch(i)118             {119                 case 1: f1(m,n,filename); break;120                 case 2: f2(m,n,filename); break;121                 case 3: f3(m,n,filename); break;122                 case 4: f4(m,n,filename); break;123                 case 5: f5(m,n,filename); break;124                 case 6: f6(m,n,filename); break;125                 case 7: f7(m,n,filename); break;126                 case 8: f8(m,n,filename); break;127                 case 9: f9(m,n,filename); break;128                 case 10: f10(m,n,filename); break;129                 case 11: f11(m,n,filename); break;130                 case 12: f12(m,n,filename); break;131                 case 13: f13(m,n,filename); break;132                 default: break;133             }134         }135     printf("\n\n=====谢谢使用本系统,祝您生活愉快!=====\n\n");               ///退出界面136     return 0;137 }138 int f1(int m,int n,char filename[L])139 {140     struct student card;141     FILE *file;142     if((file =fopen(filename,"rb"))!=NULL)                      ///打开 并判断143     {144         printf("=====文件打开成功!=====\n\n");                                ///成功则提示成功145         count=0;146         while((fread(&card,sizeof(student),1,file))!=(int)NULL)147         {148             stu[i].num=card.num;149             strcpy(stu[i].name,card.name);150             for(j=0;j<n;j++)151                 stu[i].ach[j]=card.ach[j];152             stu[i].total=card.total;153             count++;154         }155         if(count<m)156             printf("=====已经录入学生信息的有%d人,还需录入%d人的信息=====\n",count,m-count);157         else if(count==m)158             printf("=====已经录入学生信息的有%d人,已经将所有成绩信息录入完毕=====\n",count);159             else160             {161                 printf("=====录入学生信息大于输入的学生总数,系统将自行关闭,请检查信息后再次进入!=====");162                 getchar();163                 exit(1);164             }165         fclose(file);166         return count;167     }168     else169     printf("=====文件打开失败!=====\n");                                  ///打开失败则提示打开失败170     return 0;171 };172 int    f2(int m,int n,char filename[L])173 {174    struct student card;175     FILE *file;176     if((file =fopen(filename,"rb"))!=NULL)                      ///打开 并判断177     {178         count=0;179         while((fread(&card,LEN,1,file))!=(int)NULL)180         {181             stu[i].num=card.num;182             strcpy(stu[i].name,card.name);183             for(j=0;j<n;j++)184                 stu[i].ach[j]=card.ach[j];185             stu[i].total=card.total;186             count++;187         }188         if(count<m)189         {190             printf("=====已经录入学生信息的有%d人,还需录入%d人的信息=====\n",count,m-count);191             printf("<<<< 注:录入信息时,如果想中途停止输入,以后再进行补录,请将学号输为-1,谢谢!\n");192         }193         else  if(count==m)194             printf("=====已经录入学生信息的有%d人,已经将所有成绩信息录入完毕=====\n",count);195             else196             {197                 printf("=====录入学生信息大于输入的学生总数,系统将自行关闭,请检查信息后再次进入!=====");198                 getchar();199                 exit(1);200             }201     }202     fclose(file);203     if((file=fopen(filename,"ab"))!=NULL)204     {205         for(count;count<m;count ++)206         {207             printf("<<<< 请输入该学生的学号:\n");208             scanf("%d",&stu[count].num);209             if(stu[count].num==-1)210                 goto r2;211             for(j=0;j<count;j++)212             {213                 if(stu[j].num==stu[count].num)214                 {215                     printf("=====学号输入重复,输入错误,请检查后再进行录入=====\n");216                     count --;217                     goto r2;218                 }219             }220             stu[count].total=0;221             printf("<<<< 请输入该学生的姓名:\n");222             getchar();223             gets(stu[count].name);224             for(j=1;j<=n;j++)225             {226                 printf("<<<< 请输入该学生第%d门功课的成绩:",j);227                 scanf("%f",&stu[count].ach[j-1]);228                 stu[count].total=stu[count].total+stu[count].ach[j-1];229             }230             fwrite(&stu[count],LEN,1,file);231         }232     }233     printf("\n=====学生信息已成功录入二进制文件 %s 中,谢谢=====\n",filename);234     fclose (file);235 r2:   return 0;236 };237 int f3(int m,int n,char filename[L])238 {239     struct student card;240     FILE *fp1;241     float zf[N]={0};242     fp1=fopen(filename,"rb");243     if(fp1==NULL)244     {245         printf("\n=====文件%s打开失败=====\n",filename);246         goto  r3;247     }248     while((fread(&card,LEN,1,fp1))!=(int)NULL)249     {250         for(i=0;i<n;i++)251         {252             zf[i]=zf[i]+card.ach[i];253         }254     }255     printf("=====课程总成绩与平均分为=====\n");256     for(i=0;i<n;i++)257     {258         printf("<<<<  第%d门课程的总成绩为%.3f    平均分为%.3f\n",i+1,zf[i],zf[i]/m);259     }260     fclose (fp1);261 r3:  return 0;262 };263 int f4(int m,int n,char filename[L])264 {265     struct student card;266     FILE *fp1;267     float zf[M]={0};268     char nam[M][L]={0};269     fp1=fopen(filename,"rb");270     if(fp1==NULL)271     {272         printf("\n=====文件%s打开失败=====\n",filename);273         goto  r4;274     }275     printf("=====学生个人总成绩与平均分为=====\n");276     for(i=0;(fread(&card,LEN,1,fp1))!=(int)NULL;i++)277     {278         strcpy(nam[i],card.name);279         zf[i]=card.total;280         printf("<<<< %s的课程的总成绩为%.3f    平均分为%.3f\n",nam[i],zf[i],zf[i]/n);281     }282     fclose (fp1);283 r4:    return 0;284 }285 int f5(int m,int n,char filename[L])286 {287     struct student card;288     FILE *fp1;289     fp1=fopen(filename,"rb");290     if(fp1==NULL)291     {292         printf("\n=====文件%s打开失败=====\n",filename);293         goto  r5;294     }295     i=0;296     while((fread(&card,sizeof(student),1,fp1))!=(int)NULL)297     {298             stu[i].num=card.num;299             strcpy(stu[i].name,card.name);300             for(j=0;j<n;j++)301                 stu[i].ach[j]=card.ach[j];302             stu[i].total=card.total;303             i++;304     }305     for(k=0;k<=i;k++)306     {307         for(j=k+1;j<i;j++)308             if(stu[k].total<stu[j].total)309             {310                 card=stu[k];311                 stu[k]=stu[j];312                 stu[j]=card;313             }314     }315     printf("=====成绩正序排名为=====\n");316     for(j=0;j<i;j++)317     {318          printf("<<<< 名次;%d     学号:%d      姓名:%s     总分:%.3f\n",j+1,stu[j].num,stu[j].name,stu[j].total);319     }320     fclose (fp1);321 r5:    return 0;322 };323 int f6(int m,int n,char filename[L])324 {325     struct student card;326     FILE *fp1;327     fp1=fopen(filename,"rb");328     if(fp1==NULL)329     {330         printf("\n文件%s打开失败\n",filename);331         goto  r6;332     }333     i=0;334     while((fread(&card,sizeof(student),1,fp1))!=(int)NULL)335     {336             stu[i].num=card.num;337             strcpy(stu[i].name,card.name);338             for(j=0;j<n;j++)339                 stu[i].ach[j]=card.ach[j];340             stu[i].total=card.total;341             i++;342     }343     for(k=0;k<=i;k++)344     {345         for(j=k+1;j<i;j++)346             if(stu[j].total<stu[k].total)347             {348                 card=stu[k];349                 stu[k]=stu[j];350                 stu[j]=card;351             }352     }353     printf("=====成绩倒序排名为=====\n");354     for(j=0;j<i;j++)355     {356          printf("<<<< 名次;%d     学号:%d      姓名:%s     总分:%.3f\n",m-j,stu[j].num,stu[j].name,stu[j].total);357     }358     fclose (fp1);359 r6:    return 0;360 };361 int f7(int m,int n,char filename[L])362 {363     struct student card;364     FILE *fp1;365     fp1=fopen(filename,"rb");366     if(fp1==NULL)367     {368         printf("\n=====文件%s打开失败=====\n",filename);369         goto  r7;370     }371     i=0;372     while((fread(&card,sizeof(student),1,fp1))!=(int)NULL)373     {374             stu[i].num=card.num;375             strcpy(stu[i].name,card.name);376             for(j=0;j<n;j++)377                 stu[i].ach[j]=card.ach[j];378             stu[i].total=card.total;379             i++;380     }381     for(k=0;k<=i;k++)382     {383         for(j=k+1;j<i;j++)384             if(stu[j].num<stu[k].num)385             {386                 card=stu[k];387                 stu[k]=stu[j];388                 stu[j]=card;389             }390     }391     printf("=====成绩依靠学号顺序排名=====\n");392     for(j=0;j<i;j++)393     {394          printf("----------------------------------------------------\n");395          printf("序号;%d      学号:%d       姓名:%s\n",j+1,stu[j].num,stu[j].name);396          for(k=0;k<n;k++)397             printf("第%d科:%.3f    ",k+1,stu[j].ach[k]);398          printf("\n总分%.3f      平均分%.3f\n",stu[j].total,stu[j].total/n);399     }400     printf("----------------------------------------------------");401     fclose(fp1);402 r7:   return 0;403 };404 405 int f8(int m,int n,char filename[L])406 {407     struct student card;408     FILE *fp1;409     fp1=fopen(filename,"rb");410     if(fp1==NULL)411     {412         printf("\n=====文件%s打开失败=====\n",filename);413         goto  r8;414     }415     i=0;416     while((fread(&card,sizeof(student),1,fp1))!=(int)NULL)417     {418             stu[i].num=card.num;419             strcpy(stu[i].name,card.name);420             for(j=0;j<n;j++)421                 stu[i].ach[j]=card.ach[j];422             stu[i].total=card.total;423             i++;424     }                                                          ///将信息读入结构体425     for(i=0;i<m-1;i++)426         for(j=i+1;j<m;j++)427             if(strcmp(stu[i].name,stu[j].name)>0)428             {429                   card=stu[i];430                   stu[i]=stu[j];431                   stu[j]=card;432             }433             printf("=====按姓名的字典顺序排出成绩表=====");434              for(k=0;k<m;k++)435             {436 437                 printf("----------------------------------------------------\n");438                 printf("序号;%d      学号:%d       姓名:%s\n",k+1,stu[k].num,stu[k].name);439                 for(i=0;i<n;i++)440                     printf("第%d科:%.3f    ",i+1,stu[k].ach[i]);441                 printf("\n总分%.3f      平均分%.3f\n",stu[k].total,stu[k].total/n);442             }443     printf("----------------------------------------------------");444     fclose(fp1);445 r8: return 0;446 };447 int f9(int m,int n,char filename[L])448 {449     struct student *head,*p1,*p2;450     int ChooseNum;451     printf("=====请输入要查询信息的学生的学号:=====\n");452     scanf("%d",&ChooseNum);453     struct student card;454     FILE *fp1;455     fp1=fopen(filename,"rb");456     if(fp1==NULL)457     {458         printf("\n=====文件%s打开失败=====\n",filename);459         goto  r9;460     }461     i=0;462     while((fread(&card,LEN,1,fp1))!=(int)NULL)463     {464             stu[i].num=card.num;465             strcpy(stu[i].name,card.name);466             for(j=0;j<n;j++)467                 stu[i].ach[j]=card.ach[j];468             stu[i].total=card.total;469             i++;470     }                                                                ///读入到结构体数组471     for(k=0;k<=i;k++)472     {473         for(j=k+1;j<i;j++)474             if(stu[k].total<stu[j].total)475             {476                 card=stu[k];477                 stu[k]=stu[j];478                 stu[j]=card;479             }480     }                                                                ///排名481     head=&stu[0];482     p1=&stu[1];483     p2=NULL;484     head->next=p1;485     p1->next=p2;                                                    ///建立链表486     if(head->num==ChooseNum)487     {488          {489             printf("名次;%d      学号:%d       姓名:%s\n",i+1,head->num,head->name);490             for(k=0;k<n;k++)491                 printf("第%d科:%.3f    ",k+1,head->ach[k]);492             printf("\n总分%.3f      平均分%.3f\n",head->total,head->total/n);493             goto r9;494          }495     }496     else497         for(i=1;1<m;i++)498         {499             p1=&stu[i];500             p1->next=p2;501             if(p1->num==ChooseNum)502             {503                 printf("名次;%d      学号:%d       姓名:%s\n",i+1,p1->num,p1->name);504                 for(k=0;k<n;k++)505                     printf("第%d科:%.3f    ",k+1,p1->ach[k]);506                 printf("\n总分%.3f      平均分%.3f\n",p1->total,p1->total/n);507                 goto r9;508             }509             else {510                 printf("没有该学号!!!!!!");511                 goto r9;512             }513         }514 r9:  return 0;515 }516 int f10(int m,int n,char filename[L])517 {518     char ChooseName[L];519     printf("<<<< 请输入要查询的学生的姓名:\n");520     getchar();521     gets(ChooseName);522     struct student card;523     FILE *fp1;524     fp1=fopen(filename,"rb");525     if(fp1==NULL)526     {527         printf("\n=====文件%s打开失败=====\n",filename);528         goto  r10;529     }530     i=0;531     while((fread(&card,sizeof(student),1,fp1))!=(int)NULL)532     {533             stu[i].num=card.num;534             strcpy(stu[i].name,card.name);535             for(j=0;j<n;j++)536                 stu[i].ach[j]=card.ach[j];537             stu[i].total=card.total;538             i++;539     }540     for(k=0;k<=i;k++)541     {542         for(j=k+1;j<i;j++)543             if(stu[k].total<stu[j].total)544             {545                 card=stu[k];546                 stu[k]=stu[j];547                 stu[j]=card;548             }549     }550     printf("=====按姓名查询学生排名及其考试成绩=====\n");551      for(j=0;j<i;j++)552     {553         if(strcmp(stu[j].name,ChooseName)==0)554         {555             printf("----------------------------------------------------\n");556             printf("名次;%d      学号:%d       姓名:%s\n",j+1,stu[j].num,stu[j].name);557             for(k=0;k<n;k++)558                 printf("第%d科:%.3f    ",k+1,stu[j].ach[k]);559             printf("\n总分%.3f      平均分%.3f\n",stu[j].total,stu[j].total/n);560         }561     }562     printf("----------------------------------------------------");563     fclose(fp1);564  r10:  return 0;565 };566 int f11(int m,int n,char filename[L])567 {568     char  output[L];569     float a=0,b=0,c=0,d=0,e=0;570     struct student card;571     FILE *fp1,*fp2;572     fp1=fopen(filename,"rb");573     printf("\n<<<< 请输入要输出到文件的名字:\n");                   ///提示输入文件名574     getchar();575     gets(output);                                                 ///接收输入576     fp2=fopen(output,"w");577     if(fp1==NULL)578     {579         printf("\n=====文件%s打开失败=====\n",filename);580         goto  r11;581     }582     if(fp2==NULL)583     {584         printf("\n=====文件%s打开失败=====\n",output);585         goto  r11;586     }587     i=0;588     while((fread(&card,sizeof(student),1,fp1))!=(int)NULL)589     {590             stu[i].num=card.num;591             strcpy(stu[i].name,card.name);592             for(j=0;j<n;j++)593                 stu[i].ach[j]=card.ach[j];594             stu[i].total=card.total;595             i++;596     }597     fprintf(fp2,"=======================================各科目成绩分析=============================================\n总参考人数:%d\n考试科目数:%d\n",i,n);598     fprintf(fp2,"   科目     优秀(比例)      良好(比例)     中等(比例)     及格(比例)     不及格(比例)\n");599     fprintf(fp2,"             <90-100>           <80-89>          <70-79>          <60-69>           <0-59>\n");600     fprintf(fp2,"==================================================================================================\n");601     for(k=0;k<n;k++)       ///课程602     {603         a=0,b=0,c=0,d=0,e=0;604         for(j=0;j<m;j++)    ///学生605         {606             if((stu[j].ach[k]<=100)&&(stu[j].ach[k]>=90))607                 a++;608             else if((stu[j].ach[k]<=89)&&(stu[j].ach[k]>=80))609                     b++;610                 else if((stu[j].ach[k]<=79)&&(stu[j].ach[k]>70))611                         c++;612                     else if((stu[j].ach[k]<=69)&&(stu[j].ach[k]>=60))613                             d++;614                         else if((stu[j].ach[k]<=59)&&(stu[j].ach[k]>=0))615                                 e++;616         }617         fprintf(fp2,"   第%d科     %.0f人(%.3f%%)    %.0f人(%.3f%%)    %.0f人(%.3f%%)    %.0f人(%.3f%%)    %.0f人(%.3f%%)\n",k+1,a,a/m*100,b,b/m*100,c,c/m*100,d,d/m*100,e,e/m*100);618     }619     printf("=====已经将所有信息写入到文件%s中,请注意接收!=====\n",output);620 r11:  return 0;621 };622 int f12(int m,int n,char filename[L])623 {624     struct student card;625     FILE *fp1;626     fp1=fopen(filename,"rb");627     if(fp1==NULL)628     {629         printf("\n=====文件%s打开失败=====\n",filename);630         goto  r12;631     }632     i=0;633     while((fread(&card,sizeof(student),1,fp1))!=(int)NULL)634     {635             stu[i].num=card.num;636             strcpy(stu[i].name,card.name);637             for(j=0;j<n;j++)638                 stu[i].ach[j]=card.ach[j];639             stu[i].total=card.total;640             i++;641     }642     for(k=0;k<=i;k++)643     {644         for(j=k+1;j<i;j++)645             if(stu[k].total<stu[j].total)646             {647                 card=stu[k];648                 stu[k]=stu[j];649                 stu[j]=card;650             }651     }652     printf("=====学生所有信息屏幕输出=====\n");653      for(j=0;j<i;j++)654     {655          printf("----------------------------------------------------\n");656          printf("名次;%d      学号:%d       姓名:%s\n",j+1,stu[j].num,stu[j].name);657          for(k=0;k<n;k++)658             printf("第%d科:%.3f    ",k+1,stu[j].ach[k]);659          printf("\n总分%.3f      平均分%.3f\n",stu[j].total,stu[j].total/n);660     }661     printf("----------------------------------------------------");662     fclose(fp1);663  r12:  return 0;664 };665 int f13(int m,int n,char filename[L])666 {667     char  output[L]={0};668     struct student card;669     FILE *fp1,*fp2;670     fp1=fopen(filename,"rb");671     printf("\n<<<< 请输入要输出到文件的名字:\n");                   ///提示输入文件名672     getchar();673     gets(output);                                                 ///接收输入674     fp2=fopen(output,"w");675     if(fp1==NULL)676     {677         printf("\n=====文件%s打开失败=====\n",filename);678         goto  r13;679     }680     if(fp2==NULL)681     {682         printf("\n=====文件%s打开失败=====\n",output);683         goto  r13;684     }685     i=0;686     while((fread(&card,LEN,1,fp1))!=(int)NULL)687     {688             stu[i].num=card.num;689             strcpy(stu[i].name,card.name);690             for(j=0;j<n;j++)691                 stu[i].ach[j]=card.ach[j];692             stu[i].total=card.total;693             i++;694     }695     for(k=0;k<=i;k++)696     {697         for(j=k+1;j<i;j++)698             if(stu[k].total<stu[j].total)699             {700                 card=stu[k];701                 stu[k]=stu[j];702                 stu[j]=card;703             }704     }705     printf("=====已经将所有信息写入到文件%s中,请注意接收!=====\n",output);706      for(j=0;j<i;j++)707     {708          fprintf(fp2,"----------------------------------------------------\n");709          fprintf(fp2,"名次;%d      学号:%d       姓名:%s\n",j+1,stu[j].num,stu[j].name);710          for(k=0;k<n;k++)711             fprintf(fp2,"第%d科:%.3f    ",k+1,stu[j].ach[k]);712          fprintf(fp2,"\n总分%.3f      平均分%.3f\n",stu[j].total,stu[j].total/n);713     }714     fprintf(fp2,"----------------------------------------------------");715     fclose(fp1);716     fclose(fp2);717  r13:  return 0;718 };
View Code

 

 

四、程序备注

这是笔者在大一刚学c的时候做的,虽然简单,但实现了所有上文的功能,今天不知咋的,突然翻了出来,心想不如写入博客,也算留个备份

笔者在vc6.0和codeblocks下均通过运行,进入系统的密码为LLL1996

本程序纯属原创,如有引用,请注明出处

 

[项目记录] 用c语言完成的一个学生成绩管理系统