当前位置:文档之家› 数据结构实验——运动会分数统计

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

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

运动会分数统计

一、需求分析

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)输入学校及项目的范围并判断输入范围合法性:

Is_Star_DoMain:

printf("\n请输入参赛学校总数(<= 20): ");

scanf("%d",&nsc);

if(nsc<=0||nsc>20)

{ printf("输入错误,请重新输入!\n");

goto Is_Star_DoMain;}

Is_Msp_DoMain:

{输入男子项目总数并判断男子项目范围大小是否合法}

Is_Wsp_DoMain:

{输入女子项目总数并判断女子项目范围大小是否合法}

2)输入记录:

char answer; /*接受判断所有项目是否结束:'y'结束,'n'没结束*/ head = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));

head->next = NULL;

pfirst = head; /*工作指针*/

answer = 'y';

while ( answer == 'y' )

{

Is_Game_DoMain:

提示用户选择取前三名还是前五名,奇数项为取五名,偶数项取前三名,判断是否已经输

入过或者是否超出范围。

overgame = *pafirst;

if ( pafirst != phead )

{for ( pasecond = phead ; pasecond < pafirst ; pasecond ++ )

{ if ( overgame == *pasecond )

{ printf("\n*此运动项目已经输入过,请重新选择其他项目序号!\n"); goto Is_Game_DoMain; }

}}

pafirst = pafirst + 1;

if ( overgame > ntsp||overgame<=0 )

{

printf("\n没有这样的运动项目!");

printf("\n请重新输入!");

goto Is_Game_DoMain;

}

switch ( overgame%2 ) /*判断奇偶性*/

{case 0: n = 3;break;

case 1: n = 5;break;

}

for ( i = 1 ; i <= n ; i++ )

{

Is_Serial_DoMain:

printf("\n请输入第 %d名学校的编号(>0&<=%d): ",i,nsc);

scanf("%d",&serial);

if ( serial > nsc ) /*判断是否存在该校*/

{

printf("\n编号超出学校总数!\n请重新输入!");

goto Is_Serial_DoMain;}

if ( head->next == NULL ) /*建立第一个节点*/

{ create();}

psecond = head->next ; /*遍历指针*/

while ( psecond != NULL ) /*遍历链表判断是否已存在该校*/

{ if ( psecond->serial == serial )

{ pfirst = psecond;

pfirst->count = pfirst->count + 1;

goto Store_Data; }

else { psecond = psecond->next; }

}

create();

Store_Data:

/*存储数据*/

pfirst->athlete[pfirst->count].item = overgame;

pfirst->athlete[pfirst->count].range = i;

pfirst->serial = serial;

printf("请输入学校名称: ");

scanf("%s",pfirst->athlete[pfirst->count].name);

printf("请输入运动员姓名: ");

scanf("%s",pfirst->athlete[pfirst->count].xingming);

}

}

3.计算统计模块,通过遍历链表,将各参赛学校的成绩统计出来并存入结构成员中,来修改链

表中的数据.

判断运动项目奇偶性予以不通名字赋值:

if ( pfirst->athlete[i].item % 2 == 0 ) /*偶数项目*/

{ switch (pfirst->athlete[i].range)

{ case 1:pfirst->athlete[i].score = 5;break;

case 2:pfirst->athlete[i].score = 3;break;

case 3:pfirst->athlete[i].score = 2;break; }

}

else /*奇数项目*/

{ switch (pfirst->athlete[i].range)

{ case 1:pfirst->athlete[i].score = 7;break;

case 2:pfirst->athlete[i].score = 5;break;

case 3:pfirst->athlete[i].score = 3;break;

case 4:pfirst->athlete[i].score = 2;break;

case 5:pfirst->athlete[i].score = 1;break; }

}

计算男女项目的各自成绩及团体总成绩:

if ( pfirst->athlete[i].item <=msp ) /*男子项目*/

{ pfirst->menscore = pfirst->menscore + pfirst->athlete[i].score;

}

else /*女子项目*/

{ pfirst->womenscore = pfirst->womenscore + pfirst->athlete[i].score;

}

pfirst->totalscore = pfirst->menscore + pfirst->womenscore;

pfirst = pfirst->next;

4.成绩的输入,即成绩的查询。

1)查询单个学校的成绩表。

School()

printf("请选择要查询的学校编号(1-%d):",nsc);

pfirst = head->next;

psecond = head->next;

while ( pfirst->next != NULL ) /*学校*/

{

scanf("%d",&a);

if(a<=0||a>nsc)

{ printf("输入学校编号超出范围,请重新输入!");

School();

}

在小于总项目数范围呢,从第一个项目开始察看是否有学校代码与要察看的学校代码相同的,如果有输出。

printf("\n编号为%d的学校的成绩如下:\n",a);

printf("\n项目编号\t运动员姓名\t名次\t得分");

for (i=1;i<=ntsp;i++) /*运动员*/

{ for(j=1;j<=5;j++)

{ if(pfirst->athlete[j].serial==a)

printf("\n%d\t\t%s\t%d\t%d\n",j,pfirst->athlete[pfirst->count].xingming, pfirst->athlete[j].range,pfirst->athlete[j].score); } }

2)男女总分及团体总分输出。由于男女团体总分,和团体总分在计算过程中已经计算完成,

这里可以直接调用。

Overall()

{ printf("\n比赛情况结果显示:\n学校编号\t学校名称\t\t男子团体总分\t女子团体总分\t 团体总分");

pfirst = head->next;

while ( pfirst->next != NULL )

{ printf("\n %d\t\t %s\t\t %d\t\t %d\t\t %d",pfirst->serial,pfirst->athlete[pfirst->co unt].name,pfirst->menscore,pfirst->womenscore,pfirst->totalscore);

pfirst = pfirst->next; }

pfirst = pfirst->next; }

5.主函数和其他函数算法。

main() /*主函数:主函数很简单,大部分是调用其他函数来实现功能的*/

