计算机软件及应用数据结构课设 运动会分数统计c++.docx

上传人:b****5 文档编号:30729948 上传时间:2023-08-19 格式:DOCX 页数:42 大小:425.18KB
下载 相关 举报
计算机软件及应用数据结构课设 运动会分数统计c++.docx_第1页
第1页 / 共42页
计算机软件及应用数据结构课设 运动会分数统计c++.docx_第2页
第2页 / 共42页
计算机软件及应用数据结构课设 运动会分数统计c++.docx_第3页
第3页 / 共42页
计算机软件及应用数据结构课设 运动会分数统计c++.docx_第4页
第4页 / 共42页
计算机软件及应用数据结构课设 运动会分数统计c++.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

计算机软件及应用数据结构课设 运动会分数统计c++.docx

《计算机软件及应用数据结构课设 运动会分数统计c++.docx》由会员分享,可在线阅读,更多相关《计算机软件及应用数据结构课设 运动会分数统计c++.docx(42页珍藏版)》请在冰豆网上搜索。

计算机软件及应用数据结构课设 运动会分数统计c++.docx

计算机软件及应用数据结构课设运动会分数统计c++

学号********

天津城市建设学院

 

数据结构课程设计

设计说明书

运动会分数统计

起止日期:

2011年1月10日至2011年1月15日

 

学生姓名

李翔

班级

08计算机2班

成绩

指导教师(签字)

电子与信息工程系

2011年1月15日

 

一、设计目的

熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求

(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;

(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。

凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;

(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;

(4)认真编写课程设计报告。

三、设计内容(运动会分数统计查询系统)

(一)需求分析

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)构造线性表的存储结构(简单一维线性表,广义二维表)。

具体包括:

(1)运动会项目加初始化

(2)录入运动会中各学校的成绩

(3)计算各学校详细成绩以及排名

可以将以上信息存储在线性表中(一维,二维)

2)根据每个学生的名次确定相应的得分。

3)可以分别按男子团体总分,女子团体总分和团体总分降序输出各学校的成绩。

4)可以按学校编号查询学校某个项目的情况,也可以按项目编号查询取得前三或前五名的学校。

5)运动会的相关数据要可以存储在数据文件中(本系统提供的功能可以自己选择存储的文件名)。

此外,本系统还提供往届运动会成绩查询功能(磁盘文件读取)。

(二)概要设计

1.该程序包含两个核心结构体分别为:

structs//学校结构体,用来存储学校成绩

{

intbianhao;//学校的编号

intbalcore;//学校的男团总分

intbrank;//学校男团排名

intgalcore;//学校的女团总分

intgrank;//学校女团排名

intalscore;//学校的团体总分

intarank;//学校团体总排名

};

以学校结构体构造一维线性表,完成以学校编号查询,以学校团体、男团、女团总分排名等操作。

structs_p//学校--项目对应关系数组单元(广义2维线性表)

{

intattend;//是否在该项目取得名次

charsex;//该项目性质'b'或'g'(冗余)

intnature;//该项目取前几名(冗余)

intNO;//在该项目中排名

intscore;//在该项目中得分

};

学校--项目结构体用来存储每一个学校对应的每—项目的相关数据,所以有必要依此构造二维线性表,本系统中以a[i][j]表示i号学校j号项目的相关成绩,这样该二维表既可以进行以学校为单位查询或统计、计算各种成绩,也可以以项目为单位查询在本项目中取得名次的学校编号(如果结合学校结构体还可以查询具体的信息)

当然,我本来还可以定义一个关于编号结构体的一维线性表,但是其核心思想与学校结构体并无本质差异,而且如果要做具体查询,都要结合s_p学校——项目结构体的二维表。

此外,鉴于本系统不涉及线性表删除、修改的功能应用。

本着节省空间的资源原则,两个线性表全部定义为动态,不定义最大长度,在建立线性表时再根据需要确定长度。

(s_p**a;s*B;)

2.本程序包括4个模块:

1>初始化项目信息(编号、取名次等情况)。

2>每个项目中取得名次的学校统计。

3>根据每个学校的成绩计算对应的得分,包括总得分、男团总分、女团总分。

4>查询功能,用户按学校编号查询学校具体信息,按项目编号查询,存储本次运动会信息,以及查询已录入的往届运动会信息(须知道准确的存储文件的文件名)

5>登录模块,为了数据安全,设置登录功能(本功能尚待完善)。

6>流程图设计:

(附:

登陆名:

lixiang密码:

5211)

 

(三)详细设计(源代码)

//08710211.h

structs_p//学校--项目对应关系数组单元(广义2维线性表)

{

intattend;//是否在该项目取得名次

charsex;//该项目性质'b'或'g'(冗余)

intnature;//该项目取前几名(冗余)

intNO;//在该项目中排名

intscore;//在该项目中得分

};

structs

