汉诺塔实验项目报告书

JAVA第二次实训报告

     

       姓名:柳正利        

          学号:101530137

                班级:软件工程软工一班

                日期:20##年3月16日

目录

一.设计要求………………………………………………

二.总体设计………………………………………………

三.详细设计………………………………………………

四.代码调试………………………………………………

五.软件发布………………………………………………

  六.总结……………………………………………………

  七.参考文献…………………………………………….

一.  设计要求

1. 设计GUI界面的Hannoi塔。汉诺塔中有三个座,名字分别为A,B,C。初始状态时A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。释放鼠标来放置该盘子。

2. 程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。

3. 用户可以通过Hannoi塔界面的提供的改变盘子数目功能来改变盘子的数目,同时可以改变盘子的大小以及改变盘子和界面的背景颜色,而且还可以选择控制背景音乐的播放。

4. 用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上,并将移动过程在文本框上显示,可以将其保存到文件。

5.用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始。

二.   总体设计

     在设计汉诺塔时,需编写6个JAVA源文件,HannoiWindow.java,TowerPoint.java,Disc.java,HandleMouse.java和AutoMoveDisc.java,除要编写的6个java源文件外,还需要java系统提供的一些重要的类,如JMenuBar,JMenu和JButton。

(1)总体设计

总体流程图

2)主要功能设计流程

A、B、C 座实现流程图

图3.2 A、B、C 座实现流程图

详细设计

Hannoi塔除了要编写的6个java文件所给出的类外,还需要java系统提供的一些重要的类,如JButton,JCheckBox等,Hannoi塔所用到的一些重要的类以及它们之间的关系如图3.3所示:

图3.3 类之间的关系

Tower类是javax.swing包中JPanel容器的一个子类,创建的对象tower是HannoiWindow窗口的成员之一,被添加到HannoiWindow窗口的中心位置。标明Tower类的主要成员变量和方法以及和HannoiWindow类之间组合关系的UML图如图3.4所示。

Hannoiwindow类的类图

图3.4 Tower类的UML图

以下是UML图中有关数据和方法的详细说明。

1、成员变量

(1)amountOfDisc是int型数据。amountOfDisc值用来确定tower对象中盘子的数目,即确定tower对象中Disc类型数组disc的长度。

(2)disc是Disc型数组,该数组的长度由amountOfDisc值来确定。Disc数组的每个单元中存放一个Disc对象,依次表明tower对象中有怎样多的盘子。

(3)towerName是char型数组,长度为3,其三个单元的默认取值依次是A、B和C。towerName是数组的单元的值用来确定tower中三个座的名字。

(4)maxDiscWidth和minDiscWidth的值分别用来确定最大盘子的宽度和最小盘子的宽度,discHeight的值确定每个盘子的高度。

(5)pointA、pointB和pointC都是TowerPoint型数组,三个数组的长度与盘子数目相同,即都是amountOfDisc。pointA、pointB和pointC单元都是TowerPoint创建对象,分别用来表示Hannoi塔中三个座上的塔点。A座、B座和C座上的三个塔点分别由pointA、pointB和pointC中的单元来确定。每个座上的三个塔点都是从座顶依次对应数组的相应单元中的TowerPoint对象。例如,A座最上面的塔点是pointA[0],中间的塔点是pointA[1],最下面的塔点是pointA[2]。

(6)handleMouse是HandleMouse类创建的鼠标事件监视器,用来监视disc数组的Disc对象上触发的鼠标事件。

(7)autoMoveDisc是AutoMoveDisc创建的对话框。通过该对话框可以实现程序自动移动盘子。

(8)SizeDialog是自定义盘子的高度,宽度,数目的对话框。

(9)Media是打开背景音乐的对话框,利用它可以播放wav格式的音乐。

2、方法

(1)Tower(char[])是构造方法,负责完成tower容器的初始化。

(2)tower容器调用setAmountOfDisc(int)方法可以设置amountOfDisc的值。

(3)tower容器调用setMaxDiscWidth(int)方法可以设置最大的盘子的大小。

(4) tower容器调用setMinDiscWidth(int)方法可以设置最小的盘子的大小。

(5) tower容器调用setDiscHeight(int)方法可以设置盘子的高度。

(6) tower容器调用putDiscOnTower ()方法可以将盘子放置在Hannoi塔的A座上,即在pointA指定的塔点上放置disc数组的成员。

(7) tower容器调用getAutoMoveDisc ()方法返回其中的AutoMoveDisc对象:autoMoveDisc。tower是HannoiWindow窗口中的成员,当用户单击HannoiWindow窗口中的autoButton按钮时,窗口中的actionPerformed(ActionEvent)方法将被执行,该方法所进行的操作是让tower对象返回其中的AutoMoveDisc对象,该对象是一个对话框,用户可以通过该对话框让程序自动地移动盘子。

(8) tower容器调用removeDisk ()方法可以移调tower容器中的盘子。

