运动会分数统计课程设计.doc

上传人:laozhun 文档编号:2543693 上传时间:2023-02-20 格式:DOC 页数:32 大小:1.29MB
返回 下载 相关 举报
运动会分数统计课程设计.doc_第1页
第1页 / 共32页
运动会分数统计课程设计.doc_第2页
第2页 / 共32页
运动会分数统计课程设计.doc_第3页
第3页 / 共32页
运动会分数统计课程设计.doc_第4页
第4页 / 共32页
运动会分数统计课程设计.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

《运动会分数统计课程设计.doc》由会员分享,可在线阅读,更多相关《运动会分数统计课程设计.doc(32页珍藏版)》请在三一办公上搜索。

1、课 程 设 计 报 告 课程名称 数据结构设计题目 运动会分数统计专 业 计算机科学与技术班 级 学 号 姓 名 完成日期 _2012年6月8日_课 程 设 计 任 务 书设计题目: 运动会分数统计系统设计内容与要求:【设计内容】参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定(m=20,n=20)。【基本要求】1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以

2、按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。5) 数据存入文件并能随时查询 6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 指导教师:_ 2012年 6月 8日课 程 设 计 评 语 成绩: 指导教师:_ 2012年 6月8日目录1、问题描述12、基本要求1(1)、数据要求1(2)、操作要求1(3)、测试数据要求1(4)、界面要求1(5)、存储结构要求13、数据结

3、构1(1)、定义运动项目数据类型1(2)、定义学校数据类型24、总体设计25、详细设计4(1)、信息输入及分数统计功能4(2)、信息排序输出功能5(3)、信息查询功能6(4)、信息保存及读取66、测试与调试71、输出界面7(1)、输入信息8(2)、输出各个学校总分信息9(3)、信息排序10(4)、查询信息12(5)、调用信息14(6)退出系统153、调试分析15存在问题的思考及算法的改进设想:164、设计总结167、源程序清单16源代码:171、问题描述任务:参加运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1m,女子m+1m+w。不同的项目取前五名或前

4、三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m=20,n=20),按要求实现相应的数据输入、查询、计分等功能。2、基本要求(1)、数据要求1) 建议输入学校的名称,运动项目的名称等,其余信息学生自行设计;2) 输出形式:有合理的提示,各学校分数为整形;3) 数据的存储结构自行设计。4) 建议运动会的相关数据要存储在数据文件中。(2)、操作要求1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分,3) 可以按学校编号或名称、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以

5、按项目编号查询取得前三或前五名的学校。5) 数据存入文件并能随时查询 6) 规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。(3)、测试数据要求测试数据要求使用:1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。(4)、界面要求有合理的提示,每个功能可以设立菜单,根据提示,能完成相关的功能操作并符合要求。(5)、存储结构要求学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等

6、相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构。3、数据结构(1)、定义运动项目数据类型定义运动项目数据类型邻接表,用于存放运动项目的信息,包括运动项目总数、运动项目名称、运动项目编号及在每个运动项目中取得名次的学校编号、学校名字、运动项目成绩。typedef struct SchoolNode int school; /学校编号char s_nameMAX; /学校名字int record; /项目成绩struct SchoolNode *next; /链域SchoolNode;typedef struct int item; /项目编号char ite

7、m_nameMAX; /项目名字SchoolNode *firstschool; /链域指向链表中第一个结点Item;typedef struct int item_num; /项目总数Item itemMAX;AllItems;(2)、定义学校数据类型定义学校数据类型邻接表,用于存放参赛学校的信息,包括学校总数、学校名称、学校编号、学校总分、男子团体总分、女子团体总分以及每个学校获奖的运动项目编号、运动项目名称、取得的成绩。typedef struct ItemNode int item; /该学校获奖的项目编号char i_nameMAX; /项目名字int record; /项目成绩st

8、ruct ItemNode *next; /链域ItemNode;typedef struct int school; /学校编号char school_nameMAX; /学校名字int shool_score; /学校总分int boys_score; /男团体总分int girl_score; /女团体总分ItemNode *firstitem; /链域指向链表中第一个获奖项目的结点 SCHNode;typedef struct int school_num; /学校总数 SCHNode schoolMAX;AllSchool;4、总体设计根据运动会分数统计系统的问题分析及设计要求,可以