{

初始化

Firstout();

Inserts();

}

Firstout()

{ printf("\n************************************************\n");

printf("* 运动会分数统计系统*\n");

printf("************************************************\n");

printf("* 1.开始输入数据*\n");

printf("* 2.退出系统*\n");

printf("************************************************\n");

printf("请选择操作:\n");

i=getche();

switch(i){

/*根据选择进行操作*/

}

}

其他一些提示性操作……

6.函数的调用关系图反映了演示程序的层次结构:

四、测试分析

1.调试中所遇到的较重要问题的回顾:

1)提出问题:所有输入输出内容只能在一屏内显示,学过c语言,很知道”\n”是换行,”\f”是

换屏的,可是在这里就是无法实现。

解决问题: 输入clrscr();

2)提出问题:设置选项,供用户输入选择时,当按任意键时都会跳入下一步操作,或者直接退

出系统。

分析问题:在供用户选择时,提供了几个选项,就写几个case语句,但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。

解决问题:修改case语句,添加default语句提示出错,要求重新输入;

Default:{

clrscr(); /*清屏*/

printf("输入错误,请重新选择");

}

3)提出问题:当同一项目中有同一学校的两个人时,便不能正确输出或者输出相同人名。

分析问题:由于同时有两个相同学校编号的人存在,系统在输出时,不能确定那个是正确的,或者用后来的覆盖以前的。

解决问题:用for函数实现从开始到结尾的遍历。

2.算法的效率及改进设想

算法的效率:总的来讲,严重引响执行速度的便是查找,查找任意一个数据,便要将其所在的结构从头至尾遍历一次,耗费大量的时间。

改进设想:因大部分显示均是以学校为单位,所以将以由有关人的各种信息为集合的结构改为以由有关学校的各种信息为集合的结构。

五、用户手册

1)运行可执行程序sport.exe;

2)出现提示:

***********************************************

* 运动会分数统计系统 *

***********************************************

* 1.开始输入数据 *

* 2.退出系统 *

***********************************************

请选择操作:

选择1,进入数据录入;

3)根据提示输入学校个数,男子项目个数及女子项目个数,如果输入超出范围,会出现提示:“输入错误,请重新输入!”并返回重新输入;

4)出现如下提示:

奇数项目取前五名

偶数项目取前三名

请输入运动项目序(<=ntsp)

根据需要输入项目编号;如果输入编号超出范围,会提示“没有这样的运动项目!请重新输入!”,如果该项目已经输入过,则提示:“此运动项目已经输入过,请重新选择其他项目序号!”;

5)根据屏幕提示输入各个名次学校编号、学校名称和运动员姓名,如果输入学校编号超出范围会提示:“编号超出学校总数!\n请重新输入!”;

特别说明:如果两次对同一编号的学校输入不通的校名,将保留后来输入的校名;

6)输入完毕,提示用户是否继续输入下一个项目数据,“y”是“n”否;

7)选择否后进入下一界面:

***********************************************

* 运动会分数统计系统 *

***********************************************

* 1.成绩查询 *

* 2.全部重录(重新开始) *

* 3.退出 *

***********************************************

请选择继续操作:选择1进程成绩查询,选择2返回2);

8)选择1后进入查询选择页面:

************************************************

* 运动会分数统计系统--查询 *

************************************************

* 1.各学校成绩单 *

* 2.团体总分 *

* 3.返回上一级 *

************************************************

请选择继续操作:

选择1按学校编号进行查询,选择2查询学校男女团体总分和团体总分表,选择3返回到上一界面;

9)选择1后,提示用户输入查询学校编号,输入即显示改校成绩,包括项目编号、运动员姓名、分数和名次,并可根据提示选择其他操作;

************************************************

* 运动会分数统计系统--各学校成绩查询 *

************************************************

* 1.继续各学校成绩查询 *

* 2.团体总分查询 *

* 3.返回上一级菜单 *

* 4.退出系统 *

************************************************

编号为%d的学校的成绩如下:

项目编号运动员姓名名次得分

** ** ** **

10)选择2后,显示各学校编号、男子团体总分、女子团子总分和团体总分,并可根据提示选择

其他操作,显示如下:

************************************************

* 运动会分数统计系统--团体总分查询 *

************************************************

* 1.各学校成绩查询 *

* 2.返回上一级菜单 *

* 3.退出 *

************************************************

比赛情况结果显示:

学校编号学校名称男子团体总分女子团体总分团体总分"

** ** ** ** **

六、测试结果:

输入学校数目:8,男子项目5,女子项目5;

输入成绩如下:(注:名次从左往右依次递增,其它同一)

项目编号:4 得分类型:三级制

1、从主菜单起的路径:1开始输入数据→进行数据输入→继续输入数据→1.查询成绩→2.团体

2、从1

输入编号:1

3. 从2

5.从

输入编号:9

输入学校编码超出范围,请重新输入!

6.从4显示提示起的路径→4退出,退出系统.

七、心得体会

在此次设计中,明显感到自己所学知识不够,而且运用不是很熟练。在数据结构分析和使用上还有待改进和提高。在今后的学习中,一定得认真学习,多做练习,多写程序。

对于指针的使用,由于之前在c语言的学习过程中,没有很好的掌握,在数据处理和调用过程中导致调用失败,结果无法显示.

经过几天的学习,对数据结构的知识有了更深一步的了解,对c语言的知识也有了深一步的巩固,知道了一个系统设计的大体步骤和方法,特别的是函数的调用问题有了更深的理解,由于调用的出现可以减

少很多不必要的麻烦,可同时也造成了系统处理的缓慢.

总之,作这个系统让我收获很多,给我将来的设计之路作好了很好的准备.

八、附录:

程序原代码如下:

/*包含的头文件有:*/

#include /*分配size个字节的内存空间*/

#include /*输入输出函数*/

#include /*动态存储分配函数或其他函数*/

