运动会分数统计数据结构课程设计(含源代码)

合集下载

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

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

班级: 姓名:学号日期课题一运动会分数统计一.需求分析: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={ai |ai∈characterSet,I=1,2,……,n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai∈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存在。

运动会分数统计___(实验报告+源程序)C++

运动会分数统计___(实验报告+源程序)C++

实验报告1实验名称:数据结构与软件设计实习题 目:运动会分数统计专业:生物信息学 班级:01 姓名: 学号:实验日期:2010.07.22一、 实验目的:掌握基本的输入输出方法,理解程序的分支结构,实现条件判断和循环程序的设计;掌握结构体的应用;二、 实验要求:生各学院的成绩单,包括各学院所取得的项目号、名次(成绩)、学生姓名(或学号)和得分;产生团体总分报表,包括学院号、男子团体总分、女子团体总分和团体总分。

二、 实验内容:参加运动会的的学院编号为1~n,比赛分成m 个男子项目和w 个女子项目,编号分别为1~m 和m+1~m+w ,所有项目都取前五名,得分顺序为7,5,3,2,1。

写一个统计程序产生各种成绩单和得分报表。

通过编程解决一些实际问题,并对程序进行测试,可设n=4,m=3,w=2进行测试,一般考虑n ≤20,m ≤30,w ≤20,姓名长度不超过20个字符,按名次顺序输入运动员姓名、学院名和成绩。

四、实验编程结果或过程:1. 数据定义(1)描述运动员的线性表typedef struct { int item[MAXSIZE]; //参赛项目号 char thletename[MAXSIZE][20];//姓名 char sex[MAXSIZE];//性别 int schoolnum[MAXSIZE];//所在学校编号 int num[MAXSIZE];//名次int last;}student; (2)描述学院的线性表typedef struct { int schoolnum[MAXSIZE];//学校编号 int Tgirl[MAXSIZE];//女生团体总分 int Tboy[MAXSIZE];//男生团体总分 int Tall[MAXSIZE];//学校总成绩 int last;2.初始化函数控制输入的函数算分的函数控制输出成绩的函数3. 运行测试结果,运行结果无误,如下图错误调试,能够正确处理错误,如下图调试分析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)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. 任务:参加运动会有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语言的基本知识和技能;了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;提高程序设计和调试能力。

课程设计运动会分数统计

课程设计运动会分数统计

课程设计运动会分数统计数据结构课程设计课程名称数据结构课程设计专业计算机科学与技术(网络工程)班级学生姓名学号设计题目运动会分数统计指导教师设计起止时间: . 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++)

数据结构课设 运动会分数统计(c++)

学号********数据结构课程设计设计说明书运动会分数统计起止日期:2011年1月10 日至2011 年1月15日学生姓名李翔班级08计算机2班成绩指导教师(签字)电子与信息工程系2011年1 月15 日目录目录一、设计目的 (1)二、设计要求 (1)三、设计内容(运动会分数统计查询系统) (1)(一)需求分析 (1)(二)概要设计 (2)(三)详细设计(源代码) (4)(四)测试数据及运行结果 (20)四、运行环境 (29)五、参考文献 (29)一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。

凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。

三、设计内容(运动会分数统计查询系统)(一)需求分析1.在该程序中,参赛学校编号为1~n(n<=20)。

比赛分成m(m<=30)个男子项目和w(w<=20)个女子项目,分别编号为1~m和m+1~m+w,姓名长度不超过20个字符;2.输入各个项目信息的详细信息,包括项目号,姓名,性别,学校和名次。

3.对于项目编号可以取前五名,得分顺序为7,5,3,2,1;亦可以取前三名,得分顺序为5,3,2,具体怎样取名次可以由用户自己定义。

4.程序执行的命令包括:1)构造线性表的存储结构(简单一维线性表,广义二维表)。

具体包括:(1)运动会项目加初始化(2)录入运动会中各学校的成绩(3)计算各学校详细成绩以及排名可以将以上信息存储在线性表中(一维,二维)2)根据每个学生的名次确定相应的得分。

3)可以分别按男子团体总分,女子团体总分和团体总分降序输出各学校的成绩。

运动会比赛计分系统源代码

运动会比赛计分系统源代码