9、将此系统分为四个模块:信息统计模块、信息排序输出模块、信息查询模块、信息调用模块。(1)、信息统计模块实现信息的输入、统计,涉及函数有:void InputInfo()、(2)、信息输出模块实现信息的输出,涉及函数有:int Menu_Select_Tow()、Sort_Schoolnum()、Sort_SchoolScore()、Sort_ManScore()、Sort_WomanScore()。(3)、信息查询模块实现信息的查询,涉及函数有:FindInfo_SchoolNum()、FindInfo_SchoolNum()、int Menu_Select_Three()。(4)、信息调用模

10、块实现信息的调用,即从文件中读出信息并输出、保存信息,涉及函数有:void save()、void ReadInfo()。主函数与各函数调用关系流程图、结构图:开始总分显示菜单界面按学校名称输出按学校总分输出按男团总分输出按女团总分输出退出返回主菜单主菜单输入功能序号信息统计模块信息输出模块信息查询模块信息调用模块运动会分数统计系统按学校编号排序信息输入分数统计按学校总分排序按男团体总分排序按女团体总分排序按学校编号查询按项目编号查询信息保存信息读取 信息排序输出模块流程图 开始信息查询界面选择查询方式按学校编号查询按项目编号查询退出返回主菜单主菜单 信息查询模块流程图5、详细设计(1)、信息

11、输入及分数统计功能void InputInfo()、void Item_Score()、void InitList()是信息输入、分数统计的函数、邻接表初始化,在输入信息的同时进行分数统计,可以输入各学校各项目前3名或前5名的成绩。结果取前3名还是前5名由用户自己定。用if(j=1)语句将前3名的成绩赋值为5、3、2,if(j=2)前5名的成绩赋值为7、5、3、2、1,未取得的成绩则赋为0。并统计总分、男子团体总分和女子团体总分。其主要功能流程图如下: 开 始输入m、w、nw/m20YNInitList(AS,AI)Item_Score(AI,AS,m)结 束(2)、信息排序输出功能int M

12、enu_Select_Tow()、Sort_Schoolnum()、Sort_SchoolScore()、Sort_ManScore()、Sort_WomanScore()是排序输出菜单函数及四种排序输出函数。输出一个总分显示菜单,利用switch语句实现按学校名称输出或按学校总分、男子团体总分、女子团体总分由低到高输出。采用冒泡排序和直接插入排序的方法使之按总分由低到高输出。其主要功能流程图如下:开 始for(i = 2;ischool_num;i+)while (as-school0.shool_score schoolj.shool_score & j 0)NY交换数据N输 出结 束(3

13、)、信息查询功能FindInfo_SchoolNum()、FindInfo_SchoolNum()、int Menu_Select_Three()函数是两个信息查询函数及查询菜单函数,显示一个查询菜单,利用switch语句实现按学校编号查询和按项目编号查询,并输出该学校某个项目的情况或某个项目取得前3名或前5名的学校信息。利用循环语句dowhile()返回查询菜单,break语句终止循环。其主要功能代码如下:开 始输入查询的学校编号学校是否存在NY输入查询的项目编号项目是否存在NY提示未找到NY输出信息循环查找结 束(4)、信息保存及读取 void save()、void ReadInfo()

14、这两个函数分别实现信息保存到文件以及从文件中读取信息的功能。把信息保存到文件中以及读取保存在文件里的信息并输出。由于采用的是链式存储,可以很方便的一下把文件里的信息全部读取出来,再依次创建生成邻接表,将信息全部读到两个邻接表中存储。其主要功能流程图如下:开 始创建文件Y数据写入文件关闭文件结 束6、测试与调试1、输出界面运行程序,先输入密码,进入主菜单界面,用户可以选择输入各个项目成绩及信息、显示各学校总分、信息排序、信息查询、保存信息到文件、从文件中读入信息、退出系统等操作选项。注意:第一次运行本程序时,请选择输入各个项目成绩及信息。以后再运行时,为了避免再次输入大量信息,可以先选择从文件中

