数据结构课程实验设计1

A:运动会分数统计

一、实验原理

(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).可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)

输出形式:有中文提示,各学校分数为整型

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;

测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 二、实验程序

1、需求分析

根据运动会分数统计系统的问题分析及设计要求,可以将此系统分为四个模块:信息统计模块、信息输出模块、信息查询模块、信息调用模块。 (1)、信息统计模块实现信息的输入、统计、存档。 (2)、信息输出模块实现信息的输出。 (3)、信息查询模块实现信息的查询。 (4)、信息调用模块实现信息的调用,即从文件中读出信息并输出。 2、概要设计

此系统采用顺序存储结构存储,定义了一个结构体数组存放参赛学校的信息。之所以采

用顺序存储结构,是因为用它来实现信息的存储、查询比较方便,节省时间,效率高,而且也方便把信息写入文件以及读取文件。 三、系统实现 源代码:

# include # include # include

# define M 1 //男子项目个数 # define W 1 //女子项目个数 # define N 2 //学校个数 # define NULL 0

void Menu(); //函数声明 typedef struct {

char proname[10]; //项目名称 int pronum; //项目编号

int top; //取前3名或前5名积分,由用户自己定义 int range[5]; //名次 int mark[5]; //分数

}Pronode; //项目结点类型定义 typedef struct {

char schname[20]; //学校名称 int schnum; //学校编号 int score; //总分

int Mscore; //男团体总分

int Wscore; //女团体总分 Pronode a[M+W]; //项目数组

}Schnode; //学校结点类型定义

Schnode s[N]; //定义一个学校结点类型的结构体数组

void Head() //头菜单界面 {

cout<<\*************************************************\ cout<<\***** 欢迎使用 *****\ cout<<\***** 运动会分数统计系统 *****\ cout<<\*************************************************\ cout<

void MainMenu() //主菜单界面 {

cout<<\*************************************************\

cout<<\***** 主菜单 *****\ cout<<\*************************************************\ cout<<\***** 1.输入信息 *****\ cout<<\***** 2.输出信息 *****\ cout<<\***** 3.查询信息 *****\ cout<<\***** 4.调用信息 *****\ cout<<\***** 5.关于 *****\ cout<<\***** 6.退出系统 *****\ cout<<\*************************************************\ cout<<\***** 注:第一次运行本程序时请选择1号功能 *****\

cout<<\*************************************************\void SubMenu() //总分显示菜单界面 {

cout<<\*************************************************\ cout<<\***** 运动会总分显示菜单 *****\ cout<<\*************************************************\ cout<<\***** 1.按学校名称输出 *****\ cout<<\***** 2.按学校总分输出 *****\ cout<<\***** 3.按男团总分输出 *****\ cout<<\***** 4.按女团总分输出 *****\ cout<<\***** 5.退出返回主菜单 *****\ cout<<\***** 6.直接退出本系统 *****\ cout<<\*************************************************\}

void InitSch() //初始化信息 {

int i; for(i=0;i

s[i].score=0; s[i].Mscore=0; s[i].Wscore=0; } }

void InfoInput() //信息输入模块 {

int i,j,k,m;

InitSch(); //初始化信息

for(i=0;i

cout<<\学校名称:\ cin>>s[i].schname;

cout<<\学校编号:\ cin>>s[i].schnum;

for(j=0;j

cout<<\项目名称:\

cin>>s[i].a[j].proname; cout<<\项目编号:\cin>>s[i].a[j].pronum;

cout<<\取前3名还是前5名:\cin>>s[i].a[j].top;

cout<<\此项目获得的名次个数:\cin>>k;

for(m=0;m<5;m++) //初始化排名和分数 {

s[i].a[j].range[m]=0; s[i].a[j].mark[m]=0; }

for(m=0;m

cout<<\名次:\ cin>>s[i].a[j].range[m];

if(s[i].a[j].top==3) //匹配各名次对应的分数 {

switch(s[i].a[j].range[m]) {

case 0: s[i].a[j].mark[m]=0; break; case 1: s[i].a[j].mark[m]=5; break; case 2: s[i].a[j].mark[m]=3; break; case 3: s[i].a[j].mark[m]=2; break; } } else {

switch(s[i].a[j].range[m]) {

case 0: s[i].a[j].mark[m]=0; break; case 1: s[i].a[j].mark[m]=7; break; case 2: s[i].a[j].mark[m]=5; break; case 3: s[i].a[j].mark[m]=3; break; case 4: s[i].a[j].mark[m]=2; break; case 5: s[i].a[j].mark[m]=1; break; } }

s[i].score=s[i].score+s[i].a[j].mark[m]; //统计学校总

if(j<=M-1)

s[i].Mscore=s[i].Mscore+s[i].a[j].mark[m]; //统计男团总分 else

s[i].Wscore=s[i].Wscore+s[i].a[j].mark[m]; //统计女团总分

}

cout<

void Output(int b[]) //输出各学校运动会分数信息 {

int i;

for(i=0;i

cout<<\学校名称:\ cout<<\学校编号:\ cout<<\学校总分:\ cout<<\男团总分:\ cout<<\女团总分:\ cout<

system(\程序暂停,以显示结果 system(\清屏 }

void InfoOutput() //信息输出模块 {

FILE *fp;

int number,i,j,k,b[N];

if((fp=fopen(\以读方式打开文本文件

//并判定能否正常打开

{

cout<<\文件打不开!\不能正常打开文件的处理 exit(0); //调用函数exit终止程序运行 }

while(1) {

Head(); //头菜单界面 SubMenu(); //总分显示菜单界面 cout<<\ 请选择:\ cin>>number; switch(number) {

case 1: //按学校名称输出 system(\

Head(); //头菜单界面

cout<<\运动会各学校信息按学校名称输出如下:\

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4