C++课程设计.docx

上传人:b****3 文档编号:4889941 上传时间:2022-12-11 格式:DOCX 页数:32 大小:52.12KB
下载 相关 举报
C++课程设计.docx_第1页
第1页 / 共32页
C++课程设计.docx_第2页
第2页 / 共32页
C++课程设计.docx_第3页
第3页 / 共32页
C++课程设计.docx_第4页
第4页 / 共32页
C++课程设计.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

C++课程设计.docx

《C++课程设计.docx》由会员分享,可在线阅读,更多相关《C++课程设计.docx(32页珍藏版)》请在冰豆网上搜索。

C++课程设计.docx

C++课程设计

 

C++课程设计

姓名:

徐天啸

班级:

08级31班

课题:

运动会分数统计系统

指导老师:

刘剑明

 

一.需求分析

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.0

2、用户界面

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】《数据结构教程上机实验指导》作者:

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

清华大学出版

社时间:

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<<"程序设计员:

05计本4班李涛沈晓霖陈秀华"<

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_

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

当前位置:首页 > 高等教育 > 管理学

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

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