15、读入信息,将以前输入的信息重新显示在屏幕上,再进行后续操作。主菜单界面如图所示:(1)、输入信息选择1号功能进入输入信息模块,根据提示信息将以下信息输入系统中。 请输入男子项目总数m:3 请输入女子项目总数w:2请输入参加运动会的学校总数n:6项目编号:1 项目名字:basketball 取前3名 请输入第3名的学校编号:4 请输入第3名的学校名字:heda请输入第2名的学校编号:6 请输入第2名的学校名字:litcs 请输入第1名的学校编号:1请输入第1名的学校名字:qinghua 项目编号:2 项目名字:football 取前5名 请输入第5名的学校编号:4 请输入第5名的学校名字:hed

16、a请输入第4名的学校编号:3 请输入第4名的学校名字:zhengda 请输入第3名的学校编号:2请输入第3名的学校名字:beida请输入第2名的学校编号:1请输入第2名的学校名字:qinghua请输入第1名的学校编号:6请输入第1名的学校名字:litcs 项目编号:3项目名字:manyumaoqiu 取前3名 请输入第3名的学校编号:5 请输入第3名的学校名字:hekeda请输入第2名的学校编号:2 请输入第2名的学校名字:beida 请输入第1名的学校编号:1请输入第1名的学校名字:qinghua项目编号:4 项目名字:pingpangqiu 取前5名 请输入第5名的学校编号:4 请输入第5

17、名的学校名字:heda请输入第4名的学校编号:5 请输入第4名的学校名字:hekeda 请输入第3名的学校编号:2请输入第3名的学校名字:beida请输入第2名的学校编号:1请输入第2名的学校名字:qinghua请输入第1名的学校编号:6请输入第1名的学校名字:litcs项目编号:5项目名字:womanyumaoqiu 取前3名 请输入第3名的学校编号:5 请输入第3名的学校名字:hekeda请输入第2名的学校编号:3 请输入第2名的学校名字:zhengda 请输入第1名的学校编号:6请输入第1名的学校名字:litcs。输入信息如图所示:(2)、输出各个学校总分信息输入2进入总分显示菜单界面。

18、各个学校总得分如下图显示所示:(3)、信息排序输入3进入信息排序菜单界面。用户可根据自己喜好选择学校编号排序输出、按学校总分排序输出、按男团总分排序输出、女团总分排序输出、返回主菜单。信息排序菜单界面如图所示:按学校编号输出:按学校总分排序输出:按学校男团体总分排序输出:按学校女团体总分排序输出:(4)、查询信息 输入4进入信息查询界面,用户可根据自己喜好选择按学校编号查询、按项目编号查询或者退出返回主菜单。信息查询界面如图所示:用户可根据自己喜好选择按哪种方式查询,查询结束后,按任意键返回信息查询界面。输入0则返回主菜单。以下是分别按照学校编号、项目编号查询的情况。按学校编号查询学校某个项目

19、情况:按项目编号查询取得名次的学校:(5)、调用信息为了避免每次运行程序时都要输入大量数据,在第一次运行程序后,就已经将信息自动存档,再次运行时,可以先直接调用信息,按任意键返回主菜单,再进行后续操作。调用的信息如图所示:显示文件中读取的信息如图所示:(6)退出系统输入0则退出系统,并有中文提示。如图所示:3、调试分析运行程序,进入主菜单界面,用户可以选择输入信息、输出信息、查询信息、调用信息、关于或退出系统。测试数据:选择1号功能进入输入信息模块,根据提示信息将以下信息输入系统中。 请输入男子项目总数m:3 请输入女子项目总数w:2请输入参加运动会的学校总数n:6项目编号:1 项目名字:ba

20、sketball 取前3名 请输入第3名的学校编号:4 请输入第3名的学校名字:heda请输入第2名的学校编号:6 请输入第2名的学校名字:litcs 请输入第1名的学校编号:1请输入第1名的学校名字:qinghua 项目编号:2 项目名字:football 取前5名 请输入第5名的学校编号:4 请输入第5名的学校名字:heda请输入第4名的学校编号:3 请输入第4名的学校名字:zhengda 请输入第3名的学校编号:2请输入第3名的学校名字:beida请输入第2名的学校编号:1请输入第2名的学校名字:qinghua请输入第1名的学校编号:6请输入第1名的学校名字:litcs 项目编号:3项目