#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#define LEN sizeof(struct athlete)#define FORMAT "%-8d%-15s%-6s%-12s%-10.2f%-10.2f%-10.2f%-10.2f\n"#define DATA member[i].num,member[i].name,member[i].sex,member[i].faculty,member[i].run,member[i].bas ketball,member[i].football,member[i].totalstruct athlete //定义运动员信息{int num; //编号char name[15]; //运动员姓名char sex[6]; //运动员性别char faculty[12] ; //运动员所在院系float run; //跑步分数float basketball; //篮球分数float football; //足球分数float total; //该运动员总分数};struct athlete member[50]; //定义结构体数组void menu(); //主界面void in(); //录入运动员信息void show(); //显示运动员信息void del(); //删除运动员信息void modify(); //修改运动员信息void total(); //计算某一运动员的总分void search(); //查找运动员信息int main(){int n;menu();scanf("%d",&n); //输入数字选择功能while(n){switch(n){case 1:in(); //调用录入运动员信息函数break;case 2:search(); //查找运动员信息函数break;case 3:del(); //调用删除运动员信息函数break;case 4:modify(); //调用修改运动员信息函数break;case 5:total(); //调用汇总函数break;default:break;}printf("按任意键返回主菜单:\n");getch();menu(); //执行完功能再次显示菜单界面scanf("%d",&n);}return 0;}void menu(){system("cls");printf("|-------------------------------------------------------------------------------|\n");printf("|--------------------------------运动会比赛计分系统-----------------|\n");printf("| 0. 退出|\n");printf("| 1. 录入信息|\n");printf("| 2. 查找信息|\n");printf("| 3. 删除信息|\n");printf("| 4. 修改信息|\n");printf("| 5. 统计信息|\n");printf("|-------------------------------------------------------------------------------|\n");printf("选择(0-5):");}void in() //录入运动员信息{int i,m=0;char ch[2];FILE *fp;if((fp=fopen("运动会比赛计分系统","ab+"))==NULL){printf("不能打开文件!\n");return;}while(!feof(fp)){if(fread(&member[m] ,LEN,1,fp)==1)m++; //统计当前记录条数}fclose(fp);if(m==0)printf("没有找到!\n");else{//system("cls");show(); //调用show函数,显示原有信息}if((fp=fopen("运动会比赛计分系统","wb"))==NULL){printf("不能打开文件!\n");return;}for(i=0;i<m;i++)fwrite(&member[i] ,LEN,1,fp); //向指定的磁盘文件写入信息printf("是否输入?(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要录入新信息{printf("编号:");scanf("%d",&member[m].num); //输入运动员编号for(i=0;i<m;i++)if(member[i].num == member[m].num){printf("该记录已经存在,按任意键继续!");getch();fclose(fp);return;}printf("运动员姓名:");scanf("%s",member[m].name); //输入运动员姓名printf("请输入性别:");scanf("%s",member[m].sex); //输入性别printf("请输入院系:");scanf("%s",member[m].faculty); //输入院系printf("请输入跑步分数:");scanf("%f",&member[m].run); //输入跑步分数printf("请输入篮球分数:");scanf("%f",&member[m].basketball); //输入篮球分数printf("请输入足球分数:");scanf("%f",&member[m].football); //输入足球分数member[m].total=member[m].run+member[m].basketball+member[m].football;if(fwrite(&member[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件{printf("不能保存!");getch();}else{printf("%s 已经保存!\n",member[m].name);m++;}printf("是否继续?(y/n):");scanf("%s",ch);}fclose(fp);printf("OK!\n");}void show(){FILE *fp;int i,m=0;fp=fopen("运动会比赛计分系统","ab+");while(!feof(fp)){if(fread(&member[m] ,LEN,1,fp)==1)m++;}fclose(fp);printf("编号姓名性别院系跑步分数篮球分数足球分数总分\t\n");for(i=0;i<m;i++){printf(FORMAT,DATA);}}void del(){FILE *fp;int snum,i,j,m=0;if((fp=fopen("运动会比赛计分系统","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))if(fread(&member[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("没有记录!\n");return;}printf("请输入编号:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==member[i].num)break;if(i==m){printf("没有找到!");return;}printf("已经找到该记录,是否删除?(y/n)");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要进行删除{for(j=i;j<m;j++)member[j] = member[j+1]; //将后一个记录移到前一个记录的位置m--; //记录的总个数减1printf("成功删除!\n");}if((fp=fopen("运动会比赛计分系统","wb"))==NULL){printf("不能打开!\n");return;}for(j=0;j<m;j++) //将更改后的记录重新写入指定的磁盘文件中if(fwrite(&member[j] ,LEN,1,fp)!=1){printf("不能保存!\n");getch();}fclose(fp);}void search(){FILE *fp;int snum,i,m=0;char ch[2];if((fp=fopen("运动会比赛计分系统","ab+"))==NULL){printf("不能打开文件\n");return;}while(!feof(fp))if(fread(&member[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("没有记录!\n");return;}printf("请输入编号:");scanf("%d",&snum);for(i=0;i<m;i++)if(snum == member[i].num){printf("已经找到该记录,是否显示?(y/n)");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf("编号姓名性别院系跑步分数篮球分数足球分数总分\t\n");printf(FORMAT,DATA);break;}elsereturn;}if(i==m)printf("没有找到相应的记录!\n");}void modify()FILE *fp;int i,j,m=0,snum;char ch[2];if((fp=fopen("运动会比赛计分系统","ab+"))==NULL){printf("不能打开文件!\n");return;}while(!feof(fp))if(fread(&member[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("没有记录!\n");fclose(fp);return;}printf("请输入要修改的信息的编号!\n");scanf("%d",&snum);for(i=0;i<m;i++)if(snum==member[i].num) //检索记录中是否有要修改的信息{printf("已经找到该记录,是否修改?(y/n)\n");scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf("运动员姓名:");scanf("%s",member[i].name); //输入运动员姓名printf("请输入性别:");scanf("%s",member[i].sex); //输入性别printf("请输入院系:");scanf("%s",member[i].faculty); //输入院系printf("请输入跑步分数:");scanf("%f",&member[i].run); //输入跑步分数printf("请输入篮球分数:");scanf("%f",&member[i].basketball); //输入篮球分数printf("请输入足球分数:");scanf("%f",&member[i].football); //输入足球分数member[i].total=member[i].run+member[i].basketball+member[i].football; //计算总分printf("保存成功!");}elsereturn;}else{printf("没有找到!");return;}if((fp=fopen("运动会比赛计分系统","wb"))==NULL){printf("不能打开文件!\n");return;}for(j=0;j<m;j++) //将新修改的信息写入指定的磁盘文件中if(fwrite(&member[j] ,LEN,1,fp)!=1){printf("不能保存!");}fclose(fp);}void total() // 统计{FILE *fp;int m=0;if((fp=fopen("运动会比赛计分系统","ab+"))==NULL){printf("不能打开记录!\n");return;}while(!feof(fp))if(fread(&member[m],LEN,1,fp)==1)m++; //统计记录个数if(m==0){printf("没有记录!\n");fclose(fp);return;}printf("一共有%d 条记录!\n",m); //将统计的个数输出fclose(fp); }。

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

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

实验报告(数据结构)学院:信息科学与技术学院班级:姓名:日期:课题一运动会分数统计任务:参加运动会有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) 可以按项目编号查询取得前三或前五名的学校。

需求分析:本演示程序中,用户可以对运动会的的成绩一不同的方式进行输入输出等操作。

首先由用户输入运动会的成绩及相关的信息,然后程序会自动将输入的信息进行统计处理。

