77范文网 - 专业文章范例文档资料分享平台

运动会分数统计系统

来源:网络收集 时间:2018-10-24 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

湖北民族学院

数据结构课程设计 课题名称:运动会分数系统 专业:计算机科学与技术 班级:0311401 姓名:刘春月 学号:031140105 指导老师:向静

目录

1.需求分析·································1

2.概要设计········································1

3.详细设计·······································4

4.调试分析······································12

5.总结··········································18

6.心得体会······································19

运动会分数统计系统

一:需求分析

为了简便地对运动会的报名、成绩的录入和统计,本组设计开发了本系

统,以解决需求。当然,本系统只是一个较为简单的系统,仍然存在着一些操作上以及显示上的问题,本组将在以后的学习中进行完善。

问题描述:参加运动会有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.本系统采用的存储结构为结构化设计理念,这是数据库的最基本的

1

设计要求,主要包括三个数据表:

(1) 项目数据表:运动会开始前必须详细制定本次运动会所需的参赛项

目为接下来报名、场地的准备提供依据。本数据表根据要求设计存储每个项目的编号、名称、要取的名次以及各个名次对应的学校的编号,在初始输入时仅输入项目编号、名称及要取的名次,而各名次对应的学校编号将由系统自动统计。这也有利于以后项目情况的查询。

typedef struct

{

int itemnum; //项目编号 int top; //取名次的数目

int range[5]; //名次 int mark[5]; //分数

}itemnode; //定义项目结点的类型

(2)学校数据表:本数据表储存了各个参赛学校的总体情况,包括学校的编号、名称、男子团体总分、女子团体总分和学校总分。其中学校编号和名称是提前输入的,而其他三项内容将由系统进行自动统计。

