Hannoi塔java课程设计.docx
《Hannoi塔java课程设计.docx》由会员分享,可在线阅读,更多相关《Hannoi塔java课程设计.docx(38页珍藏版)》请在冰豆网上搜索。
Hannoi塔java课程设计
Hannoi塔java课程设计
Java程序设计课程设计报告
(2012--2013年度第1学期)
Hannoi塔
专业xxxxxxxxxx学生姓名xxx
班级xxxx学号xxxx指导教师徐静完成日期2012年9月28日
Hannoi塔
目录.............................................................................................................................................2
1概述........................................................................................................................................3
1.1课程设计目的......................................................................................................31.2课程设计内容......................................................................................................32系统需求分析................................................................................................................................3
2.1系统目标.............................................................................................................32.2主体功能.............................................................................................................32.3开发环境.............................................................................................................43系统概要设计................................................................................................................................4
3.1系统的功能模块划分..........................................................................................43.2系统流程图..........................................................................................................44系统详细设计.................................................................................................................................6
4.1总体功能设计......................................................................................................64.2HANNOIWINDOW类.................................................................................................64.3TOWER类..............................................................................................................74.4DISC类................................................................................................................84.5TOWERPOINT类.....................................................................................................84.6HANDLEMOUSE类...................................................................................................84.7AUTOMOVEDISC类.................................................................................................95测试...............................................................................................................................................10
5.1测试方案...........................................................................................................105.2测试结果...........................................................................................................106小结...............................................................................................................................................12
参考文献...........................................................................................................................................12
附录...........................................................................................................................................14
附录1源程序清单.........................................................................................................................14
Java程序设计课程设计报告(2012)
学生成绩管理系统的设计
1概述
1.1课程设计目的
按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。
要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。
同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。
1.2课程设计内容
我设计的Hannoi塔,除了要编写的6个java文件所给出的类外,还需要java系统提供的一些重要的类,如JButton,JCheckBox等。
汉诺塔中有三个座,名字分别为A,B,C。
刚开始的时候A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。
用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。
释放鼠标来放置该盘子。
程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上
2系统需求分析
2.1系统目标
可以正常运行程序,并且按照设计目的预想的完成具体功能。
2.2主体功能
1)设计GUI界面的Hannoi塔。
汉诺塔中有三个座,名字分别为A,B,C。
初始状态时A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。
用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。
释放鼠标来放置该盘子。
2)程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。
3)用户可以通过Hannoi塔界面的提供的改变盘子数目功能来改变盘子的数目,同时可以改变盘子的大小以及改变盘子和界面的背景颜色,而且还可以选择控制背景音乐的播放。
4)用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上。
3
Hannoi塔
5)用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始。
2.3开发环境
JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。
3系统概要设计
3.1系统的功能模块划分
1)HannoiWindow.java(主类)
HannoiWindow类负责创建Hannoi塔的主窗口,该类含有main方法,Hannoi塔从该类开始执行。
HannoiWindow类的成员变量中有五种重要类型的对象、一个int基本型数据和一个char型数组。
五种类型的对象分别是:
Tower、JmenuBar、JmenuItem和Jbutton对象。
HannoiWindow类的主要成员的作用将在后面的详细设计中阐述。
2)Tower.java
Tower类是javax.swing包中Jpanel容器的子类,创建的容器被添加到HannoiWindow窗口的中心。
Tower类的成员变量中有四种重要类型的对象、一个int基本型数据和一个char型数组。
四种类型的对象分别是:
Disc、TowerPoint、HandleMouse、和AutoMoveDisc对象。
Tower类的主要成员的作用将在后面的详细设计中阐述。
3)Disc.java
Disc类是Jbutton的一个子类,创建的对象时Tower容器中的一个按钮,用来表示Tower中的“盘子”。
4)TowerPoint.java
TowerPoint类负责在Tower中创建表示位置的塔点对象。
5)HandleMouse.java
HandleMouse类创建的对象负责处理鼠标事件。
6)AutoMoveDisc.java
AutoMoveDisc类创建的对象负责自动移动盘子从一个座到另一个座。
3.2系统流程图
4
Java程序设计课程设计报告(2012)
开始
选择级别
高级初级中级
自动演示重新开始
演示暂停关闭继续
完成
结束
图3.1系统流程图
5
JButton
Hannoi塔JMenuItem
4系统详细设计
4.1总体功能设计
在设计hannoi塔时,需编写6个java源文件:
HannoiWindow.java、Tower.java、JMenu
TowerPoint.java、Disc.java、HandleMouse.java和AutoMoveDisc.java。
Hannoi塔除了要编写的6个Java源文件所给出的类外,还需要Java系统提供
的一些重要的类,如JMenuBar、JMenu、JMenuItem和JButton。
Hannoi塔所用到AutoMoveDiscJMenuBar的一些重要的类以及之间的组合关系。
HannoiWindowHandleMouse
Tower
Disc
TowerPoint
图4.1类之间的组合关系4.2HannoiWindow类
图4.2HannoiWindow类的UML图
6
Java程序设计课程设计报告(2012)
4.3Tower类
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创建的对话框。
通过该对话框可以实现程序自动移动盘子。
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创建的容器效果如图4.3所示。
7
Hannoi塔
图4.3Tower创建的容器
4.4Disc类
JButton
DiscTower
disc:
Disc[]number:
int
point:
TowerPoint
Disc():
无类型
setNumber(intn):
void
getNumber():
int
setPoint(TowerPoint):
void
getPoint():
TowerPoint
图4.4Disc类的UML图4.5TowerPoint类
TowerPOintTower
PointA:
TowerPoint[]x,y:
intPointB:
TowerPoint[]haveDisc:
booleanPointC:
TowerPoint[]disc:
DiscEquals(TowerPoint):
booleanTowerPoint(int,int):
无类型
putDisc(Component,Container):
voidisHaveDisc():
boolean
getDiscOnPoint():
DiscsetHaveDisc(boolean):
void
removeDisc(Component,Container):
voidgetX():
int
getY():
int
图4.5TowerPoint类的UNL图4.6HandleMouse类
8
Java程序设计课程设计报告(2012)
MouseListenerMouseMotionListener
HandleMouseTower
HandleMouse:
HandleMousepointA,pointB,pointC:
TowerPointstartPoint,endPoint:
TowerPointcon:
ContainerHandleMouse(Container):
无类型
setPointA(TowerPoint[]):
void
setPointB(TowerPoint[]):
void
setPointC(TowerPoint[]):
void
mousePressed(MouseEvent):
void
mouseDragged(MouseEvent):
void
mouseReleased(MouseEvent):
void图4.6HandleMouse类的UML图
4.7AutoMoveDisc类
ActionListener
AutoMoveDiscTower
autoMoveDisc:
amountOfDisc:
intShowStep:
JTextAreaAutoMoveDiscbStart,bStop,bContinue,bClose:
pointA,pointB,pointC:
TowerPoint[]JButtontowerName:
char[]con:
Containertime:
Timer
moveStep:
StringBuffer
AutoMoveDisc(Containercon):
无类型
setPointA(TowerPoint[]):
void
setPointB(TowerPoint[]):
void
setPointC(TowerPoint[]):
void
actionPerformed(ActionEvent):
void
setTowerName(char[]):
voidsetAmountOfDisc(int):
voidsetMoveStep(int,char,char,char):
voidautoMoveDisc(char,char):
void
图4.7AutoMoveDisc类的UML图
9
Hannoi塔
5测试
5.1测试方案
将前面6个Java源文件:
HannoiWindow.java、Tower.java、TowerPoint.java、Disc.java、HandleMouse.java和AutoMoveDisc.java保存同一目录中。
分别编译这6个Java源文件,或运行“javac*.java”命令,编译全部源文件,然后运行主类,即运行HannoiWindow类。
5.2测试结果
图5.1程序截图1
10
Java程序设计课程设计报告(2012)
图5.2程序截图2
图5.3程序截图3
11
Hannoi塔
6小结
两周的课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。
在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督。
学会了合作,学会了运筹帷幄,学会了宽容,学会了理解,也学会了做人与处世。
课程设计是我们专业课程知识综合应用的实践训练,带着是我们迈向社会,从事职业工作前一个必不少的过程(”千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义(我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础
通过这次的课程设计,我对Java这门语言有了更深刻的理解。
其中包括类、对象、接口、继承、方法以及Java语言中的常用包等的使用方法,特别是图形用户界面里各种组件的创建,事件处理等相关知识。
使我对Java语言是一种非常难懂的语言的思想有了极大的改观。
参考文献
[1]耿祥义,张跃平.Java2实用教程(第三版)[M].北京:
清华大学出版社,2006[2]耿祥义.Java课程设计(第三版)[M].北京:
清华大学出版社,2004
12
Java程序设计课程设计报告(2012)[3]张跃平.Java2实用教程实验指导与习题解答(第三版)[M].北京:
清华大学出版社,2004
„„
13
Hannoi塔
附录
附录1源程序清单
1)HannoiWindow.java(主类)
importjavax.swing.*;
importjava.awt.*;