




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 系统菜单的主要功能(1)输入若干条记录(2)显示所有记录(3)按学号排序(4)插入一条记录(5)按姓名查找,删除一条记录(6)查找并显示一条记录(7)输出统计信息 (新增)(8)从正文中添加数据到结构体数组中(9)将所有数据写入文件中 (0)退出程序2 题目分析该题主要考察学生对结构体,指针,文件的操作,以及c语言算法的掌握,所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识。如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验。菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有c语言学过的技巧,下面就各个子程序中的功能进行说明:功能1和4的算法相
2、似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错。功能2是显示所有的记录,通过循环输出,格式也比较重要。功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmp,strcpy等函数。功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1。功能6的算法在5中就已经体现了,输入姓名,一一比较。功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关
3、的学生信息等。功能8和9是对文件的操作,提前准备好数据。3 感受学了将近一个学期的c语言了,说实话,挺疲惫的,特别是最后的课设,调得好烦。但现在想想收获也不小,以前高中学vb的时候,一直觉得计算机语言挺简单的,现在看来当时根本没有接触到计算机语言的精髓。看到了自己做出的这个小程序,挺自豪的,以前一直以为做出一个软件一样的程序是遥不可及的事情。我选择的是第二个程序,因为自我觉得它涉及面更广,把以前学过的算法几乎都过了一遍。以后在碰到像等级考试这样的事情我就再也不怕了。感谢藏洌老师的热情指导。恭维的话就不多说了,感受大概就这么多吧。4 程序正文部分#include /*引用库函数*/#includ
4、e#include#includetypedef struct /*定义结构体数组*/ char num10; /*学号*/ char name20; /*姓名*/ int score; /*成绩*/student;student stu80; /*结构体数组变量*/int menu_select() /*菜单函数*/ char c; do system(cls); /*运行前清屏*/ printf(tt*students grade management system*n); /*菜单选择*/ printf(tt | 1. input records |n); printf(tt | 2.
5、display all records |n); printf(tt | 3. sort |n); printf(tt | 4. insert a record |n); printf(tt | 5. delete a record |n); printf(tt | 6. query |n); printf(tt | 7. statistic |n); printf(tt | 8. add records from a text file|n); printf(tt | 9. write to a text file |n); printf(tt | 0. quit |n); printf(t
6、t*n); printf(tttgive your choice(0-9):); c=getchar(); /*读入选择*/ while(c9); return(c-0); /*返回选择*/int input(student stud,int n) /*输入若干条记录*/int i=0;char sign,x10; /*x10为清除多余的数据所用*/while(sign!=n&sign!=n) /*判断*/ printf(tttstudents num:); /*交互输入*/ scanf(ttt%s,studn+i.num); printf(tttstudents name:); scanf(
7、ttt%s,studn+); printf(tttstudents score:); scanf(ttt%d,&studn+i.score); gets(x); /*清除多余的输入*/ printf(tttany more records?(y/n); scanf(ttt%c,&sign); /*输入判断*/ i+;return(n+i);void display(student stud,int n) /*显示所有记录*/int i;printf(ttt-n); /*格式头*/printf(tttnumber name scoren);printf(ttt-n);for(i=1;
8、i1&i%10=0) /*每十个暂停*/ printf(ttt-n); /*格式*/ printf(ttt); system(pause); printf(ttt-n); printf(ttt);system(pause);void sort_by_num(student stud,int n) /*按学号排序*/ int i,j,*p,*q,s; char t10; for(i=0;in-1;i+) /*冒泡法排序*/ for(j=0;j0) strcpy(t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t);
9、strcpy(t,studj+1.name); strcpy(studj+1.name,); strcpy(,t); p=&studj+1.score; q=&studj.score; s=*p; *p=*q; *q=s; int insert_a_record(student stud,int n) /*插入一条记录*/char x10; /*清除多余输入所用*/ printf(tttstudents num:); /*交互式输入*/ scanf(ttt%s,studn.num); printf(tttstudents name:); scanf(tt
10、t%s,); printf(tttstudents score:); scanf(ttt%d,&studn.score); gets(x); n+; sort_by_num(stud,n); /*调用排序函数*/ printf(tttinsert successed!n); /*返回成功信息*/ return(n);int delete_a_record(student stud,int n) /*按姓名查找,删除一条记录*/ char s20; int i=0,j; printf(ttttell me his(her) name:); /*交互式问寻*/ scanf(%s
11、,s); while(strcmp(,s)!=0&in) i+; /*查找判断*/ if(i=n) printf(tttnot find!n); /*返回失败信息*/ return(n); for(j=i;jn-1;j+) /*删除操作*/ strcpy(studj.num,studj+1.num); strcpy(,studj+1.name); studj.score=studj+1.score; printf(tttdelete successed!n); /*返回成功信息*/ return(n-1);void query_a_record(stud
12、ent stud,int n) /*查找并显示一个记录*/ char s20; int i=0; printf(tttinput his(her) name:); /*交互式输入*/ scanf(ttt%s,s); while(strcmp(,s)!=0&in) i+; /*查找判断*/ if(i=n) printf(tttnot find!n); /*输入失败信息*/ return; printf(ttthis(her) number:%sn,studi.num); /*输出该学生信息*/ printf(ttthis(her) score:%dn,studi.score)
13、;void statistic(student stud,int n) /*新增功能,输出统计信息*/ int i,j=0,k=0,sum=0; float aver; /*成绩平均值*/ for(i=0;istudi.score) j=i; if(studk.scorestudi.score) k=i; aver=1.0*sum/n; printf(tttthere are %d records.n,n); /*总共记录数*/ printf(tttthe hignest score:n); /*最高分*/ printf(tttnumber:%s name:%s score:%dn,studj
14、.num,,studj.score); printf(tttthe lowest score:n); /*最低分*/ printf(tttnumber:%s name:%s score:%dn,studk.num,,studk.score); printf(tttthe average score is %5.2fn,aver); /*平均分*/int addfromtext(student stud,int n) /*从文件中读入数据*/ int i=0,num; file *fp; /*定义文件指针*/ char filename20; /*定义文件
15、名*/ printf(tttinput the filename:); scanf(ttt%s,filename); /*输入文件名*/ if(fp=fopen(filename,rb)=null) /*打开文件*/ printf(tttcannt open the filen); /*打开失败信息*/ printf(ttt); system(pause); return(n); fscanf(fp,%d,&num); /*读入总记录量*/ while(inum) /*循环读入数据*/ fscanf(fp,%s%s%d,studn+i.num,studn+,&studn+i.sco
16、re); i+; n+=num; fclose(fp); /*关闭文件*/ printf(tttsuccessed!n); printf(ttt); system(pause); return(n);void writetotext(student stud,int n) /*将所有记录写入文件*/int i=0;file *fp; /*定义文件指针*/char filename20; /*定义文件名*/ printf(tttwrite records to a text filen); /*输入文件名*/ printf(tttinput the filename:); scanf(ttt%s
17、,filename); if(fp=fopen(filename,w)=null) /*打开文件*/ printf(tttcannt open the filen); system(pause); return; fprintf(fp,%dn,n); /*循环写入数据*/ while(in) fprintf(fp,%-16s%-15s%dn,studi.num,,studi.score); i+; fclose(fp); /*关闭文件*/ printf(successed!n); /*返回成功信息*/void main() /*主函数*/int n=0; for(;) sw
18、itch(menu_select() /*选择判断*/ case 1: printf(tttinput recordsn); /*输入若干条记录*/ n=input(stu,n); break; case 2: printf(tttdisplay all recordsn); /*显示所有记录*/ display(stu,n); break; case 3: printf(tttsortn); sort_by_num(stu,n); /*按学号排序*/ printf(tttsort suceessed!n); printf(ttt); system(pause); break; case 4:
19、 printf(tttinsert a recordn); n=insert_a_record(stu,n); /*插入一条记录*/ printf(ttt); system(pause); break; case 5: printf(tttdelete a recordn); n=delete_a_record(stu,n); /*按姓名查找,删除一条记录*/ printf(ttt); system(pause); break; case 6: printf(tttqueryn); query_a_record(stu,n); /*查找并显示一个记录*/ printf(ttt); system(pause); break; case 7: printf(tttstatisticn); statistic(stu,n); /*新增功能,输出统计信息*/ printf(ttt); system(pa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加油站现场安全管理考核试卷
- 印刷机智能传感器网络的技术发展潜力考核试卷
- 工业控制计算机在智能建筑管理系统中的作用考核试卷
- D城市模型构建与应用考核试卷
- 机床功能部件在深海探测设备中的抗压性能考核试卷
- 数字出版物的市场趋势与用户需求分析考核试卷
- 招标投标居间合同范本
- 业务提成附加合同范本
- 养殖合同鱼塘养殖合同范本
- 加工铁筐合同范本
- 细菌群体感应系统及其应用课件
- 司法鉴定程序通则(试行)
- 内衬修复用HTPO管材企标
- 部编教材一年级下册生字笔顺笔画
- 通达信指标——江恩轮
- 二维火收银使用手册
- 神经电生理检查ppt课件
- 管路滑脱风险评估表
- 塑钢板桩专项施工方案
- EN12680.3中文
- 欧科模块化风冷冷水热泵机组报警代码和维修步骤
评论
0/150
提交评论