c语言实习报告-菜单驱动的学生成绩管理程序_第1页
c语言实习报告-菜单驱动的学生成绩管理程序_第2页
c语言实习报告-菜单驱动的学生成绩管理程序_第3页
c语言实习报告-菜单驱动的学生成绩管理程序_第4页
c语言实习报告-菜单驱动的学生成绩管理程序_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

.z.--.--总结浙江农林大学高级语言程序设计(C)实习报告设计题目:菜单驱动的学生成绩管理程序专业环境科技学院班级地理信息系统091班姓名赵晨雪学号32009~2010学年第三学期编写一个菜单驱动的学生成绩管理程序。实现如下管理功能:•

能输入并显示n个学生的m门考试科目的成绩、总分和平均分。•

按总分进行排序。•

按**进行排序。•

任意输入一个**,能显示该学生的姓名、各门功课的成绩。•

将输入的学生成绩数据保存到文件中。•

从文件中读出学生成绩数据。关键词:显示数据;排序;查询功能;写入文件;读出数据;目录1需求分析………………….42详细设计………………….53调试分析………………….74用户手册………………….85测试结果………………..96附录………………..117参考文献………………..201需求分析1.1程序任务:用静态的数据结构(结构体数组)来存储和管理n个学生的**、、成绩等信息,进行编程。

排序函数是一个具有多种排序方式的通用的排序程序,即不仅可以实现成绩的升序排序,还可以实现成绩的降序排序。

程序能够进行异常处理,检查用户输入数据的有效性,在用户输入数据有错误(如类型错误)或无效时,不会中断程序的执行,程序具有一定的健壮性。

输出菜单形式如下:ManagementforStudents'scores

1.Appendrecord

2.Listrecord

3.Deleterecord

4.Modifyrecord

5.Searchrecord

6.SortScoreindescendingorderbysum

7.SortScoreinascendingorderbysum

8.SortScoreindescendingorderbynum

9.SortScoreinascendingorderbynum

W.WritetoaFile

R.ReadfromaFile

0.E*it

PleaseInputyourchoice:1.2其它规定输入的形式和输出值的范围输入学生编号(以%d形式输入),学生姓名(以%s形式输入,十位),学生成绩(%d)。输入的形式输出时以**(%d),(%s),成绩(%d),总分(%d),平均分(%f)形式1.2.3程序所能够达到的功能输入成绩计算总分和平均分;罗列成绩;删除修改记录;按总分升序和讲叙排列并输出成绩记录;按**升序和讲叙排列并输出成绩记录;2详细设计2.1本程序中所有用到的数据及其数据结构的定义:本程序使用结构体数组:#defineSTU_NUM 40 /*最多的学生人数*/#defineCOURSE_NUM 10 /*最多的考试科目*/structstudent{ int number; /*每个学生的***/ char name[10]; /*每个学生的姓名*/ int score[COURSE_NUM]; /*每个学生M门功课的成绩*/ int sum; /*每个学生的总成绩*/ float average; /*每个学生的平均成绩*/};2.2函数之间的调用关系图:2.3写出主程序及其主要模块的流程图:3调试分析3.1调试过程中遇到的问题是如何解决的以及对设计与实现的回顾和分析;在编写菜单函数时,使用了void函数,没有返回值,导致主函数switch语句使用不了。编写添加记录(append)函数求总分和平均值时,for语句后没有加{},打印不出来。编写写入文件函数(write)出了很多错误,打开文件语句:fp=fopen("student_data","wb");写错,导致文件无法打开,读出文件也无法打开;读出文件时,因为在if(fp==NULL)后加了";”,致使文件无法打开。(都是些细小但很要命的错误)3.2经验和体会当编写完程序,最后调试无误的时候,我长舒了口气。这几天一直在编写这个程序,第一天刚开始接触时还不太明白整个程序的作用,糊里糊涂地就开始了。从一些看起来比较简单小程序开始着手,写一些零散模块,然后开始对整个程序有了了解,删掉重复无用的语句,一边写一边调试,最后整个程序越来越长,不得不拿出几个部分在新建的程序里开始调试。最后所有小程序都通过了,再把它们连接在一起,调整这个长达五页多的大程序。看着"1error(s)”差点"晕”过去……不过通过这些天的学习真的学到很多,好多书本上零散的快被遗忘的知识都有被重新捡回来。学会了把一些小程序组合在一起,阅读和调试程序,查找错误……还有那个之前从没听说过的软件visio,也可以折腾几下画出很清晰的流程图。这些都是我的收获。4用户手册4.1详细列出每一步的操作步骤:第一步:在屏幕显示PleaseInputyourchoice:后输入"1”和回车。在字幕提示光标后依次输入**,姓名等(每个数据后都要加回车)。第二步:选择你要使用的功能,并输入对应项前面的字符加回车键。例如:显示结果如下ManagementforStudents'scores

1.Appendrecord