#define NULL 0

#define MaxSize 30

/*变量的定义一:*/

struct athletestruct /*参赛运动员*/

{ char name[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; /*用于项目数组指针*/

/*A:输入模块*/

/* 建立链表,然后存储数据。*/

/*建立链表*/

cput ()

{ Is_Star_DoMain:

printf("\n请输入参赛学校总数(<= 20): ");

scanf("%d",&nsc);

if(nsc<=0||nsc>20)

{ printf("输入错误,请重新输入!\n");

goto Is_Star_DoMain;}

Is_Msp_DoMain:

printf("请输入男子项目总数(<=30): ");

scanf("%d",&msp);

if(msp<=0||msp>30)

{ printf("输入错误,请重新输入!\n");

goto Is_Msp_DoMain;}

Is_Wsp_DoMain:

printf("请输入女子项目总数(<=20): ");

scanf("%d",&wsp);

if(wsp<=0||wsp>20)

{printf("输入错误,请重新输入!\n");

goto Is_Wsp_DoMain;}

}

input ()

{ char answer; /*接受判断所有项目是否结束:'y'结束,'n'没结束*/ head = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));

head->next = NULL;

pfirst = head; /*工作指针*/

answer = 'y';

while ( answer == 'y' )

{

Is_Game_DoMain:

printf("\n奇数项目取前五名\n偶数项目取前三名");

printf("\n请输入运动项目序号(<=%d):",ntsp);

scanf("%d",pafirst);

overgame = *pafirst;

if ( pafirst != phead )

{ for ( pasecond = phead ; pasecond < pafirst ; pasecond ++ )

{ if ( overgame == *pasecond )

{ printf("\n*此运动项目已经输入过,请重新选择其他项目序号!\n");

goto Is_Game_DoMain;

} } }

pafirst = pafirst + 1;

if ( overgame > ntsp||overgame<=0 )

{ printf("\n没有这样的运动项目!");

printf("\n请重新输入!");

goto Is_Game_DoMain;

}

switch ( overgame%2 )

{ case 0: n = 3;break;

case 1: n = 5;break;

} for ( i = 1 ; i <= n ; i++ )

{

Is_Serial_DoMain:

printf("\n请输入第%d名学校的编号(>0&<=%d): ",i,nsc);

scanf("%d",&serial);

if ( serial > nsc ) /*判断是否存在该校*/

{ printf("\n编号超出学校总数!\n请重新输入!");

goto Is_Serial_DoMain;

}

if ( head->next == NULL ) /*建立第一个节点*/

{ create();

}

psecond = head->next ; /*遍历指针*/

while ( psecond != NULL ) /*遍历链表判断是否已存在该校*/

{ if ( psecond->serial == serial )

{ pfirst = psecond;

pfirst->count = pfirst->count + 1;

goto Store_Data;

}

else

{ psecond = psecond->next;

}

}

create();

Store_Data: /*存储数据*/

pfirst->athlete[pfirst->count].item = overgame;

pfirst->athlete[pfirst->count].range = i;

pfirst->serial = serial;

printf("请输入学校名称: ");

scanf("%s",pfirst->athlete[pfirst->count].name);

}

printf("\n是否是否继续输入运动项目?(y&n) ");

answer = getch();

printf("\n"); }}

/*B:计算统计模块*/

/* 通过遍历链表,将各参赛学校的成绩统计出来并存入结构成员中,来修改链表中的数据。*/

/*计算*/

calculate()

{ pfirst = head->next;

while ( pfirst->next != NULL )

{ for (i=1;i<=pfirst->count;i++)

{ if ( pfirst->athlete[i].item % 2 == 0 ) /*偶数项目*/

{ switch (pfirst->athlete[i].range)

{ case 1:pfirst->athlete[i].score = 5;break;

case 2:pfirst->athlete[i].score = 3;break;

case 3:pfirst->athlete[i].score = 2;break;

} }

else /*奇数项目*/

{ switch (pfirst->athlete[i].range)

{ case 1:pfirst->athlete[i].score = 7;break;

case 2:pfirst->athlete[i].score = 5;break;

case 3:pfirst->athlete[i].score = 3;break;

case 4:pfirst->athlete[i].score = 2;break;

case 5:pfirst->athlete[i].score = 1;break;

} }

if ( pfirst->athlete[i].item <=msp ) /*男子项目*/

{ pfirst->menscore = pfirst->menscore + pfirst->athlete[i].score; }

else /*女子项目*/

{ pfirst->womenscore = pfirst->womenscore + pfirst->athlete[i].score;

} }

pfirst->totalscore = pfirst->menscore + pfirst->womenscore;

pfirst = pfirst->next;

}}

/*C:输出模块*/

/* 遍历链表,将calculate()模块中的数据输出。*/

/*输出*/

School()

{ int a;

printf("\n************************************************\n");

printf("* 运动会分数统计系统--各学校成绩查询*\n");

printf("************************************************\n");

printf("请输入要查询的学校编号:(1-%d)",nsc);

scanf("%d",&a);

if(a<=0||a>nsc)

{clrscr();

printf("输入学校编码超出范围,请重新输入!");

School();}

clrscr();

printf("************************************************\n");

printf("* 运动会分数统计系统--各学校成绩查询*\n");

printf("************************************************\n");

printf("* 1.查询其他学校成绩*\n");

printf("* 2.团体总分查询*\n");

printf("* 3.返回上一级菜单*\n");

printf("* 4.退出系统*\n");

printf("************************************************\n");

printf("\n编号为%d的学校的成绩如下:\n",a);

printf("\n项目编号\t学校名称\t名次\t得分\n\n");

for (i=1;i<=ntsp;i++) /*运动员*/

{ for(j=1;j<=5;j++)

{ if(a==pfirst->athlete[j].serial)

printf("\n %d\t\t %s\t\t %d\t %d\n",j, pfirst->athlete[pfirst->count].name ,pfirst->athlete[j].range,pfirst->athlete[j].score);

} }

printf("\n请选择继续操作(1-4)\n");

i=getche();

switch(i)

{ case'1': /*查询成绩*/

{ clrscr();

School();

}

case'2': /*重新输入记录*/

{ clrscr();

Overall();

} } }