用于测试程序的数据如下所示:学校数据项目数据:概要设计:void Scanf(); 输入学校运动会成绩void Grade(); 查询成绩void Show(); 输出void Rank(); 查询名次void Show_sumscore();学校总分排序输出void Show_boyscore();男团总分排序输出void Show_girlscore();女团总分排序输出void Show_num(); 学校编号排序输出void Menu(); 总菜单程序图:主函数Scanf 输入函数Init 初始化函数Menu总菜单详细设计:#include<stdio.h>#include<stdlib.h>#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量#define LISTINCREMENT 10 //线性表存储空间的分配增量const int n=5; //参加运动会的学校个数const int m=5; //男子项目个数const int w=5; //女子项目个数void Init();//初始化学校总分、男女团体总分void Scanf();//输入学校运动会成绩void Grade();//查询成绩void Show();//输出void Rank();//查询名次void Show_sumscore();//学校总分排序输出void Show_boyscore();//男团总分排序输出void Show_girlscore();//女团总分排序输出void Show_num();//学校编号排序输出void Menu(); //总菜单typedef struct{char *event;int num;int sumscore;int boyscore;int girlscore;int length;int listsize; //当前分配的存储容量}SqList;// 初始化自定大小的线性表Lvoid InitList_Sq(SqList &L,int LIST_SIZE){L.event=(char *)malloc(LIST_SIZE* sizeof(char));if(!L.event) exit (0);L.length=0;L.listsize=LIST_SIZE;}//初始化默认大小的线性表Lvoid InitList_Sq(SqList &L){L.event=(char *)malloc(LIST_INIT_SIZE* sizeof(char)); if(!L.event)exit (0); //存储分配失败L.length=0; //空表长度为0L.listsize=LIST_INIT_SIZE; //初始存储容量}void ShowList_Sq(SqList &L,int Lenth){int i;for (i=0;i<Lenth;i++)printf("项目%d 成绩:%d\n",i+1,L.event[i]);}SqList School[n];void Init(){int i,j;for(i=0;i<n;i++){InitList_Sq(School[i],m+w);School[i].sumscore=0;School[i].boyscore=0;School[i].girlscore=0;School[i].num=i+1;for(j=0;j<m+w;j++){School[i].event[j]=0;}}}void Scanf(){int i,j,x;int a[3]={5,3,2};int b[5]={7,5,3,2,1};int c[10],d[10];printf("\n\n 输入各个项目的前三名或前五名的成绩\n\n\n"); for(i=0;i<m+w;i++){if(i<m){for(j=1;j<=5;j++){do{printf("项目%d 第%d名学校编号:",i+1,j);scanf("%d",&x);printf("\n");if(x>n||x<=0)printf("输入错误,请重新输入!\n");}while(x>n||x<=0);School[x-1].event[i]=b[j-1];}}else{for(j=1;j<=3;j++){do{printf("项目%d 第%d名学校编号:",i+1,j);scanf("%d",&x);printf("\n");if(x>n||x<=0)printf("输入错误,请重新输入!\n");}while(x>n||x<=0);School[x-1].event[i]=a[j-1];}}}printf("\n");//统计各校总分for(i=0;i<n;i++){for(j=0;j<m+w;j++){School[i].sumscore+=School[i].event[j];}}//统计男子总分for (i=0;i<n;i++){for(j=0;j<m;j++){School[i].boyscore+=School[i].event[j];}}//统计女子总分for(i=0;i<n;i++){for(j=m;j<m+w;j++){School[i].girlscore+=School[i].event[j];}}}void Grade(){int k,t;do{printf("\n请输入需要查询的学校编号:");scanf("%d",&k);if(k>n||k<=0)printf("输入出错,请重新输入!\n\n");}while(k>n||k<=0);do{printf("\n请输入需要查询的项目编号:");scanf("%d",&t);printf("\n");if(t>m+w||t<=0)printf("输入出错,请重新输入!\n\n");}while(t>m+w||t<=0);int i=0;while(School[i++].num!=k);printf("第%d个学校项目%d 积分为:%d\n",k,t,School[--i].event[t-1]); }void Show(){for(int i=0;i<n;i++){printf("第%d个学校:\n\n",i+1);ShowList_Sq(School[i],m+w);printf(" 男子总分为:%d\n",School[i].boyscore);printf(" 女子总分为:%d\n",School[i].girlscore);printf(" 学校总分为:%d\n",School[i].sumscore);printf("\n\n");}}void Rank(){int i,j,t;do{printf("请输入需要查询的项目编号:");scanf("%d",&t);if(t>m+w||t<=0)printf("输入出错,请重新输入!\n\n");}while(t>m+w||t<=0);for(i=n-1;i>=0;i--){for(j=0;j<i;j++){if(School[j].event[t-1]<School[i].event[t-1]){SqList temp=School[i];School[i]=School[j];School[j]=temp;}}}//冒泡排序if(t<=m){printf("项目%d 前五名:\n",t);for(i=0;i<5;i++){printf("第%d个学校\n",School[i].num);}}else if(t>m&&t<=m+w){printf("项目%d 前三名:\n",t);for(i=0;i<3;i++){printf("第%d个学校\n",School[i].num);}}elseprintf("输入错误,请重新输入!\n");}void Show_sumscore(){int i,j;for(i=n-1;i>=0;i--){for(j=0;j<i;j++){if(School[j].sumscore<School[i].sumscore) {SqList temp=School[i];School[i]=School[j];School[j]=temp;}}}printf("按学校总分排列:\n\n");Show();}void Show_boyscore(){int i,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].boyscore<School[i].boyscore){SqList temp=School[i];School[i]=School[j];School[j]=temp;}printf("按男子总分排列:\n\n");Show();}void Show_girlscore(){int i,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].girlscore<School[i].girlscore) {SqList temp=School[i];School[i]=School[j];School[j]=temp;}printf("按女子总分排列:\n\n");Show();}void Show_num(){int i,j;for(i=n-1;i>=0;i--)for(j=0;j<i;j++)if(School[j].num>School[i].num){SqList temp=School[i];School[i]=School[j];School[j]=temp;}printf("按学校编号排列:\n\n");Show();void Menu() //菜单函数{int choose;while(1){printf(" 运动会统计系统\n\n");printf("*****************************************************************\n"); printf(" 1、按学校编号排序输出\n");printf(" 2、按学校总分排序输出\n");printf(" 3、按男团总分排序输出\n");printf(" 4、按女团总分排序输出\n");printf(" 5、按学校编号查询学校某个项目的情况\n");printf(" 6、按项目编号查询取得前三名或前五名的学校\n");printf(" 7、退出\n");printf("*****************************************************************\n"); printf("\n\n -------------选择编号------------\n");scanf("%d",&choose);if(choose==1)Show_num();if(choose==2)Show_sumscore();if(choose==3)Show_boyscore();if(choose==4)Show_girlscore();if(choose==5)Grade();if(choose==6)Rank();if(choose==7)break;}}int main(){ int i=0;for(i=0;i<80;i++)printf("*");printf("\n 编号运动会项目 \n"); printf(" 1 男子100米 \n"); printf(" 2 男子200米 \n"); printf(" 3 男子400米 \n"); printf(" 4 男子跳高 \n"); printf(" 5 男子跳远 \n"); printf(" 6 女子跳高 \n"); printf(" 7 女子跳远 \n"); printf(" 8 女子铅球 \n"); printf(" 9 女子100米 \n");printf(" 10 女子400米\n\n");for(i=0;i<80;i++)printf("*");printf("\n");printf(" 编号参与运动会的学校 \n");printf(" 1 东华大学 \n");printf(" 2 上海交大 \n");printf(" 3 复旦大学 \n");printf(" 4 同济大学 \n");printf(" 5 华东师范大学 \n\n"); for(i=0;i<80;i++)printf("*");printf("\n");Init();Scanf();Menu();return 0;}调试分析:1,在编译过程中使用了结构体来存储航班和客户的相关信息,注意到使用结构体可以定义自己需要的类型,同时还可以对其成员进行各种操作,有效地解决了数据的建立和修改;2,在编程时建立了文件,将自己输入的文件和系统内部存入文档,有效地实现了大容量数据的操作;3,运用菜单功能,是程序和实际生活中的情况更加接近,有利于程序的广泛利用;4,在编程中学习到了编程的很多好的习惯,养成了添加注释的习惯。

