运动会分数统计系统数据结构课程设计论文修改版11.docx

上传人:b****6 文档编号:16737023 上传时间:2023-07-16 格式:DOCX 页数:33 大小:161.94KB
下载 相关 举报
运动会分数统计系统数据结构课程设计论文修改版11.docx_第1页
第1页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第2页
第2页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第3页
第3页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第4页
第4页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第5页
第5页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第6页
第6页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第7页
第7页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第8页
第8页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第9页
第9页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第10页
第10页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第11页
第11页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第12页
第12页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第13页
第13页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第14页
第14页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第15页
第15页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第16页
第16页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第17页
第17页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第18页
第18页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第19页
第19页 / 共33页
运动会分数统计系统数据结构课程设计论文修改版11.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

运动会分数统计系统数据结构课程设计论文修改版11.docx

《运动会分数统计系统数据结构课程设计论文修改版11.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统数据结构课程设计论文修改版11.docx(33页珍藏版)》请在冰点文库上搜索。

运动会分数统计系统数据结构课程设计论文修改版11.docx

运动会分数统计系统数据结构课程设计论文修改版11

湖南商学院

课程设计(实习)报告

题目运动会比赛计分系统

 

姓名:

谭斌

学号:

100910062

专业:

电子信息工程

班级:

电信1002班

指导老师:

梁英

组员:

田驰

颜伟

 

计算机与电子工程学院

2011年8月

目录

1概述1

1.1设计目的1

1.2课程设计内容1

1.3相关知识2

2系统设计3

2.1系统功能要求3

2.2.1主函数3

2.2.2数组4

2.2.3文件的储存5

2.3程序流程图5

3调试与运行7

3.1调试结果7

3.1.1首先运行文件运动会统计分数7.exe7

3.1.2输入信息8

3.1.3输出信息8

3.1.4查询信息11

3.1.5调用信息11

3.2调试过程中出现的问题和处理方式11

4总结12

4.1调试中所遇到的较重要问题的回顾12

4.1.1提出问题12

4.1.2解决问题12

4.1.3提出问题12

4.1.4分析问题12

4.1.5解决问题12

4.1.6提出问题13

4.1.7分析问题13

4.1.8解决问题13

4.2算法的效率及改进设想13

5心得体会14

附115

附226

附327

附428

附529

参考文献30

一、概述

1.1设计目的

《数据结构》主要介绍一些最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。

数据结构是介于数学、计算机软件和计算机硬件之间的一门计算机专业的核心课程,它是计算机程序设计、数据库、操作系统、编译原理及人工智能等的重要基础,广泛的应用于信息学、系统工程等各种领域。

数据结构课程设计是为数据结构课程独立开设的实践性教学环节。

数据结构课程设计对于巩固数据结构知识,加强学生的实际动手能力和提高学生综合素质是十分必要的。

课程设计的目的:

1)要求学生达到熟练掌握C语言的基本知识和技能。

2)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力。

3)提高程序设计和调试能力。

学生通过上机实习,验证自己设计的算法的正确性。

学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。

4)培养算法分析能力。

分析所设计算法的时间复杂度和空间复杂度,进一步提高程序设计水平。

5)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能。

1.2课程设计内容

问题描述:

参加运动会有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)查看参赛学校信息和比赛项目信息等。

界面要求:

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

1.3相关知识

1)链表的存储用法:

是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。

链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。

每个结点包括两个部分:

一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

2)文件与结构体存储:

结构体是一种复杂的数据类型,结构体类型的定义只是列出了该结构的组成情况,编译系统并未因此而分配存储空间,当定义了结构体类型的变量或数组后,编译系统才会分配存储空间

3)栈的出栈用法:

堆栈是RAM中划出的一片特殊存储区,用于临时存放一些重要数据(这些数据存放一会后是必须回到原位的),其中数据的位置由堆栈指针确定,而数据的存放和读取则由入栈指令和出栈指令控制,入出必须对应成对的使用才能使压入的数据正确的回到压入前的位置。

4)查找方法:

顺序查找是一种最基本和最简单的查找方法。

它的思路是,从表中的第一个元素开始,将给定的值与表中逐个元素的关键字进行比较,直到两者相符,查到所要找的元素为止。

否则就是表中没有要找的元素,查找不成功。

对于表中记录的关键字是无序的表,只能采用这种方法。

存储结构:

顺序存储方法:

它是把逻辑上相邻的结点存储在物理位置相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。

由此得到的存储表示称为顺序存储结构。

5)链接存储方法:

它不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系是由附加的指针字段表示的。

由此得到的存储表示称为链式存储结构。

索引存储方法:

除建立存储结点信息外,还建立附加的索引表来标识结点的地址。

散列存储方法:

就是根据结点的关键字直接计算出该结点的存储地址。

二、系统设计

2.1系统功能要求

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

这里需要用到栈的存储用法,链表的存储用法,结构存储。

2).能统计各学校总分

这里就应该采用文件与结构体存储,并处理好关系。

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