Overall()

{ printf("\n************************************************\n");

printf("* 运动会分数统计系统--团体总分查询*\n");

printf("************************************************\n");

printf("* 1.各学校成绩查询*\n");

printf("* 2.返回上一级菜单*\n");

printf("* 3.退出*\n");

printf("************************************************\n");

printf("\n比赛情况结果显示:\n学校编号\t学校名称\t\t男子团体总分\t女子团体总分\t团体总分");

pfirst = head->next;

while ( pfirst->next != NULL )

{ printf("\n %d\t %s\t %d\t\t %d\t\t %d",pfirst->serial,pfirst->athlete[pfirst->count].name,pfirst->menscore,pfirst->womenscore,pfirst->totalscore);

pfirst = pfirst->next;

}

pfirst = pfirst->next;

printf("\n\n请选择继续操作:\n");

i=getche();

switch(i)

{ case'1':

{ clrscr();

School(); } /*1.开始进行数据输入*/

break;

case'2':

{clrscr();

Find(); /*2.退出系统*/

}

case'3': /*重新输入记录*/

{ exit(3);

}

default:

{clrscr();

printf("输入错误,请重新选择");

Overall(); } } }

create()/*另外再一个建立链表。*/

{ /*前插建链表*/

pfirst = (struct schoolstruct *)malloc(sizeof(struct schoolstruct));

pfirst->next = head->next ;

head->next = pfirst ;

/*节点的初始化*/

pfirst->count = 1;

pfirst->menscore = 0;

pfirst->womenscore = 0;

pfirst->totalscore = 0; }

Start()

{ clrscr();

printf("\n************************************************\n");

printf("* 运动会分数统计系统---输入记录*\n");

printf("************************************************\n");

cput();

ntsp = msp + wsp;

/*for(i=1;i<=nsc;i++)

{printf("请输入第%d个学校的名字: ",i);

scanf("%s",&name); } */ /*运动总项目*/ /*以下段,用来解决特定问题。*/

phead = calloc(ntsp,sizeof(int));

pafirst = phead;

pasecond = phead; }

Inserts()

{ input();

calculate();/*计算*/

clrscr();

Secondout(); }

Firstout()

{ printf("\n************************************************\n");

printf("* 运动会分数统计系统*\n");

printf("************************************************\n");

printf("* 1.开始输入数据*\n");

printf("* 2.退出系统*\n");

printf("************************************************\n");

printf("请选择操作:\n");

i=getche();

switch(i)

{ case'1':

{ clrscr();

Start(); } /*1.开始进行数据输入*/

break;

case'2':

exit(2);

default:

{ clrscr();

printf("输入错误,请重新选择");

Firstout(); } /*2.退出系统*/

} }

Secondout()

{ printf("\n************************************************\n");

printf("* 运动会分数统计系统*\n");

printf("************************************************\n");

printf("* 1.成绩查询*\n");

printf("* 2.全部重录(重新开始) *\n");

printf("* 3.退出*\n");

printf("************************************************\n");

printf("请选择继续操作:\n");

i=getche();

switch(i)

{ case'1': /*查询成绩*/

{ clrscr();

Find(); }

case'2': /*重新输入记录*/

{ clrscr();

main(); }

case'3': /*重新输入记录*/

{ exit(2); }

default:

{clrscr();

printf("输入错误,请重新选择");

Secondout(); } } }

Find()

{ printf("\n************************************************\n");

printf("* 运动会分数统计系统--查询*\n");

printf("************************************************\n");

printf("* 1.各学校成绩查询*\n");

printf("* 2.团体总分查询*\n");

printf("* 3.返回上一级*\n");

printf("************************************************\n");

printf("请选择继续操作:\n");

i=getche();

switch(i)

{ case'1': /*查询各学校成绩*/

{ clrscr();

School(); }

case'2': /*查询团体总分*/

{ clrscr();

Overall(); }

case'3':

{ clrscr();/*返回上一级菜单*/

Secondout(); }

default:

{clrscr();

printf("输入错误,请重新选择");

Find(); } } }

main() /*主函数:*/

{ Firstout();

Inserts();

}

(完整word版)运动会分数统计系统实验报告

运动会分数统计系统的实现 09计科(2)班 E10914044 杨素传 一、设计要求 1、问题描述 参加运动会有n个学校,学校编码为1,2,…,n,比赛分成m个男子项目和w个女子项目。项目编号为男子1,2,…,m,女子m+1,m+2,…,m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为7,5,3,2,1;前三名的积分分别5,3,2;哪些取前五名或前三名由学生自己设定(m<=20,n<=20)。 2、需求分析 (1)可以输入各个项目的前三名或前五名成绩; (2)能统计各学校成绩; (3)可以按学校编号、学校总分、男女团体总分排序输出; (4)可以按学校编号查询学校某项目情况,可以按项目编号查询取得前三名或前五名的学校。 二、概要设计 1、主界面设计 为了实现运动会分数统计系统,设计一个含有多个菜单项的主控菜单子程序以连接系统的各项子程序,方便用户使用本程序。本系统主控菜单运行界面图1所示。 图1 运动会分数统计系统程序主菜单 2、存储结构设计 本程序采用链式存储类型(LNode)存储运动会分数统计系统的节点信息。运动会分数统计系统的链表中的结点包括8个域:项目编号域(objnum)、项目类型(objtype)、运动员编号(athnum)、运动员姓名(athname[20])、学校编号(schnum)、校名(schname[30])、