{

intbianhao;//学校的编号

intbalcore;//学校的男团总分

intbrank;//学校男团排名

intgalcore;//学校的女团总分

intgrank;//学校女团排名

intalscore;//学校的团体总分

intarank;//学校团体总排名

};

classyonghu

{

private:

charname[100];

doublecode;

public:

yonghu(char*a,doubleb)

{

strcpy(name,a);

code=b;

}

voidchushi(char*a,doubleb);

boolpaiduan(char*a,doubleb);

};

classathelet

{

private:

intm;//m个项目

intb;//男子项目数

intg;//女子项目数

intn;//n个学校

intt;//取前三名的项目数

int*T;//记录取前三名的项目编号

int*F;//记录取前五名的项目编号

s_p**a;//定义学校——项目广义二维线性表(本次只在此两个线性表实现文件读写)

s*B;//定义学校一维线性表(同上)

boolsf;

public:

voidchushi();//项目学校信息初始化

voidluruchengji();//学校成绩录入

voidjisuan();//学校排名计算

voidbianhao();//学校按编号排名

voidzongcore();//学校按总分排名

voidbscore();//学校按男团总分排名

voidgscore();//学校那女团总分

voidxuexiao_bianhao();//学校按编号查询

voidxiangmu();//按项目查询

voidW(chars);//功能函数

voidcun();//存盘函数

voiddu();//读盘函数

voidtest();//综合测试

voidlogin();//登录

};

//08710211.cpp

#include

#include

#include

#include

#include

#include"08710211.h"

usingnamespacestd;

voidyonghu:

:

chushi(char*a,doubleb)

{

strcpy(name,a);

code=b;

}

boolyonghu:

:

paiduan(char*a,doubleb)

{

if(strcmp(a,name)==0&&b==code)return1;

elsereturn0;

}

voidathelet:

:

chushi()

