C++课程设计.docx
《C++课程设计.docx》由会员分享,可在线阅读,更多相关《C++课程设计.docx(32页珍藏版)》请在冰豆网上搜索。
![C++课程设计.docx](https://file1.bdocx.com/fileroot1/2022-12/11/c544a620-8d83-4a30-96c8-d66979a8baad/c544a620-8d83-4a30-96c8-d66979a8baad1.gif)
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_