运动会分数统计系统数据结构课程设计论文.docx
- 文档编号:5168541
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:44
- 大小:420.37KB
运动会分数统计系统数据结构课程设计论文.docx
《运动会分数统计系统数据结构课程设计论文.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统数据结构课程设计论文.docx(44页珍藏版)》请在冰豆网上搜索。
运动会分数统计系统数据结构课程设计论文
摘要
21世纪是个信息化的时代,现代计算机技术的发展,为各行各业的发展创造了一个全新的时代背景——人们的生活、工作等已经越来越离不开计算机科学的运用,体育作为个人、家庭、社会的一个主要实践领域,大大小小的运动会也在各大中院校中展开,自从计算机科学涉及运动领域后,人们对运动会的管理也从人工的向自动化转变。
运用数据结构的知识解决运动会分数统计的问题,编写一个程序来完成运动会分数统计系统.本程序设计中,可以输入参加运动会的学校编号及项目编号;根据具体情况选择输入参加项目的男女类别和取成绩名次类别;最后选择输入名次;实现数据统计,排序输出,学院及项目查询等功能。
关键词:
运动会分数统计程序排序查询
1设计内容和要求
数据结构课程设计是为数据结构课程独立开设的实践性教学环节。
数据结构课程设计对于巩固数据结构知识,加强学生的实际动手能力和提高学生综合素质是十分必要的。
课程设计的目的是要求学生达到熟练掌握C语言的基本知识和技能;了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改;培养算法分析能力,分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平;初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。
1.1具体内容及要求
根据课程设计任务书要求,本系统开发主要完成以下功能和性能。
设计一个运动会分数统计程序。
参加运动会有n个学院,学院编号为1…n。
比赛分成m个男子项目和w个女子项目。
编号为男子1…m,女子m+1…m+w。
项目编号能被3整除的项目取前三名,其他项目取前五名。
取前三名的积分分别是5、3、2,取前五名的积分分别是7、5、3、2、1。
要求如下:
1)可以输入各个项目前三名或前五名的信息(学院编号、学院名称、运动员编号、运动员姓名、项目编号、项目名称、名次);
2)能统计个学院总分;
3)可以按学院编号、学院总分、男女团体总分排序输出;
4)可以按学院编号查询学校某个项目的情况;可以按项目编号查询取得名次的学院名称。
5)程序退出时,将输入的信息保存在磁盘上,以便下次运行程序时读入。
测试数据要求:
程序运行时,n、m、w均由键盘输入(n≤20,m≤20,w≤20)。
输入要求:
可输入学院信息(学院编号、学院名称、运动员编号、运动员姓名、运动员性别、项目编号、项目名称、名次),有中文提示,在输入的同时限定输入数据的大小以及一些错误输入。
输出要求:
输出内容整洁,排列有序。
界面要求:
界面布局合理整洁,有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
2.总体设计
2.1系统设计方案
根据课程设计任务书要求,本方案要求准备结构体数组、读写文件。
还能把信息直接输入存储到文件中,读取文件中信息,从而得到结果。
1)菜单设计
分为主函数菜单,比赛数据输入菜单,学院、男子团体、女子团体总分排序输出菜单,查询学院成绩菜单、查询项目排名菜单。
2)数据保存方式
建立文件,数据保存在文件中。
3)数据类型
采用结构体类型。
4)存储结构
采用结构体类型数组存储结构存储。
5)算法设计
输入比赛结果模块中运用了冒泡算法将输入的数据排序。
2.2功能模块设计
根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。
该系统分为比赛数据输入、总分排序输出、查询比赛成绩模块。
总分排序输出模块有三个子模块,分别是:
按学校总分排序输出模块、按男子团体总分排序输出模块和按女子团体总分排序输出模块;查询比赛成绩模块分为按学院编号查询模块和按项目编号查询两个子模块。
图2.1功能模块图
1)比赛数据输入模块
比赛成绩输入模块分为:
创建信息部分,创建学院数,男子项目数,女子项目数,学院信息,比赛项目信息,运动员信息,成绩输入部分需根据项目编号,按排名依次输入学院编号,运动员编号,最后将数据依次写入文件。
2)比赛成绩输出模块
读取比赛数据,冒泡算法排序,按选择输出学院、男子团体或女子团体总分的排名情况。
3)查询比赛成绩模块
选择按学院编号查询模块或按项目编号查询输入相应的编号输出查询结果。
3.详细设计
3.1数据结构定义
建立结构体如下:
typedefstructPlayerInfo//存储运动员相关信息
{
charPlayerName[MAXSIZE];
intSex;//运动员性别
intPlayerNumber;
intPlayerScore;
structPlayerInfo*next;
}Player;
typedefstructSchoolInfo//存储学校相关信息
{
charSchoolName[MAXSIZE];
intSchoolNumber;
intSchoolScore;//学校总分
intWomenScore;//女子总分
intMenScore;//男子总分
Player*PlayerHead;
intPlayerData;
structSchoolInfo*next;
}School;
typedefstructMatchItem//存储运动项目的相关信息
{
charMatchName[MAXSIZE];
intMatchNumber;
intrange[5];//存储获得前三名或前五名的学校
intPlayer[5];//存储获得前三名或前五名的运动员
structMatchItem*next;
}MatchPro;
typedefstructPreNews//存储要输入的学校,男女项目个数
{
intSchoolSum;//学校总数
intManItemSum;//男子项目总数
intWomanItemSum;//女子项目总数
intPlayerSum;//运动员总数
}PNews;
3.2比赛数据输入模块
比赛数据输入模块需要输入学院数,男子项目数,女子项目数,学院信息,比赛项目信息,运动员信息,成绩输入部分需根据项目编号,按排名依次输入学院编号,运动员编号,最后将数据依次写入文件。
图3.1比赛数据输入流程图
此模块定义变量i,j先初始化储存分数的数组各元素,定义flag标记,while循环与for循环实现各学校信息的输入,包括学校编号、项目编号、运动员编号,使用if语句实现对输入的数据判断是否合法,选择是取前三名或前五名,使用switch语句选择添加总分。
3.3比赛成绩输出模块
比赛成绩输出模块实现按要求输出相应的数据。
有以下输出选项:
按学校总分排序输出、按男子团体总分排序输出和按女子团体总分排序输出。
模块定义了inti,j,k,flag;SchoolPTemp={0}变量,for循环包括switch语句,选择输出按学校总分排序输出、按男子团体总分排序输出和按女子团体总分排序输出相应的数据,同时实现冒泡排序。
for循环实现输出各个方式输出的每个数据。
3.3查询比赛成绩模块
查询比赛成绩模块包括:
按学校编号查询,按项目编号查询。
此模块定义了inti,j;switch(choice)实现查询的两种方式的选择,使用while循环与for循环查询相关数据,从而输出相关数据,从而实现查询功能。
4.调试与测试
程序测试是程序质量保证的关键步骤从用户的角度来看,普遍希望通过程序测试暴露程序中隐藏的错误和缺陷,所以程序测试应该是“为了发现错误而执行程序的过程”。
或者说,程序测试应该根据程序开发各阶段的规格说明和程序的内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序错误或缺陷。
过度测试则会浪费许多宝贵的资源。
到测试后期,即使找到了错误,然而付出了过高的代价。
调试过程主要是运行编制好的程序,然后遇到错误后根据系统的提示,找到相关的问题所在。
以下是程序调试与测试的展示。
4.1测试数据
4.1.1School.txt
cqkjxy1133105
czw1113
ld210
zql310
dx420
tjb520
cqdx2205155
fuc6117
kyo713
uyo810
udo920
ngd1020
cqsfxy3218135
zxx11121
wxx1210
lxx1310
cxx1420
txx1520
cqykdx4161245
tmd16116
tnn1710
tmm1810
ccc1920
xxx2020
scmsxy512845
csa21112
wqe2210
fgd2310
yjg2420
fdr2520
4.1.2MatchItem.txt
feifei54173132814525
tiaotiao45244193122915
paopao33112711
tiaolou22631352341814
tiaogao11226313417522
4.1.3PreNews.txt
53225
4.1程序主界面
图4.1程序主界面
4.2输入数据
图4.2数据输入
(1)
图4.3数据输入
(2)
图4.4数据输入(3)
4.3排序输出学校总分
图4.5排序输出学校总分
4.4排序输出男子团体总分
图4.6排序输出男子团体总分
4.5排序输出女子团体总分
图4.7排序输出女子团体总分
4.6按学校查询项目数据
图4.8按学校查询项目数据
4.7按项目查询数据
图4.9按学校查询项目情况
5.总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。
回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。
善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高.
参考文献
[1]严蔚敏吴伟民.数据结构.清华大学出版社.2007.3
[2]李春葆.数据结构教程.清华大学出版社.2005.1
[3](美)StephenPrata.CPrimerPlus中文版(第五版).人民邮电出版社.2005.2
[4]杨路明郭浩志.C语言程序设计教程.北京邮电大学出版社.2005.12
[5]谭浩强.C程序设计.第三版.清华大学出版社.2005.2
[6]徐孝凯.数据结构实用教程.清华大学出版社.2006.8
[7]刘大有.数据结构C语言版.高等教育出版社.2004
致谢
首先感谢在本次课程设计中老师们的辛勤指导,感谢XX师,还要感谢在本次课程设计中帮助我的同学,感谢XX等同学的帮助,最终在老师和同学的帮助和指导下完成了这次的课程设计。
附录:
程序代码:
#include
#include
#include
#include
#include
#defineMAXSIZE20
typedefstructPlayerInfo
{
charPlayerName[MAXSIZE];
intSex;
intPlayerNumber;
intPlayerScore;
structPlayerInfo*next;
}Player;
typedefstructSchoolInfo
{
charSchoolName[MAXSIZE];
intSchoolNumber;
intSchoolScore;
intWomenScore;
intMenScore;
Player*PlayerHead;
intPlayerData;
structSchoolInfo*next;
}School;
typedefstructMatchItem
{
charMatchName[MAXSIZE];
intMatchNumber;
intrange[5];
intPlayer[5];
structMatchItem*next;
}MatchPro;
typedefstructPreNews
{
intSchoolSum;
intManItemSum;
intWomanItemSum;
intPlayerSum;
}PNews;
voidChiefMenu(MatchPro*MatchHead,PNews*PreNode,School*SchoolHead);
PNews*BeginInput(PNews*PreNode);
voidPreNews_Write(PNews*PreNode);
School*Add_School(School*SchoolHead,PNews*PreNode);
voidSchool_Write(School*SchoolHead,PNews*PreNode);
MatchPro*MatchInput(MatchPro*MatchHead,PNews*PreNode,School*SchoolHead);
voidMatch_Write(MatchPro*MatchHead,PNews*PreNode,School*SchoolHead);
PNews*PreNews_read(PNews*PreNode);
School*School_Array_Read(PNews*PreNode);
MatchPro*Match_Read(MatchPro*MatchHead,PNews*PreNode);
School*CountSchoolScore(School*SchoolHead,PNews*PreNode);
School*SchoolOrder(School*SchoolHead,intTotal_PointsType,PNews*PreNode);
voidShowScore(School*SchoolHead,PNews*PreNode,intTotal_PointsType);
intShowScore_School(MatchPro*MatchHead,School*SchoolHead,PNews*PreNode);
intQueryItem(MatchPro*MatchHead,School*SchoolHead,PNews*PreNode);
voidClearNode(MatchPro*MatchHead);
voidChiefMenu(MatchPro*MatchHead,PNews*PreNode,School*SchoolHead)
{
intchoice=1;
while(choice)
{
printf("欢迎进入运动会分数统计系统!
\n\n");
printf("1.按系统提示输入关于运动会各种信息!
\n\n");
printf("2.排序输出学校总分.\n\n");
printf("3.排序输出男子团体总分.\n\n");
printf("4.排序输出女子团体总分.\n\n");
printf("5.按学校编号查询学校某个项目的情况.\n\n");
printf("6.按项目编号查询取得前三名或前五名的学校.\n\n");
printf("0.退出运动会分数统计系统!
\n\n");
printf("\n\n\n请输入你要进行的步骤:
");
scanf("%d",&choice);
system("cls");
switch(choice)
{
case1:
Match_Write(MatchHead,PreNode,SchoolHead);
break;
case2:
ShowScore(SchoolHead,PreNode,1);
break;
case3:
ShowScore(SchoolHead,PreNode,2);
break;
case4:
ShowScore(SchoolHead,PreNode,3);
break;
case5:
QueryItem(MatchHead,SchoolHead,PreNode);
break;
case6:
ShowScore_School(MatchHead,SchoolHead,PreNode);
break;
case0:
{
free(SchoolHead);
free(MatchHead);
free(PreNode);
choice=0;
printf("您已安全的退出程序!
\n");
}
break;
default:
printf("您输入的有误");
}
getch();
}
}
PNews*BeginInput(PNews*PreNode)
{
intSchoolCount=0;
intWomenCount=0;
intMenCount=0;
intPlayerCount=0;
while
(1)
{
printf("请输入参加比赛的学校个数:
\n");
scanf("%d",&SchoolCount);
if(SchoolCount<=20&&SchoolCount>=5)
{
PreNode->SchoolSum=SchoolCount;
break;
}
else
{
printf("输入数据不合法,请重新输入!
\n");
}
}
while
(1)
{
printf("请输入男子比赛的项目个数:
\n");
scanf("%d",&MenCount);
if(MenCount>20||MenCount<0)
{
printf("输入数据不合法,请重新输入!
\n");
}
else
{
PreNode->ManItemSum=MenCount;
break;
}
}
while
(1)
{
printf("请输入女子比赛的项目个数:
\n");
scanf("%d",&WomenCount);
if(WomenCount>20||WomenCount<0)
{
printf("输入数据不合法,请重新输入!
\n");
}
else
{
PreNode->WomanItemSum=WomenCount;
break;
}
}
while
(1)
{
printf("请输入运动员个数:
\n");
scanf("%d",&PlayerCount);
if(PlayerCount<0)
{
printf("输入数据不合法,请重新输入!
\n");
}
else
{
PreNode->PlayerSum=PlayerCount;
break;
}
}
return(PreNode);
}
voidPreNews_Write(PNews*PreNode)
{
FILE*fp=NULL;
if((fp=fopen("PreNews.txt","w+"))==NULL)
{
printf("Cannotopenfile,strikeanykeyexit!
");
getch();
exit(-1);
}
fprintf(fp,"%3d%3d%3d%3d\n",PreNode->SchoolSum,PreNode->ManItemSum,PreNode->WomanItemSum,PreNode->PlayerSum);
fclose(fp);
printf("写入成功!
\n");
}
School*Add_School(School*SchoolHead,PNews*PreNode)
{
inti=0,j=0,k=0;
SchoolHead=(School*)malloc(sizeof(School)*PreNode->SchoolSum);
if(NULL==SchoolHead)
{
printf("分配内存失败,程序结束");
exit(-1);
}
for(i=0;i
{
printf("请输入第%d个学校的名称\n",i+1);
scanf("%s",&SchoolHead[i].SchoolName);
SchoolHead[i].SchoolNumber=i+1;
SchoolHead[i].SchoolScore=0;
SchoolHead[i].MenScore=0;
SchoolHead[i].WomenScore=0;
SchoolHead[i].Play
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 系统 数据结构 课程设计 论文