您好,欢迎来到投聚财经。
搜索
您的当前位置:首页数据结构实践运动会分数统计系统

数据结构实践运动会分数统计系统

来源:投聚财经


目录
1、摘要----------------------------------------------------------------32、概述
2.1设计目的------------------------------------------------------32.2设计内容------------------------------------------------------32.3系统功能要求-----------------------------------------------42.4相关知识----------------------------------------------------43、思路
3.1提出问题--------------------------------------------------53.2分析问题--------------------------------------------------53.3解决问题--------------------------------------------------54、系统设计

4.1 主函数---------------------------------------------------5
4.2 结构体的定义-------------------------------------------7 4.3 文件存储--------------------------------------------------8
5.1 运行主菜单----------------------------------------------10

5.2 输入信息-------------------------------------------------10
5.3 输出信息------------------------------------------------10
5.4 查询信息------------------------------------------------11
5.5 调用信息------------------------------------------------11
6、调试过程中出现的问题及解决方式
6.1 出现的问题--------------------------------------------12
6.2 解决方式----------------------------------------------12
7、总结------------------------------------------------------12
8、附录(源代码)--------------------------------------13

1、摘要
二十一世纪是计算机飞速发展的世纪,面对着不断更新的计算机系统,计算机给人们带来了越来越多的方便。比如现代运动会得分数统计就可以由计算机来完成。然而要是计算机完成这种计算,人们必须给计算机赋予这种计算的功能。那么这种计算功能具体是怎样实现的呢,今天就让我们一起走进这个神奇的世界。

2、概述
2.1设计目的
《数据结构》是计算机程序设计的重要理论基础,学懂了数据结构可以帮助编程者编出功能强大的程序。

本次实践的重要目的是让我们结合理论知识,实际上机操作。让我们更好

另外目的还有1、使我们更加熟练的掌握专业知识
的理解数据结构的应用。

2.1设计内容

运动会分数统计(限1人完成)任务:参加运动会有n个学校,学校编号

1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……

m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分

别为:75321,前三名的积分分别为:532;哪些取前五名或前三名

由学生自己设定。(m<=20,n<=20

功能要求:

1) 可以输入各个项目的前三名或前五名的成绩;



2)能统计各学校总分,

3)可以按学校编号或名称、学校总分、男女团体总分排序输出;

4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或

前五名的学校。

5)数据存入文件并能随时查询

6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称

输出形式:有中文提示,各学校分数为整形

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相

关的功能要求。

2.4 系统功能要求
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数

测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数

据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中

写明。

2.5相关知识

数据结构中的数据存储结构有多种,在我的设计中用到了以下知识:

1、结构体数组类型存储数据:结构体是由相同或不同数据类型组成的一种复杂

的数据类型;结构体类型的定义只是该结构的组成情况,编译系统并未因此而为

其分配存储空间,当定义了结构体类型的变量或数组或编译系统才为其分配存储


空间。


2、查询:对于线性表而言可以有多种方法,输入要查询的内容信息,通过查询函数就能实现要查询的内容。

3、思路
3.1提出问题
1)首先需要用什么存储结构来存储数据?

2)怎样排序才能得到用户想要的结果?

3)怎样把项目信息与学校信息结合,实现同步?

3.2分析问题

对于以上问题我们怎样才能解决呢?首先,对于存储结构我们可以采用顺序表,
链表、结构体数组等方式;排序方式也有冒泡排序、插入排序等方式;要实现同
对于上面提到的存储结构顺序表当然可以,但在实际中同步那一块遇到了较

大的问题。所以在这里我们不妨用结构体数组的方式来存储,这样存储结构的问

题就解决了;然后排序方式我选用了冒泡排序,这样就更好的对应了结构体数组

的存储方式。这样问题就解决了。下面让我们看看具体怎样实现的吧!