数据结构 课程设计 运动会计分(C语言)

数据结构 课程设计 运动会计分(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;//初始化总分。

C语言课程设计----运动会分数统计系统源代码

C语言课程设计----运动会分数统计系统源代码

源代码:#include<stdio.h>#include<math.h>#include <conio.h>#include <process.h>#define n 2//学校数目#define m 1//男子项目数目#define w 1//女子项目数目#define null 0typedef struct{int itemnum; //项目编号int top; //取名次的数目int range[5]; //名次int mark[5]; //分数}itemnode; //定义项目结点的类型typedef struct{int schoolnum; //学校编号int score; //学校总分int mscore; //男团体总分int wscore; //女团体总分itemnode c[m+w]; //项目数组}headnode;//定义头结点类型headnode h[n];//定义一个头结点数组void inputinformation() //输入信息,建立系统{int i,j,k,s;for(i=0;i<n;i++){h[i].score=0;h[i].mscore=0;h[i].wscore=0;} //初始化头结点for(i=0;i<n;i++){printf("*****学校编号:");scanf("%d",&h[i].schoolnum); //输入头结点信息for(j=0;j<m+w;j++){printf("*****项目编号:");scanf("%d",&h[i].c[j].itemnum);printf("*****取前3名or前5名:");scanf("%d",&h[i].c[j].top);printf("*****获得几个名次:");scanf("%d",&k); //输入项目信息for(s=0;s<5;s++)h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数for(s=0;s<k;s++){printf("*****名次:");scanf("%d",&h[i].c[j].range[s]); //输入所获名次信息if(h[i].c[j].top==3)switch(h[i].c[j].range[s]){case 0: h[i].c[j].mark[s]=0; break;case 1: h[i].c[j].mark[s]=5; break;case 2: h[i].c[j].mark[s]=3; break;case 3: h[i].c[j].mark[s]=2; break;}elseswitch(h[i].c[j].range[s]){case 0: h[i].c[j].mark[s]=0; break;case 1: h[i].c[j].mark[s]=7; break;case 2: h[i].c[j].mark[s]=5; break;case 3: h[i].c[j].mark[s]=3; break;case 4: h[i].c[j].mark[s]=2; break;case 5: h[i].c[j].mark[s]=1; break;}h[i].score=h[i].score+h[i].c[j].mark[s];//按取前三名还是取前五名分别记分if(j<=m-1)h[i].mscore=h[i].mscore+h[i].c[j].mark[s];//是男子项目则记到男子分数里面去elseh[i].wscore=h[i].wscore+h[i].c[j].mark[s];//是女子项目则记到女子项目里面去}printf("\n");}}}void output() //输出函数{int choice,i,j,k;int remember[n];int sign;do{printf("*******************1.按学校编号输出.*******************\n");printf("*******************2.按学校总分输出.*******************\n");printf("*******************3.按男团总分输出.*******************\n");printf("*******************4.按女团总分输出.*******************\n");printf("\n\n******************* 请选择编号*************************\n\n:");scanf("%d",&choice);switch(choice){case 1:for(i=0;i<n;i++){printf("\n\n*****学校编号:%d\n",h[i].schoolnum);printf("*****学校总分:%d\n" ,h[i].score);printf("*****男团总分:%d\n",h[i].mscore);printf("*****女团总分: %d\n\n\n",h[i].wscore);} //按编号顺序输出break;case 2:for(i=0;i<n;i++)remember[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(h[remember[i]].score<h[j].score)k=remember[i];remember[i]=remember[j],remember[j]=k;} // 用冒泡排序方法,用辅助数组记住头结点下标for(i=0;i<n;i++){printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);printf("*****学校总分:%d\n" ,h[remember[i]].score);printf("*****男团总分:%d\n",h[remember[i]].mscore);printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);//按所记下标顺序输出} //按学校总分输出break;case 3:for(i=0;i<n;i++)remember[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(h[remember[i]].mscore<h[j].mscore)k=remember[i];remember[i]=remember[j];remember[j]=k;}for(i=0;i<n;i++){printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);printf("*****学校总分:%d\n" ,h[remember[i]].score);printf("*****男团总分:%d\n",h[remember[i]].mscore);printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);} //按男团总分输出break;case 4:for(i=0;i<n;i++)remember[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(h[remember[i]].wscore<h[j].wscore)k=remember[i];remember[i]=remember[j];remember[j]=k;}for(i=0;i<n;i++){printf("\n\n*****学校编号:%d\n",h[remember[i]].schoolnum);printf("*****学校总分:%d\n" ,h[remember[i]].score);printf("*****男团总分:%d\n",h[remember[i]].mscore);printf("*****女团总分: %d\n\n\n",h[remember[i]].wscore);}break; //按女团总分输出}printf("请选择 2 继续,0 跳出\n");scanf("%d",&sign);}while(sign==2); //循环执行输出语句}void inquiry() //查询函数{int choice;int i,j,k,s;printf("\n*****1:按学校编号查询\n");printf("\n*****2:按项目编号查询\n");printf("\n\n*****请选择查询方式:"); //提供两种查询方式scanf("%d",&choice);switch(choice){case 1:do{printf("要查询的学校编号:");scanf("%d",&i);if(i>n)printf("错误:这个学校没有参加此次运动会!\n\n\n");else{printf("要查询的项目编号:");scanf("%d",&j);if(j>m+w||j==0)printf("此次运动会没有这个项目\n\n\n");//学校编号超出范围,则输出警告else{printf("这个项目取前%d名,该学校的成绩如下:\n", h[0].c[j-1].top);for(k=0;k<5;k++)if(h[i-1].c[j-1].range[k]!=0)printf("名次:%d\n",h[i-1].c[j-1].range[k]);//输出要查询学校项目的成绩}}printf("请选择2 继续, 0 跳出\n");scanf("%d",&s);printf("\n\n\n");}while(s==2); //循环执行输出语句break;case 2:do{printf("要查询的项目编号:");scanf("%d",&s);if(s>m+w||s==0)printf("此次运动会不包括这个项目.\n\n\n");//项目编号超出范围则输出警告else{printf("该项目取前%d名,取得名次的学校\n",h[0].c[s-1].top);for(i=0; i<n;i++)for(j=0;j<5;j++)if(h[i].c[s-1].range[j]!=0)printf("学校编号:%d,名次:%d\n",h[i].schoolnum,h[i].c[s-1].range[j]);} //输出该项目取得名次学校的成绩printf("\n\n\n继续2,跳出0\n");scanf("%d",&i);printf("\n\n\n");}while(i==2);break;}}void writedata() //把数据存储在文件中{FILE *report;int i;if((report=fopen("sportsdata.txt","w"))==null){printf("不能打开文件\n");exit(1);}for(i=0;i<n;i++)fwrite(&h[i],sizeof(headnode),1,report);fclose(report);} //按头结点块写入void readdata() //读出文件中数据的函数{FILE *report;int i,j,k,s;if((report=fopen("sportsdata.txt","r"))==null){printf("file can not be opened\n");exit(1);}for(i=0;i<n;i++){printf("******学校编号:");fread(&k,sizeof(int),1,report);printf("%d\n",k);printf("******学校总分:");fread(&k,sizeof(int),1,report);printf("%d\n",k);printf("******男团总分:");fread(&k,sizeof(int),1,report);printf("%d\n",k);printf("******女团总分:");fread(&k,sizeof(int),1,report);printf("%d\n",k);printf("\n\n\n");getch();for(j=0;j<m+w;j++){printf("******项目编号:");fread(&k,sizeof(int),1,report);printf("%d\n",k);printf("******所取名次数量:");fread(&k,sizeof(int),1,report);printf("%d\n",k);for(s=0;s<5;s++){fread(&k,sizeof(int),1,report);if(k!=0)printf("******名次:"),printf("%d\n",k);}for(s=0;s<5;s++){fread(&k,sizeof(int),1,report);if(k!=0) printf("******分数:"),printf("%d\n",k);}}printf("\n\n\n");getch();}fclose(report); //关闭文件} //按照读一个数据就输出一个数据的方式显示数据内容void main(){int choice;printf("======================欢迎使用======================\n"); printf("\n\n*****************运动会分数统计系统********************\n");printf("\n\n********************1.输入信息*************************\n");printf("********************2.输出信息*************************\n");printf("********************3.查询信息*************************\n");printf("********************4.调用信息*************************\n");printf("********************5.退出系统*************************\n\n\n");printf("================================================\n\n");printf("********请选择要实现步骤的编号:\n\n");scanf("%d",&choice);switch(choice){case 1:inputinformation();writedata();readdata();main();case 2:output();main();case 3:inquiry();main();case 4:readdata();main();case 5:exit(0);default:exit(0);}}。

数据结构实验——运动会分数统计

数据结构实验——运动会分数统计

运动会分数统计一、需求分析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)第一章开发环境和开发工具 (1)1.1 C++简介 (1)1.2 开发背景....................................... 错误!未定义书签。

