运动会成绩统计系统

求助!求助!求助啊!各位高手们!
大学生的校运动会,要求用C语言编写能够录入各个学院的得分的程序,要详细注释,得分情况从外部输入。实在是不会写,写不完就回不了家啦,帮帮忙啊,有重谢。

数据结构课程设计

一.需求分析
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 3
2、数据类型定义
(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、函数之间的调用关系

4、算法设计
主要算法的设计思想:

本程序主要是使用顺序表来实现操作。一个运动会包括运动项目和参加运动会的学校。因此构造顺序表match,school。为了操作的方便,设计了一个总目录,选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选择返回目录或退出程序,对于总分的排序使用了冒泡排序。为了使整个程序界面看起来更加惬意,又添加了背景和字体颜色设置的程序语句。每个操作前都有操作指南,易于使用。
四、调试分析
1、由于刚开始程序比较简单,虽能运行,但处理错误的能力很低,后来经过反复的添加修改,使程序能处理了错误,提高了健壮性。
2、开始编时由于不太规范,编译出错后由于程序长,很难找到错误,后来规范了格式,错误容易找到了,以后编程要规范。
3、算法的时空分析
线性表使用的是顺序结构,各种算法的时间复杂度相对比较合理
4、本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。通过调试,运行,基本上达到了要求,但还存在一些缺点。如:不够人性化等。
五、测试结果
<1>数据输入(输入成绩如图)

输入:
请输入学校编号:1
项目编号 1 2 3 4 5 6 7
第<1>名: 1 0 0 1 1 0 0
第<2>名: 1 1 1 0 0 1 0
第<3>名: 0 0 0 0 1 1 1
请输入学校编号: 2
项目编号 1 2 3 4 5 6 7
第<1>名: 0 1 1 0 0 1 1
第<2>名: 0 0 0 1 1 0 1
第<3>名: 1 1 1 1 0 0 0
输入成绩后出现总目录(下图);

(1)输入:1
输出:
(2)输入:1 返回总目录,再输入:2
输出:
(3)输入:1 返回总目录,再输入:3
输出:

(4)输入:1 返回总目录,再输入:4
输出:

(5)输入:1 返回总目录,再输入:5
输出:

(6)输入:1 返回总目录,再输入:6,学校编号输入:1,项目编号输入:5
输出:

(7)输入:2,返回上一级,再输入学校编号:2,项目编号:1
输出:
(8)输入:1,返回总目录;再输入:7,输入项目编号:7
输出:
(9)如果输入提示外的数字,例如输入:4
则输出错误提示:
(10)输入:0
输出:

六、用户手册
1、运行环境
Windows,VC++6.0
2、用户界面

3、操作过程
(1)用户进入运动会分数统计系统程序欢迎界面
(2)录入成绩,先输入要输入的学校编号,1或2;再输入对应学校的1-7项目的成绩(成绩用0或1:‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次)当成绩录入错误时会有错误提示。
(3)进入总目录,按提示,输入0--7中的一个数;
输入:0 则推出系统;
输入:1 统计各学校总分并输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’表示返回总目录);
输入:2 按学校编号排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’表示返回总目录);
输入:3 按学校总分排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’表示返回总目录);
输入:4 按男团体总分排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’表示返回总目录);
输入:5 按女团体总分排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’表示返回总目录);
输入:6 按学校编号查询学校某个项目编号;选择学校编号1或2;然后选择项目编号1--7;输出项目成绩;然后选择0或1或2(‘0’表示退出系统,‘1’表示返回总目录,‘2’表示返回上一级);
输入:7 按项目编号查询取得名次的学校;选择项目编号1--7;输出成绩;然后选择0或1或2(‘0’表示退出系统,‘1’表示返回总目录,‘2’表示返回上一级);
七、参考文献
(1)《C程序设计》(第三版) 谭浩强 著 清华大学出版社
(2)《数据结构》(C语言版)作者:严蔚敏,吴伟民 出版社:清华大学出版社
(3)《数据结构题集》(C语言版)作者:严蔚敏,吴伟民 出版社:清华大学出版社
八、附录

1、源程序

#include<stdio.h>
#include<process.h>

