目录
1、摘要----------------------------------------------------------------32、概述
2.1设计目的------------------------------------------------------32.2设计内容------------------------------------------------------32.3系统功能要求-----------------------------------------------42.4相关知识----------------------------------------------------43、思路
3.1提出问题--------------------------------------------------53.2分析问题--------------------------------------------------53.3解决问题--------------------------------------------------54、系统设计
4.1 主函数---------------------------------------------------5 |
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。不同的项目取前五名或前三名积分;取前五名的积分分
别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名
由学生自己设定。(m<=20,n<=20) 功能要求: 1) 可以输入各个项目的前三名或前五名的成绩; | |
2)能统计各学校总分,
3)可以按学校编号或名称、学校总分、男女团体总分排序输出;
4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或
前五名的学校。
5)数据存入文件并能随时查询
6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称
输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相
关的功能要求。
2.4 系统功能要求 |
据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中
写明。
2.5相关知识
数据结构中的数据存储结构有多种,在我的设计中用到了以下知识:
1、结构体数组类型存储数据:结构体是由相同或不同数据类型组成的一种复杂
的数据类型;结构体类型的定义只是该结构的组成情况,编译系统并未因此而为
其分配存储空间,当定义了结构体类型的变量或数组或编译系统才为其分配存储
空间。
2、查询:对于线性表而言可以有多种方法,输入要查询的内容信息,通过查询函数就能实现要查询的内容。
3、思路
3.1提出问题
1)首先需要用什么存储结构来存储数据?
2)怎样排序才能得到用户想要的结果?
3)怎样把项目信息与学校信息结合,实现同步?
3.2分析问题
对于以上问题我们怎样才能解决呢?首先,对于存储结构我们可以采用顺序表, |
大的问题。所以在这里我们不妨用结构体数组的方式来存储,这样存储结构的问
题就解决了;然后排序方式我选用了冒泡排序,这样就更好的对应了结构体数组
的存储方式。这样问题就解决了。下面让我们看看具体怎样实现的吧!
4、系统设计
4.1主函数
主函数的功能菜单如下:
intmain()
{
int choice; | |
printf(" -*-*-*-*菜-*-单*-*选-*-*项-*-*-*-*-*-\n");
printf(" ****欢迎使用运动会分数统计系统!********\n");printf(" -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-\n");
printf(" | ***********************\n"); ************\n\n"); |
printf(" *************************************\n");
printf(" 请选择以上操作!\n");
scanf("%d",&choice);
switch(choice) |
break;
case2:
system("cls");
Output();//输出信息的函数
main();
break;
case3:
system("cls");
Inquiary();//查询函数
main();
break;
case4:
system("cls");
Readata();//从文件了读出数据的函数
system("pause"); | |
4.2结构体的定义
结构体定义如下:
typedefstruct
{
intitemnum;//项目编号
charname[20];//项目名称
inttop;//取名次的数目
intrange[5];//名次
intmark[5];//分数
}itemnode;//定义项目结点的类型
//结构体数组类型存储
typedefstruct
{
intschoolnum;//学校编号
charname[20];//学校名称
intscore;//学校总分
intmscore;//男团总分
int wscore;//女团总分 |
代码如下;
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,但在读出数据时出现了与要求输出不对照的情况。
对于出现的问题我做了如下处理: |
这样做使得能在.txt文件里观察到输入的信息是否错误。
3)对于读出函数相应的用到了fscanf函数,逐个输出数据。
7、总结
从这次实践中我们队数据结构的知识更近了一成,能更好的实现利用数据
结构来解决实际问题。更加巩固了我们的专业知识。
8、附录(源代码)
#include<stdio.h> | |
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];//项目数组 |
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]) |
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; | |
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 |
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"); | |
{
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++) |
}
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++) | |
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"); | |
}
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)
{ |
{
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("该项目为:%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);
} | |
}
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].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("男团总分: "); |
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(" 请选择以上操作!\n");
scanf("%d",&choice);
switch(choice)
{
case1:
system("cls");
Inputinformation();
Writedata();
//Readata();
main();
break;
case2:
system("cls");
Output(); | |
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"); | |
default://非法选择
system("cls");
printf("Invalidchice!\n");
printf("请重新选择操作!\n");
break;
}
}
return0;
}
Copyright © 2019- tjwe.cn 版权所有
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务