数据结构运动会分数统计课程设计
运动会分数统计(数据结构课程设计)python
运动会是学校中一项重要的活动,通过运动会可以增强学生的体质,增进师生之间的情感,同时也能够激发学生的运动热情和团队精神。
而对于运动会的分数统计来说,如何高效、准确地完成这项工作是非常重要的。
本文主要介绍了基于数据结构课程设计的运动会分数统计系统,使用Python语言实现。
二、系统设计1. 数据结构的选择在设计运动会分数统计系统时,需要考虑如何存储和管理参赛队伍和成绩信息。
由于参赛队伍和成绩信息的数量较大,因此需要选择适合高效查询和排序的数据结构。
本系统选择使用Python中的字典(dictionary)和列表(list)来存储和管理数据。
2. 数据的存储在系统中,每支队伍的信息包括队伍编号、队伍名称和各项比赛成绩等。
这些信息可以使用字典来存储,其中队伍编号作为键,队伍信息作为值。
而各项比赛成绩可以使用列表来存储,方便进行排序和统计。
3. 数据的输入为了方便输入参赛队伍和成绩信息,本系统提供了相应的输入界面,用户可以通过界面逐一输入每支队伍的信息。
程序也提供了批量导入功能,用户可以通过导入文件的方式一次性输入所有的参赛队伍和成4. 数据的统计和输出系统可以对输入的成绩信息进行统计和排序,可以按照总分或特定比赛项目的成绩进行排序,并将排名信息输出到文件中。
排名信息包括队伍名称、总分和各项比赛成绩,方便后续的奖励和表彰工作。
三、系统实现1. 数据结构类的设计为了方便对队伍和成绩信息进行管理,本系统设计了队伍(Team)和成绩(Score)两个类,分别用于存储队伍信息和比赛成绩。
2. 主程序的设计系统的主程序主要包括数据的输入、统计和输出三个功能。
用户可以通过交互式界面输入队伍和成绩信息,也可以通过命令行参数进行批量导入。
系统会对输入的成绩信息进行统计和排序,并将排名信息输出到指定的文件中。
3. 界面设计为了方便用户操作,系统提供了简洁清晰的交互式界面。
用户可以通过界面进行数据的输入和操作,也可以查看和导出排名信息。
数据结构课程设计运动会分数统计
数据结构课程设计报告(一)课题一运动会分数统计1. 任务参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w 个女子项目。
项目编号为男子1~m,女子m+1~m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。
(m<=20,n<=20)2. 功能要求1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的学校。
3.需求分析在程序中,用户输入各运动会项目的排名情况,程序会计算出各校的得分情况存储于顺序表中,可供查询。
4.概要设计struct{int order[5]; //项目排名}sub[10];struct{int score; //学校总分int score1; //学校男团总分int score2; //学校女团总分}sch[5];程序调用关系如下:主程序模块成绩输入模块总分输出模块排名查询模块学校情况查询模块项目情况查询模块5.详细设计#include <windows.h>#include<stdio.h>#include<stdlib.h>char SCHOOL[5][13]={"东华大学","上海交大","复旦大学","同济大学","华东师范大学"};char SUBJECT[10][10]={"男子100米","男子200米","男子400米","男子跳高 ","男子跳远","女子跳高","女子跳远","女子铅球", "女子100","女子400米"};int SCORE[2][5]={{7,5,3,2,1},{5,3,2}};struct //存储项目信息{int order[5]; //排名}sub[10];struct //存储学校信息{int score; //学校总分int score1; //学校男团总分int score2; //学校女团总分}sch[5];int menu();void func1(); //输入成绩void calculate(); //计算各校成绩void func2(); //输出各校总分int menu2();void func31(); //按学校编号输出各项成绩void func32(); //排序输出各校总分void func33(); //排序输出各校男团总分void func34(); //排序输出各校女团总分void func4(); //输出学校情况void func5(); //输出项目情况int main(){menu();}int menu(){int n;printf("_______________________________________________________\n");printf(" MENU \n");printf(" 1.输入成绩 \n"); printf(" 2.各校总分 \n");printf(" 3.成绩排序 \n");printf(" 4.学校情况 \n");printf(" 5.项目情况 \n");printf(" 6.退出系统 \n\n");printf(" 请输入编号:");scanf("%d",&n);system("cls");switch(n){case 1:func1();calculate();break;case 2:func2();break;case 3:menu2();break;case 4:func4();break;case 5:func5();break;case 6:return 0;default:menu();}menu();}void func1(){int i;printf("_______________________________________________________\n"); printf(" 请输入各体育项目名次所对学校编号 \n"); printf(" 学校编号(1:东华大学,2:上海交大,3:复旦大学,4:同济大学,5:华东师范大学,0:退出) \n");for(i=0;i<10;i++){printf(" %d.%s 第一名:",i+1,SUBJECT[i]);scanf("%d",&sub[i].order[0]);if(sub[i].order[0]==0)menu();printf("\n 第二名:");scanf("%d",&sub[i].order[1]);if(sub[i].order[1]==0)menu();printf("\n 第三名:");scanf("%d",&sub[i].order[2]);if(sub[i].order[2]==0)menu();if(i%2==0){printf("\n 第四名:");scanf("%d",&sub[i].order[3]);if(sub[i].order[3]==0)menu();printf("\n 第五名:");scanf("%d",&sub[i].order[4]);if(sub[i].order[4]==0)menu();}}system("cls");}void calculate(){int i,j,k;for(i=0;i<5;i++){for(j=0;j<5;j++) //求出各校男团总分{if(j%2==0){for(k=0;k<5;k++){if(sub[j].order[k]==i+1)sch[i].score1=sch[i].score1+SCORE[0][k];}}else{for(k=0;k<3;k++){if(sub[j].order[k]==i+1)sch[i].score1=sch[i].score1+SCORE[1][k];}}}for(;j<10;j++) //求出各校女团总分{if(j%2==0){for(k=0;k<5;k++){if(sub[j].order[k]==i+1)sch[i].score2=sch[i].score2+SCORE[0][k];}}else{for(k=0;k<3;k++){if(sub[j].order[k]==i+1)sch[i].score2=sch[i].score2+SCORE[1][k];}}}sch[i].score=sch[i].score1+sch[i].score2; //求出各校总分}}void func2(){int i;printf("_______________________________________________________\n"); printf(" 各校总分 \n");for(i=0;i<5;i++)printf(" %d.%s %d分\n",i+1,SCHOOL[i],sch[i].score);printf("\n\n输入任意值返回");getch();system("cls");}int menu2(){int n;printf("_______________________________________________________\n");printf(" 成绩排序 \n");printf(" 1.按学校编号 \n"); printf(" 2.按学校总分 \n");printf(" 3.按男团总分 \n");printf(" 4.按女团总分 \n");printf(" 5.返回 \n\n");printf(" 请输入编号:");scanf("%d",&n);system("cls");switch(n){case 1:func31();break;case 2:func32();break;case 3:func33();break;case 4:func34();break;case 5:menu();default:menu2();}return 0;}void func31(){int i;printf("_______________________________________________________\n");printf(" 按学校编号排序 \n");for(i=0;i<5;i++){printf(" %d.%s 学校总分 %d分\n",i+1,SCHOOL[i],sch[i].score);printf(" 男团总分 %d分\n",sch[i].score1);printf(" 女团总分 %d分\n",sch[i].score2);}printf("\n\n输入任意值返回");getch();system("cls");}void func32(){int a[5][2],i,j,p,q,k;printf("_______________________________________________________\n"); printf(" 按学校总分排序 \n"); for(p=0;p<5;p++){a[p][0]=p;a[p][1]=sch[p].score;}for(i=0;i<4;i++) //将各校总分从大到小排序for(j=0;j<4;j++)if(a[i][1]<a[i+1][1]){q=a[i][1];a[i][1]=a[i+1][1];a[i+1][1]=q;k=a[i][0];a[i][0]=a[i+1][0];a[i+1][0]=k;}for(p=0;p<5;p++)printf(" %d.%s %d分\n",p+1,SCHOOL[a[p][0]],sch[p].score); printf("\n\n输入任意值返回");getch();system("cls");}void func33(){int a[5][2],i,j,p,q,k;printf("_______________________________________________________\n"); printf(" 按男团总分排序 \n"); for(p=0;p<5;p++) //将各校男团总分从大到小排列{a[p][0]=p;a[p][1]=sch[p].score1;}for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][1]<a[i+1][1]){q=a[i][1];a[i][1]=a[i+1][1];a[i+1][1]=q;k=a[i][0];a[i][0]=a[i+1][0];a[i+1][0]=k;}for(p=0;p<5;p++)printf(" %d.%s %d分\n",p+1,SCHOOL[a[p][0]],sch[p].score1); printf("\n\n输入任意值返回");getch();system("cls");}void func34(){int a[5][2],i,j,p,q,k;printf("_______________________________________________________\n"); printf(" 按女团总分排序 \n"); for(p=0;p<5;p++) //将各校女团总分从大到小排列{a[p][0]=p;a[p][1]=sch[p].score2;}for(i=0;i<4;i++)for(j=0;j<4;j++)if(a[i][1]<a[i+1][1]){q=a[i][1];a[i][1]=a[i+1][1];a[i+1][1]=q;k=a[i][0];a[i][0]=a[i+1][0];a[i+1][0]=k;}for(p=0;p<5;p++)printf(" %d.%s %d分\n",p+1,SCHOOL[a[p][0]],sch[p].score2);printf("\n\n输入任意值返回");getch();system("cls");}void func4(){int i,j,a,b=0;printf("_______________________________________________________\n"); printf(" 学校情况 \n"); printf("学校编号(1:东华大学,2:上海交大,3:复旦大学,4:同济大学,5: 华东师范大学,0:退出)\n");printf(" 请输入学校编号:");scanf("%d",&i);if(i==0){system("cls");menu();}else{if(i>5||i<0){system("cls");func4();}else{printf("项目编号(1:男子100米,2:男子200米,3:男子400米,4:男子跳高,5:男子跳远\n");printf(" 6:女子跳高,7:女子跳远,8:女子铅球,9:女100,10:女子400米,0:退出)\n\n");printf("请输入项目编号:");scanf("%d",&j);if(j==0){system("cls");menu();}else if(j>10||j<0){system("cls");func4();}else if(j%2!=0)for(a=0;a<5;a++){if(sub[j-1].order[a]==i){printf("\t\t%s %s 第%d",SCHOOL[i-1],SUBJECT[j-1],a+1);break;}}else{for(a=0;a<3;a++){if(sub[j-1].order[a]==i){printf("\t\t %s %s 第%d"SCHOOL[i-1],SUBJECT[j-1],a+1 );b=1;break;}}if(b==0)printf("\t\t %s %s 未获得名次",SCHOOL [i-1],SUBJECT[j-1]);}}}printf("\n\n输入任意值返回");getch();system("cls");}void func5(){int i,j;printf("_______________________________________________________\n"); printf(" 项目情况 \n"); printf(" 项目编号(1:男子100米,2:男子200米,3:男子400米,4:男子跳高,5:男子跳远\n");printf(" 6:女子跳高,7:女子跳远,8:女子铅球,9:女子100米 ,10:女子400米,0:退出)\n");printf(" 请输入项目编号:");scanf("%d",&i);if(i==0){system("cls");menu();}else if(i>10||i<0){system("cls");func5();}else{if(i%2==0)for(j=0;j<3;j++)printf(" 第%d名: %s\n",j+1,SCHOOL[(sub[i-1].order[j])-1]);else for(j=0;j<5;j++)printf("第%d名: %s\n",j+1,SCHOOL[(sub[i-1].order[j])-1]);}printf("\n\n输入任意值返回");getch();system("cls");}6.调试分析1)在函数calculate中,将sub[j].order[k]==i+1中的i+1错写为i,导致各校成绩的统计出错,后面的功能运作出现问题。
数据结构课程设计--运动会成绩管理系统
目录1 需求分析 (1)1.1 问题描述 (1)1.2 基本要求 (1)1.3 测试数据 (1)2 概要设计 (2)2.1 数据结构 (2)2.2 程序模块及之间的调用关系 (2)3 详细设计 (3)3.1 数据类型定义 (3)3.2 函数之间的调用关系 (3)3.3 算法设计 (4)4 测试结果 (5)4.1多组数据输入与输出 (5)5 调试分析 (9)参考文献 (10)附录 (11)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 基本要求(1) 可以输入各个项目的前三名或前五名的成绩;(2) 能统计各系总分,(3) 可以按系编号、系总分、男女团体总分排序输出;(4) 可以按系编号查询系某个项目的情况;可以按项目编号查询取得前三或前五名的系。
1.3 测试数据(1) 输入:进入输入界面,根据提示,输入参赛学校个数,再输入:男子组和女子组个数。
再根据提示的选择菜单1:输入各项中的获奖学校。
(2) 输入:2查看输出结果。
(3) 输入:3查看输出结果。
(4) 输入:4查看输出结果。
(5) 输入:5查看输出结果。
(6) 输入:6查看输出结果。
(7) 输入:7根据提示输入系编号和项目编号。
(8) 输入:8根据提示输入系编号和项目编号。
(8) 输入:9,退出。
2.1 数据结构(1) 学校:代号,男子团体个数和总分,女子团体个数和总分。
(2) 运动项目:项目编号,男子项目,女子项目,前三名,前五名,第一名系的编号,第二名系的编号,第三名系的编号,第四名系的编号,第五名系的编号。
2.2 程序模块及之间的调用关系3.1算法设计主要算法的设计思想:本程序主要是使用数组来实现操作。
数据结构课程设计-运动会分数统计系统
运动会分数统计系统Ø 设计内容1. 任务:参加运动会有n个学校,学校编号为1~n。
比赛分成m个男子项目,和w个女子项目。
项目编号为1~m,女子为m+1~w。
不同的项目取前5名或前3明积分;取前5名的积分为:7、5、3、2、1,前3名的积分分别为:5、3、2;哪些项目取前5名或前3名由学生自己决定。
(m<=20,n<=20)。
2. 功能要求:1) 可以输入各个项目的前3名或前5名的成绩;名的成绩;2) 能统计各个学校总分;能统计各个学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前3或前5名的学校。
名的学校。
Ø 设计思路1. 系统结构设计图运动会SportsMeeting东华University交大University……比赛项目集合SportEvents 项目1 Event项目2 Event…………复旦University运动会分数统计系统结构设计图2. 思路分析1) 从上面的结构设计图来看,隐含地给出了第一个约束条件:每个参赛学校均参加所有的比赛项目。
然而这种设计思路并不符合实际情况,因为每个学校有权利选择参加或不参加某个比赛项目。
加某个比赛项目。
2) 首先,在上述结构图中,比赛项目Event 是最小的数据存储基本单元。
比赛项目集合SportEvents 可以理解为Event 数组,包含了所有的比赛项目。
根据约束,只要有学校University 参加运动会,此学校就包含了一个SportEvents 集合,即为每个学校分配自己的项目成绩单。
有n 个学校报名参加了运动会SportsMee ng ,大会的工作人员根据比赛项目结果统计各个学校的成绩。
赛项目结果统计各个学校的成绩。
因此,因此,这种设计结构有3层包含关系,层包含关系,但是每一部分但是每一部分相互独立,耦合性弱。
运动会分数统计系统数据结构 课程设计 附代码
摘要21世纪是个信息化的时代,现代计算机技术的发展,为各行各业的发展创造了一个全新的时代背景——人们的生活、工作等已经越来越离不开计算机科学的运用,体育作为个人、家庭、社会的一个主要实践领域,大大小小的运动会也在各大中院校中展开,自从计算机科学涉及运动领域后,人们对运动会的管理也从人工的向自动化转变。
运用数据结构的知识解决运动会分数统计的问题,编写一个程序来完成运动会分数统计系统.本程序设计中,可以输入参加运动会的学校编号及项目编号;根据具体情况选择输入参加项目的男女类别和取成绩名次类别;最后选择输入名次;实现数据统计,排序输出,学院及项目查询等功能。
关键词:运动会分数统计程序排序查询目录1 设计内容和要求 (1)1.1具体内容及要求 (1)2.总体设计 (3)2.1系统设计方案 (3)2.2功能模块设计 (3)3.详细设计 (5)3.1数据结构定义 (5)3.2比赛数据输入模块 (6)3.3比赛成绩输出模块 (7)3.3查询比赛成绩模块 (8)4.调试与测试 (10)4.1测试数据 (10)4.1.1 School.txt (10)4.1.2 MatchItem.txt (11)4.1.3 PreNews.txt (12)4.1程序主界面 (12)4.2输入数据 (12)4.3排序输出学校总分 (14)4.4排序输出男子团体总分 (14)4.5排序输出女子团体总分 (15)4.6按学校查询项目数据 (15)4.7按项目查询数据 (16)5.总结 (17)参考文献 (18)致谢..................................................... 错误!未定义书签。
1 设计内容和要求数据结构课程设计是为数据结构课程独立开设的实践性教学环节。
数据结构课程设计对于巩固数据结构知识,加强学生的实际动手能力和提高学生综合素质是十分必要的。
课程设计的目的是要求学生达到熟练掌握C语言的基本知识和技能;了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;提高程序设计和调试能力。
数据结构实验——运动会分数统计
数据结构实验——运动会分数统计数据结构实验——运动会分数统计1.简介本实验旨在设计一个分数统计系统,用于记录和分析运动会比赛的分数。
2.系统需求2.1 功能需求2.1.1 输入运动员信息:包括姓名、年龄、性别等。
2.1.2 输入比赛项目信息:包括项目名称、项目时间、参赛人数等。
2.1.3 输入运动员的比赛成绩:包括项目名称、运动员姓名、成绩等。
2.1.4 统计比赛成绩:根据输入的成绩,计算每个比赛项目的平均成绩、最高成绩、最低成绩等。
2.1.5 查询运动员成绩:根据运动员姓名或项目名称,查询其成绩。
2.1.6 输出成绩报表:将比赛的成绩信息以报表的形式输出。
2.2 性能需求2.2.1 响应时间:系统对用户的请求要求及时响应,保证用户操作的流畅性。
2.2.2 稳定性:系统需要稳定运行,不易崩溃或出现错误。
2.2.3 可扩展性:系统需要支持添加新的运动员信息和比赛项目,能够适应不同规模和类型的运动会。
3.系统设计3.1 数据结构设计3.1.1 运动员信息结构:包括姓名、年龄、性别等属性。
3.1.2 比赛项目信息结构:包括项目名称、项目时间、参赛人数等属性。
3.1.3 成绩信息结构:包括项目名称、运动员姓名、成绩等属性。
3.2 系统模块设计3.2.1 运动员管理模块:负责录入和查询运动员信息。
3.2.2 项目管理模块:负责录入和查询比赛项目信息。
3.2.3 成绩管理模块:负责录入和统计比赛成绩。
3.2.4 报表输出模块:负责将比赛成绩以报表的形式输出。
4.系统实现4.1 编程语言:选择合适的编程语言进行开发。
4.2 开发环境:搭建适合的开发环境,包括编译器、集成开发环境(IDE)等。
4.3 数据库设计:设计合适的数据库结构,用于存储运动员信息、比赛项目信息和成绩信息。
4.4 界面设计:设计友好的用户界面,方便用户进行操作。
4.5 测试和调试:对系统进行全面的测试和调试,以保证系统的稳定性和正确性。
5.法律名词及注释5.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.课程设计题目:运动会分数统计。
课程设计运动会分数统计
课程设计运动会分数统计数据结构课程设计课程名称数据结构课程设计专业计算机科学与技术(网络工程)班级学生姓名学号设计题目运动会分数统计指导教师设计起止时间: . 6.18- .6.29数据结构课程设计任务书学院计算机科学与技术(网络工程)专业课程设计题目运动会分数统计学生姓名学号班级起止日期 -06-18至 -06-29指导教师发任务书日期 6月 10日一.课程设计题目:运动会分数统计二.设计要求:本课程设计要求学生一人一题,个人独立完成。
设计中使用到以下知识点:(1)线性结构基本算法实现(2)图形结构基本算法实现(3)查找基本算法实现该课程设计提交的文档包括以下内容:(1)问题描述(2)基本要求(3)算法思想(4)模块划分:包括一些必要的流程图.(5)数据结构(6)源程序(7)测试例子及结果分析(8)心得体会三.设计内容和步骤:(1)任务:参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20),按要求实现相应的数据输入、查询、计分等功能。
(2)基本要求:1) 能够输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 能够按学校编号、学校总分、男女团体总分排序输出;4) 能够按学校编号查询学校某个项目的情况;5) 能够按项目编号查询取得前三或前五名的学校。
(3)测试数据1)首先进入成绩录入界面,先输入学校编号1,再输入学校1各个项目成绩0或1(‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次);然后再输入第二个学校编号2,再输入成绩;当输入其它的学校编号和成绩会提示错误输入,重新输入。
2)然后进入总目录,输入:1 统计各学校总分并输出;3)输入:2 按学校编号排序输出;4)输入:3 按学校总分排序输出;5)输入:4 按男团体总分排序输出;6)输入: 5 按女团体总分排序输出;7) 输入:6 按学校编号查询学校某个项目情况;8)输入:7 按项目编号查询取得名次的学校;9)输入:0 退出系统;10)输入其它数据会提示错误输入,重新输入。
运动会分数统计(数据结构课程设计)
运动会分数统计(数据结构课程设计)
在现代社会,竞技运动会已经成为一项重要的社会活动,对学生和参
赛者都有重要的意义。
计算机技术在现代社会中有重要的作用,特别
是数据结构理论,它能够有效地提高竞赛的效率和准确性,从而更好
地服务于社会的发展。
最近,我参加了一次数据结构课程的设计,以
实现一种竞技运动会的分数统计功能。
计算机科学中的数据结构和算法理论,可以用来存储、排序、检索等
是必不可少的。
这项课程设计,主要是利用链表和堆栈的数据结构来
存储竞赛数据,并利用递归算法来进行排序,以便快速检索想要的结果。
我分解了该项设计过程,先根据运动项目分层链表,以存储每个
运动项目及其分数;然后根据不同项目要求,采用递归或非递归算法
来排序;最后,利用堆栈的数据结构,将得分按从高到低的形式输出。
在本项目完成后,可以更加有效地实现竞技运动会的分数统计,提高
评审效率和结果准确性。
通过运用数据结构和算法理论,使我更加深
入地了解了计算机科学和编程领域的应用,让我拥有了更多的实用技能,在未来的工作中发挥着强有力的作用。
数据结构 课程设计 运动会计分(C语言)
1.问题描述纸质的运动会分数信息统计无法满足人们对信息处理的需求,包括信息查找,排名等各方面信息处理人工处理很慢,严重影响运动会进程,“运动会分数统计系统”是为了帮助人们更快更准确的处理信息。
2.需求分析(1)输入学校基本信息(2)输入项目基本信息(3)输入运动员比赛信息(4)统计运动员信息(5)对同一项目运动员排名(6)对各学校总分排名(7)按学校编号、学校总分、男女团体总分排序输出(8)可对某项目进行修改3.主界面设计为了实现运动会分数统计系统各功能的管理,设计一个含有多个菜单项的主控菜单子程序一链接系统的各项子功能,方便用户使用本系统。
主界面如下:4.存储结构设计本系统主要采用数组结构体类型来表示存储在“运动会分数统计系统”中的信息。
第一个结构体为学校信息包括学校名、学校编号、学校参加比赛运动员获奖积分男子总积分、女子总积分。
第二个结构体为项目属性项目编号、项目名第三个结构体为运动员信息运动员排名、运动员编号、运动员姓名、参加项目编号、积分、学校编号、学校名。
5.系统功能设计(1)输入残社学校数量、男子项目数、女子项目数(2)输入学校编号和学校名字(3)输入项目编号、项目名字(4)输入结束项目编号、选取项目获奖名次、输入获奖的运动员姓名所在学校运动员积分(5)按学校编号排序输出可以一次输出所有参赛学校信息(6)按学校总分排序输出可以按学校运动员总分排序输出(7)按学校男运动员总分排序输出(8)按学校女运动员总分排序输出(9)查询某个项目成绩可以通过项目编号查询运动员成绩(10)修改某项项目获奖名单可以对项目中的获奖运动员进行修改(11)显示运动会上统计的信息6.模块设计本模块包含两个模块 主程序模块和数据结构操作模块 主程序模块7.系统子程序功能设计(1)Ssum(school sa[],athlete sb[][M]) / /统计学校分数 (2)print(school c[],int i){//学校相关信息输出 (3)snorder(school c[]){//按学校编号排序 (4)saorder(school c[])//按学校总分排序 (5)sforder(school c[])//按学校女子总分排序 (6)smorder(school c[])//按学校男子总分排序(7)Snoquery(school sb[],athlete sa[][M])//按学校编码查询 (8)Pnorder(athlete d[][M])//按项目编号查询排名(9)udefine(athlete a[][M],school b[])//修改项目获奖运动员 (10) menu(school b[],athlete sa[][M])//菜单选项 (11)main(int argc, char* argv[])8.本系统10个子程序之间的主要调用关系图9.数据类型定义typedef struct {//运动员属性 int arank;//排名 int No; //编号char Name[20];//姓名int Pno; //参加项目编号数据结构操作模块Main()1103 47568921222int grade;//成绩int Sno; //学校编号char Sna[20];//学校名字}athlete;typedef struct{//学校属性int No; //学校编号char Name[20];//学校名字int Msum; //男运动员总分int Fsum; //女运动员总分int Fnum; //输出标记int Pnum; //项目种类}school;typedef struct{//项目属性int No; //项目编号char Name[20];//项目名}project;10.系统子函数部分详细设计void Ssum(school sa[],athlete sb[][M])//统计学校分数{int i,j,k;for(i=0;i<n;i++){sa[i].Fsum=0;sa[i].Msum=0;//初始化总分。
运动会分数统计课程设计
运动会分数统计课程设计一、课程目标知识目标:1. 学生能理解并掌握运动会分数统计的基本概念和方法。
2. 学生能运用所学知识,正确进行运动会各项比赛的分数统计。
3. 学生了解并掌握运用图表进行数据展示和分析的方法。
技能目标:1. 学生能熟练运用加减乘除运算进行分数统计。
2. 学生能运用信息技术工具(如Excel等)进行分数的录入、统计和图表制作。
3. 学生具备分析数据、发现问题和解决问题的能力。
情感态度价值观目标:1. 学生培养对数学学科的兴趣,认识到数学在实际生活中的应用价值。
2. 学生培养合作意识,学会与他人共同完成数据统计和分析任务。
3. 学生在分数统计过程中,培养公平、公正、客观的态度,增强诚信意识。
课程性质:本课程为数学学科的教学内容,结合实际生活中的运动会分数统计案例,以提高学生的实际操作能力和数据分析能力。
学生特点:四年级学生具备一定的数学基础和运算能力,对实际生活中的问题充满好奇心,但可能缺乏数据分析的经验。
教学要求:结合学生特点,注重实践操作,让学生在实际操作中掌握知识,提高技能。
同时,关注学生的情感态度培养,使其在课程学习中形成正确的价值观。
通过分解课程目标为具体的学习成果,为后续教学设计和评估提供依据。
二、教学内容1. 理解运动会分数统计的基本概念,包括个人得分、团体得分、总分等。
- 教材章节:数学课本第四章“数据的收集与整理”2. 学习加减乘除在分数统计中的应用。
- 教材章节:数学课本第二章“四则运算”3. 掌握运用图表进行数据展示和分析的方法。
- 教材章节:数学课本第四章“数据的收集与整理”中的图表制作部分4. 实践操作:运动会分数统计实例分析。
- 教学安排:课堂讲解与实际操作相结合,分小组进行数据统计和分析。
详细教学大纲:第一课时:介绍运动会分数统计的基本概念,讲解个人得分、团体得分、总分的计算方法。
第二课时:运用加减乘除运算进行分数统计,结合实例进行讲解和练习。
第三课时:学习图表制作方法,展示和分析运动会分数数据。
数据结构实验——运动会分数统计
运动会分数统计一、需求分析1、本演示程序中,可以输入参加运动会的学校编号及项目编号,学校编号要求为1~N,男子比赛项目编号要求为1~M,女子比赛项目编号要求为M+1~M+W;根据具体情况选择输入参加项目的男女类别和取成绩名次类别;最后选择输入名次。
2、演示程序以用户和计算机对话方式进行,即在计算机终端上显示提示信息之后,由用户输入进行查询成绩的操作:①产生各学校的成绩单,包括:各学校所取得的每项成绩的项目号、名次(成绩)、姓名和得②产生团体总分报表,内容包括校号、男子团体总分、女子团子总分和团体总分,然后进行数据保存操作。
3、本程序执行命令包括:1)输入比赛数据2)查询相关记录3)显示各学校的成绩单4)显示各校团体总分报表4、测试数据N=4,M=3,W=2,编号为奇数的项目取前五名,为偶数的项目取前三名。
具体数据如下:输入学校编号:1 2 4输入项目编号:1 3 2性别选择:男女男取成绩名次:前3名前5名前3名名次选择:第1名第4名第2名二、概要设计1.程序中所有数据类型有:int , struct , char , struct * , struct[] , char[];2.整形定义nsc——学校总数msp——男子项目总数wsp——女子项目总数ntsp——项目总数serial——学校编号item——得分项目range——得分名次score——得分成绩overgame——已结束的项目编号menscore——男子团体总分womenscore——女子团体总分totalscore——校团体总分3.本程序包含六个模块:1)主程序模块main ( ){初始化;If(“命令”=“输入”){判断数据是否合法;接受输入数据;数据处理运算;}If(“命令”=“查询”){接受具体指令;显示相应数据;}}2)Input()——比赛结果录入3)Cout()——范围判断4)School()——各学校取得成绩细表5)Overall()——各校男、女及总团体总分6)Calculate()——数据处理4.程序流程图如下:三、详细设计1.元素类型、变量、指针类型struct athletestruct /*参赛运动员*/{char name[20];char xingming[20]; /*姓名*/int score; /*得分成绩*/int range; /*得分名次*/int item; /*得分项目*/};struct schoolstruct /*参赛学校*/{int count; /*计算实际运动员个数*/int serial; /*学校编号*/int menscore; /*男子团体总分*/int womenscore; /*女子团体总分*/int totalscore; /*团体总分*/struct athletestruct athlete[MaxSize]; /*参赛运动员*/struct schoolstruct *next; /*参赛学校*/};int nsc,msp,wsp; /*实际参赛学校个数,男子、女子项目*/ int ntsp; /*项目总数*/int i,j; /*循环控制变量*/int overgame; /*已结束的项目编号*/int serial,range; /*获奖的学校编号 & 获奖名次*/int n; /*用来判断项目类型(奇&偶)*/struct schoolstruct *head,*pfirst,*psecond; /*用于开辟存储区域*/int *phead=NULL,*pafirst=NULL,*pasecond=NULL; /*用于项目数组指针*/2.输入模块,建立链表,然后存储数据。
运动会分数统计课程设计
运动会分数统计课程设计一、课程目标知识目标:1. 学生能理解运动会分数统计的基本概念,掌握分数的加、减运算方法。
2. 学生能运用统计图表整理、描述和比较数据,了解不同项目的得分情况。
3. 学生掌握运用数学知识解决实际问题的方法,提高数据分析能力。
技能目标:1. 学生能运用计算器或手工计算方法,准确进行分数的加减运算。
2. 学生能运用图表软件(如Excel)制作和解读统计图表,展示运动会分数数据。
3. 学生通过小组合作,提高沟通、协作和解决问题的能力。
情感态度价值观目标:1. 学生在分数统计过程中,培养认真、细心的学习态度,增强对数据的敏感性和分析意识。
2. 学生通过参与运动会分数统计,提高对数学学习的兴趣,认识到数学在生活中的实际应用。
3. 学生在小组合作中,学会尊重他人,培养团队精神和公平竞争意识。
4. 学生通过分析运动会分数,培养积极参与体育活动的热情,增强集体荣誉感。
课程性质:本课程为数学学科与体育活动的结合,以实践性、应用性为主。
学生特点:学生处于小学高年级阶段,具备一定的数学基础和体育活动经验,对新鲜事物充满好奇心,喜欢动手实践。
教学要求:结合学生特点,注重启发式教学,引导学生主动参与,培养其动手操作、观察分析、解决问题的能力。
同时,关注学生的情感态度价值观培养,提高综合素质。
通过对课程目标的分解和实现,使学生在实践中掌握知识,提高技能,培养正确的价值观。
二、教学内容1. 理论知识:- 分数的概念及加减法运算规则;- 统计图表的类型及制作方法,如条形图、折线图、饼图;- 数据整理与分析的基本方法。
2. 实践操作:- 运用分数加减法进行运动会分数计算;- 制作并解读运动会分数统计图表;- 小组合作,完成运动会分数统计报告。
3. 教学大纲安排:- 第一课时:分数的概念及加减法运算复习,介绍统计图表的基本类型;- 第二课时:运动会分数统计方法讲解,学生分组进行数据收集与整理;- 第三课时:小组合作制作统计图表,进行分数计算和分析;- 第四课时:各小组展示成果,师生共同评价,总结分数统计方法。
数据结构课程设计---运动会分数统计系统
数据结构课程设计运动会分数统计一.需求分析1问题描述运动会分数统计参加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w 个女子项目。
项目编号为男子1~m,女子m+1~m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些项目取前五名或前三名由学生自己设定。
(m<=20,n<=20)2. 基本要求:1) 可以输入各个项目的前三名或前五名的成绩;2) 能统计各学校总分;3) 可以按学校编号、学校总分、男女团体总分排序输出;4) 可以按学校编号查询学校某个项目的情况;5) 可以按项目编号查询取得前三或前五名的学校。
3.测试数据1)首先进入成绩录入界面,先输入学校编号1,再输入学校1各个项目成绩0或1(‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次); 然后再输入第二个学校编号2,再输入成绩;当输入其他的学校编号和成绩会提示错误输入,重新输入。
2)然后进入总目录,输入:1 统计各学校总分并输出;3)输入:2 按学校编号排序输出;4)输入:3 按学校总分排序输出;5)输入:4 按男团体总分排序输出;6)输入: 5 按女团体总分排序输出;7) 输入:6 按学校编号查询学校某个项目情况;8)输入:7 按项目编号查询取得名次的学校;9)输入:0 退出系统;10)输入其他数据会提示错误输入,重新输入。
二、概要设计1 结构体运动项目{ 项目编号;名次;};学校{ 学校编号;项目;团体总分;男团体总分;女团体总分;};2 主程序(main)包括登陆欢迎程序,分数录入程序,查询程序,退出程序3 程序模块机之间的调用关系流程图三、详细设计1、宏定义:#define N 2启动程序录入分数显示主目录统计各学校总分按学校编号排序按学校总分排序按女团体总分排按学校编号查询学校某个项目情况按男团体总分排按项目编号查询取得名次的学校退出系统用户选择某命令,产生相应的操作显示结果,用户选择返回主目录或退出退出程序#define bm 4 #define gm 32、数据类型定义(1)运动项目的定义:struct match {int matchnum; int rank[3]; }mat[bm+gm];(2)学校的定义:struct school { int schoolnum;struct match mat[bm+gm]; int total; int boytotal;int girltotal;}sch[N];3、函数之间的调用关系mainxunhuantotaljisuainputhuanyingni funct4 funct6 funct5funct3 funct2 funct1 funct0 mulu funct7system4、算法设计主要算法的设计思想:本程序主要是使用顺序表来实现操作。
运动会分数统计数据结构报告
运动会分数统计数据结构报告一、概述本报告主要介绍了运动会分数统计系统的数据结构。
运动会分数统计系统需要对运动员的各项比赛成绩进行记录、统计和分析,以便为比赛组织者和运动员提供全面、准确的数据支持。
为了实现这一目标,我们设计了一个合理的数据结构,以存储和处理运动会分数数据。
二、数据结构设计1. 运动员信息表字段名称字段类型字段含义运动员ID INT 唯一标识运动员的编号姓名 VARCHAR(50) 运动员的姓名性别 CHAR(1) 运动员的性别(男/女)年龄 INT 运动员的年龄所属单位 VARCHAR(100) 运动员所属的单位或学校名称2. 比赛项目表字段名称字段类型字段含义项目ID INT 唯一标识比赛项目的编号项目名称 VARCHAR(50) 比赛项目的名称项目类型 VARCHAR(50) 比赛项目的类型(田径、游泳、篮球等)项目难度系数 FLOAT 比赛项目的难度系数,用于计算总成绩时进行加权处理3. 比赛成绩表字段名称字段类型字段含义成绩ID INT 唯一标识比赛成绩的编号运动员ID INT 与运动员信息表相关联的外键,标识产生该成绩的运动员项目ID INT 与比赛项目表相关联的外键,标识该成绩所属的比赛项目成绩时间戳 TIMESTAMP 该成绩的记录时间(精确到秒)成绩分数 FLOAT 该成绩对应的分数值(根据项目难度系数计算得出)三、数据结构特点1. 分层设计:数据结构分为三个层次,分别是运动员信息层、比赛项目层和比赛成绩层,各层之间通过外键关联,便于进行数据查询和更新操作。
2. 数据完整性:通过外键关联确保了数据的完整性,即一个运动员只能对应一个成绩记录,一个成绩只能对应一个比赛项目。
3. 可扩展性:数据结构设计考虑了未来可能增加的字段和表,例如可以增加教练信息表、领队信息表等,便于对数据进行扩展和补充。
4. 数据灵活性:数据结构设计允许对字段进行灵活调整,例如可以根据需要增加或删除某些字段,以适应实际需求的变化。
数据结构实验——运动会分数统计
数据结构实验——运动会分数统计数据结构实验——运动会分数统计第一章实验目的本实验旨在通过使用数据结构来统计运动会各项目的成绩并进行排序和排名,以便于全面了解运动会的整体情况。
第二章实验要求1.实现一个数据结构来存储运动员的成绩和相关信息。
2.实现成绩的输入、排序和排名功能。
3.输出排序后的成绩和排名信息。
4.分析算法的时间和空间复杂度。
第三章实验内容1.数据结构定义a.运动员信息结构体:________包含姓名、项目、成绩等相关数据。
b.运动员链表结构:________用于存储运动员信息的链表,包含头指针和尾指针。
2.运动员信息录入a.从文件读取运动员信息,并存储到链表中。
b.实现手动输入运动员信息的功能,存储到链表中。
3.成绩排序a.实现冒泡排序算法对成绩进行排序。
b.实现选择排序算法对成绩进行排序。
c.实现快速排序算法对成绩进行排序。
4.成绩排名a.根据排序结果,给每个运动员分配一个排名。
5.统计结果输出a.输出排序后的成绩和排名信息。
b.输出各项项目的成绩统计信息。
第四章实验步骤1.定义运动员信息结构体。
2.定义运动员链表结构。
3.实现从文件读取运动员信息的功能。
4.实现手动输入运动员信息的功能。
5.实现冒泡排序算法。
6.实现选择排序算法。
7.实现快速排序算法。
8.实现成绩排名的功能。
9.实现输出排序后的成绩和排名信息的功能。
10.实现输出各项项目的成绩统计信息的功能。
第五章实验结果分析1.分析冒泡排序算法的时间和空间复杂度。
2.分析选择排序算法的时间和空间复杂度。
3.分析快速排序算法的时间和空间复杂度。
4.分析整个程序的时间和空间复杂度。
第六章实验附件附件1:________运动员信息示例文件附件2:________运动员信息录入示例文件第七章法律名词及注释1.数据结构:________数据的组织和存储方式,包括数组、链表、树等。
2.冒泡排序:________通过比较两个相邻元素的大小来交换位置,从而达到排序的目的。
数据结构课程设计-运动会分数统计(C语言版)
数据结构课程设计-运动会分数统计(C语⾔版)⽬录第⼀章绪论 (1)1.1 运动会分数统计系统的背景 (1)1.2 运动会分数统计系统的任务和⽬标 (1)第⼆章运动会分数统计系统的需求分析 (2)2.1 功能需求 (2)2.2 功能模块 (2)2.3 数据要求 (3)2.4 性能要求 (3)第三章系统开发⼯具及关键技术 (4)3.1 系统开发⼯具 (4)3.1.1 CodeBlocks (4)3.2 关键技术 (4)3.2.1 C语⾔ (4)3.2.2 数组 (4)3.2.3 链表 (4)第四章运动会分数统计系统的实现 (5)4.1 数据结构设计 (5)4.2 结构定义 (5)4.3 系统界⾯的实现 (6)4.3.1 主菜单窗⼝ (6)4.3.2 输⼊各个项⽬成绩并存储⽂件 (6)4.3.3 统计各学校总分 (8)4.3.4 按学校编号排序输出 (8)4.3.5 按学校总分排序输出 (8)4.3.6 按男团体总分排序输出 (9)4.3.7 按⼥团体总分排序输出 (9)4.3.8 按学校编号查询学校某个项⽬情况 (10)4.3.9 按项⽬编号查询取得名次的学校 (10)第五章结束语 (11)5.1 课程设计总结 (11)5.2 致 (11)参考⽂献 (12)附录 (13)第⼀章绪论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.可以按学校编号查询学校某个项⽬的情况;可以按项⽬编号查询取得前三或前五名的学校。
数据结构课程设计运动会分数统计
班级 :姓名:学号日期课题一运动会分数统计一. 需求剖析:1.任:参加运会有 n 个学校,学校号 1⋯⋯ n。
比分红 m个男子目,和 w个女子目。
目号男子1~ m,女子 m+1~m+w。
不一样的目取前五名或前三名分;取前五名的分分:7、5、3、2、1,前三名的分分:5、3、2;哪些目取前五名或前三名由学生自己定。
(m<=20,n<=20).2 。
功能要求:1)能够入各个目的前三名或前五名的成;2)能各学校分;3)能够按学校号、学校分、男女体分排序出;4)能够按学校号学校某个目的状况;5)能够按目号获得前三或前五名的学校。
3.程序行的命令包含:1)入所需要的各数据2)成行排序3)找成 4)退出束4.数据:入五个学校的名字 : ,上外,外,,工技大入四个体育目:球,游泳,足球,拉松。
入球前五名的学校代排名状况: 1 3 5 2 4入游泳前三名学校代排名状况: 1 2 3入足球前三名学校代状况: 1 4 2入拉松前三名的学校代排名状况: 1 5 3二.纲要设计:了上述程序需要使用要串和性表,所以需要两个抽象数据型:串和性序表。
1.串的抽象数据型的定以下:ADT String{数据象: D={a |ai ∈ characterSet,I=1,2, ⋯⋯, n,n>=0}i数据关系: R1={<a i-1, a i >|a i-1 ,a i∈D,I=2, ⋯⋯, n}基本操作:StrAssign(&T,chars)初始条件: chars 是字符串常量。
操作果:生成一同等于chars 的字符串 T.StrCopy(&T,s)初始条件 :串S存在操作果:由串复制得串T.StrEmpty(s)初始条件 :串S存在。
操作果:若 S 空串,返回 TRUE,否返回 FALSE. Strcompare(S,T)初始条件:串 S 和 T 存在。
操作果 : 若 S>T,返回 >0; 若 S=T,返回 =0, 若 S<T,返回 <0. Strlength(S)初始条件 :串S存在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计目录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.任务:加运动会有n个学校,学校编号为1……n。
比赛分成m个男子项目,和w个女子项目。
项目编号为男子1……m,女子m+1……m+w。
不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。
(m<=20,n<=20)3.问题分析:1)、每个学校有运动员要参加运动项目,故存储结构要有三个,项目结构体,学生信息结构体和学校链表。
每个结点存储一个学校,每个学校可以有多名运动员参加运动项目。
由此,存储结构就建立了。
2)、要求不同的项目根据具体情况取去前五名或前三名积分,则可以设定标准,即当参加某项目的运动员数等于或多于五人时,就取该项目的前五名进行积分,取前五名的积分分别为:7,5,3,2,1。
当参加某一项目的人数少于五人时,则去该项目的前三名进行积分,去取前三名的积分分别为:5,3,2。
3)、要求能统计学校的总分,并可以按学校编号输出每个学校的参赛信息及每个学校每个运动员的信息和所有运动项目清单。
以上这些功能可以通过遍历学校链表来实现。
4)、要求可以学校编号查询学校某个项目的情况,用户输入学校编号和项目编号,通过遍历学校链表即可实现。
5)、要求可以按编号查询取得前三或前五名的学校,用户输入要查询的项目的编号,通过遍历学校链表即可实现。
6)、设置菜单函数menu(),产生用户界面。
规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称输出形式:有中文提示,各学校分数为整形界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。
存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。
进行程序测试,以保证程序的稳定。
1.2 基本任务通过用户调查分析及实际需求,系统需要实现如下基本任务:1).输入各个项目的前三名或前五名的成绩;2).统计各学校总分;3).按学校编号或名称、男女团体总分排序输出;4).按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。
数据存入文件并能随时查询。
二.概要设计为了完成需求分析的基本任务,主要从以下3个方面进行设计:2.1 主界面设计为了实现运动会分数统计的各项功能,设计了一个含有多个菜单项的主控菜单模块以链接系统的各项功能,以方便用户使用系统。
系统主控菜单运行界面如图1所示:图1 运动会分数统计主菜单2.2 数据结构设计系统采用数据的存储结构定义:运动项目结构体、运动员信息结构体、学校链表此外,还定义了一些全局变量:学校总数SchoolCount、男生项目总数BoyProject、女生项目总数GirlProject、项目总数TotalProject、项目表Project_T[41]。
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 &head);⑹.输出参赛结果:void OutPut_Link(School head);(7).添加学生数据:void AddStudent(School &head);(8).菜单函数:int menu();(9).主函数:int main();三.模块设计3.1 模块设计系统主要包含主程序模块和其它链表操作模块。
其调用关系如图2所示。
图2 模块调用示意图3.2 系统子模块及其功能设计系统设计了8个子功能模块,8个子功能模块的描述如下:⑴.创建学校的链表: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 &head);⑹.输出参赛结果:void OutPut_Link(School head);(8).添加学生数据:void AddStudent(School &head);(8).菜单函数:int menu();3.3 系统模块之间的调用关系系统的10个子模块之间的主要调用关系如图3所示:图3 系统函数调用关系图四.详细设计4.1 数据结构设计系统采用线性表的链式存储结构存储学校信息。
结点定义如下:typedef struct SchoolNode{int number;//学校编号char name[10];int count;//运动员人数int boyscore;//男子团体总分int girlscore;//女子团体总分int totalscore;//团体总分int jifen;//积分Student students[20];//参赛学生struct SchoolNode *next;}SchoolNode,*School;4.2 系统主要模块设计(1)创建学校链表算法思想及程序代码:void CreatSchoolLink(School &head){//创建学校的链表School p;int i;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;p->count=0;p->boyscore=0;p->girlscore=0;p->totalscore=0;p->jifen=0;}p->next=NULL;//使指针指向空head=head->next;//头指针后移}(2)添加获奖学生函数程序代码:void AddStudentLink(School &head){//添加获奖学生School L,p;int School_ID; //学校编号char StudentName[20]; //学生姓名int sex;//性别int Project_ID; //项目编号int score; //成绩int ranking; //名次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;}else L=L->next;}}(3)按学校项目查询前三名和前五名学校函数程序代码:void Find_Project_ID(School &head,int Project_ID){ //按项目编号查询取得前三或前五名的学校。