1舞伴配对系统实训报告.docx

上传人:b****2 文档编号:3119021 上传时间:2023-05-05 格式:DOCX 页数:34 大小:193KB
下载 相关 举报
1舞伴配对系统实训报告.docx_第1页
第1页 / 共34页
1舞伴配对系统实训报告.docx_第2页
第2页 / 共34页
1舞伴配对系统实训报告.docx_第3页
第3页 / 共34页
1舞伴配对系统实训报告.docx_第4页
第4页 / 共34页
1舞伴配对系统实训报告.docx_第5页
第5页 / 共34页
1舞伴配对系统实训报告.docx_第6页
第6页 / 共34页
1舞伴配对系统实训报告.docx_第7页
第7页 / 共34页
1舞伴配对系统实训报告.docx_第8页
第8页 / 共34页
1舞伴配对系统实训报告.docx_第9页
第9页 / 共34页
1舞伴配对系统实训报告.docx_第10页
第10页 / 共34页
1舞伴配对系统实训报告.docx_第11页
第11页 / 共34页
1舞伴配对系统实训报告.docx_第12页
第12页 / 共34页
1舞伴配对系统实训报告.docx_第13页
第13页 / 共34页
1舞伴配对系统实训报告.docx_第14页
第14页 / 共34页
1舞伴配对系统实训报告.docx_第15页
第15页 / 共34页
1舞伴配对系统实训报告.docx_第16页
第16页 / 共34页
1舞伴配对系统实训报告.docx_第17页
第17页 / 共34页
1舞伴配对系统实训报告.docx_第18页
第18页 / 共34页
1舞伴配对系统实训报告.docx_第19页
第19页 / 共34页
1舞伴配对系统实训报告.docx_第20页
第20页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

1舞伴配对系统实训报告.docx

《1舞伴配对系统实训报告.docx》由会员分享,可在线阅读,更多相关《1舞伴配对系统实训报告.docx(34页珍藏版)》请在冰点文库上搜索。

1舞伴配对系统实训报告.docx

1舞伴配对系统实训报告

 

舞伴配对系统

本题目设计目的是训练本人的基本编程能力,了解数据结构C++实现系统的开发流程,掌握数据结构和熟悉C++语言的面向对象各种基本操作。

本程序中涉及结构体、单链表、类等方面的知识。

通过本程序的训练,使本人能对C++语言的类操作有一个更深刻的了解,为进一步开发出高质量的有关数据结构方面系统打下坚实的基础。

1、问题定义

【内容与要求】

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。

跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。

若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。

要求写程序模拟上述舞伴配对问题。

对于此问题,可使用队列这种数据结构实现。

在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。

2、系统设计

2.1总体设计

采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。

需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。

可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。

本系统由如下功能模块组成

功能图:

配对流程图

 

2.2详细设计

2.2.1数据

舞伴配对类体classpeoples将用于存基本信息。

//定义类peoples

classpeoples

{

public:

peoples();

voidshuru(char*na,char*s);//输入函数

voidsf();//相当于析构函数

voidshow();//显示函数

char*fhn();//获取姓名

char*fhs();

private:

char*name;

char*sex;

};

这样就定义了一个类结构。

2.2.2主控函数执行流程

//主函数实现

voidmain()