#define N 2 //学校个数
#define bm 4 //男团体个数
#define gm 3 //女团体个数
void xuanze();
void xunhuan();
struct match //项目
{
int matchnum;
int rank[3];
}mat[bm+gm];
struct school //学校
{
int schoolnum;
struct match mat[bm+gm];
int total;
int boytotal;
int girltotal;
}sch[N];
void huanyingni() /*开始界面,欢迎使用*/
{
printf("\n\n 东华大学信息科学与技术学院电气0910班 周涛涛\n\n\n");
printf("\t***^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^***\n\n");
printf(" 欢迎使用运动会分数统计系统\n\n");

printf("\t***^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^***\n\n ");
}
void input() //输入成绩
{
int i,j,k;
for(i=0;i<N;i++) //初始化分数
{
sch[i].total=0;
sch[i].boytotal=0;
sch[i].girltotal=0;
for(k=0;k<bm+gm;k++)
{
sch[i].mat[k].rank[0]=0;
sch[i].mat[k].rank[1]=0;
sch[i].mat[k].rank[2]=0;
sch[i].mat[k].matchnum=k+1;
}
}
printf(" *********输入成绩**********\n");
printf("###输入说明:\n");
printf(" 1.学校编号为1--%d; 项目编号为1--%d (1-%d为男子项目,%d-%d为女子项目).\n",N,bm+gm,bm,bm+1,bm+gm);
printf(" 2. 成绩只能是‘0’或‘1’\n(‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次.以'Tab'键前进。)\n",N);
for(i=0;i<N;i++)
{
printf("******请输入学校编号: ");
loop3:scanf("%d",&sch[i].schoolnum);
if(sch[i].schoolnum<0||sch[i].schoolnum>N)
{
printf("输入错误(只能是1-%d)请重新输入:",N);
goto loop3;
}
printf("项目编号 ");
for(k=0;k<bm+gm;k++)
printf("%d ",sch[i].mat[k].matchnum);
printf("\n");
for(j=0;j<3;j++)
{
loop: printf("第(%d)名:",j+1);
for(k=0;k<bm+gm;k++)
scanf(" %d",&sch[i].mat[k].rank[j]);
for(k=0;k<bm+gm;k++)
if(sch[i].mat[k].rank[j]!=0&&sch[i].mat[k].rank[j]!=1)
{
printf("输入错误,请重新输入,成绩只能是‘0’或‘1’\n");
goto loop;
}

}
}
}

void totaljisuan()
{
int i,k,b;
for(i=0;i<N;i++)
for(k=0,b=0;k<bm+gm;k++)
{
b=sch[i].mat[k].rank[0]*5+sch[i].mat[k].rank[1]*3+sch[i].mat[k].rank[2]*2;
sch[i].total=sch[i].total+b;
if(k<bm)
sch[i].boytotal=sch[i].boytotal+b;
if(k>=bm)
sch[i].girltotal=sch[i].girltotal+b;
}
}
void mulu(){
printf("\n\n **系统目录**\n"); //目录
printf("\t\t ************************************\n");

printf("\t\t* 1.统计各学校总分 *\t \n");
printf("\t\t* 2.按学校编号排序输出 *\t \n");
printf("\t\t* 3.按学校总分排序输出 *\t \n");
printf("\t\t* 4.按男团体总分排序输出 *\t \n");
printf("\t\t* 5.按女团体总分排序输出 *\t \n");
printf("\t\t* 6.按学校编号查询学校某个项目情况 *\t \n");
printf("\t\t* 7.按项目编号查询取得名次的学校 *\t \n");
printf("\t\t* 0.退出 *\t \n");
printf("\t\t ************************************\n");
}
void funct0() //退出系统
{
printf("\n\t\t******* 谢谢使用! *******\n");
printf("\n\t\t******* 谢谢使用! *******\n");
exit(0);
}

