1、C语言课程设计学生成绩管理系统(2)312020年4月19日文档仅供参考#include#include/* strcmp函数原型包含*/#define N 100/*定义最大学生人数为100*/struct student /*学生结构体定义*/ char no11; /*学号,10位*/ char name10;/*姓名,3个汉字*/ float score5;/*储存5门功课的成绩*/ float ave;/*储存平均分*/ int year;/*入年*/stuN;int num;int panduani(int); /*经过i的值,判断信息要查找的信息是否存在*/void output
2、(); /*输出学生成绩函数(公共函数)*/void init(); /*系统初始化函数*/void newfile(); /*建立新的数据文件*/void read1(); /*从数据文件中读取数据*/void weihu(); /*维护界面函数*/void new1(); /*新增一个学生成绩函数*/void xiugai(); /*修改学生成绩*/int xgcj(int); /*修改成绩*/void delete1(); /*删除学生信息函数*/void tongji(); /*统计界面函数*/void tongji1(); /*计算每个学生平均分*/void tongji2(); /
3、*计算每门课程的平均分*/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 cyear); /
4、*按入年查找*/void save(); /*保存文件*/void stop(); /*停顿函数*/void stop() /*停顿函数 (公共函数)*/ printf(Press Any Key To Continue.n); getch();void output() /*输出学生成绩函数(公共函数)*/ int i,j; printf(=n); printf(XueHao XingMing RuXueNian C GaoShu DaWu DianLu MoDiann); printf(=n); for(i=0;inum;i+) printf(%-11s% -10s%-11d,stui.n
5、o,stui.name,stui.year); for(j=0;j5;j+) printf(% -7.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(Chuang
6、Jian Shi Bai! Qing Chong Xin Yun Xing Cheng Xu.n); /*显示“创立文件失败,请重新运行程序”*/ exit(0); /*终止程序*/ printf( Chu Ci Yun Xing, Jin Xing Shu Ju Chu Shi Hua.n);/*显示“初次运行,进行数据初始化.”*/ stop(); clrscr(); printf( Qing Shu Ru Xue Sheng Ren Shu:);/*显示“请输入学生人数:”*/ scanf(%d,&num); for(i=0;inum;i+) printf(Qing Shu Ru Di
7、%d Ge Xue Sheng De Xue Hao:,i+1); /*显示“请输入第i+1个学生的学号:”*/ getchar(); /*吃回车*/ gets(stui.no); printf(Xing Ming:); /*显示“姓名:”*/ gets(stui.name); printf(Ru Xue Nian:);/*显示“入年”*/ scanf(%d,&stui.year); printf(C-YuYan Cheng Ji:);/*显示“C语言成绩”*/ scanf(%f,&stui.score0); printf(GaoShu Cheng Ji:);/*显示“高数成绩”*/ scan
8、f(%f,&stui.score1); printf(DaWu Cheng Ji:);/*显示“大物成绩”*/ scanf(%f,&stui.score2); printf(DianLu Cheng Ji:);/*显示“电路成绩”*/ scanf(%f,&stui.score3); printf(MoDian Cheng Ji:);/*显示“模电成绩”*/ scanf(%f,&stui.score4); fwrite(&stui,1,sizeof(struct student),fp); /*把第i+1名学生成绩写入文件*/ fclose(fp); clrscr(); printf(=n);
9、printf( Gung Cai Shu Ru De %d Ge Shu Ju Wei:n,num); /*显示“刚才输入的 num 个数据为:”*/ printf(=nn); output();void read1() /*从数据文件中读取数据 */ FILE *fp; num=0; /*num为数据文件中实际存储的学生人数*/ fp=fopen(stu.dat,r); if(fp=NULL) /*数据文件不存在*/ printf(Wen Jian Da Kai Shi Bai! Chong Xin Yun Xing Cheng Xun); /*显示“文件打开失败!重新运行程序”*/ exi
10、t(0); while(!feof(fp) fread(&stunum,1,sizeof(struct student),fp); num+; num-; fclose(fp); printf(=n); printf( Xian You %d Ge Xue Sheng De Cheng Ji:n,num); /*显示“现有 NUM个学生的成绩:”*/ printf(=nn); output();void weihu() /*维护界面函数 */ char c1; while(1) clrscr(); printf(nnnttt*n); printf(ttt* Wei Hu *n); printf
11、(ttt* 1. Xin Zeng *n); /*新增*/ printf(ttt* 2. Shan Chu *n); /*删除(按学号)*/ printf(ttt* 3. Xiu Gai *n); /*修改*/ printf(ttt* ESC. Fan Hui *n); /*返回*/ printf(ttt*n); printf(tttQing Xuan Ze:n);/*请选择:*/ c1=getch(); if(c1=27) break; switch(c1) case 1: new1(); break; case 2: delete1(); case 3: xiugai(); break;
12、default: printf(Xuan Zen You Wu,Qing Chong Xuan!n);/*“选择有误,请重选!”*/ void new1() /*新增一个学生成绩函数 */ printf(Qing Shu Ru Xue Hao:); /*显示“请输入学号:”*/ getchar(); /*吃回车*/ gets(stunum.no); printf(Xing Ming:); /*显示“姓名:”*/ gets(stunum.name); printf(Ru Xue Nian:);/*显示“入年”*/ scanf(%d,&stunum.year); printf(C-YuYan Ch
13、eng Ji:);/*显示“C语言成绩”*/ scanf(%f,&stunum.score0); printf(GaoShu Cheng Ji:);/*显示“高数成绩”*/ scanf(%f,&stunum.score1); printf(DaWu Cheng Ji:);/*显示“大物成绩”*/ scanf(%f,&stunum.score2); printf(DianLu Cheng Ji:);/*显示“电路成绩”*/ scanf(%f,&stunum.score3); printf(MoDian Cheng Ji:);/*显示“模电成绩”*/ scanf(%f,&stunum.score4
14、); num+; printf(n=n); printf( Xian You %d Ge Xue Sheng De Cheng Ji:n,num); /*显示“现有 NUM个学生的成绩:”*/ printf(=nn); output();void xiugai() /*修改学生成绩*/ char xg11; int i; printf(nQing shu ru yao xiu gai xue sheng de xue hao:nn); gets(xg); for(i=0;i=1&c=5) k=c-49; printf(nQing shu ru %s cheng ji:n,p+k); scanf
15、(%f,&stux.scorek); printf(nXiu gai hou gai xue sheng xin xi wei:n); printf(XueHao XingMing RuXueNian C GaoShu DaWu DianLu MoDiann); printf(=n); printf(%-11s%-10s%-11d,stux.no,stux.name,stux.year); for(j=0;j5;j+) printf(% -7.1f,stux.scorej); printf(n); else printf(nXuan Zen You Wu,Qing Chong Xuan!nn)
16、; stop(); int find(char sno) /*按学号查找 */ int i; for(i=0;inum;i+) if(strcmp(stui.no,sno)=0) /*判断两个字符串相等*/ return i;/*查找成功*/ return -1;/*查找失败*/void delete1() /*删除学生信息函数*/ char cno11; int i,j; printf(Qing Shu Ru Yao Shan Chu De Xue Sheng Xue Hao:); /*“请输入要删除的学生学号”*/ gets(cno); i=find(cno); if(i!=-1) for
17、(j=i;jnum;j+) stuj=stuj+1; num-; printf(Xian You %d Ge Xue Sheng De Cheng Ji:n,num); /*显示“现有 NUM个学生的成绩:”*/ output(); else printf(qing shu ru zheng que de xue hao. n); stop();void tongji() /*统计界面函数 */ int i; char c2; while(1) clrscr(); printf(nnnttt*n); printf(ttt* Tong Ji *n); printf(ttt* 1. Xue She
18、ng Ping Jun Fen *n); /*计算学生平均分*/ printf(ttt* 2. Ke Cheng Ping Jun Fen *n); /*计算每门课程平均分*/ printf(ttt* ESC. Fan Hui *n); /*返回*/ printf(ttt*n); printf(tttQing Xuan Ze:n);/*请选择:*/ c2=getch(); if(c2=27) break; switch(c2) case 1: tongji1(); printf(nnXue Sheng Ping Jun Fen Wei:n); printf(=n); printf(XueHao
19、 XingMing RuXueNian PingJunFenn); printf(=n); for(i=0;inum;i+) printf(%-11s% -10s%-11d%-10.2fn,stui.no,stui.name,stui.year,stui.ave); stop(); break; case 2: tongji2(); break; default: printf(Xuan Zen You Wu,Qing Chong Xuan!n);/*“选择有误,请重选!”*/ void tongji1() /*计算每个学生平均分*/ int i,j; for(i=0;inum;i+) stu
20、i.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(nnGe Ke Ping Jun Fen Wei:n);/*“各科平均分:”*/ printf(=n); printf(C GaoShu DaWu Di
21、anLu MoDiann); printf(=n); for(i=0;i5;i+) printf(%-7.1f,aveci); printf(n); stop();void paixu1() /*排序界面*/ char c3; for(;) clrscr(); printf(nnn); printf(ttt*n); printf(ttt* Pai Xu * n); printf(ttt* 1. An Xue Hao * n); /*按学号排序*/ printf(ttt* 2. An Ping Jun Fen * n); /*按平均分排序*/ printf(ttt* 3. An dan ke c
22、heng ji * n); /*按单科成绩排序*/ printf(ttt* ESC. Fan Hui * n); /*返回*/ printf(ttt*nn); printf(tQing Xuan Ze(press 1.2.3.Esc):n);/*请选择:*/ c3=getch(); if(c3=27) break; switch(c3) case 1:paino();break; case 2:paiave();break; case 3:paidkcj();break; default: printf(nXuan Zen You Wu,Qing Chong Xuan!nn);/*选择有误,请
23、重选!*/ stop(); void paino() /*按学号排序*/ /*按学号从低到高冒泡法排序*/ int i,j,k; for(i=0;inum;i+) for(j=0;j0) change(j,j+1); printf(nPai Xu Hou Wei:n); /*“排序后为:”*/ output();void paiave() /*按平均分排序 */ /*按平均分从高到低冒泡法排序*/ int i,j; struct student temp; tongji1(); /*计算平均成绩*/ for(i=0;inum;i+) for(j=0;jnum-i-1;j+) if(stuj.a
24、vestuj+1.ave) change(j,j+1); printf(ntPai Xu Hou Wei:n); /*“排序后为:”*/ printf(t=n); printf(tXueHao XingMing RuXueNian Ave Pai mingn); 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(k); else printf(nXuan Zen You Wu,Qing Ch
25、ong Xuan!nn); stop(); void change(int i,int j) /*交换结构体数组中的两个记录*/ struct student temp; temp=stui; stui=stuj; stuj=temp;void outputx(int k) /*选择输出单科成绩*/ char xueke510=Cyuyan,Gaoshu,Wuli,Dianlu,Modian; char (*p)10; /*定义一个指向包含10个字符型元素的一维数组的指针变量*/ int i; p=xueke; printf(ntPai Xu Hou Wei:n); printf(t=n);
26、printf(tXueHao XingMing RuXueNian %s Pai Mingn,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,j,cyear; while(1) clrscr(); printf(ttt*n); printf(ttt* Cha Zhao *n); printf(t
27、tt* 1. An Xue Hao *n); /*按学号查找*/ printf(ttt* 2. An Xing Ming *n); /*按姓名查找*/ printf(ttt* 3. An Ru Xue Nian *n); /*按入年查找*/ printf(ttt* ESC. Fan Hui *n); /*返回*/ printf(ttt*n); printf(tttQing Xuan Ze:n);/*请选择:*/ c4=getch(); if(c4=27) break; switch(c4) case 1: printf(Shu Ru Xue Hao:n);/*“输入学号:”*/ gets(cn
28、o); i=find(cno); panduani( i); break; case 2: printf(Shu Ru Xing Ming:n);/*“输入姓名:”*/ gets(cname); i=findname(cname); panduani(i); break; case 3: printf(Shu Ru RU Xue Nian:n);/*“输入入年”*/ scanf(%d,&cyear); findyear(cyear); stop(); break; default: printf(Xuan Zen You Wu,Qing Chong Xuan!n);/*“选择有误,请重选!”*/ int findname(char cname) /*按姓名查找*/ int i; for(i=0;inu