C语言课程设计运动会分数统计系统说明书1Word文档格式.docx
- 文档编号:18954532
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:28
- 大小:299.80KB
C语言课程设计运动会分数统计系统说明书1Word文档格式.docx
《C语言课程设计运动会分数统计系统说明书1Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言课程设计运动会分数统计系统说明书1Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
3).可以按学校编号(或学校名称)、学校总分、男女团体总分排序输出;
4).可以按学校编号(或学校名称)查询学校某个项目的情况;
可以按项目编号查询取得前三的学校。
3、系统总体设计
整体结构图
运动会
分数统计系统
输入排序查询退出
二、概要设计
1.数据结构
<
1>
学校:
名称,编号,总分,男子团体总分,女子固体总分。
2>
运动项目:
项目编号,名称,男子项目,女子项目,前三名,前五名,
2.程序模块及之间的调用关系
三、详细设计
(1)本程序中学校的存储结构为链表,
其中
school类为:
classschool:
publicathlete/*学校*/
{
……
public:
intcount;
/*学校获奖数*/
intserial;
/*学校编号*/
intmenscore;
/*男选手总分*/
intwomenscore;
/*女选手总分*/
inttotalscore;
/*总分*/
athleteath[MaxSize];
/*获奖运动员信息数组,包括分数,名次,项目*/
school*prev;
//前指针
school*next;
//后指针
};
其中部分主要的函数:
添加操作add(school*&
head)
查询操作checkFunc(school*head,int&
n)
文件保存save(school*head)
总分快速排序tquicksort(vector<
school*>
&
v,intfirst,intlast)
总分基数排序tbaseSort(vector<
v,intd)
2.关键算法
{……
添加项目号
for(i=1;
i<
=n;
i++)
{输入第i名运动员的学校编号temp
……
while(first!
=head)//遍历链表,直到找到编号为serial的学校所在结点,或first指向表头head
{if(first->
serial==要添加的编号)
{
(first->
ath[first->
count]).item=要添加的项目号;
count]).range=i(名次)
First指向的学校的项目加一;
更新总分
break;
}
first=first->
next;
……}
Y
N
3、算法设计
主要算法的设计思想:
本程序主要是使用函数来实现操作。
一个运动会包括参加学校、运动项目和参加运动会的成员。
因此构造两个函数。
为了操作的方便,并且能够保存输入数据,所以通过文件操作来实现数据的写和读。
对于总分的排序使用了冒泡排序。
为了使整个程序看起来更加友好,又添加了程序启动画面。
4.查询操作:
//按学校编号顺序输出所有参赛学校运动会成绩
voidserialSort(vector<
v)
{
for(inti=0;
i<
v.size();
i++)
{
cout<
*v[i];
}
}
四、调试分析
本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。
通过调试,运行,基本上达到了要求,但还存在一些缺点。
如:
不够人性化等。
五、测试结果
1.主菜单窗口
2.输入各个项目成绩并存储文件
3.统计各学校总分
4.按学校编号排序输出
5.按学校总分排序输出
6.按男团体总分排序输出
7.按女团体总分排序输出
8.按学校编号查询学校某个项目情况
9.按项目编号查询取得名次的学校
六、说明书
1、运行环境
Windows,VC++6.0
2根据正确的提示安装软件。
3、Intel486以上系列、AMDK6以上系列等PC台式机和便携式电脑都可运行。
4、操作过程
用户进入程序启动界面,等l完成后进入主菜单.主菜单有以下8个选项
1.输入学校
2.输入运动项目
3.按学校编号输出总分
4.按总分排序
5.按男团体总分排序
6.按女团体总分排序
7.按项目编号查询
8.按学校编号查询
总结
该系统以运动会分数统计为背景,涵盖了运动员检录、运动员成绩的排序、运动员评奖等的多种功能,并且有一定的可行性和安全性,确保了各项指定功能得以运行。
本系统以基本函数、结构体、枚举性、文件以及链表等多方位知识贯穿实现。
通过此次程序设计实践,是同学们对所学知识的综合运用,也是程序设计得以提高的表现。
通过此次编程培养了我们结构化程序设计的思想,加深了对高级语言基本语言要素和控制结构的理解,锻炼我们独立思考制作程序的能力,并且掌握了一些课程设计的相关知识与实践操作能力,为以后的学习提供了锻炼的机会。
经过设计和开发,能够完成运动员检录、运动员成绩的排序、运动员评奖等的多种操作。
并提供部分系统维护功能,使用户方便进行数据备份和恢复、数据删除。
对于数据的一致性的问题也通过程序进行了有效的解决。
从而是我对c语言这门课程有了更好的了解。
但是由于设计时间较短,所以该系统还有许多不尽如人意的地方,比如联机文档比较少,用户界面不够美观,出错处理不够等多方面问题。
这些都有待进一步改善。
参考文献
1、C/C++程序设计教程,王连相,中国铁道出版社,2006
2、C语言程序设计,谭浩强,清华大学出版社,1999
3、C程序设计题解与上机指导,谭浩强,清华大学出版社,1999
4、C/C++程序设计上机指导与测试,王连相,中国铁道出版社,2006
5、C语言函数手册,机械工业出版社,1999
6、C语言的实际应用,安徽科学技术出版社,2000
致谢
在编写程序的过程中,我们得到了丁政建老师的精心指导以及孜孜不倦的教诲,在老师的指导下,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯,在此,我们对老师的精心栽培表示衷心的感谢!
感谢同学们对我的帮助和指点,尤其感谢我的舍友在非常时期,在生活和学习上帮我许多忙。
在课设即将完成之际,我的心情无法平静,从开始进入课题到课设的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意。
附件Ⅰ部分原程序代码
#include<
stdio.h>
stdlib.h>
string.h>
io.h>
//#include<
conio.h>
/*屏幕操作函数*/
#defineMAX50
//#defineNULL0
typedefstructnode1{
intschool;
intrecord;
/*项目成绩*/
structnode1*next;
/*链域*/
}Schools;
typedefstruct{
intitem;
/*项目编号*/
Schools*firstschool;
/*链域指向链表中第一个结点*/
}ITEM;
intz;
/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
/*该学校获奖的项目*/
structnode2*next;
}Items;
intscore;
/*学校总分*/
intboys;
/*男团体总分*/
intgirls;
/*女团体总分*/
Items*firstitem;
/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
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"
);
输入男子项目总数m:
"
scanf("
%d"
&
m);
if(m<
0||m>
20)
{printf("
输入有误,m是20以内的整数,请重新输入:
}
输入女子项目总数w:
w);
if(w<
0||w>
输入有误,w是20以内的整数,请重新输入:
输入参加运动会的学校总数n:
g2->
n);
if(g2->
n<
0||g2->
n>
输入有误,n是20以内的整数,请重新输入:
g1->
z=m+w;
则项目编号为男子1-%d,女子%d-%d"
m,m+1,g1->
z);
\n\n****记录运动会成绩****"
\n\n(输入0标志结束)\n"
for(k=1;
k<
=g1->
z;
k++)
{g1->
a[k].item=k;
a[k].firstschool=NULL;
=g2->
n;
{g2->
b[k].school=k;
g2->
b[k].firstitem=0;
b[k].score=0;
b[k].boys=0;
b[k].girls=0;
b[0].score=0;
b[0].boys=0;
b[0].girls=0;
while(i!
=0)
\n项目:
i);
if(i!
1.前三名2.前五名\n"
请选择:
j);
if(j!
=1&
j!
=2)
输入有误,请重新选择:
if(j==1)
{h=3;
do{printf("
第%d名:
学校(学校编号为数字)"
h);
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=3;
if(h==1)p2->
record=5;
next=g1->
a[i].firstschool;
a[i].firstschool=p1;
next=g2->
b[x].firstitem;
b[x].firstitem=p2;
b[x].score=g2->
b[x].score+p2->
record;
/*累计总分*/
if(i<
=m)g2->
b[x].boys=g2->
b[x].boys+p2->
/*累计男团体总分*/
elseg2->
b[x].girls=g2->
b[x].girls+p2->
/*累计女团体总分*/
h--;
}while(x!
=0&
h!
=0);
if(j==2)
{h=5;
if(h==5)p2->
record=1;
if(h==4)p2->
record=7;
}
voidsave()
{FILE*fp1,*fp2;
fp1=(FILE*)malloc(sizeof(FILE));
fp2=(FILE*)malloc(sizeof(FILE));
if((fp1=fopen("
sports1"
"
wb"
))==NULL)
cannotopenfile.\n"
return;
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
filewriteerror.\n"
fclose(fp1);
if((fp2=fopen("
sports2"
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
=1)
fclose(fp2);
voidfunct2(ALLNode*g2)/*输出各学校总分*/
{intk;
\n\n******输出各学校总分******\n"
学校编号\t总分\n"
%d\t\t\t%d\n"
k,g2->
b[k].score);
\n"
system("
pause"
按任意键返回主菜单......"
getchar();
voidfunct3(ALLNode*g2)/*按学校编号排序输出*/
intk;
\n\n******按学校编号排序输出******\n"
学校编号\t\t\t获奖情况\n"
k);
\t\t\t\t\t\t%d\t"
k);
p2=g2->
b[k].firstitem;
while(p2!
=NULL)
项目%d:
得%d分"
p2->
item,p2->
record);
p2=p2->
按任意键返回主菜单......"
voidfunct4(ALLNode*g2)/*按学校总分排序输出*/
{inti,j,k;
Items*p2;
\n\n******按学校总分排序输出******\n"
学校编号\t\t总分\n"
//printf("
输入要查询的项目编号:
for(i=2;
i++)
%d\t"
%d\t\t%d\n"
g2->
b[k].school,g2->
b[0].score=g2->
b[i].score;
b[0].boys=g2->
b[i].boys;
b[0].girls=g2->
b[i].girls;
b[0].school=g2->
b[i].school;
j=i-1;
while(g2->
b[0].score<
b[j].score&
j>
0)
b[j+1].score=g2->
b[j].score;
b[j+1].boys=g2->
b[j].boys;
b[j+1].girls=g2->
b[j].girls;
b[j+1].school=g2->
b[j].school;
j--;
b[0].score;
b[0].boys;
b[0].girls;
b[0].school;
voidfunct5(ALLNode*g2)/*按男团体总分排序输出*/
\n\n******按男团体总分排序输出******\n"
学校编号\t\t男团体总分\n"
输入要查询的学校编号:
{
%d\t\t%d\n"
b[k].boys);
b[0].
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 运动会 分数 统计 系统 说明书