21、名字:manyumaoqiu 取前3名 请输入第3名的学校编号:5 请输入第3名的学校名字:hekeda请输入第2名的学校编号:2 请输入第2名的学校名字:beida 请输入第1名的学校编号:1请输入第1名的学校名字:qinghua项目编号:4 项目名字:pingpangqiu 取前5名 请输入第5名的学校编号:4 请输入第5名的学校名字:heda请输入第4名的学校编号:5 请输入第4名的学校名字:hekeda 请输入第3名的学校编号:2请输入第3名的学校名字:beida请输入第2名的学校编号:1请输入第2名的学校名字:qinghua请输入第1名的学校编号:6请输入第1名的学校名字:litcs

22、项目编号:5项目名字:womanyumaoqiu 取前3名 请输入第3名的学校编号:5 请输入第3名的学校名字:hekeda请输入第2名的学校编号:3 请输入第2名的学校名字:zhengda 请输入第1名的学校编号:6请输入第1名的学校名字:litcs。时间复杂度分析:用户输入信息时,采用三重循环进行输入,因此信息输入函数的时间复杂度为O(N*(M+W)*k)。利用冒泡排序法进行排序,采用二重循环,时间复杂度为O(N*N)。采用顺序存储结构,信息存放在数组的相应内存单元里,因此查询函数的时间复杂度为O(1)。写信息时可以一次全部写进去,读信息时也可以一次全部读出来,因此写文件函数和读文件函数的

23、时间复杂度都为O(1)。存在问题的思考及算法的改进设想:刚开始运行程序时,就是一句一句的显示,界面很不好看,于是想把他弄成菜单的形式,但是两个子菜单要实现与主菜单之间的切换,能够自如返回主菜单。开始时没有想到要去直接调用实现主菜单操作的函数Menu_Select_One(),废了好大周折,后来问了同学,顿时茅塞顿开。显示的内容堆积在一个屏幕上,看着很混乱,用C语言里的clrscr()函数在VC+里似乎不能用,上网查了下资料,找到了一个头文件为stdlib.h的清屏函数system(”cls”)。调试程序时,遇到了屏幕一闪又回到原来界面的情况,没有输出想要得到的信息,原来是信息在屏幕上显示后,程

24、序执行到了清屏函数,所以立马清屏了,为了看到输出信息,调用system(”pause”)函数,使程序暂停,以让用户看到输出地信息,然后再按任意键继续执行程序。对此程序结构体的定义比较难,要整体考虑全局设置出结构体,这次课设用到结构体的嵌套,由于对结构体的使用还不是很熟悉,所以做起来时花费了不少时间,但一个课设做下来,还算是得心应手。对于读写文件不是很熟悉,fread和fwrite函数不是很会用,在读出文件里的信息并输出时花了很长时间,不过,最后总算是会用了。4、设计总结在课程设计的过程中,虽然遇到了很多问题,但最终差不多也都一一解决了。有的时候是一些很小的逻辑错误,需要的是细心。同学之间互相帮

25、助,多个人思考多个力量,遇到自己解决不了的问题,向同学求助,能更好的帮我们解决所面临的难题。由于此次课程设计用到数据文件的知识,而这些知识老师都没讲,自学起来稍微有点困难,但也不是完全看不懂,只是对一些函数的应用不太熟悉,经过此次课程设计,对文件的读写有了更深的了解,也相应的培养了我的自学能力。经过C语言和数据结构的学习,我发现数据结构与C语言有很大的不同,C语言不需要考虑存储结构之类的,只需要定义个变量或数组,集中精力于算法之上,而数据结构前期的整体规划和构思非常重要,先确立合理的存储结构,再来编写算法,实际上一旦存储结构确立了,算法的实现相对来说简单很多,难就难在如何确立合理的存储结构。能