typedef struct {

int schoolnum; //学校编号 int score; //学校总分 int mscore; //男团体总分 int wscore; //女团体总分 itemnode c[m+w]; //项目数组 }headnode;//定义头结点类型

(3)单项数据表:本数据表是对各个学校的报名情况及成绩进行汇总,为 了操作方便,本数据表只包含了学校的编号、项目的编号以及其在比赛中 的成绩。

typedef struct /*单项成绩*/ {

int schoolnum; /*学校编号*/

int itemnum; /* 项目编号*/

int xmch; /*项目成绩*/ }danx;

danx dx[Y];

这三个数据表之间由项目编号和学校编号进行相关联接,形成一个整体。

2

2. 本系统的数据流程图

开始---初始化 输入 N

Y输入学校及男女项目范围 输入某项目各名次成绩 Y 继续输N Case3 成绩查询 Case1 查询各学校成绩 Case2 查询团体总分 Y 继续 输出查询学校成绩 Y 继续 N 结束—退出 N 3

三:详细设计 源代码: #include #include #include #include #include #include

using namespace std; #define n 2//学校数目 #define m 1//男子项目数目 #define w 1//女子项目数目 #define null 0

typedef struct {

int itemnum; //项目编号 int top; //取名次的数目 int range[5]; //名次 int mark[5]; //分数

}itemnode; //定义项目结点的类型

typedef struct {

int schoolnum; //学校编号 int score; //学校总分 int mscore; //男团体总分 int wscore; //女团体总分 itemnode c[m+w]; //项目数组 }headnode;//定义头结点类型

headnode h[n];//定义一个头结点数组

void inputinformation() //输入信息,建立系统 {

4

int i,j,k,s; for(i=0;i

h[i].score=0; h[i].mscore=0; h[i].wscore=0;

} //初始化头结点 for(i=0;i

printf(\学校编号:\

scanf(\输入头结点信息 for(j=0;j

printf(\项目编号:\

scanf(\ printf(\取前3名or前5名:\ scanf(\ printf(\获得几个名次:\

scanf(\输入项目信息 for(s=0;s<5;s++)

h[i].c[j].range[s]=0, h[i].c[j].mark[s]=0; //初始化排名和分数 for(s=0;s

printf(\名次:\

scanf(\输入所获名次信息 if(h[i].c[j].top==3)

switch(h[i].c[j].range[s]) {

case 0: h[i].c[j].mark[s]=0; break; case 1: h[i].c[j].mark[s]=5; break; case 2: h[i].c[j].mark[s]=3; break; case 3: h[i].c[j].mark[s]=2; break; } else

switch(h[i].c[j].range[s]) {

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

5

h[i].score=h[i].score+h[i].c[j].mark[s]; //按取前三名还是取前五名分别记分 if(j<=m-1)

h[i].mscore=h[i].mscore+h[i].c[j].mark[s]; //是男子项目则记到男子分数里面去 else

h[i].wscore=h[i].wscore+h[i].c[j].mark[s]; //是女子项目则记到女子项目里面去 }

printf(\ } } }

void output() //输出函数 {

int choice,i,j,k; int remember[n]; int sign; do {

printf(\按学校编号输出.*******************\\n\ printf(\按学校总分输出.*******************\\n\ printf(\按男团总分输出.*******************\\n\ printf(\按女团总分输出.*******************\\n\ printf(\请选择编号*************************\\n\\n:\ scanf(\ switch(choice) {

case 1:

for(i=0;i

printf(\学校编号:%d\\n\ printf(\学校总分:%d\\n\ printf(\男团总分:%d\\n\

printf(\女团总分: %d\\n\\n\\n\

} //按编号顺序输出 break;

case 2:

for(i=0;i

6

{

for(j=i+1;j

if(h[remember[i]].score

} // 用冒泡排序方法,用辅助数组记住头结点下标 for(i=0;i

printf(\学校编号:%d\\n\

printf(\学校总分:%d\\n\ printf(\男团总分:%d\\n\

printf(\女团总分: %d\\n\\n\\n\//按所记下标顺序输出

} //按学校总分输出 break;

case 3:

for(i=0;i

for(j=i+1;j

if(h[remember[i]].mscore

k=remember[i];remember[i]=remember[j];remember[j]=k; }

for(i=0;i

printf(\学校编号:%d\\n\ printf(\学校总分:%d\\n\ printf(\男团总分:%d\\n\

printf(\女团总分: %d\\n\\n\\n\ } //按男团总分输出 break;

case 4:

for(i=0;i

for(j=i+1;j

if(h[remember[i]].wscore

7

remember[i]=remember[j];remember[j]=k; }

for(i=0;i

printf(\学校编号:%d\\n\ printf(\学校总分:%d\\n\ printf(\男团总分:%d\\n\

printf(\女团总分: %d\\n\\n\\n\ }

break; //按女团总分输出 }

printf(\请选择 2 继续,0 跳出\\n\ scanf(\

}while(sign==2); //循环执行输出语句 }

void inquiry() //查询函数 {

int choice; int i,j,k,s;

printf(\按学校编号查询\\n\ printf(\按项目编号查询\\n\

printf(\请选择查询方式:\提供两种查询方式 scanf(\ switch(choice) {

case 1: do {

printf(\要查询的学校编号:\ scanf(\ if(i>n)

printf(\错误:这个学校没有参加此次运动会!\\n\\n\\n\ else {

printf(\要查询的项目编号:\ scanf(\ if(j>m+w||j==0)

printf(\此次运动会没有这个项目\\n\\n\\n\//学校编号超出范围,则输出警告 else {

printf(\这个项目取前 %d名,该学校的成绩如下:\\n\

8

for(k=0;k<5;k++)

if(h[i-1].c[j-1].range[k]!=0)

printf(\名次:%d\\n\//输出要查询学校项目的成绩 } }

printf(\请选择 2 继续 , 0 跳出\\n\ scanf(\ printf(\

}while(s==2); //循环执行输出语句 break; case 2: do {

printf(\要查询的项目编号:\ scanf(\ if(s>m+w||s==0)

printf(\此次运动会不包括这个项目.\\n\\n\\n\//项目编号超出范围则输出警告 else {

printf(\该项目取前 %d名,取得名次的学校\\n\ for(i=0; i

if(h[i].c[s-1].range[j]!=0)

printf(\学校编号:%d,名次:%d\\n\h[i].c[s-1].range[j]);

} //输出该项目取得名次学校的成绩 printf(\继续 2,跳出 0\\n\ scanf(\ printf(\

}while(i==2); break; } }

void writedata() //把数据存储在文件中 {

FILE *report; int i;

if((report=fopen(\ {

printf(\不能打开文件\\n\

9

exit(1); }

for(i=0;i

fwrite(&h[i],sizeof(headnode),1,report); fclose(report);

} //按头结点块写入

void readdata() //读出文件中数据的函数 {

FILE *report; int i,j,k,s;

if((report=fopen(\ {

printf(\ exit(1); }

for(i=0;i

printf(\学校编号:\

fread(&k,sizeof(int),1,report); printf(\

printf(\学校总分:\

fread(&k,sizeof(int),1,report); printf(\

printf(\男团总分:\

fread(&k,sizeof(int),1,report); printf(\

printf(\女团总分:\

fread(&k,sizeof(int),1,report); printf(\ printf(\ getch();

for(j=0;j

printf(\项目编号:\

fread(&k,sizeof(int),1,report); printf(\

printf(\所取名次数量:\ fread(&k,sizeof(int),1,report); printf(\ for(s=0;s<5;s++) {

fread(&k,sizeof(int),1,report);

10

if(k!=0)

printf(\名次:\ printf(\ }

for(s=0;s<5;s++) {

fread(&k,sizeof(int),1,report); if(k!=0) printf(\分数:\ printf(\ } }

printf(\ getch(); }

fclose(report); //关闭文件 } //按照读一个数据就输出一个数据的方式显示数据内容

void main() {

int choice;

printf(\欢迎使用======================\\n\printf(\运动会分数统计系统********************\\n\ printf(\输入信息*************************\\n\printf(\输出信息*************************\\n\printf(\查询信息*************************\\n\ printf(\调用信息*************************\\n\ printf(\退出系统*************************\\n\\n\\n\printf(\ printf(\请选择要实现步骤的编号:\\n\\n\ scanf(\ switch(choice) {

case 1:

inputinformation();writedata();readdata();main(); case 2:

output();main(); case 3:

inquiry();main(); case 4:

readdata();main(); case 5: exit(0); default: exit(0);

11

} } 四:调试分析 1.调试过程中出现的问题和处理方式:

为了使系统具有一点的容错性,当输入错误信息时应给出相应提示以正确输

入数据,如:printf(\要查询的项目编号:\ scanf(\ if(s>m+w||s==0) printf(\此次运动会不包括这个项目.\\n\\n\\n\;

想在每次查询结束想返回主菜单进行其它项时,应在main( )函数中调用其它函数时再调用main( )函数,如:

switch(choice) { case 1: inputinformation();writedata();readdata();main(); case 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); 程序出现语法错误,发现是输入名次信息的地方忘带地址符&,或是程序不完整,只写了一个大括号。如:

printf(\名次:\

scanf(\

4. 调试分析:

(1).函数调用。函数调用是语言中一块十分重要部分,它可以把一个程序分成若干部分,然后进行配置,所以这块内容对我们很重要。

(2).对结构体的不熟练。刚开始对结构体不太了解,使调试程序时费了我不少的时间。结构体的嵌套使我很费力气,通过长时间的运用,终于可以得心应手。结构体在我的实习中站了很大的比重,我也很重视它。通过与线

12

性表,循环等的有机搭配,我完成了实习任务。

(3).循环的问题。这是我很苦恼,大量的循环语句的应用,分析。使我很头疼,循环是计算机语言中很重要的部分,什么程序也离不开循环,这个问题的解决使我有了坚实的基础。对多层循环的应用也有了深刻的理解。

3.调试结果:

(1)首先运行文件运动会统计分数系统

(2) 输入信息:

程序首先赋初值,定义学校的个数为2,男生项目为1,女生项目为1。得到进入输入信息模块。

13

输入1

按回车键可得到学校的得分信息和按编号获得的所以信息。

(3)输出信息:

输入2进入输出信息模块,该模块分四项:

1.按学校编号输出:

14

2.按学校总分输出

3.按男团总分输出

15

① 按女团总分输出:

② 输入2返回输出信息模块,输入0返回主菜单。

(4)查询信息:

输入3进入信息查询模块:

16

① 按学校编号查询

② 按项目编号查询

③ 输入错误信息时给出提示:

17

④ 输入2继续查询,输入0返回主菜单

5.总结

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

1) 提出问题:所有输入输出内容只能在一屏内显示,学过c语言,就

知道”\\n”是换行,”\\f”是换屏的,可是在这里就是无法实现。 解决问题: 输入clrscr();

2)提出问题:设置选项,供用户输入选择时,当按任意键时都会跳入下

一步操作,或者直接退出系统。

分析问题:在供用户选择时,提供了几个选项,就写几个case语句,

但是当用户输入的并不是这几个数字时,系统就不能做出正确判断。

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

18

输入;

Default:{ clrscr(); /*清屏*/ printf(\输入错误,请重新选择\ }

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

分析问题:由于同时有两个相同学校编号的人存在,系统在输出时,

不能确定那个是正确的,或者用后来的覆盖以前的。

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

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

时间复杂度的计算:数据初始录入中学校为O(b),项目为O(c),成绩的录入为O(a),统计函数调入内存函数为O(a+b+c),学校成绩统计为O((a+2)*b),项目统计为O((a+1)*c),按学校编号、按学校总成绩、男团和女团输出函数为O(b^2/2),查询某校某项目函数为O(c*b*5/2),查询某项目的信息为O(5*b*c/2)。

在整个设计过程中本组在存储方面曾存在一定的分歧,后根据大家对以后的操作的分析采用现在的存储结构。

在调用方面本组负责本块的人员先前采用递归的方法而出现了许多错误,经过大家的讨论决定采用现在的do…while语句。

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

在这次调试过程中遇到过一些问题,但经过我们不懈努力,解决了大部分。 比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择排序。

6.心得体会

在课程设计中,首先要看清问题,将问题要求理解透彻,在构思要

如何实现,要用到哪些函数,要用什么算法,在课程设计构思中选算法是一个很重要的概念。只有确定用什么算法后才能接下来的工作,将流程图画在纸上,再进行代码的编写。在程序设计中编写代码只是一个方面,调试才是关键,它是一个相当繁琐的过程。有许多新的问题需要被解决,但同时它也是个比较重要的过程,在调试中,你会学到很多新的东西,从而增加你编程能力和经验。 通过本次实习,温固了数据结构的相关知识,加深了对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择合应用、算法的设计和时空效率分析。

19

输入;

Default:{ clrscr(); /*清屏*/ printf(\输入错误,请重新选择\ }

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

分析问题:由于同时有两个相同学校编号的人存在,系统在输出时,

不能确定那个是正确的,或者用后来的覆盖以前的。

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

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

时间复杂度的计算:数据初始录入中学校为O(b),项目为O(c),成绩的录入为O(a),统计函数调入内存函数为O(a+b+c),学校成绩统计为O((a+2)*b),项目统计为O((a+1)*c),按学校编号、按学校总成绩、男团和女团输出函数为O(b^2/2),查询某校某项目函数为O(c*b*5/2),查询某项目的信息为O(5*b*c/2)。

在整个设计过程中本组在存储方面曾存在一定的分歧,后根据大家对以后的操作的分析采用现在的存储结构。

在调用方面本组负责本块的人员先前采用递归的方法而出现了许多错误,经过大家的讨论决定采用现在的do…while语句。

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

在这次调试过程中遇到过一些问题,但经过我们不懈努力,解决了大部分。 比如说在运用数据结构排序的时候,方法的选择上,总是想用时间复杂度小的算法,但结果出了问题,最后还是用了我们熟悉的选择排序。

6.心得体会

在课程设计中,首先要看清问题,将问题要求理解透彻,在构思要

如何实现,要用到哪些函数,要用什么算法,在课程设计构思中选算法是一个很重要的概念。只有确定用什么算法后才能接下来的工作,将流程图画在纸上,再进行代码的编写。在程序设计中编写代码只是一个方面,调试才是关键,它是一个相当繁琐的过程。有许多新的问题需要被解决,但同时它也是个比较重要的过程,在调试中,你会学到很多新的东西,从而增加你编程能力和经验。 通过本次实习,温固了数据结构的相关知识,加深了对课内所学的有关数据的逻辑结构和存储表示、数据结构的选择合应用、算法的设计和时空效率分析。

19

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库运动会分数统计系统在线全文阅读。

运动会分数统计系统.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/231839.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: