[精品论文]JAVA课程设计(论文)_HANNOI塔_第1页
[精品论文]JAVA课程设计(论文)_HANNOI塔_第2页
[精品论文]JAVA课程设计(论文)_HANNOI塔_第3页
[精品论文]JAVA课程设计(论文)_HANNOI塔_第4页
[精品论文]JAVA课程设计(论文)_HANNOI塔_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

毕业设计课程定做 QQ1714879127大 学JAVA程序设计 课程设计(论文)题目: Hannoi塔 程序设计专题(报告)任务及评语院(系):软件学院 教研室:软件教研室学 号学生姓名专业班级软件技术091班程序设计(报告)题目Hannoi塔程序设计(报告)任务程序设计专题的任务与要求:(1)掌握Java编程、面向对象的基础知识。(2)较熟练地编写Java应用程序Application。(3)了解Java的常用标准类库、编程技巧、异常处理。(5)联系已学过的内容,巩固所学的理论,增强独立工作能力。(6)通过设计主要使学生有一个独立编写程序的过程,对理论学习及动手能力都有一个很大的提高。(7)通过本次设计,进一步培养学生热爱专业的思想,同时对本专业综合素质的提高起一个积极的推动作用。课程设计过程中,要严格遵守实践环节的时间安排,听从指导教师的指导。正确地完成上述内容,记录实习日记,规范完整地撰写出课程设计报告。指导教师评语及成绩成绩: 指导教师签字: 2009 年 12 月 20 日毕业设计课程定做 QQ1714879127辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)目 录第1章 课程设计的目的与要求11.1 课程设计目的11.2 课程设计的实验环境11.3 课程设计的预备知识11.4 课程设计要求1第2章 课程设计内容22.1课程设计主要内容22.2概要设计22.2.1自定义类说明22.4详细设计42.4测试分析142.4.1程序运行情况14图2.4.1-2游戏胜利时界面152.4.2程序异常处理15参考资料17第1章 课程设计的目的与要求1.1 课程设计目的JAVA程序设计是计算机相关专业的必修专业基础课程,其实践性、应用性很强。实践教学环节是必不可少的一个重要环节。本课程的程序设计专题实际是计算机相关专业学生学习完JAVA程序设计课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。1.2 课程设计的实验环境硬件要求能运行Windows 9.X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和ECLIPSE开发工具。1.3 课程设计的预备知识熟悉JAVA语言及ECLIPSE开发工具。1.4 课程设计要求按课程设计指导书提供的课题,要求学生在自行完成各个操作环节,并能实现且达到举一反三的目的,完成一个项目解决一类问题。要求学生能够全面、深入理解和熟练掌握所学内容,并能够用其分析、设计和解答类似问题;对此能够较好地理解和掌握,能够进行简单分析和判断;能编写出具有良好风格的程序;掌握JAVA程序设计的基本技能和面向对象的概念和方法;了解多线程、安全和网络等编程技术。同时培养学生进行分析问题、解决问题的能力;培养学生进行设计分析、设计方法、设计操作与测试、设计过程的观察、理解和归纳能力的提高。第2章 课程设计内容2.1课程设计主要内容我设计的Hannoi塔,除了要编写的6个java文件所给出的类外,还需要java系统提供的一些重要的类,如JButton,JCheckBox等。汉诺塔中有三个座,名字分别为A,B,C。刚开始的时候A塔上有3个大小不等的盘子,这些盘子从座底到座顶按着大小顺序依次摆放在A座上。用户可以用鼠标选中盘子,然后通过拖动鼠标来移动盘子。释放鼠标来放置该盘子。程序要求用户在移动盘子的过程中,不允许吧大盘子放置在小盘子的上面,用户最终要完成的是把A座上的全部盘子移动到B座或C座上。用户可以通过Hannoi塔界面的提供的改变盘子数目功能来改变盘子的数目,同时可以改变盘子的大小以及改变盘子和界面的背景颜色,而且还可以选择控制背景音乐的播放。用户可以通过单击Hannoi塔界面上提供的按钮,让程序自动完成把A座上的盘子全部移动到C座上。用户在移动盘子的过程中,可以随时单击Hannoi塔界面上提供的按钮,重新开始。2.2概要设计主要要实现的功能有: 完成汉诺塔的“手工移动演示”;完成汉诺塔的“自动移动演示”;增加计时功能,即显示用户完成移动盘子所花费的时间;用户可以设置最大和最小盘子的大小;用户可以选择播放和暂停背景音乐;用户可以设置盘子的数目;用户可以设置盘子的颜色以及背景颜色;用户可以将自动移动盘子的文本信息保存到文件;2.2.1自定义类说明* * 类名: JButton* * 作用: 自定义主类, 实现圆盘的类Disc继承JButton类* 继承的父类: Disc类 * * 实现的接口: 没有 * * 表1-成员变量表表2.1 JButton成员变量成员变量描述变量类型名称控制盘子数目StringJLabel重新开始Stringrenew.setText开始游戏Stringrenew.setText背景颜色Stringbgcolor盘子颜色Stringpzcolor表2-方法表表2 Chesspad方法方法名功能备注fillRect()绘制出矩形区域构造方法g.fillOval()绘制相同数目点构造方法drawString()绘制出A、B、C座构造方法setBackground()设置背景颜色和盘子颜色构造方法Timer(int a,Object b)创建一个计时器构造方法stop()停止计时器计时接口方法write保存文件接口方法actionPerformed事件处理evaluate评估2.4详细设计HannoiWindow.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.Timer;import sun.audio.*;import java.util.*;import java.util.Date;import java.io.*;public class HannoiWindow extends JFrame implements ActionListener,ItemListener Tower tower=null; int amountOfDisc=3; char towerName=A,B,C; JButton renew=null; JButton autoButton=null; Timer t; JTextField timeShow,w11,h11,w22,h22; JPanel panel1,panel2; JSplitPane rightPanel,leftPanel; TowerPoint pointD; TowerPoint pointE; JPanel center=new JPanel(); long time1=0,leftTime,leftHour,leftMinute,leftSecond; FlowLayout flow; JComboBox li; JButton bt1,bt2; JPanel max,min; JLabel shumu; JPanel yanse; JButton bgcolor,pzcolor; JCheckBox yinyue; ContinuousAudioDataStream cas; HannoiWindow() tower=new Tower(towerName); tower.setAmountOfDisc(amountOfDisc); tower.setMaxDiscWidth(120); tower.setMinDiscWidth(50); tower.setDiscHeight(16); tower.putDiscOnTower(); t=new Timer(1000,this); t.setInitialDelay(1000); timeShow=new JTextField(10); timeShow.setHorizontalAlignment(SwingConstants.RIGHT); timeShow.setEditable(false); panel1=new JPanel(); panel1.add(new JLabel(用时:); panel1.add(timeShow); panel1.setBorder(BorderFactory.createTitledBorder(计时器); li=new JComboBox(); li.addItem(3); li.addItem(4); li.addItem(5); li.addItem(6); li.addItem(7); li.addItem(8); li.addItem(9); li.addItem(10); li.addItem(11); li.addItem(12); li.addItem(13); li.addItem(14); li.addItem(15); bt1=new JButton(确定); bt2=new JButton(取消); bt1.addActionListener(this); bt2.addActionListener(this); panel2=new JPanel(); panel2.setLayout(null); shumu=new JLabel(盘子数目:); panel2.add(shumu); panel2.add(li); panel2.add(bt1); panel2.add(bt2); shumu.setBounds(5,0,80,35); li.setBounds(80,5,80,25); bt1.setBounds(20,290,60,25); bt2.setBounds(90,290,60,25); max=new JPanel(); max.setLayout(null); max.setBorder(BorderFactory.createTitledBorder(最大盘子大小); JLabel w1=new JLabel(宽度:); JLabel h1=new JLabel(高度:); w11=new JTextField(10); h11=new JTextField(10); max.add(w1); max.add(h1); max.add(w11); max.add(h11); w1.setBounds(10,10,50,40); h1.setBounds(10,40,50,35); w11.setBounds(70,20,90,20); h11.setBounds(70,50,90,20); min=new JPanel(); min.setLayout(null); min.setBorder(BorderFactory.createTitledBorder(最小盘子大小); JLabel w2=new JLabel(宽度:); JLabel h2=new JLabel(高度:); w22=new JTextField(10); h22=new JTextField(10); min.add(w2); min.add(h2); min.add(w22); min.add(h22); w2.setBounds(10,10,50,40); h2.setBounds(10,40,50,35); w22.setBounds(70,20,90,20); h22.setBounds(70,50,90,20); panel2.add(max); panel2.add(min); max.setBounds(0,40,185,80); min.setBounds(0,120,185,80); h22.setEditable(false); yanse=new JPanel(); yanse.setLayout(null); yanse.setBorder(BorderFactory.createTitledBorder(颜色); bgcolor=new JButton(背景颜色); pzcolor=new JButton(盘子颜色); bgcolor.addActionListener(this); pzcolor.addActionListener(this); yanse.add(bgcolor); yanse.add(pzcolor); bgcolor.setBounds(40,20,100,25); pzcolor.setBounds(40,50,100,25); panel2.add(yanse); yanse.setBounds(0,200,185,85); JScrollPane spanel=new JScrollPane(panel2); spanel.setBorder(BorderFactory.createTitledBorder(设置选项); rightPanel=new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,spanel,panel1); rightPanel.setDividerLocation(345); tower.setBorder(BorderFactory.createTitledBorder(Hannoi塔); leftPanel=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,rightPanel,tower); leftPanel.setDividerLocation(185); add(leftPanel,BorderLayout.CENTER); renew=new JButton(开始游戏); renew.addActionListener(this); autoButton=new JButton(自动演示); autoButton.addActionListener(this); flow=new FlowLayout(); flow.setAlignment(FlowLayout.LEFT); flow.setHgap(30); yinyue=new JCheckBox(背景音乐,true); yinyue.addItemListener(this); JPanel north=new JPanel(); north.setLayout(flow); north.add(renew); north.add(autoButton); String mess=将全部盘子从+towerName0+座搬运到+towerName1+ 座或+towerName2+座; JLabel hintMess=new JLabel(mess,JLabel.CENTER); north.add(hintMess); north.add(yinyue); add(north,BorderLayout.NORTH); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try FileInputStream fileau = new FileInputStream(beijing.WAV);/背景音乐 AudioStream as = new AudioStream(fileau); AudioData data = as.getData(); cas = new ContinuousAudioDataStream (data); AudioPlayer.player.start(cas); catch (Exception e1) setVisible(true); setBounds(60,60,640,500); validate(); public boolean panduan() boolean b=true; pointD=tower.getpointC(); for(int i=0;ipointD.length;i+) if(pointDi.isHaveDisc()=false) b=true; break; else b=false; return b; public boolean panduan1() boolean b=true; pointE=tower.getpointB(); for(int i=0;ipointE.length;i+) if(pointEi.isHaveDisc()=false) b=true; break; else b=false; return b; public void itemStateChanged(ItemEvent e) if(yinyue.isSelected() AudioPlayer.player.start(cas); else AudioPlayer.player.stop(cas); public void actionPerformed(ActionEvent e) if(e.getSource()=t) boolean b,b1,b2; b=panduan(); b1=panduan1(); if(b=true&b1=false) b2=false; else if(b=false&b1=true) b2=false; else b2=true; if(b2) time1=time1+1000; leftTime=time1/1000; leftHour=leftTime/3600; leftMinute=(leftTime-leftHour*3600)/60; leftSecond=leftTime%60; timeShow.setText(+leftHour+小时+leftMinute+分+leftSecond+秒); else t.stop(); time1=0; String s=恭喜你!你完成了,用时:+leftHour+小时+leftMinute+分+leftSecond+秒; JOptionPane.showMessageDialog(this,s,对话框,JOptionPane.PLAIN_MESSAGE); timeShow.setText(); if(e.getSource()=bgcolor) Color newColor=JColorChooser.showDialog(this,调色板,bgcolor.getBackground(); if(newColor!=null) tower.setBackground(newColor); if(e.getSource()=pzcolor) Color newColor=JColorChooser.showDialog(this,调色板,pzcolor.getBackground(); if(newColor!=null) tower.setBG(newColor); if(e.getSource()=bt1) int w1,w2,h; renew.setText(开始游戏); amountOfDisc=Integer.parseInt(String)li.getSelectedItem(); String s=(String)w11.getText(); String s1=(String)w22.getText(); String s2=(String)h11.getText(); if(s.equals() w1=120; else w1=Integer.parseInt(s); if(s1.equals() w2=50; else w2=Integer.parseInt(s1); if(s2.equals() h=16; else h=Integer.parseInt(s2); tower.setMaxDiscWidth(w1); tower.setMinDiscWidth(w2); tower.setDiscHeight(h); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); if(e.getSource()=bt2) w11.setText(); w22.setText(); h11.setText(); else if(e.getSource()=renew) if(renew.getText()=开始游戏) t.start(); tower.setAmountOfDisc(amountOfDisc); tower.putDiscOnTower(); renew.setText(重新开始); time1=0; t.restart(); else if(e.getSource()=autoButton) time1=0; t.stop(); timeShow.setText(); 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(350,this.getBounds().height); tower.getAutoMoveDisc().setVisible(true); validate(); 2.4测试分析2.4.1程序运行情况图2.4.1-1 Hannoi塔开始主界面图2.4.1-2游戏胜利时界面2.4.2程序异常处理当大盘子试图往小盘子上移动的时候,将抛出一个规则违类异常对象,具体如下: if(pointEi.isHaveDisc()=false) b=true;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论