1、#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(int); /*经过i值,判定信息要查找信息是
2、否存在*/void output(); /*输出学生成绩函数(公共函数)*/void init(); /*系统初始化函数*/void newfile(); /*建立新数据文件*/void read1(); /*从数据文件中读取数据*/void weihu(); /*维护界面函数*/void new1(); /*新增一个学生成绩函数*/void xiugai(); /*修改学生成绩*/void xgcj(int); /*修改成绩*/void delete1(); /*删除学生信息函数*/void tongji(); /*统计界面函数*/void tongji1(); /*计算每个学生平均分*/v
3、oid 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);/*按姓名查找*/void findyear(int
4、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 %s %s %d,stui.no,stui.name,st
5、ui.grade,stui.pro,stui.year); for(j=0;j5;j+) printf( %.1f,stui.scorej); printf(n); stop();void init() /*系统初始化函数 */ if(access(stu.dat,0) /*判定文件是否存在*/ newfile(); /*若不存在,新建数据文件*/ else read1(); /*若存在,读取数据*/void newfile() /*建立新数据文件 */ int i; FILE *fp; if(fp=fopen(stu.dat,wb)=NULL) /*创建二进制文件*/ printf(创建文件
6、失败,请重新运行程序.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(stui.name); printf(班级
7、:); /*显示班级:*/ 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(电路成绩:);/*显示电路成绩*/ scanf(%f,&s
8、tui.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为数据文件中实际存放学生人数*/ fp=fopen(stu
9、.dat,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=nn); output();void weihu() /*维护界面函数 */ char
10、 c1; while(1) printf(nnnttt*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);/*请选择:*/ c1=getchar(); getchar(); if(c1=9) break; switch(c1) case 1: new1(); break; case 2
11、: delete1(); case 3: xiugai(); break; default: printf(选择有误,请重选!n);/*选择有误,请重选!*/ void new1() /*新增一个学生成绩函数 */ printf(请输入学号:); /*显示请输入学号:*/ gets(stunum.no); printf(姓名:); /*显示姓名:*/ gets(stunum.name); printf(班级:); /*显示班级:*/ gets(stunum.grade); printf(专业:); /*显示专业:*/ gets(stunum.pro); printf(入年:);/*显示入年*/
12、 scanf(%d,&stunum.year); printf(C语言成绩:);/*显示C语言成绩*/ scanf(%f,&stunum.score0); printf(高数成绩:);/*显示高数成绩*/ scanf(%f,&stunum.score1); printf(大物成绩:);/*显示大物成绩*/ scanf(%f,&stunum.score2); printf(电路成绩:);/*显示电路成绩*/ scanf(%f,&stunum.score3); printf(模电成绩:);/*显示模电成绩*/ scanf(%f,&stunum.score4); num+; printf(n=n);
13、 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); scanf(%f,&stux.scorek); printf(n修 息为:n); printf(学号 姓名 班级 专业 入年 C语言 高数 大物 电路 模电n); printf(=n); printf(%s
14、%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;i+) if(strcmp(stui.no,sno)=0) /*判定两个字符串相等*/ return i;/*查找成功*/ return -1;/*查找失败*/void delete1() /*删除学
15、生信息函数*/ 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 printf(请输入正确学号. n); stop();void tongji() /*统计界面函数 */ int i; char c2; while(1) printf(nnnttt*n); printf(tt
16、t* 统计 *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) break; switch(c2) case 1: tongji1(); printf(nn学生平均分为:n); printf(=n); printf(学号 姓名 入年 平均分n); printf(=n); fo
17、r(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,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() /
18、*计算每门课程平均分*/ 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语言 高数 大物 电路 模电n); printf(=n); for(i=0;i5;i+) printf(%-7.1f,aveci); printf(n); stop();void paixu1() /*排序界面*/ char c3; for
19、(;) printf(nnn); printf(ttt*n); printf(ttt* 排序 * n); printf(ttt* 1. 按学号排序 * n); /*按学号排序*/ printf(ttt* 2. 按平均分排序 * n); /*按平均分排序*/ printf(ttt* 3. 按单科成绩排序 * n); /*按单科成绩排序*/ printf(ttt* 9. 返回 * n); /*返回*/ printf(ttt*nn); printf(t请选择:(按1.2.3.9):n);/*请选择:*/ c3=getchar(); getchar(); if(c3=9) break; switch(
20、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) change(j,j+1); printf(n排序后为:n); /*排序后为:*/ output();void paiave() /*按平均分排序 */ /*按平均分从高到低冒泡法排序*/ in
21、t 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) 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
22、(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语言,高数,物理,电路,模电; char (*p)10; /*定义一个指向包含10个字符型元素一维数组指针变量*/ int i; p=xueke; printf(nt排序后为:n); printf(t=n); printf(t学号 姓
23、名 入年 %s 排名n,p+k); printf(t=n); for(i=0;inum;i+) printf(t%-11s% -10s%-11d%-6.1f%5dn,stui.no, stui.name,stui.year,stui.scorek,i+1);void find1() /*查找界面函数*/ char c4; char cno11,cname10; int i,cyear; while(1) printf(ttt*n); printf(ttt* 查找 *n); printf(ttt* 1. 按学号查找 *n); /*按学号查找*/ printf(ttt* 2. 按姓名查找 *n);
24、 /*按姓名查找*/ 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);/*输入学号:*/ gets(cno); i=find(cno); panduani(i); break; case 2: printf(输入姓名:n);/*输入姓名:*/ gets(cname); i=find
25、name(cname); panduani(i); break; case 3: printf(输入入年:n);/*输入入年*/ scanf(%d,&cyear); findyear(cyear); stop(); break; default: printf(选择有误,请重选!n);/*选择有误,请重选!*/ int findname(char cname) /*按姓名查找*/ int i; for(i=0;inum;i+) if(strcmp(stui.name,cname)=0) /*判定两个字符串相等*/ return i; /*查找成功*/ return -1; /*查找失败*/vo
26、id 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语言 高数 大物 电路 模电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(); else printf(查找到学生信息为:n);