4、系统设计
4.1主函数
主函数的功能菜单如下:
intmain()
{

int choice;
while(1)
{
printf("\n");




printf(" -*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");
printf(" ****欢迎使用运动会分数统计系统!********\n");printf(" -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");

printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf("
printf("

***********************\n"); ************\n\n");
1、输入信息!\n");
************\n\n");
2、输出信息!\n");
************\n\n");
3、查询信息!\n");
************\n\n");
4、调用信息!\n");
************\n\n");
5、退出系统!\n");
************\n");
**********************\n");

printf(" *************************************\n");
printf(" 请选择以上操作!\n");
scanf("%d",&choice);

switch(choice)
{ case 1: system("cls");
main();

break;
case2:
system("cls");
Output();//输出信息的函数
main();
break;
case3:
system("cls");
Inquiary();//查询函数
main();
break;
case4:
system("cls");
Readata();//从文件了读出数据的函数

system("pause");
main();
break;




4.2结构体的定义

结构体定义如下:

typedefstruct
{
intitemnum;//项目编号
charname[20];//项目名称
inttop;//取名次的数目
intrange[5];//名次
intmark[5];//分数
}itemnode;//定义项目结点的类型
//结构体数组类型存储
typedefstruct
{
intschoolnum;//学校编号
charname[20];//学校名称
intscore;//学校总分
intmscore;//男团总分

int wscore;//女团总分
}headnode;//定义头结点类型headnode h[20];//定义一个头结点数组 itemnode c[20];//项目数组
文件的存储我用到了fprintf 函数和fscanf 函数进行数据的逐步读入读出

代码如下;
StatusWritedata()
{//存到文件中
FILE*report;
inti,j;
if((report=fopen("sportdata.txt","w"))==null)
{
printf("不能打开文件\n");
exit(1);
}
fprintf(report,"%d\n",n);
fprintf(report,"%d\n",m);
fprintf(report,"%d\n",w);
for(i=0;i<n;i++)

{

fprintf(report,"%d\n",h[i].schoolnum);



fprintf(report,"%s\n",h[i].name);


fprintf(report,"%d\n",h[i].score);
fprintf(report,"%d\n",h[i].mscore);
fprintf(report,"%d\n",h[i].wscore);
for(j=0;j<m+w;j++)
{
fprintf(report,"%d\n",h[i].c[j].itemnum);
fprintf(report,"%s\n",h[i].c[j].name);
fprintf(report,"%d\n",h[i].c[j].top);
fprintf(report,"%d\n",h[i].c[j].range[j]);
}
fprintf(report,"\n\n");
}
fclose(report);
returnOK;
}





4.4流程图

开始

输入

Y

学校数、男项目数、女项目数

学校和项目的信息及成绩信息

Y


查询各校成绩

继续

输出各校成绩

N

Y继续

N

结束



5、调试与运行
5.1运行主菜单

5.2输入信息
选择1输入信息,显示如下:



5.3输出信息
选择主菜单2输出信息

1 输出





2 按学校总分输出为:

4 按女团总分输出为:

5.4查询信息
选择主菜单的3查询信息

2

1



5.5调用信息
选主菜单4调用信息,由于信息太多在这我只截取部分的图片:




5退出系统:

至此整个项目调试完毕。

6、调试过程中出现的问题及解决方式
6.1出现的问题
在调试的过程中我遇到了一下的一些小麻烦
1)在输出信息时,排序怎样排未控制好。

2)往文件里读入数据时用到了二进制模块读入函数fwrite文件不能直观的在.txt文档里观察到。

3)读出文件时用到了模块读出函数fread,但在读出数据时出现了与要求输出不对照的情况。

对于出现的问题我做了如下处理:
6.2 解决方式

这样做使得能在.txt文件里观察到输入的信息是否错误。

3)对于读出函数相应的用到了fscanf函数,逐个输出数据。

7、总结
从这次实践中我们队数据结构的知识更近了一成,能更好的实现利用数据

结构来解决实际问题。更加巩固了我们的专业知识。

