




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构运动会分数统计课程设计word文档可自由复制编辑《数据结构》课程设计目录需求分析------------------------------------------------------21.1问题描述-----------------------------------------------------------21.2基本任务-----------------------------------------------------------2概要设计------------------------------------------------------22.1主界面设计---------------------------------------------------------22.2数据结构设计-------------------------------------------------------32.3系统功能设计-------------------------------------------------------3模块设计------------------------------------------------------33.1模块设计-----------------------------------------------------------33.2系统子模块及功能设计-----------------------------------------------43.3系统模块之间的调用关系---------------------------------------------4详要设计------------------------------------------------------54.1数据结构设计-------------------------------------------------------54.2系统主要模块设计---------------------------------------------------6调试分析------------------------------------------------------85.1创建学校链表-------------------------------------------------------85.2添加获奖学生-------------------------------------------------------85.3按项目查学校成绩---------------------------------------------------115.4按学校编号查参加项目-----------------------------------------------14用户使用说明--------------------------------------------------15参考文献------------------------------------------------------15对软件自我评价------------------------------------------------15程序设计源代码------------------------------------------------16心得体会-----------------------------------------------------22数据结构运动会分数统计课程设计全文共数据结构运动会分数统计课程设计全文共22页,当前为第1页。一.需求分析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)问题分析:1)、每个学校有运动员要参加运动项目,故存储结构要有三个,项目结构体,学生信息结构体和学校链表。每个结点存储一个学校,每个学校可以有多名运动员参加运动项目。由此,存储结构就建立了。2)、要求不同的项目根据具体情况取去前五名或前三名积分,则可以设定标准,即当参加某项目的运动员数等于或多于五人时,就取该项目的前五名进行积分,取前五名的积分分别为:7,5,3,2,1。当参加某一项目的人数少于五人时,则去该项目的前三名进行积分,去取前三名的积分分别为:5,3,2。3)、要求能统计学校的总分,并可以按学校编号输出每个学校的参赛信息及每个学校每个运动员的信息和所有运动项目清单。以上这些功能可以通过遍历学校链表来实现。4)、要求可以学校编号查询学校某个项目的情况,用户输入学校编号和项目编号,通过遍历学校链表即可实现。5)、要求可以按编号查询取得前三或前五名的学校,用户输入要查询的项目的编号,通过遍历学校链表即可实现。6)、设置菜单函数menu(),产生用户界面。规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形
界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。1.2基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:.输入各个项目的前三名或前五名的成绩;.统计各学校总分;
3).按学校编号或名称、男女团体总分排序输出;
4).按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。数据存入文件并能随时查询。二.概要设计数据结构运动会分数统计课程设计全文共22页,当前为第2页。为了完成需求数据结构运动会分数统计课程设计全文共22页,当前为第2页。2.1主界面设计为了实现运动会分数统计的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。系统主控菜单运行界面如图1所示:图1运动会分数统计主菜单2.2数据结构设计系统采用数据的存储结构定义:运动项目结构体、运动员信息结构体、学校链表此外,还定义了一些全局变量:学校总数SchoolCount、男生项目总数BoyProject、女生项目总数GirlProject、项目总数TotalProject、项目表Project_T[41]。2.3系统功能设计⑴.创建学校的链表:voidCreatSchoolLink(School&head);⑵.添加获奖学生:voidAddStudentLink(School&head);⑶.按项目编号查询取得前三或前五名的学校。voidFind_Project_ID(School&head,intProject_ID);⑷.按学校编号查询学校某个项目。voidFind_School_Project(School&head,intSchool_ID,intProject_ID);⑸.成绩统计:voidScoreCount(School&head);⑹.输出参赛结果:voidOutPut_Link(Schoolhead);.添加学生数据:voidAddStudent(School&head);(8).菜单函数:intmenu();(9).主函数:intmain();三.模块设计3.1模块设计数据结构运动会分数统计课程设计全文共22页,当前为第3页。系统主要包含主程序模块和其它链表操作模块。其调用数据结构运动会分数统计课程设计全文共22页,当前为第3页。ScoreCount(School&head)main()CreatSchoolLink(head)ScoreCount(School&head)main()CreatSchoolLink(head)AddStudent(head)OutPut_Link(head)FindProject_ID(head,Project_ID)Find_School_Project(head,School_ID,intProject_ID)menu()AddStudentLink(head)图2模块调用示意图3.2系统子模块及其功能设计系统设计了8个子功能模块,8个子功能模块的描述如下:⑴.创建学校的链表:voidCreatSchoolLink(School&head);⑵.添加获奖学生:voidAddStudentLink(School&head);⑶.按项目编号查询取得前三或前五名的学校。voidFind_Project_ID(School&head,intProject_ID);⑷.按学校编号查询学校某个项目。voidFind_School_Project(School&head,intSchool_ID,intProject_ID);⑸.成绩统计:voidScoreCount(School&head);⑹.输出参赛结果:voidOutPut_Link(Schoolhead);.添加学生数据:voidAddStudent(School&head);(8).菜单函数:intmenu();3.3系统模块之间的调用关系系统的10个子模块之间的主要调用关系如图3所示:数据结构运动会分数统计课程设计全文共22页,当前为第4页。数据结构运动会分数统计课程设计全文共22页,当前为第4页。Menu()Menu()图3系统函数调用关系图四.详细设计4.1数据结构设计系统采用线性表的链式存储结构存储学校信息。结点定义如下:typedefstructSchoolNode{intnumber;//学校编号charname[10];intcount;//运动员人数intboyscore;//男子团体总分intgirlscore;//女子团体总分inttotalscore;//团体总分intjifen;//积分Studentstudents[20];//参赛学生structSchoolNode*next;}SchoolNode,*School;4.2系统主要模块设计创建学校链表算法思想及程序代码:voidCreatSchoolLink(School&head){//创建学校的链表Schoolp;inti;head=p=(School)malloc(sizeof(SchoolNode));for(i=1;i<=SchoolCount;i++){p=p->next=(School)malloc(sizeof(SchoolNode));printf("请输入编号为%d的学校的名称:\n",i);scanf("%s",p->name);p->number=i;数据结构运动会分数统计课程设计全文共22页,当前为第5页。p->count=0;数据结构运动会分数统计课程设计全文共22页,当前为第5页。p->boyscore=0;p->girlscore=0;p->totalscore=0;p->jifen=0;}p->next=NULL;//使指针指向空head=head->next;//头指针后移}添加获奖学生函数程序代码:voidAddStudentLink(School&head){//添加获奖学生SchoolL,p;intSchool_ID;//学校编号charStudentName[20];//学生姓名intsex;//性别intProject_ID;//项目编号intscore;//成绩intranking;//名次printf("请输入学生的姓名:\n");scanf("%s",StudentName);printf("请输入该学生所在学校的编号:\n");scanf("%d",&School_ID);printf("请输入该学生的性别(0--女,--男):\n");scanf("%d",&sex);printf("请输入该学生参加的项目编号:\n");scanf("%d",&Project_ID);if(sex==0)GirlProject=Project_ID;if(sex==1)BoyProject=Project_ID;printf("请输入该学生该项目的得分:\n");scanf("%d",&score);printf("请输入该学生在该项目中的名次:\n");scanf("%d",&ranking);L=head;while(L){if(L->number==School_ID){p=L;p->count=p->count+1;//运动员数+1strcpy(p->students[p->count].name,StudentName);//学生姓名p->students[p->count].Project=Project_ID;//得分项目Project_T[Project_ID].count=Project_T[Project_ID].count+1;//该项目得分人数+1p->students[p->count].ranking=ranking;//得分名次p->students[p->count].score=score;//得分p->students[p->count].sex=sex;//性别break;数据结构运动会分数统计课程设计全文共22页,当前为第6页。}数据结构运动会分数统计课程设计全文共22页,当前为第6页。elseL=L->next;}}按学校项目查询前三名和前五名学校函数程序代码:voidFind_Project_ID(School&head,intProject_ID){//按项目编号查询取得前三或前五名的学校。Schoolh,p;p=h=head;//保存链表头指针inti;printf("查询结果如下:\n");while(h){for(i=1;i<=h->count;i++){if(h->students[i].Project==Project_ID){printf("学校:%s姓名:%s名次:%d\n",h->name,h->students[i].name,h->students[i].ranking);printf("\n--------------------------------------\n");}}h=h->next;}}按学校编号查询学校的某个项目程序代码:voidFind_School_Project(School&head,intSchool_ID,intProject_ID){//按学校编号查询学校某个项目Schoolh,p;intProject_i=0;inti;p=h=head;//保存链表头指针while(h){if(h->number==School_ID){p=h;break;}h=h->next;}for(i=1;i<=p->count;i++){if(p->students[i].Project==Project_ID){printf("查询结果如下:\n");printf("姓名:%s\n",p->students[i].name);Project_i=p->students[i].Project;if(p->students[i].sex==0){printf("性别:女\n");Project_i=Project_i+20;}else{printf("性别:男\n");}数据结构运动会分数统计课程设计全文共22页,当前为第7页。printf("项目编号:%d项目名称%s该项目得分%d名次:%d\n",p->students[i].Project,Project_T[Project_i].name,p->students[i].score,p->students[i].ranking);数据结构运动会分数统计课程设计全文共22页,当前为第7页。}}}五.调试分析各子功能测试运行结果如下:5.1创建学校链表运行结果:创建5个学校,分别为重庆工商大学、重庆邮电大学、重庆交通大学、重庆师范大学、重庆大学数据结构运动会分数统计课程设计全文共22页,当前为第8页。5.2添加获奖学生运行结果:数据结构运动会分数统计课程设计全文共22页,当前为第8页。数据结构运动会分数统计课程设计全文共22页,当前为第9页。数据结构运动会分数统计课程设计全文共22页,当前为第9页。数据结构运动会分数统计课程设计全文共22页,当前为第10页。数据结构运动会分数统计课程设计全文共22页,当前为第10页。详细添加学生人数,我们组徐维维已截图,总共输入重庆工商大学9人,其中项目2有5人,项目1、3、4、5各一人,重庆邮电大学1人参加项目5,重庆交通大学2人,,参加项目2、5各一人。5.3按项目查找前三名或前五名学校运行结果:数据结构运动会分数统计课程设计全文共22页,当前为第11页。数据结构运动会分数统计课程设计全文共22页,当前为第11页。数据结构运动会分数统计课程设计全文共22页,当前为第12页。数据结构运动会分数统计课程设计全文共22页,当前为第12页。由运行结果可以知道,当每个项目人数大于等于5时,按第一种积分计算,第一名取7分,当每个项目总数小于5时,按第二种积分计算,第一名取得是5分。其次还计算了每个学校女子团体总分、男子团体总分、学校总分。数据结构运动会分数统计课程设计全文共22页,当前为第13页。5.4按学校编号查找某个项目参加人数函数运行结果:数据结构运动会分数统计课程设计全文共22页,当前为第13页。数据结构运动会分数统计课程设计全文共22页,当前为第14页。数据结构运动会分数统计课程设计全文共22页,当前为第14页。六.用户使用说明该运动会分数统计程序用C语言编写,实现了所要求的大部分功能。(1)按数字键1,使用前首先要进行参数统计,包括参赛学校数(不多余20个),男生项目数(不多于20个)和女生项目数(不多于20个)。设置时同时输入学校及项目的名称,要求输入英文字符。(2)按数字键2用户可以添加获奖学习信息,包括所在学校编号,性别,参赛项目编号,成绩和名次。(3)按数字键3,可以按学校编号输出学校参赛的信息,包括学校的编号名称,男子团体总分,女子团体总分,团体总分,积分。可以输出每个学校的每个运动员的信息,包括姓名,性别,得分项目名称,成绩,名次。可以输出所有的运动项目。(4)按数字键4,可以查询某个学校某个项目的信息。(5)按数字键5,可以按项目编号查询取得前三或前五名的学校。(6)按1—5之外的数字键可以退出程序。七.参考文献在编程过程中所参考的文献:数据结构第三版、C语言教程八.对所设计的软件进行自我评价此源程序代码还存在两点点没有解决的问题,第一学校总分成绩排序没有编写代码,第二男女生参加项目人数没有统计,其他的相关要求基本上达到。在实验过程中出现以下几点问题:第一,在创建链表时,忽略了不带头结点的指针头指针需要向后移,是由于长期的定式思维,头指针是不能发生改变导致;第二,对链表的掌握不是足够的扎实,因此在处理相关问题的时候,存在很大的障碍,譬如对遍历链表,表头指针的后移;第三,在处理每个项目的前三名和前五名积分是花费了一段时间去理解。数据结构运动会分数统计课程设计全文共22页,当前为第15页。数据结构运动会分数统计课程设计全文共22页,当前为第15页。九.程序源代码:#include"stdio.h"#include"malloc.h"#include"stdlib.h"#include"string.h"typedefstructProject{intnumber;//项目编号charname[10];//项目名称intcount;//该项目得分人数}Project_Table;typedefstructStudent{charname[10];intsex;intProject;//参加的项目intscore;//成绩intranking;//名次}Student;typedefstructSchoolNode{intnumber;//学校编号charname[10];intcount;//运动员人数intboyscore;//男子团体总分intgirlscore;//女子团体总分inttotalscore;//团体总分intjifen;//积分Studentstudents[20];//参赛学生structSchoolNode*next;}SchoolNode,*School;intSchoolCount=0;//学校总数intBoyProject=0;//男生项目总数intGirlProject=0;//女生项目总数intTotalProject=0;//项目总数Project_TableProject_T[41];//项目表voidCreatSchoolLink(School&head){//创建学校的链表Schoolp;inti;head=p=(School)malloc(sizeof(SchoolNode));for(i=1;i<=SchoolCount;i++)数据结构运动会分数统计课程设计全文共22页,当前为第16页。{p=p->next=(School)malloc(sizeof(SchoolNode));数据结构运动会分数统计课程设计全文共22页,当前为第16页。printf("请输入编号为%d的学校的名称:\n",i);scanf("%s",p->name);p->number=i;p->count=0;p->boyscore=0;p->girlscore=0;p->totalscore=0;p->jifen=0;}p->next=NULL;//使指针指向空head=head->next;//头指针后移}voidAddStudentLink(School&head){//添加获奖学生SchoolL,p;intSchool_ID;//学校编号charStudentName[20];//学生姓名intsex;//性别intProject_ID;//项目编号intscore;//成绩intranking;//名次printf("请输入学生的姓名:\n");scanf("%s",StudentName);printf("请输入该学生所在学校的编号:\n");scanf("%d",&School_ID);printf("请输入该学生的性别(0--女,--男):\n");scanf("%d",&sex);printf("请输入该学生参加的项目编号:\n");scanf("%d",&Project_ID);if(sex==0)GirlProject=Project_ID;if(sex==1)BoyProject=Project_ID;printf("请输入该学生该项目的得分:\n");scanf("%d",&score);printf("请输入该学生在该项目中的名次:\n");scanf("%d",&ranking);L=head;while(L){if(L->number==School_ID){p=L;p->count=p->count+1;//运动员数+1strcpy(p->students[p->count].name,StudentName);//学生姓名p->students[p->count].Project=Project_ID;//得分项目Project_T[Project_ID].count=Project_T[Project_ID].count+1;//该项目得分人数+1p->students[p->count].ranking=ranking;//得分名次数据结构运动会分数统计课程设计全文共22页,当前为第17页。p->students[p->count].score=score;//得分数据结构运动会分数统计课程设计全文共22页,当前为第17页。p->students[p->count].sex=sex;//性别break;}elseL=L->next;}}voidFind_Project_ID(School&head,intProject_ID){//按项目编号查询取得前三或前五名的学校。Schoolh,p;p=h=head;//保存链表头指针inti;printf("查询结果如下:\n");while(h){for(i=1;i<=h->count;i++){if(h->students[i].Project==Project_ID){printf("学校:%s姓名:%s名次:%d\n",h->name,h->students[i].name,h->students[i].ranking);printf("\n--------------------------------------\n");}}h=h->next;}}voidFind_School_Project(School&head,intSchool_ID,intProject_ID){//按学校编号查询学校某个项目Schoolh,p;intProject_i=0;inti;p=h=head;//保存链表头指针while(h){if(h->number==School_ID){p=h;break;}h=h->next;}for(i=1;i<=p->count;i++){if(p->students[i].Project==Project_ID){printf("查询结果如下:\n");printf("姓名:%s\n",p->students[i].name);Project_i=p->students[i].Project;if(p->students[i].sex==0){printf("性别:女\n");Project_i=Project_i+20;}数据结构运动会分数统计课程设计全文共22页,当前为第18页。else{数据结构运动会分数统计课程设计全文共22页,当前为第18页。printf("性别:男\n");}printf("项目编号:%d项目名称%s该项目得分%d名次:%d\n",p->students[i].Project,Project_T[Project_i].name,p->students[i].score,p->students[i].ranking);}}}voidOutPut_Link(Schoolhead){//向屏幕输出数据Schoolh;h=head;inti;intProject_ID;intProject_count_i;while(h){//遍历学校printf("学校编号:%d\n",h->number);printf("学校名称:%s\n",h->name);printf("本次运动会积分%d\n",h->jifen);printf("男子团体总分:%d\n",h->boyscore);printf("女子团体总分:%d\n",h->girlscore);printf("总分:%d\n",h->totalscore);printf("运动员数:%d\n",h->count);for(i=1;i<=h->count;i++){//输出该校学生运动员情况printf("运动员姓名:%s\n",h->students[i].name);if(h->students[i].sex==0)printf("性别:女\n");elseprintf("性别:男\n");Project_ID=h->students[i].Project;if(h->students[i].sex==0)Project_ID=Project_ID+20;//如果是女生则项目表向后移动printf("得分项目:%s\n",Project_T[Project_ID].name);printf("得分:%d\n",h->students[i].score);printf("得分名次:%d\n",h->students[i].ranking);}printf("\n--------------------------------------\n");h=h->next;//指针向后移动}printf("\n--------------------------------------\n");}voidScoreCount(School&head){//成绩统计Schoolp;p=head;//保存链表头指针数据结构运动会分数统计课程设计全文共22页,当前为第19页。intboyscore=0;//男子团体总分数据结构运动会分数统计课程设计全文共22页,当前为第19页。intgirlscore=0;//女子团体总分inttotalscore=0;//团体总分inti;intProject_i=0;intjifen=0;//积分while(p){for(i=1;i<=p->count;i++){//计算分数totalscore=totalscore+p->students[i].score;//计算总分if(p->students[i].sex==0)girlscore=girlscore+p->students[i].score;////女子团体总分elseboyscore=boyscore+p->students[i].score;//男子团体总分//计算积分Project_i=p->students[i].Project;if(Project_T[Project_i].count>=5){//取前名if(p->students[i].ranking==1)jifen=jifen+7;elseif(p->students[i].ranking==2)jifen=jifen+5;elseif(p->students[i].ranking==3)jifen=jifen+3;elseif(p->students[i].ranking==4)jifen=jifen+2;elseif(p->students[i].ranking==5)jifen=jifen+1;}if(Project_T[Project_i].count<5){//取前名if(p->students[i].ranking==1)jifen=jifen+5;elseif(p->students[i].ranking==2)jifen=jifen+3;elseif(p->students[i].ranking==3)jifen=jifen+2;}}//forp->jifen=jifen;//计算积分p->girlscore=girlscore;//保存女子总分p->boyscore=boyscore;//保存男子总分p->totalscore=totalscore;//保存总分jifen=0;boyscore=0;//男子团体总分girlscore=0;//女子团体总分totalscore=0;//总分p=p->next;//向后移动指针}//while}voidAddStudent(School&head){//添加学生数据inti=1;while(i)数据结构运动会分数统计课程设计全文共22页,当前为第20页。{AddStudentLink(head);//添加学生数据数据结构运动会分数统计课程设计全文共22页,当前为第20页。printf("\n是否继续添加学生数据?[No=0Yes=1]\n");scanf("%d",&i);}}intmenu()/*菜单函数*/{intd;printf("\n数据结构---运动会分数统计\n");printf("\n1--参数设置2--添加学生\n");printf("\n3--统计4--学校查询\n");printf("\n5--项目查询按其他键退出\n");scanf("%d",&d);return(d);}intmain(){Schoolhead;inti,flag=1;inta,b,c;whil
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 花茶代销委托协议书
- 解除委托代理协议书
- 预存话费合同协议书
- 退役定向就业协议书
- 信用卡书面和解协议书
- 酒楼废品回收协议书
- 菏泽学院战略协议书
- 餐厅联营经营协议书
- 非全日制竞业协议书
- 集体公寓转让协议书
- 酒店各部门卫生区域划分
- 工程测量控制点交桩记录表
- GA 1810-2022城镇燃气系统反恐怖防范要求
- 重庆地区现代方言中的古语词
- 3第三章申论写作 写作课件
- 广西建设工程质量检测和建筑材料试验收费项目及标准指导性意见(新)2023.10.11
- 国开电大 可编程控制器应用实训 形考任务5实训报告
- PEP英语四年级下册U5 My clothes Read and write(教学课件)
- DB37-T 2671-2019 教育机构能源消耗定额标准-(高清版)
- 信息系统项目管理师论文8篇
- (完整版)重大危险源清单及辨识表
评论
0/150
提交评论