运动会分数统计数据结构课程设计含源代码.docx

上传人:b****6 文档编号:4354326 上传时间:2022-11-30 格式:DOCX 页数:27 大小:507.75KB
下载 相关 举报
运动会分数统计数据结构课程设计含源代码.docx_第1页
第1页 / 共27页
运动会分数统计数据结构课程设计含源代码.docx_第2页
第2页 / 共27页
运动会分数统计数据结构课程设计含源代码.docx_第3页
第3页 / 共27页
运动会分数统计数据结构课程设计含源代码.docx_第4页
第4页 / 共27页
运动会分数统计数据结构课程设计含源代码.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

运动会分数统计数据结构课程设计含源代码.docx

《运动会分数统计数据结构课程设计含源代码.docx》由会员分享,可在线阅读,更多相关《运动会分数统计数据结构课程设计含源代码.docx(27页珍藏版)》请在冰豆网上搜索。

运动会分数统计数据结构课程设计含源代码.docx

运动会分数统计数据结构课程设计含源代码

Documentnumber【980KGB-6898YT-769T8CB-246UT-18GG08】

 

运动会分数统计数据结构课程设计含源代码

计算机学院信管专业

数据结构课程设计

题目:

运动会分数统计

班级:

姓名:

学号:

同组人姓名:

起迄日期:

             

课程设计地点:

               

指导教师:

评阅意见:

 

成绩评定:

评阅人:

日期:

完成日期:

2013年12月

1、需求分析……………………………………………………02

2、概要设计……………………………………………………03

3、详细设计……………………………………………………04

4、调试分析和测试结果………………………………………05

5、总结…………………………………………………………13

6、参考文献……………………………………………………14

7、致谢…………………………………………………………14

8、附录…………………………………………………………14

 

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)

(2)功能要求:

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

b).能统计各学校总分,

c).可以按学校编号、学校总分、男女团体总分排序输出;

d).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

(3)规定:

输入数据形式和范围:

20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)

(4)输出形式:

有中文提示,各学校分数为整形

(5)界面要求:

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

(6)存储结构:

学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

(7)测试数据:

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

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;

2、概要设计

(1)文字分析

本课设要求输入信息,统计分数,执行排序与查找功能,在要求中没有在建立数据之后进行插入和删除操作,而在排序和查找过程中有许多的随机读取数据操作,因此使用顺序结构而不用链表。

由于各个要求属性具有一定的联系,在定义数据时使用结构体和结构体数组来存储信息数据。

考虑到程序的要求在设计函数时将学校个数和项目个数设计为可变的数据,为方便使用设计菜单函数(menu),而由于要求将信息存储在文件中故设计文件的存储(savetofile)与读取函数(readfromfile),信息输入函数(input)在输入基本信息后由系统统计总分的内容并全部存入文件file中,在接下来的函数中开始都需要读取文件中的信息,信息的输出(output)输出输入函数中统计后的各项信息,在排序输出(sortput)中使用冒泡排序法进行不同关键字的排序,查询函数(search)采用顺序表的查找来完成。

3、详细设计

(1)项目数据表:

运动会系统先制定本次运动会所需的参赛项目。

本数据表根据要求设计存储每个项目的编号、要取的名次、各个名次名称及各名次对应的分数。

用于对以后项目情况的统计已及查询。

其中inum,top,range由输入信息输入,而mark有range和top决定。

typedefstruct

{

intinum;/*项目编号*/

inttop;/*取名次的数目*/

intrange[5];/*名次*/

intmark[5];/*分数*/

}itemnode;/*存放项目信息*/

(2)学校数据表:

本数据表根据要求储存了各个参赛学校的总体情况,包括学校的编号、学校总分、男子团体总分、女子团体总分,并且包括项目数据数组t[n]。

其中snum和t[n]中部分数据由输入信息输入,而其他三项内容score,mscore,wscore将由系统进行自动统计。

typedefstruct

