《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx
《《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx(26页珍藏版)》请在冰点文库上搜索。
![《C++程序设计》课程设计说明书比赛参赛选手管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-6/17/132c165c-5863-4f3e-a417-207b4c4f1489/132c165c-5863-4f3e-a417-207b4c4f14891.gif)
《C++程序设计》课程设计说明书比赛参赛选手管理系统
《C++程序设计》课程设计说明书
题目:
比赛参赛选手管理系统
学生姓名:
学号:
专业:
电子信息工程
班级:
信息09—2
指导老师:
内蒙古科技大学课程设计任务书
课程名称
C++语言课程设计
设计题目
比赛参赛选手管理系统
指导教师
时间
2011.6.13~2011.6.24
一、教学要求
1.巩固和加深学生对C++语言课程的基本知识的理解和掌握
2.掌握C++语言编程和程序调试的基本技能
3.利用C++语言进行基本的软件设计
4.掌握书写程序设计说明文档的能力
5.提高运用C++语言解决实际问题的能力
二、设计资料及参数
每个学生在教师提供的课程设计题目中任意选择一题,独立完成,可根据设计内容适当修改题目名称。
**比赛参赛选手管理系统
定义人员基类,包含选手的基本数据和基本属性;
要求至少设计以下各功能模块:
v输入记录
v查询功能
v排序
v显示信息
三、设计要求及成果
1.分析课程设计题目的要求
2.写出详细设计说明
3.编写程序代码,调试程序使其能正确运行
4.设计完成的软件要便于操作和使用
4.设计完成后提交课程设计报告
四、进度安排
资料查阅与讨论(1天)
系统分析(2天)
系统的开发与测试(5天)
编写课程设计说明书和验收(2天)
五、评分标准
1.根据平时上机考勤、表现和进度,教师将每天点名和检查
2.根据课程设计完成情况,必须有可运行的软件。
3.根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。
六、建议参考资料
1.《C++面向对象程序设计》,吴敏、杨国林主编,内蒙古大学出版社
2.《C++语言程序设计(第三版)》,郑莉,清华大学出版社
比赛参赛选手管理系统
摘要
C++语言是目前公认的热门编程语言之一。
C++是在C语言基础上发展演变而来的一种面向对象程序设计语言。
它既支持面向过程的程序设计方法,也支持面向对象的程序设计方法。
当今,C++语言在社会的各个领域发挥着越来越重要的作用。
参赛选手系统的设计正是C++用于生活中的一项应用。
参赛选手管理系统能方便用户快捷处理选手的信息,得到想要的数据并能将选手的信息以文档方式保存。
此系统的主要管理的信息有:
选手的姓名,编号和三项赛事的成绩。
系统的主要功能有选手信息的添加、修改、显示,能对选手成绩按编号或成绩进行排序,可以根据用户的要求按姓名,编号查询选手的信息,保存信息到文件以及从文件中读取信息等功能。
第一章问题描述
建立一套比赛参赛选手管理系统。
定义人员基类(competitor),包含选手的基本数据和基本属性,实现以下各功能:
输入记录:
选手信息数据要以文件的形式保存,能实现选手信息数据的维护。
此模块包括子模块有:
增加选手信息、修改选手信息。
查询功能:
查询时可实现按姓名查询、按编号查询、成绩查询
排序:
能对用户指定的任意项目名,按成绩由低到高排列选手数据并显示排序结果。
显示信息:
显示选手的编号、项目、成绩等信息。
设计要求及成果
1.分析课程设计题目的要求
2.写出详细设计说明
3.编写程序代码,调试程序使其能正确运行
4.设计完成的软件要便于操作和使用
第二章问题分析
方案说明:
参赛选手管理系统是用面向对象的方法设计,由于数组的存放是连续的,而单链表是非连续存放的,是动态分配内存空间,因此此系统采用单链表来完成。
各个功能模块的实现主要转变到对单链表的遍历,添加和删除结点。
系统功能模块的划分:
在主界面中包括“增加选手修改选手查询选手信息排序保存信息读取信息退出”等全部的功能,之所以设计这么一个主界面,一是因为能使用户对程序操作的流程更加清楚简明,二是保证了用户同时只能对一个文件进行操作的系统要求,保证了系统不会发生打开文件紊乱或者出现致命错误。
功能模板的划分
显示菜单功能模板
1……增加选手功能
2……修改选手功能
3……查询选手信息
4……排序功能
5……保存信息
6……读取信息
7……退出
第三章数据模型
类的设计
定义参赛选手competitor类,包含成员变量:
姓名name,编号num,短跑、跳高、跳远成绩x,y,z。
classcompetitor//选手
public:
competitor*next;
public:
stringname;//姓名
longnum;//编号
intx,y,z;//短跑,跳高,跳远
成员函数:
voidsadd();//添加
voidsamend();//修改
voidssearch();//查询
voidstaxis();//排序
voidssave();//保存
voidsload();//读取
voidpxh();
voidpsx();
voidpyw();
voidpyy();
第四章设计流程图
图4.1流程图
第五章程序代码
#include
#include
#include
#include
usingnamespacestd;
classcompetitor
{
public:
competitor*next;
public:
stringname;//姓名
longnum;//编号
floatx,y,z;//短跑,跳高,跳远
voidplay(){cout<"<"<"<competitor(stringsname,longsnum,floatsx,floatsy,floatsz)
{
name=sname;
num=snum;
x=sx;
y=sy;
z=sz;
}
};
classcla
{
public:
cla()//构造函数
{
comp=0;
sload();
}
~cla()//析构函数
{
competitor*p;
p=comp;
while(p)
{
p=p->next;
deletecomp;
comp=p;
}
comp=0;
}
voidsadd();//添加
voidsamend();//修改
voidssearch();//查询
voidstaxis();//排序
voidssave();//保存
voidsload();//读取
voidpxh();
voidpsx();
voidpyw();
voidpyy();
private:
competitor*comp;//头接点
};
voidcla:
:
sadd()//添加
{
competitor*q;
stringname1;
longnum1;
floatx1,y1,z1;
system("cls");
cout<<"\n**增加的选手**\n"<cout<<"请输入选手的(中间用空格间隔)"<cout<<"姓名编号短跑成绩跳高成绩跳远成绩"<cin>>name1>>num1>>x1>>y1>>z1;
q=newcompetitor(name1,num1,x1,y1,z1);
q->next=0;
if(comp)
{
competitor*t;
t=comp;
if(t->num==num1)
{
cout<<"编号已存在,请重新输入"<return;
}
while(t->next)
{
if(t->num==num1)
{
cout<<"编号已存在,请重新输入"<return;
}
t=t->next;
}
t->next=q;
}
else
{
comp=q;
}
cout<<"输入完毕"<}
voidcla:
:
samend()//修改
{
system("cls");
longnum1;
cout<<"\n**修改选手信息**\n";
cout<<"输入要修改选手的编号";
cin>>num1;//查找要修改的结点
competitor*p1,*p2;
p1=comp;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!
=NULL)
{
cout<<"编号是"<"<cout<<"姓名"<name<<"短跑"<x<<"跳高"<y<<"跳远"<z<cout<<"请输入修改后的信息:
姓名短跑成绩跳高";
cout<<"成绩跳远成绩"<cin>>p1->name>>p1->x>>p1->y>>p1->z;
cout<<"修改成功"<}
else//未找到接点
cout<<"未找到!
\n";
}
voidcla:
:
ssearch()//查询
{
system("cls");
cout<<"\n**查询选手信息**\n"<cout<<"请输入查询方式:
"<cout<<"1.按编号查询"<cout<<"2.按姓名查询"<cout<<"3.返回"<charc;cin>>c;
switch(c)
{
case'1':
{
longnum1;
cout<<"要查询的编号"<cin>>num1;//查找要查询的结点
competitor*p1,*p2;
p1=comp;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!
=NULL)
{
cout<<"编号是"<cout<<"姓名:
"<name<<"短跑:
"<x<<"跳高:
"<y<<"跳远:
"<z<cout<<"查询完毕...";
}
else//未找到接点
cout<<"未找到!
\n";
break;
}
case'2':
{
stringname1;
cout<<"要查询的选手姓名"<cin>>name1;//查找要查询的结点
competitor*p1,*p2;
p1=comp;
while(p1)
{
if(p1->name==name1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!
=NULL)
{
cout<cout<<"编号:
"<num<<"短跑:
"<x<<"C++:
"<y<<"跳远:
"<z<cout<<"查询完毕...";
}
else//未找到接点
cout<<"未找到!
\n";
break;
}
case'3':
return;
}
}
voidcla:
:
pxh()//按编号排序
{
competitor*p1,*p2;
intn;
p1=comp;
n=1;
while(p1->next)
{n++;p1=p1->next;}
cout<<"共有"<inti;
p1=comp;
for(i=1;i{
p1=comp;
if(p1->num>p1->next->num)//如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;//头结点交换
comp=p2;
}
p1=comp;
while(p1->next->next)//中间的交换
{
p2=p1;
p1=p1->next;
if(p1->num>p1->next->num)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;//交换
}
}
}
p1=comp;
do
{
p1->play();
p1=p1->next;
}while(p1);
}
voidcla:
:
psx()//按短跑成绩排序
{
competitor*p1,*p2;
intn;
p1=comp;
n=1;
while(p1->next)
{n++;p1=p1->next;}
cout<<"共有"<inti;
p1=comp;
for(i=1;i{
p1=comp;
if(p1->x>p1->next->x)//如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;//头结点交换
comp=p2;
}
p1=comp;
while(p1->next->next)//中间的交换
{
p2=p1;
p1=p1->next;
if(p1->x>p1->next->x)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;//交换
}
}
}
p1=comp;
do
{
p1->play();
p1=p1->next;
}while(p1);
}
voidcla:
:
pyw()//按跳高成绩排序
{
competitor*p1,*p2;
intn;
p1=comp;
n=1;
while(p1->next)
{n++;p1=p1->next;}
cout<<"共有"<inti;
p1=comp;
for(i=1;i{
p1=comp;
if(p1->y>p1->next->y)//如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;//头结点交换
comp=p2;
}
p1=comp;
while(p1->next->next)//中间的交换
{
p2=p1;
p1=p1->next;
if(p1->y>p1->next->y)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;//交换
}
}
}
p1=comp;
do
{
p1->play();
p1=p1->next;
}while(p1);
}
voidcla:
:
pyy()//按跳远成绩排序
{
competitor*p1,*p2;
intn;
p1=comp;
n=1;
while(p1->next)
{n++;p1=p1->next;}
cout<<"共有"<inti;
p1=comp;
for(i=1;i{
p1=comp;
if(p1->z>p1->next->z)//如果头结点大于第二个的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1;//头结点交换
comp=p2;
}
p1=comp;
while(p1->next->next)//中间的交换
{
p2=p1;
p1=p1->next;
if(p1->z>p1->next->z)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next;//交换
}
}
}
p1=comp;
do
{
p1->play();
p1=p1->next;
}while(p1);
}
voidcla:
:
staxis()//排序
{
system("cls");
charc;
cout<<"请选择以何种方式排序:
"<cout<<"1……以编号排序"<cout<<"2……以短跑成绩排序"<cout<<"3……以跳高成绩排序"<cout<<"4……以跳远成绩排序"<cout<<"5……返回"<cout<<"请选择(1-5)"<cin>>c;
switch(c)
{
case'1':
pxh();break;
case'2':
psx();break;
case'3':
pyw();break;
case'4':
pyy();break;
case'5':
return;
}
}
voidcla:
:
ssave()//保存到文件
{
system("cls");charc;
cout<<"\n保存选手信息(将覆盖原文件),是否继续?
[Y/N]:
";cin>>c;
if(toupper(c)!
='Y')return;
ofstreamtfile("date.txt",ios_base:
:
binary);
competitor*p=comp;
while(p)//写入文件
{
tfile<name<<"\t"<num<<"\t"<x<<"\t"<y<<"\t"<z;
tfile<p=p->next;
}
tfile.close();
cout<<"保存完毕..."<}
voidcla:
:
sload()//读取
{
competitor*p;
p=comp;
while(p)
{
comp=p->next;
deletep;
p=comp;
}
Ifstreamtfile("date.txt",ios_base:
:
binary);
stringname1;
longnum1;
floatx1,y1,z1;
tfile>>name1>>num1>>x1>>y1>>z1;
while(tfile.good())
{//创建选手接点
competitor*s;
s=comp;
s=newcompetitor(name1,num1,x1,y1,z1);
s->next=0;
if(comp)//若已经存在结点
{
competitor*p2;
p2=comp;
while(p2->next)//查找尾结点
{
p2=p2->next;
}
p2->next=s;//连接
}
else//若不存在结点(表空)
{comp=s;//连接}
tfile>>name1>>num1>>x1>>y1>>z1;
}
tfile.close();
cout<<"\n欢迎使用选手成绩管理系统\n";
}
voidmain()
{
charc;claa;
do
{
cout<<"*************************************\n";
cout<<"1……增加选手\n";
cout<<"2……修改选手\n";
cout<<"3……查询选手信息\n";
cout<<"4……排序\n";
cout<<"5……保存信息\n";
cout<<"6