1.3 开发环境 (2)第二章算法思想 (3)2.1 系统需求分析 (3)2.2 系统总体设计 (3)2.2.1 系统设计目标 (3)2.2.2 开发设计思想 (4)2.2.3 系统功能模块设计 (4)2.3 算法思想描述 (6)第三章算法实现 (8)3.1 数据结构 (8)3.2 程序模块 (8)3.3 各模块之间的调用关系 (8)3.4 源程序代码 (9)第四章测试与分析.................................... 错误!未定义书签。

4.1 测试数据选择 (14)4.2 测试结果分析 (16)总结 (17)心得体会 (18)参考文献 (19)第一章开发环境和开发工具1.1 C++简介一种面向对象的开发语言,C++是一种使用非常广泛的计算机编程语言。

C++是一种静态数据类型检查的、支持多重编程方式的通用程序设计语言。

它支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。

数据结构课程设计----运动会数据管理系统.doc

数据结构课程设计----运动会数据管理系统.doc

数据结构课程设计报告设计题目:运动会数据库系统专业软件工程班级软件091班学生郑泽奇学号3090921013指导教师周红芳/李兵起止时间2011-7-4至2011-7-82011 年春季学期目录一、具体任务 (4)二、软件环境 (4)三、算法设计思想及流程图 (5)四、源代码 (6)五、运行结果 (32)六、收获及体会 (34)七、参考文献 (34)课设任务本次数据结构课程设计的主题是学生利用所学的数据结构知识编写程序。

作品为学生本人亲自设计制作,不能由他人代替,严禁抄袭他人作品,一经发现将取消本次教学实习的成绩。

作品应附上word 文档格式的说明,包括设计理念、作品特点、作品自评及个人小节,并指明所用的工作平台和工具软件。

文件名均使用英文名或拼音(小写)。

评语(教师填写)一、具体任务数据结构课程设计任务书0题目:学生运动会成绩数据库功能:学生运动会成绩数据库系统记录某校运动会上全部运动项目,各系获得的分数及排名的情况,包括50、100、200,400,1500米,跳高,跳远,标枪,铅球铁饼等。

进入系统后可以输入和修改某个项目的结果情况,可以按各系院编号输出总分;按总分排序;按男团体总分排序;按系院编号查询;按项目编号查询;按女团体总分排序。

分步实施:1)初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;2)完成最低要求:建立一个文件,包括某个系,5个项目的得分情况,能对文件中的信息进行扩充(追加),修改和删除;3)进一步要求:完成对多个系,多个项目的得分排序,以及完成系统查询功能。

有兴趣的同学可以自己扩充系统功能。

键盘输入:系院数目,男子项目数女子项目数,(每项目取前三名,分别为10,5,2分)要求:1)界面友好,函数功能要划分好2)总体设计应画一流程图3)程序要加必要的注释4)要提供程序测试方案5)程序一定要经得起测试,宁可功能少一些,也要能运行起来,不能运行的程序是没有价值的。

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

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