2.Listrecord

3.Deleterecord

4.Modifyrecord

5.Searchrecord

6.SortScoreindescendingorderbysum

7.SortScoreinascendingorderbysum

8.SortScoreindescendingorderbynum

9.SortScoreinascendingorderbynum

W.WritetoaFile

R.ReadfromaFile

0.E*it

PleaseInputyourchoice:ManagementforStudents'scores

1.Appendrecord

2.Listrecord

3.Deleterecord

4.Modifyrecord

5.Searchrecord

6.SortScoreindescendingorderbysum

7.SortScoreinascendingorderbysum

8.SortScoreindescendingorderbynum

9.SortScoreinascendingorderbynum

W.WritetoaFile

R.ReadfromaFile

0.E*it

PleaseInputyourchoice:1请输入数据:**_5测试结果5.1输入2组正确的数据:输入:<数据1组>A在"PleaseInputyourchoice:”后输入__1__加回车键 在提示(**,,成绩,成绩)下分别输入: 1zhao6090 2wen5070 输出: 总分150总分120平均分75.00平均分60B输入: 在"PleaseInputyourchoice:”后输入__4__加回车键 输入: 1 5tian7080 输出:**5,姓名tian,成绩70,成绩80,总分150平均分75.00**2,姓名wen,成绩50,成绩70,总分120平均分60.00C输入: 在"PleaseInputyourchoice:”后输入__3__加回车键 输入: 2 输出:**5,姓名tian,成绩70,成绩80,总分150平均分75.00**0,,成绩0,成绩0,总分0平均分0.00输入:<数据2组>A在"PleaseInputyourchoice:”后输入__1__加回车键 在提示(**,,成绩,成绩)下分别输入: 1tong4070 2wu6080 输出: 总分110总分140平均分55.00平均分70B输入: 在"PleaseInputyourchoice:”后输入__4__加回车键 输入: 2 7qing6070 输出:**1,姓名tong,成绩40,成绩70,总分110平均分55.00**7,姓名qing,成绩60,成绩70,总分130平均分65.00C输入: 在"PleaseInputyourchoice:”后输入__3__加回车键 输入: 7 输出:**1,姓名tong,成绩40,成绩70,总分110平均分55.00**0,,成绩0,成绩0,总分0平均分0.005.2输入2组错误的数据:输入:<数据3组>A在"PleaseInputyourchoice:”后输入__1__加回车键 在提示(**,,成绩,成绩)下分别输入: 1tong4070 2wu6080 输出: 总分110总分140平均分55.00平均分70B输入: 在"PleaseInputyourchoice:”后输入__4__加回车键 输入: 5 输出:Thenumberisnotfound!pleasecheckitagain!C输入: 在"PleaseInputyourchoice:”后输入__3__加回车键 输入: 7 输出:Thenumberisnotfound!pleasecheckitagain!输入:<数据4组>A在"PleaseInputyourchoice:”后输入__1__加回车键 在提示(**,,成绩,成绩)下分别输入: 1zhao6090 2wen5070 输出: 总分150总分120平均分75.00平均分60B输入: 在"PleaseInputyourchoice:”后输入__4__加回车键 输入: p 输出:Thenumberisnotfound!pleasecheckitagain!C输入: 在"PleaseInputyourchoice:”后输入__3__加回车键 输入: 9 输出:Thenumberisnotfound!pleasecheckitagain!6附录6.1程序源代码:#defineSTU_NUM 2 /*最多的学生人数*/#defineCOURSE_NUM 2 /*最多的考试科目*/#defineTUB50/*学生数*/#include<stdio.h>FILE*fp;structstudent{ int number; /*每个学生的***/ char name[10]; /*每个学生的姓名*/ int score[COURSE_NUM]; /*每个学生M门功课的成绩*/ int sum; /*每个学生的总成绩*/ float average; /*每个学生的平均成绩*/}s[TUB]={0,'ti',0,0,0};typedefstructstudentSTU;charmenu(void)/*菜单函数*/{ charch; printf("\nManagementforStudents'scores\n"); printf("1Appendrecord\n"); printf("2Listrecord\n"); printf("3Deleterecord\n"); printf("4Modifyrecord\n"); printf("5Searchrecord\n"); printf("6SortScoreindescendingorderbysum\n"); printf("7SortScoreinascendingorderbysum\n"); printf("8SortScoreindescendingorderbynum\n"); printf("9SortScoreinascendingorderbynum\n"); printf("wWritetoaFile\n"); printf("rReadfromaFile\n"); printf("0E*it\n"); printf("PleaseInputyourchoice:"); scanf("%c",&ch); return(ch);}voidappend()/*添加记录,计算出总分和平均值*/{ inti,j; printf("请输入数据:\n");//输入数据 for(i=0;i<STU_NUM;i++) { printf("**:"); scanf("%d",&s[i].number); printf(":"); scanf("%s",s[i].name); for(j=0;j<COURSE_NUM;j++) { printf("成绩:"); scanf("%d",&s[i].score[j]); } } for(i=0;i<STU_NUM;i++)//求总分 { for(j=0;j<COURSE_NUM;j++) s[i].sum=s[i].sum+s[i].score[j]; printf("总分%d",s[i].sum); } for(i=0;i<STU_NUM;i++)//求平均数 { s[i].average=(s[i].sum)/(COURSE_NUM); printf("平均分%.2f",s[i].average); }}voidlist()/*显示记录_在屏幕中打印所有学生成绩*/{ inti,j; for(i=0;i<STU_NUM;i++) { printf("**%3d,%s,",s[i].number,s[i].name); for(j=0;j<COURSE_NUM;j++) printf("分数%4d,",s[i].score[j]); printf("总分%4d,平均分%4.2f\n",s[i].sum,s[i].average); }}voiddelete()/*删除记录_用后面的数据替换前一个*/{ inta,i,b=0; printf("Pleaseinputstudent'snumberyouwanttodelete:\n"); scanf("%d",&a); for(i=0;i<STU_NUM;i++) { if(s[i].number==a) {b=1;s[i]=s[i+1];} } if(b==0) printf("Thenumberisnotfound!\npleasecheckitagain!\n");}voidmodify()/*修改记录_对要修改的数据重新复值*/{ intb=0,a,i,j; printf("Pleaseinputstudent'snumberyouwanttomodify:\n"); scanf("%d",&a); for(i=0;i<STU_NUM;i++) { if(s[i].number==a) { b=1; scanf("%d%s",&s[i].number,&s[i].name); for(j=0;j<COURSE_NUM;j++) scanf("%d",&s[i].score[j]); } } if(b==0) printf("Thenumberisnotfound!\npleasecheckitagain!\n");}voidsearch()/*查询记录_输入学生**,输出对应的成绩数据*/{ inta,i,j; printf("Pleaseinputstudent'snumberyouwanttomodify:\n"); scanf("%d",&a); for(i=0;i<STU_NUM;i++) { if(s[i].number==a) printf("%d,%s,",s[i].number,s[i].name); for(j=0;j<COURSE_NUM;j++) printf("%d,",s[i].score[j]); printf("%d,%.2f\n",s[i].sum,s[i].average); }}voiddescending_sum()/*按总分排序_降序排列,打印出学生姓名和成绩*/{ inti,j; STUt;for(i=0;i<STU_NUM;i++) { for(j=i+1;j<STU_NUM;j++)if(s[i].sum<s[j].sum) {t=s[j];s[j]=s[i];s[i]=t;} } for(i=0;i<STU_NUM;i++) { printf("%d,%s,",s[i].number,s[i].name); for(j=0;j<COURSE_NUM;j++) printf("%d,",s[i].score[j]); printf("%d,%.2f\n",s[i].sum,s[i].average); }}voidascending_sum()/*按总分排序_升序排列,打印出学生姓名和成绩*/{ inti,j; STUt;for(i=0;i<STU_NUM;i++) { for(j=i+1;j<STU_NUM;j++)if(s[i].sum>s[j].sum) {t=s[j];s[j]=s[i];s[i]=t;} } for(i=0;i<STU_NUM;i++) { printf("%d,%s,",s[i].number,s[i].name); for(j=0;j<COURSE_NUM;j++) printf("%d,",s[i].score[j]); printf("%d,%.2f\n",s[i].sum,s[i].average); }}voiddescending_number()/*按**排序_按**降序排列,打印出学生姓名和成绩*/{ inti,j; STUt;for(i=0;i<STU_NUM;i++) { for(j=i+1;j<STU_NUM;j++)if(s[i].number<s[j].number) {t=s[j];s[j]=s[i];s[i]=t;} } for(i=0;i<STU_NUM;i++) { printf("%d,%s,",s[i].number,s[i].name); for(j=0;j<COURSE_NUM;j++) printf("%d,",s[i].score[j]); printf("%d,%.2f\n",s[i].sum,s[i].average); }}voidascending_number()/*按**排序_按**降序排列,打印出学生姓名和成绩*/{ inti,j; STUt;for(i=0;i<STU_NUM;i++) { for(j=i+1;j<STU_NUM;j++)if(s[i].number>s[j].number) {t=s[j];s[j]=s[i];s[i]=t;} } for(i=0;i<STU_NUM;i++) { printf("%d,%s,",s[i].number,s[i].name); for(j=0;j<COURSE_NUM;j++) printf("%d,",s[i].score[j]); printf("%d,%.2f\n",s[i].sum,s[i].average); }}voidwrite()/*写入文件*/{ FILE*fp; inti; fp=fopen("student_data","wb"); for(i=0;i<STU_NUM;i++) { fwrite(&s[i],sizeof(structstudent),1,fp); printf("writet

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论