运动会分数统计系统 数据结构课程设计.docx
《运动会分数统计系统 数据结构课程设计.docx》由会员分享,可在线阅读,更多相关《运动会分数统计系统 数据结构课程设计.docx(10页珍藏版)》请在冰豆网上搜索。
运动会分数统计系统数据结构课程设计
课程设计说明书
(数据结构(C语言版))
班级:
姓名:
XXX
设计题目:
运动会分数统计系统
设计时间:
指导教师:
XXXXXX
评语:
_______________________________
________________________________________
________________________________________
________________________________________
________________________________________
评阅成绩:
评阅教师:
《数据结构(C语言版)》课程设计实验报告
运动会分数统计系统
一、题目与要求
(一)、运动会分数统计(限1人完成)
任务:
参加运动会有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)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
5)数据存入文件并能随时查询
6)规定:
输入数据形式和范围:
可以输入学校的名称,运动项目的名称
输出形式:
有中文提示,各学校分数为整形
界面要求:
有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:
学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
请在最后的上交资料中指明你用到的存储结构;测试数据:
要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
测试数据及测试结果请在上交的资料中写明;
(二)、功能模块
运动会分数统计系统
退出系统
成绩排名情况
信息修改
信息查询
输入比赛项目信息
输入参赛学校信息
修改项目信息
修改学校信息
按项目编号查询
按学校编号查询
按女团总分排序
按男团总分排序
按全体总分排序
按学校编号排序
(三)、课程设计目的
巩固和加深对数据存储结构理论知识及对设计算法的掌握,进一步掌握编程技巧和方法。
学会对函数实现的算法的设计,深入对数据存储结构的理解。
通过课程设计实践进一步加强自己独立分析和解决问题的能力,综合设计以及创新思维能力的培养,锻炼我们的实践能力和处理问题的能力。
二、概要设计
该程序设计的主要思想是通过建立结构体链表来存储输入的学校信息,运动项目信息,项目前三名或前五名的成绩信息。
根据建立的链表通过查找可查询学校按学校编号、全体总分、男团总分、女团总分排名及项目的相关信息。
各个独立的功能都是通过单独的程序来实现的。
最后后再运用文件来保存信息。
结构体定义及部分主要的函数和功能如下:
typedefstructsport//运动项目结构
{charsp_name[20];//运动项目名称
intsp_isboy;//0为女项目,1为男项目
intsp_is35;//0为取前三名,1为取前五名
intsp_number;//项目编号
intsp_first;//第一名学校编号
intsp_second;//第二名学校编号
intsp_third;//第三名学校编号
intsp_fourth;/第四名学校编号
intsp_fifth;//第五名学校编号
sport*next;
}sport;
typedefstructschool//学校结构
{charsc_name[20];//学校名称
intsc_number;//学校编号
intsc_boy;//男子团体总分
intsc_girl;//女子团体总分
school*next;
}school;
voidsp_creat();//添加项目信息
voidsc_creat(school*temp);//建立学校链
intsc_getlong();//得到链表长度
voidsc_change(intN);//学校信息修改函数
voidsp_change(intM);//修改项目信息
intsc_check(inta);//检验学校是否存在
voidsc_addmark(inta,intb,intc);//a为分数,b为学校编号,c=1表示男,c=0表示女
voidsp_output();//输出项目的情况
voidsc_show(inta);//输出该项目所有学校排名情况
voidsc_num();//输出学校按编号排序
voidsc_compositor(inttype);//type=0按总分,type=1按男总分,type=2按女总分,
voidsc_search(inta);//按编号搜索学校
voidsp_search(inta);//按项目搜索
voidsc_write();//将学校数据写入文本
voidsc_read();//从文本读入学校数据
voidsp_write();//将项目数据写入文本文档
voidsp_read();//从文本读取项目数据
voidmain()//主函数
三、算法设计分析
本程序采用的核心就是单链表,整个程序通过建立链表,将信息存入链表,通过查找链表输出相关信息,插入链表存信息等。
再建链表时首先要建立头结点,然后再一次建立新结点存储要存的信息。
在查找时先找头结点,然后再跟据条件利用指针对每个结点依次查找找出需要的信息。
在插入,查询,修改成绩,输出成绩等时都首先需要对链表进行查找,然后才得出信息。
最后运用一个文件,使得在查询时更方便快捷的找到需要的信息。
在建立信息库时要先将数据写入文本进行存盘,之后能从文本中读取信息。
下面只画了部分功能的实现的算法分析的N-S流程图
(一)、建立结构体链表建立学校信息的算法N-S流程图
定义指针和和编号
建立带头结点的空链表
判断(mark!
=1)
成立不成立
输入学校名称
判断q是否为空
YESNO
判断学校名称是否重复
YESNO
继续
重新输入学校名称继续
q=q->next;
输入学校编号
while(sc_check(c)==1||c<=0||c>20)
YESNO
继续重新输入编号
p->sc_number=c;p->sc_boy=0;
p->sc_girl=0;p->next=Head1->next;
Head1->next=p;
结束程序
(二)、添加运动项目信息的算法的N-S流程图
定义函数建立链表
if(sc_getlong()>=3)
YESNO
输入项目名称
while(mark!
=1)
YESNO
输入项目编号
while(c<=0||c>20||sp_check(c)==1)
YESNO
重新输入项目编号继续
mark=1;q->sp_number=c
mark=0;
while(mark!
=1)
YESNO
判断项目类型
if(c==0||c==1)
YESNO
记录类型提示数据错误
mark=0;
while(mark!
=1)
YESNO
输入项目名次情况
if(sc_getlong()<5)
YESNO
mark=1;提示数
q->sp_is35=0据错误
mark=0;
while(mark!
=1)
YESNO
输入第一名的学校编号
if(c<=0||c>20)
YESNO
提示数据错误if(!
sc_check(c))
重新输入mark=1;q->sp_first=c
if(q->sp_is35==0)
YESNO
sc_addmarksc_addmar
(5,c,q->sp_isboy);(7,c,q->sp_isboy);
mark=0;
接上一图
依次次添加二至五名的成绩信息
成功添加一个项目信息
结束程序
(三)、通过定义项目指针和头结点搜索项目信息算法的N-S流程图
定义项目指针建头结点
while(p)
YESNO
if(p->sp_number==a)
YESNO
输出项目名
if(p->sp_isboy==1)
YESNO
男子项目女子项目
输出该项目的获奖情况
返回
p=p->next
结束程序
四、运行结果与调试分析
(一)、运行结果(部分截图)
1、系统启动时的界面;
2、选择菜单1,添加参赛学校信息;
3、添加后,显示学校的信息;
4、选择菜单项2,输入比赛项目信息及获奖学校编号;
5、成功添加信息后,主菜单选择3,进入排名情况查询子菜单查看排名情况,可分别按学校编号顺序、团体总分、男团总分、女团总分进行排序;(如图:
按男团总分排序)
6、返回主菜单后选择4,可以查询信息,可按学校编号查询,也可按项目编号查询;
7、在主菜单上选择5,进入信息修改子菜单,可对学校信息(如编号、校名)和项目信息进行修改(如编号、项目名称、项目的类别);
8、主菜单上选择菜单0,退出系统,并保存信息。
(二)调试分析
函数刚开始时首先建立学校和项目的结构体,使得程序拥有一个整体的框架。
方便整个程序的编写和使用者查询。
在检验学校是否存在时首先要先定义一个学校指针和链表的头结点,这样才能顺着链表的头结点依次检验学校是否存在。
在建学校链的函数时也首先的定义指针和链表的头结点,并且q=q->next存在,不然无法进行空链表的插入用于存储信息。
在进行学校信息的插入时必须有一定的条件判断。
例如while(mark!
=1),while(q),if(strcmp(q->sc_name,Sname)==0),while(sc_check(c)==1||c<=0||c>20)等,只有满足一定的条件才能进行某项循环。
避免发生益出,数据输入不合法等情况。
由于本函数涉及到链表的插入,需要找到每个学校所在链表的最后一个结点的地址,所以在程序的最后需要写上p->next=Head1->next;Head1->next=p;
在修改的函数中,由于要从建好的链表中修改,所以要涉及到链表的查询,因此也要先定义指针头结点。
在修改前先用if语句进行数据的判断,当数据满足条件并需要修改的情况下修改才有意义。
其实整个程序的编写围绕着链表来实行的,所以在编写时以定义指针和建立带头结点的链表,while和if语句进行循环,最后再来一个返回。
这是整个程序编写的框架。
所以要熟练准确的掌握while和if语句的运用,这样整个程序的功能就基本实现了。
五、总结与体会
通过这次的综合训练让我对所学的知识加深了印象,尤其是对算法有更深的认识。
对整个程序的设计,算法是非常重要的,设计程序的整体框架,就是利用算法进行设计,最后逐步完善各个函数的功能模块,同时对链表的存储结构也有了一定的认识。
这些都为以后的学习和实践,提高自身能力有很大的帮助,本次课设也锻炼我们的实践能力和提高了处理问题的能力,获益匪浅!