运动会分数统计系统的简单实现Word文档下载推荐.docx
- 文档编号:22493596
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:25
- 大小:299.43KB
运动会分数统计系统的简单实现Word文档下载推荐.docx
《运动会分数统计系统的简单实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统的简单实现Word文档下载推荐.docx(25页珍藏版)》请在冰豆网上搜索。
最后输出各学校的总分、女子总分、男子总分,及总分排名、女子总分排名、男子总分排名,和所要查找的学校总分、女子总分、男子总分。
◆任务:
一共有n个学校参加运动会(n小于20),编号1……n,分成m个男子项目和w个女子项目,不同项目取前三名的积分为:
3、2、1(m<
20,n<
20)。
◆功能要求:
1.能统计各个学校的总分。
2.可以按学校总分、男子总分、女子总分输出。
3.可以查找某个学校的总分、男子总分、女子总分的情况。
3、概要设计(或总体设计)
3.1数据结构描述
实现以上算法必须定义两个结构体,一个项目结构体,一个学校结构体。
tructpro{//项目结构体;
charname[N];
//项目名称;
intnums[4];
//前三名学校编号;
}p[21];
structschool{//学校结构体;
intnum;
//学校名称;
intsums;
//学校总分;
intgirl;
//女子总分;
intboy;
//男子总分;
}sch[21];
主要有五个模块:
1.主函数模块;
选择操作。
即选择要实现的功能。
2.总分排序模块;
Sumsrank(),将参加运动会的学校按总分大小排列。
3.女子总分排序模块;
Girlrank()将参加运动会的学校按女子总分大小排列。
4.男子总分排序模块;
Boyrank()将参加运动会的学校按男子总分大小排列。
5.查找模块;
Search()查找某学校的分数情况。
ADT定义
ADTYundong{
数据对象:
D={e1,e2,e3,e4|e1,e2,e3,e4∈ElemSet}
基本操作:
Input(&
A,x1,x2,x3….)
促使条件:
A为n维数组,x1,x2,x3…为变量。
操作结果:
将变量赋值给A中元素。
Rank(&
A)
操作结果:
将数组A中元素排序并列出。
}ADTYundong
3.2模块设计
◆储存设计
主菜单
1
2
3
4
5
6
输入各学校的名称、个项目的名称及获得前三名的学校编号,并储存。
输出各个学校的总分、女子总分、男子总分。
按编号输出
按学校总分排名输出成绩。
按学校女子总分排名输出成绩。
按学校男子总分排名输出成绩
输出查找某个学校的总分、女子总分、男子总分。
退出程序。
1输入各学校及各项目成绩并储存
输入女子项目个数w
输入男子项目个数m
输入参加运动会的学校总数
n
女子项目
男子项目
输入项目编号(如1)
输入项目编号(如w)
输入项目编号(如m)
输入第一的学校编号(编号为:
…
输入第三名学校的编号(编号为:
输入第三的学校编号(编号为:
2.统计各学校总分情况,按编号输出
按各学校编号显示分数情况
按数字键继续选择操作。
3.统计各学校总分排名
显示各学校总分
4.统计各学校女子总分排名
显示各学校女子总分
5.统计各学校男子总分排名
显示各学校男子总分
6.按学校编号查询某个学校的得分情况
输入要查询的学校编号
显示该学校的编号、名称、总分、女子总分、男子总分
0.退出程序
按任意键可以退出。
◆主函数流程
main()
4、详细设计及实现
4.1input()
4.2sumsrank()4.3girlrank()
4.4boyrank()4.5search()
5、调试分析
1.input()输入函数
输入函数中出现的主要错误有错误信息的循环编写的不是很好,经常出现死循环,有时易跳不出循环总在重复同一操作。
while循环中的控制语句中的变量值在循环中的位置设置的不对以致在后面循环的时候出现无法实现循环,和循环出错,形成死循环的现象。
例如控制语句中的y变量就出现了错误,混淆了退出循环是的值。
为了将提示信息写进循环,可以将操作重复,所以出现了,报错不正确的现象。
if语句中的判断语句出现错误,逻辑关系不清等错误也常常出现。
例如混淆了“&
&
”和“||”的用法,导致了判断错误输入时出现了很多错误。
出现这种情况后的解决办法,通过反复的修改和调试。
换用不同的循环体找寻适合的控制语句。
实现在输入错误时,出现错误提醒及修改操作。
对于逻辑关系的换乱,可以试着用不同的判断语句来实现,或者不断试验判断正确逻辑。
在C++环境中单击程序运行按钮。
测试:
屏幕显示菜单,输入1,回车。
输入各个学校的名称和各个项目的名称及前三名的学校。
2.排序函数
在排序函数中,程序使用了冒泡排序法。
但是中间出现了对结构体中的元素的不正确引用。
致使后面输出时的编号和排名时的数据错误。
在排序中if语句判断好大小后,最开始只是对当前的元素进行了排序,以致后面再输出结果时,输出错误,排序混乱。
例如在总分排序中,只是将sch[j].sum与sch[j+1].sum进行了交换,致使后面排序的输出时完全错误。
解决方法,仔细查找结构体。
正确引用结构体元素。
排序时应将结构体整体排序,而不是简单的将某个结构体中的某个元素排序。
排序中还出现了循环错误。
对于双层循环的控制出现错误,外层循环和内层循环没有很好的协调。
例如外层循环循环变量为i,内层循环循环变量为j,i与j的关系没有弄清,使后面的结果发生了错误。
解决方式,修改循环。
检查外层循环和内层循环的控制语句,调试出最佳的循环关系。
发现错误并修改。
测试:
输入2或3,回车。
按学校的最初编号排列,输出学校名称、团体总分、女子总分、男子总分。
按学校的团体总分排列,输出学校编号,学校名称、团体总分。
调试分析:
缺点是每次执行后无法返回主菜单,查找功能每次只能查找一个学校,不能循环使用。
每次查找一个学校后就退出循环,不能继续操作。
6、结论及体会
1.课题小结:
对于这次的实验题目,事先想象的很简单,自己认为只是几个简单的小模块,简单的排序和数据统计问题,想要实现是很简单的事情。
可是没有想到做起来还是蛮辛苦的,有好多模块之间的联系自己事先都没有想清楚,导致做的时候很是手忙脚乱。
事先所查的资料也是寥寥无几,能给自己提供的信息也很少。
在编程序的时候遇到了很多困难,从而也发现了自己对之前C语言及数据结构的知识掌握的不是很理想。
简单的做题还是可以,但是如果结合起来做一个简单的系统还真是困难。
自己对于各个算法之间的联系还是模棱两可的,很多东西不是自己想象的那样简单。
明白了,要想把一个系统做好需要了解很多东西,也要有全局的观念,自己做的是一个系统而不是一个简单的算法。
仅仅了解书本上简单的程序是不够的,还要将这些只是用到实际的程序上,这一点中遇到的困难是我始料未及的。
通过这次设计实验,让我对原来所学的知识有了更深刻的理解,尤其是原来并不是很懂得结构体知识,还有对于数据排序的知识。
在写论文的时候也对于数据的流程图有了新的认识,原来学习的时候不是很喜欢画流程图,但是通过这次试验,让我发现流程图的重要性。
这次实验让我学到了很多,不仅仅是知识,还有查找资料,编写程序、调试程序等能力,同时也让我明白了,只要决定做一件事,下定决心通过努力是可以成功的,虽然可能和自己的想象有些差距,但是如果不去做是连一点点的收获都得不到的,我们可以通过以后的努力使它更加完善和理想。
这也是我这次试验的最大收获,这次试验让我获益匪浅。
2.对系统的评价及改进设想
我的系统自认为不是很理想的,因为自己有很多的想法没有被实现。
时间复杂度和空间复杂度没很好的被考虑在内。
所以算法的分析做的不是很够,自己只是将简单的计算思想和简单的程序功能体现出来。
虽然程序上还有很多的地方不足,但是简单的功能,如分数输入、数据整理、数据排序、数据输出等功能都可以实现,基本的要求和功能都已实现,这是我比较满意的。
还有让自己觉得程序还不错的地方是错误提示做的比较满意,在反复修改了程序循环之后可以正确的提示错误,并且可以退出循环重新输入。
我认为这个系统还有很多需要改进的地方,有些功能没有完全的体现。
原本我对于这个程序的设想是,除了数据的输入、整理、排序之外,查找功能是除了可以按学校查询,还可以按项目查询各学校的得分情况,但是这一点我的程序无法实现,还是因为结构体的运用上有些不清,无法达到这项功能。
这是我对于这个程序最大的遗憾。
也是最需要改进的地方。
因为自己的编程能力真的不是很好,很多地方无法顾及,许多的东西无法实现,程序有很多的瑕疵和不足。
所以希望在老师看过我的程序后,请老师多多批评指正,谢谢老师!
!
参考文献
[1]严蔚敏,吴伟民.数据结构题集(C语言版).北京:
清华大学出版社,1999.
[2]徐孝凯.数据结构课程实验.北京:
清华大学出版社,2002.
附录
主要的源程序代码。
#include<
stdio.h>
stdlib.h>
math.h>
string.h>
conio.h>
#defineOK1
#defineERROR0
#defineN20
intn;
//n个学校;
intm;
//m个男子项目;
intw;
//w个女子项目;
structpro{//项目结构体;
intmins[3]={3,2,1};
//前三名成绩的积分;
voidinput()
{//输入各项目成绩;
inti,j,x,y;
printf("
请输入学校的数目。
(大于0,小于20)!
"
);
y=0;
while
(1)
{
scanf("
%d"
&
n);
if(n>
=0&
n<
=20)y=1;
if(y==1)break;
elseprintf("
输入有误,输入应大于零小于20,请重新输入!
}
for(i=1;
i<
=n;
i++)
{
请输入第%d个学校的名字。
i);
%s"
sch[i].name);
sch[i].sums=0;
sch[i].boy=0;
sch[i].girl=0;
sch[i].num=i;
请输入男子和女子项目数(大于0,小于20):
%d%d"
m,&
w);
if(m<
=20&
m>
=1&
w<
w>
=1)y=1;
for(i=1;
=m+w;
{
printf("
请输入第%d个项目的名称:
\n"
scanf("
p[i].name);
请输入该项目前三名学校的编号(数字编号):
for(j=1;
j<
=3;
j++)
{
y=0;
while
(1)
{
scanf("
x);
if(x>
=1&
x<
输入数据有误,请重新输入:
}
p[i].nums[j]=x;
sch[x].sums+=mins[j-1];
if(i<
=m)sch[x].boy+=mins[j-1];
elsesch[x].girl+=mins[j-1];
}
}
}
voidsumsrank()
{//总分排序;
inti,j;
schoola;
for(i=0;
n;
for(j=1;
=n-i;
if(sch[j].sums<
sch[j+1].sums)
a=sch[j];
sch[j]=sch[j+1];
sch[j+1]=a;
}
voidgirlrank()
{//女子排序;
if(sch[j].girl<
sch[j+1].girl)
voidboyrank()
{//男子排序
n-i;
j++){
if(sch[j].boy<
sch[j+1].boy)
voidschrank()
{//学校排名
inti;
学校分数统计\n"
学校编号学校名称团体总分女子总分男子总分\n"
%d%s%d%d%d\n"
sch[i].num,sch[i].name,sch[i].sums,sch[i].girl,sch[i].boy);
voidSumrank()
{//团体分数排名
团体分排名\n"
sumsrank();
名次学校编号学校名称团体总分\n"
{
printf("
%d%d%s%d\n"
i,sch[i].num,sch[i].name,sch[i].sums);
voidGirlrank(){
inti;
女子总分排名\n"
//女子总分排名
girlrank();
名次学校编号学校名称女子总分\n"
i,sch[i].num,sch[i].name,sch[i].girl);
voidBoyrank(){
男子总分排名\n"
//男子总分排名
boyrank();
名次学校编号学校名称男子总分\n"
i,sch[i].num,sch[i].name,sch[i].boy);
voidsearch(){//查找功能
intx;
请输入要查询的学校编号:
//学校查找
%d%s%d%d%d"
sch[x].num,sch[x].name,sch[x].sums,sch[x].girl,sch[x].boy);
voidmain()
*************************************\n"
运动会分数统计系统\n"
1.输入成绩;
2.学校排名;
3.总分排名;
4.女子排名;
5.男子排名;
6.学校查找;
0.退出系统;
请选择操作:
switch(x)
case0:
break;
case1:
{input();
请继续选择操作!
case2:
{schrank();
}
case3:
{Sumrank();
case4:
{Girlrank();
case5:
{Boyrank();
case6:
{search();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 运动会 分数 统计 系统 简单 实现