已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华东交通大学课程设计报告课程设计(论文)任务书 学院 专业 班 一、课程设计(论文)题目 Hannoi塔 二、课程设计(论文)工作自 2012 年 12 月 24 日起至 2012 年 12 月 28 日止。三、课程设计(论文) 地点: 四、课程设计(论文)内容要求:1本课程设计的目的(1)掌握Java语言的程序设计方法; (2)理论联系实际,进一步提高学生的软件开发技术;(3)培养学生分析、解决问题的能力;(4)提高学生实践论文撰写能力。2课程设计的任务及要求1)课程设计任务:设计GUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。2)创新要求:1 有三个表示塔的对象,分别命名为A、B和C。A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。2 用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。3.可以由用户自己设置盘子数量和盘子大小。4.可以改变盘子的颜色以及背景颜色。5.游戏分为初、中、高三个等级。6.可以记录游戏时间并且设有从新开始按钮。3)课程设计论文编写要求(1)课程设计任务及要求(2)设计思路-工作原理、功能规划(3)详细设计-数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。(4)运行调试与分析讨论-给出运行屏幕截图,分析运行结果,有何改进想法等。(5)设计体会与小结-设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7)报告按规定排版打印,要求装订平整,否则要求返工;(8)课设报告的装订顺序如下:封面-任务书-中文摘要-目录-正文-附录(代码及相关图片)(9)严禁抄袭,如有发现,按不及格处理。4)课程设计评分标准: (1)学习态度:20分;(2)程序检查:20分;(3)课设答辩:20分;(4)课设报告:40分。5)参考文献:(1)丁振凡. Java语言实用教程(第2版)M 清华大学出版社. 2008.1 (2)丁振凡Java语言实用教程实验指导北京邮电大学出版社 2007-7(8)参考网址:http/www.CSDN.net6)课程设计进度安排1准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料2程序模块设计分析阶段(4学时):程序总体设计、详细设计3代码编写调试阶段(8学时):程序模块代码编写、调试、测试4撰写论文阶段(4学时):总结课程设计任务和设计内容,撰写课程设计论文学生签名: 2012 年 12 月 24 日课程设计(论文)评审意见(1)学习态度(20分):优()、良()、中()、一般()、差(); (2)程序检查(20分):优()、良()、中()、一般()、差();(3)课设答辩(20分):优()、良()、中()、一般()、差();(5)论文撰写(40分):优()、良()、中()、一般()、差(); 评阅人: 职称: 讲师 2012 年 12 月 日中文摘要JAVA语言实用教程是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JAVA语言实用教程课程后,进行的一次全面的综合训练,JAVA语言实用教程的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。目录一、课程设计任务及要求1二、需求分析2三、设计思路3四、详细设计4五、运行调试与分析讨论5六、设计体会与小结6七、参考文献7一、课程设计任务及要求1)课程设计任务:设计GUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。2)创新要求:3 有三个表示塔的对象,分别命名为A、B和C。A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。4 用户也可以选择让程序自动演示。选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。5可以由用户自己设置盘子数量和盘子大小。6可以改变盘子的颜色以及背景颜色。7游戏分为初、中、高三个等级。8可以记录游戏时间并且设有重新开始按钮。二、需求分析一、系统需求分析使用java面向对象语言设计汉诺塔游戏,此游戏要求: 1、界面要求: 1). 尽量使用图形界面实现,要符合日常软件使用规范来设计菜单和界面。 2). 如果无法实现图形界面,则在命令行方式下也需要提供菜单,方便用户操作(盘子可以自己规定)。 2其他要求: 3.每次移动一个盘子,小的只能叠在大的上面。 4.把所有碟子从A塔柱全部移到C塔柱上如果A盘上的盘子全都移动到了C塔柱上,则游戏成功;否则失败。 1). 标识符命名遵循Windows命名规范。 2). 能够注意各种异常处理,注重提高程序运行效率。二、系统概述 “汉诺塔”游戏是利用面向对象语言java写的一个简单的游戏,它的目标是把最左边塔柱上的盘子按一定的规则移动到最右过的塔柱上去,规则如下:1. 有三根塔柱A,B,C。A杆上有若干盘子(由小到大排列)2. 需要把A上的盘子搬到C上面去(由小到大排列)3. 每次只能移动一个盘子且大的盘子不能叠加到小的盘子上面三、系统运行环境 任何具有jre运行环境的任何机器三、设计思路我设计的Hannoi塔,除了要编写的6个java文件(HannoiWindow、AutoMoveDisc、Disc、HandleMouse、Tower、TowerPoint)所给出的类外,还需要java系统提供的一些重要的类,如JButton,JCheckBox等。汉诺塔中有三个座,名字分别为A,B,C。刚开始的时候A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。释放鼠标来放置该盘子。程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。用户可以通过Hannoi塔界面的提供的改变盘子数目功能来改变盘子的数目,同时可以改变盘子的大小以及改变盘子和界面的背景颜色,而且还可以选择控制背景音乐的播放。用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上。用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始。概要设计主要要实现的功能有: 完成汉诺塔的“手工移动演示”;完成汉诺塔的“自动移动演示”;增加计时功能,即显示用户完成移动盘子所花费的时间;用户可以设置最大和最小盘子的大小;用户可以设置盘子的数目;用户可以设置盘子的颜色以及背景颜色;用户可以将自动移动盘子的文本信息保存到文件;四、详细设计package Hannoi;/* HannoiWindow类 * 该类主要功能是设置主界面的布局、相关按钮和监听事件 * */import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.JOptionPane;public class HannoiWindow extends JFrame implements ActionListener Tower tower=null; /Tower创建的tower容器,刻画了汉诺塔的结构,放置在主界面的中心 int amountOfDisc=3; /确定tower对象中“盘子”数目 int number=0; Color discColor; HandleMouse handleMouseTime; Timer time=new Timer(1000,this); char towerName=A,B,C; /容器tower中三个座的名字 JMenuBar bar; /菜单棒 JMenu menuGrade,menuDiscNum,menuMM,menuColor; JMenuItem oneGradeItem,twoGradeItem,threeGradeItem,discColorItem,backColorItem,maxDiscWidth,minDiscWidth,DiscNum; JButton renew=null; JButton autoButton=null; JPanel center=new JPanel(); JTextField text; /- public JRadioButton cyan,red,green,blue,yellow; public ButtonGroup buttonGroup; /- HannoiWindow() /构造函数,设置主界面布局super(汉诺塔小游戏(Hannoi Game) 作者:XXX 指导老师:XXX); tower=new Tower(towerName); tower.setAmountOfDisc(amountOfDisc); tower.setMaxDiscWidth(120); tower.setMinDiscWidth(50); tower.setDiscHeight(16); tower.putDiscOnTower(); add(tower,BorderLayout.CENTER); bar=new JMenuBar(); menuGrade=new JMenu(选择关卡); menuColor=new JMenu(变换颜色); menuDiscNum=new JMenu(盘子数量); menuMM=new JMenu(盘子大小); oneGradeItem=new JMenuItem(第一关_初级); twoGradeItem=new JMenuItem(第二关_中级); threeGradeItem=new JMenuItem(第三关_高级); discColorItem=new JMenuItem(盘子颜色); backColorItem=new JMenuItem(背景颜色); maxDiscWidth=new JMenuItem(最大盘子宽度); minDiscWidth=new JMenuItem(最小盘子宽度); DiscNum=new JMenuItem(设置盘子数量); menuGrade.add(oneGradeItem); menuGrade.addSeparator(); menuGrade.add(twoGradeItem); menuGrade.addSeparator(); menuGrade.add(threeGradeItem); menuColor.add(discColorItem); menuColor.add(backColorItem); menuMM.add(maxDiscWidth); menuMM.add(minDiscWidth); menuDiscNum.add(DiscNum); bar.add(menuGrade); bar.add(menuDiscNum); bar.add(menuMM); bar.add(menuColor); setJMenuBar(bar); oneGradeItem.addActionListener(this); twoGradeItem.addActionListener(this); threeGradeItem.addActionListener(this); DiscNum.addActionListener(this); maxDiscWidth.addActionListener(this); minDiscWidth.addActionListener(this); discColorItem.addActionListener(this); backColorItem.addActionListener(this); renew=new JButton(重新开始); renew.addActionListener(this); autoButton=new JButton(自动演示); text=new JTextField(您的游戏时间:0秒,10); autoButton.addActionListener(this); JPanel north=new JPanel(); String mess=将全部盘子从 +towerName0+ 座搬运到 +towerName1+ 座或 +towerName2+ 座; JLabel hintMess=new JLabel(mess,JLabel.CENTER); north.add(renew); north.add(autoButton); north.add(hintMess); north.add(text); add(north,BorderLayout.NORTH); /- buttonGroup=new ButtonGroup(); cyan = new JRadioButton(原色); red = new JRadioButton(红色); green = new JRadioButton(绿色); blue = new JRadioButton(蓝色); yellow =new JRadioButton(黄色); cyan.setFont(new Font(楷体_GB2312,Font.BOLD,14); red.setFont(new Font(楷体_GB2312,Font.BOLD,14); green.setFont(new Font(楷体_GB2312,Font.BOLD,14); blue.setFont(new Font(楷体_GB2312,Font.BOLD,14); yellow.setFont(new Font(楷体_GB2312,Font.BOLD,14); buttonGroup.add(cyan); buttonGroup.add(red); buttonGroup.add(green); buttonGroup.add(blue); buttonGroup.add(yellow); rHandler h=new rHandler(); /创建监听器 cyan.addItemListener(h); red.addItemListener(h); green.addItemListener(h); blue.addItemListener(h); yellow.addItemListener(h); JPanel southColor=new JPanel(); southColor.add(cyan); southColor.add(red); southColor.add(green); southColor.add(blue); southColor.add(yellow); add(southColor,BorderLayout.SOUTH); setResizable(false); /- setResizable(false); setVisible(true); setBounds(300,150,680,480); validate(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); time.start(); public void actionPerformed(ActionEvent e) /各种动作事件的监听处理if(e.getSource()=oneGradeItem|e.getSource()=twoGradeItem|e.getSource()=threeGradeItem) if(e.getSource()=oneGradeItem) amountOfDisc=3; if(e.getSource()=twoGradeItem) amountOfDisc=4; if(e.getSource()=threeGradeItem) amountOfDisc=5; if(time.isRunning()=false) time.restart();handleMouseTime.ALL=0; number=0; text.setText(您的游戏时间:+number+秒); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); else if(e.getSource()=renew) /重新开始 ”按钮动作监听处理方法 if(time.isRunning()=false) time.restart();handleMouseTime.ALL=0; number=0; text.setText(您的游戏时间:+number+秒); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); else if(e.getSource()=autoButton) /自动演示按钮动作监听处理方法 tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); int x=this.getBounds().x+this.getBounds().width; int y=this.getBounds().y; tower.getAutoMoveDisc().setLocation(x,y); tower.getAutoMoveDisc().setSize(380,this.getBounds().height); tower.getAutoMoveDisc().setVisible(true); else if(e.getSource()=discColorItem|e.getSource()=backColorItem) Color Col=getBackground(); Col=JColorChooser.showDialog(this, 颜色变换调色板, Col); discColor=Col; if(e.getSource()=discColorItem) if(time.isRunning()=false) time.restart();handleMouseTime.ALL=0; number=0; text.setText(您的游戏时间:+number+秒); tower.disccolor(discColor); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); else if(e.getSource()=backColorItem) tower.setBackground(Col); JOptionPane.showMessageDialog(null, 背景颜色也可以用窗口5个单选按钮变换!, 消息提示框, JOptionPane.PLAIN_MESSAGE); else if(e.getSource()=DiscNum) int n; String strNum=JOptionPane.showInputDialog(请输入您要的盘子数量(有效长度115)); n=Integer.parseInt(strNum); if(n=1) if(time.isRunning()=false) time.restart();handleMouseTime.ALL=0; number=0; text.setText(您的游戏时间:+number+秒); amountOfDisc=n; tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); else if(e.getSource()=maxDiscWidth) int width; String str=JOptionPane.showInputDialog(请输入最大盘子的长度(有效长度100180)); width=Integer.parseInt(str); if(width=100) if(time.isRunning()=false) time.restart();handleMouseTime.ALL=0; number=0; text.setText(您的游戏时间:+number+秒); tower.setMaxDiscWidth(width); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); else if(e.getSource()=minDiscWidth) int width; String str=JOptionPane.showInputDialog(请输入最小盘子的长度(有效长度1080)); width=Integer.parseInt(str); if(width=10) if(time.isRunning()=false) time.restart();handleMouseTime.ALL=0; number=0; text.setText(您的游戏时间:+number+秒); tower.setMinDiscWidth(width); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); if(e.getSource()=time) if(handleMouseTime.Start=1)text.setText(您的游戏时间:+number+秒);number+; if(handleMouseTime.ALL=1) time.stop(); handleMouseTime.Start=0; JOptionPane.showMessageDialog(null, 祝贺您,成功完成了!, 消息框, JOptionPane.PLAIN_MESSAGE); validate(); public class rHandler implements ItemListener public void itemStateChanged(ItemEvent event) if(cyan.isSelected() tower.setBackground(new Color(200,236,236); else if(red.isSelected() tower.setBackground(Color.red); else if(green.isSelected() tower.setBackground(Color.green); else if(blue.isSelected() tower.setBackground(Color.blue); else if(yellow.isSelected() tower.setBackground(Color.yellow); public static void main(String args) new HannoiWindow(); /* AutoMoveDisc类 * 该类实现了ActionListener接口,创建对象 autoMoveDisc 是Tower的成员之一 * */import java.io.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.filechooser.*;import javax.swing.text.BadLocationException;public class AutoMoveDisc extends JDialog implements ActionListener int amountOfDisc=3; /盘子的数量 TowerPoint pointA,pointB,pointC; /存放Tower容器中的塔点对象的引用; char towerName; /存放Tower容器中的towername的引用 Container con; /Container容器对象,用来存放tower对象引用 StringBuffer moveStep; /存放移动盘子的步骤,用连续两个字符表示 JTextArea showStep; /显示盘子移动步骤的文本区 JButton bStart,bStop,bContinue,bClose,bSave; /相关按钮 Timer time; /时间计时器 int i=0,number=0; AutoMoveDisc(Container con) /构造函数,完成界面布局 setModal(true); setTitle(自动演示搬盘子过程:); this.con=con; moveStep=new StringBuffer(); time=new Timer(1000,this); time.setInitialDelay(10); showStep=new JTextArea(15,20); bStart=new JButton(演示); bStop=new JButton(暂停); bContinue=new JButton(继续); bSave=new JButton(保存); bClose=new JButton(关闭); bStart.addActionListener(this); bStop.addActionListener(this); bContinue.addActionListener(this); bSave.addActionListener(this); bClose.addActionListener(this); JPanel south=new JPanel(); south.setLayout(new FlowLayout(); south.add(bStart); south.add(bStop); south.add(bContinue); south.add(bSave); south.add(bClose); add(new JScrollPane(showStep),BorderLayout.CENTER); add(south,BorderLayout.SOUTH); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); towerName=new char3; addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) time.stop(); setVisible(false); );public void setPointA(TowerPoint pointA) /将tower容器中的pointA对象的引用传递给该对象的pointA,以便autoMoveDisc对象自动移动踏上的盘子disc this.pointA=pointA; public void setPointB(TowerPoint pointB) this.pointB=pointB; public void setPointC(TowerPoint pointC) this.pointC=pointC; public void setTowerName(char name)/给每一个座tower命名 if(name0=name1|name0=name2|name1=name2) towerName0=A; towerName1=B; towerName2=C; else towerName=name; public void setAmountOfDisc(int n) /设置盘子数目变量 amountOfDisc的值 amountOfDisc=n; public void actionPerformed(ActionEvent e) /实现文本显示盘子移动步骤事件 if(e.getSource()=time) number+; char cStart,cEnd; if(i=moveStep.length()-1) time.stop(); else if(e.getSource()=bStart) if(moveStep.length()=0) if(time.isRunning()=false) i=0; moveStep=new StringBuffer(); setMoveStep(amountOfDisc,towerName0,towerName1,towerName2); number=0; time.start(); else if(e.getSource()=bStop) if(time.isRunning()=true) time.stop(); else if(e.getSource()=bContinue) if(time.isRunning()=false) time.restart(); else if(e.getSource()=bSave) JFileChooser save=new JFileChooser(); int SV=save.showSaveDialog(null); if(SV=JFileChooser.APPROVE_OPTION) File file=save.getSelectedFile(); try BufferedWriter writer=new BufferedWriter(new FileWriter(file.getPath(); writer.write(showSt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 消防队列队汇报
- 单车计数器介绍
- 肝硬化患者并发症处理方案
- 公卫专业面试必-备知识要点库
- 小主持小班课件
- 英国流行音乐介绍
- 供应链管理系统分析师工作计划
- 为家庭医生助理提供职业发展规划建议
- 中学语文教育行业面试实战指南
- 人力资源管理面试必看指南
- 医院合作体检协议书
- 八年级语文下册第三单元《红色经典》“表达交流”综合实践志趣北师大版教案
- 活动执行协议合同书
- 2025年超星尔雅学习通《生物学与生命科学》考试备考题库及答案解析
- 交付管理岗转正答辩
- 落实企业安全生产主体责任知识试题及答案
- 2025广东东莞市樟木头镇招聘编外聘用人员14人笔试考试参考题库及答案解析
- 2025湖北随州北星汇能产业发展有限公司招聘延期笔试考试参考题库及答案解析
- 石榴树修剪培训课件
- 2026年东营科技职业学院单招综合素质考试题库附答案
- 铸铁机工岗前操作安全考核试卷含答案
评论
0/150
提交评论