数据结构课程设计.docx
- 文档编号:29891203
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:33
- 大小:306.14KB
数据结构课程设计.docx
《数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计.docx(33页珍藏版)》请在冰豆网上搜索。
数据结构课程设计
摘要
本文详细介绍了运动会分数统计程序的设计与实现,该程序具有运动会成绩的输入,每个学校所参加的项目成绩的查询,修改,删除,统计操作以及学校成绩单和团体得分报表的输出等功能。
概要设计部分给出了程序功能说明,数据结构设计和函数变量说明。
详细设计和实现部分列出了系统功能模块、算法原理及流程图。
最后还给出了调试和操作说明。
在课程设计中,程序设计语言采用VisualC++,程序运行平台为Windows98/2000/XP。
对于运动会上获得名次的同学在存储其成绩的时候采用了链表的结构,有利于数据的存储与查找。
程序通过调试运行,实现了最初的设计目标,并且经过适当完善后,在实际中可以解决更多的问题。
关键词:
运动会分数统计;程序设计;C;链表
第一章概论
1.1运动会分数统计系统的背景
在信息技术已经深入人类工作生活的今天,计算机软件得到了广泛的应用,越来越多的政府和企业将其业务纳入计算机软件系统。
随着社会进步,体育事业的发展,为了提高运动会成绩统计的准确性,减少设计者们的工作量,开发了本系统。
1.2运动会分数统计系统的任务和目标
任务:
参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m;女子m+1……m+w。
不同的项目取前前三名积分;前三名的积分分别为:
5、3、2。
(m、w<=20,n<=10)。
输出形式:
中文提示,输出界面友好。
界面要求:
合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
目标:
1.可以输入各个项目的前三名或前五名的成绩;
2.能统计各学校总分;
3.可以按学校编号、学校总分、男女团体总分排序输出;
4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
规定:
输入数据形式和范围:
20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)。
第二章运动会分数统计系统的需求分析
2.1功能需求
运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:
比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。
2.2功能模块
根据分析整个系统主要划分为4个功能模块,分别执行要求中的功能。
该系统分为比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。
比赛成绩输出模块有四个子模块,分别是:
按学校编号输出模块、按学校总分输出模块、安南员总分输出模块和按女团总分输出模块;查询比赛成绩模块分为按学校编号查询模块河岸项目编号查询两个子模块。
(1)比赛成绩输入模块:
比赛成绩输入模块分为:
创建信息部分,该部分需输入学校编号,项目编号,取得的名次,以及哪些名次;算法部分,得到排序结果。
(2)比赛成绩输出模块:
将以输入的数据按照输出比赛菜单的选择输出相应的数据。
(3)查询比赛成绩模块:
按照查询比赛结果菜单和其查询方式子菜单查询要的数据。
(4)调用统计结果:
将输入的各学校运动会成绩排序输出。
功能模块图如图2.1所示:
图2.1功能模块图
2.3数据需求
需要输入学校编号,项目编号,取得的名次,以及哪些名次。
2.4性能需求
本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的时间内将运行结果稳定输出,需要系统达到安全性能好,可靠性高,稳定性强,处理数据迅速等特点。
第三章系统开发工具及关键技术
3.1系统开发工具
3.1.1Code:
:
Blocks
Code:
:
Blocks是一个开放源码的全功能的跨平C/C++集成开发环境。
Code:
:
Blocks是开放源码软件。
Code:
:
Blocks由纯粹的C++语言开发完成,它使用了蓍名的图形界面库wxWidgets(2.6.2unicode)版。
对于追求完美的C++程序员,不必忍受Eclipse的缓慢,也不必忍受VS.NET的庞大和高昂的价格。
3.2关键技术
3.2.1C语言
C语言是一种计算机程序设计语言,它既具有高级语言的特点,又具有汇编语言的特点。
它由美国贝尔研究所的D.M.Ritchie于1972年推出。
1978后,C语言已先后被移植到大、中、小及微型机上。
它可以作为工作系统设计语言,编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。
它的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件,三维,二维图形和动画。
具体应用比如单片机以及嵌入式系统开发。
3.2.2数组
数组是在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。
这些按序排列的同类数据元素的集合称为数组。
在C语言中,数组属于构造数据类型。
一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。
因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
3.2.3链表
链表(Linkedlist)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。
不必须按顺序存储,链表在插入的时候可以达到O
(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O
(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。
但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
链表可以在多种编程语言中实现。
像Lisp和Scheme这样的语言的内建数据类型中就包含了链表的存取和操作。
程序语言或面向对象语言,如C/C++和Java依靠易变工具来生成链表。
3.3系统子程序及功能设计
(1)、本系统共设置个6子程序,各子程序的函数名及功能说明如下。
a.LinkListcreatLink()//创建链表(录入各项目的成)。
b.intschoolScore(LinkListL)//统计各学校总分。
c.voidprintfSchoolNumber()//按学校编号顺序输出。
d.voidprintfSchoolScore()//按学校总分顺序输出。
e.voidprintfManWomanScore(LinkListL)//按男女团体总分排序输出。
f.voidprintfSchoolObject(LinkListL)//按学校编号查询学校某项目情况。
g.voidprintfObjectSchool(LinkListL)//按项目编号查询取得前三名或前五名的
学校。
h.intmain()//主函数。
第四章运动会分数统计系统的实现
4.1数据结构设计
学校的存储结构为链表,
其中
school类为:
classschool:
publicathlete/*学校*/
{……
public:
intitem;/*学校获奖数*/
intschool;/*学校编号*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
intscore;/*学校总分*/
athleteath[MaxSize];/*获奖运动员信息数组,包括分数,名次,项目*/
school*prev;//前指针
school*next;//后指针
}
其中部分主要的函数:
添加操作add(school*&head)
查询操作checkFunc(school*head,int&n)
文件保存save(school*head)
总分快速排序tquicksort(vector
总分基数排序tbaseSort(vector
4.2结构体定义
typedefstructnode1{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该学校获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct{
intschool;/*学校编号*/
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct{
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
4.3系统界面的实现
4.3.1主菜单窗口
此为运动会分数统计系统代码运行后的初始窗体
图4.1
4.3.2.输入各个项目成绩并存储文件
请选择(0~8):
1进入输入各个项目成绩并存储文件
图4.2
1.输入男子项目总数m;12.输入男子项目总数m;13.输入参加运动会的学校总数3
图4.3
输入项目:
1请选择1(1.前三名2.前五名)
第3名:
学校<学校编号为数字>3
第2名:
学校<学校编号为数字>2
第1名:
学校<学校编号为数字>1
项目:
2请选择1(1.前三名2.前五名)
第3名:
学校<学校编号为数字>1
第2名:
学校<学校编号为数字>2
第1名:
学校<学校编号为数字>3
项目:
3请选择1(1.前三名2.前五名)
第3名:
学校<学校编号为数字>1
第2名:
学校<学校编号为数字>3
第1名:
学校<学校编号为数字>2
图4.4
然后输入项目:
0返回到菜单主页面
图4.5
4.3.3.统计各学校总分
请选择(0~8):
2进入统计各学校总分
图4.6
4.3.4按学校编号排序输出
按任意键继续返回到菜单主界面请选择(0~8):
3
图4.7
4.3.5.按学校总分排序输出
按任意键继续返回到菜单主界面请选择(0~8):
4
图4.8
4.3.6.按男团体总分排序输出
按任意键继续返回到菜单主界面请选择(0~8):
5
图4.9
4.3.7.按女团体总分排序输出
按任意键继续返回到菜单主界面请选择(0~8):
6
图4.10
4.3.8.按学校编号查询学校某个项目情
按任意键继续返回到菜单主界面请选择(0~8):
7
图4.11
4.3.9.按项目编号查询取得名次的学校
按任意键继续返回到菜单主界面请选择(0~8):
8
图4.12
结束语
经过此次的课程设计,可以明确的了解到自己哪些知识点掌握的比较好,哪些知识点运用的还不够熟练。
通过此次课程设计也学会综合运用理论知识来分析和解决实际问题的能力、养成严谨的科学态度和良好的程序设计习惯,实现由知识向智能的初步转化;学会遵循软件开发过程的基本规范,运用结构化程序设计的方法,按照课程设计的题目要求,并与同组成员共同完成设计、编写、调试和测试应用程序及编写文档的任务。
本设计的完成是在我们的导师王礼云老师的细心指导下进行的。
在每次设计遇到问题时老师不辞辛苦的讲解才使得我的设计顺利的进行。
从设计的选题到资料的搜集直至最后设计的修改的整个过程中,花费了王老师很多的宝贵时间和精力,在此向导师表示衷心地感谢!
导师严谨的治学态度,开拓进取的精神和高度的责任心都将使学生受益终生!
还要感谢帮助我的几位同学,是你们在我平时设计中和我一起探讨问题,并指出我设计上的误区,使我能及时的发现问题把设计顺利的进行下去,没有你们的帮助我不可能这样顺利地结稿,在此表示深深的谢意。
参考文献
[1]郭翠英.C语言课程设计案例精编[M].北京:
中国水利水电出版社.2011.3
[2]谭浩强.C语言程序设计[M].北京:
清华大学出版社.2014.12
[3]张翔.C语言函数大全.[M].北京:
清华大学出版社.2013.4
[4]严蔚敏,吴伟民.数据结构(C语言版)[M].北京:
清华大学出版社.2013.4
[5]陈天洲.C语言高级程序设计.[M].北京:
人民邮电出版社.2010.4
[6]杨旭.C语言程序设计案例教程.[M].北京:
人民邮电出版社.2011.6
[7]王为青.C语言高级编程及实例剖析.北京:
人民邮电出版社.2014.02
[8]徐慧.《C语言实例解析精粹》.北京:
人民邮电出版社.2010.04
[9]姚大鹏,栾好利,张翼英,等编著.C语言程序设计教程习题与上机实训指导.[M].中国水利水电出版社.2011.5
[10]王为青.C语言实例解析.[M].北京:
人民邮电出版社.2014.02
附录
详细代码:
#include
#include
#include
#include
//#include
#defineMAX50
//#defineNULL0
typedefstructnode1{
intschool;/*学校编号*/
intrecord;/*项目成绩*/
structnode1*next;/*链域*/
}Schools;
typedefstruct{
intitem;/*项目编号*/
Schools*firstschool;/*链域指向链表中第一个结点*/
}ITEM;
typedefstruct{
intz;/*项目总数*/
ITEMa[MAX];
}ALLitems;
typedefstructnode2{
intitem;/*该学校获奖的项目*/
intrecord;/*项目成绩*/
structnode2*next;/*链域*/
}Items;
typedefstruct{
intschool;/*学校编号*/
intscore;/*学校总分*/
intboys;/*男团体总分*/
intgirls;/*女团体总分*/
Items*firstitem;/*链域指向链表中第一个获奖项目的结点*/
}SCHNode;
typedefstruct{
intn;/*学校总数*/
SCHNodeb[MAX];
}ALLNode;
ALLitems*g1;
ALLNode*g2;
voidfunct1(ALLitems*g1,ALLNode*g2)
{
Schools*p1;
Items*p2;
inti,j,k,m,w,h,x;
p1=(Schools*)malloc(sizeof(Schools));
p2=(Items*)malloc(sizeof(Items));
if(!
p1||!
p2)
exit
(1);
printf("\n******输入各个项目信息******\n\n");
printf("输入男子项目总数m:
");
scanf("%d",&m);
if(m<0||m>20)
{
printf("输入有误,m是20以内的整数,请重新输入:
");
scanf("%d",&m);
}
printf("输入女子项目总数w:
");
scanf("%d",&w);
if(w<0||w>20)
{
printf("输入有误,w是20以内的整数,请重新输入:
");
scanf("%d",&w);
}
printf("输入参加运动会的学校总数n:
");
scanf("%d",&g2->n);
if(g2->n<0||g2->n>20)
{
printf("输入有误,n是20以内的整数,请重新输入:
");
scanf("%d",&g2->n);
}
g1->z=m+w;
printf("则项目编号为男子1-%d,女子%d-%d",m,m+1,g1->z);
printf("\n\n****记录运动会成绩****");
printf("\n\n(输入0标志结束)\n");
for(k=1;k<=g1->z;k++)
{
g1->a[k].item=k;
g1->a[k].firstschool=NULL;
}
for(k=1;k<=g2->n;k++)
{
g2->b[k].school=k;
g2->b[k].firstitem=0;
g2->b[k].score=0;
g2->b[k].boys=0;
g2->b[k].girls=0;
}
g2->b[0].score=0;
g2->b[0].boys=0;
g2->b[0].girls=0;
while(i!
=0)
{
printf("\n项目:
");
scanf("%d",&i);
if(i!
=0)
{
printf("1.前三名2.前五名\n");
printf("请选择:
");
scanf("%d",&j);
if(j!
=1&&j!
=2)
{
printf("输入有误,请重新选择:
");
scanf("%d",&j);
}
if(j==1)
{
h=3;
do{printf("第%d名:
学校(学校编号为数字)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==3)p2->record=p1->record=2;
if(h==2)p2->record=p1->record=3;
if(h==1)p2->record=p1->record=5;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
if(j==2)
{
h=5;
do{
printf("第%d名:
学校(学校编号为数字)",h);
scanf("%d",&x);
p1=(Schools*)malloc(sizeof(Schools));
p1->school=x;
p2=(Items*)malloc(sizeof(Items));
p2->item=i;
if(h==5)p2->record=p1->record=1;
if(h==4)p2->record=p1->record=2;
if(h==3)p2->record=p1->record=3;
if(h==2)p2->record=p1->record=5;
if(h==1)p2->record=p1->record=7;
p1->next=g1->a[i].firstschool;
g1->a[i].firstschool=p1;
p2->next=g2->b[x].firstitem;
g2->b[x].firstitem=p2;
g2->b[x].score=g2->b[x].score+p2->record;/*累计总分*/
if(i<=m)g2->b[x].boys=g2->b[x].boys+p2->record;/*累计男团体总分*/
elseg2->b[x].girls=g2->b[x].girls+p2->record;/*累计女团体总分*/
h--;
}while(x!
=0&&h!
=0);
}
}
}
}
voidsave()
{
FILE*fp1,*fp2;
fp1=(FILE*)malloc(sizeof(FILE));
fp2=(FILE*)malloc(sizeof(FILE));
if((fp1=fopen("sports1","wb"))==NULL)
{
printf("cannotopenfile.\n");
return;
}
if(fwrite(g1,sizeof(ALLitems),1,fp1)!
=1)
printf("filewriteerror.\n");
fclose(fp1);
if((fp2=fopen("sports2","wb"))==NULL)
{printf("cannotopenfile.\n");
return;
}
if(fwrite(g2,sizeof(ALLNode),1,fp2)!
=1)
printf("filewriteerror.\n");
fclose(fp2);
}
voidfunct2(ALLNode*g2)/*输出各学校总分*/
{
intk;
printf("\n\n******输出各学校总分******\n");
printf("学校编号\t总分\n");
for(k=1;k<=g2->n;k++)
printf("%d\t\t\t%d\n",k,g2->b[k].score);
printf("\n"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计