26、够把此次课程设计做出来,是一个很大的挑战,但我经过自己的不懈努力,终于完成了,看着自己的作品,心里还是说不出的高兴,虽然做的过程很艰难。人生就是要把困难踩在脚下。7、 源程序清单源代码:#include #include #include #include #define MAX 50#define S_SIZE sizeof(SchoolNode)#define I_SIZE sizeof(ItemNode)typedef struct SchoolNodeint school; /学校编号char s_nameMAX; /学校名字int record; /项目成绩struct School

27、Node *next; /链域SchoolNode;typedef struct int item; /项目编号char item_nameMAX; /项目名字SchoolNode *firstschool; /链域指向链表中第一个结点Item;typedef struct int item_num; /项目总数Item itemMAX;AllItems;typedef struct ItemNode int item; /该学校获奖的项目编号char i_nameMAX; /项目名字int record; /项目成绩struct ItemNode *next; /链域ItemNode;typ

28、edef struct int school; /学校编号char school_nameMAX; /学校名字int shool_score; /学校总分int boys_score; /男团体总分int girl_score; /女团体总分ItemNode *firstitem; /链域指向链表中第一个获奖项目的结点 SCHNode;typedef struct int school_num; /学校总数 SCHNode schoolMAX;AllSchool;int Menu_Select_One() /菜单界面1int select;do system(color 0a);system(

29、cls);printf(tt(o)-(o)n);printf(tt(o)- 以下是菜单选项,请选择! -(o)n);printf(tt(o)-(o)n);printf(tt(o)- 1.输入各个项目成绩及信息 -(o)n);printf(tt(o)-(o)n);printf(tt(o)- 2.显示各学校总分 -(o)n);printf(tt(o)-(o)n);printf(tt(o)- 3.信息排序 -(o)n);printf(tt(o)-(o)n);printf(tt(o)- 4.信息查询 -(o)n);printf(tt(o)-(o)n);printf(tt(o)- 5.保存信息到文件 -

30、(o)n);printf(tt(o)-(o)n);printf(tt(o)- 6.从文件中读入信息 -(o)n);printf(tt(o)-(o)n);printf(tt(o)- 0.退出系统 -(o)n);printf(tt(o)-(o)n);printf(t请输入要选择的操作(0):);scanf(%d,&select); while (select 6 | select 4 | select 2 | select 0);return select;void InitList(AllSchool *as,AllItems *ai) /初始化链表for (int i = 0;iitem_nu

31、m;i+) /初始化项目链表ai-itemi.item = i+1;strcpy(ai-itemi.item_name, );ai-itemi.firstschool = NULL;for (int k = 1;kschool_num;k+) /初始化学校链表as-schoolk.school = k;strcpy(as-schoolk.school_name, );as-schoolk.firstitem = NULL;as-schoolk.shool_score = as-schoolk.boys_score = as-schoolk.girl_score = 0;as-school0.s

32、hool_score = as-school0.boys_score = as-school0.girl_score = 0;strcpy(as-school0.school_name, );void Item_Score(AllItems *ai,AllSchool *as,int x) /区分取前名和前名的项目给分情况ItemNode *p; SchoolNode *q;int j,num,k; int m = 3,n = 5;char nameMAX;for (int i = 0;iitem_num;i+)printf(nt请输入第%d个项目编号:,i+1);scanf(%d,&ai-i

33、temi.item);printf(nt请输入第%d个项目名字:,i+1);scanf(%s,ai-itemi.item_name);getchar();printf(nt1.前三名t2.前五名n);printf(t请选择:);scanf(%d,&j);if(j!=1&j!=2) printf(nt输入有误,请重新选择:); scanf(%d,&j);if (j = 1)k = 0;m = 3;do printf(nt请输入第%d名学校编号(学校编号为数字):,m);scanf(%d,&num);printf(nt请输入第%d名学校名字:,m);scanf(%s,name);getchar();q = (SchoolNode *)malloc(S_SIZE);q-school = num;strcpy(q-s_name,name);p = (ItemNode *)malloc(I_SIZE);p-item = ai-itemi.item;strcpy(p-i_name,ai-itemi.item_name);if(m = 3) p-record = q-record = 2;if(m = 2) p-record = q-record = 3;if(m = 1) p-record = q-record = 5;q-next = ai-

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

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号