数据结构课程设计报告运动会分数统计.docx
- 文档编号:9647524
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:26
- 大小:49.71KB
数据结构课程设计报告运动会分数统计.docx
《数据结构课程设计报告运动会分数统计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告运动会分数统计.docx(26页珍藏版)》请在冰豆网上搜索。
数据结构课程设计报告运动会分数统计
理工学院
课程设计
学生姓名:
学号:
专业班级:
课程名称:
数据结构课程设计
学年学期:
2019—2020学年第1学期
指导教师:
2020年1月
课程设计成绩评定表
学生姓名
学号
成绩
专业班级
起止时间
设计题目
运动会分数统计
指
导
教
师
评
语
学习态度出勤情况:
好□较好□一般□较差□
课题工作量:
饱满□较大□合理□较小□
综合运用知识能力:
好□较好□一般□较差□
方案设计情况:
合理□较合理□基本合理□不合理□
课题结果分析能力:
强□较强□一般□较差□
设计实现情况:
全部□大部分□部分□未实现□
设计报告内容:
详细□完整□较完整□不完整□
设计报告文档格式:
规范□较规范□基本规范□不规范□
独立完成情况:
全部□大部分□部分□小部分□
设计验收情况:
程序运行正确,能正确回答问题,有独到见解□
程序运行正确,能正确回答问题□
程序运行正确,能正确回答部分问题□
程序运行正确,回答问题需提示□
程序运行不正常,回答问题困难□
指导教师:
年月日
一、数据结构课程设计目标………………………………………………………1
二、问题描述……………………………………………………………….……1
三、需求分析……………………………………………………………….……1
四、概要设计…………………………………………………………………….1
五、详细设计……………………………………………………………….……2
六、软件说明书………………………………………………………………….19
七、测试报告……………………………………………………………………………….19
八、课程设计总结……………………………………………………………….20
一、数据结构课程设计目标
本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。
通过这次课程设计,要求在数据结构的逻辑特性和物理表示、数据结构的选择和应用算法的设计及其实现等方面,加深对课程基本内容的理解。
同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
二、问题描述
参加运动会的n个学校编号为1~n。
比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。
由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。
写一个统计程序产生各种成绩单和得分报表。
三、需求分析
基本要求:
1、可以输入各个项目的前三名或前五名的成绩;
2、能统计各学校总分,
3、可以按学校编号或名称、学校总分、男女团体总分排序输出;
4、可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5、数据存入文件并能随时查询
规定:
1、输入数据形式和范围:
可以输入学校的名称,运动项目的名称
2、输出形式:
有中文提示,各学校分数为整型。
3、界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
4、存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
四、概要设计
整个系统可以分为7个模块,输入成绩模块、统计各学校总分模块、按学校排序输出模块、按团体排序输出模块、按学校编号查询学校的项目情况模块、按项目编号查询学校情况模块以及退出模块,其中按学校排序输出模块包含按编号输出、按名称输出和按总分输出,按团体排序输出模块又分为男子团体总分排序和女子团体总分排序,部分模块包含返回主界面功能。
其次还可以将数据存入文件中,也可以从文件中读取数据。
五、详细设计
#include
#include
typedefstructSchool//学校
{
intnum;//学校编号
intsumscore;//学校总成绩
intscore;//获奖项目成绩
intman;//男团总成绩
intwoman;//女团总成绩
intn;//学校总数
charname[15];//学校名称
}School11;
typedefstructItem
{
intInum[6];//获奖项目编号
intIscore[21][21];//项目成绩
intIsum;//项目总数
}Item11;
Item11Item1[21];
School11School1[21];
intm,w,k,b,j,h;
voidPutscore()//输入成绩函数
{
printf("\n\n*********请输入各项目信息*********\n\n");
printf("输入学校总数:
");
scanf("%d",&School1[0].n);
while(School1[0].n<=0||School1[0].n>20)
{
printf("输入错误,请重新输入。
\n");
printf("输入学校总数:
");
scanf("%d",&School1[0].n);
}
printf("输入男子项目总数:
");
scanf("%d",&m);
while(m<=0||m>=20)
{
printf("输入错误,请重新输入。
\n");
printf("输入男子项目总数:
");
scanf("%d",&m);
}
printf("输入女子项目总数:
");
scanf("%d",&w);
while(w<=0||w>20)
{
printf("输入错误,请重新输入。
\n");
printf("输入女子项目总数:
");
scanf("%d",&w);
}
Item1[0].Isum=m+w;
printf("男子项目编号为1至%d\n",m);
printf("女子项目编号为%d至%d\n",m+1,m+w);
for(k=1;k<=School1[0].n;k++)
{
printf("输入第%d个学校名称:
",k);
scanf("%s",&School1[k].name);
School1[k].sumscore=0;
School1[k].man=0;
School1[k].woman=0;
School1[k].num=k;
}
printf("输入项目编号,以0作为结束:
");
scanf("%d",&b);
while(b!
=0)//以0为结束
{
printf("前三名按3,前五名按5:
");
scanf("%d",&j);
while(j!
=3&&j!
=5)
{
printf("输入错误,请重新输入。
\n");
printf("前三名按3,前五名按5:
");
scanf("%d",&j);
}
if(j==3)
{
printf("输入获得第一名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=5;
Item1[b].Inum[1]=h;
School1[h].score=School1[h].score+5;
if(b<=m)
School1[h].man=School1[h].man+5;
else
School1[h].woman=School1[h].woman+5;
printf("输入获得第二名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=3;
Item1[b].Inum[2]=h;
School1[h].score=School1[h].score+3;
if(b<=m)
School1[h].man=School1[h].man+3;
else
School1[h].woman=School1[h].woman+3;
printf("输入获得第三名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=2;
Item1[b].Inum[3]=h;
School1[h].score=School1[h].score+2;
if(b<=m)
School1[h].man=School1[h].man+2;
else
School1[h].woman=School1[h].woman+2;
}
if(j==5)
{
printf("输入获得第一名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=7;
Item1[b].Inum[1]=h;
School1[h].score=School1[h].score+7;
if(b<=m)
School1[h].man=School1[h].man+7;
else
School1[h].woman=School1[h].woman+7;
printf("输入获得第二名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=5;
Item1[b].Inum[2]=h;
School1[h].score=School1[h].score+5;
if(b<=m)
School1[h].man=School1[h].man+5;
else
School1[h].woman=School1[h].woman+5;
printf("输入获得第三名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=3;
Item1[b].Inum[3]=h;
School1[h].score=School1[h].score+3;
if(b<=m)
School1[h].man=School1[h].man+3;
else
School1[h].woman=School1[h].woman+3;
printf("输入获得第四名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=2;
Item1[b].Inum[4]=h;
School1[h].score=School1[h].score+2;
if(b<=m)
School1[h].man=School1[h].man+2;
else
School1[h].woman=School1[h].woman+2;
printf("输入获得第五名的学校编号:
");
scanf("%d",&h);
Item1[0].Iscore[h][b]=1;
Item1[b].Inum[5]=h;
School1[h].score=School1[h].score+1;
if(b<=m)
School1[h].man=School1[h].man+1;
else
School1[h].woman=School1[h].woman+1;
}
printf("输入项目编号,以0作为结束:
");
scanf("%d",&b);
}
savefile();
system("pause");
printf("按任意键返回");
getchar();
system("cls");
}
voidsavefile()//存储数据文件
{
FILE*fp1,*fp2;
inti,j;
if((fp1=fopen("file1.txt","wb"))==NULL)//打开文件
{
printf("不能打开此文件\n");
return;
}
for(i=0;i<20;i++)
if(fwrite(&Item1[i],sizeof(structItem),1,fp1)!
=1)//写数据块
printf("文件写入错误\n");
fclose(fp1);//关闭文件
if((fp2=fopen("file2.txt","wb"))==NULL)//打开文件
{
printf("不能打开此文件\n");
return;
}
for(j=0;j<20;j++)
if(fwrite(&School1[j],sizeof(structSchool),1,fp2)!
=1)//写数据块
printf("文件写入错误\n");
fclose(fp2);//关闭文件
}
voidreadfile()//读取数据文件
{
FILE*fp1,*fp2;
inti,j;
if((fp1=fopen("file1.txt","rb"))==NULL)//打开文件
{
printf("不能打开此文件\n");
return;
}
for(i=0;i<20;i++)
if(fread(&Item1[i],sizeof(structItem),1,fp1)!
=1)//读数据块
printf("文件读取错误\n");
fclose(fp1);//关闭文件
if((fp2=fopen("file2.txt","rb"))==NULL)//打开文件
{
printf("不能打开此文件\n");
return;
}
for(j=0;j<20;j++)
if(fread(&School1[j],sizeof(structSchool),1,fp2)!
=1)//读数据块
printf("文件读取错误\n");
fclose(fp2);//关闭文件
}
voidtotalscore(School11r[])//统计各学校总分
{
readfile();
intk;
printf("\n\n****输出各学校总分******\n");
printf("学校编号\t学校总分\n");
for(k=1;k<=r[0].n;k++)
{
School1[k].sumscore=School1[k].man+School1[k].woman;
printf("%2d\t\t%6d",School1[k].num,School1[k].sumscore);
printf("\n");
}
system("pause");
printf("按任意键返回");
getchar();
system("cls");
}
voidschoolname(School11School1[20])//按名称排序
{
readfile();
inti,j;
School11t;
for(i=1;i { for(j=i+1;j<=School1[0].n;j++) if(strcmp(School1[i].name,School1[j].name)>0) { t=School1[i]; School1[i]=School1[j]; School1[j]=t; } } printf("\n************************按名称排序**********************\n"); printf("学校编号\t学校名称\t总分\t男子总分\t女子总分\n"); for(i=1;i<=School1[0].n;i++) { printf("%5d\t%14s\t%11d\t%5d\t%13d\n",School1[i].num,School1[i].name,School1[i].man+School1[i].woman,School1[i].man,School1[i].woman); } printf("**********************************************************\n"); system("pause"); printf("按任意键返回"); getchar(); system("cls"); } voidschoolnum(School11School1[20],Item11Item1[20])//按编号排序 { readfile(); inti,j; School11t; for(i=1;i { for(j=i+1;j<=School1[0].n;j++) if(School1[i].num>School1[j].num) { t=School1[i]; School1[i]=School1[j]; School1[j]=t; } } printf("\n************************按编号排序**********************\n"); printf("学校编号\t学校名称\t总分\t男子总分\t女子总分\n"); for(i=1;i<=School1[0].n;i++) { printf("%5d\t%14s\t%11d\t%5d\t%13d\n",School1[i].num,School1[i].name,School1[i].man+School1[i].woman,School1[i].man,School1[i].woman); } printf("**********************************************************\n"); system("pause"); printf("按任意键返回"); getchar(); system("cls"); } voidbubble1(School11r[],intn)//总分冒泡法排序 { School11a; inti,j,flag=1; for(i=1;i { flag=0; for(j=1;j<=n-1;j++) if(r[j+1].man+r[j+1].woman { a=r[j]; r[j]=r[j+1]; r[j+1]=a; flag=1; } } } voidmaopao2(School11r[],intn)//男子总分排序 { School11a; inti,j,flag=1; for(i=1;i { flag=0; for(j=1;j<=n-1;j++) if(r[j+1].man { a=r[j]; r[j]=r[j+1]; r[j+1]=a; flag=1; } } } voidmaopao3(School11r[],intn)//女子总分排序 { School11a; inti,j,flag=1; for(i=1;i { flag=0; for(j=1;j<=n-1;j++) if(r[j+1].woman { a=r[j]; r[j]=r[j+1]; r[j+1]=a; flag=1; } } } voidzongfen(School11r[],intn)//按总分排序输出 { readfile(); inti; bubble1(r,n);//执行冒泡法排序1 printf("\n************************按总分排序**********************\n"); printf("学校编号\t学校名称\t总分\t男子总分\t女子总分\n"); for(i=n;i>=1;i--) printf("%5d\t%14s\t%11d\t%5d\t%13d\n",r[i].num,r[i].name,r[i].man+r[i].woman,r[i].man,r[i].woman); printf("********************************************************\n"); system("pause"); printf("按任意键返回"); getchar(); system("cls"); } voidman(School11r[],intn)//男子团体总分排序 { readfile(); inti; maopao2(r,n);//执行冒泡法排序2 printf("按男子团体总分排序结果为: \n");// printf("********************************************************\n"); printf("学校编号\t学校名称\t总分\t男子总分\t女子总分\n"); for(i=n;i>=1;i--) printf("%5d\t%14s\t%11d\t%5d\t%13d\n",r[i].num,r[i].name,r[i].man+r[i].woman,r[i].man,r[i].woman); printf("********************************************************\n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 运动会 分数 统计