C语言课程方案设计书报告运动会分数统计系统.docx

上传人:b****5 文档编号:4661804 上传时间:2022-12-07 格式:DOCX 页数:33 大小:58.07KB
下载 相关 举报
C语言课程方案设计书报告运动会分数统计系统.docx_第1页
第1页 / 共33页
C语言课程方案设计书报告运动会分数统计系统.docx_第2页
第2页 / 共33页
C语言课程方案设计书报告运动会分数统计系统.docx_第3页
第3页 / 共33页
C语言课程方案设计书报告运动会分数统计系统.docx_第4页
第4页 / 共33页
C语言课程方案设计书报告运动会分数统计系统.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

C语言课程方案设计书报告运动会分数统计系统.docx

《C语言课程方案设计书报告运动会分数统计系统.docx》由会员分享,可在线阅读,更多相关《C语言课程方案设计书报告运动会分数统计系统.docx(33页珍藏版)》请在冰豆网上搜索。

C语言课程方案设计书报告运动会分数统计系统.docx

C语言课程方案设计书报告运动会分数统计系统

封面

作者:

PanHongliang

仅供个人学习

一.需求分析

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).运动员评奖

3.测试数据

《1》输入:

1进入添加系的界面,根据提示,再输入:

汽车系。

再输入:

8,成功添加了一个系。

再输入:

2进入运动工程添加界面,根据提示,再输入:

跳高;1;0;1;2;3。

之后输入0。

再次进入系统界面。

《2》输入:

3查看输出结果。

《3》:

输入:

4查看输出结果。

《4》:

输入:

5查看输出结果。

《5》:

输入:

6查看输出结果。

《6》:

输入:

7根据提示输入工程编号:

2。

查看输出结果。

《7》:

输入:

8根据提示输入系编号:

3。

查看输出结果。

二、概要设计

1.数据结构

<1>系:

名称,编号,男子团体总分,女子固体总分。

<2>运动工程:

工程编号,名称,男子工程,女子工程,前三名,前五名,第一名系的编号,第二名系的编号,第三名系的编号,第四名系的编号,第五名系的编号。

2.程序模块及之间的调用关系

三、详细设计1、数据类型定义

(1)系的定义:

typedefstructDepartment//系的结构

{

charname[20]。

//系的名称

intnumber。

//系的编号

intboy。

//男子团体总分

intgirl。

//女子团体总分

Department*next。

}Department。

(2)运动工程定义:

typedefstructSport//运动工程结构

{

charname[20]。

//运动工程名称

intisboy。

//0为女工程,1为男工程

intis3。

//0为取前五名,1为取前五名

intnumber。

//工程编号

intfirst。

//第一名系的编号

intsecond。

//第二名系的编号

intthird。

//第三名系的编号

intfourth。

//第四名系的编号

intfifth。

//第五名系的编号

Sport*next。

}Sport。

2、函数之间的调用关系

(1)系调用图

department_add

department_Order

<1>Departmentdepartment_search

department_addmark

department_show

department_isexist

department_output

department_read

department_write

department_getlong

sport_isexist

sport_add

sport_getlong

sport_write

<2>Sportsport_read

sport_output

sport_search

3、算法设计

主要算法的设计思想:

本程序主要是使用链表来实现操作。

一个运动会包括运动工程和参加运动会的成员。

因此构造两个链表Department,Sport。

为了操作的方便,并且能够保存输入数据,所以通过文件操作来实现数据的写和读。

每次添加新的数据后都要输入0退出,数据才能保存。

对于总分的排序使用了冒泡排序。

为了使整个程序看起来更加友好,又添加了程序启动画面。

4、调试分析

本程序相对来说比较容易看明白,其中涉及到的一些函数相对来说比较容易。

通过调试,运行,基本上达到了要求,但还存在一些缺点。

如:

不够人性化等。

5、测试结果

<1>多组数据输入与输出:

(1)输入:

3

输出:

系名编号男团总分女团总分总分

法律系6000

