1、includestdio。h /常用的标准输入输出函数*/#include /exit函数原型包含*/#include includestdlib。hinclude string #define N 100 /*最多的学生人数/struct student /学生结构体定义/ char clas15; /班级*/char no13; /学号,最多为12位/char name20; /*姓名*/char sex8; /性别*/char addr30; /地址*/char phone15; /电话/float score5; /*存储五门课成绩*/float ave; /平均分/stuN;int
2、num;void init();void weihu();void tongji();void tongji1();void tongji2();void sort1();void find1();void save();void newfile();void read1();void newfile();void new1();void delete1();void modify();void sortscore();int findname(char cname);void main() int choice=1;system(”COLOR 2f);printf( 学生信息管理系统 n”)
3、;printf(” * *n”);printf(” * 欢迎进入! *n”);printf(” *n”);printf(” n”);init();while(choice!=5)system(”COLOR 1F”);printf(” *n”);printf( * *n);printf(” 主菜单 n”); printf( * 1:学生成绩维护 *n”);printf(” * 2:学生成绩统计 *n”);printf( * 3:学生成绩排序 *n”);printf( * 4:学生成绩查询 *n”);printf(” * 5:退出 n”);printf( * n”); printf(” *n”);
4、printf( 请选择:”);scanf(”d”,choice);switch(choice) case 1:weihu(); break;case 2:tongji(); break; case 3:sort1();break; case 4:find1(); break; case 5:save();printf(”谢谢使用本系统!!n);break; default:printf(”选择错误,请重新选择!”);/1)输出学生成绩(公共函数)void output() /输出学生数据*/int i,j;for(i=0;inum;i+)printf(”班级 姓名 学号 性别 地址 电话n ”
5、);printf(s s %s s %s sn,stui。clas,stui。name,stui。no,stui.sex,stui。addr,stui。phone);printf(”n);printf(”C语言 大学物理 网页设计 高数 英语 n);for(j=0;j5;j+)printf(”-12。f”,stui。scorej);printf(”n);printf(”n”);/2)系统初始化代码void init()if(access(stui。dat,0)) /*判断文件是否存在/ newfile(); /不存在创建新的数据文件/elseread1(); /*若存在,从文件中读取数据/3)
6、创立新的数据文件void newfile() /*从键盘输入学生成绩并保存到文件中/int i; FILE fp;if((fp=fopen(”F:stu。dat,”wb))=NULL) /*创建二进制文件/printf(”文件创建失败!请重新运行程序。n”);exit(0); /终止程序运行*/printf(请输入学生人数:”); scanf(”d,num);for(i=0;inum;i+)printf(”班级:);getchar(); gets(stui。clas);printf(姓名:”);gets(stui。name);printf(请输入第%d位学生的学号:,i+1);gets(stu
7、i.no); printf(”性别:);gets(stui。sex);printf(”地址:”);gets(stui。addr);printf(”电话:”);gets(stui.phone);printf(C语言:”);scanf(”%f,stui。score0);printf(”大学物理:);scanf(”%f,stui。score1);printf(”网页设计:”);scanf(f,stui。score2);printf(高数:);scanf(”f,stui。score3);printf(”英语:”);scanf(%f”,&stui。score4); fwrite(&stu,sizeof(
8、stu),1,fp);printf(请输入下一条学生信息n”); /把第i+1名学生成绩写入文件*/fclose(fp);printf(”你刚刚输入的数据共有%d个学生成绩.详细数据为:n”,num);output();/4)从数据文件中读取成绩void read1()FILE fp;num=0; /num为数据文件实际存储成绩人数/fp=fopen(stu。dat”,”r);if(fp=NULL) /文件不存在*/printf(”文件打开失败!请重新运行程序。n);exit(0); /终止程序运行/while(!feof(fp)fread(&stunum,1,sizeof(struct st
9、udent),fp);num+;num;fclose(fp);printf(”现在共有d个学生成绩,初始数据为:n”,num);output(); /输出读取结果*/5)学生成绩维护void weihu()int choice1;system(”COLOR 2F”);printf(” *n”);printf( * n); printf(” * 学生成绩维护子菜单 *n”);printf( 1.新增 *n);printf( * 2.删除(按学号) *n);printf( * 3.修改 *n”);printf( n);printf(” *n);printf(” 请选择”);scanf(%d,&ch
10、oice1);switch(choice1) case 1: new1(); break; case 2: delete1(); break; case 3: modify(); break; default: printf(选择错误,请重新选择!n”);/6)新增一个学生成绩void new1()printf(请输入班级:);getchar();gets(stunum。clas);printf(”请输入学号:”);gets(stunum。no); printf(”姓名:);gets(stunum。name); printf(性别:);gets(stunum。sex);printf(”地址:”
11、);gets(stunum.addr);printf(”电话:”);gets(stunum。phone);printf(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(现在共有d个学生成绩,数据为:n,num);output();/7)按学号查找int fi
12、nd(char sno)int i; for(i=0;inum;i+) if(strcmp(stui.no,sno)=0) /判断两个字符串相等/ return i; /查找成功/ return -1; /查找失败/ /删除学生信息void delete1()char cno13;int i,j;printf(”请输入要删除的学号:n”);getchar();gets(cno);i=find(cno);if(i=-1) printf(”不存在该学号!n”); else for(j=i;jnum;j+)stuj=stuj+1;num-;printf(”删除后还有d个学生成绩,数据为:n”,num
13、);output(); /修改学生信息void modify()char cno13;int i,j;printf(”请输入要修改学生的学号:n”);getchar();gets(cno);i=find(cno); printf(班级:); gets(stui。clas); printf(姓名:”);gets(stui。name); printf(性别:);gets(stui。sex);printf(”地址:);gets(stui。addr);printf(”电话:”);gets(stui.phone);printf(”C语言:);scanf(”%f”,stui。score0);printf(
14、大学物理:”);scanf(%f”,stui。score1);printf(网页设计:”);scanf(%f”,stui。score2);printf(高数:);scanf(”f,stui.score3);printf(”英语:);scanf(”%f”,stui。score4); printf(”修改后为:n”);printf(stst%ststst%stn”,stui。clas,stui.name,stui.no,stui。sex,stui.addr,stui。phone);printf(”C语言 大学物理 网页设计 高数 英语 n”);for(j=0;j5;j+)printf(”12。f,
15、stui。scorej);printf(”n);/10)统计void tongji()int choice2;system(COLOR 3F”);printf( *n”);printf( * *n”);printf(” 统计子菜单 n);printf(” * 1.计算每门课程平均分 *n);printf(” * 2。计算每个学生平均分 *n);printf(” *n”);printf(” *n”);printf( 请选择:”);scanf(d”,choice2);if(choice2=1)tongji1();else if(choice2=2)tongji2();elseprintf(选择错误
16、,请重新选择!n”);/11)计算每个学生平均分void tongji1()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(各门课平均分:n”);printf(C语言 大学物理 网页设计 高数 英语n”); for(i=0;i5;i+)printf(”%-10.2f”,aveci);printf(n”);/12)计算每个人的平均分void tongji2()int i,j;float sum; for(j
17、=0;jnum;j+)sum=0;for(i=0;i5;i+)sum+=stuj.scorei;stuj.ave=sum/5;printf(”第d个人的平均分:%。2fn,j+1,stuj。ave);/13)排序void sort1()int choice3;system(COLOR 6F);printf(” *n);printf(” n”);printf( * 排序子菜单 *n); printf(” * *n”);printf( 1。按成绩 *n);printf( n);printf( *n);printf(” 请选择:n);scanf(”d”,choice3);if(”choice3=1)
18、sortscore();elseprintf(选择错误,请重新选择!n);/14)按学生平均分排序void sortscore() /按平均成绩从高到低冒泡法排序/int i,j;struct student temp;tongji2(); / 先计算每个学生的平均分/for(i=0;i=num-2;i+) for(j=0;jnumi-1;j+)if(stuj。avestuj+1.ave)temp=stuj;stuj=stuj+1;stuj+1=temp;for(i=0;inum;i+)printf(”%。2f ,stui。score1); printf(”排序后的学生成绩为:n”);outp
19、ut();/15)查找void find1()int choice4;char cno13,cname20;int i,j;system(”COLOR 5F”);printf(*n”);printf(”* *n”);printf(”* 查找子菜单 *n”);printf(”* 1。按学号 *n);printf(”* 2。按姓名 *n”);printf(”* *n”);printf(”*n”);printf( 请选择:”);scanf(”d”,choice4);if(choice4=1)printf(”输入要查找学生的学号:”);getchar();gets(cno);puts(cno);i=f
20、ind(cno);else if(choice4=2)printf(”请输入要查找学生的姓名:);getchar();gets(cname);i=findname(cname);elseprintf(”选择错误,请重新选择!n);return;if(i=1)printf(”要查找的学生不存在。n”);elseprintf(”查找到的学生信息为:n”);printf(班级t姓名t学号t性别t地址t电话tn ”);printf(”st%st%st%stst%stn”,stui.clas,stui。name,stui。no,stui.sex,stui。addr,stui。phone);printf(
21、n”);printf(C语言 大学物理 网页设计 高数 英语 n”);for(j=0;j5;j+)printf(-12.f”,stui。scorej);/16)按姓名查找int findname(char cname)int i;for(i=0;inum;i+)if(strcmp(stui。name,cname)=0) /*判断两个字符串/return i; /*查找成功*/return 1; /查找失败/17)保存文件void save() /*将修改过的学生成绩重新写回到数据文件中*/ int i;FILE fp;if(fp=fopen(stu.dat,”wb”))=NULL) /创建二进制文件*/printf(”文件创建失败!请重新运行程序。n);exit(0); /终止程序运行/for(i=0;inum;i+)fwrite(&stui,1,sizeof(struct student),fp); /把第i+1个学生成绩写入文件/fclose(fp);