8、附录(源代码)

#include<stdio.h>
#include<stdlib.h>
#define null 0
#define OK 1




intn,m,w;//学校数目,男子项目数目,女子项目数目
typedefint Status;

typedefstruct
{
intitemnum;//项目编号
charname[20];//项目名称
inttop;//取名次的数目
intrange[5];//名次
intmark[5];//分数
}itemnode;//定义项目结点的类型
//结构体数组类型存储
typedefstruct
{
intschoolnum;//学校编号
charname[20];//学校名称
intscore;//学校总分
intmscore;//男团总分
intwscore;//女团总分

itemnode c[20];//项目数组
}headnode;//定义头结点类型
headnode h[20];//定义一个头结点数组
{ //输入信息,建立系统

printf("请输入参加运动会的学校数目:\n");
scanf("%d",&n);
printf("请输入男子项目数:\n");
scanf("%d",&m);
printf("请输入女子项目数:\n");
scanf("%d",&w);
inti,j,s;
for(i=0;i<n;i++)
{
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0;
}
for(i=0;i<n;i++)

{

printf("输入学校编号:\n");




scanf("%d",&h[i].schoolnum);getchar();
printf("输入学校名称:\n");
gets(h[i].name);
for(j=0;j<m+w;j++)
{
printf("输入项目编号:\n");
scanf("%d",&h[i].c[j].itemnum);getchar();
printf("输入项目名称:\n");
gets(h[i].c[j].name);
printf("取前三名or前五名\n");
scanf("%d",&h[i].c[j].top);
for(s=0;s<5;s++)
{
h[i].c[j].range[s]=0;
h[i].c[j].mark[s]=0;
}//初始化排名和分数
printf("所获名次:\n");
scanf("%d",&h[i].c[j].range[j]);//输入所获取名次信息
if(h[i].c[j].top==3)

switch(h[i].c[j].range[j])
{ case 0: h[i].c[j].mark[j]=0;
break;

case2:
h[i].c[j].mark[j]=3;
break;
case3:
h[i].c[j].mark[j]=2;
break;
}
else
switch(h[i].c[j].range[j])
{
case0:
h[i].c[j].mark[j]=0;
break;
case1:

h[i].c[j].mark[j]=7;
break;
case 2:




h[i].c[j].mark[j]=5;
break;
case3:
h[i].c[j].mark[j]=3;
break;
case4:
h[i].c[j].mark[j]=2;
break;
case5:
h[i].c[j].mark[j]=1;
break;
}
h[i].score=h[i].score+h[i].c[j].mark[j];//按取前三还是前五分别积分学校总分
if(j<=m-1)
{
h[i].mscore=h[i].mscore+h[i].c[j].mark[j];//是男子项目则记到男子分数里去
}

else
数里去
h[i].wscore=h[i].wscore+h[i].c[j].mark[j];//是女子项目则记到女子分printf("\n");
}

StatusOutput()
{
//输出函数
intchoice,i,j,k;
intremember[n];
intsign;
do
{
system("cls");
printf(" 1、按学校编号输出!\n");
printf(" 2、按学校总分输出!\n");
printf(" 3、按男团总分输出!\n");
printf(" 4、按女团总分输出!\n");

printf("请选择操作!\n");
scanf("%d",&choice);
switch(choice)




{
case1:
system("cls");
for(i=0;i<n;i++)
{
printf("学校编号:%d\n",h[i].schoolnum);
printf("学校名称:%s\n",h[i].name);
printf("学校总分:%d\n",h[i].score);
printf("男团总分:%d\n",h[i].mscore);
printf("女团总分:%d\n",h[i].wscore);
printf("\n\n");
}//按编号顺序输出
break;

case2:
system("cls");
for(i=0;i<n;i++)
remember[i]=i;
for(i=0;i<n;i++)

for(j=i+1;j<n;j++)
{ if(h[remember[i]].score<h[j].score) {
}//冒泡排序,用辅助数组记下头结点下标

}
for(i=0;i<n;i++)
{
printf("学校编号:%d\n",h[remember[i]].schoolnum);
printf("学校名称:%s\n",h[remember[i]].name);
printf("学校总分:%d\n",h[remember[i]].score);
printf("男团总分:%d\n",h[remember[i]].mscore);
printf("女团总分:%d\n",h[remember[i]].wscore);
printf("\n\n");
}
break;

case3:
system("cls");

for(i=0;i<n;i++)
remember[i]=i;
for(i=0;i<n;i++)




for(j=i+1;j<n;j++)
{
if(h[remember[i]].mscore<h[j].mscore)
{
k=remember[i];
remember[i]=remember[j];
remember[j]=k;
}//冒泡排序,用辅助数组记下头结点下标
}
for(i=0;i<n;i++)
{
printf("学校编号:%d\n",h[remember[i]].schoolnum);
printf("学校名称:%s\n",h[remember[i]].name);
printf("学校总分:%d\n",h[remember[i]].score);
printf("男团总分:%d\n",h[remember[i]].mscore);
printf("女团总分:%d\n",h[remember[i]].wscore);
printf("\n\n");
}
break;

case 4: system("cls"); for(i=0;i<n;i++)
{

if(h[remember[i]].wscore<h[j].wscore)
{
k=remember[i];
remember[i]=remember[j];
remember[j]=k;
}//冒泡排序,用辅助数组记下头结点下标
}
for(i=0;i<n;i++)
{
printf("学校编号:%d\n",h[remember[i]].schoolnum);
printf("学校名称:%s\n",h[remember[i]].name);
printf("学校总分:%d\n",h[remember[i]].score);
printf("男团总分:%d\n",h[remember[i]].mscore);
printf("女团总分:%d\n",h[remember[i]].wscore);

printf("\n\n");
}
break;




}
printf("请选择2:继续;0:跳出\n");
scanf("%d",&sign);

}while(sign==2);
returnOK;
}

StatusInquiary()
{
//查询函数
intchoice;
intremember[n];
inti,j,k,s;
printf(" 1、按学校编号查询\n");
printf(" 2、按项目编号查询\n");
printf("请选择查询方式!\n");
scanf("%d",&choice);
switch(choice)

{
case 1: system("cls"); do
if(i>n)

{
printf("ERROE:这个学校没有参加这次运动会!\n");
continue;
}
else
printf("输入要查项目数组下标:\n");
scanf("%d",&j);
if(j>m+w||j==0)
printf("此次运动会没有这个项目!\n");
else
{
printf("项目名称为:%s\n",h[i-1].c[j-1].name);
printf("学校编号为:%d\n",h[i-1].schoolnum);
printf("学校名称为:%s\n",h[i-1].name);

printf("这个项目取前%d 名, for(k=0;k<5;k++) 该学校成绩如下\n",h[0].c[j-1].top);

{



if(h[i-1].c[j-1].range[k]!=0)
{
printf("名次:%d\n",h[i-1].c[j-1].range[k]);//输出要查询学校项目的名次
}
}
}
printf("请选择操作! 2:继续;0:跳出");
scanf("%d",&s);
}
while(s==2);
break;

case2:
system("cls");
do
{
printf("输入要查询的项目数组下标!\n");
scanf("%d",&s);

if(s>m+w||s==0)
printf("此次运动会不包括此项目!\n"); else {
{

printf("该项目为:%s\n",h[i].c[s-1].name);
for(j=0;j<n;j++)
{
if(h[i].c[s-1].range[j]!=0)
{
printf("学校编号:%d\n",h[i].schoolnum);
printf("学校名称:%s\n",h[i].name);
printf("学校名次:%d\n",h[i].c[s-1].range[j]);
//输出该项目取得名次的学校成绩
}
}
}
printf("选择2:继续;0:跳出\n");
scanf("%d",&i);

}
while(i==2);
break;




}
returnOK;
}

StatusWritedata()
{//存到文件中
FILE*report;
inti,j;
if((report=fopen("sportdata.txt","w"))==null)
{
printf("不能打开文件\n");
exit(1);
}
fprintf(report,"%d\n",n);
fprintf(report,"%d\n",m);
fprintf(report,"%d\n",w);
for(i=0;i<n;i++)
{
fprintf(report,"%d\n",h[i].schoolnum);

fprintf(report,"%s\n",h[i].name);
fprintf(report,"%d\n",h[i].score); fprintf(report,"%d\n",h[i].mscore); fprintf(report,"%d\n",h[i].wscore);
fprintf(report,"%s\n",h[i].c[j].name);

fprintf(report,"%d\n",h[i].c[j].top);
fprintf(report,"%d\n",h[i].c[j].range[j]);
}
fprintf(report,"\n\n");
}
fclose(report);
returnOK;
}

StatusReadata()
{
FILE*report;
inti,j;
if((report=fopen("sportdata.txt","r"))==null)

{

printf("file cannot be opened !\n");



exit(1);


}

fscanf(report,"%d",&n);
printf("参赛学校数目:%d\n",n);
fscanf(report,"%d",&m);
printf("男子项目数目:%d\n",m);
fscanf(report,"%d",&w);
printf("女子项目数目:%d\n\n",w);
for(i=0;i<n;i++)
{
printf("学校编号:");
fscanf(report,"%d",&h[i].schoolnum);
printf("%d\n",h[i].schoolnum);
printf("学校名称:");
fscanf(report,"%s",h[i].name);
printf("%s\n",h[i].name);
printf("学校总分:");
fscanf(report,"%d",&h[i].score);
printf("%d\n",h[i].score);

printf("男团总分: ");
fscanf(report,"%d",&h[i].mscore); printf("%d\n",h[i].mscore); printf("女团总分:");
{

printf("项目编号:");
fscanf(report,"%d",&h[i].c[j].itemnum);
printf("%d\n",h[i].c[j].itemnum);
fscanf(report,"%s",h[i].c[j].name);
printf("项目名称:%s\n",h[i].c[j].name);
fscanf(report,"%d",&h[i].c[i].top);
printf("取前几:%d\n",h[i].c[i].top);
if(h[i].c[j].range[j]!=0)
{
printf("名次:");
fscanf(report,"%d",&h[i].c[j].range[j]);
printf("%d\n",h[i].c[j].range[j]);
}
}

}

printf("\n\n");


getchar();



fclose(report);
returnOK;
}

intmain()
{
intchoice;
while(1)
{
printf("\n");
printf(" -*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");
printf(" ****欢迎使用运动会分数统计系统!********\n"); printf(" -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");

printf("

***********************\n");

printf("

************\n\n");

printf("

1、输入信息!\n");

printf("

************\n\n");

printf("

2、输出信息!\n");

printf("

************\n\n");

printf(" 3、查询信息!\n");
printf("
printf("
printf(" ************\n\n");
printf(" *************************************\n");

printf(" 请选择以上操作!\n");
scanf("%d",&choice);
switch(choice)
{
case1:
system("cls");
Inputinformation();
Writedata();
//Readata();
main();
break;

case2:
system("cls");

Output();
main();
break;




case3:
system("cls");
Inquiary();
main();
break;

case4:
system("cls");
Readata();system("pause");
main();
break;

case5:
system("cls");
printf("\n\n\n");

printf("

**************************************\n");

printf("

***************************\n");

printf("

********************\n");

printf(" *********\n\n\n");
printf("
printf("
printf(" 感谢您的支持!谢谢使用!\n\n\n");
********************\n");

default://非法选择
system("cls");
printf("Invalidchice!\n");
printf("请重新选择操作!\n");
break;
}
}
return0;
}



Copyright © 2019- tjwe.cn 版权所有

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务