运动会分数统计系统
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
goto loop;
}
}
11
} }
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]
4
4、算法设计 主要算法的设计思想:
本程序主要是使用顺序表来实现操作。一个运动会包括运动项目和参加运动会的 学校。因此构造顺序表 match,school。为了操作的方便,设计了一个总目录, 选择相应序号进入各个操作,并有错误提示,每完成一个操作程序会提示选 择返回目录或退出程序,对于总分的排序使用了冒泡排序。为了使整个程序 界面看起来更加惬意,又添加了背景和字体颜色设置的程序语句。每个操作 前都有操作指南,易于使用。
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");
printf("\t\t* 4.按男团体总分排序输出
*\t \n");
printf("\t\t* 5.按女团体总分排序输出
*\t \n");
printf("\t\t* 6.按学校编号查询学校某个项目情况 *\t \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);
7
输出:
(8)输入:1,返回总目录;再输入:7,输入项目编号:7 输出:
(9)如果输入提示外的数字,例如输入:4 则输出错误提示:
(10)输入:0 输出:
六、用户手册
1、运行环境 Windows,VC++6.0
2、用户界面
8
3、操作过程 (1)用户进入运动会分数统计系统程序欢迎界面 (2)录入成绩,先输入要输入的学校编号,1 或 2;再输入对应学校的 1-7 项目的成绩(成
计
学
学Fra Baidu bibliotek
男
女询 学 项 出
各 学 校 总 分
校
校
编
总
号
分
排
排
序
序
团 体 总 分 排
团 体 总 分
学 校 某 个 项
排目
情
况
校 编 号 查 询 学 校 某
个
项
目
情
目 编 号 查 询 取 得 名 次 的 学 校
系 统
况
用户选择某命令,产生相应的操作 显示结果,用户选择返回主目录或退出
退出程序
三、详细设计 1、宏定义:
int total;
int boytotal;
int girltotal;
}sch[N];
3、函数之间的调用关系
huanyingni
main
input
system totaljisua n
xunhuan
mulu funct0 funct1 funct2
funct3 funct4 funct5 funct6 funct7
printf("\t***^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^***\n\n "); } void input() //输入成绩 {
int i,j,k; for(i=0;i<N;i++) //初始化分数
10
{
sch[i].total=0;
*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");
1、源程序
#include<stdio.h> #include<process.h>
#define N 2 //学校个数
#define bm 4 //男团体个数
#define gm 3 //女团体个数
void xuanze();
void xunhuan();
struct match
//项目
{
int matchnum;
9
0 或 1 或 2(‘0’表示退出系统,‘1’表示返回总目录,‘2’表示返回上一级);
七、参考文献
(1)《C 程序设计》(第三版) 谭浩强 著 清华大学出版社 (2)《数据结构》(C 语言版)作者:严蔚敏,吴伟民 出版社:清华大学出版社 (3)《数据结构题集》(C 语言版)作者:严蔚敏,吴伟民 出版社:清华大学出版社 八、附录
五、测试结果
<1>数据输入(输入成绩如图)
5
输入:
请输入学校编号: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
输入成绩后出现总目录(下图);
表示获得了该项目的该名次.以'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("
*********输入成绩**********\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’
二、概要设计
1 结构体 运动项目 { 项目编号 ;名次;};
2
学校 { 学校编号;项目;团体总分;男团体总分;女团体总分;}; 2 主程序(main) 包括登陆欢迎程序,分数录入程序,查询程序,退出程序 3 程序模块机之间的调用关系
流程图
启动程序
录入分数
显示主目录
统
按
按 序 按序 按 查 按 按 退
#define N 2
3
#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];
四、调试分析
1、由于刚开始程序比较简单,虽能运行,但处理错误的能力很低,后来经过反 复的添加修改,使程序能处理了错误,提高了健壮性。 2、开始编时由于不太规范,编译出错后由于程序长,很难找到错误,后来规范 了格式,错误容易找到了,以后编程要规范。 3、算法的时空分析
线性表使用的是顺序结构,各种算法的时间复杂度相对比较合理 4、本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。 通过调试,运行,基本上达到了要求,但还存在一些缺点。如:不够人性化等。
表示返回总目录); 输入:6 按学校编号查询学校某个项目编号;选择学校编号 1 或 2;然后选择项目编
号 1--7;输出项目成绩;然后选择 0 或 1 或 2(‘0’表示退出系统,‘1’表示返回总目录, ‘2’表示返回上一级);
输入:7 按项目编号查询取得名次的学校;选择项目编号 1--7;输出成绩;然后选择
绩用 0 或 1:‘0’表示没获得该项目的该名次,‘1’表示获得了该项目的该名次)
当成绩录入错误时会有错误提示。 (3)进入总目录,按提示,输入 0--7 中的一个数; 输入:0 则推出系统; 输入:1 统计各学校总分并输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’
表示返回总目录); 输入:2 按学校编号排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’表
数据结构课程设计
运 动 会 分 数 统 计
东华大学信息科学与技术学院 班级:电气 0910 班 姓名:周涛涛 学号:090901017
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)输入:1 输出:
(2)输入:1 返回总目录,再输入:2 输出:
6
(3)输入:1 返回总目录,再输入:3 输出:
(4)输入:1 返回总目录,再输入:4 输出:
(5)输入:1 返回总目录,再输入:5 输出:
(6)输入:1 返回总目录,再输入:6,学校编号输入:1,项目编号输入:5 输出:
(7)输入:2,返回上一级,再输入学校编号:2,项目编号:1
{
printf("\n\n
东华大学信息科学与技术学院电气 0910 班 周涛涛
\n\n\n");
printf("\t***^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^***\n\n");
printf("
欢迎使用运动会分数统计系统\n\n");
示返回总目录); 输入:3 按学校总分排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’表
示返回总目录); 输入:4 按男团体总分排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’
表示返回总目录); 输入:5 按女团体总分排序输出;然后选择‘0’或‘1’(‘0’表示退出系统,‘1’
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)输入其他数据会提示错误输入,重新输入。
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() /*开始界面,欢迎使用*/
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;