数据结构运动会分数统计课程设计

上传人:m**** 文档编号:201501439 上传时间:2023-04-20 格式:DOCX 页数:22 大小:600.33KB
收藏 版权申诉 举报 下载
数据结构运动会分数统计课程设计_第1页
第1页 / 共22页
数据结构运动会分数统计课程设计_第2页
第2页 / 共22页
数据结构运动会分数统计课程设计_第3页
第3页 / 共22页
资源描述:

《数据结构运动会分数统计课程设计》由会员分享,可在线阅读,更多相关《数据结构运动会分数统计课程设计(22页珍藏版)》请在装配图网上搜索。

1、数据结构课程设计目录1. 需求分析21.1 问题描述21.2 基本任务22. 概要设计22.1主界面设计22.2数据结构设计32.3系统功能设计33. 模块设计33.1模块设计33.2系统子模块及功能设计43.3系统模块之间的调用关系44. 详要设计54.1数据结构设计54.2系统主要模块设计65. 调试分析85.1 创建学校链表85.2 添加获奖学生85.3 按项目查学校成绩115.4 按学校编号查参加项目146. 用户使用说明157. 参考文献158. 对软件自我评价159. 程序设计源代码1610. 心得体会22一需求分析1.1 问题描述1. 课程设计题目:运动会分数统计。2. 任务:加

2、运动会有n个学校,学校编号为1n。比赛分成m个男子项目,和w个女子项目。项目 编号为男子1m,女子m+1 m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。 (m=20,n=20)3. 问题分析:1) 、每个学校有运动员要参加运动项目,故存储结构要有三个,项目结构体,学生信息结构 体和学校链表。每个结点存储一个学校,每个学校可以有多名运动员参加运动项目。由此, 存储结构就建立了。2) 、要求不同的项目根据具体情况取去前五名或前三名积分,则可以设定标准,即当参加某项 目的运动员数等于或多于五人时,

3、就取该项目的前五名进行积分,取前五名的积分分别为:7, 5, 3, 2, 1。当参加某一项目的人数少于五人时,则去该项目的前三名进行积分,去取前三 名的积分分别为:5, 3, 2。3) 、要求能统计学校的总分,并可以按学校编号输出每个学校的参赛信息及每个学校每个运动 员的信息和所有运动项目清单。以上这些功能可以通过遍历学校链表来实现。4) 、要求可以学校编号查询学校某个项目的情况,用户输入学校编号和项目编号,通过遍历 学校链表即可实现。5) 、要求可以按编号查询取得前三或前五名的学校,用户输入要查询的项目的编号,通过遍 历学校链表即可实现。6) 、设置菜单函数menu(),产生用户界面。规定:

4、输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据 文件中。测试数据:要求使用 1、全部合法数据; 2、整体非法数据; 3、局部非法数据。进行程序测 试,以保证程序的稳定。1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:1) .输入各个项目的前三名或前五名的成绩;2) .统计各学校总分;3) .按学校编号或名称、男女团体总分排序输出;4) .按学校编号查询学校某个项目的

5、情况;可以按项目编号查询取得前三或前五名的学校。数 据存入文件并能随时查询。二概要设计为了完成需求分析的基本任务,主要从以下 3个方面进行设计:2.1 主界面设计为了实现运动会分数统计的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。系统主控菜单运行界面如图 1所示:图 1 运动会分数统计主菜单2.2 数据结构设计系统采用数据的存储结构定义:运动项目结构体、 运动员信息结构体、学校链表此外,还定义了一些全局变量:学校总数SchoolCount、男生项目总数BoyProject、女生项目 总数 GirlProject、项目总数 TotalProject、

