1、清屏FILE *fp; student xs; /*定义一个结构体变量来装从文件中读出来的数据*/fwrite(&xs,sizeof(stu),1,fp); /将成绩信息写入文件fclose(fp);关闭文件feof(fp)若到文件末尾。函数值为“真”(非0)fread()从指定中读取数据项getch();/*让屏幕停留同时按任意键返回*/if语句判断给定的条件是否满足switch多分支选择语句for循环语句四、主要模块的算法描述 五、结束语 通过这次实训,我们分小组做题目,再次全面熟悉、掌握C语言基本知识,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用
2、计算机解决实际问题的能力,规范编程思想,培养逻辑思维能力,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。附录:程序代码:#include stdlib.hconio.hstring.h#define N 20struct student char name10; int num; float c; float math; float english; float aver; float sum;stu;/菜单void menu() /*便于操作员使用*/ /*清屏*/ system(printf( * 学生平时成绩管理 * n printf( * = *
3、 n * 1.成绩录入 * n * 2.查询 * n * 3.修改 * n * 4.插入 * n * 5.显示 * n * 6.统计 * n * 7.删除 * n * 0.退出 * n ); * = * n * 请选择相应的功能: *n/成绩录入void input() FILE *fp; if(fp=fopen(student.dat,ab)=NULL)printf(cant open file!nexit(0);n 成绩录入 n* n 当输入姓名为ps结束录入n while(1) /*中间加油break,可使循环中断*/ printf(n 请输入您的姓名: scanf(%s,xs.name
4、); if(strcmp(xs.name,ps)=0) break;/*判断姓名是否为ps,用字符串判断*/n 请输入学号:%d,&xs.num);n 请输入c语言的成绩:%fxs.c); printf(n 请输入高数的成绩:xs.math);n 请输入英语的成绩:xs.english); xs.aver=0;/*给平均分变量赋初值*/ xs.aver=(xs.c+xs.math+xs.english)/3; xs.sum=0; xs.sum=xs.c+xs.math+xs.english; fwrite(& fclose(fp);void xingming()n 输入要查学生的姓名: sca
5、nf(,name);rb)=NULL) while(!feof(fp) fread(& if(strcmp(xs.name,name)=0)/*按姓名查询时判断输入的姓名是否存在,会循环从数据中找取*/n 学生的信息如下:n %10s %6s %6s %6s %6s %6s %6sn姓名学号C语言高数 英语平均成绩总分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,xs.sum); break; if(feof(fp)n 查找失败! /*学生不存在*/void xue
6、hao()n 输入要查学生的学号:num); if(xs.num=num)/*按学号查询时判断输入的学号是否存在,会循环从数据中找取*/n 学生的信息如下:n %10s %6d %6.2f %6.2f %6.2f %6.2f %6.2fn if(feof(fp) printf(n 查找失败!/查询void search() char ch1; 请输入按何种方式查询:n 1-姓名,2-学号: ch1=getchar();/*用字符接收*/ switch(ch1)/*判断*/ case 1:xingming();break;2xuehao();n 按任意键返回主菜单 getch();/修改:输入学
7、生的姓名,查找该学生,若找到则修改该生的成绩信息,并显示修改前后的结果;void modi()n 输入要修改的学生的姓名:rb+ if(strcmp(xs.name,name)=0)/*判断输入要修改的姓名是否存在*/ 修改前学生的信息如下:n 请输入该生的C语言成绩:n 高数成绩:n 英语成绩: if(! n 修改后的学生的信息如下: fseek(fp,sizeof(stu),1);/*负号表示后退,1表示文件当前位置*/*再写入,同时把要修改的那个覆盖掉*/ elsen 学生不存在,修改失败!n 按任意键返回主菜单 /插入:输入学生的平时的各项成绩,插入到指定位置;当指定的位置超出范围时,
8、将其插入到全班的最后,并显示插入成功后的结果。void insert() int i=0,j,k,lenth; student s,xsN;n 请输入插入的学生的姓名:s.name);n 学生的学号:s.num);n 学生的C成绩:s.c);s.math);s.english); s.aver=(s.c+s.math+s.english)/3; s.sum=s.c+s.math+s.english;n 插入位置:k);/ i=0; canxsi,sizeof(stu),1,fp);/*把数据读入到结构体数组中*/ if(feof(fp) break; i+; lenth=i; if(k=0)/
9、*k的位置要位于数组范围之内*/ /插入 for(j=lenth-1;j=k;j-) xsj+1=xsj;/*一开始j是最大的,往后移一个这样移动避免数据被覆盖*/ /*循环是只循环这一句的*/ xsk=s;/*将输入的学生信息加入这个k位置*/ lenth+;/*长度+1*/ /写回wb 不能建立文件! for(i=0;ilenth;i+) else/*不再数组范围之内*/ 不能建立文件! s,sizeof(stu),1,fp);/显示void print() student s; 学生成绩表 n *n %10s %s %6s %6s %6s %6s %6s n 学号 平均成绩/从文件中读取
10、成绩信息/判断是否文件尾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);/统计void tongji() int i=0,j=0,k=0,l=0,m=0,n,p,q,r,t,u; student sN, *p1N,*p2N,*p3N,*p4N;/*用指针数组*/)=NULL) printf(cantsi+,sizeof(stu),1,fp);/*读入数据*/ t=i;i=0; for(u=0;ut;u+)/*以下每个指针数组用于指向各分数段的学生信息*/ if(s
11、i.aver=60&si.aver80) p2k+=&=80&90) p3l+=&=90) p4m+=& 学生成绩单 * n 不及格的人有: 姓名 学号 平均分n for(n=0;nname,p1n-num,p1n-aver);n 60-79分的人有: 姓名 学号 平均分n for(p=0;pname,p2p-num,p2p-n 80-89分的人有: for(q=0;qname,p3q-num,p3q-n 90以上的人有: for(r=0;rname,p4r-num,p4r-/删除:输入学生姓名,若该学生存在,则删除,并显示删除后余下的学生成绩信息void dele() student xsN
12、; int i=0,len,k=-1/*k=0)/*k0说明找到删除学生位置*/wb+ canlen; if(i=k) continue;/*从这个位置开始写入*/ else printf(n 删除失败! /*失败后重新返回菜单*/n 按任意键返回主菜单 print();/菜单选择void main() char ch; while(1) menu();/ 显示菜单 ch=getch();/选择菜单 if(ch=0) break; switch(ch)/判断功能项input();search();3modi();4insert();5print( );6tongji();7dele();n 谢谢使用!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1