首页 > 编程 > C > 正文

C语言版学生成绩管理系统

2020-01-26 13:48:17
字体:
来源:转载
供稿:网友

本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下

#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D://data"; char tmp[]="D://tmp"; struct Student {   char Name[20];   char No[20];   char Dept[20];   char ClassNo[20];   double Math,Chinese,English;   double Ave;   bool Pass; }students[500]; bool cmp1(Student s1,Student s2) {   return s1.Chinese>s2.Chinese; } bool cmp2(Student s1,Student s2) {   return s1.Math>s2.Math; } bool cmp3(Student s1,Student s2) {   return s1.English>s2.English; } bool cmp4(Student s1,Student s2) {   return s1.Ave>s2.Ave; } //---------------------------------------------------------void Sort(int cmd) /* 1 ChineseSort 2 MathSort 3 EnglishSort 4 AveSort */ int Sort(int cmd) {   Student stu;   FILE *fp=fopen(path,"ab+");   int n,cnt=0;   while((n=fread(&stu,sizeof(stu),1,fp)>0))   {     students[cnt++]=stu;   }   fclose(fp);   switch(cmd)   {   case 1:   std::sort(students,students+cnt,cmp1);     break;   case 2:   std::sort(students,students+cnt,cmp2);     break;   case 3:   std::sort(students,students+cnt,cmp3);     break;   case 4:   std::sort(students,students+cnt,cmp4);     break;   default:     exit(0);   }   return cnt; } //---------------------------------------------------------PrintTitle() void PrintTitle() {   printf("%-8s%-12s%-12s%-8s%-7s%-7s%-7s%-7s%-s/n","姓名","班级","学号","系院","语文","数学","英语","平均分","及格"); } //---------------------------------------------------------Print(Student stu) void Print(Student stu) {   printf("%-8s%-12s%-12s%-8s%-7.2lf%-7.2lf%-7.2lf%-7.2lf%-s/n",stu.Name,stu.ClassNo,stu.No,stu.Dept,stu.Chinese,stu.Math,stu.English,stu.Ave,stu.Pass?"是":"否"); } //---------------------------------------------------------PrintNo(char No[]) void PrintNo(char No[]) {   Student stu;   int n;   bool find=0;   FILE *fp=fopen(path,"ab+");//以ab+方式打开防止data文件不存在时发生错误   while((n=fread(&stu,sizeof(stu),1,fp))>0)   {     if(!strcmp(stu.No,No))     {       find=1;       break;     }   }   fclose(fp);   if(find)   {     PrintTitle();     Print(stu);   }   else     puts("未找到!"); } //---------------------------------------------------------PrintClass(char ClassNo[]) void PrintClass(char ClassNo[]) {   Student stu;   FILE *fp=fopen(path,"ab+");   int n,cnt=0;   while((n=fread(&stu,sizeof(stu),1,fp)>0))   {     if(!strcmp(stu.ClassNo,ClassNo))     {       if(cnt==0)         PrintTitle();       Print(stu);       cnt++;     }   }   fclose(fp);   if(cnt==0)     puts("无数据");   else     printf("共%d条/n",cnt); } //---------------------------------------------------------PrintDept(char Dept[]) void PrintDept(char Dept[]) {     Student stu;   FILE *fp=fopen(path,"ab+");   int n,cnt=0;   while((n=fread(&stu,sizeof(stu),1,fp)>0))   {     if(!strcmp(stu.Dept,Dept))     {       if(cnt==0)         PrintTitle();       Print(stu);       cnt++;     }   }   fclose(fp);   if(cnt==0)     puts("无数据");   else     printf("共%d条/n",cnt); } //---------------------------------------------------------PrintAll() void PrintAll() {   Student stu;   FILE *fp=fopen(path,"ab+");   int n,cnt=0;   while((n=fread(&stu,sizeof(stu),1,fp)>0))   {     if(cnt==0)       PrintTitle();     Print(stu);     cnt++;   }   fclose(fp);   if(cnt==0)     puts("无数据");   else     printf("共%d条/n",cnt); } //---------------------------------------------------------Input() Student Input() {   Student stu;   puts("请输入姓名、班级、学号、系院:");   scanf("%s%s%s%s",&stu.Name,&stu.ClassNo,&stu.No,&stu.Dept);   puts("请输入各科成绩:语文、数学、英语");   scanf("%lf%lf%lf",&stu.Chinese,&stu.Math,&stu.English);   stu.Ave=(stu.Chinese+stu.Math+stu.English)/3;   if(stu.Chinese>=60&&stu.Math>=60&&stu.English>=60)     stu.Pass=1;   else     stu.Pass=0;   return stu; } //---------------------------------------------------------Insert() void Insert() {   int cmd;   do{     Student stu=Input();     FILE *fp=fopen(path,"ab+");     fwrite(&stu,sizeof(stu),1,fp);     fclose(fp);     puts("录入成功");     puts("继续录入吗?[1]是[0]否");     scanf("%d",&cmd);   }while(cmd==1); } //---------------------------------------------------------Del() void Del() {   int cmd,cmd2;   char No[20];   do{   puts("请输入要删除的学号:");   scanf("%s",&No);   Student stu;   FILE *fp=fopen(path,"ab+");   FILE *fp2=fopen(tmp,"wb");   int n,find=0;   while((n=fread(&stu,sizeof(stu),1,fp))>0)   {     if(!strcmp(stu.No,No))     {       find=1;       Print(stu);       puts("确定要删除吗?[1]确定[0]取消");       scanf("%d",&cmd2);       if(cmd2==1)         puts("已删除");       else         fwrite(&stu,sizeof(stu),1,fp2);     }     else     fwrite(&stu,sizeof(stu),1,fp2);   }   fclose(fp);   fclose(fp2);   if(find==0)   {     printf("未找到学号%s/n",No);     remove(tmp);   }   else   {     remove(path);     rename(tmp,path);   }   puts("继续删除吗?[1]是[0]否");   scanf("%d",&cmd);   }while(cmd==1); } //---------------------------------------------------------Change() void Change() {     int cmd;   char No[20];   do{   puts("请输入要更改的学号:");   scanf("%s",&No);   Student stu;   int find=0;   FILE *fp=fopen(path,"ab+");   FILE *fp2=fopen(tmp,"wb");   int n;   while((n=fread(&stu,sizeof(stu),1,fp))>0)   {     if(!strcmp(stu.No,No))     {       find=1;       stu=Input();       fwrite(&stu,sizeof(stu),1,fp2);     }     else       fwrite(&stu,sizeof(stu),1,fp2);   }   fclose(fp);   fclose(fp2);   if(find)   {     remove(path);     rename(tmp,path);     puts("更改成功!");   }   else   {     printf("未找到学号%s/n",No);     remove(tmp);   }   puts("继续更改吗?[1]是[0]否");   scanf("%d",&cmd);   }while(cmd==1); } //---------------------------------------------------------AboutCourse void Chinese() {   double sum=0,ave;   int pass=0,fail=0,better=0;   Student stu;   FILE *fp=fopen(path,"ab+");   int n,cnt=Sort(1);   while((n=fread(&stu,sizeof(stu),1,fp))>0)   {     sum+=stu.Chinese;     if(stu.Chinese>=60)       {         pass++;         if(stu.Chinese>=80)           better++;       }     else       fail++;   }   ave=sum/cnt;   puts("语文成绩分析……");   printf("共有%d学生/n优秀:%d人/n及格:%d人/n不及格:%d人/n及格率:%.2lf%%/n",cnt,better,pass,fail,100.0*pass/cnt);   printf("%-8s%-10s%-12s%-s/n","名次","姓名","学号","语文");   for(int i=0;i<cnt;i++)   {     printf("第%2d名 %-10s%-12s%-8.2lf/n",i+1,students[i].Name,students[i].No,students[i].Chinese);   }   printf("平均分:%.2lf/n",ave); } void Math() {   double sum=0,ave;   int pass=0,fail=0,better=0;   Student stu;   FILE *fp=fopen(path,"ab+");   int n,cnt=Sort(2);   while((n=fread(&stu,sizeof(stu),1,fp))>0)   {     sum+=stu.Math;     if(stu.Math>=60)       {         pass++;         if(stu.Math>=80)           better++;       }     else       fail++;   }   ave=sum/cnt;   puts("数学成绩分析……");   printf("共有%d学生/n优秀:%d人/n及格:%d人/n不及格:%d人/n及格率:%.2lf%%/n",cnt,better,pass,fail,100.0*pass/cnt);   printf("%-8s%-10s%-12s%-s/n","名次","姓名","学号","数学");   for(int i=0;i<cnt;i++)   {     printf("第%2d名 %-10s%-12s%-8.2lf/n",i+1,students[i].Name,students[i].No,students[i].Math);   }   printf("平均分:%.2lf/n",ave); } void English() {   double sum=0,ave;   int pass=0,fail=0,better=0;   Student stu;   FILE *fp=fopen(path,"ab+");   int n,cnt=Sort(3);   while((n=fread(&stu,sizeof(stu),1,fp))>0)   {       sum+=stu.English;     if(stu.English>=60)       {         pass++;         if(stu.English>=80)           better++;       }     else       fail++;   }   ave=sum/cnt;   puts("英语成绩分析……");   printf("共有%d学生/n优秀:%d人/n及格:%d人/n不及格:%d人/n及格率:%.2lf%%/n",cnt,better,pass,fail,100.0*pass/cnt);   printf("%-8s%-10s%-12s%-s/n","名次","姓名","学号","英语");   for(int i=0;i<cnt;i++)   {     printf("第%2d名 %-10s%-12s%-8.2lf/n",i+1,students[i].Name,students[i].No,students[i].English);   }   printf("平均分:%.2lf/n",ave); } void Average() {   Student stu;   int n,cnt=Sort(4);   double sum=0;   FILE *fp=fopen(path,"ab+");   while((n=fread(&stu,sizeof(stu),1,fp))>0)   {       sum+=stu.Chinese;     sum+=stu.Math;     sum+=stu.English;   }   puts("平均成绩分析……");   printf("%-8s%-10s%-12s%-s/n","名次","姓名","学号","平均成绩");   for(int i=0;i<cnt;i++)   {     printf("第%2d名 %-10s%-12s%-8.2lf/n",i+1,students[i].Name,students[i].No,students[i].Ave);   }   printf("平均分:%.2lf/n",sum/cnt/3); } //---------------------------------------------------------Search() void Search() {   int cmd,cmd2;   while(1)   {     system("cls");     puts("[1] 按学号查询");     puts("[2] 按班级查询");     puts("[3] 输出全部");     puts("[4] 按系别查询");     puts("[5] 课程分析");     puts("[0] 返回主界面");     scanf("%d",&cmd);     if(cmd==0)       break;     switch(cmd)     {     case 1:       {       char No[20];       puts("请输入要查询的学号:");       scanf("%s",&No);       PrintNo(No);       }       break;     case 2:       {         char ClassNo[20];         puts("请输入要查询班级号:");         scanf("%s",&ClassNo);         PrintClass(ClassNo);       }       break;     case 3:       PrintAll();       break;     case 4:       {         char Dept[20];         puts("请输入要查询的系别:");         scanf("%s",&Dept);         PrintDept(Dept);       }       break;     case 5:       while(1)       {         puts("[1] 语文成绩分析");         puts("[2] 数学成绩分析");         puts("[3] 英语成绩分析");         puts("[4] 平均成绩分析");         puts("[0] 返回上一级");         scanf("%d",&cmd2);         if(cmd2==0)           break;         switch(cmd2)         {         case 1:           Chinese();           break;         case 2:           Math();           break;         case 3:           English();           break;         case 4:           Average();           break;         default:           puts("不合法指令!");         }       }       break;     default:       puts("不合法指令!");     }     while(1)     {       puts("[0] 返回");       puts("[1] 录入");       puts("[2] 删除");       puts("[3] 修改");       scanf("%d",&cmd2);       if(cmd2==0)         break;       switch(cmd2)       {       case 1:         Insert();           break;       case 2:         Del();         break;       case 3:         Change();         break;       default:         puts("不合法指令!");       }     }   } } //---------------------------------------------------------Menu() void ShowMenu1() {     int i;   puts("");   printf("         ");   for(i=0;i<14;i++)     putchar(c);   printf("成绩管理分析系统");   for(i=0;i<14;i++)     putchar(c);   puts("");   printf("        %c                       %c/n",c,c);   printf("         %c        请输入指令        %c/n",c,c);   printf("        %c                       %c/n",c,c);   printf("         %c        [0] 退出         %c/n",c,c);   printf("        %c                       %c/n",c,c);   printf("         %c        [1] 录入         %c/n",c,c);   printf("        %c                       %c/n",c,c);   printf("         %c        [2] 删除         %c/n",c,c);   printf("        %c                       %c/n",c,c);   printf("         %c        [3] 查询         %c/n",c,c);   printf("        %c                       %c/n",c,c);   printf("         %c        [4] 更改         %c/n",c,c);   printf("        %c                       %c/n",c,c);   printf("         ");   for(i=0;i<44;i++)     putchar(c);   puts(""); } void ShowMenu2() {     int i;   puts("");   printf("         ");   for(i=0;i<14;i++)     putchar(c);   printf("成绩管理分析系统");   for(i=0;i<14;i++)     putchar(c);   puts("");   printf("         %c                     %c/n",c,c);   printf("        %c         请输入指令         %c/n",c,c);   printf("         %c                     %c/n",c,c);   printf("        %c         [0] 退出          %c/n",c,c);   printf("         %c                     %c/n",c,c);   printf("        %c         [1] 录入          %c/n",c,c);   printf("         %c                     %c/n",c,c);   printf("        %c         [2] 删除          %c/n",c,c);   printf("         %c                     %c/n",c,c);   printf("        %c         [3] 查询          %c/n",c,c);   printf("         %c                     %c/n",c,c);   printf("        %c         [4] 更改          %c/n",c,c);   printf("         %c                     %c/n",c,c);   printf("         ");   for(i=0;i<44;i++)     putchar(c);   puts(""); } //---------------------------------------------------------void RandColor() void RandColor() {   int a,b;   char param[20]="color ",param2[10];   do{     a=rand()%16;     b=rand()%16;   }while(a==b);   sprintf(param2,"%x%x",a,b);   strcat(param,param2);   system(param); } //---------------------------------------------------------main() int main() {   int cmd;   srand(time(NULL));   for(int i=0;i<8;i++)   {   RandColor();   system("cls");   ShowMenu1();   system("cls");   ShowMenu2();   }   system("color 0a");   while(1)   {     system("cls");     ShowMenu1();     printf("[ ]/b/b");     scanf("%d",&cmd);     if(cmd==0)       break;     switch(cmd)     {     case 1:       Insert();       break;     case 2:       Del();       break;     case 3:       Search();       break;     case 4:       Change();       break;     default:       puts("命令不合法!");     }   }   return 0; } 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选