运动员分数(athscore)和指向下一个节点的指针欲(struct LNode *next)。 3、系统功能设计 本系统设置了8个子功能菜单。8个子功能的设计描述如下: (1)录入各项目的成绩。由函数creatLink()实现。当用户选择该功能时,系统会以用户输入的数据运动会分数统计链表。 (2)统计各学校分数。由函数schoolScore()实现。当用户选择该功能时,系统会统计各学校分数。 (3)按学校编号顺序输出。由函数printfSchoolNumber()实现。当用户选择该功能时,系统会按学校编号顺序输出数据。 (4)按学校总分顺序输出。由函数printfSchoolScore()实现。当用户选择该功能时,系统会按学校总分顺序输出数据。 (5)按男女团体总分顺序输出。由函数printfManWomanScore()实现。当用户选择该功能时,系统会按男女团体总分顺序输出数据。 (6)按学校编号查询学校某项目情况。由函数printfSchoolObject()实现。当用户选择该功能时,系统会按学校编号输出学校某项目情况。 (7)按项目编号查询取得前三名或前五名的学校。由函数printfObjectSchool()实现。当用户选择该功能时,系统会按项目编号查询取得前三名或前五名的学校情况。 (8)退出。由exit(0)函数实现。 三、模块设计 1、模块设计 本程序包含两个模块:主程序模块和工作区选择模块。其调用关系如图2所示。 主程序模块工作区选择模块 图2 模块调用示意图 2、系统子程序及功能设计 本系统共设置个6子程序,各子程序的函数名及功能说明如下。 (1)LinkList creatLink() //创建链表(录入各项目的成绩) (2)int schoolScore(LinkList L) //统计各学校总分 (3)void printfSchoolNumber() //按学校编号顺序输出 (4)void printfSchoolScore() //按学校总分顺序输出 (5)void printfManWomanScore(LinkList L //按男女团体总分排序输出 (6)void printfSchoolObject(LinkList L) //按学校编号查询学校某项目情况 (7)void printfObjectSchool(LinkList L) //按项目编号查询取得前三名或前五名的学校 (8)int main() //主函数 3、函数主要调用关系图 本系统6个子系统之间的主要调用关系如图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、数据 建议输入学校的名称,运动项目的名称等,其余信息学生自行设计; 输出形式:有合理的提示,各学校分数为整形; 数据的存储结构自行设计。 建议运动会的相关数据要存储在数据文件中。 3、操作 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分, 3)可以按学校编号或名称、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 4、要求 提供系统菜单,界面友好,提示信息完整。

二、系统分析及设计 1、需求分析 根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:信息统计模块、信息输出模块、信息查询模块、信息调用模块。其系统功能结构图如图所示。 (1)、信息统计模块实现信息的输入、统计、存档。 (2)、信息输出模块实现信息的输出。 (3)、信息查询模块实现信息的查询。 2、概要设计 此系统采用顺序存储结构存储,定义了一个结构体数组存放参赛学校的信息。之所以采用顺序存储结构,是因为用它来实现信息的存储、查询比较方便,节省时间,效率高,而且也方便把信息写入文件以及读取文件。 (1)、结构体定义如下: ①、定义运动项目数据类型,用于存放运动项目的信息,包括项目名称、项目编号、用户自己定义的取前3名还是前5名的积分、名次、分数。 typedef struct {

数据结构课程设计报告(运动会分数统计系统)

课程设计(论文)任务书 软件学院信息专业 1 班 一、课程设计(论文)题目运动会分数统计系统 二、课程设计(论文)工作自 2010 年 12 月27 日起至 2010 年 12 月31 日止。 三、课程设计(论文) 地点: 创新大楼软件学院大楼 四、课程设计(论文)内容要求: 1.课程设计的目的 为了配合《数据结构》课程的教学,使学生能更深刻地领会《数据结构》这门课程的重要性,特开设此课程设计;编写一些在特定数据结构上的算法,通过上机调试,更好的掌握各种数据结构及其特点,培养学生综合运用所学理论知识解决复杂实际问题的实践能力、研究性学习能力和团队合作能力。 2.课程设计的任务及要求 1)基本要求 (1)课程设计前必须选定课程设计题目,并认真进行需求分析; (2)上机调试之前要认真准备实验程序及调试时所需的测试数据; (3)程序结构要清晰,重点函数的重点变量,重点语句要加上清晰的程序注释;(4)独立思考,独立完成,调试过程要规范,认真记录调试结果; (5)撰写课设报告,对设计进行总结和讨论。 2)课程设计论文编写要求 (1)要按照书稿的规格撰写打印课设论文 (2)论文包括任务书、目录、绪论、正文、总结、参考文献、附录等 (3)正文中要有问题描述、设计求解算法、算法的实现、调试分析与结果 (4)课设论文装订按学校的统一要求完成 3)课设考核 从以下几方面来考查: (1)出勤情况和课设态度; (2)设计任务的难易程度及设计思路; (3)课设任务完成情况;

(4)动手调试能力; (5)论文撰写的层次性、条理性、格式的规范性。 4)参考文献 [1] 严蔚敏,吴伟民. 数据结构(C语言版)[M]. 北京:清华大学出版社, 2007年. [2] 谭浩强. C语言程序设计[M]. 北京:清华大学出版社,2006年. 5)课程设计进度安排 内容天数地点 构思及收集资料1图书馆 程序设计与调试3计算机房 撰写论文1图书馆 6)任务及具体要求 任务: 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。由于各项目参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。写一个统计程序产生各种成绩单和得分报表。 要求: 产生各学校的成绩单,内容包括各学校所取得的每项成绩的项目号、名次(成绩)、姓名和得分;产生团体总分报表,内容包括校号、男子团体总分、女子团体总分和团体总分。 学生签名: 2010年12月27 日 课程设计(论文)评审意见 (1)任务难易及设计思路:优()、良()、中()、一般()、差()(2)动手调试能力评价:优()、良()、中()、一般()、差()(3)任务完成情况评价:优()、良()、中()、一般()、差()(4)论文撰写水平及规范性评价:优()、良()、中()、一般()、差()(5)考勤和态度:优()、良()、中()、一般()、差() 评阅人:职称:讲师 2011年1 月3 日