这里要用到的是栈的出栈用法,链表的用法,文件等。

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

而这里要用到的是文件,查找方法,存储结构这三大块。

2.2数据结构设计

2.2.1主函数

voidmain()

{

intchoice;

printf("\n╔===================★welcome★======================╗\n");

printf("\n******************运动会比赛计分系统*******************\n");

printf("\n★★★★★★Designby谭斌★★★★★★\n");

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

printf("********************2.输出比赛信息*********************\n");

printf("********************3.查询比赛信息*********************\n");

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

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

printf("请选择要实现步骤的编号:

\n\n");

scanf("%d",&choice);

switch(choice)

{

case1:

inputinformation();

writedata();

main();

case2:

output();

main();

case3:

inquiry();

main();

case4:

exit(0);

default:

exit(0);

}

}

2.2.2数组

typedefstruct

{

intitemnum;//项目编号

inttop;//取名次的数目

intrange[5];//名次

intmark[5];//分数

}itemnode;//定义项目结点的类型

typedefstruct

{

intschoolnum;//学校编号

intscore;//学校总分

intmscore;//男团体总分

intwscore;//女团体总分

itemnodec[m+w];//项目数组

}headnode;//定义头结点类型

headnodeh[n];//定义一个头结点数组

2.2.3文件的储存

voidwritedata()//把数据存储在文件中

{

FILE*report;

inti;

if((report=fopen("sportsdata.txt","w"))==null)

{

printf("不能打开文件\n");

exit

(1);

}

for(i=0;i

fwrite(&h[i],sizeof(headnode),1,report);

fclose(report);

}

 

2.3程序流程图

1)设计运动会的学校编号或名称、项目成绩、男女团体总分的数据存储系统设计图

(1)

2)查询团体总分程序设计图

(2)

3)总流程图

 

图(4)

 

3调试与运行

 

3.1调试结果

3.1.1首先运行文件运动会统计分数7.exe

3.1.2输入信息

程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。

输入1得到进入输入信息模块。

按回车键可得到学校的得分信息和按编号获得的所以信息。

3.1.3输出信息

输入2进入输出信息模块,该模块分四项:

(1)按学校编号输出:

(2)按学校总分输出:

(3)按男团总分输出:

(4)按女团总分输出:

(5)输入2返回输出信息模块,输入0返回主菜单。

3.1.4查询信息

见商景阳论文

3.1.5调用信息

输入4时显示出所有的信息:

3.2调试过程中出现的问题和处理方式

为了使系统具有一点的容错性,当输入错误信息时应给出相应提示以正确输入数据,如:

