运动会分数统计系统.docx
- 文档编号:8181240
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:33
- 大小:426.80KB
运动会分数统计系统.docx
《运动会分数统计系统.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统.docx(33页珍藏版)》请在冰豆网上搜索。
运动会分数统计系统
*******************
实践教学
*******************
兰州理工大学
软件学院
2011年秋季学期
计算机应用基础课程设计
题目:
运动会分数统计系统
专业班级:
软件技术
(2)班
姓名:
刘正翔
学号:
11700215
指导教师:
张墨逸
成绩:
摘要
C语言通常别称为高级语言中的中级计算机语言。
C语言由于它的可移植性和高效率,各种C语言编译程序均可产生非常紧凑、执行快捷的目标码。
它比任何一种BASIC语言编译程序的目标码都紧凑、快速。
这就要求有较高的理论水平,而且还要求有实际的动手能力。
因此掌握C语言程序设计是学好软件技术的第一步。
本课程设计的主要目的是提高实践能力,包括提高C语言的编程能力,长期以来,注重书本知识,轻视实际动手设计能力是教学中普遍存在的现象。
进行课程设计的目的就是要改变这种状况,使学习者既具有完备的理论知识,也能够解决在实际学习,生活工作中遇到的问题。
学生应该能够把学习到的理论知识运用到实际中去,将知识转变为实际的能力,同时通过这些理论知识和实际的应用推动理论和实践的发展。
关键词:
分数、统计、数据存储、数据读取、C语言
目录
摘要1
一、需求分析3
二、总体设计3
2.1系统功能设计3
2.2函数构造4
三、详细设计5
3.1数据类型及重要变量的定义5
3.1.1定义运动项目数据类型5
3.1.2定义学校数据类型5
3.1.3定义学校数组5
3.2编码5
3.3函数的设计和实现8
3.3.1信息输入及分数统计功能8
3.3.2信息输出功能9
3.3.3信息查询功能10
3.3.4主函数11
四、测试13
五、设计总结19
六、致谢20
参考文献21
附录22
一、需求分析
为了简便的对运动会的报名,成绩的录入和统计,本组设计开发了本系统,以解决需求。
当然,本系统只是一个较为简单的的系统,仍然存在着一些操作上以及现实上的问题,本组将在以后的学习中进行完善。
(1)问题描述:
参加运动会的n个学校编号为l~n。
比赛分成m个男子项目和w个女子项目,项目编号分别为l~m和m+1~m+w。
由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
设计一个统计程序按名次产生各种成绩单、得分报表。
(2)功能要求:
1.可以输出各个项目的前三名或前五名的成绩;
2.能统计各学校总分;
3.可以按学校编号或名称、学校总分、男女团体总分排序输出;
4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名学校。
(3)输出形式:
有中文提示,各学校分数为整形
(4)界面要求:
有合理的提示,各个功能可以设立菜单,根据提示,可以完成相关的功能要求
(5)测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
二、总体设计
2.1系统功能设计
根据运动会分数统计系统问题的分析和设计要求,可以将该系统可以分为三个模块:
信息统计模块、信息输出模块、信息查询模块,其系统功能结构图如图1所示。
(1)信息统计模实现信息的输入、统计、存档。
(2)信息输出模块,实现信息的输出。
(3)信息查询实现信息的查询。
图1系统功能结构图
2.2函数构造
根据系统功能结构图的描述,可以构造出该系统的几个基本的函数,其方法名和功能如表1所示。
表1函数功能表
函数
功能
voidinputinformation()
输入和统计信息函数
voidoutput()
输出信息函数
voidinquiry()
查询信息函数
voidwritedata()
数据存储函数
voidreaddata()
读入数据函数
三、详细设计
3.1数据类型及重要变量的定义
3.1.1定义运动项目数据类型,用于存放运动项目,包括项目编号、项目所取名次数、名次、分数。
//定义项目结点的类型
typedefstruct
{
intitemnum;//项目编号
inttop;//项目取名次的数目,由用户定义3或5
intrange[5];//名次
intmark[5];//分数
}itemnode;
3.1.2定义学校数据类型,用来存储参赛学校信息,包括学校编号、学校总分、男团总分、女团总分、项目数组。
//定义学校结点类型
typedefstruct
{
intschoolnum;//学校编号
intscore;//学校总分
intmscore;//男团体总分
intwscore;//女团体总分
itemnodec[m+w];//项目数组
}schoolnode;
3.1.3定义学校数组schoolnodeh[n]。
采用数组结构有利于随机的存储和查询。
定义全局标志变量intflag1、flag2,分别用以标志是否已经向系统输入了信息和标志系统中是否已经存在信息。
定义文件指针FILE*report,用来指向存档的文件。
3.2编码
//查询模块,用来查询信息
voidinquiry()
{
intchoice;
inti,j,k,s;
printf("\n*****1:
按学校编号查询\n");
printf("\n*****2:
按项目编号查询\n");
printf("\n\n*****请选择查询方式:
");//提供两种查询方式
scanf("%d",&choice);
switch(choice)
{
case1:
do
{
printf("要查询的学校编号:
");
scanf("%d",&i);
if(i>n)
printf("错误:
这个学校没有参加此次运动会!
\n\n\n");
else
{
printf("要查询的项目编号:
");
scanf("%d",&j);
if(j>m+w||j==0)
printf("此次运动会没有这个项目\n\n\n");
//学校编号超出范围,则输出警告
else
{
printf("这个项目取前%d名,该学校的成绩如下:
\n",h[0].c[j-1].top);
for(k=0;k<5;k++)
if(h[i-1].c[j-1].range[k]!
=0)
printf("名次:
%d\n",h[i-1].c[j-1].range[k]);
//输出要查询学校项目的成绩
}
}
printf("请选择2继续,0跳出\n");
scanf("%d",&s);
printf("\n\n\n");
}while(s==2);//循环执行输出语句
break;
case2:
do
{
printf("要查询的项目编号:
");
scanf("%d",&s);
if(s>m+w||s==0)
printf("此次运动会不包括这个项目.\n\n\n");
//项目编号超出范围则输出警告
else
{
printf("该项目取前%d名,取得名次的学校\n",h[0].c[s-1].top);
for(i=0;i for(j=0;j<5;j++) if(h[i].c[s-1].range[j]! =0) printf("学校编号: %d,名次: %d\n",h[i].schoolnum,h[i].c[s-1].range[j]); }//输出该项目取得名次学校的成绩 printf("\n\n\n继续2,跳出0\n"); scanf("%d",&i); printf("\n\n\n"); }while(i==2); break; } } voidwritedata()//把数据存储在文件中 { //FILE*report; inti; if((report=fopen("sportsdata.txt","w"))==null) { printf("文件不存在,不能打开文件! \n"); exit (1); } for(i=0;i fwrite(&h[i],sizeof(schoolnode),1,report); fclose(report); }//按头结点块写入 voidreaddata()//读出文件中数据的函数 { //FILE*report; inti,j,s; if((report=fopen("sportsdata.txt","r"))==null) { printf("文件不存在,不能打开文件! \n"); exit (1); } for(i=0;i { //printf("******学校编号: "); fread(&h[i].schoolnum,sizeof(int),1,report); //printf("******学校总分: "); fread(&h[i].score,sizeof(int),1,report); //printf("%d\n",k); //printf("******男团总分: "); fread(&h[i].mscore,sizeof(int),1,report); //printf("%d\n",k); //printf("******女团总分: "); fread(&h[i].wscore,sizeof(int),1,report); for(j=0;j { fread(&h[i].c[j].itemnum,sizeof(int),1,report); fread(&h[i].c[j].top,sizeof(int),1,report); for(s=0;s<5;s++) { fread(&h[i].c[j].range[s],sizeof(int),1,report); } for(s=0;s<5;s++) { fread(&h[i].c[j].mark[s],sizeof(int),1,report); } } } fclose(report);//关闭文件 }//按照读一个数据就输出一个数据的方式显示数据内容 3.3函数的设计和实现 在概要设计中已经对该系统涉及的抽象数据类型和函数及其功能做了说明,这里就不在对每个函数进行一一说明,只对其中比较重要的功能模块进行描述。 3.3.1信息输入及分数统计功能 voidinputinformation()为输入信息及分数统计函数。 在输入信息的同时进行分数的统计。 可以输入各个学校各项目前三名或前五名的成绩。 在输入学校的参赛项目时,结果取前三名还是前五名自己定,用一个选择语句实现。 利用swith语句前三名的分数赋为5、3、2,前五名的成绩赋为7,5、3、2、1,未取得成绩则赋为0。 并统计团体总分,男团总分和女团总分。 其主要功能代码如下: for(s=0;s {printf("*****名次: "); scanf("%d",&h[i].c[j].range[s]);//输入所获名次信息 if(h[i].c[j].top==3) switch(h[i].c[j].range[s]) {case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=5;break; case2: h[i].c[j].mark[s]=3;break; case3: h[i].c[j].mark[s]=2;break; } else switch(h[i].c[j].range[s]) {case0: h[i].c[j].mark[s]=0;break; case1: h[i].c[j].mark[s]=7;break; case2: h[i].c[j].mark[s]=5;break; case3: h[i].c[j].mark[s]=3;break; case4: h[i].c[j].mark[s]=2;break; case5: h[i].c[j].mark[s]=1;break; } h[i].score=h[i].score+h[i].c[j].mark[s]; 3.3.2信息输出功能 voidoutput()为输出函数。 列出一个输出目录利用swich语句使函数按学校编号输出或按学校总分、男团总分、女团总分由高到低排序输出。 利用辅助数组remember[]和冒泡排序的方法使之按分数的由高到低输出。 利用循环语句dowhile()当输入2时返回输出目录,输入0是跳出循环返回主菜单。 其流程图如图2所示。 图2输出信息模块流程图 3.3.3信息查询功能 voidinquiry()为查询函数。 列车一个查询目录利用swich语句使函数按学校编号或项目编号查询,输出某学校的某个项目的得分情况或某个项目的前几名的学校。 再利用循环语句dowhile()当输入2是返回查询目录,输入0时跳出循环返回主菜单。 其程序流程图如图3所示。 图3查询信息模块程序流程图 3.3.4主函数 voidmain()是主函数。 列出主菜单,利用switch语句调用以上函数实现各个菜单的功能。 想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如: switch(choice) { case1: printf("输入信息: \n");inputinformation();writedata();printf("信息已存入档案! ");main(); case2: printf("输出信息: \n");if(flag1)readdata();output();main(); 在进入主菜单后为了确保系统中已经输入了信息,用标志标量flag1和flag2来控制循环。 如果系统中没有任何信息,用户就不能选择输入或查询操作,此时会输出提示信息,并返回主菜单。 直到用户输入了信息或退出系统。 其实现代码如下: do{printf("======================欢迎使用======================\n"); printf("\n\n*****************运动会分数统计系********************\n"); printf("\n\n********************1.输入信*************************\n"); printf("********************2.输出信息*************************\n"); printf("********************3.查询信息*************************\n"); printf("********************4.退出系统*************************\n\n\n"); printf("================================================\n\n"); printf("********请选择要实现步骤的编号(请确保已经输入信息! ): \n\n"); scanf("%d",&choice); if(choice==4)break; elseif(choice==1)flag1=0; elseif((report=fopen("sportsdata.txt","r"))! =null)flag2=0; else {system("cls"); printf("\n\n\n\n系统中无任何信息! \n\n请先输入信息! ! ! \n\n\n\n"); } }while(flag1&&flag2); 四、测试 运行程序,进入系统主菜单。 用户可以选择输入、输出、查询信息或退出系统,界面如图4所示。 图4系统主界面 (1)输入信息 输入1得到进入输入信息模块。 根据系统提示将以下信息输入系统中: 学校编号1,项目编号1,取前5名,获得1个名次,是第5名;项目编号2,取前3名,获得3个名次,分别是1、2、3名。 学校编号2,项目编号1,取前5名,获得4个名次,分别是1、2、3、4名;项目编号2,取前5名,获得0个名次。 输入信息后,会自动存档,并提示存档成功,然后自动返还主菜单,如图5所示。 图5信息成功输入系统并存入了文档 (2)输出信息 输入2进入输出信息模块,该模块分四项,分别代表一种输出方式,如图6所示。 图6输入信息模块界面 用户可以按照自己的喜好,选择一种方式输入信息,输入2返回输出信息模块,输入0返回主菜单。 如图7~9分别是按照学校编号、学校总分、女团总分输出的情况。 图7按学校编号输出 图8按学校总分输出 图9按女团总分输出 (3)查询信息 输入3进入信息查询模块,该模块分为两项,如图10所示。 图10信息查询模块 用户可以选择不同菜单进行查询,如图11和图12分别是按照学校编号和项目编号查询的情况。 图11按学校编号查询 图12按项目编号查询 (4)退出系统 在主菜单下输入4可以退出系统,并有中文提示,如图所示。 图13退出系统 五、设计总结 在这次上机过程中遇到过一些问题,但经过不懈努力,解决了部分,还有的现在不能解决,留待日后思考和解决。 比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。 在编写之前,做整体规划和详细设计很重要。 只有思路清晰,设计合理可行,编码才有可能有的放矢,才能更加有效的完成任务。 本次集中上机实验,对我来说可以算是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。 但我对于难度一向是以积极迎战的态度来面对,认真积极努力完成这次集中上机的任务。 对我来说这是一次很好的机会,同时我也很好的把握了这次机会,认真的完成了此次上机学习的任务,对自己今后在程序编写方面以及文档撰写方面相信会有很大的帮助,在此也对学校安排这样一次学习表示感谢,最后希望自己在数据结构以及计算机的其他学习方面能够得到很好的提高。 六、致谢 在本次课设过程中,我们学习了不少的知识,也巩固了C语言的不少知识点。 感谢学院得我的这次做课设的机会,让我有了跟组员一起编程序的机会,尝试做系统。 我们在实践的过程中,同时也将那些学到的知识利用到所编的系统中。 本次课设取得成功,最重要感谢学院的王老师以及张墨逸老师的热心指导。 在课设期间,张老师帮助我们分析思路以及程序结构,查找错误,修正不足,才使得我们的系统做得更加完善。 其次还要感谢这次和我分到一组的组员们,因为大家的共同努力,才可以把这个系统完成。 参考文献 1C/C++程序设计教程,王连相,中国铁道出版社,2006 2C语言程序设计,谭浩强,清华大学出版社,1999 3C程序设计题解与上机指导,谭浩强,清华大学出版社,1999 4C/C++程序设计上机指导与测试,王连相,中国铁道出版社,2006 5C语言函数手册,机械工业出版社,1999 6C语言的实际应用,安徽科学技术出版社,2000 附录 源程序 #include #include #include #include #definen2//学校数目 #definem1//男子项目数目 #definew1//女子项目数目 #definenull0 intflag1=1; intflag2=1;//全局变量,用来标识是否已经向系统输入信息 FILE*report; //定义项目结点的类型 typedefstruct { intitemnum;//项目编号 inttop;//项目取名次的数目,由用户定义3或5 intrange[5];//名次 intmark[5];//分数 }itemnode; //定义学校结点类型 typedefstruct { intschoolnum;//学校编号 intscore;//学校总分 intmscore;//男团体总分 intwscore;//女团体总分 itemnodec[m+w];//项目数组 }schoolnode; schoolnodeh[n];//定义一个学校结点数组 //信息输入模块,用来输入信息,建立系统 voidinputinformation() { inti,j,k,s; for(i=0;i { h[i].score=0; h[i].mscore=0; h[i].wscore=0; }//初始化各结点 for(i=0;i { do { printf("*****学校编号: "); scanf("%d",&h[i].schoolnum); }while(h[i].schoolnum>n||h[i].schoolnum<=0);//输入学校结点信息 for(j=0;j { do { printf("*****项目编号: "); scanf("%d",&h[i].c[j].itemnum); }while(h[i].c[j].itemnum>m+w||h[i].c[j].itemnum<=0); do { printf("*****取前3名or前5名: "); scanf("%d",&h[i].c[j].top); }while(h[i].c[j].top! =3&&h[i].c[j].top! =5); printf("*****获得几个名次: "); scanf("%d",&k);//输入项目信息 for(s=0;s<5;s++) h[i].c[j].range[s]=0,h[i].c[j].mark[s]=0;//初始化排名和分数 for(s=0;s { printf("*****名次: "); s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 系统