1.1运动会分数统计

#include #include #include #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*/ {

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

运动会分数统计系统 一、需求分析 为了简便地对运动会的报名、成绩的录入和统计,本组设计开发了本系统,以解决需求。当然,本系统只是一个较为简单的系统,仍然存在着一些操作上以及显示上的问题,本组将在以后的学习中进行完善。 问题描述:参加运动会有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.本系统的流程图如下:

2. 本系统采用的存储结构为结构化设计理念,这是数据库的最基本的设计要求,主要包括三个数据表: (1) 项目数据表:运动会开始前必须详细制定本次运动会所需的参赛项 目为接下来报名、场地的准备提供依据。本数据表根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。这也有利于以后项目情况的查询。 typedef struct { int itemnum; //项目编号 int top; //取名次的数目 int range[5]; //名次 int mark[5]; //分数 }itemnode; //定义项目结点的类型 Y N N N Y Case1 Case3 N Y Y 开始---初始化 输入 输入某项目各名次成绩 输入学校及男女项目范围 继续输 查询各学校成绩 Case2 查询团体总分 成绩查询 输出查询学校成绩 继续 结束—退出 继续

C语言课程设计报告_运动会分数统计系统

课程设计报告 课程名称《C语言程序设计》 课题名称运动员分数统计系统 专业电气工程及其自动化 班级电气1186 学号201113010628 姓名何长学 指导教师王颖 2012 年6月15日

湖南工程学院 课程设计任务书 课程名称《C语言程序设计》课题运动员分数统计系统 专业班级电气1186 学生姓名何长学 学号201113010628 指导老师王颖 审批 任务书下达日期2012年6月04日 任务完成日期2012年6月15 日

一、设计内容与设计要求 1.课程设计目的: 全面熟悉、掌握C语言基本知识,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为后继课程(数据结构、数据库和汇编语言等课程)的实验以及课程设计打下较扎实的基础。 2.课题题目 ⑴班级成绩管理系统 ⑵班级档案管理系统 ⑶飞机订票系统 ⑷猜数字游戏 ⑸电子英汉词典设计 ⑹心算抢答系统 ⑺运动会分数统计系统 ⑻小学生心算CAI系统 3.设计要求: 掌握结构化程序设计的主体思想,以自顶向下逐步求精的方法编制程序解决一些实际的中型问题,为将来开发软件积累一些典型的案例处理经验。 具体要求如下: ⑴设计课题题目:每位同学根据自己学号除以8所得的余数加一 选择相应题号的课题。换题者不记成绩。 ⑵根据自己对应的课题完成以下主要工作:①完成系统需求分析:包 括系统设计目的与意义;系统功能需求;输入输出的要求。②完成系统概要设计:程序由哪些模块组成以及模块之间的层次结构、各模块的调用关系; 每个模块的功能;课题涉及的数据结构和数据库结构;即要存储什么数据,

运动会分数统计系统的设计与实现

目录 1 实习目的 (1) 2 问题描述 (1) 3 需求分析 (1) 4 概要设计 (2) 5 详细设计 (5) 5.1数据结构定义 (5) 5.2各个函数分析 (5) 6 调试与测试 (19) 6.1调试 (19) 6.2 测试 (19) 7 使用说明 (22) 8 总结 (23) 9 参考文献 (23) 10 附录 (23)

运动会分数统计系统的设计与实现 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)实现如下功能:(1)可以输入各个项目的前三名或前五名的成绩; (2)能统计各学校总分; (3)可以按学校编号或名称、学校总分、男女团体总分排序输出; (4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校; (5)数据存入文件并能随时查询。 3 需求分析 3.1功能需求 本系统主要是运动会分数统计方案设计。 运动会分数统计方案适合采用结构体数组,为了实现系统功能,主要应实现以下几部分:比赛成绩输入、比赛成绩输出、查询比赛成绩和调用统计结果。 3.2 数据需求

需要输入学校编号,项目编号,取得的名次,以及哪些名次。 3.3 性能需求 本程序在运行期间,为了避免在运行大量数据时不会出错,并且能够在很短的时间内将运行结果稳定输出,就需要系统达到安全性能好,可靠性高,稳定性强,处理数据迅速等特点。 4 概要设计 4.1系统设计方案 本方案要求准备结构体数组、读写文件。还能把信息直接输入存储到文件中,读取文件中信息,从而得到结果。 (1) 菜单设计 分为主函数菜单、比赛成绩输出菜单、查询分数统计结果菜单、查询方式子菜单。 (2) 数据保存方式 建立文件,数据保存在文件中。运动运分数统计程序 (3) 数据类型 采用结构体类型。 (4) 存储结构 采用结构体类型数组存储结构存储。 (5) 算法设计 输入比赛结果模块中运用了冒泡算法将输入的数据排序。 4.2 数据库设计 系统用到的抽象数据类型定义: typedef struct { int itemnum; //项目编号

大数据结构实验运动会分数统计实验报告材料

‘ 实验报告 题目:运动会分数统计 班级:14电子商务平台建设班完成日期:2015.10.10 学号:20141103468 :少辉 学号:20141103421 :德龙 学号:20141103407 :柴益新 一:需求分析 参加运动会的n个学校编号为1~n。比赛分成m个男子项目和w个女子项目,项目编号分别为1~m和m+1~m+w。有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。 【基本要求】 产生各学校的成绩单,容包括各校所取得的每项成绩的项目号、名次(成绩)、和得分;产生团体总分报表,容包括校号、男子团体总分、女子团体总分和团体总分。 结于n=4,m=3,w=2,编号为奇数的项目取前五名,编号为公里数的项目取前三名,设计一组实例数据。 【项目约束】 可以假设n≤20,m≤30,w≤20,长度不超过20个字符。每个项目结束时,将其编号、类型符(区分取前五名还是前三名)输入,并按

名次顺序输入运动员、校名(和成绩)。 二:概要设计 采用结构体二维数组存储方式产生各学校的成绩单,容包括各校所取得的每项成绩的项目号、名次(成绩)、和得分;产生团体总分报表,容包括校号、男子团体总分、女子团体总分和团体总分。 三:详细设计 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).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 (数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决) 请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。 进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;【测试数据】 自行设定,注意边界等特殊情况。 */

目录 一、需求分析 (3) 二、概要设计 (1) 三、详细设计 (3) 四、程序调试与实现 (7) 五、用户使用说明..................................................................... 错误!未定义书签。 六、附录..................................................................................... 错误!未定义书签。

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

. 计算机学院信管专业 数据结构课程设计 题目:运动会分数统计班级: 姓名:学号: 同组人: 起迄日期: 课程设计地点: 指导教师: 评阅意见: 成绩评定: 评阅人:日期: 完成日期: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)采用顺序表的查找来完成。