6、项目表 Project_T41。2.3 系统功能设计创建学校的链表:void CreatSchoolLink(School &head) ;添加获奖学生:void AddStudentLink(School &head) ; 按项目编号查询取得前三或前五名的学校。void Find_Project_ID(School &head,int Project_ID) ; 按学校编号查询学校某个项目。void Find_School_Project(School &head,int School_ID,int Project_ID) ; 成绩统计:void ScoreCount(School &hea

7、d) ;输出参赛结果:void OutPut_Link(School head) ;(7) .添加学生数据:void AddStudent(School &head) ;(8) .菜单函数:int menu() ;(9) .主函数:int main() ;三模块设计3.1 模块设计系统主要包含主程序模块和其它链表操作模块。其调用关系如图 2所示。3.2 系统子模块及其功能设计系统设计了 8 个子功能模块,8个子功能模块的描述如下: 创建学校的链表:void CreatSchoolLink(School &head) ; 添加获奖学生:void AddStudentLink(School &he

8、ad) ; 按项目编号查询取得前三或前五名的学校。void Find_Project_ID(School &head,int Project_ID) ; 按学校编号查询学校某个项目。void Find_School_Project(School &head,int School_ID,int Project_ID) ; 成绩统计:void ScoreCount(School &head) ;输出参赛结果:void OutPut_Link(School head) ;(8).添加学生数据:void AddStudent(School &head) ;(8).菜单函数:int menu() ;3.

9、3 系统模块之间的调用关系系统的10个子模块之间的主要调用关系如图 3所示:AddStiidentL ink(head)ScoreCount (School&he ad)AddStiidentf head)CreatSclioolLink(head)FirLdProject ED( head,Project_IDFiiid_Schjool_Proj ec tfheaiSchjoolIDjn tProi ect ID)Menu()Output Link (head)图3 系统函数调用关系图详细设计4.1 数据结构设计 系统采用线性表的链式存储结构存储学校信息。结点定义如下 typedef str

10、uct SchoolNodeint number;/学校编号char name10;int coun t;/运动员人数int boyscore;/男子团体总分int girlscore;/女子团体总分int totalscore;/团体总分int jifen;/积分St udent st uden ts20;/参赛学生 struct SchoolNode *next;SchoolNode,*School;4.2 系统主要模块设计(1) 创建学校链表算法思想及程序代码:void CreatSchoolLink(School &head) /创建学校的链表School p;int i; head=