(9) tower容器调用paintComponent (Graphics)方法绘制出塔点的位置和必要的视图。

综上所述,Tower创建的容器效果如图3.5所示。

   

.代码测试

1.分别将已经写好的将8个java源文件HannoiWindow.Java,TowerPoint.java,Disc.java,HandleMouse.java,AutoMoveDisc.java,Media.java,SizeDialog.java保存到同一目录中,分别编译这8个java源文件,或运行“java * .java”命令,编译全部源文件,然后运行主类。

2.系统测试

选择测试方法,对系统进行测试,并对测试结果加以分析,并提出测试的结论意见,并说明错误原因和修改过程

3.5 系统运行

Hannoi塔主界面的运行效果截图如图3.6所示

自动演示截图:

五.软件发布

 可以使用jar.exe命令制作JAR文件来发布编写的软件。

(1)首先用文本编辑器编写一个清单文件:

 Mymoon.mf

Mainfest-Version: 1.0

Main-Class: HannoiWindow

Create-By: 1.2(Sun Microsystem Inc)

 将mymoon.mf保存到和应用程序字节码文件到同一目录中。

(2)生成JAR文件

   运行jar命令生成jar文件。

七.总结

两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,通过自己查资料,和同学们相互探讨,相互学习,相互监督。学会了独立自主,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。

课程设计是我们专业课程知识综合应用的实践训练,带着是我们迈向社会,从事职业工作前一个必不少的过程.”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义.我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础

通过这次的课程设计,我对Java这门语言有了更深刻的理解。其中包括类、对象、接口、继承、方法以及Java语言中的常用包等的使用方法,特别是图形用户界面里各种组件的创建,事件处理等相关知识。使我对Java语言是一种非常难懂的语言的思想有了极大的改观。

.参考资料

[1] 朱福喜,尹为民,余振坤. Java语言与面向对象程序设计[M].武汉:武汉大学出版社1999.5:67-128

[2] 陈国君,陈磊.Java 2从入门到精通[M].北京:清华大学出版社,2006.1:13-98

[3] 王梅,Java并发编程—设计原则与模式[M].北京:中国电力出版社,2009.02

[4] 尹伟民,Java程序设计之网络编程[M].北京:清华大学出版社,2008.03

[5] 印昊.java与面向对象程序设计[M].高等教育出版社.2008.4.

[6] 耿祥义.Java课程设计.清华大学出版社,2009.

   [8] 百度。www.baidu.com

   [9]csdn,www.csdn.cn

 

第二篇:实验汉诺塔问题

     

课程名称          数据结构          

实验名称       汉诺塔问题           

实验类型       设计型实验            

实验地点304机房实验日期  2011.11.11

指导教师             魏海平          

专业  计算机科学与技术

班级  算计1001        

学号  1011010113        

姓名   张强            

辽宁石油化工大学计算机与通信工程学院

           数据结构实验报告评分表

一.实验内容:

(1)设计数据结构,表示三座宝塔和n个盘子;

(2)输出每一次移动盘子的情况;

(3)分析算法的时间性能。

二.实验步骤:

(1)将塔A上的n-1个碟子借助塔C先移到塔B上。

    (2)把塔A上剩下的一个碟子移到塔C上。

(3)将n-1个碟子从塔B借助于塔A移到塔C上。

三.汉诺塔求解示意图

.c)把塔A上剩下的一个碟子移到塔C上(d)把n-1个碟子从塔B移到塔C

四.汉诺塔算法Hanoi

void Hanoi( int n, char A, char B, char C)

{

   if (n = = 1)  printf("移动  %d %c %c\n",n,A,C);

 //将碟子从A移到C

       else {

           Hanoi (n-1,A,C,B);         

printf("移动  %d %c %c\n",n,A,C);

           Hanoi (n-1,B,A,C);

      }

}

五.实验源程序:

#include<stdio.h>  

void hanoi(int n,char A,char B,char C)

{

if(n==1)

{

  printf("移动  %d %c %c\n",n,A,C);

}

else

{

  hanoi(n-1,A,C,B);

  printf("移动 %d %c %c\n",n,A,C);

  hanoi(n-1,B,A,C);

}

}

void main()

{

int n;

printf("输入所要处理的汉诺塔个数:\n");

scanf("%d",&n);

hanoi(n,'A','B','C');

}

六.使用说明:

=====================

1.输入所要处理的汉诺塔个数;

2.显示结果;

=====================

Select

1.输入汉诺塔个数;

2.实验结束,显示结果。

七.实验结果截图:

八.实验总结(结果分析和体会)

1.实验中主要运用了汉诺塔算法,在编写程序之前要了解汉诺塔算法的主要思想。

2.在实验操作过程中遇到了换位顺序的错误,但是这让我对算法加深了解。

3.上机是对平时所学的知识的检验,所以这就要靠平时的积累了。

4.要学会在基础之上去创新,去简化程序。

相关推荐