舞伴配系统
题目设计目训练基编程力解数结构C++实现系统开发流程掌握数结构熟悉C++语言面象种基操作程序中涉结构体单链表类等方面知识通程序训练C++语言类操作更深刻解进步开发出高质量关数结构方面系统坚实基础
1问题定义
容求
假设周末舞会男士女士进入舞厅时排成队跳舞开始时次男队女队队头出配成舞伴两队初始数相较长队中未配者等轮舞曲求写程序模拟述舞伴配问题问题队列种数结构实现
问题定义阶段考虑题目行性需求分析接进入开发阶段完成系统设计系统实现务
2系统设计
2.1 总体设计
采模块化程序设计方法较务定原分较务然分设计务需注意划分出模块应该相独立相关容易理解模块化层次结构图(模块图)分析务划分般进行面层模块面层层模块逐步细化描述
系统功模块组成
功图:
舞伴搭配问题
(main函数)
类模板创建两队列
queue
queue
输入拷贝函数
(pshuru(namesex))函数
显示函数
(show())函数
出队函数
(pop(p))函数
写进文件函数
(inout<
(push(p))函数
输出函数
(show())函数
配流程图
开始
结束
否
输入name
Sexmsexw
while(1)
count_t++
cout(输出配跳舞情况)
2.2 详细设计
221数
舞伴配类体class peoples存基信息
定义类peoples
class peoples
{
public
peoples()
void shuru(char *nachar *s)输入函数
void sf() 相析构函数
void show() 显示函数
char *fhn() 获取姓名
char *fhs()
private
char *name
char *sex
}
样定义类结构
222 控函数执行流程
函数实现
void main()
{
运行系统程序执行生成标题
system(title ☆舞伴配系统☆全建思)
运行系统程序执行改变界面颜色
system(color B1)
queue
queue
peoples p 创建象
int k 输入次舞会数
char t 输入否继续场舞会
static int count_m0男数量
static int count_w0女数量
static int count_t0舞会次数
cout<<\t\t******************************************<
ofstream inout(舞伴配txtiosin)创建文件
if(inout) 果创建成功返回
{
cout<
}
for() 死循环相while(1)
{
cout<<\t\t第<<++count_t<<场舞会<
cin>>k
for(int i0i
peoples p
char name[12]
char sex[2]
cout<<\t\t请输入姓名
cin>>name
cout<<\t\t请输入性(男(m)女(w))
while(1)
{
cin>>sex
if(strcmp(sexm)0||strcmp(sexw)0)较否样
break
else
cout<<\t\t性错误请重新输入
}
pshuru(namesex)
if(strcmp(sexm)0)
{
manpush(p) 进队列
count_m++ 男数量+1
}
else if(strcmp(sexw)0) 女
{
womanpush(p)
count_w++
}
}
if(count_m>count_w) 男女时候
{
for(int i0i
cout<<第< manpop(p) 出队列
pshow() 显示
inout<
cout<<
inout<<
womanpop(p)
pshow()
inout<
cout<<'\n'
inout<<\n
}
cout<<\t\t男队剩余<< <<剩余数:<
count_w0 女数目变0出队
cout<<\t\t剩余
for(i0i
manpop(p)
pshow()
cout<
}
}
男女时候男女时候方法样男女区
else if(count_m
for(int i0i
cout<<\t\t第< manpop(p)
pshow()
inout<
cout<<
inout<<
womanpop(p)
pshow()
inout<
cout<<'\n'
inout<<\n
}
cout<<\t\t女队剩余<< <<剩余数:<
count_m0
cout<<\t\t剩余
for(i0i
womanpop(p)
pshow()
cout<
}
}
男女数量相等
else if(count_wcount_m)
{
for(int i0i
cout<<\t\t第< manpop(p)
pshow()
inout<
cout<<
inout<<
womanpop(p)
pshow()
inout<
cout<<'\n'
inout<<\n
}
count_m0
count_w0
}
cout<<'\n'
cout<<\t\t第<
system(cls) 清屏函数
if(t'y')
{
if(count_w>0)
{
cout<<\t\t次剩余女士数<
for(i0i
显示剩余时候先出队显示入队第二轮
womanpop(p)
pshow()
cout<
}
}
else if(count_m>0)
{
cout<<\t\t次剩余男士数<
for(i0i
manpop(p)
pshow()
cout<
}
}
}
else
{
cout<<\t\t\t★谢谢★<<'\n'
inoutclose()
psf()
man~queue()
woman~queue()
break
}
}
}
舞伴配系统执行先创建文件输入相关数接进行较然执行显示出进入循环操作进行判断
舞伴配系统类模板分:
223
template
class queue
224
template
queue
225
template
队列尾插入结点函数
void queue
226
template
队列头中取出结点
布尔型字节取值falsetrue01区
bool queue
227
template
清空队列
void queue
228函数功描述
定义类模板
template
class queue
{
public
queue()
~queue()
{
clearQue()
}
void push(T &) 队列尾插入结点
bool pop(T &) 队列头中取出结点
void clearQue() 清空队列
protected
int queSize 队列长度
queueNode
queueNode
}
定义类模板中成员函数
template
queue
{
构造函数初始化队列
queSize0
headNULL
tailNULL
}
template
队列尾插入结点函数
void queue
{
queueNode
tpnew queueNode
if(tp) 果创建结点错误返回
{
return
}
tp>nodeDatax x值送结点
假队列数(空队列)尾插入
if(tail)
{
tp>nextNULL
tail>nexttp
tailtp
}
假队列数(空队列)结点首结点尾结点
else
{
tp>nextNULL
tailtp
headtp
}
queSize++
}
template
队列头中取出结点
布尔型字节取值falsetrue01区
bool queue
{
queueNode
if(head)
{
出队首出队首结点定义结点tpheadhead>next
xhead>nodeData
tphead
headhead>nexthead置结点head
if(headNULL)假首结点空尾空队列已清空
{
tailNULL
}
delete tp
queSize
return true
}
return false
}
template
清空队列
void queue
{
T tp
while(pop(tp))
headtailNULL
}
3系统实现
3.1 编码
311 程序预处理
包括加载头文件定义类常量变量进行初始化工作
#include
#include
#include
#include
template
struct queueNode链式队列结构体
{
T nodeData
queueNode *next
}
peoplespeoples()构造函数
{
初始化
namenew char[8]
nameNULL
sexnew char[2]
sexNULL
}
312 函数
函数实现整程序运行控制相关功模块调
void main()
{
运行系统程序执行生成标题
system(title ☆舞伴配系统☆全建思)
运行系统程序执行改变界面颜色
system(color B1)
queue
queue
peoples p 创建象
int k 输入次舞会数
char t 输入否继续场舞会
static int count_m0男数量
static int count_w0女数量
static int count_t0舞会次数
cout<<\t\t******************************************<
ofstream inout(舞伴配txtiosin)创建文件
if(inout) 果创建成功返回
{
cout<
}
for() 死循环相while(1)
{
cout<<\t\t第<<++count_t<<场舞会<
cin>>k
for(int i0i
peoples p
char name[12]
char sex[2]
cout<<\t\t请输入姓名
cin>>name
cout<<\t\t请输入性(男(m)女(w))
while(1)
{
cin>>sex
if(strcmp(sexm)0||strcmp(sexw)0)较否样
break
else
cout<<\t\t性错误请重新输入
}
pshuru(namesex)
if(strcmp(sexm)0)
{
manpush(p) 进队列
count_m++ 男数量+1
}
else if(strcmp(sexw)0) 女
{
womanpush(p)
count_w++
}
}
if(count_m>count_w) 男女时候
{
for(int i0i
cout<<第< manpop(p) 出队列
pshow() 显示
inout<
cout<<
inout<<
womanpop(p)
pshow()
inout<
cout<<'\n'
inout<<\n
}
cout<<\t\t男队剩余<< <<剩余数:<
count_w0 女数目变0出队
cout<<\t\t剩余
for(i0i
manpop(p)
pshow()
cout<
}
}
男女时候男女时候方法样男女区
else if(count_m
for(int i0i
cout<<\t\t第< manpop(p)
pshow()
inout<
cout<<
inout<<
womanpop(p)
pshow()
inout<
cout<<'\n'
inout<<\n
}
cout<<\t\t女队剩余<< <<剩余数:<
count_m0
cout<<\t\t剩余
for(i0i
womanpop(p)
pshow()
cout<
}
}
男女数量相等
else if(count_wcount_m)
{
for(int i0i
cout<<\t\t第< manpop(p)
pshow()
inout<
cout<<
inout<<
womanpop(p)
pshow()
inout<
cout<<'\n'
inout<<\n
}
count_m0
count_w0
}
cout<<'\n'
cout<<\t\t第<
system(cls) 清屏函数
if(t'y')
{
if(count_w>0)
{
cout<<\t\t次剩余女士数<
for(i0i
显示剩余时候先出队显示入队第二轮
womanpop(p)
pshow()
cout<
}
}
else if(count_m>0)
{
cout<<\t\t次剩余男士数<
for(i0i
manpop(p)
pshow()
cout<
}
}
}
else
{
cout<<\t\t\t★谢谢★<<'\n'
inoutclose()
psf()
man~queue()
woman~queue()
break
}
}
}
313 菜单界面
菜单界面系统程序执行改变颜色:
system(color B1)
时菜单界面系统程序执行显示标题
system(title ☆舞伴配系统☆全建思):
314定义peoples成员函数
class peoples
{
public
peoples()
void shuru(char *nachar *s)输入函数
void sf() 相析构函数
void show() 显示函数
char *fhn() 获取姓名
char *fhs()
private
char *name
char *sex
}
315
输入函数
void peoplesshuru(char *nachar *s)
{
namenew char[strlen(na)+1] 存申请空间
strcpy(namena) 系统函数拷贝函数
sexnew char[strlen(s)+1]
strcpy(sexs)
}
显示函数
void peoplesshow()
{
cout<<\t\t<
析构函数
void peoplessf()释放存
{
delete []name
delete []sex
}
获取姓名函数
char *peoplesfhn()
{
return name
}
char *peoplesfhs()
{
return sex
}
3.2 测试调试
321 概述
般情况解决问题编写程序代码较长包括百条甚成千万条语句检查排语法错误会易发现逻辑错误程序进行认真仔细测试调试
测试通运行程序发现错误程常见错误数溢出数组越界进入死循环语句序颠倒加少加{}等等调试确定测试中找错误性质改正错误程测试调试通常交进行测试——调试——测试——调试
检查出尚未发现种类型错误测试成功测试测试程序需测试例测试例公式表示:测试例=测试数+预期结果
测试例应该少测试数发现错误发现错误概率选择合适测试数系统运行时量执行条语句测试指令否正确应分测试输入合法数非法数时程序运行情况合法数考虑数般性特殊性求值问题应测试值前面面中间某位置情况
测试程序时监视窗口时查变量表达式值时部分程序代码注释符暂时括起缩短程序便压缩出错代码范围
322 程序测试
l 菜单中选择添加记录
第次运行该程序应实现键盘输入信息非第次运行该程序应实现文件中读入信息链表中进入增加记录画面输入记录程图示
l 输入数
户继续添加进入添加记录界面程图示
l 显示配情况
l 进入场
l 进文件中生成场配情况
l 直结束时N进行
退出
4系统维护
测试调试确认软件错时开发告段落时交付软件供户软件程中会面更加漫长工作软件维护般维护工作:更改中发现错误适应实际环境程序进行修改满足新需求程序作必改进等等
5纳总结
5.1 开发验
通题目开发体会掌握点容
1.C++面象程序设计进步掌握
2.界面设计力够次想MFC设计界面实没力做成功学界面设计
3.C语言C++语言间通转换掌握深次试图改少错误
4.数结构中逻辑思维强方想全面方面定加强
5.2 实训中遇问题解决方法
次实训中遇问题定义类时头文件名花少时间搞:子写完边写边测试样步步利写二:函数间关系清晰增减功时清晰行
点次系统没做读取文件数成功运程序中舞伴配系统求:假设周末舞会男士女士进入舞厅时排成队跳舞开始时次男队女队队头出配成舞伴两队初始数相较长队中未配者等轮舞曲等应刚跳完重新配文件读取成功重新文件数重新输入说明文件操作方面知识没掌握接仅学文件操作学关编程知识
做实训培养动手力寻找足更学
5.3 设计中尚存足处
关次程序挺足方首先觉程序够完善方甚点乱次功太合实性该程序界面够美观方
5.4 感想心体会
通次实训感触甚深 明白力实太限二知识够广必须学更知识丰富提高力
6参考资料
[1] 谭浩强 C程序设计(第三版) 清华学出版社 2010
[2] 谭浩强 C++面象程序设计 清华学出版社 2011
[3] 缪淮扣 顾训穰 沈俊 数结构C++实现 科学出版社 2009
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档