{

intsnum;/*学校编号*/

intscore;/*学校总分*/

intmscore;/*男团体总分*/

intwscore;/*女团体总分*/

itemnodet[M+W];/*项目数组*/

}snode;/*存放学校信息*/

snodea[N];/*定义一个学校数组*/

这二个数据表相关联接,a[n]中包括t[n],形成一个整体。

(3)模块划分

1、Voidmenu(intn,intm,intw)功能是提供界面窗口

2、Voidsavetofile()功能是保存输入的运动会信息到file文件

3、Voidreadfromfile()功能是从file文件中读取运动会信息

4、Voidinput(intn,intm,intw)功能是输入信息并统计

5、Voidoutput(intn,intm,intw)功能是按学校、项目输出统计信息

6、Voidsortput(intn,intm,intw)功能是按四种方法排序并输出结果

7、Voidsearch(intn,intm,intw)功能是按两种方法查询并输出结果

4、调试分析与测试结果

(1)测试数据

测试取学校个数为3,男子项目个数2.女子项目个数1

项目

学校

编号1(男)

编号2(男)

编号3(女)

取前3

取前5

取前5

编号1

名次

3

1、4

3、4

编号2

名次

2

2、5

1、5

编号3

名次

1

3

2

 

(2)测试结果

1、主菜单界面

2、信息输入运行测试

a).信息输入

b).输入完成

3、统计输出运行测试

a).统计输出

b).统计输出完毕

4、排序输出运行测试

a).选择排序输出形式

b).按学校编号输出

c).按学校总分输出

d).按男团总分输出

d).按女团总分输出

5、信息查询运行测试

a).选择信息查询方式

b).按学校编号查询

c).按项目编号查询

6、退出系统运行测试

5、总结

通过为期四天的设计,我对《数据结构》这门有了更深一步的了解,使我对《数据结构》这门课程掌握以及运用更加灵活。

虽然是应用C语言来编写程序,但却深刻的体现了数据结构对编程的重要性。

这次课程设计运用C语言与数据结构知识,编写一个运动会分数统计系统。

其中遇到了不少问题,因为对《数据结构》这一门课程掌握不够熟练以及平时自己在编写一些普通常见的程序时只是运用单一的知识而课程设计却需要将各个方面的内容联系结合,例如文件与程序的结合,输入、输出、统计、查找的综合应用等,因此真正的程序设计必须先有一个正确的算法思想,运用正确的数据结构和编程语言,灵活的运用并联系几个方面的内容。

通过课程设计也使我认识到,要学好编程,仅学习书本上的知识是不够的,还要有较强的实践能力。

因为我们学习知识就是为了实践。

而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西

6、参考文献

[1]严蔚敏,吴伟民;《数据结构(C语言版)》,清华大学出版社,2007年

[2]王裕明;《数据结构与程序设计》,清华大学出版社,2010年

[3]谭浩强;《C语言程序设计(第三版)》,北京航空航天大学出版社,2005年

[4]李建学;《数据结构课程设计案例精编(用C/C++描述)》,清华大学出版社,2007年

[5]催俊凯;《计算机软件基础》,机械工业出版社,2007年

、致谢

本次试验能够如期完成,主要是要感谢席老师课堂上的讲解以及指导,才能使我对《数据结构》这门课程有较为深入的理解与掌握,才能在本次课程设计中得以运用。

再加上课程设计过程中的程序设计建议,才使得这次课程设计中所遇到的问题能够较快的解决

其次,我还要感谢和我一组的赵咏荔同学,通过两个人的共同协作,才使得本次课程设计能够较好的完成。

同时,还要感谢平时课堂上以及课堂外给我帮助的同学们,能够热心的为我解答我所存在的疑问,并为我的程序提出一些建议。

8、附录

源代码:

#include<>

#include<>

#include<>

#defineN20/*学校最大数目*/

#defineM20/*男子项目最大数目*/

#defineW20/*女子项目最大数目*/

typedefstruct

