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.要学会在基础之上去创新,去简化程序。
课程设20xx年12月21计日目录2实验目的错误未定义书签3问题分析24实验步骤错误未定义书签5流程图36程序代码47程序调试与测…
1实验目的通过本实验掌握复杂性问题的分析方法了解汉诺塔游戏的时间复杂性和空间复杂性2问题描述汉诺塔问题来自一个古老的传说在世界刚被…
课程设计报告课程名称高级语言课程设计课程代码07300561设计内容汉诺塔演示系统专业计算机科学与技术20xx年12月16日1目录…
计算机学院实验报告课程名称数据结构实验名称汉诺塔学生姓名朱孝彬学生学号20xx0511001实验日期20xx1一实验目的1理解数据…
一算法程序includeltiostreamgtusingnamespacestd圆盘的个数最多为64constintMAX64用…
课程设20xx年12月21计日目录2实验目的错误未定义书签3问题分析24实验步骤错误未定义书签5流程图36程序代码47程序调试与测…
1实验目的通过本实验掌握复杂性问题的分析方法了解汉诺塔游戏的时间复杂性和空间复杂性2问题描述汉诺塔问题来自一个古老的传说在世界刚被…
课程设计报告课程名称高级语言课程设计课程代码07300561设计内容汉诺塔演示系统专业计算机科学与技术20xx年12月16日1目录…
计算机学院实验报告课程名称数据结构实验名称汉诺塔学生姓名朱孝彬学生学号20xx0511001实验日期20xx1一实验目的1理解数据…
一算法程序includeltiostreamgtusingnamespacestd圆盘的个数最多为64constintMAX64用…
河内塔姓名张辛班级10心理1班学号100305054043引言问题解决是一种重要的思维活动它在人们的实际生活中占有特殊的地位一直受…