数据结构课程设计运动会分数统计一.需求分析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、算法设计主要算法的设计思想:本程序主要是使用顺序表来实现操作。

运动会分数统计数据结构课程设计(含源代码)

运动会分数统计数据结构课程设计(含源代码)

计算机学院信管专业数据结构课程设计题目:运动会分数统计班级:姓名:学号:同组人姓名:起迄日期:课程设计地点:指导教师:评阅意见:成绩评定:评阅人:日期:完成日期:2013年12月目录1、需求分析 (02)2、概要设计 (03)3、详细设计 (04)4、调试分析和测试结果 (05)5、总结 (13)6、参考文献 (14)7、致谢 (14)8、附录 (14)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)(2)功能要求:a).可以输入各个项目的前三名或前五名的成绩;b).能统计各学校总分,c).可以按学校编号、学校总分、男女团体总分排序输出;d).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

(3)规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)(4)输出形式:有中文提示,各学校分数为整形(5)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

(6)存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

(7)测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;2、概要设计(1)文字分析本课设要求输入信息,统计分数,执行排序与查找功能,在要求中没有在建立数据之后进行插入和删除操作,而在排序和查找过程中有许多的随机读取数据操作,因此使用顺序结构而不用链表。

由于各个要求属性具有一定的联系,在定义数据时使用结构体和结构体数组来存储信息数据。

运动会分数统计系统(内涵源代码)

运动会分数统计系统(内涵源代码)

数据结构课程设计实验学校:江西农业大学班级:软件1115班姓名:朱利斌学号:20111976课程:数据结构课程设计指导教师:彭玉莹2012.1.2目录第一章绪论 (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。

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

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

目录:1.需求分析: (2)功能要求:............................................................................................... 错误!未定义书签。

性能需求: (2)2.概要设计: (2)1.存储结构设计:.................................................................................... 错误!未定义书签。

2.流程图设计: (2)3.详细设计: (7)4.菜单窗口: .................................................................................................................. 错误!未定义书签。

1.主菜单窗口............................................................................................ 错误!未定义书签。

2. 输入各个项目成绩并存储文件.......................................................... 错误!未定义书签。

3. 统计各学校总分.................................................................................. 错误!未定义书签。

4. 按学校编号排序输出.......................................................................... 错误!未定义书签。

5. 按学校总分排序输出.......................................................................... 错误!未定义书签。

数据结构课程设计—运动会分数统计系统-推荐下载

数据结构课程设计—运动会分数统计系统-推荐下载

void inputinformation() //输入信息,建立系统
{
int i,j,k,s;
for(i=0;i<n;i++)
{
h[i].score=0;
h[i].mscore=0;
h[i].wscore=0; }
for(i=0;i<n;i++)
{ printf("*****学校编号:");
scanf("%d",&h[i].schoolnum);
Y Case3
开始---初始化
输入
Y Y 输入学校及男女项目范围
输入某项目各名次成绩
继续输 入
N
成绩查询
Case1 查询各学校成绩
Case2 查询团体总分
输出查询学校成绩 N
Y 继续
N
结束—退出
2. 本系统采用的存储结构为结构化设计理念,这是数据库的最基本的设计 要求,主要包括三个数据表:
(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) 能统计各学校总分, 3) 可以按学校编号或名称、学校总分、男女团体总分排序输出; 4) 可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得 前三或前五名的学校。 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完 成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相 关数据要存储在数据文件中。 测试数据:要求使用 1、全部合法数据;2、整体非法数据;3、局部非法数据。 进行程序测试,以保证程序的稳定。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

.计算机学院信管专业数据结构课程设计题目:运动会分数统计班级:姓名:学号:同组人:起迄日期:课程设计地点:指导教师:评阅意见:成绩评定:评阅人:日期:完成日期:2013年12月目录1、需求分析 (02)2、概要设计 (03)3、详细设计 (04)4、调试分析和测试结果 (05)5、总结 (13)6、参考文献 (14)7、致 (14)8、附录 (14)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)(2)功能要求:a).可以输入各个项目的前三名或前五名的成绩;b).能统计各学校总分,c).可以按学校编号、学校总分、男女团体总分排序输出;d).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

(3)规定:输入数据形式和围:20以的整数(如果做得更好可以输入学校的名称,运动项目的名称)(4)输出形式:有中文提示,各学校分数为整形(5)界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

(6)存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。

(7)测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。

进行程序测试,以保证程序的稳定。

测试数据及测试结果请在上交的资料中写明;2、概要设计(1)文字分析本课设要求输入信息,统计分数,执行排序与查找功能,在要求中没有在建立数据之后进行插入和删除操作,而在排序和查找过程中有许多的随机读取数据操作,因此使用顺序结构而不用链表。

由于各个要求属性具有一定的联系,在定义数据时使用结构体和结构体数组来存储信息数据。

考虑到程序的要求在设计函数时将学校个数和项目个数设计为可变的数据,为方便使用设计菜单函数(menu),而由于要求将信息存储在文件中故设计文件的存储(savetofile)与读取函数(readfromfile),信息输入函数(input)在输入基本信息后由系统统计总分的容并全部存入文件file中,在接下来的函数中开始都需要读取文件中的信息,信息的输出(output)输出输入函数中统计后的各项信息,在排序输出(sortput)中使用冒泡排序法进行不同关键字的排序,查询函数(search)采用顺序表的查找来完成。

3、详细设计(1)项目数据表:运动会系统先制定本次运动会所需的参赛项目。

本数据表根据要求设计存储每个项目的编号、要取的名次、各个名次名称及各名次对应的分数。

用于对以后项目情况的统计已及查询。

其中inum,top,range由输入信息输入,而mark有range和top决定。

typedef struct{int inum; /*项目编号*/int top; /*取名次的数目*/int range[5]; /*名次*/int mark[5]; /*分数*/}itemnode; /*存放项目信息*/(2)学校数据表:本数据表根据要求储存了各个参赛学校的总体情况,包括学校的编号、学校总分、男子团体总分、女子团体总分,并且包括项目数据数组t[n]。

其中snum 和t[n]中部分数据由输入信息输入,而其他三项容score,mscore,wscore将由系统进行自动统计。