电子系5325

数学系4606

历史系39716

中文系2151126

计算机系1211132

旅游系7077

(2)输入:

4

输出:

系名编号男团总分女团总分总分

法律系6000

电子系5325

数学系4606

旅游系7077

历史系39716

中文系2151126

计算机系1211132

(3)输入:

5

输出:

法律系6000

电子系5325

数学系4606

旅游系7077

历史系39716

中文系2151126

计算机系1211132

(4)输入:

6

输出:

法律系6000

电子系5325

数学系4606

旅游系7077

历史系39716

中文系2151126

计算机系1211132

(5)输入:

7

输出:

请输入工程编号:

输入:

1回车

输出:

工程名:

100m

工程类型:

女子工程

第一名:

计算机系

第二名:

中文系

第三名:

法律系

第四名:

第五名:

(6)输入:

8

输出:

请输入系的编号:

再输入2

则输出:

系名:

中文系男子团体总分:

3女子团体部分:

10总分:

13

(7)输入:

0退出

6、用户手册1、运行环境

Windows,VC++6.02、用户界面

 

4、操作过程

(1)用户进入程序启动界面,等load完成后进入主菜单.主菜单有以下9个选项

1.输入系别

2.输入运动工程

3.按系别编号输出总分

4.按总分排序

5.按男团体总分排序

6.按女团体总分排序

7.按工程编号查询

8.按系别编号查询

0.退出

(2)输入0~8中的一个数

(3)输入1,进行添加系操作,分别输入系的名称和编号

(4)输入2,进行添加运动工程操作,分别输入工程名称,编号,工程类型,名次选

取,排名情况

(5)输入0,则退出系统,并且保存输入的信息.每次添加完都要输入0退出系统

才有效

(6)输入3,输出按系编号总分排名.

(7)输入4,输出按总分排名

(8)输入5,输出按男团体总分排序

(9)输入6,输出按女团体总分排序

(10)输入7,进入按工程编号查询界面.输入要查询的工程编号

(11)输入8,进入按系别编号查询界面,输入要查询的系的编号

7、参考文献

【1】《C++程序设计》作者:

郑莉,董渊,张瑞丰出版社:

清华大学出版社时间:

2003/12

【2】《数据结构》作者:

严蔚敏,吴伟民出版社:

清华大学出版社时间:

2006/10

【3】《数据结构教程上机实验指导》作者:

严蔚敏,吴伟民,M宁出版社:

清华大学出版

社时间:

2006/5

【4】网址:

8、附录

1、源程序

#include

#include

#include

#include

#include

#include

#include

#include

typedefstructDepartment//系的结构

{

charname[20]。

//系的名称

intnumber。

//系的编号

intboy。

//男子团体总分

intgirl。

//女子团体总分

Department*next。

}Department。

typedefstructSport//运动工程结构

{

charname[20]。

//运动工程名称

intisboy。

//0为女工程,1为男工程

intis3。

//0为取前五名,1为取前五名

intnumber。

//工程编号

intfirst。

//第一名系的编号

intsecond。

//第二名系的编号

intthird。

//第三名系的编号

intfourth。

//第四名系的编号

intfifth。

//第五名系的编号

Sport*next。

}Sport。

intgetint(inta)//字符转换成数字

{

return(int)(a-'0')。

}

Department*head1。

//-------启动画面函数----------

voidCover()

{system("color1b")。

charline[]={"程序读取中 请耐心等待..."}。

charbar[]={"...."}。

inti,j,k=0,x=0,y=0。

for(i=0。

i<=strlen(line)/2。

{

system("cls")。

for(j=0。

j<9。

j++)//改变行坐标

cout<

for(j=0。

j<(75-strlen(line))/2。

j++)//改变列坐标

cout<<""。

for(j=1。

j<=i。

j++)//进度显示器

cout<<"●"。

for(x=strlen(line)/2。

x>i。

x--)

cout<<"○"。

if(k==4)

i++。

cout<

for(j=0。

j<(75-strlen(line))/2。

j++)//行坐标定位

cout<<""。

cout<

//输出线条

cout<

for(j=0。

j<(65-strlen(bar))/2。

j++)

cout<<""。

cout<<(i+7)*5<<"%Loading"。

cout.write(bar,k)。

cout<

for(j=0。

j<10。

j++)

cout<

for(j=0。

j<24。

j++)

cout<<""。

cout<<"程序设计员5080906石行"<

for(j=0。

j<24。

j++)

cout<<""。

for(j=0。

j<=18。

j++)

cout<<"─"。

cout<

for(j=0。

j<10000000。

j++)。

//延时效果

k++。

if(k>4)

k=0。

}

}

voiddepartment_add()//添加系

{

Department*p。

intmark=0。

p=newDepartment。

cout<<"请输入系的名称:

"。

cin>>p->name。

charc。

while(mark!

=1)

{

cout<<"请输入系的编号:

"。

cin>>c。

if(!

isdigit(c))//是否为数字

{

cout<<"数据非法"<

}

else

{

mark=1。

p->number=c。

}

}

p->boy=0。

p->girl=0。

p->next=head1->next。

head1->next=p。

cout<<"成功添加了一个系"<

}

intdepartment_getlong(Department*first)//得到链表长度

{

inti=0。

while(first->next!

=NULL)

{

i++。

first=first->next。

}

returni。

}

voiddepartment_write()//将系数据写入文本

{

Department*p。

p=head1。

p=p->next。

ofstreamoutfile("Department.txt",ios:

:

out)。

outfile<

while(p!

=NULL)

{

outfile<name<<""<number<<""<boy<<""<girl<<""。

p=p->next。

}

outfile.close()。

cout<<"WriteSuccess!

"<

}

voiddepartment_read()//从文本读入系数据

{

inti。

ifstreaminfile("Department.txt",ios:

:

in)。

infile>>i。

while(i>0)

{

Department*p。

p=newDepartment。

infile>>p->name>>p->number>>p->boy>>p->girl。

p->next=head1->next。

head1->next=p。

i--。

}

cout<<"DepartmentDataReadSuccess!

"<

}

voiddepartment_output(Department*p)//输出系

{

cout<<" 系名    编号 男团总分 女团总分 总分\t\n"。

while(p)

{

cout<name<<"\t"<number)<<"\t"<boy<<"\t"<girl<<"\t"<<(p->girl+p->boy)<

p=p->next。

}

}

intdepartment_isexist(inta)//检验系是否存在

{

intb=0。

Department*p。

p=head1。

p=p->next。

while(p)

{

if(p->number==a)

{

return1。

}

p=p->next。

}

return0。

}

voiddepartment_show(inta)//输出所有系

{

Department*p。

p=head1。

p=p->next。

while(p)

{

if(p->number==a)

{

cout<name<<" "。

return。

}

p=p->next。

}

cout<<" 无  "。

}

voiddepartment_search(inta)//按编号搜索系

{

Department*p。

p=head1。

p=p->next。

while(p)

{

if(p->number==a)

{

cout<<"系名:

"<name<<" "<<"男子团体总分:

"<boy<<" "<<"女子团体总分:

"<girl<<" "<<"总分:

"<<(p->boy+p->girl)<<" "。

return。

}

p=p->next。

}

cout<<"无此编号"。

}

voiddepartment_addmark(inta,intb,intc)//a为分数,b为系编号,c=1表示男,c=0表示女

{

Department*p。

p=head1。

p=p->next。

while(p)

{

if(p->number==b)

{

if(c=='1')

{

p->boy=p->boy+a。

}

else

{

p->girl=p->girl+a。

}

}

p=p->next。

}

}

voiddepartment_order(Department*temp,inttype)//type=0按总分,type=1按男总分,type=2按女总分,

{

Department*p,*q,*small,*temp1。

temp1=newDepartment。

temp1->next=NULL。

p=temp。

while(p)

{

small=p。

q=p->next。

while(q)

{

switch(type)

{

case0:

if((q->boy+q->girl)<(small->girl+small->boy))

{

small=q。

}

break。

case1:

if(q->boyboy)

{

small=q。

}

break。

case2:

if(q->girlgirl)

{

small=q。

}

break。

default:

cout<<"error"<

}

if(small!

=p)

{

temp1->boy=p->boy。

p->boy=small->boy。

small->boy=temp1->boy。

temp1->girl=p->girl。

p->girl=small->girl。

small->girl=temp1->girl。

strcpy(temp1->name,p->name)。

strcpy(p->name,small->name)。

strcpy(small->name,temp1->name)。

temp1->number=p->number。

p->number=small->number。

small->number=temp1->number。

//将系的名字互换

}

q=q->next。

}

p=p->next。

}

}

Sport*head2。

intsport_isexist(inta)//检查运动工程(编号)是否已经存在

{

intb=0。

Sport*p。

p=head2。

p=p->next。

while(p)

{

if(p->number==a)

{

return1。

}

p=p->next。

}

return0。

}

voidsport_add()//添加工程

{

Sport*p。

intmark=0。

p=newSport。

cout<<"请输入工程名称:

"。

cin>>p->name。

charc。

while(mark!

=1)

{

cout<<"请输入工程编号:

"。

cin>>c。

if(!

isdigit(c))

{

cout<<"数据非法"<

}

else

{

if(sport_isexist(c))

{

cout<<"该编号已存在"<

}

else

{

mark=1。

p->number=c。

}

}

}

mark=0。

while(mark!

=1)

{

cout<<"请输入工程类型(0为女子工程,1为男子工程):

"。

cin>>c。

p->isboy=(int)(c-'0')。

//字符转换成数字

if(!

isdigit(c))

{

cout<<"数据非法"<

}

elseif(p->isboy<0||p->isboy>1)

{

cout<<"数据非法"<

}

else

{

mark=1。

p->isboy=c。

}

}

mark=0。

while(mark!

=1)

{

cout<<"请输入工程名次情况(0为取前3名,1为取前5名):

"。

cin>>c。

p->is3=(int)(c-'0')。

if(!

isdigit(c))

{

cout<<"数据非法"<

}

elseif(p->is3<0||p->is3>1)

{

cout<<"数据非法"<

}

else

{

mark=1。

p->is3=c。

}

}

mark=0。

while(mark!

=1)

{

cout<<"请输入第一名的系的编号:

"。

cin>>c。

if(!

isdigit(c))

{

cout<<"数据非法"<

}

else

{

if(!

department_isexist(c))

{

cout<<"该系不存在,请先添加"。

}

else

{

mark=1。

p->first=c。

if(p->is3=='0')

department_addmark(5,c,p->isboy)。

else

department_addmark(7,c,p->isboy)。

}

}

}

mark=0。

while(mark!

=1)

{

cout<<"请输入第二名的系的编号:

"。

cin>>c。

if(!

isdigit(c))

{

cout<<"数据非法"<

}

else

{

if(!

department_isexist(c))

{

cout<<"该系不存在,请先添加"。

}

else

{

mark=1。

p->second=c。

if(p->is3=='0')

department_addmark(3,c,p->isboy)。

else

department_addmark(5,c,p->isboy)。

}

}

}

mark=0。

while(mark!

=1)

{

cout<<"请输入第三名的系的编号:

"。

cin>>c。

if(!

isdigit(c))

{

cout<<"数据非法"<

}

else

{

if(!

department_isexist(c))

{

cout<<"该系不存在,请先添加"。

}

else

{

mark=1。

p->third=c。

if(p->is3=='0')

department_addmark(2,c,p->isboy)。

else

department_addmark(3,c,p->isboy)。

}

}

}

mark=0。

if(p->is3=='1')

{

while(mark!

=1)

{

cout<<"请输入第

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

当前位置:首页 > 高中教育 > 高中教育

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

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