运动会分数统计 课程设计报告.docx
- 文档编号:30739103
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:26
- 大小:271.81KB
运动会分数统计 课程设计报告.docx
《运动会分数统计 课程设计报告.docx》由会员分享,可在线阅读,更多相关《运动会分数统计 课程设计报告.docx(26页珍藏版)》请在冰豆网上搜索。
运动会分数统计课程设计报告
KC021-1
CHANGZHOUINSTITUTEOFTECHNOLOGY
课程设计说明书
课程名:
《数据结构课程设计》
题目:
运动会分数统计
二级学院:
计算机信息工程学院
专业:
计算机科学与技术(应用)
班级:
学号:
姓名:
指导教师:
2013年1月
1、课程设计的目的
⏹了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
⏹初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
⏹提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
⏹训练用系统观点和软件开发规范进行软件开发,培养软件工作者应具备的的工作方法和作风。
二、问题描述问题描述及分析
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:
7、5、3、2、1,前三名的积分分别为:
5、3、2;哪些取前五名或前三名自己设定。
(m<=20,n<=20)
1)可以输入各个项目的前三名或前五名的成绩;(成绩只不记入个人,男女分开,项目分开,学校分开)
2)能统计各学校总分,男女团体总分。
3)按学校总分排序输出、要求:
学校编号,名称,总分
男子团体总分
男子各项目的名称和成绩(一个项目一行)
女子团体总分
女子各项目的名称和成绩。
(一个项目一行)
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
输出形式:
有中文提示,分数为整型
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
3、数据结构描述
本程序中学校的存储结构为链表,
typedefstructnode1{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该学校获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct{
intschool;/*学校编号*/
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct{
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
4、主要算法流程描述
1、总流程图:
[键入文档的引述或关注点的摘要。
您可将文本框放置在文档中的任何位置。
请使用“绘图工具”选项卡更改引言文本框的格式。
]
[键入文档的引述或关注点的摘要。
您可将文本框放置在文档中的任何位置。
请使用“绘图工具”选项卡更改引言文本框的格式。
]
2、分模块流程图:
Funct7流程图如下:
Funct8流程图如下:
3、主要代码及程序说明
voidfunct7(ALLNode*g2)/*按学校编号查询学校某个项目情况*/
{inti,j;
Items*p2;
printf("\n******按学校编号查询学校某个项目情况******\n");
printf("输入要查询的学校编号:
");
scanf("%d",&i);
printf("输入要查询的项目编号:
");
scanf("%d",&j);
p2=g2->b[i].firstitem;
while(p2!
=NULL)
{if(p2->item==j)
printf("学校编号:
%d\t项目%d:
得%d分\n",i,p2->item,p2->record);
p2=p2->next;
}
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct8(ALLitems*g1)/*按项目编号查询取得名次的学校*/
{inti;
Schools*p1;
printf("\n***按项目编号查询取得名次的学校***\n");
printf("输入要查询的项目编号:
");
scanf("%d",&i);
printf("项目编号\t\t\t取得名次的学校\n");
printf("%d\t",i);
p1=g1->a[i].firstschool;
while(p1!
=NULL)
{printf("学校%d:
得%d分",p1->school,p1->record);
p1=p1->next;
}
printf("\n\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
主要使用的函数
Main()
Funct()
Menue()
Save()
5、使用说明
Funct7:
按项目代号查取得成绩的学校是也是按编号查询,只要学校项目代号与输入要查的项目相同并且有成绩就输出。
Funct8:
在统计学校总分和各学校男女项目总分时思路大致相同,在统计男(女)项目总分时只需确定下是否是男(女)子项目,如果是就加,判断方法就是男子项目的项目代号小于等于男子项目数(即:
L->sc[j].xiangmu)<(L->m))而女子项目则大于男子项目数(即L->sc[j].xiangmu)>(L->m))
6、软件调试说明
1主界面
2建立参赛者信息
3查询
5排名
Funct7按学校编号查询学校某个项目情况
Funct8:
按项目编号查询取得名次的学校
7、总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
运动会分数统计系统,时间和空间复杂度计算都比较复杂,运动会在调试的时候出现的问题最多,头文件就有很多问题,一开始的时候出现的很多错误都是有关头文件的,因为既用studio.h又用iostream,所以问题比较多,随后统一为studio,h则问题得到解决,从中知道,两个头文件不能混合使用,运动会数涉及到文件的输入输出,这里也碰到很多问题,首先是文件不能正常的读出,以及一些格式的错误,最后也得到解决,整个程序最主要的是建立学校和项目这两个链表,以及两者之间的具体关系,所以这个地方比较容易搞错
上机调试
1、调试中遇到问题及解决方法
1)、程序调试过程中常会出现一些小错误,如i,j混淆少括号少分号等小问题都可以按照提示找到,然后改正。
2)、语句错误语句使用不当造成程序无法运行出正常的结果。
3)、在排序过程中输出的结果是按总分顺序排序的,但是却不能够正确的输出是哪个学校的总分,解决方法是在新申请的顺序表的节点中加入了一个纪录学校代号的内容,在输出的同时就可以把学校代号也正确的输出来了。
2、设计体会
通过这次课程设计使我进一步达到理论与实际相结合,提高了自己组织数据及编写程序的能力,使我们能够根据问题要求和数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机内部表示出来并用软件解决问题,培养良好的程序设计技能,掌握设计程序的思路,学会用计算机语言编写程序,以实现所需处理的任务,锻炼自己的动脑能力,学会用自己的思路解决现实中的实际问题,虽然一开始也走了一些弯路不过在同学和老师的点拨下完成了该程序,这次课程设计中遇到了很多问题,一开始准备用二维数组存放的可考虑到同一个学校同一个项目有好几个人参加,就不能用二维数组了,如果每个学校都申请一个二维数组也非常不方便,还是用顺序表方便也不浪费空间,在这次课程设计的过程中虽然很多次都参照了课本及资料,不过这使我更加熟悉了顺序表以及结构体的定义及实现,调试过程中也遇到了一些问题也都是自己独立思考完成的,还有一个体会是,遇到不会的地方可以参考课本也可以去图书馆或网上查资料,当然主要思路有了也就简单点了,一开始思路不是很清楚就开始在敲程序了,浪费了很多时间,在老师的指导下,把自己的思路理清楚了再来敲程序果真是事半功倍,这真是个很好的收获。
3、性能分析
在排序时用到了直接插入排序,从算法描述中可以看到,在搜索插入位置时,遇到关键字相等的元素就停止比较和移动元素,可以确定该算法是稳定的排序算法。
从空间角度上看,它只需要一个元素的辅助空间r[0]。
从时间角度上看,主要时间耗费在关键字的比较和移动元素上。
n为顺序表表长,平均时间复杂度为O(n2)最坏时间复杂度为O(n2)辅助存储空间r[0]。
类似的编程问题,在设计中还遇到了很多。
最后在老师的指导下,和班级几个同学的帮助下,终于解决,较为完善的完成了任务。
回顾这次课程设计,使我感慨颇多。
的确,从理论到实践,在整整一星期的日子里,学到很多很多的的东西,同时不仅可以巩固学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,从而提高自己的实际动手编程能力和独立思考的能力。
八、参考文献
【1】严蔚敏,吴伟民。
数据结构(C语言版)。
清华大学出版社,2011.
9.代码
#include
#include
#include
#include
#include
#defineMAX50
#defineNULL0
typedefstructnode1{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该学校获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct{
intschool;/*学校编号*/
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct{
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
voidfunct1(ALLitems*g1,ALLNode*g2)
{
Schools*p1;
Items*p2;
inti,j,k,m,w,h,x;
p1=(Schools*)malloc(sizeof(Schools));
p2=(Items*)malloc(sizeof(Items));
if(!
p1||!
p2)
exit
(1);
printf("\n******输入各个项目信息******\n\n");
printf("输入男子项目总数m:
");
scanf("%d",&m);
if(m<0||m>20)
{printf("输入有误,m是20以内的整数,请重新输入:
");
scanf("%d",&m);
}
printf("输入女子项目总数w:
");
scanf("%d",&w);
if(w<0||w>20)
{printf("输入有误,w是20以内的整数,请重新输入:
");
scanf("%d",&w);
}
printf("输入参加运动会的学校总数n:
");
scanf("%d",&g2->n);
if(g2->n<0||g2->n>20)
{printf("输入有误,n是20以内的整数,请重新输入:
");
scanf("%d",&g2->n);
}
g1->z=m+w;
printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);
printf("\n\n****记录运动会成绩****");
printf("\n\n(输入0标志结束)\n");
for(k=1;k<=g1->z;k++)
{g1->a[k].item=k;
g1->a[k].firstschool=NULL;
}
for(k=1;k<=g2->n;k++)
{g2->b[k].school=k;
g2->b[k].firstitem=0;
g2->b[k].score=0;
g2->b[k].boys=0;
g2->b[k].girls=0;
}
g2->b[0].score=0;
g2->b[0].boys=0;
g2->b[0].girls=0;
while(i!
=0)
{printf("\n项目:
");
scanf("%d",&i);
if(i!
=0)
{printf("1.前三名2.前五名\n");
printf("请选择:
");
scanf("%d",&j);
if(j!
=1&&j!
=2)
{printf("输入有误,请重新选择:
");
scanf("%d",&j);
}
if(j==1)
{h=3;
do{printf("第%d名:
学校(学校编号为数字)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==3)p2->record=p1->record=2;
if(h==2)p2->record=p1->record=3;
if(h==1)p2->record=p1->record=5;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)
g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
else
g2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
if(j==2)
{h=5;
do{printf("第%d名:
学校(学校编号为数字)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==5)p2->record=p1->record=1;
if(h==4)p2->record=p1->record=2;
if(h==3)p2->record=p1->record=3;
if(h==2)p2->record=p1->record=5;
if(h==1)p2->record=p1->record=7;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)
g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
else
g2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
}
}
}
voidsave()
{FILE*fp1,*fp2;
fp1=(FILE*)malloc(sizeof(FILE));
fp2=(FILE*)malloc(sizeof(FILE));
if((fp1=fopen("sports1","wb"))==NULL)
{printf("cannotopenfile.\n");
return;
}
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
printf("filewriteerror.\n");
fclose(fp1);
if((fp2=fopen("sports2","wb"))==NULL)
{printf("cannotopenfile.\n");
return;
}
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
=1)
printf("filewriteerror.\n");
fclose(fp2);
}
voidfunct2(ALLNode*g2)/*输出各学校总分*/
{intk;
printf("\n\n******输出各学校总分******\n");
printf("学校编号\t总分\n");
for(k=1;k<=g2->n;k++)
printf("学校%d\t\t\t%d分\n",k,g2->b[k].score);
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct3(ALLNode*g2)/*按学校编号排序输出*/
{
intk;
Items*p2;
p2=(Items*)malloc(sizeof(Items));
printf("\n\n******按学校编号排序输出******\n");
printf("学校编号\t\t\t获奖情况\n");
for(k=1;k<=g2->n;k++)
{printf("\t\t\t\t学校%d\t",k);
p2=g2->b[k].firstitem;
while(p2!
=NULL)
{printf("项目%d:
得%d分",p2->item,p2->record);
p2=p2->next;
}
printf("\n");
}
printf("\n");
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct4(ALLNode*g2)/*按学校总分排序输出*/
{inti,j,k;
Items*p2;
printf("\n\n******按学校总分排序输出******\n");
printf("学校编号\t总分\n");
for(i=2;i<=g2->n;i++)
{
p2=g2->b[1].firstitem;
while(p2!
=NULL)
{
p2=p2->next;
}
printf("\n");
g2->b[0].score=g2->b[i].score;
g2->b[0].boys=g2->b[i].boys;
g2->b[0].girls=g2->b[i].girls;
g2->b[0].school=g2->b[i].school;
j=i-1;
while(g2->b[0].score
{g2->b[j+1].score=g2->b[j].score;
g2->b[j+1].boys=g2->b[j].boys;
g2->b[j+1].girls=g2->b[j].girls;
g2->b[j+1].school=g2->b[j].school;
j--;
}
g2->b[j+1].score=g2->b[0].score;
g2->b[j+1].boys=g2->b[0].boys;
g2->b[j+1].girls=g2->b[0].girls;
g2->b[j+1].school=g2->b[0].school;
}
for(k=1;k<=g2->n;k++)
printf("学校%d\t\t%d分\n",g2->b[k].school,g2->b[k].score);
system("pause");
printf("按任意键返回主菜单......");
getchar();
}
voidfunct5(ALLNode*g2)/*按男团体总分排序输出*/
{inti,j,k;
Items*p2;
p2=(Items*)malloc(size
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会分数统计 课程设计报告 运动会 分数 统计 课程设计 报告