typedef struct{int snum; /*学校编号*/int score; /*学校总分*/int mscore; /*男团体总分*/int wscore; /*女团体总分*/itemnode t[M+W]; /*项目数组*/}snode; /*存放学校信息*/snode a[N]; /* 定义一个学校数组*/这二个数据表相关联接,a[n]中包括t[n],形成一个整体。

(3)模块划分1、Void menu(int n,int m,int w) 功能是提供界面窗口2、Void savetofile() 功能是保存输入的运动会信息到file文件3、Void readfromfile() 功能是从file文件中读取运动会信息4、Void input(int n,int m,int w) 功能是输入信息并统计5、Void output(int n,int m,int w) 功能是按学校、项目输出统计信息6、Void sortput(int n,int m,int w) 功能是按四种方法排序并输出结果7、Void search(int n,int m,int w) 功能是按两种方法查询并输出结果4、调试分析与测试结果(1)测试数据测试取学校个数为3,男子项目个数2.女子项目个数1(2)测试结果1、主菜单界面2、信息输入运行测试a).信息输入b).输入完成3、统计输出运行测试a).统计输出b).统计输出完毕4、排序输出运行测试a).选择排序输出形式b).按学校编号输出c).按学校总分输出d).按男团总分输出d).按女团总分输出5、信息查询运行测试a).选择信息查询方式b).按学校编号查询c).按项目编号查询6、退出系统运行测试5、总结通过为期四天的课程设计,我对《数据结构》这门课程有了更深一步的了解,使我对《数据结构》这门课程掌握以及运用更加灵活。

虽然是应用C语言来编写程序,但却深刻的体现了数据结构对编程的重要性。

这次课程设计运用C语言与数据结构知识,编写一个运动会分数统计系统。

其中遇到了不少问题,因为对《数据结构》这一门课程掌握不够熟练以及平时自己在编写一些普通常见的程序时只是运用单一的知识而课程设计却需要将各个方面的容联系结合,例如文件与程序的结合,输入、输出、统计、查找的综合应用等,因此真正的程序设计必须先有一个正确的算法思想,运用正确的数据结构和编程语言,灵活的运用并联系几个方面的容。

通过课程设计也使我认识到,要学好编程,仅学习书本上的知识是不够的,还要有较强的实践能力。

因为我们学习知识就是为了实践。

而只有多实践,多编写程序,才能更好的理解与掌握书本上的东西6、参考文献[1]严蔚敏,吴伟民;《数据结构(C语言版)》,清华大学,2007年[2]王裕明;《数据结构与程序设计》,清华大学,2010年[3]谭浩强;《C语言程序设计(第三版)》,航空航天大学,2005年[4]建学;《数据结构课程设计案例精编(用C/C++描述)》,清华大学,2007年[5]催俊凯;《计算机软件基础》,机械工业,2007年[6].baidu.7、致本次试验能够如期完成,主要是要感席老师课堂上的讲解以及指导,才能使我对《数据结构》这门课程有较为深入的理解与掌握,才能在本次课程设计中得以运用。

再加上课程设计过程中的程序设计建议,才使得这次课程设计中所遇到的问题能够较快的解决其次,我还要感和我一组的咏荔同学,通过两个人的共同协作,才使得本次课程设计能够较好的完成。

同时,还要感平时课堂上以及课堂外给我帮助的同学们,能够热心的为我解答我所存在的疑问,并为我的程序提出一些建议。