{

//运行系统程序执行生成标题

system("title☆舞伴配对系统☆--全建思");

//运行系统程序执行改变界面颜色

system("colorB1");

queueman;

queuewoman;//把peoples类放入模板,然后创建两个队列

peoplesp;//创建对象

intk;//用于输入每次舞会的人数

chart;//用于输入是否继续下一场舞会

staticintcount_m=0;//男的数量

staticintcount_w=0;//女的数量

staticintcount_t=0;//舞会的次数

cout<<"\t\t******************************************"<

cout<<"\t\t★★★★★欢迎使用舞伴配对系统★★★★★★"<

cout<<"\t\t******************************************"<

ofstreaminout("舞伴配对.txt",ios:

:

in);//创建文件

if(!

inout)//如果创建不成功就返回

{

cout<<"Cannotopenthefile"<

return;

}

 

for(;;)//死循环相当于while

(1)

{

cout<<"\t\t第"<<++count_t<<"场舞会"<

inout<<"\t\t第"<

"<

cout<<"\t\t请输入人数:

";

cin>>k;

for(inti=0;i

{

peoplesp;

charname[12];

charsex[2];

cout<<"\t\t请输入姓名:

";

cin>>name;

cout<<"\t\t请输入性别(男(m)女(w)):

";

while

(1)

{

cin>>sex;

if(strcmp(sex,"m")==0||strcmp(sex,"w")==0)//比较是否一样

break;

else

cout<<"\t\t性别错误,请重新输入:

";

}

p.shuru(name,sex);

if(strcmp(sex,"m")==0)

{

man.push(p);//进队列

count_m++;//男的数量+1

}

elseif(strcmp(sex,"w")==0)//女的同上

{

woman.push(p);

count_w++;

}

}

if(count_m>count_w)//当男的大于女的的时候

{

for(inti=0;i

{

cout<<"第"<

man.pop(p);//出队列

p.show();//显示

inout<

inout<

p.sf();//析构

cout<<"和";

inout<<"和";

woman.pop(p);

p.show();

inout<

inout<

p.sf();

cout<<'\n';

inout<<"\n";

}

cout<<"\t\t男队有剩余"<<""<<"剩余数:

"<

count_m=count_m-count_w;//男的数目变成剩下的。

count_w=0;//女的数目变为0,由于都出队了

cout<<"\t\t剩余人:

";

for(i=0;i

同最后面的一样

{

man.pop(p);

p.show();

cout<

man.push(p);

}

}

//当男的小于女的的时候和当男的大于女的的时候方法是一样的,只是男和女的区别

elseif(count_m

{

for(inti=0;i

{

cout<<"\t\t第"<

man.pop(p);

p.show();

inout<

inout<

p.sf();

cout<<"和";

inout<<"和";

woman.pop(p);

p.show();

inout<

inout<

p.sf();

cout<<'\n';

inout<<"\n";

}

cout<<"\t\t女队有剩余"<<""<<"剩余数:

"<

count_w=count_w-count_m;

count_m=0;

cout<<"\t\t剩余人:

";

for(i=0;i

{

woman.pop(p);

p.show();

cout<

woman.push(p);

}

}

//当男女数量相等同上

elseif(count_w==count_m)

{

for(inti=0;i

{

cout<<"\t\t第"<

man.pop(p);

p.show();

inout<

p.sf();

cout<<"和";

inout<<"和";

woman.pop(p);

p.show();

inout<

p.sf();

cout<<'\n';

inout<<"\n";

}

count_m=0;

count_w=0;

}

cout<<'\n';

cout<<"\t\t第"<

\n\t\t(如果键入n则退出系统)(y/n)";

cin>>t;

system("cls");//清屏函数;

if(t=='y')

{

if(count_w>0)

{

cout<<"\t\t上次剩余女士人数:

"<

cout<<"\t\t分别是:

";

for(i=0;i

{

//显示剩余的人的时候,用先出队,显示,再入队,由于这些人第二轮还要用

woman.pop(p);

p.show();

cout<

woman.push(p);

}

}

elseif(count_m>0)

{

cout<<"\t\t上次剩余男士人数:

"<

cout<<"\t\t分别是:

";

for(i=0;i

{

man.pop(p);

p.show();

cout<

man.push(p);

}

}

}

else

{

cout<<"\t\t\t★谢谢使用★!

"<<'\n';

inout.close();

p.sf();

man.~queue();

woman.~queue();

break;

}

}

}

本舞伴配对系统执行先创建文件,再输入相关数据,接下来进行比较,然后执行显示主出来和进入主循环操作,进行判断。

本舞伴配对系统用到了类模板,分别是:

2.2.3

template

classqueue

2.2.4

template

queue:

:

queue()

2.2.5

template

//向队列尾插入结点函数

voidqueue:

:

push(T&x)

2.2.6

template

//从队列头中取出一结点

//布尔型,只有一个字节,取值false和true,是0和1的区别

boolqueue:

:

pop(T&x)

2.2.7

template

//清空队列

voidqueue:

:

clearQue()

2.2.8函数功能描述

//定义类模板

template

classqueue

{

public:

queue();

~queue()

{

clearQue();

}

voidpush(T&);//向队列尾插入结点

boolpop(T&);//从队列头中取出一结点

voidclearQue();//清空队列

protected:

intqueSize;//队列长度

queueNode*head;//定义头结点

queueNode*tail;//定义尾结点

};

//定义类模板中成员函数

template

queue:

:

queue()

{

//构造函数,初始化队列

queSize=0;

head=NULL;

tail=NULL;

}

 

template

//向队列尾插入结点函数

voidqueue:

:

push(T&x)

{

queueNode*tp;

tp=newqueueNode;//定义/创建一个结点

if(!

tp)//如果创建一个结点错误,就返回

{

return;

}

tp->nodeData=x;//把x值送给结点

//假如队列有数据(也就是不是空队列),那么从对尾插入

if(tail)

{

tp->next=NULL;

tail->next=tp;

tail=tp;

}

//假如队列无数据(也就是空队列),那么这个结点既是对首结点也是对尾结点

else

{

tp->next=NULL;

tail=tp;

head=tp;

}

queSize++;

}

 

template

//从队列头中取出一结点

//布尔型,只有一个字节,取值false和true,是0和1的区别

boolqueue:

:

pop(T&x)

{

queueNode*tp;

if(head)

{

//由于出队是在对首出队,所以把对首结点给定义的结点tp,再head=head->next;

x=head->nodeData;

tp=head;

head=head->next;//head的后置结点给head

if(head==NULL)//假如对首结点为空了,那么对尾也将是空的,也就是队列已被清空了

{

tail=NULL;

}

deletetp;

queSize--;

returntrue;

}

returnfalse;

}

 

template

//清空队列

voidqueue:

:

clearQue()

{

Ttp;

while(pop(tp));

head=tail=NULL;

}

3、系统实现

3.1编码

3.1.1程序预处理

包括加载头文件,定义类、常量和变量,并对它们进行初始化工作。

#include

#include

#include//清屏函数的头文件

#include//输入输出流头文件

template//声明一个类模板

//-------------------------------------------------------------

structqueueNode//链式队列的结构体

{

TnodeData;

queueNode*next;

};

peoples:

:

peoples()//构造函数

{

//初始化

name=newchar[8];

name=NULL;

sex=newchar[2];

sex=NULL;

}

3.1.2主函数

主函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。

voidmain()

{

//运行系统程序执行生成标题

system("title☆舞伴配对系统☆--全建思");

//运行系统程序执行改变界面颜色

system("colorB1");

queueman;

queuewoman;//把peoples类放入模板,然后创建两个队列

peoplesp;//创建对象

intk;//用于输入每次舞会的人数

chart;//用于输入是否继续下一场舞会

staticintcount_m=0;//男的数量

staticintcount_w=0;//女的数量

staticintcount_t=0;//舞会的次数

cout<<"\t\t******************************************"<

cout<<"\t\t★★★★★欢迎使用舞伴配对系统★★★★★★"<

cout<<"\t\t******************************************"<

ofstreaminout("舞伴配对.txt",ios:

:

in);//创建文件

if(!

inout)//如果创建不成功就返回

{

cout<<"Cannotopenthefile"<

return;

}

 

for(;;)//死循环相当于while

(1)

{

cout<<"\t\t第"<<++count_t<<"场舞会"<

inout<<"\t\t第"<

"<

cout<<"\t\t请输入人数:

";

cin>>k;

for(inti=0;i

{

peoplesp;

charname[12];

charsex[2];

cout<<"\t\t请输入姓名:

";

cin>>name;

cout<<"\t\t请输入性别(男(m)女(w)):

";

while

(1)

{

cin>>sex;

if(strcmp(sex,"m")==0||strcmp(sex,"w")==0)//比较是否一样

break;

else

cout<<"\t\t性别错误,请重新输入:

";

}

p.shuru(name,sex);

if(strcmp(sex,"m")==0)

{

man.push(p);//进队列

count_m++;//男的数量+1

}

elseif(strcmp(sex,"w")==0)//女的同上

{

woman.push(p);

count_w++;

}

}

if(count_m>count_w)//当男的大于女的的时候

{

for(inti=0;i

{

cout<<"第"<

man.pop(p);//出队列

p.show();//显示

inout<

inout<

p.sf();//析构

cout<<"和";

inout<<"和";

woman.pop(p);

p.show();

inout<

inout<

p.sf();

cout<<'\n';

inout<<"\n";

}

cout<<"\t\t男队有剩余"<<""<<"剩余数:

"<

count_m=count_m-count_w;//男的数目变成剩下的。

count_w=0;//女的数目变为0,由于都出队了

cout<<"\t\t剩余人:

";

for(i=0;i

同最后面的一样

{

man.pop(p);

p.show();

cout<

man.push(p);

}

}

//当男的小于女的的时候和当男的大于女的的时候方法是一样的,只是男和女的区别

elseif(count_m

{

for(inti=0;i

{

cout<<"\t\t第"<

man.pop(p);

p.show();

inout<

inout<

p.sf();

cout<<"和";

inout<<"和";

woman.pop(p);

p.show();

inout<

inout<

p.sf();

cout<<'\n';

inout<<"\n";

}

cout<<"\t\t女队有剩余"<<""<<"剩余数:

"<

count_w=count_w-count_m;

count_m=0;

cout<<"\t\t剩余人:

";

for(i=0;i

{

woman.pop(p);

p.show();

cout<

woman.push(p);

}

}

//当男女数量相等同上

elseif(count_w==count_m)

{

for(inti=0;i

{

cout<<"\t\t第"<

man.pop(p);

p.show();

inout<

p.sf();

cout<<"和";

inout<<"和";

woman.pop(p);

p.show();

inout<

p.sf();

cout<<'\n';

inout<<"\n";

}

count_m=0;

count_w=0;

}

cout<<'\n';

cout<<"\t\t第"<

\n\t\t(如果键入n则退出系统)(y/n)";

cin>>t;

system("cls");//清屏函数;

if(t=='y')

{

if(count_w>0)

{

cout<<"\t\t上次剩余女士人数:

"<

cout<<"\t\t分别是:

";

for(i=0;i

{

//显示剩余的人的时候,用先出队,显示,再入队,由于这些人第二轮还要用

woman.pop(p);

p.show();

cout<

woman.push(p);

}

}

elseif(count_m>0)

{

cout<<"\t\t上次剩余男士人数:

"<

cout<<"\t\t分别是:

";

for(i=0;i

{

man.pop(p);

p.show();

cout<

man.push(p);

}

}

}

else

{

cout<<"\t\t\t★谢谢使用★!

"<<'\n';

inout.close();

p.sf();

man.~queue();

woman.~queue();

break;

}

}

}

 

3.1.3主菜单界面

主菜单界面用到了系统程序执行改变颜色:

system("colorB1");

同时主菜单界面用到了系统程序执行显示标题

system("title☆舞伴配对系统☆--全建思");:

3.1.4定义peoples成员函数

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

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2