数据结构实验运动会分数统计一实验报告

实验报告一 题目:运动会分数统计 班级:通信工程姓名:张雪婷 学号:20081121037 完成日期:2010-4-5 一、需求分析 要产生N个参加运动会的学校的成绩单,内容包括各校所取得的每项成绩的项目号,名次,姓名和得分;产生团体总分报表。内容包括校号,男子团体总分,女子团体总分和团体总分。 二、概要设计 1、结构体定义及模块 struct athlete //运动员结构体 { }; struct Seqlist //数组结构体 { Athlete elem[MAXSIZE]; int last; }; void build( Seqlist &list,int n) { 建立数组用来存放数据 } void display(Seqlist L,int num,int n ) { 输出学校的成绩单及团体总分等信息 } int main() { 实现总体调用函数 } 2、本程序包括的模块有: 1>创建一个线性数组来存放数据,输入学生的信息 2>打印成绩单,输出学校的团体总分,男团,女团总分 3>主控模块 三、详细设计

1、数据结构体的定义 struct Athlete 运动员结构体。定义了运动员中的属性 { int school; int item; //项目编号 int place; //名次 int score; char name[22]; char sex; }; struct Seqlist 结构体数组 { Athlete elem[MAXSIZE]; int last; }; 2、函数调用之间的关系 四、调试分析 1、用线性数组来实现这个实验,首先应当对线性数组了解透彻,如何传参。 2、用结构体定义的时候要明确题目目标,如结构体都有那些属性 3、在打印模块,for循环中要掌握好循环变量,分清运动员数和学校数。 4、收获:在完成本次实验中采用了线性数组存储信息,是我对这种存储方式有了更深的认识,也加深了掌握。本次程序分为两大模块,使得程序清晰易懂,各模块具有良好的重要性,确实得到了良好的程序设计训练。 五、用户使用说明: 1、本程序的运行环境为Dve-C++. 2、进入演示程序后及用户界面为: 3、用户操作提示:根据界面提示输入学校和运动员的个数(注意学校的个数应当小于等于

运动会分数统计系统

数据结构课程设计 运 动 会 分 数 统 计 东华大学信息科学与技术学院 班级:电气0910班 姓名:周涛涛 学号:090901017

一.需求分析 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

数据结构试验报告 实验三 综合设计 实验题目:霍夫曼编码课程设计 专业班级:计科系1507班 组长:李煜(2015100733) 组员:高干(2015100730) 张慧锋(2015100725) 王俊艳(2015100715) 2017年 5月 31日

实验报告 实验类型综合设计实验室软件实验室二一、实验题目 霍夫曼编码课程设计 二、实验目的和要求 1.掌握霍夫曼编码 2.掌握递归调用的基本运算及应用。 3.尽可能考虑算法的健壮性。 4.实验报告中要写出测试数据、错误分析以及收获。 三、需求分析 霍夫曼编码”(Win32控制台程序)使用Microsoft Visual Basic 6.0编写,编码采用哈夫曼树路径递归算法,提供查询方式。并尽可能地考虑了系统的健壮性。 提供完整测试数据、原代码文件、Win32控制台程序相关运行截图、系统菜单示意。提供系统运作流程图、数据传递及函数功能实现原理。 分析程序编写中产生的问题,并列出错误分析过程及解决方法。 四、概要设计 本次开发的“运动会分数统计系统”实现了上述程序功能,代码如下: #include #include #include #define MAXLEN 100 typedef struct { int weight; int lchild; int rchild; int parent; char key; }htnode; typedef htnode hfmt[MAXLEN]; int n; void inithfmt(hfmt t)//对结构体进行初始化 { int i; printf("\n"); printf("------------------------------------------------------------------\n");

运动会成绩统计 实验报告

实验说明 题目:运动会分数统计 一.需求分析: 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)构造线性表的存储结构。 2)根据每个学生的名次确定相应的得分。 3)输出各个学校的成绩单和男子团体总分,女子团体总分和团体总分。二.概要设计 1.该程序包含两个结构体分别为: 结构体(1)运动员信息 结构体(2)学校信息 2.本程序包括4个模块: 1>初始化学校信息。 2>依次输入每个运动员的信息。 3>根据每个学生的成绩计算对应的得分,及个学校的总得分、男团总分、 女团总分。

