1、C语言专业课程设计学生成绩标准管理系统解说#include#include#include#include/* strcmp函数原型包含*/#define N 100/*定义最大学生人数为100*/struct student /*学生结构体定义*/ char no11; /*学号,10位*/ char name10;/*姓名,3个汉字*/ char grade10;/*班级*/ char pro20;/*专业*/ float score5;/*储存5门功课的成绩*/ float ave;/*储存平均分*/ int year;/*入学年*/stuN;int num;void panduani(
2、int); /*通过i的值,判断信息要查找的信息是否存在*/void output(); /*输出学生成绩函数(公共函数)*/void init(); /*系统初始化函数*/void newfile(); /*建立新的数据文件*/void read1(); /*从数据文件中读取数据*/void weihu(); /*维护界面函数*/void new1(); /*新增一个学生成绩函数*/void xiugai(); /*修改学生成绩*/void xgcj(int); /*修改成绩*/void delete1(); /*删除学生信息函数*/void tongji(); /*统计界面函数*/void
3、 tongji1(); /*计算每个学生平均分*/void tongji2(); /*计算每门课程的平均分*/void paixu1(); /*排序函数*/void paino(); /*按学号排序*/void paiave(); /*按平均分排序*/void paidkcj(); /*按单科成绩排序*/void change(int,int); /*交换结构体数组中的两个记录*/void outputx(int); /*选择输出单科成绩*/void find1(); /*查找界面函数*/int find(char sno); /*按学号查找*/int findname(char cname)
4、;/*按姓名查找*/void findyear(int cyear); /*按入学年查找*/void save(); /*保存文件*/void stop(); /*停顿函数*/void stop() /*停顿函数 (公共函数)*/ printf(Press Any Key To Continue.n); getchar();void output() /*输出学生成绩函数(公共函数)*/ int i,j; printf(=n); printf(学号 姓名 班级 专业 入学年 C语言 高数 大物 电路 模电n); printf(=n); for(i=0;inum;i+) printf(%s %s
5、 %s %s %d,stui.no,stui.name,stui.grade,stui.pro,stui.year); for(j=0;j5;j+) printf( %.1f,stui.scorej); printf(n); stop();void init() /*系统初始化函数 */ if(access(,0) /*判断文件是否存在*/ newfile(); /*若不存在,新建数据文件*/ else read1(); /*若存在,读取数据*/void newfile() /*建立新的数据文件 */ int i; FILE *fp; if(fp=fopen(,wb)=NULL) /*创建二进
6、制文件*/ printf(创建文件失败,请重新运行程序.n); /*显示创建文件失败,请重新运行程序*/ exit(0); /*终止程序*/ printf(初次运行,进行数据初始化.n);/*显示初次运行,进行数据初始化.*/ stop(); printf(请输入学生人数:);/*显示请输入学生人数:*/ scanf(%d,&num); for(i=0;inum;i+) printf(请输入第 %d个学生的学号:,i+1); /*显示请输入第i+1个学生的学号:*/ getchar(); /*吃回车*/ gets(stui.no); printf(姓名:); /*显示姓名:*/ gets(st
7、ui.name); printf(班级:); /*显示班级:*/ gets(stui.grade); printf(专业:); /*显示专业:*/ gets(stui.pro); printf(入学年n:);/*显示入学年*/ scanf(%d,&stui.year); printf(C语言成绩:);/*显示C语言成绩*/ scanf(%f,&stui.score0); printf(高数成绩:);/*显示高数成绩*/ scanf(%f,&stui.score1); printf(大物成绩:);/*显示大物成绩*/ scanf(%f,&stui.score2); printf(电路成绩:);/
8、*显示电路成绩*/ scanf(%f,&stui.score3); printf(模电成绩:);/*显示模电成绩*/ scanf(%f,&stui.score4); fwrite(&stui,1,sizeof(struct student),fp); /*把第i+1名学生成绩写入文件*/ fclose(fp); printf(=n); printf( 刚才输入的 %d 个数据为:n,num); /*显示刚才输入的 num 个数据为:*/ printf(=nn); output();void read1() /*从数据文件中读取数据 */ FILE *fp; num=0; /*num为数据文件中
9、实际存储的学生人数*/ fp=fopen(,r); if(fp=NULL) /*数据文件不存在*/ printf(文件打开失败!重新运行程序n); /*显示文件打开失败!重新运行程序*/ exit(0); while(!feof(fp) /*文件结束检测*/ fread(&stunum,1,sizeof(struct student),fp); num+; num-; fclose(fp); printf(ttt=n); printf( ttt现有 %d 个学生的成绩:n,num); /*显示现有 NUM个学生的成绩:*/ /*返回*/ printf(ttt*n); printf(ttt 请选
10、择:n);/*请选择:*/ c1=getchar(); getchar(); if(c1=9) break; switch(c1) case 1: new1(); break; case 2: delete1(); case 3: xiugai(); break; default: printf(选择有误,请重选!n);/*选择有误,请重选!*/ void new1() /*新增一个学生成绩函数 */ printf(请输入学号:); /*显示请输入学号:*/ gets(stunum.no); printf(姓名:); /*显示姓名:*/ gets(stunum.name); printf(班级
11、:); /*显示班级:*/ gets(stunum.grade); printf(专业:); /*显示专业:*/ gets(stunum.pro); printf(入学年:);/*显示入学年*/ scanf(%d,&stunum.year); printf(C语言成绩:);/*显示C语言成绩*/ scanf(%f,&stunum.score0); printf(高数成绩:);/*显示高数成绩*/ scanf(%f,&stunum.score1); printf(大物成绩:);/*显示大物成绩*/ scanf(%f,&stunum.score2); printf(电路成绩:);/*显示电路成绩*
12、/ scanf(%f,&stunum.score3); printf(模电成绩:);/*显示模电成绩*/ scanf(%f,&stunum.score4); num+; printf(n=n); printf(现有 %d个学生的成绩:n,num); /*显示现有 NUM个学生的成绩:*/ printf(=nn); output();void xiugai() /*修改学生成绩*/ char xg11; int i; printf(n请输入要修改学生的学号:nn); gets(xg); for(i=0;i=1&c=5) k=c-49; printf(n请输入 %s 成绩:n,p+k); scan
13、f(%f,&stux.scorek); printf(n修 息为:n); printf(学号 姓名 班级 专业 入学年 C语言 高数 大物 电路 模电n); printf(=n); printf(%s %s %s %s %d,stux.no,stux.name,stux.grade,stux.pro,stux.year); for(j=0;j5;j+) printf( %.1f,stux.scorej); printf(n); else printf(n选择有误,请重选!nn); stop(); int find(char sno) /*按学号查找 */ int i; for(i=0;inum
14、;i+) if(strcmp(stui.no,sno)=0) /*判断两个字符串相等*/ return i;/*查找成功*/ return -1;/*查找失败*/void delete1() /*删除学生信息函数*/ char cno11; int i,j; printf(请输入要删除的学生学号:); /*请输入要删除的学生学号*/ gets(cno); i=find(cno); if(i!=-1) for(j=i;jnum;j+) stuj=stuj+1; num-; printf(现有%d 个学生的成绩:n,num); /*显示现有 NUM个学生的成绩:*/ output(); else
15、printf(请输入正确的学号. n); stop();void tongji() /*统计界面函数 */ int i; char c2; while(1) printf(nnnttt*n); printf(ttt* 统计 *n); printf(ttt* 1. 学生平均分 *n); /*计算学生平均分*/ printf(ttt* 2. 课程平均分 *n); /*计算每门课程平均分*/ printf(ttt* 9. 返回 *n); /*返回*/ printf(ttt*n); printf(ttt请选择:n);/*请选择:*/ c2=getchar(); getchar(); if(c2=9)
16、break; switch(c2) case 1: tongji1(); printf(nn学生平均分为:n); printf(=n); printf(学号 姓名 入学年 平均分n); printf(=n); for(i=0;inum;i+) printf(%s %s %d %.2fn,stui.no,stui.name,stui.year,stui.ave); stop(); break; case 2: tongji2(); break; default: printf(选择有误,请重选n);/*选择有误,请重选!*/ void tongji1() /*计算每个学生平均分*/ int i,
17、j; for(i=0;inum;i+) stui.ave=0; for(j=0;j5;j+) stui.ave+=stui.scorej; stui.ave=stui.ave/5; void tongji2() /*计算每门课程的平均分*/ int i,j; float sum; float avec5; /*储存每门课的平均分*/ for(j=0;j5;j+) sum=0; for(i=0;inum;i+) sum+=stui.scorej; avecj=sum/num; printf(nn各科平均分:n);/*各科平均分:*/ printf(=n); printf(C语言 高数 大物 电路
18、 模电n); printf(=n); for(i=0;i5;i+) printf(%,aveci); printf(n); stop();void paixu1() /*排序界面*/ char c3; for(;) printf(nnn); printf(ttt*n); printf(ttt* 排序 * n); printf(ttt* 1. 按学号排序 * n); /*按学号排序*/ printf(ttt* 2. 按平均分排序 * n); /*按平均分排序*/ printf(ttt* 3. 按单科成绩排序 * n); /*按单科成绩排序*/ printf(ttt* 9. 返回 * n); /*
19、返回*/ printf(ttt*nn); printf(t请选择:():n);/*请选择:*/ c3=getchar(); getchar(); if(c3=9) break; switch(c3) case 1:paino();break; case 2:paiave();break; case 3:paidkcj();break; default: printf(n选择有误,请重选!nn);/*选择有误,请重选!*/ stop(); void paino() /*按学号排序*/ /*按学号从低到高冒泡法排序*/ int i,j; for(i=0;inum;i+) for(j=0;j0) c
20、hange(j,j+1); printf(n排序后为:n); /*排序后为:*/ output();void paiave() /*按平均分排序 */ /*按平均分从高到低冒泡法排序*/ int i,j; tongji1(); /*计算平均成绩*/ for(i=0;inum;i+) for(j=0;jnum-i-1;j+) if(stuj.avestuj+1.ave) change(j,j+1); printf(nt排序后为:n); /*排序后为:*/ printf(t=n); printf(t学号 姓名 入学年 平均分 排名n); printf(t=n); for(i=0;i=1&c=5)
21、k=c-49; for(i=0;inum;i+) for(j=0;jnum-1-i;j+) if(stuj.scorekstuj+1.scorek) change(j,j+1); outputx(k); else printf(n选择有误,请重选!nn); stop(); void change(int i,int j) /*交换结构体数组中的两个记录*/ struct student temp; temp=stui; stui=stuj; stuj=temp;void outputx(int k) /*选择输出单科成绩*/ char xueke510=C语言,高数,物理,电路,模电; cha
22、r (*p)10; /*定义一个指向包含10个字符型元素的一维数组的指针变量*/ int i; p=xueke; printf(nt排序后为:n); printf(t=n); printf(t学号 姓名 入学年 %s 排名n,p+k); printf(t=n); for(i=0;inum;i+) printf(t%-11s% -10s%-11d%5dn,stui.no, stui.name,stui.year,stui.scorek,i+1);void find1() /*查找界面函数*/ char c4; char cno11,cname10; int i,cyear; while(1) p
23、rintf(ttt*n); printf(ttt* 查找 *n); printf(ttt* 1. 按学号查找 *n); /*按学号查找*/ printf(ttt* 2. 按姓名查找 *n); /*按姓名查找*/ printf(ttt* 3. 按入学年查找 *n); /*按入学年查找*/ printf(ttt* 9. 返回 *n); /*返回*/ printf(ttt*n); printf(ttt请选择:n);/*请选择:*/ c4=getchar(); getchar(); if(c4=57) break; switch(c4) case 1: printf(输入学号:n);/*输入学号:*/
24、 gets(cno); i=find(cno); panduani(i); break; case 2: printf(输入姓名:n);/*输入姓名:*/ gets(cname); i=findname(cname); panduani(i); break; case 3: printf(输入入学年:n);/*输入入学年*/ scanf(%d,&cyear); findyear(cyear); stop(); break; default: printf(选择有误,请重选!n);/*选择有误,请重选!*/ int findname(char cname) /*按姓名查找*/ int i; fo
25、r(i=0;inum;i+) if(strcmp(stui.name,cname)=0) /*判断两个字符串相等*/ return i; /*查找成功*/ return -1; /*查找失败*/void findyear(int cyear) int i,j,flag=0; for(i=0;inum;i+) if(stui.year=cyear) flag=1;break; if(flag=0) printf(要查找的学生不存在n);stop(); else printf(查找到的学生信息为:n);/*查找到的学生信息为:*/ printf(学号 姓名 班级 专业 入学年 C语言 高数 大物
26、电路 模电n); printf(=n); for(i=0;inum;i+) if(stui.year=cyear) /*判断两个数值相等*/ printf(%s %s %s %s %d,stui.no,stui.name,stui.grade,stui.pro,stui.year); for(j=0;j5;j+) printf( %.1f,stui.scorej); printf(n); void panduani(int i) /*通过i的值,判断信息要查找的信息是否存在*/ int j; if(i=-1) printf(要查找的学生不存在n);/*要查找的学生不存在*/ stop(); e
27、lse printf(查找到的学生信息为:n);/*查找到的学生信息为:*/ printf(学号 姓名 班级 专业 入学年 C语言 高数 大物 电路 模电n); printf(=n); printf(%s %s %s %s %d,stui.no,stui.name,stui.grade,stui.pro,stui.year); for(j=0;j5;j+) printf( %.1f,stui.scorej); printf(n); stop(); void save() /*保存文件*/ int i; FILE *fp; if(fp=fopen(,wb)=NULL) /*创建二进制文件*/ printf(