1、 学 年 设 计 报 告设计题目 运动会成绩管理程序设计 作者姓名 张瑞雪、张恒玉、苏继薇、许聪爱、张俐所学专业 网络工程 指导教师 王汇彬 2012年 9 月 2 日 学年设计任务书学年设计题目运动会成绩管理程序设计组长张瑞雪学号2011211338班级11级网络工程2班组别第三组专业网络工程组员张恒玉、苏继薇、许聪爱、张俐指导教师王汇彬学年设计目的第一:增强对所学知识的应用,通过团队合作和对资料的查阅,对实际问题进行分析和解决,提高代码的编写能力;第二:通过对实际问题的分析,选取相关资料,解决问题;第三:提高团队的合作能力和动手能力。学年设计所需环境PC,Windows XP,Visual
2、 C+ 6.0学年设计任务要求设计并实现一个简单的运动会成绩管理程序,实现运动员及比赛信息的管理,信息使用文件进行保存。学年设计工作进度计划序号起止日期工 作 内 容分工情况17-17-15查找资料张瑞雪:介绍学年设计内容;张俐、苏继薇、许聪爱、张恒玉:查找资料及搜索相关信息。27-167-31完成程序的基本框架张瑞雪、张恒玉:分析所要设计的各个子函数;苏继薇、张俐、许聪爱:设计菜单界面和主函数。38-18-24编写函数张瑞雪:编写保存和读取两个子函数;张恒玉:编写添加和查找子函数;张俐:编写显示子函数;苏继薇:编写删除和更改两个子函数;许聪爱:编写排序子函数。48-258-28分析错误,并解
3、决错误所有组员一起合作。58-299-1整理文档与修正张俐:在文档中总结设计的目的;张恒玉:编写程序的详细模块设计;张瑞雪:编写程序的调试说明;许聪爱:整理整个文档。69-2答辩张瑞雪、许聪爱、张恒玉、苏继薇、张俐指导教师签字: 年 月 日系(教研室)审核意见:系(教研室)主任签字: 年 月 日目 录摘要1关键词11绪论11.1 研究背景11.2主要工作11.3本文结构12系统设计12.1需求分析12.2功能模块设计22.3系统工作流程23 详细设计53.1系统设计方案53.2添加信息函数63.3 查询函数73.4修改函数83.5 删除函数93.6排序函数94系统测试115.结束语15参考文献
4、15滁州学院本科学年设计运动会成绩管理程序设计摘要:运动会是一个全民健身的活动,在运动会里可以提高人们的身体素质。开发本系统是为了更方便的记录比赛成绩。本系统使用C语言作为开发语言,实现了运动员和比赛信息的管理。信息使用文件进行保存,通过对不同项目的成绩进行排序,用户可以方便的查看当前运动员的成绩排名。关键词:运动会成绩管理;C语言;VC+ 6.01绪论1.1 研究背景运动会成绩管理程序设计的开发是为了方便记录比赛成绩,运动员的状况和成绩,对比赛成绩进行排名。这个系统以快捷,简便为原则,更加方便了对运动会成绩的记录。运动会是很早以前就有的一项组织性活动,它的存在使人们的身体得到了锻炼。运动会是
5、一项必不可少的活动,开发这个系统可以使运动会成绩的记录变的更加方便。1.2主要工作本设计开发了一款应用于运动会成绩管理的程序,实现了运动员信息和比赛信息的增加、删除、修改以及查询操作。针对不同项目,根据运动员的比赛成绩进行排序。信息使用文件进行存储,每次执行增加、删除、修改等更新操作后都会对文件内容进行更新。1.3本文结构本文第1部分绪论主要说明了本文的研究背景、主要工作和实现方法。第2部分系统设计阐述了需求分析、系统模型设计和系统工作流程设计。第3详细设计详细介绍了系统各个功能模块。第4部分系统调试,通过调试程序发现程序中的不足并加以改正。2系统设计2.1需求分析本系统主要实现如下功能:增加
6、、删除、修改、查询运动员信息;对运动员的信息进行修改,记录,查询。运动员信息主要包括学号、姓名、专业、参加的比赛项目以及成绩。增加、删除、修改、查询运动员比赛成绩;主要实现程序最初运行时运动员数据的录入以及其后的运行数据的追加功能,按照号码对运动员的数据记录进行修改、记录、查询、删除。针对不同项目对运动员的成绩进行排名;通过对各个项目成绩进行递减排序,对运动员的成绩进行单项排名。2.2功能模块设计经过对程序设计题目的分析可知,整个程序的设计实现大致分为5个模块,每一个模块对应一个函数。在这些函数当中,添加运动员数据函数,删除数据函数,某项成绩排序函数的实现严格按照题目的要求。读取文件函数和保存
7、信息函数对其它函数的实现起辅助作用,主函数及菜单函数控制程序的整体运行。录入信息模块是录入运动员信息、查询信息模块是查询运动员信息的、修改信息模块可以对运动员信息进行修改、删除模块可对运动员信息进进行删除、成绩排名是对运动员的成绩进行排名,功能模块见图2-1所示。图2-1 功能模块图2.3系统工作流程(1)添加信息函数数据分为两种情况,其一是在运动员文件(student.txt)不存在的情况下,首先由程序创建一个新文件,并将录入的运动员信息写入该文件当中;其二是在运动员文件(student.txt)已经存在的情况下,此时文件以追加的方式打开,这样保证以前已经存在的数据不丢失。如图2-2所示。图
8、2-2添加信息流程图(2)查询信息函数查询文件是在已存的运动员信息中进行查询,可对运动员信息进行查询显示运动员信息。通过录入运动员号码num,与stui.num做比较,结果相同进行m+,m=reads(stu);来提取文件中的数据。如图2-3所示。图2-3查询信息流程图(3)修改信息函数修改信息是对运动员信息进行修改,通过输入number与stui.num比较,如果相同则对该项信息进行修改,修改后的信息将保存在文件中。如图2-4所示。图2-4修改信息流程图(4)删除信息函数该函数的核心内容是删除算法以及最终对源文件的更新。该函数执行时,首先调用reads函数将文件中的运动员信息读入数组当中,并
9、由用户输入待删除运动员的号码,而后按照该号码进行查找,如果文件中存在该运动员的数据,则采用删除算法删除,否则输出运动员信息不存在的提示信息。对运动员信息的具体删除算法是在结构体数组中实现的,当运动员的信息被找到后,位于数组中该学生后面的运动员记录依次向前移动一个元素的位置,这些操作完成后,要删除运动员信息就被后面的数组元素覆盖掉了,也就实现了删除。如图2-5所示。图2-5删除信息流程图 排序函数对于某项的排序采用的排序算法是冒泡法排序,整个排序过程在结构体数组stu中实现,由于排序算法涉及到两个数组元素的信息交换,因此还需要定义一个中间变量来协助。排序函数使运动员数据的排列顺序发生了变化,因此
10、也需要对源文件进行更新。此外,对于运动员排序后名次的确定,仅在结果输出时予以显示,并未将名次信息写入源文件。具体的程序段如下(由于各项成绩排序函数相同,所以只给出百米赛跑排名程序)如图2-6所示。2-6排序信息流程图3 详细设计3.1系统设计方案本系统中用到了结构体数组。该结构体数组中包含字符串,系统的设计方案如下:运动员结构体数组struct studentchar num20;/运动员号码char name10;/运动员名字float baimi;/百米赛跑成绩float sanjitiao;/三级跳成绩float chenggantiao;/撑杆跳成绩;(2)函数void menu();
11、/菜单函数int reads(struct student stuN);/读取运动员信息void save(struct student stuN,int n);/储存运动员信息void search();/查询运动员信息void add();/添加运动员信息void del();/删除运动员信息void sort();/ 按百米赛跑成绩查询void keep();/按三级跳成绩查询void sheep();/按撑杆跳成绩查询void query();/退出程序void show();/显示运动员信息void change();/更改运动员信息3.2添加信息函数由程序创建一个新文件,再输入需要
12、添加的运动员数量和信息,并将添加的运动员信息写入创建的文件中。具体函数如下:void add()/*添加运动员信息*/ FILE *fp; int n,i; struct student stu; if(fp=fopen(student.txt,a)=NULL) /如果文件已经存在,可以追加学生信息 if(fp=fopen(student.txt,w)=NULL) / 文件不存在时,创建新文件,输入学生信息 printf(文件打开失败!n); return; printf(t请输入要添加的运动员数量(按回车键确认): ); scanf(%d,&n); for(i=1;i=n;i+) print
13、f(n请输入第%d个运动员的学号,姓名,专业,参加的项目及成绩:n,i); scanf(%s%s%s%s%f,stu.num, stu.name,stu.zhuanye,stu.xiangmu,&stu.score); fseek(fp,0,2);if(ftell(fp)!=0)fprintf(fp,n); fprintf(fp,%s %s %s %s %f,stu.num,stu.name,stu.zhuanye,stu.xiangmu,stu.score); fclose(fp);3.3 查询函数查询是在已存的运动员信息中查询,通过录入运动员号码,与文件中的运动员信息比较。具体函数如下:v
14、oid search() int i=0,m,n;char name10,num20 ;struct student stuN;n=reads(stu);printf(tttn请选择查询方式:n); printf(ttt1-学号 n); printf(ttt2-姓名 n); printf(tt请选择: ); scanf(%d,&m); while(m!=1&m!=2 ) printf(ntt输入错误,请重新选择:);scanf(%d,&m);if(m=1) printf(tt请输入运动员学号:); scanf(%s,num); printf(t学号t姓名t专业t参加的项目t成绩tn); for
15、(i=0; in; i+) if(strcmp(stui.num,num)=0)printf(n%12s%11s%11s%12s%11.2fn,stui.num,stui.name,stui.zhuanye,stui.xiangmu,stui.scor if(m=2) printf(tt请输入运动员的姓名:); scanf(%s,name); printf(t学号t姓名t专业t参加的项目t成绩tn); for(i=0; in; i+) if(strcmp(stui.name,name)=0)printf(n%12s%11s%11.2s%12.2s%11.2fn,stui.num,stui.na
16、me,stui.zhuanye,stui.xiangmu,stui.score); 3.4修改函数修改信息是对已存的运动员信息进行修改,通过输入运动员号码与文件中的比较,如果相同则进行修改。具体函数如下:void change() struct student stuN; int n,i; char number20; printf(nt请输入要更改信息的运动员的学号(按回车键确认): ); scanf(%s,number); n=reads(stu); for(i=0;i=n) printf(tt无此学生信息!); return;printf(n请输入更改后学生的学号,姓名,专业,参加的项目
17、,成绩(按回车键确):n); scanf(%s%s%s%s%f,stui.num,stui.name,stui.zhuanye,stui.xiangmu,&stui.score); save(stu,n);3.5 删除函数输入想要删除的运动员的号码,而后按照号码进行查找,如果文件中存在该运动员的数据,则采用删除算法删除,如果不存在则提示该运动员不存在。具体函数如下:void del() struct student stuN; char number20; int n,i,j; n=reads(stu); printf(nt请输入要删除信息运动员学号(按回车键确认):); scanf(%s,n
18、umber ); for(i=0;i=n) printf(ntt没有找到该运动员信息!n); return; else for(j=i+1;jn;j+) stuj-1=stuj; save(stu,n-1); printf(nt 删除成功!n);3.6排序函数在文件中找到参加百米赛跑的运动员的信息并将其复制到数组a20中,再用冒泡排序法将其排序,再以名次列表的形式输出(会有并列的情况)。void sort() /按百米赛跑成绩排序struct student stuN,temp,a10; int i,j,n,m=0;char xiangmu20=百米赛跑; n=reads(stu);print
19、f(nt学号t姓名 t专业 t参加的项目 t成绩tn); for(i=0; in; i+) if(strcmp(stui.xiangmu,xiangmu)=0) am+=stui ;printf(n%12s%11s%11s%12s%11.2fn,stui.num,stui.name,stui.zhuanye,stui.xiangmu,stui.score); for(i=1;im ;i+) for(j=0;jaj+1.score) temp=aj; aj=aj+1; aj+1=temp; save1(a,m); j=1 ; printf(*百米赛跑成绩排序结果如下*nn); printf( 名
20、次 学号 姓名 专业 百米赛跑 成绩n);printf(*n); for(i=0;im;i+) / 输出结果并排名 if(ai.score =ai+1.score ) if(ai.score !=0)printf(n%3d%12s%11s%11s%11.2f%11.2fn,j,ai.num,ai.name,ai.zhuanye,ai.score,ai.score);elseprintf(n%3d%12s%11sttttn,j,ai.num,ai.name,ai.zhuanye); elseprintf(n%3d%12s%11s%12s%11.2f%11.2fn,j+,ai.num,ai.nam
21、e,ai.zhuanye,ai.score,ai.score);getchar();4系统测试 主菜单界面点击运行,显示主菜单,如图4-1所示。按菜单内容选择相应功能。图4-1主菜单界面添加界面按菜单内容选择相应功能。如图4-2所示。图4-2输入界面查询界面根据菜单,输入数字0,进入运动员信息查询界面如图4-3所示。图4-3查询界面 显示界面输入菜单对应的数字,进入相应程序,输入2显示运动员信息如图4-4所示。图4-4显示界面 删除界面输入菜单对应的数字,进入相应程序,输入3删除运动员信息如图4-5所示。4-5删除界面更改界面输入菜单对应的数字,进入相应程序,输入4修改运动员信信。如图4-6所
22、示。图4-6更改界面排序界面百米赛跑、三级跳和撑杆跳的排序结果如图4-7(a)、4-7(b)、4-7(c)所示。图4-7(a)百米赛跑排序界面图4-7(b)三级跳排序界面图4-7(c)撑杆跳排序界面5.结束语经过一段时间的学习,我们组的运动会成绩管理系统完成了,但只能说是粗略的完成。虽然说还存在一些不足的地方,但基本实现了任务书上的所有要求,发现错误并及时修改,它能够统计学生的比赛成绩和将成绩排名,我们组设计的成绩还存在一定的不足,一开始是没有查询功能的 ,经过我们组员不断地努力把程序进行了完善,让它变的更加实用。经过两个星期的思考,设计,编程,我真的感到这不是一件简单容易的事情。C语言综合训
23、练考察的并不仅仅是我们的基础知识,还有思维上得活跃性,创新性,以及我们的动手能力。让我了解到要想又好又快地完成一个程序,必须要有坚实的基础和认真的编写过程。在写本程序的过程中我对文件中数据的排序有了深刻的认识,并且学会指针的选择排序。自己动手些程序,自己发现和解决问题。发现了自己的许多不足。平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,当然还存在一些问题没有解决。我相信在以后的学习能够解决好它们。但是,收获还是不小的,我不仅对Visual C+编程环境的操作有了进一步的掌握,还了解到了程序设计的书写风格及其注释的格式。参考文献1 谭浩强.C程序设计(第二版)M.北京:清华大学,19992 何钦明.C语言程序设计M.北京:高等教育出版社,20083 严蔚敏.数据结构(C语言版)M.北京:清华大学出版社,1997评语:评阅教师签名: 年 月 日成 绩 18