4>生成个学校的成绩单,并输出。三.详细设计 1.数据结构的定义: ○1描述运动员的线性表 typedef struct { int item[MAXSIZE]; //参赛项目号 char thletename[MAXSIZE][20];//姓名 char sex[MAXSIZE];//性别 int schoolnum[MAXSIZE];//所在学校编号 int num[MAXSIZE];//名次 int point[MAXSIZE];//得分 int last; }Thlete; ○2描述学校的线性表 typedef struct { int schoolnum[MAXSIZE];//学校编号 int Tgirl[MAXSIZE];//女生团体总分 int Tboy[MAXSIZE];//男生团体总分 int Tall[MAXSIZE];//学校总成绩 int last; }School; ○3.控制输入的函数 int input(Thlete *S1,int n,int m,int w)

运动会运动会分数统计(数据结构)

摘要: 本文详细介绍了运动会分数统计程序的设计与实现,该程序具有运动会成绩的输入,每个学校所参加的项目成绩的查询,修改,删除,统计操作以及学校成绩单和团体得分报表的输出等功能。概要设计部分给出了程序功能说明,数据结构设计和函数变量说明。详细设计和实现部分列出了系统功能模块、算法原理及流程图。最后还给出了调试和操作说明。在课程设计中,程序设计语言采用Visual C++,程序运行平台为Windows 98/2000/XP。对于获得名次的同学在存储其成绩的时候采用了链表的结构,有利于数据的存储与查找。程序通过调试运行,实现了最初的设计目标,并且经过适当完善后,在实际中可以解决更多的问题。 关键词:运动会分数统计;程序设计;C++;链表

目录 1需求分析 (3) 2概要设计 (4) 2.1 程序功能说明 (4) 2.2 数据结构设计 (4) 2.3 函数及变量说明 (5) 3详细设计和实现 (5) 3.1 系统功能模块 (5) 3.2 算法原理 (6) 3.3 流程图 (7) 4调试与操作说明 (7) 4.1调试过程中出现的问题及处理方式 (7) 4.2运行界面 (9) 总结 (12) 致谢 (13) 参考文献 (14)

1需求分析 运动会问题:参加运动会的N个学校编号为1—N。比赛分为M个男子项目和W个女子项目,项目编号分别为1—M和M+1—M+W。由于各项目的参加人数差别较大,有些项目取前五名,得分顺序为7,5,3,2,1;还有些项目只取前三名,得分顺序为5,3,2。 该系统具备的基本功能:该统计程序能产生各种成绩单和得分报表:各校的成绩单,内容包括各学校所取得每项成绩的项目号,名次(成绩),姓名和得分;产生团体总分报表,内容包括校号,男子团体总分,女子团体总分和团体总分。也能对其中的错误项进行修改或删除。 本课程设计主要解决在运动会上,将各个比赛项目所有获得名次的同学的成绩输入;成绩查询;成绩修改;成绩删除;以及成绩输出。 实验环境:Microsoft Visual C++ 6.0。Visual C++(简称VC)是Microsoft公司推出的目前使用极为广泛的基于Windows平台的C++可视化开发环境。Visual C++ 6.0提供的控制台应用程序对学习和掌握标准C++内容非常有利。“可视”的资源编辑器与MFC类以及应用程序向导,为快速高效地开发出功能强大的Windows应用程序提供了极大的方便。利用Visual C++ 6.0进行Internet、数据库及多媒体等多方面的程序开发也很容易。 本课程设计采用了C++。C++语言是在C语言的基础上发展起来的,不仅继承了C语言的所有特点,而且引入了面向对象的程序设计方法,改进了程序涉及思路,将编程方式进化到面向对象进行程序设计这一新的思维过程。 C++语言代表着对以往语言之精华的发展和提炼,并能很好的与C语言兼容,既支持面向对象的程序设计,也支持结构化的程序设计。它修补了C语言中的一些漏洞,提供更好的类型检查和编译时的分析,提供了异常处理机制,简化了程序的出错处理,利用throw、try和catch关键字,出错处理程序不必与正常的代码紧密结合,提高了程序的可靠性和可读性。函数重载允许相同的函数名具有不同参数表,系统根据参数的个数和类型匹配相应的函数。提供了模板机制。摸板包括类摸板和函数模板两种,它们将数据类型作为参数。对于具体数据类型,编译器自动生成模板类或模板函数,它提供了源代码复用的一种手段。

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

目录 第一章绪论 (1) 运动会分数统计系统的背景 (1) 运动会分数统计系统的任务和目标 (1) 第二章运动会分数统计系统的需求分析 (2) 功能需求 (2) 功能模块 (2) 数据要求 (3) 性能要求 (3) 第三章系统开发工具及关键技术 (4) 系统开发工具 (4) 3.1.1 CodeBlocks (4) 关键技术 (4) 3.2.1 C语言 (4) 3.2.2 数组 (4) 3.2.3 链表 (4) 第四章运动会分数统计系统的实现 (5) 数据结构设计 (5) 结构定义 (5) 系统界面的实现 (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) 课程设计总结 (11) 致谢 (11) 参考文献 (12) 附录 (13)

第一章绪论 运动会分数统计系统的背景 在信息技术已经深入人类工作生活的今天,计算机软件得到了广泛的应用,越来越多的政府和企业将其业务纳入计算机软件系统。 随着社会进步,体育事业的发展,为了提高运动会成绩统计准确,减少设计者们的工作量,开发了本系统。 运动会分数统计系统的任务和目标 任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前前三名积分;前三名的积分分别为:5、3、2。(m、w<=20,n<=10)。 目标: 1.可以输入各个项目的前三名或前五名的成绩; 2.能统计各学校总分; 3.可以按学校编号、学校总分、男女团体总分排序输出; 4.可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)。

运动会分数统计实验报告

目录 一.设计要求 (1) 二.设计分析 (1) 三.设计实现 (3) 四.实验心得 (8) 五.参考文献 (8) 一.设计要求: 任务:参加运动会有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).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称) 输出形式:有中文提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 二.设计分析: 本程序中学校的存储结构为数组. 运动项目结构体: 图1 运动项目结构体 学校结构体:

图2学校机构体 主菜单结构: 图3主菜单结构主要结构: typedef struct //项目结构 { char xmm[100]; //项目名称 char num[5]; //项目编号 int score; //项目得分}xiangm;

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

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

相关主题
文本预览
相关文档 最新文档