printf("要查询的项目编号:

");

scanf("%d",&s);

if(s>m+w||s==0)

printf("此次运动会不包括这个项目.\n\n\n");

想在每次查询结束想返回主菜单进行其它项时,应在main()函数中调用其它函数时再调用main()函数,如:

switch(choice)

{

case1:

inputinformation();writedata();readdata();main();

case2:

output();main();

case3:

inquiry();main();

case4:

readdata();main();

程序出现语法错误,发现是输入名次信息的地方忘带地址符&,或是程序不完整,只写了一个大括号。

如:

printf("*****名次:

");

scanf("%d",&h[i].c[j].range[s]);

 

附录五:

总结

4.1调试中所遇到的较重要问题的回顾

4.1.1提出问题

所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是换屏的,可是在这里就是无法实现。

4.1.2解决问题

输入clrscr();

4.1.3提出问题

设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退出系统。

4.1.4分析问题

在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。

4.1.5解决问题

修改case语句,添加default语句提示出错,要求重新输入;

default:

{

clrscr();/*清屏*/

printf("输入错误,请重新选择");

}

4.1.6提出问题

当同一项目中有同一学校的两个人时,便不能正确输出或者输出相同人名。

4.1.7分析问题

由于同时有两个相同学校编号的人存在,系统在输出时,不能确定那个是正确的,或者用后来的覆盖以前的。

4.1.8解决问题

用for函数实现从开始到结尾的遍历。

4.2算法的效率及改进设想

算法的效率:

总的来讲,严重引响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。

改进设想:

因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。

在这次上机过程中遇到过一些问题,但经过我们不懈努力,解决了部分,还有的现在不能解决,留着我们日后思考和解决。

比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择法排序。

结构体的运用上感觉不是很熟悉,遇到结构体的时候很陌生,这是以后必须要加强的。

在我们的这个程序中用了两个结构体:

structnode

{

intnum;

};

structnode*f[22];

我们同样遇到了一些还不能很好解决的问题,在输出的时候不能得到我们想要的效果,在按学校编号排序查询输出的时候,发生了重叠在做了几次修改之后都能使之满意,这有待学习和修改。

在编写之前,做整体的规划很重要,这才能让我们的效率更高和合作得更好。

5心得体会

课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握计算机开发技术是十分重要的。

回顾起此次课程设计,至今我们仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍。

善于总结,也是学习能力的一种体现,每次完成一个编程任务,完成一段代码,都应当有目的的跟踪该程序的应用状况,随时总结,找到自己的不足,这样所编写的程序才能逐步提高.

 

源代码

#include

#include

#include

#include

#definen2//学校数目

#definem1//男子项目数目

#definew1//女子项目数目

#definenull0

typedefstruct

{

intitemnum;//项目编号

inttop;//取名次的数目

intrange[5];//名次

intmark[5];//分数

}itemnode;//定义项目结点的类型

typedefstruct

{

intschoolnum;//学校编号

intscore;//学校总分

intmscore;//男团体总分

intwscore;//女团体总分

itemnodec[m+w];//项目数组

}headnode;//定义头结点类型

headnodeh[n];//定义一个头结点数组

voidinputinformation()//输入信息,建立系统

{

inti,j,k,s;

for(i=0;i

{

h[i].score=0;

h[i].mscore=0;

h[i].wscore=0;

}//初始化头结点

for(i=0;i

{

printf("*****学校编号:

");

scanf("%d",&h[i].schoolnum);//输入头结点信息

for(j=0;j

{

printf("*****项目编号:

");

scanf("%d",&h[i].c[j].itemnum);

printf("*****取前3名or前5名:

");

scanf("%d",&h[i].c[j].top);

printf("*****获得几个名次:

");

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

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

h[i].c[j].range[s]=0,h[i].c[j].mark[s]=0;//初始化排名和分数

for(s=0;s

{

printf("*****名次:

");

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

if(h[i].c[j].top==3)

switch(h[i].c[j].range[s])

{

case0:

h[i].c[j].mark[s]=0;break;

case1:

h[i].c[j].mark[s]=5;break;

case2:

h[i].c[j].mark[s]=3;break;

case3:

h[i].c[j].mark[s]=2;break;

}

else

switch(h[i].c[j].range[s])

{

case0:

h[i].c[j].mark[s]=0;break;

case1:

h[i].c[j].mark[s]=7;break;

case2:

h[i].c[j].mark[s]=5;break;

case3:

h[i].c[j].mark[s]=3;break;

case4:

h[i].c[j].mark[s]=2;break;

case5:

h[i].c[j].mark[s]=1;break;

}

h[i].score=h[i].score+h[i].c[j].mark[s];

//按取前三名还是取前五名分别记分

if(j<=m-1)

h[i].mscore=h[i].mscore+h[i].c[j].mark[s];

//是男子项目则记到男子分数里面去

else

h[i].wscore=h[i].wscore+h[i].c[j].mark[s];

//是女子项目则记到女子项目里面去

}

printf("\n");

}

}

}

voidoutput()//输出函数

{

intchoice,i,j,k;

intremember[n];

intsign;

do

{

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

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

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

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

printf("\n\n*******************请选择编号*************************\n\n:

");

scanf("%d",&choice);

switch(choice)

{

case1:

for(i=0;i

{

printf("\n\n*****学校编号:

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

printf("*****学校总分:

%d\n",h[i].score);

printf("*****男团总分:

%d\n",h[i].mscore);

printf("*****女团总分:

%d\n\n\n",h[i].wscore);

}//按编号顺序输出

break;

case2:

for(i=0;i

remember[i]=i;

for(i=0;i

{

for(j=i+1;j

if(h[remember[i]].score

k=remember[i];

remember[i]=remember[j],remember[j]=k;

}//用冒泡排序方法,用辅助数组记住头结点下标

for(i=0;i

{

printf("*****学校总分:

%d\n",h[remember[i]].score);

printf("*****男团总分:

%d\n",h[remember[i]].mscore);

printf("*****女团总分:

%d\n\n\n",h[remember[i]].wscore);

//按所记下标顺序输出

}//按学校总分输出

break;

case3:

for(i=0;i

remember[i]=i;

for(i=0;i

{

for(j=i+1;j

if(h[remember[i]].mscore

k=remember[i];remember[i]=remember[j];remember[j]=k;

}

for(i=0;i

{

printf("\n\n*****学校编号:

%d\n",h[remember[i]].schoolnum);

printf("*****学校总分:

%d\n",h[remember[i]].score);

printf("*****男团总分:

%d\n",h[remember[i]].mscore);

printf("*****女团总分:

%d\n\n\n",h[remember[i]].wscore);

}//按男团总分输出

break;

case4:

for(i=0;i

remember[i]=i;

for(i=0;i

{

for(j=i+1;j

if(h[remember[i]].wscore

k=remember[i];

remember[i]=remember[j];remember[j]=k;

}

for(i=0;i

{

printf("\n\n*****学校编号:

%d\n",h[remember[i]].schoolnum);

printf("*****学校总分:

%d\n",h[remember[i]].score);

printf("*****男团总分:

%d\n",h[remember[i]].mscore);

printf("*****女团总分:

%d\n\n\n",h[remember[i]].wscore);

}

break;//按女团总分输出

}

printf("请

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

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2