11、p=(School)malloc(sizeof(SchoolNode); for(i=1;inext=(School)malloc(sizeof(SchoolNode); prin tf(请输入编号为%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-nex t; /头指针后移(2) 添加获奖学生函数程序代码: void AddStudentLink(School &hea

12、d)/添加获奖学生 School L,p;int School_ID; /学校编号char StudentName20; /学生姓名int sex;/性别int Project_ID; /项目编号int score;/成绩int ranking; /名次 printf(请输入学生的姓名:n); scanf(%s,StudentName);prin tf(请输入该学生所在学校的编号:n); scanf(%d,&School_ID);printf(请输入该学生的性别(0女,男):n); scanf(%d,&sex);prin tf(请输入该学生参加的项目编号:n); scanf(%d,&Proje

13、ct_ID);if(sex=0) GirlProject=Project_ID; if(sex=1) BoyProject=Project_ID;prin tf(请输入该学生该项目的得分:n); scanf(%d,&score);prin tf(请输入该学生在该项目中的名次:n); scanf(%d,&ranking);L=head; while(L) if(L-number=School_ID) p=L;/该项目得分p-count=p-count+1; /运动员数+1 strcpy(p-studentsp-count.name, StudentName); /学生姓名 p-studentsp

14、-count.Project=Project_ID ;/得分项目 Project_TProject_ID.count=Project_TProject_ID.count+1;人数+1p-s tu den tspcou nt .ranking二ranking; /得分名次 p-s tu den tsp-cou nt .score二score; /得分 pstudentspcount.sex=sex; /性别 break;else L=L-next;(3) 按学校项目查询前三名和前五名学校函数程序代码:void Find_Project_ID(School &head,int Project_ID

15、) /按项目编号查询取得前三或前五名的 学校。School h,p;p=h=head; / 保存链表头指针int i;prin tf(查询结果如下:n);while(h) for(i=1;icount;i+) if(h-studentsi.Project=Project_ID)printf( 学 校 :%s姓 名 :%s名次:dn,h-name,h-s tudent si.name,h-s tudent si.ranking);printf(nn);h=h-next;(4) 按学校编号查询学校的某个项目程序代码:void Find_School_Project(School &head, in

16、t School_ID,int Project_ID)/按学校编号查询 学校某个项目School h,p;int Project_i=0;int i;p=h=head; /保存链表头指针while(h) if(h-number=School_ID)p=h;break;h=h-next;for(i=1;icount;i+) if(p-studentsi.Project=Project_ID)prin tf(查询结果如下:n);printf (姓名:sn,p-studentsi.name); Project_i=p-studentsi.Project;if(p-studentsi.sex=0)pr

17、intf(性别:女n); Project_i=Project_i+20;else prin tf(性别:男 n);printf(项目编号:%d项目名称%s该项目得分%d名次:dn,pstudentsi.Project,Project_TProject_i.name,pstudentsi.score,pstudentsi.ranking);五调试分析各子功能测试运行结果如下:5.1 创建学校链表运行结果C:Win dow5system 3 2cmd. exe=回 3称 名:4目 号项H : 幕远ioral M1111 有L0顷青!0顷青业顷青此顷青L5主月董主月董主耳 2耳 3耳 顶胞号项魏号项

18、 -.I-_TK - -汚目跑号大号大号大号 号项氾 即编入编入编人米入工入邮入交入师 EnTRjrm-d刖一兀_rrni刖却冃厶刖10厶世-kd世-k一 声-fe-MM.学人范0 0 窈积八务 :4潼厶召口営3 寥运团团:0员子子八爲 斗男fe-忌运八刀:E:E学-K.0 0 窈和八S刀 汚潼#畐总:0 数 璽运团团:0员 子子八規 男玄忌运由运行结果可以知道,当每个项目人数大于等于 5时,按第一种积分计算,第一名取7分, 当每个项目总数小于5时,按第二种积分计算,第一名取得是 5分。其次还计算了每个学校女子 团体总分、男子团体总分、学校总分。5.4 按学校编号查找某个项目参加人数函数运行结

19、果:项目名称200米短跑项目名称2丽米短跑项目查询按其他键退出4学校查询参数设置2-添加学生-一运动会分数统计名次洱名次:60该项目得分睥该项目得分亟rai| C:Wi n dowssyse m 3 2cnnd. exe吓半:女:.七T=2 nu.: 别目询目询 怪馨一姓性翌一姓性2 号果FZ号:S-F准 顶S-辞 入结借该项目得分跖该项目得分盹该项目得分西项目名称2胴米短跑项目名称2胴米短跑项目名称2胴米短跑二口姓名:王五名次諌严项目查询 按其他键退岀统计4学校查询参数设置2添加学生-运动会分数统计名次=名次名次汚0aw| C:Wi n dowssyste m 3 2cmd. exer下:2

20、如下:2如陋男#: I I 弟学扁 : : : : .5 别目询目询目六用户使用说明该运动会分数统计程序用 C 语言编写,实现了所要求的大部分功能。(1)按数字键 1,使用前首先要进行参数统计,包括参赛学校数(不多余 20 个),男生项目 数(不多于20个)和女生项目数(不多于 20个)。设置时同时输入学校及项目的名称,要求 输入英文字符。(2)按数字键 2用户可以添加获奖学习信息,包括所在学校编号,性别,参赛项目编号,成 绩和名次。(3)按数字键 3,可以按学校编号输出学校参赛的信息,包括学校的编号名称,男子团体总 分,女子团体总分,团体总分,积分。可以输出每个学校的每个运动员的信息,包括姓

21、名, 性别,得分项目名称,成绩,名次。可以输出所有的运动项目。(4)按数字键 4,可以查询某个学校某个项目的信息。(5)按数字键 5,可以按项目编号查询取得前三或前五名的学校。(6)按 15 之外的数字键可以退出程序。七参考文献在编程过程中所参考的文献:数据结构第三版、C语言教程八对所设计的软件进行自我评价此源程序代码还存在两点点没有解决的问题,第一学校总分成绩排序没有编写代码,第二男 女生参加项目人数没有统计,其他的相关要求基本上达到。在实验过程中出现以下几点问题:第 一,在创建链表时,忽略了不带头结点的指针头指针需要向后移,是由于长期的定式思维,头指 针是不能发生改变导致;第二,对链表的掌

22、握不是足够的扎实,因此在处理相关问题的时候,存 在很大的障碍,譬如对遍历链表,表头指针的后移;第三,在处理每个项目的前三名和前五名积 分是花费了一段时间去理解。九程序源代码:#includestdio.h#includemalloc.h#includestdlib.h#includestring.htypedef struct Projectint number;/ 项目编号 char name10;项目名称 int count;/该项目得分人数 Project_Table;typedef struct Studentchar name10;int sex;int Project;/参加的项目

23、int score; /成绩int ranking;/名次 Student;typedef struct SchoolNodeint number;/ 学校编号char name10;int count;/运动员人数int boyscore;/男子团体总分int girlscore;/女 子团体总分int totalscore;/ 团体总分int jifen;/ 积分Student students20;参赛学生 struct SchoolNode *next;SchoolNode,*School;int SchoolCount=O; 学校总数int BoyProject=O;男生项目总数in

24、t GirlProject=O;女生项目总数int TotalProject=0; /项目总数 Project_Table Project_T41 项目表void CreatSchoolLink(School &head)/创建学校的链表School p;int i; head=p=(School)malloc(sizeof(SchoolNode); for(i=1;inext=(School)malloc(sizeof(SchoolNode);printf(请输入编号为d的学校的名称:n,i);scanf(%s,p-name);p-number=i;p-count=0;p-boyscore=

25、0;p-girlscore=0;p-totalscore=0;p-jifen=0;p-next=NULL;使指针指向空 head=head-next; 头指针后移void AddStudentLink(School &head)/添加获奖学生School L,p;int School_ID; /学校编号char StudentName20; /学生姓名int sex;/ 性别int Project_ID; /项目编号int score;/成绩int ranking; /名次printf(请输入学生的姓名:n); scanf(%s,StudentName);printf(请输入该学生所在学校的编

26、号: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;printfC请输入该学生该项目的得分:n); scanf(%d,&score);printf(请输入该学生在该项目中的名次:n); scanf(%d,&ranking);L=head;while(L) if(L-number=Sch

27、ool_ID) p=L; p-count=p-count+1; /运动员数+1 strcpy(p-studentsp-count.name, StudentName); /学生姓名 p-studentsp-count.Project=Project_ID ;/得分项目Project_TProject_ID.count=Project_TProject_ID.count+1; /该项目得分人数+1 p-studentsp-count.ranking=ranking; 得分名次 p-studentsp-count.score=score;得分p-studentsp-count.sex=sex; /

28、性别 break;else L=L-next;void Find_Project_ID(School &head, int Project_ID) /按项目编号查询取得前三或前五名的学校。School h,p;p=h=head; /保存链表头指针int i;printf(查询结果如下:n);while(h) for(i=1;icount;i+) if(h-studentsi.Project=Project_ID)printf( 学 校 :%s姓 名 :%s名次:dn,h-name,h-studentsi.name,h-studentsi.ranking);printf(nn);h=h-next

29、;void Find_School_Project(School &head,int School_ID,int Project_ID)按学校编号查询学校某个项 目School h,p;int Project_i=0;int i;p=h=head; /保存链表头指针while(h)if(h-number=School_ID) p=h;break;h=h-next;for(i=1;icount;i+) if(p-studentsi.Project=Project_ID)printf(查询结果如下:n);printf(姓名:sn,p-studentsi.name);Project_i=p-stud

30、entsi.Project;if(p-studentsi.sex=0)printf(性 性别:女n); Project_i=Project_i+20;else printf(性 性别:男 n);printf(“项目编号:%d项目名称%s该项目得分%d名次:dn,p-studentsi.Project,Project_TProject_i.name,p-studentsi.score,p-studentsi.ranking);void OutPut_Link(School head) / 向屏幕输出数据School h;h=head;int i;int Project_ID;int Projec

31、t_count_i;while(h)/ 遍历学校printfC 学校编号:%dn,h-number);printfC 学校名称:%sn,h-name);printf(本 次运动会积分 %dn,h-jifen);printf(男 子团体总分:%dn ,h-boyscore);printf(女子团体总分:%dn ,h-girlscore);printf(总分:%dn,h-totalscore);printfC 运动员数:%dn,h-count);for(i=1;icount;i+)/输出该校学生运动员情况printf(运动员姓名:%sn,h-studentsi.name);if(h-student

32、si.sex=0)printf( 性 性别:女 n);else printf(性别:男 n);Project_ID=h-studentsi.Project; if(h-studentsi.sex=0)Project_ID=Project_ID+20; /如果是女生则项目表向后移 动printfC得分项目:sn,Project_TProject_ID.name);printf(得分:%dn,h-studentsi.score);printf(得分名次:%dn ,h-studentsi.ranking);printf(nn);h=h-next; /J旨针向后移动printf(nn);void Sc

33、oreCount(School &head)/成绩统计School p;p=head; /保存链表头旨针int boyscore=0;/男子团体总分int girlscore=0;/女子团体总分int totalscore=0;/团体总分int i;int Project_i=0;int jifen=O;/ 积分while(p) for(i=1;icount;i+)/计算分数 totalscore=totalscore+p-studentsi.score; /计算总分 if(p-studentsi.sex=O) girlscore=girlscore+p-studentsi.score; /女

34、子团体总分 else boyscore=boyscore+p-studentsi.score;/ 男子团体总分/计算积分 Project_i=p-studentsi.Project;if(Project_TProject_i.count=5) /取前名if(p-studentsi.ranking=1)jifen=jifen+7;else if(p-studentsi.ranking=2)jifen=jifen+5;else if(p-studentsi.ranking=3)jifen=jifen+3;else if(p-studentsi.ranking=4)jifen=jifen+2;els

35、e if(p-studentsi.ranking=5)jifen=jifen+1; if(Project_TProject_i.countstudentsi.ranking=1)jifen=jifen+5; else if(p-studentsi.ranking=2)jifen=jifen+3; else if(p-studentsi.ranking=3)jifen=jifen+2;/for p-jifen=jifen; 计算积分 p-girlscore=girlscore; 保存女子总分 p-boyscore=boyscore;保 存男子总分 p-totalscore=totalscore;

36、/保 存总分jifen=O;boyscore=O;/男子团体总分girlscore=O; 女子团体总分 totalscore=O; 总分p=p-next; /向后移动指针 /whilevoid AddStudent(School & head) /添加学生数据int i=1;while(i) AddStudentLink(head); /添加学生数据printf(n是否继续添加学生数据? No=0Yes=1n);scanf(%d,&i);int menu()/*菜单函数*/int d;printf(n数据结构-运动会分数统计n); printf(n 1-参数设置2-添加学生n); printf

37、(n3 统计4学校查询 n);printf(n5-项目查询按其他键退出n); scanf(%d,&d);return(d);int main()School head;int i,flag=1;int a,b,c;while(flag)switch(menu()case 1:printf(请输入参赛学校数(n=2)nn=); scanf(%d,&SchoolCount); printf(n请输男生项目总数(0vnv=20)nm=); scanf(%d,&BoyProject);printf(n请输女生项目总数(0vnv=20)nw=); scanf(%d,&GirlProject); Tota

38、lProject=BoyProject+GirlProject;printf(n请输入男生项目信息n); for(i=1;iv=BoyProject;i+)Project_Ti.number=i; /项目编号 Project_Ti.count=0; printfC 项目编号:dn,i); printfC请输入项目名称:n); scanf(%s,Project_Ti.name); /项目名称printf(n请输入女生项目信息n); for(i=1;iv=GirlProject;i+)Project_T20+i.number=i;printf(项目编号:%dn ,i); /项目编号 printf(

39、请输入项目名称:n);scanf(%s,Project_T20+i.name); /项目名称CreatSchoolLink(head);break;case 2:AddStudent(head);break;case 3:ScoreCount(head);OutPut_Link(head);break;case 4: printf(n请输入学校编号:”);scanf(%d,&a);printf(n请输入项目编号:);scanf(%d,&b);Find_School_Project(head,a,b);break;case 5: printf(n请输入项目编号:);scanf(%d,&c);Find_Project_ID(head,c);break;default:flag=0;十心得体会通过这次的课程设计,感觉自己又学习了很多知识,收获很大,之前上课不懂得相关内容也 逐渐的认识和掌握,对这么课的学习更有兴趣,觉得自己学习这门专业还是很可观的,当遇到困 难时,不能退缩,要迎难而上!要提高自己的编程能力,就必须亲自去体验、去设计、编辑、编 译、调试、运行。之前自己感觉:语言学的还是可以的,可是在实际操作过程中仍然遇到了一系列 问题,每一个程序员都是在失败、尝试、失败、尝试与收获中成长起来的。我以后要做的就是打 好基础,多上机编写和调试程序,在尝试中成长!

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!