数据结构运动会分数系统Word格式文档下载.docx
《数据结构运动会分数系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构运动会分数系统Word格式文档下载.docx(26页珍藏版)》请在冰点文库上搜索。
structmatch//项目
{
intmatchnum;
//项目编号
intrank[3];
//名次
}mat[Max];
structschool//学校
intschoolnum;
//学校编号
inttotal;
//学校总分
intboytotal;
//男团总分
intgirltotal;
//女团总分
structmatchmat[Max];
}sch[Max];
2系统设计
2.1主要算法的设计思想
本程序主要是使用顺序表来实现操作。
一个运动会包括运动项目和参加运动会
学校。
因此构造顺序表match,school。
为了操作的方便,设计了一个总目录,
择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返
目录或退出程序,对于总分的排序使用了冒泡排序。
还有用文件来存储调用。
为了使整个程序界面看起,更加惬意,又添加了背景和字体颜色设置的程序语句。
每个操作前都有操作指南
易于使用。
2.2总体设计关系图
funct0退出
funct1计算总分
funct2按学校编号排序
funct3按学校总分排序
funct4按男团总分排序
funct5按女团总分排序
funct6按学校编号查询学校某个项目情况
funct7按项目编号查询取得名次的学校
readdata从文件直接调用查看信息
input输入数据
welcom
main
xunhuan
2.3各功能模块的设计
2.3.1主函数main()
voidmain()
system("
Color1e"
);
//改变背景,前景色
welcom();
xunhuan();
}
首先是从welcom欢迎开始,然后进入xunhuan进行各种功能调用。
2.3.2输入信息、计算
totaljisuan
input
2.3.3排序
对学校总分、团体总分排序
2.3.4查询
通过学校编号、项目编号进行查询
2.3.5文件
通过对writedata()readdata()调用完成对文件存储与调用
3系统测试
1.欢迎界面
9.按项目编号查询取得名次的学校
10.从文件直接调用查看信息
出现问题:
在最初写时候用for(i=0;
i<
N;
i++)
{
printf("
******学校编号:
"
fread(&
k,sizeof(int),1,report);
printf("
%d\n"
k);
}会出现只能读取一个学校信息。
之后改进读取结构体,但仍在从文件中读取时总有随机数出现;
通过仔细检查、与同学讨论才发现是调用的结构与存储的结构不对:
for(i=0;
sch1[i],sizeof(int),1,report);
改正:
fread(&
sch1[i],sizeof(school),1,report
4总结和分工
1.总结:
课程设计是培养我们的综合能力,从设计总体结构流程、具体算法设计、调试程序等全方面考核。
在一开始写完程序后调试,有许多问题出现。
再一一检查后发现,许多小问题出现:
语句后没有分号、没有大括号、小括号等问题。
还有就是在文件存储调用方面因忘记上学期的知识,总是有问题,特别是在从文件中读取时总有随机数出现;
通过看书、与同学讨论才发现是调用的结构与存储的结构不对,经过改正后终于正确输出。
5参考文献
[1]谭浩强.程序设计
[2]严蔚敏,吴伟民.数据结构.[M]清华大学出版社,2005.
6附录
#include<
stdio.h>
#include<
process.h>
conio.h>
voidwelcom()/*开始界面,欢迎使用*/
printf("
\t***^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^***\n\n"
欢迎使用运动会分数统计系统\n\n"
\t***^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^^_^***\n\n"
\n\n\n\t\t按任意键进入系统..."
getch();
cls"
voidmulu(){
\t\t************系统目录****************\n"
//目录
\t\t************************************\n"
\t\t*1.输入学校、编号信息*\t\n"
\t\t*2.统计各学校总分*\t\n"
\t\t*3.按学校编号排序输出*\t\n"
\t\t*4.按学校总分排序输出*\t\n"
\t\t*5.按男团体总分排序输出*\t\n"
\t\t*6.按女团体总分排序输出*\t\n"
\t\t*7.按学校编号查询学校某个项目情况*\t\n"
\t\t*8.按项目编号查询取得名次的学校*\t\n"
\t\t*9.从文件直接调用查看信息*\t\n"
\t\t*0.退出*\t\n"
voidfunct0()//退出系统
\n\t\t*******谢谢使用!
*******\n"
exit(0);
voidtotaljisuan()
inti,k,b;
for(i=0;
for(k=0,b=0;
k<
bm+gm;
k++)
b=sch[i].mat[k].rank[0]*5+sch[i].mat[k].rank[1]*3+sch[i].mat[k].rank[2]*2;
sch[i].total=sch[i].total+b;
if(k<
bm)
sch[i].boytotal=sch[i].boytotal+b;
if(k>
=bm)
sch[i].girltotal=sch[i].girltotal+b;
}
voidinput()//输入成绩
{
inti,j,k;
intq;
*********输入成绩**********\n"
###输入说明:
\n"
1.学校编号为1--%d;
项目编号为1--%d(1-%d为男子项目,%d-%d为女子项目).\n"
N,bm+gm,bm,bm+1,bm+gm);
2.成绩只能是'
0'
或'
1'
\n('
表示没获得该项目的该名次,'
表示获得了该项目的该名次.以'
Tab'
键前进。
)\n"
N);
输入学校个数,男团体个数,女团体个数\n"
scanf("
%d,%d,%d"
&
N,&
bm,&
gm);
i++)//初始化分数
{
sch[i].total=0;
sch[i].boytotal=0;
sch[i].girltotal=0;
for(k=0;
{
sch[i].mat[k].rank[0]=0;
sch[i].mat[k].rank[1]=0;
sch[i].mat[k].rank[2]=0;
sch[i].mat[k].matchnum=k+1;
}
******请输入学校编号:
"
loop3:
scanf("
%d"
sch[i].schoolnum);
if(sch[i].schoolnum<
0||sch[i].schoolnum>
N)
输入错误(只能是1-%d)请重新输入:
gotoloop3;
项目编号"
for(k=0;
%d"
sch[i].mat[k].matchnum);
for(j=0;
j<
3;
j++)
{
loop:
第(%d)名:
j+1);
sch[i].mat[k].rank[j]);
if(sch[i].mat[k].rank[j]!
=0&
&
sch[i].mat[k].rank[j]!
=1)
输入错误,请重新输入,成绩只能是'
gotoloop;
}totaljisuan();
##########0:
退出;
1:
返回目录。
****请选择:
loop2:
q);
if(q==0)funct0();
if(q==1)xunhuan();
else{
printf("
输入错误(只能是0或1),请重新输入:
gotoloop2;
voidfunct1()//统计各学校总分
{inti,q;
**********统计各学校总分**********\n"
**学校编号**\t\t\t\t**总分**\n"
\t%d\t\t\t\t%d\n"
sch[i].schoolnum,sch[i].total);
voidfunct2()//按学校编号排序
structschoolsch1;
inti,j,q;
N-1;
j++)
N-j-1;
if(sch[i].schoolnum>
sch[i+1].schoolnum)
sch1=sch[i];
sch[i]=sch[i+1];
sch[i+1]=sch1;
**********按学校编号排序**********\n"
voidfunct3()//按学校总分排序
if(sch[i].total<
sch[i+1].total)
**********按学校总分排序**********\n"
voidfunct4()//按男团体总分排序
if(sch[i].boytotal<
sch[i+1].boytotal)
**********按男团体总分排序**********\n"
**学校编号**\t\t**男团体总分**\n"
sch[i].schoolnum,sch[i].boytotal);
else{
voidfunct5()//按女团体总分排序
if(sch[i].girltotal<
sch[i+1].girltotal)
**********按女团体总分排序**********\n"
**学校编号**\t\t**女团体总分**\n"
sch[i].schoolnum,sch[i].girltotal);
voidfunct6()//按学校编号查询学校某个项目情况
inti,n,m,q;
**********按学校编号查询学校某个项目情况**********\n"
loop1:
*******请输入所要查询的学校编号:
n);
if(n>
!
输入错误,请重新输入!
!
gotoloop1;
*******请输入所要查询的项目编号:
m);
if(n==sch[i].schoolnum)
{
学校编号:
%d项目编号:
%d\n"
n,m);
if(sch[i].mat[m-1].rank[0]==1)
printf("
第一名(获得)"
if(sch[i].mat[m-1].rank[1]==1)
第二名(获得)"
if(sch[i].mat[m-1].rank[2]==1)
第三名(获得)"
elseif(sch[i].mat[m-1].rank[0]!
=1&
sch[i].mat[m-1].rank[1]!
sch[i].mat[m-1].rank[2]!
本校该项目未进入前三名"
返回目录;
2:
返回上一级。
if(q==2)gotoloop1;
输入错误,请重新输入:
voidfunct7()//按项目编号查询取得名次的学校
inti,t,q;
**********按项目编号查询取得名次的学校**********\n"
*****请输入所要查询的项目编号:
);
t);
项目编号:
t);
if(sch[i].mat[t-1].rank[0]==1)
学校%d获得第一名:
\n"
sch[i].schoolnum);
if(sch[i].mat[t-1].rank[1]==1)
学校%d获得第二名:
if(sch[i].mat[t-1].rank[2]==1)
学校%d获得第三名:
输入错误,请重新输入:
voidwritedata()//把数据存储在文件中
FILE*report;
inti;
if((report=fopen("
sportsdata.dat"
"
wb"
))==NULL)
不能打开文件\n"
exit
(1);