8、附录源代码:#include<stdio.h>#include<math.h>#include <process.h>#define N 20 /*学校最大数目*/#define M 20 /*男子项目最大数目*/ #define W 20 /*女子项目最大数目*/ typedef struct{int inum; /*项目编号*/int top; /*取名次的数目*/int range[5]; /*名次*/int mark[5]; /*分数*/}itemnode; /*存放项目信息*/ typedef struct{int snum; /*学校编号*/int score; /*学校总分*/int mscore; /*男团体总分*/int wscore; /*女团体总分*/itemnode t[M+W]; /*项目数组*/}snode; /*存放学校信息*/ snode a[N]; /* 定义一个学校数组*/ void menu(int n,int m,int w) /*菜单函数*/ {int c;void input(int n,int m,int w);void output(int n,int m,int w);void sortput(int n,int m,int w);void search(int n,int m,int w);printf("\t\t\t欢迎使用\t\t\t\t\n\n");printf("\t***********运动会分数统计系统***********\n\n");printf("\t\t*******1.信息输入*******\n");printf("\t\t*******2.统计输出*******\n");printf("\t\t*******3.排序输出*******\n");printf("\t\t*******4.信息查询*******\n");printf("\t\t*******0.退出系统*******\n\n");printf("=============================================== ========\n\n");printf("请选择要实现步骤的编号(0--4):");scanf("%d",&c);switch(c){case 1:input(n,m,w);break;case 2:output(n,m,w);break;case 3:sortput(n,m,w);break;case 4:search(n,m,w);break;case 0:printf("使用,再见!\n");exit(0);default:printf("输入错误,请重试!\n");menu(n,m,w);}}void savetofile() /*信息存入文件file*/ {FILE *fp;int i;if((fp=fopen("file.txt","w"))==NULL){printf("cannot open the file\n");return;}for(i=0;i<N;i++){if(a[i].snum!='\0')if(fwrite(&a[i],sizeof(snode),1,fp)!=1){printf("file write error\n");return;}}fclose(fp);}void readfromfile() /*信息从文件file中取出*/ {int i;FILE *fp;if((fp=fopen("file.txt","rb"))==NULL){printf("cannot open the file\n");return;}for(i=0;i<N;i++)fread(&a[i],sizeof(snode),1,fp);fclose(fp);}void input(int n,int m,int w) /*1.信息输入*/ {int i,j,s,k,q=0;for(i=0;i<n;i++){printf("学校编号:");scanf("%d",&a[i].snum); /*输入学校信息*/for(j=0;j<m+w;j++){printf("项目编号:");scanf("%d",&a[i].t[j].inum);printf("项目取前3名或前5名(3或者5):");scanf("%d",&a[i].t[j].top);if(a[i].t[j].top==3)printf("获得名次个数(1--3):");elseprintf("获得名次个数(1--5):");scanf("%d",&k); /*输入项目信息*/for(s=0;s<k;s++){if(a[i].t[j].top==3)printf("所获名次(1--3):");elseprintf("所获名次(1--5):");scanf("%d",&a[i].t[j].range[s]); /*输入所获名次信息*/}printf("\n");}}for(i=0;i<n;i++){a[i].score=0;a[i].mscore=0;a[i].wscore=0;} /*初始化分数*/for(i=0;i<n;i++)for(j=0;j<m+w;j++)for(s=0;s<5;s++){if(a[i].t[j].top==3)switch(a[i].t[j].range[s]){case 0: a[i].t[j].mark[s]=0; break;case 1: a[i].t[j].mark[s]=5; break;case 2: a[i].t[j].mark[s]=3; break;case 3: a[i].t[j].mark[s]=2; break;}else if(a[i].t[j].top==5)switch(a[i].t[j].range[s]){case 0: a[i].t[j].mark[s]=0; break;case 1: a[i].t[j].mark[s]=7; break;case 2: a[i].t[j].mark[s]=5; break;case 3: a[i].t[j].mark[s]=3; break;case 4: a[i].t[j].mark[s]=2; break;case 5: a[i].t[j].mark[s]=1; break;}else{printf("信息有误!");printf("\n");exit(0);}a[i].score=a[i].score+a[i].t[j].mark[s]; /*记学校总分*/if(j<=m-1)a[i].mscore=a[i].mscore+a[i].t[j].mark[s]; /*记男子团体总分*/elsea[i].wscore=a[i].wscore+a[i].t[j].mark[s]; /*记女子团体总分*/ }printf("输入完毕!返回? 1是2否\n"); /*返回菜单*/scanf("%d",&q);printf("\n");if(q!=1)printf("不能再添加信息!");printf("\n");savetofile(); /*将信息存入文件file*/menu(n,m,w);}void output(int n,int m,int w) /*2.统计输出*/ {readfromfile();int i,j,s,q=0;for(i=0;i<n;i++) /*显示结果*/{printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[i].snum,a[i].score,a[i].mscore,a[i].wscore);for(j=0;j<m+w;j++){printf("项目编号:%d 所取名次数量:%d\n",a[i].t[j].inum,a[i].t[j].top);for(s=0;s<5;s++){if(a[i].t[j].range[s]!=0)printf("名次:%d 分数:%d\n",a[i].t[j].range[s],a[i].t[j].mark[s]);}}printf("\n");}printf("\n");printf("统计完毕!返回? 1是2否"); /*返回菜单*/scanf("%d",&q);printf("\n");if(q!=1)printf("统计已经结束!");printf("\n");menu(n,m,w);}void sortput(int n,int m,int w) /*3.排序输出*/{readfromfile();int c,i,j,k,q=0;int temp[N];printf("\t**************排序输出系统**************\n\n");printf("\t\t****1.按学校编号输出****\n");printf("\t\t****2.按学校总分输出****\n");printf("\t\t****3.按男团总分输出****\n");printf("\t\t****4.按女团总分输出****\n");printf("=============================================== ========\n\n");do{printf("请选择要实现功能的编号(1--4):");scanf("%d",&c);switch(c){case 1:for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(a[temp[i]].snum>a[j].snum){k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按学校编号输出*/break;case 2:for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(a[temp[i]].score<a[j].score){k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按学校总分输出*/break;case 3:for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(a[temp[i]].mscore<a[j].mscore){k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按男团总分输出*/break;case 4:for(i=0;i<n;i++)temp[i]=i;for(i=0;i<n;i++){for(j=i+1;j<n;j++)if(a[temp[i]].wscore<a[j].wscore){k=temp[i];temp[i]=temp[j];temp[j]=k;}} /* 用冒泡排序方法排序*/for(i=0;i<n;i++){printf("学校编号:%d 学校总分:%d 男团总分:%d 女团总分:%d\n",a[temp[i]].snum,a[temp[i]].score,a[temp[i]].mscore,a[temp[i]].wscore);} /*按女团总分输出*/break;default:printf("输入错误,请重试!\n");}printf("请选择 1 返回主菜单0继续"); /*返回菜单或继续排序*/scanf("%d",&q);printf("\n");}while(q==0);printf("\n");if(q!=0)menu(n,m,w);}void search(int n,int m,int w) /*查询函数*/{readfromfile();int c,i,j,k,d,l,q=0;printf("\t****************查询系统****************\n\n");printf("\t\t****1.按学校编号查询****\n");printf("\t\t****2.按项目编号查询****\n");printf("=============================================== ========\n\n");do{k=-1;d=-1;l=-1;printf("请选择要实现功能的编号(1--2):");scanf("%d",&c);switch(c){case 1:printf("要查询的学校编号:"); /*查找学校编号下标*/scanf("%d",&c);for(i=0;i<n;i++){if(a[i].snum==c)k=i;}if(k==-1)printf("错误:这个学校没有参加此次运动会!\n");else{printf("要查询的项目编号:"); /*查找项目编号下标*/scanf("%d",&c);for(j=0;j<m+w;j++){if(a[k].t[j].inum==c)d=j;}if(d==-1)printf("此次运动会没有这个项目\n");else /*显示结果*/{printf("这个项目取前%d名,该学校的成绩如下:\n", a[k].t[d].top);for(i=0;i<5;i++)if(a[k].t[d].range[i]!=0)printf("名次:%d\n",a[k].t[d].range[i]);}}break;case 2:printf("要查询的项目编号:"); /*查找项目编号下标*/scanf("%d",&c);for(i=0;i<n;i++)for(j=0;j<m+w;j++)if(a[i].t[j].inum==c)l=j;if(l==-1)printf("此次运动会没有这个项目\n");else /*显示结果*/{printf("该项目取前%d名,取得名次的学校\n",a[0].t[l].top);for(i=0; i<n;i++)for(j=0;j<5;j++)if(a[i].t[l].range[j]!=0)printf("学校编号:%d,名次:%d\n",a[i].snum,a[i].t[l].range[j]);}break;default:printf("输入错误,请重试!\n");}printf("请选择:1.返回主菜单0.继续"); /*返回菜单或继续查询*/ scanf("%d",&q);printf("\n");}while(q==0);printf("\n");if(q!=0)menu(n,m,w);}void main() /*主函数*/{int n,m,w;printf("\t\t\t欢迎使用\t\t\t\t\n\n");printf("\t***********运动会分数统计系统***********\n\n");printf("请先输入运动会主要信息\n"); /*设计运动会主要数据个数*/ printf("输入学校个数:");scanf("%d",&n);printf("输入男子项目个数:");scanf("%d",&m);printf("输入女子项目个数:");scanf("%d",&w);menu(n,m,w);}。

相关文档
最新文档