还剩14页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
1. 系统菜单的主要功能
(1)输入若干条记录
(2)显示所有记录
(3)按学号排序
(4)插入一条记录
(5)按姓名查找,删除一条记录
(6)查找并显示一条记录
(7)输出统计信息(新增)
(8)从正文中添加数据到结构体数组中
(9)将所有数据写入文件中
(0)退出程序2. 题目分析该题主要考察学生对结构体,指针,文件的操作,以及C语言算法的掌握所以完成此道题目要求较强的设计能力,尤其是要有一种大局观的意识如何调程序也非常重要,通过这个程序可以学习到以前调试短程序没有的的经验菜单中的每一个选项都对应一个子程序,子程序的算法几乎囊获了所有C语言学过的技巧,下面就各个子程序中的功能进行说明功能1和4的算法相似,输入一条记录到结构体中去,其中有一部很关键,就是通过gets将所有的多余的字符,回车读去,否则就会出错功能2是显示所有的记录,通过循环输出,格式也比较重要功能3为按学号排序,因为学号定义成了字符数组的形式,因此在运用冒泡法进行排序的时候,要用到strcmpstrcpy等函数功能5为按姓名删除记录,先输入姓名,再一一比较,如果没有则返回失败信息,如果找到就将此记录都向前移一位,返回n-1功能6的算法在5中就已经体现了,输入姓名,一一比较功能7为新增的功能,因为考虑到原来给出的函数中竟然没有对学生成绩的统计功能,因此新增此功能,可以得出所有的记录个数,最高、最低、平均分,并输出相关的学生信息等功能8和9是对文件的操作,提前准备好数据3. __学了将近一个学期的C语言了,说实话,挺疲惫的,特别是最后的课设,调得好烦但现在想想收获也不小,以前高中学VB的时候,一直觉得计算机语言挺简单的,现在看来当时根本没有接触到计算机语言的精髓看到了自己做出的这个小程序,挺自豪的,以前一直以为做出一个软件一样的程序是遥不可及的事情我选择的是第二个程序,因为自我觉得它涉及面更广,把以前学过的算法几乎都过了一遍以后在碰到像等级考试这样的事情我就再也不怕了感谢藏洌老师的热情指导恭维的话就不多说了,__大概就这么多吧4. 程序正文部分#includestdio.h /*引用库函数*/#includestdlib.h#includectype.h#includestring.h typedefstruct /*定义结构体数组*/{ charnum
[10]; /*学号*/ charname
[20]; /*姓名*/ intscore; /*成绩*/}Student;Studentstu
[80]; /*结构体数组变量*/ intmenu_select /*菜单函数*/{ charc; do{ systemcls; /*运行前清屏*/ printf\t\t****StudentsGrade__nagementSystem****\n; /*菜单选择*/ printf\t\t |
1.InputRecords |\n; printf\t\t |
2.DisplayAllRecords |\n; printf\t\t |
3.Sort |\n; printf\t\t |
4.InsertaRecord |\n; printf\t\t |
5.DeleteaRecord |\n; printf\t\t |
6.Query |\n; printf\t\t |
7.Statistic |\n; printf\t\t |
8.AddRecordsfromaTextFile|\n; printf\t\t |
9.WritetoaTextfile |\n; printf\t\t |
0.Quit |\n; printf\t\t*****************************************\n; printf\t\t\tGiveyourChoi__0-9:; c=getchar; /*读入选择*/ }whilec0||c9; returnc-0; /*返回选择*/} intInputStudentstud[]intn /*输入若干条记录*/{inti=0; charsignx
[10]; /*x
[10]为清除多余的数据所用*/ whilesign!=nsign!=N /*判断*/ { printf\t\t\tstudentsnum:; /*交互输入*/ scanf\t\t\t%sstud[n+i].num; printf\t\t\tstudentsname:; scanf\t\t\t%sstud[n+i].name; printf\t\t\tstudentsscore:; scanf\t\t\t%dstud[n+i].score; getsx; /*清除多余的输入*/ printf\t\t\tanymorerecordsY/N; scanf\t\t\t%csign; /*输入判断*/ i++; } returnn+i;} voidDisplayStudentstud[]intn /*显示所有记录*/{ inti; printf\t\t\t-----------------------------------\n; /*格式头*/ printf\t\t\tnumber name score\n; printf\t\t\t-----------------------------------\n; fori=1;in+1;i++ /*循环输入*/ { printf\t\t\t%-16s%-15s%d\nstud[i-1].numstud[i-1].namestud[i-1].score; ifi1i%10==0 /*每十个暂停*/ {printf\t\t\t-----------------------------------\n; /*格式*/ printf\t\t\t; systempause; printf\t\t\t-----------------------------------\n; } } printf\t\t\t; systempause;} voidSort_by_numStudentstud[]intn /*按学号排序*/{ intij*p*qs; chart
[10]; fori=0;in-1;i++ /*冒泡法排序*/ forj=0;jn-1-i;j++ ifstrcmpstud[j].numstud[j+1].num0 {strcpytstud[j+1].num; strcpystud[j+1].numstud[j].num; strcpystud[j].numt; strcpytstud[j+1].name; strcpystud[j+1].namestud[j].name; strcpystud[j].namet; p=stud[j+1].score; q=stud[j].score; s=*p; *p=*q; *q=s; }} intInsert_a_recordStudentstud[]intn /*插入一条记录*/{charx
[10]; /*清除多余输入所用*/ printf\t\t\tstudentsnum:; /*交互式输入*/ scanf\t\t\t%sstud[n].num; printf\t\t\tstudentsname:; scanf\t\t\t%sstud[n].name; printf\t\t\tstudentsscore:; scanf\t\t\t%dstud[n].score; getsx; n++; Sort_by_numstudn; /*调用排序函数*/ printf\t\t\tInsertSuc__ssed!\n; /*返回成功信息*/ returnn;} intDelete_a_recordStudentstud[]intn /*按姓名查找,删除一条记录*/{ chars
[20]; inti=0j; printf\t\t\t____mehishername:; /*交互式问寻*/ scanf%ss; whilestrcmpstud[i].names!=0ini++; /*查找判断*/ ifi==n { printf\t\t\tnotfind!\n; /*返回失败信息*/ returnn; } forj=i;jn-1;j++ /*删除操作*/ { strcpystud[j].numstud[j+1].num; strcpystud[j].namestud[j+1].name; stud[j].score=stud[j+1].score; } printf\t\t\tDeleteSuc__ssed!\n; /*返回成功信息*/ returnn-1;} voidQuery_a_recordStudentstud[]intn /*查找并显示一个记录*/{ chars
[20]; inti=0; printf\t\t\tinputhishername:; /*交互式输入*/ scanf\t\t\t%ss; whilestrcmpstud[i].names!=0ini++; /*查找判断*/ ifi==n { printf\t\t\tnotfind!\n; /*输入失败信息*/ return; } printf\t\t\thishernumber:%s\nstud[i].num; /*输出该学生信息*/ printf\t\t\thisherscore:%d\nstud[i].score;}voidStatisticStudentstud[]intn /*新增功能,输出统计信息*/{ intij=0k=0sum=0; float__er; /*成绩平均值*/ fori=0;in;i++ /*循环输入判断*/ { sum+=stud[i].score; ifstud[j].scorestud[i].scorej=i; ifstud[k].scorestud[i].scorek=i; } __er=
1.0*sum/n; printf\t\t\tthereare%drecords.\nn; /*总共记录数*/ printf\t\t\tthehignestscore:\n; /*最高分*/ printf\t\t\tnumber:%s name:%s score:%d\nstud[j].numstud[j].namestud[j].score; printf\t\t\tthelowestscore:\n; /*最低分*/ printf\t\t\tnumber:%s name:%s score:%d\nstud[k].numstud[k].namestud[k].score; printf\t\t\tthe__eragescoreis%
5.2f\n__er; /*平均分*/} intAddfromTextStudentstud[]intn /*从文件中读入数据*/{ inti=0num; FILE*fp; /*定义文件指针*/ charfilename
[20]; /*定义文件名*/ printf\t\t\tInputthefilename:; scanf\t\t\t%sfilename; /*输入文件名*/ iffp=fopenfilenamerb==NULL /*打开文件*/ { printf\t\t\tcanntopenthefile\n; /*打开失败信息*/ printf\t\t\t; systempause; returnn; } fscanffp%dnum; /*读入总记录量*/ whileinum /*循环读入数据*/ { fscanffp%s%s%dstud[n+i].numstud[n+i].namestud[n+i].score; i++; } n+=num; fclosefp; /*关闭文件*/ printf\t\t\tSuc__ssed!\n; printf\t\t\t; systempause; returnn;} voidWritetoTextStudentstud[]intn /*将所有记录写入文件*/{ inti=0; FILE*fp; /*定义文件指针*/ charfilename
[20]; /*定义文件名*/ printf\t\t\tWriteRecordstoaTextFile\n; /*输入文件名*/ printf\t\t\tInputthefilename:; scanf\t\t\t%sfilename; iffp=fopenfilenamew==NULL /*打开文件*/ { printf\t\t\tcanntopenthefile\n; systempause; return; } fprintffp%d\nn; /*循环写入数据*/ whilein { fprintffp%-16s%-15s%d\nstud[i].numstud[i].namestud[i].score; i++; } fclosefp; /*关闭文件*/ printfSuc__ssed!\n; /*返回成功信息*/} void__in /*主函数*/{ intn=0; for;; { switchmenu_select /*选择判断*/ { case1: printf\t\t\tInputRecords\n; /*输入若干条记录*/ n=Inputstun; break; case2: printf\t\t\tDisplayAllRecords\n; /*显示所有记录*/ Displaystun; break; case3: printf\t\t\tSort\n; Sort_by_numstun; /*按学号排序*/ printf\t\t\tSortSu__essed!\n; printf\t\t\t; systempause; break; case4: printf\t\t\tInsertaRecord\n; n=Insert_a_recordstun; /*插入一条记录*/ printf\t\t\t; systempause; break; case5: printf\t\t\tDeleteaRecord\n; n=Delete_a_recordstun; /*按姓名查找,删除一条记录*/ printf\t\t\t; systempause; break; case6: printf\t\t\tQuery\n; Query_a_recordstun; /*查找并显示一个记录*/ printf\t\t\t; systempause; break; case7: printf\t\t\tStatistic\n; Statisticstun; /*新增功能,输出统计信息*/ printf\t\t\t; systempause; break; case8: printf\t\t\tAddRecordsfromaTextFile\n; n=AddfromTextstun; /*新增功能,输出统计信息*/ break; case9: printf\t\t\tWritetoaTextfile\n; WritetoTextstun; /*循环写入数据*/ printf\t\t\t; systempause; break; case0: printf\t\t\tH__eaGoodLuckBye-bye!\n; /*结束程序*/ printf\t\t\t; systempause; exit0; } }}
4.函数调用关系图Reversehead函数按学号排序
5.设计测试流程
1、进入界面
2、输入选项1,回车; 按提示输入数据
3、回到主菜单; 输入选项7,回车; 输入文件名data.___,回车; 出现成功提示,则读入文件操作成功
4、回到主菜单,输入2,回车 每10个暂停显示数据
5、回到主菜单,输入3,回车 出现排序成功信息
6、回到主菜单,输入4,回车 按提示插入一组数据
7、回到主菜单,输入5,回车 按提示输入姓名,删除数据 出现删除成功的信息
8、回到主菜单,输入6,回车 输入姓名进行查询
9、回到主菜单,输入7,回车 出现统计信息
10、回到主菜单,输入9,回车输入result.___,回车出现成功写入文件的信息
11、回到主菜单,输入0,回车退出系统。