C++课程设计.docx
- 文档编号:4889941
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:32
- 大小:52.12KB
C++课程设计.docx
《C++课程设计.docx》由会员分享,可在线阅读,更多相关《C++课程设计.docx(32页珍藏版)》请在冰豆网上搜索。
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< 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< 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< return; } p=p->next; } cout<<" 无 "; } voiddepartment_search(inta)//按编号搜索系 { Department*p; p=head1; p=p->next; while(p) { if(p->number==a) { cout<<"系名: "< "< "< "<<(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->boy { small=q; } break; case2: if(q->girl { 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_
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计