版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学习 好资料/*4. 定义一个结构体数组,存放 10 个学生的学号,姓名,三门课的成绩,编写 一程序。应用简单菜单和子函数调用方式实现下面的功能:(1)从键盘输入 10 个学生的以上内容,存入文件 stud.txt(2)浏览显示成绩表(要求显示格式成绩时,格式较规范)(3)将 10 个学生按照平均分数从高到低进行排序,结果存入文件stud1.txt( 4)输入任意的一个课程名,分数从高到低进行排序,结果存入文件stud2.txt( 5)向文件 stud1.txt中插入一个记录,成绩排序不变,结果存入文件 stud1.txt */* 头文件名 */* 头文件名,因为程序中用到了 exit(结束程
2、序 )和函数*/ /* 头文件名,因为程序中用到了字符串函数 */#include stdio.h#include stdlib.h#include string.h #define N 1000 /*定义结构体模块struct student long num; /* 定义学生学号为长整型 */char name20; /* 定义姓名为字符型,占 12 个字符 */float math,English,physics,total,average;float TOT_math,TOT_English,TOT_physics,TOT_total,TOT_aver;float aver_math,
3、aver_English,aver_physics,aver_total,aver_average; student; /* 定义结构体名称为 student*/输入初始值模块void input(struct student *p,int size)int i;for(i=0;isize;i+)printf(请输入学号 :);while(1)scanf(%ld,&pi.num);if(long(pi.num)!=pi.num|long(pi.num)=0) /* 输入 判断*/printf(输入错误,学号必须为整数 ,请重新输入 : ); fflush(stdin);elsebreak;pr
4、intf(请输入姓名 :);scanf(%s,);printf(请输入数学成绩 :);更多精品文档学习 好资料while(1)scanf(%f,&pi.math);if(float(pi.math)!=pi.math|float(pi.math)100|pi.math 0)printf(输入错误 ,数学成绩必须为 0100 之间的数 ,请重新输入 : ); fflush(stdin);elsebreak;printf(请输入英语成绩 :);while(1)scanf(%f,&pi.English);if(float(pi.English)!=pi.English|float(pi
5、.English)100|pi .English0)printf(输入错误 ,英语成绩必须为 0100 之间的数 ,请重新输入 : );fflush(stdin); elsebreak;printf(请输入物理成绩 :);while(1)scanf(%f,&pi.physics);if(float(pi.physics)!=pi.physics|float(pi.physics)100|p i.physics0)printf(输入错误 ,英语成绩必须为 0100 之间的数 ,请重新输入 : );fflush(stdin);elsebreak;printf(n);printf(信息录入成功 !n
6、n);*/块保存初始值到 初始二进制值 .txt模void save(struct student *p,int size)/* 保存模块 */FILE *fp;int i;if(fp=fopen(初始值二进制值 .txt,wb+)=NULL)/* 建立文件*/printf(cannot open the filen);for(i=0;isize;i+)fwrite(&pi,sizeof(student),1,fp); /*快写函数, 写到磁盘中为二进制数 */ fclose(fp); /* 关闭文件 */ 更多精品文档学习 好资料*/块保存初始值到 初始二进制值 .txt模void save
7、0(struct student *p,int size) /* 保存模块 */FILE *fp;int i;if(fp=fopen(初始值二进制值 1.txt,ab+)=NULL) /* 建立文件 */printf(cannot open the filen);for(i=0;isize;i+)fwrite(&pi,sizeof(student),1,fp); /*快写函数, 写到磁盘中为二进制数 */ fclose(fp); /* 关闭文件 */ 保存初始值到可浏览文件模块void SAVE(struct student *p,int size)FILE *fp;int i,b=0;cha
8、r name20;printf(请输入保存初始值的可浏览文件名 : ); scanf(%s,name);if(fp=fopen(name,w+)=NULL) printf(文件名输入错误 !n);fprintf(fp,nttn);fprintf(fp,tt 序号 学号 姓名 数学 英语 物理n);fprintf(fp,tt);fprintf(fp,n );for(i=0;isize;i+) b+;fprintf(fp,tt %-6d%-12d%-12s%-8.2f%-8.2f%-8.2fn,b,pi.num,,p i.math,pi.English,pi.physics);fpr
9、intf(fp,ttn); fclose(fp); printf(n 文件保存成功 !nn);更多精品文档学习 好资料读取初始值模块int read(struct student *p,int size)FILE *fp;int i,n=0;if(fp=fopen(初始值二进制值 .txt,rb+)=NULL) printf(文件名输入错误 !n);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+; fclose(fp);return n;读取输出初始值模块void read_print(struct stude
10、nt *p,int size) FILE *fp;int i,n=0,b=0; if(fp=fopen(初始值二进制值 .txt,rb+)=NULL)printf(文件名输入错误 !n); printf(nttn);printf(tt 序号 学号 姓名 数学 英语 物 理n);printf(ttn);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+;for(i=0;in;i+) b+;printf(tt %-6d%-12d%-12s%-8.2f%-8.2f,b,pi.num,,pi.math,pi.
11、 English);printf(%-8.2fn,pi.physics);printf(ttn);printf(nn); fclose(fp);计算总分和平均分模块更多精品文档学习 好资料void total_average(struct student *p,int size) /* 求每位同学的总分和平均分 模块*/int i;for(i=0;isize;i+) /* 循环,从第一个同学开始计算到最后一个 同学*/pi.total=pi.math+pi.English+pi.physics;/* 每个同学的总分等于三科成绩之和 */pi.average=pi.total/3; /* 每个同
12、学的平均分等于总分的 1/3*/输出初始值总分和平均分模块void read_print1(struct student *p,int size)void total_average(struct student *p,int size);FILE *fp;int i,n=0,b=0;if(fp=fopen(初始值二进制值 .txt,rb+)=NULL)printf(文件名输入错误 !n); printf(ntn);printf(t 序号 学号 姓名 数学 英语 物理 总分平均分 n);printf(tn);for(i=0;isize;i+) if(fread(&pi,sizeof(struc
13、t student),1,fp)!=0)n+; total_average(p,n);for(i=0;in;i+) b+;printf(t %-6d%-12d%-12s%-8.2f%-8.2f,b,pi.num,,pi.math,pi.E nglish);printf(%-8.2f%-10.2f%-8.2fn,pi.physics,pi.total,pi.average);printf(tn); printf(nn); fclose(fp);更多精品文档学习 好资料将初始值按平均分排序模块void range(struct student *p,int size) /* 所有同学
14、的成绩按平均分由高到低 排序模块 */int i,j,k;struct student temp;/* 定义一个 student 类型的变量备用 */for(i=0;isize;i+) /* 用选择排序法进行排序 */ k=i;for(j=i+1;jsize;j+) if(pk.averagepj.average)temp=pk; pk=pj;pj=temp;输出初始值按平均分排序的结果模块int read_print2(struct student *p,int size)void total_average(struct student *p,int size);void range(st
15、ruct student *p,int size);FILE *fp;int i,n=0,b=0;if(fp=fopen(初始值二进制值 .txt,rb+)=NULL) printf(文件名输入错误 !n); printf(ntn);printf(t 学号 姓名 数学 英语 物理 总分 平均分名次 n);printf(tn);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+; total_average(p,n);range(p,n); for(i=0;in;i+) b+;printf(t%-12d%-12s%-
16、8.2f%-8.2f,pi.num,,pi.math,pi.English);printf(%-8.2f%-10.2f%-8.2f %dn,pi.physics,pi.total,pi.average,b); printf(tn);printf(nn);更多精品文档学习 好资料fclose(fp);return n;初始值按平均分排/* 保存初始值按平均分排序后结果到序二进制值 .txt模块 void save1(struct student *p,int size) /* 保存模块 */FILE *fp;int i;if(fp=fopen(按平均分排序二进制值 .txt,wb+
17、)=NULL) /* 建 立文件 */printf(cannot open the filen);for(i=0;isize;i+)fwrite(&pi,sizeof(student),1,fp); /*快写函数, 写到磁盘中为二进制数 */ fclose(fp); /* 关闭文件 */ 读取排序后结果模块int read1(struct student *p,int size)FILE *fp;int i,n=0;if(fp=fopen(按平均分排序二进制值 .txt,r+)=NULL) printf(文件名输入错误 !n);for(i=0;isize;i+) if(fread(&pi,si
18、zeof(struct student),1,fp)!=0)n+; fclose(fp);return n;保存初始值按平均分排序后结果到可浏览*/文件模块void SAVE1(struct student *p,int size)FILE *fp;int i,b=0;char name20; printf(请输入保存排序结果的文件名 : );更多精品文档学习 好资料scanf(%s,name); if(fp=fopen(name,w+)=NULL) printf(文件名输入错误 !n);fprintf(fp,ntn);fprintf(fp,t 学号 姓名 数学 英语 物理 总分 平均分 名次
19、 n);fprintf(fp,tn);fprintf(fp,n ); for(i=0;isize;i+) b+;fprintf(fp,t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.Englis h);fprintf(fp,%-8.2f%-10.2f%-8.2f %dn,pi.physics,pi.total,pi.average,b); fprintf(fp,tn); fclose(fp); printf(n 文件保存成功 !nn);科目选择模块int choose() system(color B1 );system(cls);print
20、f(nt*请选择按成绩从高到低排序的科目*nn);printf(ttt 查看数学成绩排序请输入 (数学 )nn); printf(ttt 查看英语成绩排序请输入 (英语 )nn); printf(ttt 查看物理成绩排序请输入 (物理 )nn);printf(t =*n);printf(tt 请输入科目名称 : );int a;char str1=数学 ,str2=英语 ,str3=物理;char str20;scanf(%s,str);if(strcmp(str1,str)=0)a=1;elseif(strcmp(str2,str)=0)a=2;更多精品文档学习 好资料elseif(strc
21、mp(str3,str)=0)a=3;elseprintf(n 输入错误 ,请重新输入 !nn); system(pause);return(a);所有同学的成绩按数学成绩由高到低排序模块 * void range1(struct student *p,int size)int i,j,k;struct student temp;for(i=0;isize;i+) /* 用选择排序法进行排序 */ k=i;for(j=i+1;jsize;j+) if(pk.mathpj.math) temp=pk; pk=pj; pj=temp;所有同学的成绩按英语成绩由高到低排序模块 * void rang
22、e2(struct student *p,int size)int i,j,k;struct student temp;for(i=0;isize;i+) /* 用选择排序法进行排序 */ k=i;for(j=i+1;jsize;j+) if(pk.Englishpj.English) temp=pk; pk=pj; pj=temp;更多精品文档学习 好资料所有同学的成绩按物理成绩由高到低排序模块 * void range3(struct student *p,int size)int i,j,k; struct student temp;for(i=0;isize;i+) /* 用选择排序法
23、进行排序 */ k=i;for(j=i+1;jsize;j+) if(pk.physicspj.physics) temp=pk; pk=pj; pj=temp;输出按数学科目排序结果模块int read_print31(struct student *p,int size)void total_average(struct student *p,int size);void range1(struct student *p,int size);FILE *fp;int i,n=0,b=0;if(fp=fopen(按平均分排序二进制值 .txt,rb+)=NULL) printf(文件名输入错
24、误 !n); printf(ntn);printf(t 学号 姓名 数学 英语 物理 总分 平均分 名次 n);printf(tn);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+; total_average(p,n);range1(p,n); for(i=0;in;i+) b+;printf(t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.English);printf(%-8.2f%-10.2f%-8.2f %dn,pi.physics,pi.total
25、,pi.average,b); printf(tn);printf(nn);更多精品文档学习 好资料fclose(fp);return n;输出按英语科目排序结果模块int read_print32(struct student *p,int size)void total_average(struct student *p,int size);void range2(struct student *p,int size);FILE *fp;int i,n=0,b=0;if(fp=fopen(按平均分排序二进制值 .txt,rb+)=NULL) printf(文件名输入错误 !n); prin
26、tf(ntn);printf(t 学号 姓名 数学 英语 物理 总分 平均分 名次 n);printf(tn);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+; total_average(p,n);range2(p,n);for(i=0;in;i+) b+;printf(t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.English);printf(%-8.2f%-10.2f%-8.2f %dn,pi.physics,pi.total,pi.average,
27、b); printf(tn);printf(nn); fclose(fp);return n;输出按物理科目排序结果模块int read_print33(struct student *p,int size) void total_average(struct student *p,int size); void range3(struct student *p,int size);FILE *fp;int i,n=0,b=0;更多精品文档学习 好资料if(fp=fopen(按平均分排序二进制值 .txt,rb+)=NULL) printf(文件名输入错误 !n); printf(ntn);p
28、rintf(t 学号 姓名 数学 英语 物理 总分 平均分名次 n);printf(tn);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+; total_average(p,n);range3(p,n); for(i=0;in;i+) b+;printf(t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.English); printf(%-8.2f%-10.2f%-8.2f %dn,pi.physics,pi.total,pi.average,b);print
29、f(tn);printf(nn); fclose(fp); return n;保存按科目排序结果模块void SAVE2(struct student *p,int size)FILE *fp;int i,b=0;char name20;printf(请输入保存科目排序后的文件名 : ); scanf(%s,name);if(fp=fopen(name,w+)=NULL) printf(文件名输入错误 !n);fprintf(fp,ntn);fprintf(fp,t 学号 姓名 数学 英语 物理 总分 平均分 名次 n);fprintf(fp,tn);fprintf(fp,n ); for(i
30、=0;isize;i+) b+;更多精品文档学习 好资料fprintf(fp,t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.Englis h);fprintf(fp,%-8.2f%-10.2f%-8.2f %dn,pi.physics,pi.total,pi.average,b); fprintf(fp,tn);fclose(fp);printf(n 文件保存成功 !nn);输出所有值按平均分排序的结果模块输出所有值按平均分排序的结果模块int read_print3(struct student *p,int size)void tota
31、l_average(struct student *p,int size);void range(struct student *p,int size);FILE *fp;int i,n=0,b=0;if(fp=fopen(初始值二进制值 1.txt,rb+)=NULL) printf(文件名输入错误 !n); printf(ntn);printf(t 学号 姓名 数学 英语 物理 总分 平均分名次 n);printf(tn);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+; total_average(p,n
32、);range(p,n);for(i=0;in;i+) b+;printf(t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.English);printf(%-8.2f%-10.2f%-8.2f %dn,pi.physics,pi.total,pi.average,b); printf(tn);更多精品文档学习 好资料printf(nn); fclose(fp); return n;void search(struct student *p,int size) void total_average(struct student *p,int
33、size);char str20; long c;int i,a,flag=0,n=0;printf(nt*查找某位同学的成绩*nn);printf(ttt 按学号查找请输入 (学号 )nn); printf(ttt 按姓名查找请输入 (姓名 )nn);printf(t =*n);char str1=学号 ,str2=姓名 ;char str320;while(1) printf(tt 请输入查找方式 : ); scanf(%s,str3);if(strcmp(str1,str3)=0)a=1;break; elseif(strcmp(str2,str3)=0)a=2;break; elsep
34、rintf(n 输入错误 ,请重新输入 !nn); switch(a) case 1: printf(nt请输入学号 : );scanf(%s,str); c=strtol(str,NULL,0); FILE *fp;if(fp=fopen(初始值二进制值 1.txt,rb+)=NULL) printf(文件名输入错误 !n);for(i=0;isize;i+) if(fread(&pi,sizeof(struct student),1,fp)!=0)n+; total_average(p,n);for(i=0;in;i+)if(pi.num=c) flag=1;更多精品文档学习 好资料pri
35、ntf(ntn);printf(t 学号 姓名 数学 英语 物理 总分 平均分 n);printf(tn);printf(t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.English);printf(%-8.2f%-10.2f%-8.2fn,pi.physics,pi.total,pi.average);printf(tnn);break;if(flag=0)printf(输入学号错误 !n);break;case 2: printf(nt请输入姓名 : );scanf(%s,str);if(fp=fopen(初始值二进制值 1.txt,r
36、b+)=NULL)printf(文件名输入错误 !n);for(i=0;isize;i+)if(fread(&pi,sizeof(struct student),1,fp)!=0)n+;total_average(p,n);for(i=0;in;i+)if(strcmp(str,)=0) flag=1;数学 英语printf(ntprintf(t 学号 姓名 物理 总分 平均分 n);printf(tn);printf(t%-12d%-12s%-8.2f%-8.2f,pi.num,,pi.math,pi.English);printf(%-8.2f%-10.2f%-
37、8.2fn,pi.physics,pi.total,pi.average);printf(tnn);break;if(flag=0)printf(输入姓名错误 !n);break;/*更多精品文档学习 好资料void correct(struct student *p,int size)void input(struct student *p,int size);int i,a=0,flag=0; FILE *fp;if(fp=fopen(初始值二进制值 1.txt,r+)=NULL) printf(不能打开文件 n);printf(请输入需要修改人的学号进行修改 ,修改后将自动计算总分和平均
38、分 并排序 !n);printf(nt 请输入需要修改学生的学号 : ); scanf(%ld,&pN.num);for(i=0;fread(&pi,sizeof(struct student),1,fp)!=0;i+)a+; for(i=0;ia;i+)if(pi.num=pN.num)flag=1;printf(请输入新的信息 !nn);printf(请输入学号 :);while(1)scanf(%ld,&pi.num); if(long(pi.num)!=pi.num|long(pi.num)=0) /* 输入 判断*/printf(输入错误,学号必须为整数 ,请重新输入 : ); ff
39、lush(stdin);elsebreak;printf(请输入姓名 :);scanf(%s,);printf(请输入数学成绩 :); while(1)scanf(%f,&pi.math);if(float(pi.math)!=pi.math|float(pi.math)100|pi.math 0)printf(输入错误 ,数学成绩必须为 0100 之间的数 ,请重新输入 : ); fflush(stdin);elsebreak;printf(请输入英语成绩 :); while(1)scanf(%f,&pi.English);if(float(pi.English)!=pi.En
40、glish|float(pi.English)100|pi .English0)printf(输入错误 ,英语成绩必须为 0100 之间的数 ,请重新输入 : ); fflush(stdin); elsebreak;printf(请输入物理成绩 :); while(1)scanf(%f,&pi.physics);if(float(pi.physics)!=pi.physics|float(pi.physics)100|p更多精品文档学习 好资料i.physics0)printf(输入错误 ,英语成绩必须为 0100 之间的数 ,请重新输入 : ); fflush(stdin); elsebre
41、ak; if(fp=fopen(初始值二进制值 1.txt,w+)=NULL) printf(不能打开文件 n);exit(0); for(i=0;ia;i+)fwrite(&pi,sizeof(struct student),1,fp);fclose(fp);if(flag=0)printf(对不起 ! 没有查找到您所输的学号 !n);删除void delite (struct student *p,int size)int i,a=0,flag=0; FILE *fp;printf(请输入需要删除的学号进行查找后, 该项将自动删除并自动计算总分 和平均分及排序 !n);if(fp=fope
42、n(初始值二进制值 1.txt,rb+)=NULL) printf(不能打开文件 n);printf(nt 请输入需要删除学生的学号 : ); scanf(%ld,&pN.num);for(i=0;fread(&pi,sizeof(struct student),1,fp)!=0;i+)a+; for(i=0;ia;i+)if(pi.num=pN.num) for(i=i;ia;i+) pi=pi+1;if(fp=fopen(初始值二进制值 1.txt,w+)=NULL) printf(不能打开文件 n);exit(0); for(i=0;ia-1;i+) fwrite(&pi,sizeof(
43、struct student),1,fp); fclose(fp);flag=1;break; if(flag=0) printf(对不起 !没有你找到你想删除的人 !n);system(pause);更多精品文档学习 好资料*/int menu()int a;system(color 9F);/* 改变输出框字体和背景的颜色 */system(cls);/* 运行前清屏 */printf(n);printf(t=成绩 *=*=*=*=*=*=* 处理 =*=*=*=*=*=*=* 系统 =n);printf(nt 作者:卢荣盼班级 :计本 102 学号:1018014052nn);print
44、f(t 此程序具有以下功能: n);printf(t= =n);printf(nt |*| (1)输入同学的相关信息 同学的成绩 nn);printf(t |=*=| (2)浏览初始学生信息 某位同学的成绩 nn);printf(t |=| (3)求初始学生总分及平均分 某位同学的信息 nn);printf(t |=*=| (4) 查看初始学生平均分排序 学的信息及排名 nn);printf(t |=| (5)按科目排序存入所有成绩 nn);printf(t |*| (6) 插入新的成绩 nn);printf(t=*n);|*| (7)查找某位 |=*=| (8)按学号修改 |=| (9)按学
45、号删除 |=*=| (0)浏览所有同 |=| (10)退出程序/* 选择操作项 */printf(t 请选择操作序号 (0-7):); scanf(%d,&a); /* 输入选择项 */ return a;*/void main()更多精品文档学习 好资料int b=0,n;struct student pN;while(1)switch(menu()case 1:system(color B0 );system(cls); printf(请输入要保存的初始数据的个数 : ); while(1)scanf(%d,&n);if(int(n)!=n|long(n)=0) /* 输入判断 */ printf(输入错误,个数必须为整数 ,请重新输入 : ); fflush(stdin);elsebreak; input(p,n); /* 输入初始同学信息 */ save(p,n);save0(p,n);SAVE(p,n); /* 保存初始同学信息 */system(pause); /* 程序运行至此暂停,然后按任意键可继 续运行 */break;case 2:system(color F9);system(cls);printf(nn 读取数据如下 :n); read_print(p,N); /* 读取并输出初始值数据 */
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 救灾工作的原则与方法
- 海尔新员工工作总结
- 2025版尿路感染常见症状诠释及护理要领
- 量化工作体系构建与应用
- 催乳技术与方法
- 2025版甲亢常见症状及护理要点详解
- 公文写作方法
- 部门人员工作安排
- 商业性展厅设计
- 摩尔根基因在染色体上方法
- 屠宰场安全生产制度
- 2025-2030儿童绘本出版行业市场发展与竞争战略研究报告
- 水路运输经济季度波动性分析及预测模型构建
- 骨肉瘤护理查房
- 医保课件模板
- 呼吸科门诊综合诊疗室
- 企业十一期间安全培训课件
- VTE相关知识培训课件
- 2025年公开遴选公务员笔试复习策略与计划制定
- 湖南省永州市2025年-2026年小学六年级数学期末考试(上学期)试卷及答案
- 第十三讲蛋白质分子设计
评论
0/150
提交评论