1、 1 目录目录 目录目录 . 1 1系统需求分析系统需求分析 . 2 1.1 问题描述 2 2概要设计概要设计 4 2.1 设计思路 . 4 2.2 系统总体设计 . 5 2.3 程序流程图 6 2.3.1 塔盘数量设置. 6 2.3.2 移动速度调节. 6 2.3.3 操作对象选择. 7 2.3.4 汉诺塔求解流程图 8 3详细设计详细设计 9 3.1 模块设计 9 3.1.1 塔和塔显示的定义 . 9 3.1.2 塔盘移动的定义 .11 3.1.3 塔盘移动规律的定义 . 12 3.1.4 主函数 main( ) . 12 4. 系统调试系统调试 . 14 5. 运行结果运行结果 . 14
2、 6. 心得体会心得体会 . 19 7. 附录附录 20 7.1 参考书目 20 7.2 源程序 . 20 8 评分表评分表 25 2 1系统需求分析系统需求分析 1.1 1.1 问题描述问题描述 (一) 、课程设计题目:(一) 、课程设计题目: 汉诺塔问题 (二) 、目的与要求:(二) 、目的与要求: 1、目的: (1)要求学生达到进一步熟练掌握 C 语言的基本知识和技能; (2)基本掌握利用 VC+6.0 制作页面的基本思路和方法; (3)能够利用所学的基本知识和技能,解决简单的汉诺塔问题。 2、基本要求: (1)要求利用 VC+6.0 以及 MFC 控件来完成系统的设计; (2)要求在设
3、计的过程中,建立清晰的类层次; (3)在系统中定义类,每个类中要有各自的属性和方法; (4)在系统的设计中,至少要用到 C 中的一种算法。 3、创新要求: 在基本要求达到后,可进行创新设计,如根据查找结果进行修改的功能。 4、写出设计说明书 (三) 、设计方法和基本原理:(三) 、设计方法和基本原理: 1、问题描述(功能要求) : 界面划出大小不等,颜色不同的矩形块分别代表各盘子,盘子规模 n 为 110,并可以选择人工控制演示和系统自动运行演示,如果是自动则还要输 入演示速度。在界面的上方显示正在移动的盘子的源座和目标座。用人工操 作时,按任意键移动一个盘子,这样可以清楚每一步过程。如果是自
4、动运行, 可以选择移动一步的暂停时间。要求用 Turbo C 或 VC6.0 MFC 实现的汉诺 塔问题的图形程序。 设计思路:用栈存放塔,定义三个堆栈,用来表示三个塔座,栈的每个 结点类型为结构体, 其中数据域存放盘子的代号, 根据代号计算盘子的大小。 Top 为塔的栈顶指针,即每个塔的具体高度。例如,结构体可以定义如下: Struct H int data15;/*存放每个盘的代号*/ 3 int top;/*每个塔的具体高度*/ num3; 2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)利用 VC+中的 MFC 控件制作出汉诺塔运行页面; (2)完成类中各个成员函数的定义; (3)完成系统的应用模块,根据不同按键的功能,在源程序中填入相应的 代码; (4)功能调试; (5)完成系统总结报告以及系统使用说明书。 4 2概要设计概要设计 2.1设计思路 对于一个类似的这样的问题, 任何一个人都不可能直接写出移动盘子的每一个具 体步骤。 可以利用这样的统筹管理的办法求解: