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

合集下载

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

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

班级: 姓名:学号日期课题一运动会分数统计一.需求分析: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); }。

  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);}。

相关文档
最新文档