{

intinum;/*项目编号*/

inttop;/*取名次的数目*/

intrange[5];/*名次*/

intmark[5];/*分数*/

}itemnode;/*存放项目信息*/

typedefstruct

{

intsnum;/*学校编号*/

intscore;/*学校总分*/

intmscore;/*男团体总分*/

intwscore;/*女团体总分*/

itemnodet[M+W];/*项目数组*/

}snode;/*存放学校信息*/

snodea[N];/*定义一个学校数组*/

voidmenu(intn,intm,intw)/*菜单函数*/

{

intc;

voidinput(intn,intm,intw);

voidoutput(intn,intm,intw);

voidsortput(intn,intm,intw);

voidsearch(intn,intm,intw);

printf("\t\t\t欢迎使用\t\t\t\t\n\n");

printf("\t***********运动会分数统计系统***********\n\n");

printf("\t\t*******1.信息输入*******\n");

printf("\t\t*******2.统计输出*******\n");

printf("\t\t*******3.排序输出*******\n");

printf("\t\t*******4.信息查询*******\n");

printf("\t\t*******0.退出系统*******\n\n");

printf("=======================================================\n\n");

printf("请选择要实现步骤的编号(0--4):

");

scanf("%d",&c);

switch(c)

{

case1:

input(n,m,w);break;

case2:

output(n,m,w);break;

case3:

sortput(n,m,w);break;

case4:

search(n,m,w);break;

case0:

printf("谢谢使用,再见!

\n");

exit(0);

default:

printf("输入错误,请重试!

\n");

menu(n,m,w);

}

}

voidsavetofile()/*信息存入文件file*/

{

FILE*fp;

inti;

if((fp=fopen("","w"))==NULL)

{

printf("cannotopenthefile\n");

return;

}

for(i=0;i

{

if(a[i].snum!

='\0')

if(fwrite(&a[i],sizeof(snode),1,fp)!

=1)

{

printf("filewriteerror\n");

return;

}

}

fclose(fp);

}

voidreadfromfile()/*信息从文件file中取出*/

{

inti;

FILE*fp;

if((fp=fopen("","rb"))==NULL)

{

printf("cannotopenthefile\n");

return;

}

for(i=0;i

fread(&a[i],sizeof(snode),1,fp);

fclose(fp);

}

voidinput(intn,intm,intw)/*1.信息输入*/

{

inti,j,s,k,q=0;

for(i=0;i

{

printf("学校编号:

");

scanf("%d",&a[i].snum);/*输入学校信息*/

for(j=0;j

{

printf("项目编号:

");

scanf("%d",&a[i].t[j].inum);

printf("项目取前3名或前5名(3或者5):

");

scanf("%d",&a[i].t[j].top);

if(a[i].t[j].top==3)

printf("获得名次个数(1--3):

");

else

printf("获得名次个数(1--5):

");

scanf("%d",&k);/*输入项目信息*/

for(s=0;s

{

if(a[i].t[j].top==3)

printf("所获名次(1--3):

");

else

printf("所获名次(1--5):

");

scanf("%d",&a[i].t[j].range[s]);/*输入所获名次信息*/

}

printf("\n");

}

}

for(i=0;i

{

a[i].score=0;

a[i].mscore=0;

a[i].wscore=0;

}/*初始化分数*/

for(i=0;i

for(j=0;j

for(s=0;s<5;s++)

{

if(a[i].t[j].top==3)

switch(a[i].t[j].range[s])

{

case0:

a[i].t[j].mark[s]=0;break;

case1:

a[i].t[j].mark[s]=5;break;

case2:

a[i].t[j].mark[s]=3;break;

case3:

a[i].t[j].mark[s]=2;break;

}

elseif(a[i].t[j].top==5)

switch(a[i].t[j].range[s])

{

case0:

a[i].t[j].mark[s]=0;break;

case1:

a[i].t[j].mark[s]=7;break;

case2:

a[i].t[j].mark[s]=5;break;

case3:

a[i].t[j].mark[s]=3;break;

case4:

a[i].t[j].mark[s]=2;break;

case5:

a[i].t[j].mark[s]=1;break;

}

else

{

printf("信息有误!

");

printf("\n");

exit(0);

}

a[i].score=a[i].score+a[i].t[j].mark[s];/*记学校总分*/

if(j<=m-1)

a[i].mscore=a[i].mscore+a[i].t[j].mark[s];/*记男子团体总分*/

else

a[i].wscore=a[i].wscore+a[i].t[j].mark[s];/*记女子团体总分*/

}

printf("输入完毕!

返回1是2否\n");/*返回菜单*/

scanf("%d",&q);

printf("\n");

if(q!

=1)

printf("不能再添加信息!

");

printf("\n");

savetofile();/*将信息存入文件file*/

menu(n,m,w);

}

voidoutput(intn,intm,intw)/*2.统计输出*/

{

readfromfile();

inti,j,s,q=0;

for(i=0;i

{

printf("学校编号:

%d学校总分:

%d男团总分:

%d女团总分:

%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore);

for(j=0;j

{

printf("项目编号:

%d所取名次数量:

%d\n",a[i].t[j].inum,a[i].t[j].top);

for(s=0;s<5;s++)

{

if(a[i].t[j].range[s]!

=0)

printf("名次:

%d分数:

%d\n",a[i].t[j].range[s],a[i].t[j].mark[s]);

}

}

printf("\n");

}

printf("\n");

printf("统计完毕!

返回1是2否");/*返回菜单*/

scanf("%d",&q);

printf("\n");

if(q!

=1)

printf("统计已经结束!

");

printf("\n");

menu(n,m,w);

}

voidsortput(intn,intm,intw)/*3.排序输出*/

{

readfromfile();

intc,i,j,k,q=0;

inttemp[N];

printf("\t**************排序输出系统**************\n\n");

printf("\t\t****1.按学校编号输出****\n");

printf("\t\t****2.按学校总分输出****\n");

printf("\t\t****3.按男团总分输出****\n");

printf("\t\t****4.按女团总分输出****\n");

printf("=======================================================\n\n");

do

{

printf("请选择要实现功能的编号(1--4):

");

scanf("%d",&c);

switch(c)

{

case1:

for(i=0;i

temp[i]=i;

for(i=0;i

{

for(j=i+1;j

if(a[temp[i]].snum>a[j].snum)

{

k=temp[i];

temp[i]=temp[j];

temp[j]=k;

}

}/*用冒泡排序方法排序*/

for(i=0;i

{

printf("学校编号:

%d学校总分:

%d男团总分:

%d女团总分:

%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);

}/*按学校编号输出*/

break;

case2:

for(i=0;i

temp[i]=i;

for(i=0;i

{

for(j=i+1;j

if(a[temp[i]].score

{

k=temp[i];

temp[i]=temp[j];

temp[j]=k;

}

}/*用冒泡排序方法排序*/

for(i=0;i

{

printf("学校编号:

%d学校总分:

%d男团总分:

%d女团总分:

%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);

}/*按学校总分输出*/

break;

case3:

for(i=0;i

temp[i]=i;

for(i=0;i

{

for(j=i+1;j

if(a[temp[i]].mscore

{

k=temp[i];

temp[i]=temp[j];

temp[j]=k;

}

}/*用冒泡排序方法排序*/

for(i=0;i

{

printf("学校编号:

%d学校总分:

%d男团总分:

%d女团总分:

%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);

}/*按男团总分输出*/

break;

case4:

for(i=0;i

temp[i]=i;

for(i=0;i

{

for(j=i+1;j

if(a[temp[i]].wscore

{

k=temp[i];

temp[i]=temp[j];

temp[j]=k;

}

}/*用冒泡排序方法排序*/

for(i=0;i

{

printf("学校编号:

%d学校总分:

%d男团总分:

%d女团总分:

%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);

}/*按女团总分输出*/

break;

default:

printf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1