void funct1() //统计各学校总分
{ int i,q;
printf(" **********统计各学校总分**********\n");
printf(" **学校编号**\t\t\t\t**总分**\n");
for(i=0;i<N;i++)
printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total);
printf("\n");printf("\n");
printf("########## 0:退出;1:返回目录。\n");
printf("****请选择: ");
loop2:scanf("%d",&q);
if(q==0) funct0();
if(q==1) xunhuan();
else {
printf("输入错误(只能是0或1),请重新输入:");
goto loop2;
}
}
void funct2() //按学校编号排序
{
struct school sch1;
int i,j,q;
for(j=0;j<N-1;j++)
for(i=0;i<N-j-1;i++)
if(sch[i].schoolnum>sch[i+1].schoolnum)
{
sch1=sch[i];
sch[i]=sch[i+1];
sch[i+1]=sch1;
}

printf(" **********按学校编号排序**********\n");
printf(" **学校编号**\t\t\t\t**总分**\n");
for(i=0;i<N;i++)
printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total);
printf("\n");printf("\n");
printf("########## 0:退出;1:返回目录。\n");
printf("****请选择: ");
loop2: scanf("%d",&q);
if(q==0) funct0();
if(q==1) xunhuan();
else {
printf("输入错误(只能是0或1),请重新输入:");
goto loop2;
}
}
void funct3() //按学校总分排序
{
struct school sch1;
int i,j,q;
for(j=0;j<N-1;j++)
for(i=0;i<N-j-1;i++)
if(sch[i].total<sch[i+1].total)
{
sch1=sch[i];
sch[i]=sch[i+1];
sch[i+1]=sch1;
}
printf(" **********按学校总分排序**********\n");
printf(" **学校编号**\t\t\t\t**总分**\n");
for(i=0;i<N;i++)
printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].total);
printf("\n");printf("\n");
printf("########## 0:退出;1:返回目录。\n");
printf("****请选择: ");
loop2: scanf("%d",&q);
if(q==0) funct0();
if(q==1) xunhuan();
else {
printf("输入错误(只能是0或1),请重新输入:");
goto loop2;
}
}
void funct4() //按男团体总分排序
{
struct school sch1;
int i,j,q;
for(j=0;j<N-1;j++)
for(i=0;i<N-j-1;i++)
if(sch[i].boytotal<sch[i+1].boytotal)
{
sch1=sch[i];
sch[i]=sch[i+1];
sch[i+1]=sch1;
}
printf(" **********按男团体总分排序**********\n");
printf(" **学校编号**\t\t**总分**\n");
for(i=0;i<N;i++)
printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].boytotal);
printf("\n");printf("\n");
printf("########## 0:退出;1:返回目录。\n");
printf("****请选择: ");
loop2: scanf("%d",&q);
if(q==0) funct0();
if(q==1) xunhuan();
else {
printf("输入错误(只能是0或1),请重新输入:");
goto loop2;
}
}
void funct5() //按女团体总分排序
{
struct school sch1;
int i,j,q;
for(j=0;j<N-1;j++)
for(i=0;i<N-j-1;i++)
if(sch[i].girltotal<sch[i+1].girltotal)
{
sch1=sch[i];
sch[i]=sch[i+1];
sch[i+1]=sch1;
}
printf(" **********按女团体总分排序**********\n");
printf(" **学校编号**\t\t**总分**\n");
for(i=0;i<N;i++)
printf("\t%d\t\t\t\t%d\n",sch[i].schoolnum,sch[i].girltotal);
printf("\n");printf("\n");
printf("########## 0:退出;1:返回目录。\n");
printf("****请选择: ");
loop2:scanf("%d",&q);
if(q==0) funct0();
if(q==1) xunhuan();
else {
printf("输入错误(只能是0或1),请重新输入:");
goto loop2;
}
}
void funct6() //按学校编号查询学校某个项目情况
{
int i,n,m,q;
printf(" **********按学校编号查询学校某个项目情况**********\n");
loop1: printf("*******请输入所要查询的学校编号: ");
scanf("%d",&n);
if(n!=1&&n!=2)
{
printf("!!!!!输入错误,学校编号只能是“0”或“1”,请重新输入!!!!\n");
goto loop1;
}
printf("*******请输入所要查询的项目编号: ");
scanf("%d",&m);
for(i=0;i<N;i++)
if(n==sch[i].schoolnum)
{
printf("学校编号: %d 项目编号: %d\n",n,m);
if(sch[i].mat[m].rank[0]==1)
printf("第一名(获得) ");
if(sch[i].mat[m].rank[1]==1)
printf("第二名(获得) ");
if(sch[i].mat[m].rank[2]==1)
printf("第三名(获得) ");
else
printf("本校该项目未进入前三名");

}
printf("\n");printf("\n");
printf("########## 0:退出;1:返回目录;2:返回上一级。\n");
printf("****请选择: ");
loop2: scanf("%d",&q);
if(q==1) xunhuan();
if(q==0) funct0();
if(q==2) goto loop1;
else {
printf("输入错误(只能是0或1或2),请重新输入:");
goto loop2;
}
}
void funct7() //按项目编号查询取得名次的学校
{
int i,t,q;
printf(" **********按项目编号查询取得名次的学校**********\n");
loop1: printf("*****请输入所要查询的项目编号: ") ;
scanf("%d",&t);
printf("项目编号:%d\n",t) ;
for(i=0;i<N;i++)
{
if(sch[i].mat[t-1].rank[0]==1)
printf("获得第一名的学校编号是:%d \n",sch[i].schoolnum);
if(sch[i].mat[t-1].rank[1]==1)
printf("获得第二名的学校编号是:%d \n",sch[i].schoolnum);
if(sch[i].mat[t-1].rank[2]==1)
printf("获得第三名的学校编号是:%d \n",sch[i].schoolnum);
}
printf("\n");printf("\n");
printf("########## 0:退出;1:返回目录;2:返回上一级。\n");
printf("****请选择: ");
loop2: scanf("%d",&q);
if(q==1) xunhuan();
if(q==0) funct0();
if(q==2) goto loop1;
else {
printf("输入错误(只能是0或1或2),请重新输入:");
goto loop2;
}
}
void xunhuan() //返回目录
{
int t;
mulu();
printf("\t\t请选择(输入0--7)序号:\t");
scanf("%d",&t);
while(t!=0&&t!=1&&t!=2&&t!=3&&t!=4&&t!=5&&t!=6&&t!=7)
{
printf("输入有误,请重新选择:");
scanf("%d",&t);
}
switch(t)
{
case 0:funct0();break;
case 1:funct1();break;
case 2:funct2();break;
case 3:funct3();break;
case 4:funct4();break;
case 5:funct5();break;
case 6:funct6();break;
case 7:funct7();break;

}
}

void main()
{
system("Color 1e"); //改变背景,前景色
huanyingni();

input();
totaljisuan();
xunhuan();

}
九、课程设计体会
本次课程设计检验了我的实践能力,感觉自己还有许多东西要学习,并不仅限于课本上的知识,实践才是真理,在学习中实践,实践中去学习。学习的路很长。
再有要多问,几个人共同讨论会有意想不到的效果
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-14
去网上下载一个啊!
第2个回答  2012-07-14
第3个回答  2012-07-13
这个你可以用SPSS软件。
第4个回答  2012-07-13
不知道
相似回答