《2022年C语言大作业成绩管理 .pdf》由会员分享,可在线阅读,更多相关《2022年C语言大作业成绩管理 .pdf(10页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1 #include #include #include #include #define N 20 struct student char name10; int num; float c; float math; float english; float aver; float sum; stu; / 菜单void menu() /*便于操作员使用 */ /*清屏*/ system(cls); printf( * 学生管理 * n); printf( * = * n); printf( * 1.成绩录入 * n); printf( * 2.查询 * n); printf( * 3.修改 *
2、 n); printf( * 4.插入 * n); printf( * 5.显示 * n); printf( * 6.统计 * n); printf( * 7.删除 * n); printf( * 0.退出 * n ); printf( * = * n); printf( * 请选择相应201023701106 的功能 : *n); / 成绩录入void input() system(cls); FILE *fp; student xs; /* 定义一个结构体变量来装从文件中读出来201023701106的数据*/ if(fp=fopen(student.dat,ab)=NULL) print
3、f(cant open file!n);exit(0); printf(n 成绩录入 ); printf(n*); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 10 页 - - - - - - - - - 2 printf( n 当输入姓名为 ps 结束录入 n ); while(1) /*中间加油 break,可使循环中断 */ printf(n 请输入您 201023701106的姓名: ); scanf(%s,xs.name); if(strcmp(xs.nam
4、e,ps)=0) break;/*判断姓名是否为ps,用字符串判断*/ printf(n 请输入学号: ); scanf(%d,&xs.num); printf(n 请输入 c 语言 201023701106的成绩: ); scanf(%f,&xs.c); printf(n 请输入高数 201023701106的成绩: ); scanf(%f,&xs.math); printf(n 请输入英语 201023701106的成绩: ); scanf(%f,&xs.english); xs.aver=0;/*给平均分变量赋初值 */ xs.aver=(xs.c+xs.math+xs.english)
5、/3; xs.sum=0; xs.sum=xs.c+xs.math+xs.english; fwrite(&xs,sizeof(stu),1,fp); /将成绩信息写入文件 system(cls); fclose(fp); void xingming() FILE *fp; student xs; char name10; printf(n 输入要查学生 201023701106的姓名 : );scanf(%s,name); if(fp=fopen(student.dat,rb)=NULL) printf(cant open file!n);exit(0); while(!feof(fp) f
6、read(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)=0)/*按姓名查询时判断输入201023701106 的姓名是否存在,会循环从数据中找取*/ printf(n 学生 201023701106的信息如下 :n); printf(n %10s %6s %6s %6s %6s %6s %6sn,姓名, 学号,C 语言,高数, 英语, 平均成绩 , 总分); printf(n %10 %6d %6.2f %6.2f %6.2f %6.2f %6.2fn,xs.name,xs.num,xs.c,xs.math,xs.english,xs.aver,
7、xs.sum); break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 10 页 - - - - - - - - - 3 if(feof(fp) printf(n 查找失败 !); /*学生不存在 */ fclose(fp); void xuehao() FILE *fp; student xs; int num; printf(n 输 入 要 查 学 生201023701106 的 学 号 : );scanf(%d,&num); if(fp=fopen(stud
8、ent.dat,rb)=NULL) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(xs.num=num)/*按学号查询时判断输入201023701106的学号是否存在,会循环从数据中找取 */ printf(n 学生 201023701106的信息如下 :n); printf(n %10s %6s %6s %6s %6s %6s %6sn,姓名, 学号 ,C语言, 高数, 英语, 平均成绩 , 总分); printf(n %10s %6d %6.2f %6.2f %6.2f %
9、6.2f %6.2fn,xs.name,xs.num,xs.c,xs.math,xs.english,xs.aver,xs.sum); break; if(feof(fp) printf(n 查找失败 !); fclose(fp); / 查询void search() char ch1; system(cls); printf( 请输入按何种方式查询: n); printf(n 1-姓名, 2-学号:); ch1=getchar();/*用字符接收 */ switch(ch1)/*判断*/ case 1:xingming();break; 名师资料总结 - - -精品资料欢迎下载 - - -
10、- - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 10 页 - - - - - - - - - 4 case 2:xuehao();break; printf(n 按任意键返回主菜单 ); getch();/*让屏幕停留同时按任意键返回*/ / 修改 : 输入学生201023701106 的姓名 , 查找该学生,若找到则修改该生201023701106的成绩信息,并显示修改前后201023701106的结果;void modi() student xs; FILE *fp; char name10; system(cls);
11、printf(n 输入要修改 201023701106的学生 201023701106的姓名 : );scanf(%s,name); if(fp=fopen(student.dat,rb+)=NULL) printf(cant open file!n);exit(0); while(!feof(fp) fread(&xs,sizeof(stu),1,fp); if(strcmp(xs.name,name)=0)/*判断输入要修改201023701106 的姓名是否存在*/ printf( 修改前学生 201023701106的信息如下 :n); printf(n %10s %6s %6s %6
12、s %6s %6s %6sn,姓名, 学号,C 语言, 高数, 英语, 平均成绩 , 总分); printf(n %10s %6d %6.2f %6.2f %6.2f %6.2f %6.2fn,xs.name,xs.num,xs.c,xs.math,xs.english,xs.aver,xs.sum); printf(n 请 输 入 该 生201023701106 的C语 言 成绩:);scanf(%f,&xs.c); printf(n 高数成绩 :);scanf(%f,&xs.math); printf(n 英语成绩 :);scanf(%f,&xs.english); xs.aver=(xs
13、.c+xs.math+xs.english)/3; xs.sum=xs.c+xs.math+xs.english; break; if(!feof(fp) printf( n 修改后201023701106 的学生201023701106 的信息如下:n); printf(n %10s %6s %6s %6s %6s %6s %6sn,姓名, 学号,C 语言, 高数, 英语, 平均成绩 , 总分); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 10 页 - - - -
14、 - - - - - 5 printf(n %10s %6d %6.2f %6.2f %6.2f %6.2f %6.2fn,xs.name,xs.num,xs.c,xs.math,xs.english,xs.aver,xs.sum); fseek(fp,sizeof(stu),1);/*负号表示后退, 1 表示文件当前位置 */ fwrite(&xs,sizeof(stu),1,fp);/*再写入,同时把要修改 201023701106的那个覆盖掉 */ else printf(n 学生不存在,修改失败 !); fclose(fp); printf(n 按任意键返回主菜单 ); getch()
15、; / 插入: 输入学生 201023701106的平时 201023701106的各项成绩,插入到指定位置;当指定 201023701106的位置超出范围时,将其插入到全班201023701106的最后,并显示插入成功后201023701106的结果。void insert() int i=0,j,k,lenth; FILE *fp; student s,xsN; system(cls); printf(n 请输入插入201023701106 的学生 201023701106 的姓名:);scanf(%s,&s.name); printf(n 学生 201023701106的学号 :);sc
16、anf(%d,&s.num); printf(n 学生 201023701106的 C成绩:);scanf(%f,&s.c); printf(n 高数成绩 :);scanf(%f,&s.math); printf(n 英语成绩 :);scanf(%f,&s.english); s.aver=(s.c+s.math+s.english)/3; s.sum=s.c+s.math+s.english; printf(n 插入位置 :);scanf(%d,&k); / i=0; if(fp=fopen(student.dat,rb)=NULL) printf( cant open file!n);ex
17、it(0); while(!feof(fp) fread(&xsi,sizeof(stu),1,fp);/*把数据读入到结构体数组中*/ if(feof(fp) break; i+; fclose(fp); lenth=i; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 10 页 - - - - - - - - - 6 if(k=0)/*k201023701106的位置要位于数组范围之内*/ /插入 for(j=lenth-1;j=k;j-) xsj+1=xsj;/*一
18、开始 j 是最大 201023701106的,往后移一个这样移动避免数据被覆盖 */ /*循环是只循环这一句201023701106的*/ xsk=s;/*将输入 201023701106的学生信息加入这个k 位置*/ lenth+;/*长度+1*/ /写回 if(fp=fopen(student.dat,wb)=NULL) printf( 不能建立文件 !n);exit(0); for(i=0;ilenth;i+) fwrite(&xsi,sizeof(stu),1,fp); else/*不再数组范围之内 */ if(fp=fopen(student.dat,ab)=NULL) printf
19、( 不能建立文件 !n);exit(0); fwrite(&s,sizeof(stu),1,fp); printf(n 按任意键返回主菜单 ); fclose(fp); / 显示void print() FILE *fp; student s; system(cls); if(fp=fopen(student.dat,rb)=NULL) printf( cant open file!n);exit(0); printf( 学生成绩表 ); printf(n *); printf(n %10s %s %6s %6s %6s %6s %6s n,姓名 , 学号 ,C语言, 高数, 英语, 平均成绩
20、 , 总分); while(!feof(fp) fread(&s,sizeof(stu),1,fp);/从文件中读取成绩信息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 10 页 - - - - - - - - - 7 if(feof(fp) break;/判断是否文件尾printf(n %10s %6d %6.2f %6.2f %6.2f %6.2f %6.2fn,s.name,s.num,s.c,s.math,s.english,s.aver,s.sum); fcl
21、ose(fp); printf(n 按任意键返回主菜单 ); getch(); / 统计void tongji() int i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u; FILE *fp; student sN, *p1N,*p2N,*p3N,*p4N;/*用指针数组 */ system(cls); if(fp=fopen(student.dat,rb)=NULL) printf(cantt open file!n);exit(0); while(!feof(fp) fread(&si+,sizeof(stu),1,fp);/*读入数据 */ if(feof(fp) bre
22、ak; t=i;i=0; for(u=0;ut;u+)/*以下每个指针数组用于指向各分数段201023701106的学生信息 */ if(si.aver=60&si.aver=80&si.aver=90) p4m+=&si+;continue; printf( 学生成绩单 ); printf(* ); printf(n 不及格201023701106 的人有:姓名学号平均分n); for(n=0;nname,p1n-num,p1n-aver); printf(n 60-79分 201023701106 的人有:姓名学号平均分n); for(p=0;pname,p2p-num,p2p-aver)
23、; printf(n 80-89分 201023701106 的人有:姓名学号平均分n); for(q=0;qname,p3q-num,p3q-aver); printf(n 90以上 201023701106 的人有:姓名学号平均分n); for(r=0;rname,p4r-num,p4r-aver); fclose(fp); printf(n 按任意键返回主菜单 ); getch(); / 删除: 输入学生姓名,若该学生存在,则删除,并显示删除后余下201023701106的学生成绩信息void dele() student xsN; FILE *fp; char name10; int
24、i=0,len,k=-1/*k=0)/*k0说明找到删除学生位置 */ 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 10 页 - - - - - - - - - 9 if(fp=fopen(student.dat,wb+)=NULL) printf( cant open file!n);exit(0); for(i=0;ilen;i+) if(i=k) continue;/*从这个位置开始写入 */ fwrite(&xsi,sizeof(stu),1,fp); fcl
25、ose(fp); else printf(n 删除失败 !n);getch(); /*失败后重新返回菜单 */ printf(n 按任意键返回主菜单 ); print(); / 菜单选择void main() char ch; while(1) menu();/ 显示菜单 ch=getch();/选择菜单 if(ch=0) break; switch(ch)/判断功能项 case 1:input();break; case 2:search();break; case 3:modi();break; case 4:insert();break; case 5:print( );break; case 6:tongji();break; case 7:dele();break; printf(n 谢谢使用 !n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 10 页 - - - - - - - - - 10 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 10 页 - - - - - - - - -
限制150内