{

/*1.初始化项目*/

L:

cout<<"男子项目数:

"<>b;

if(b<=0)

{

cout<<"数据错误,请重新输入!

"<

gotoL;

}

J:

cout<<"女子项目数:

"<>g;

if(g<=0)

{

cout<<"数据错误,请重新输入!

"<

gotoJ;

}

m=b+g;

cout<<"学校数:

"<

L1:

cin>>n;

if(n<5)

{

cout<<"学校数据(不得少于5个)错误,请重新输入!

"<

gotoL1;

}

a=news_p*[n+1];

B=news[n+1];

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

a[i]=news_p[m+1];

/*2.项目如何取名次的设置(取前3或前5)*/

V:

cout<<"请输入有几个项目取前三名"<

cin>>t;

if(t<=0||t>=m)

{

cout<<"输入错误,请重新输入!

"<

gotoV;

}

T=newint[t+1];//用来记录取前3名的项目编号

F=newint[m-t+1];//用来记录取前5名的项目编号

L2:

cout<<"请依此输入这"<

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

{

cin>>T[i];

if(T[i]<=0||T[i]>=m)

{

cout<<"项目编号超出范围,请充值数据!

"<

gotoL2;

}

}

cout<<"取前3名项目编号为:

"<

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

cout<

cout<

cout<<"取前5名项目编号为:

"<

intk=1;

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

{

inty=1;

for(intj=1;j<=t;j++)

if(i==T[j])y=0;

if(y==1){F[k++]=i;cout<

}

cout<

/*对s_pa二维数组的初始化信息,默认情况下,nature是取前5名的*/

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

for(intj=1;j<=m;j++)

{

a[i][j].attend=0;

a[i][j].nature=5;

a[i][j].NO=0;

a[i][j].score=0;

if(j<=b)

a[i][j].sex='b';

elsea[i][j].sex='g';

}

/*符合条件情况下,则nature修改为取前3名*/

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

for(intj=1;j<=m;j++)

for(inth=1;h<=t;h++)

{

if(j==T[h])a[i][j].nature=3;

}

/*测试数据的函数*/

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

{

for(intj=1;j<=m;j++)

cout<

cout<

}

cout<<"项目初始化完毕"<

}

voidathelet:

:

luruchengji()

{

/*1.(1号功能)录入成绩功能*/

/*取前3名项目的成绩*/

cout<<"现在录入取前三名的项目的成绩:

"<

intone,two,three,four,five;

for(inti=1;i<=t;i++)

{

A1:

cout<

cin>>one;

if(one<=0||one>n){cout<<"输入错误,请重新录入";gotoA1;}//异常处理

if(a[one][T[i]].attend==1){cout<<"输入错误,请重新录入";gotoA1;}//异常处理,下同

a[one][T[i]].attend=1;

a[one][T[i]].NO=1;

a[one][T[i]].score=5;

B1:

cout<>two;

if(two<=0||two>n){cout<<"输入错误,请重新录入";gotoB1;}//异常处理

if(a[two][T[i]].attend==1){cout<<"输入错误,请重新录入";gotoB1;}

a[two][T[i]].attend=1;

a[two][T[i]].NO=2;

a[two][T[i]].score=3;

C1:

cout<>three;

if(three<=0||three>n){cout<<"输入错误,请重新录入";gotoC1;}//异常处理

if(a[three][T[i]].attend==1){cout<<"输入错误,请重新录入";gotoC1;}

a[three][T[i]].attend=1;

a[three][T[i]].NO=3;

a[three][T[i]].score=2;

}

/*取前5名项目的成绩*/

cout<<"现在录入取前5名的项目的成绩:

"<

for(i=1;i<=m-t;i++)

{

o1:

cout<>one;

if(one<=0||one>n){cout<<"输入错误,请重新录入";gotoo1;}//异常处理

if(a[one][F[i]].attend==1){cout<<"输入错误!

请重新录入";gotoo1;}

a[one][F[i]].attend=1;

a[one][F[i]].NO=1;

a[one][F[i]].score=7;

p:

cout<>two;

if(two<=0||two>n){cout<<"输入错误,请重新录入";gotop;}//异常处理

if(a[two][F[i]].attend==1){cout<<"输入错误!

请重新录入";gotop;}

a[two][F[i]].attend=1;

a[two][F[i]].NO=2;

a[two][F[i]].score=5;

q:

cout<>three;

if(three<=0||three>n){cout<<"输入错误,请重新录入";gotoq;}//异常处理

if(a[three][F[i]].attend==1){cout<<"输入错误!

请重新录入";gotoq;}

a[three][F[i]].attend=1;

a[three][F[i]].NO=3;

a[three][F[i]].score=3;

r:

cout<>four;

if(four<=0||four>n){cout<<"输入错误,请重新录入";gotor;}//异常处理

if(a[four][F[i]].attend==1){cout<<"输入错误!

请重新录入";gotor;}

a[four][F[i]].attend=1;

a[four][F[i]].NO=4;

a[four][F[i]].score=2;

S:

cout<>five;

if(five<=0||five>n){cout<<"输入错误,请重新录入";gotoS;}//异常处理

if(a[five][F[i]].attend==1){cout<<"输入错误!

请重新录入";gotoS;}

a[five][F[i]].attend=1;

a[five][F[i]].NO=5;

a[five][F[i]].score=1;

}

cout<<"成绩录入完毕"<

}

voidathelet:

:

jisuan()

{

/*(2号功能)统计各学校总分*/

/*学校数据初始化*/

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

{

B[i].bianhao=i;

B[i].alscore=0;

B[i].balcore=0;

B[i].galcore=0;

B[i].arank=B[i].brank=B[i].grank=0;

}

intsum;

/*计算学校的男团总得分、女团总得分、总得分*/

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

{

sum=0;

for(intj=1;j<=b;j++)

{

sum+=a[i][j].score;

}

B[i].balcore=sum;

sum=0;

for(j=b+1;j<=m;j++)

{

sum+=a[i][j].score;

}

B[i].galcore=sum;

B[i].alscore=B[i].balcore+B[i].galcore;

}

 

/*计算学校根据男团总得分的排名*/

stemp;

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

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

if(B[i].balcore

{

temp=B[i];B[i]=B[j];B[j]=temp;

}

for(i=1;i<=n;i++)B[i].brank=i;

/*计算学校根据女团总得分的排名*/

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

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

if(B[i].galcore

{

temp=B[i];B[i]=B[j];B[j]=temp;

}

for(i=1;i<=n;i++)B[i].grank=i;

/*计算学校根据总得分的排名*/

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

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

if(B[i].alscore

{

temp=B[i];B[i]=B[j];B[j]=temp;

}

for(i=1;i<=n;i++)B[i].arank=i;

cout<<"个学校积分、排名计算完毕"<

}

voidathelet:

:

bianhao()

{

/*可以查询任意编号学校的总分、男团总分、女团总分*/

/*按编号排序输出学校的总分、男团总分、女团总分*/

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

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

if(B[i].bianhao>B[j].bianhao)

{

stemp=B[i];B[i]=B[j];B[j]=temp;

}

/*按编号输出成绩*/

cout<<"按编号输出:

"<

cout<<"学编号"<

<<"男团排"<

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

for(intj=1;j<=n;j++)

if(B[j].bianhao==i)

{

cout<

<

}

cout<<"按编号输出完毕"<

}

voidathelet:

:

zongcore()

{

/*按总得分排名输出成绩*/

/*按团总分排序输出学校的总分、男团总分、女团总分*/

cout<<"按总得分排名输出:

"<

cout<<"学编号"<

<<"男团排"<

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

for(intj=1;j<=n;j++)

if(B[j].arank==i)

{

cout<

<

}

cout<<"按团体总分排名书输出完毕"<

}

voidathelet:

:

bscore()

{

/*按男团总分排序输出学校的总分、男团总分、女团总分*/

cout<<"男排名"<

cout<<"学编号"<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1