




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
19/19课程设计报告课程设计名称Java程序设计ﻩ 专业计算机科学与技术班级2班学号2009020156姓名冯艳指导教师 成绩2011目录一、设计任务与要求1.1设计任务与要求程序设计专题的任务与要求:课程设计的任务:根据所选题目,完成课程设计的分析、设计和编码,写出课程设计报告.(1)掌握Java的语言规范,面向对象的核心概念和特性;(2)掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等;(3)掌握Java应用软件的开发环境和开发过程;(4)掌握面向对象的思想和程序设计方法.课程设计的要求:设计一个猜数字游戏程序,该游戏可以由程序随机产生整数,玩游戏者通过由用户输入数字来匹配上面所产生的数字。用户随机输入数字,当与计算机产生的随机数相符合时,计算机将提醒用户,游戏成功的信息,当有偏差时,将会提醒偏差,如偏大或者是偏小。1.2选题目的与意义通过选择猜数字游戏这个题目,可以让我掌握Java中的包和类,并且可以灵活的使用myeclipse软件。同时更加深入的了解字符界面的编程过程。使我更熟练的掌握Java程序框架的搭建和类的创建格式。在分析阶段,要进行面向对象的需求分析、系统设计、画出相应的需求分析图、系统设计模型图,这些工作更能锻炼我的逻辑思维,更能培养我思考的全面性。让我学会了多角度思考问题,对我以后的编程奠定了更好的基础.二、需求分析2.1用户需求分析设计一个猜数字游戏程序,要求具体如下特性:趣味性:要求游戏内容丰富多彩,语言风趣幽默。大众性:要求游戏界面操作简单,游戏规则简单易懂。合理性:游戏设计严谨,有条理,具体需求如下=1\*GB3①输入任意一个数字。数字的要求是1—100的自然数即可。=2\*GB3②系统对您输入的数字进行判断。如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。系统将提示您,数字太大请您重新输入.如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。=3\*GB3③游戏开始时,系统自动记录您猜数字的时间,结束后显示游戏共花费的时间。=4\*GB3④每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。=5\*GB3⑤在游戏开始时,自动显示游戏规则。⑥在游戏结束时,可以选择关闭游戏,或者再来一局。2.2开发环境分析硬件要求能运行Windows9。X操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境,J2SDK和eclipse开发工具。J2SDK简介:j2sdk是就阿Java的开发环境包。它包含JDK(开发工具包)和JRE(运行时环境包)。JDK包含JRE,JDK是开发人员必装软件,JRE是客户端运行时必装软件,J2SDK就是JDK,J2JRE就是JRE。Jcreator是开发JAVA的软件.开发JAVA也可以用记事本开发原程序eclipse简介:Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。Eclipse的设计思想是:一切皆为插件。它自身的核心是非常小的,其它所有的功能都以插件的形式附加到该核心上。Eclipse中三个最吸引人的地方:一是它创新性的图形API,即SWT/JFace,在此之前,我曾经用过Java的AWT/SWING来开发Windows应用程序,AWT/SWING其界面客观地讲不够美观,而且界面响应速度比较慢;而SWT/JFace则大大改善了Java在这方面的能力.二是它的插件机制。三是利用它的插件机制开发的众多功能强大的插三、系统设计3.1系统总体设计猜数字游戏-游戏随机给出一个1-100(包括1和100)之间的数字,然后让你猜是什么数字。你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。经过几次猜测与提示后,最终推出答案。(系统设计如图3.1)游戏游戏界面游戏开始游戏说明产生随机数输出字符记录次数记录时间重新开始关闭游戏图3。1游戏界面:采用图形界面显示。页面有如下功能:开始,结束,重来,帮助。游戏开始后,由计算机产生一个1-100的随机数,不显示在图形界面,但显示在字符界面。用户只需输入所猜想的数字,打印在输入框内,按“确定”按钮表示确定,游戏返回提示语句,按照提示语句操作,直至游戏结束。同时,计算机开始对游戏进行计时和计数功能。游戏过程中,如果不想继续玩了,可以直接退出,想重新开局,按“重新开始”按钮即可。想控制界面大小只需拖拽图形界面边框即可。游戏结束后,可以选择“关闭”游戏,或者是“重新开始”。3.2功能模块设计(模块功能设计如图3.2)模块的组成模块的组成游戏说明模块输入输出模块计时模块产生随机数判断该数是否合法输出猜测的数字给出提示语言开始前显示规则开始时记录初始时间猜中后记录结束时间猜数次数模块初始值为零每猜测一次自加1成绩判定模块由猜测次数决定图3。23.3类的设计3.3.1类的定义 类是把具有相同属性的事物划分为一类,从而得出抽象的概念。在面向对象程序设计中,类是一个独立的程序单位,是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了抽象描述。类的概念使我们能对属于该类的全部对象进行统一的描述。在定义对象之前应先定义类。描述一个类需要指明下述三个方面内容:类标识:类的一个有别于其他类的名字。属性说明:用来描述相同对象的静态特征。方法说明:用来描述相同对象的动态特征.3.3。2定义类的格式class类名数据成员成员方法类的结构是由类说明和类体两部分组成的。类的说明部分由关键字class与类名组成,类名的命名遵循Java标识符的定义规则。类体是类声明中花括号所包括的全部内容,它又是由数据成员(属性)和成员方法(方法)两部分组成.数据成员描述对象的属性;成员方法则刻画对象的行为或动作,每一个成员方法确定一个功能或操作。3。3。3类的分类从用户的角度看,Java源程序中的类分为两种:系统定义的类:即Java类库,它是系统定义好的类。Java语言由语法规则和类库两部分组成,语法规则确定Java程序的书写规范;类库则提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口。用户自定义类:系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类.进行Java程序设计,实际上就是定义类的过程。一个Java源程序文件往往是由许多个类组成的。3.3.4类的首先,搭建Java程序框架。打开Eclipse,新建名为GuessNumberGame的项目,然后新建名为GuessNumber的Java类。给GuessNumber加上合适的javadoc。(1)Random(随机数)Random(随机数)的功能就是借助JavaAPI提供的Random类来产生一个随机数。定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。Random类是在java.util这个包中。建立时可以手动在源程序顶部输入importjava。util。Random;语句来申明该程序将要使用java。util包中的Random类.也可以运用Eclipse,把光标移动到有红色波浪线的Random上,然后按下Ctrl+Shift+M,Eclipse会自动完成导入的工作。此时保存一下源代码,警告就会消失。四、程序实现4.1程序流程图(如图4。1)开始开始系统开始计时由用户输入一个数yx>y输入的大了,再小一点吧输入的小了,再大一点吧YN由计算机产生随机数xx=y系统结束计时系统统计猜数次数结束图4.14.2关键算法与技术实现4。2。1源程序/*
程序运行时自动产生1-100的随机数ﻫ
*
接受用户键盘输入数据并给出指示信息
*
直至猜对,游戏者猜对后,显示猜对次数
*
并且供计时功能
*/importjava。awt.event.ActionEvent;importjava。awt.event。ActionListener;importjava。awt.event.KeyAdapter;importjava.awt。event.KeyEvent;importjava.util.Random;importjavax。swing.JButton;importjavax。swing。JLabel;importjavax。swing.JOptionPane;importjavax.swing。JTextField;importjavax。swing.WindowConstants;/***有趣的猜数字游戏*/publicclassGuessNumberextendsjavax。swing.JFrame{{//SetLook&Feeltry{//设置窗口外观为windows外观javax.swing.UIManager。setLookAndFeel(”com.sun。java.swing.plaf.windows.WindowsLookAndFeel");}catch(Exceptione){e。printStackTrace();}}privateJLabeljLabel1;privateJTextFieldjTextField1;privateJButtonjButton1;privateJButtonjButton2;privateintnumber=0;privateintcounter=0;longstartTime=System.currentTimeMillis();longendTime;/***Auto-generatedmainmethodtodisplaythisJFrame*/publicstaticvoidmain(String[]args){GuessNumberinst=newGuessNumber();inst。setVisible(true);//显示窗口}/***新建一个随机数产生器,然后生成一个1到100之间的整数*/publicGuessNumber(){super();initGUI();Randomrandom=newRandom();number=random。nextInt(100);//产生一个1-100间的随机数}/***初始化窗口组件*/privatevoidinitGUI(){try{setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//窗口关闭时销毁窗口getContentPane()。setLayout(null);//设置窗口布局为绝对布局{jLabel1=newJLabel();getContentPane().add(jLabel1);jLabel1.setText(”<html〉欢迎进入有趣的猜数字游戏,游戏规则如下:〈br>"+"游戏随机产生1-100的整数,玩家通过输入数字来匹配所产生的数字.<br〉"+"用户随机输入数字,当与计算机产生的随机数相符合时,计算机将提醒用户,游戏成功的信息〈br>”+"当有偏差时,将会提醒偏差,如偏大或者是偏小。结束后记录游戏时间和猜测次数<br>〈br〉"+”我心里有一个1到100之间的整数,你猜是什么?</html>");jLabel1。setBounds(7,0,420,147);//设置标签位置}{jTextField1=newJTextField();getContentPane()。add(jTextField1);jTextField1。setBounds(42,168,112,28);jTextField1。addKeyListener(newKeyAdapter(){//文本框添加键盘按键监听-监听回车键publicvoidkeyPressed(KeyEventevt){jTextField1KeyPressed(evt);}});}{jButton1=newJButton();getContentPane().add(jButton1);jButton1.setText("确定”);jButton1。setBounds(182,168,77,28);jButton1。addActionListener(newActionListener(){//按钮添加监听publicvoidactionPerformed(ActionEventevt){jButton1ActionPerformed(evt);//按钮被点击时执行该方法}});}{jButton2=newJButton();getContentPane().add(jButton2);jButton2.setText(”重新开始");jButton2。setBounds(280,168,91,28);jButton2.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEventevt){jButton2ActionPerformed(evt);}});}pack();this.setSize(442,265);//设置窗口大小setLocationRelativeTo(null);//设置窗口在显示器居中显示}catch(Exceptione){e.printStackTrace();}}/***“确定”按钮事件监听*@paramevt*/privatevoidjButton1ActionPerformed(ActionEventevt){intguess=0;//记录玩家所猜测的数字counter++;//计数器增加一。 //try,catch的异常管理。try{//获取玩家的输入guess=Integer。parseInt(jTextField1.getText());}catch(Exceptione){//如果玩家不是输入一个合法的整数,则让他重新输入。JOptionPane.showMessageDialog(null,"数字不合法,请输入一个1—100之间的整数!");//显示一个对话框jTextField1.setText(””);//清空文本框内容jTextField1。requestFocus();//文本框获取输入焦点return;}//对玩家的输入进行判断.if(guess>number){JOptionPane。showMessageDialog(null,"输入的大了,再小一点吧!");jTextField1.setText("");jTextField1.requestFocus();return;}if(guess<number){JOptionPane.showMessageDialog(null,”输入的小了,再大一点吧!”);jTextField1.setText("”);jTextField1。requestFocus();return;}if(guess==number){endTime=System.currentTimeMillis();//判断成绩。switch(counter){case1:JOptionPane.showMessageDialog(null,"你是神么??这也太给力了吧!!");break;case2:case3:case4:case5:case6:case7:JOptionPane.showMessageDialog(null,”这么快就猜对了,你很smart啊!");break;default:JOptionPane.showMessageDialog(null,"猜了半天才猜出来,小同志,尚须努力啊!”);break;}JOptionPane。showMessageDialog(null,"您总共猜了"+counter+"次共花了"+(endTime-startTime)/1000+"秒的时间答对正确答案!");}jTextField1.setText(”");jTextField1.requestFocus();}privatevoidjButton2ActionPerformed(ActionEventevt){//重新开始Randomrandom=newRandom();//重新生成随机数number=random。nextInt(100);//产生一个1-100间的随机数counter=0;//记录玩家猜测的次数jTextField1。setText("”);startTime=System。currentTimeMillis();}privatevoidjTextField1KeyPressed(KeyEventevt){//监听文本框回车if(evt。getKeyCode()==KeyEvent。VK_ENTER){jButton1.doClick();//文本框按回车键执行“确定”按钮的事件}}}4。2。2关键算法(1)记录猜测次数模块//记录玩家猜测的次数
counter=0;ﻫ//计数器增加一
counter++;ﻫ首先定义了一个counter变量来记录玩家猜测的次数,并直接初始化为0.在打印一行游戏提示以后,便开始一个do—while语句。在do-while语句中,首先用异常处理语句获取玩家的输入,如果玩家输入不合法,提示以后用continue语句从头重新执行循环语句,等待玩家的输入。从而,guess变量一定包含一个合法的整数。之后要对玩家的输入进行判断。如果玩家的猜测太大或者太小,都做出提示。接着把计数器增加1,表示玩家做过一次猜测。最后便是do-while语句的判断:当玩家猜测的数字和随机产生的答案不同,则再次进入循环,否则便结束循环,执行下面的代码。(用Eclipse的Alt+/快捷键帮助编写do—while语句。)ﻫ(2)输入输出模块//获取玩家的输入ﻫguess=Integer.parseInt(jTextField1.getText());ﻫ//如果玩家不是输入一个合法的整数,则让他重新输入
JOptionPane.showMessageDialog(null,”数字不合法,请输入一个1—100之间的整数!");jTextField1。setText("”);jTextField1.requestFocus();return;}ﻫ//对玩家的输入进行判断。if(guess>number){JOptionPane。showMessageDialog(null,"输入的大了,再小一点吧!”);jTextField1。setText("");jTextField1.requestFocus();return;}if(guess<number){JOptionPane。showMessageDialog(null,"输入的小了,再大一点吧!");jTextField1。setText("”);jTextField1。requestFocus();return;}if(guess==number){endTime=System.currentTimeMillis();(3)判定成绩模块//判断成绩。switch(counter){case1:JOptionPane.showMessageDialog(null,"你是神么??这也太给力了吧!!");break;case2:case3:case4:case5:case6:case7:JOptionPane。showMessageDialog(null,"这么快就猜对了,你很smart啊!”);break;default:JOptionPane.showMessageDialog(null,"猜了半天才猜出来,小同志,尚须努力啊!”);break;}JOptionPane.showMessageDialog(null,"您总共猜了”+counter+”次共花了”+(endTime-startTime)/1000+"秒的时间答对正确答案!”);}jTextField1。setText("”);jTextField1.requestFocus();}switch语句是基于整型表达式的条件判断语句,猜数字用它来进行成绩判断。可以看出,switch语句是和若干case语句和一个default语句搭配使用的。代码中的switch语句用counter变量的值进行判断。当counter的值为1时,便执行case1里面的语句,即打印“你是神么??这也太给力了吧!!”的字样,随后的break语句表示整个switch语句执行到这里结束了.当counter的值为2时,便执行case2里面的语句.可以发现case2到case6都没有break语句,这表示依次执行下面的语句,从而counter的值为2至7时,都打印“这么快就猜对了,你很smart啊!”字样。当counter的值不是1至7时,便执行default语句,打印“猜了半天才猜出来,小同志,尚须努力啊!”的字样.(4)计时模块计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。longstartTime=System.currentTimeMillis();longendTime=System.currentTimeMillis();(5)异常处理Java语言提供了异常(Exception)处理机制帮助程序员发现并处理异常。所谓异常,就是在程序执行过程中能干扰程序正常流程的事件。导致异常的原因很多,比如文件找不到、数组越界、除以零等。当异常出现时,一个异常对象将被自动生成并传递给Java“运行时环境”(runtimesystem),说得专业一点,就是抛出一个异常。异常对象包含了异常类型、程序运行状态等信息。“运行时环境"得到异常对象后便打断程序的正常流程,自动寻找一个专门处理该异常的代码块来解决问题。这样的代码块称作异常句柄(ExceptionHandler)。你可以在异常句柄中尝试修复错误、重试或者报错,或者实在无法进行下去的时候来个自我了断。如果“运行时环境”找不到异常句柄,Java程序便会自行中断。一个典型的异常处理如下:try{ﻫstatement(s);
}catch(exceptiontype1name){ﻫstatement(s);ﻫ}catch(exceptiontype2name){
statement(s);
}finally{ﻫstatement(s);
}其中:try语句括起来的语句可能抛出异常.try语句至少要搭配一个catch语句或finally语句,不能单独使用。
catch语句必须和一个try语句配套使用,根据异常类型(exceptiontype)分别处理不同的异常。也就是说,Java有许多预先定义的异常,你可以通过多个catch语句对它们分门别类地处理.你还可以自己定义异常类型。如果try语句块中没有抛出异常,这里自然不会被执行。
finally语句也必须和一个try语句配套使用,与catch语句不同,无论try语句块中是否抛出异常,finally所包括的语句块都会被执行我设计的猜数字游戏需要从控制台获取玩家输入的数字,有多个异常处理可以编写如下代码:{//SetLook&Feeltry{javax。swing。UIManager.setLookAndFeel("com。sun。java.swing.plaf.windows。WindowsLookAndFeel");}catch(Exceptione){e.printStackTrace();}} //try,catch的异常管理。try{guess=Integer.parseInt(jTextField1。getText());}catch(Exceptione){使用异常机制的诸多好处使得程序更健壮,界面更友善.
把程序的业务逻辑与错误处理分开,代码更合理,更美观。
异常可以分层次处理,使得代码更简洁。
同类的异常可以归到一类一起处理,处理更方便。4.3类与数据结构实现首先搭建Java程序框架。打开Eclipse,新建名为GuessNumberGame的项目,然后新建名为GuessNumber的Java类。GuessNumber加上合适的javadoc。(1)随机数的产生我们可以借助JavaAPI提供的Random类来产生一个随机数.首先在main函数中加入以下三行代码://新建一个随机数产生器,然后生成一个1到100之间的整数.Randomrandom=newRandom();ﻫintnumber=random.nextInt(100);第一句定义了一个类型是Random类的变量random(Java语言区分大小写,所以Random和random是不同意思),并且用new操作符生成一个Random类的实例赋给random变量。random变量实际上是一个参照,指向内存中用new操作符新建的Random类的实大多数情况下可以把random直接看做是一个Random类的实例,可以通过“random"加上“。操作符”来调用Random类的方法,用random.nextInt(100)来获取一个1至100之间的随机数.第二句语句定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。(如图4。3.1)(2)输入输出界面ﻩ标准输入输出(StandardI/O)是指可以被应用程序使用的信息流。比如,应用程序可以从标准输入(Standardinput)读取数据,向标准输出(Standardoutput)写数据,把出错信息发送到标准错误(Standarderror)。猜数字游戏主要用到标准输入,即控制台输入.用System.out.println进行控制台输出,用System.in进行控制台输入。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,则需要把它包装成一个BufferedReader实例来使用BufferedReaderinput=newBufferedReader(ﻫnewInputStreamReader(System.in));五、测试运行5.1系
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽淮南市招考村级后备干部81人模拟试卷有答案详解
- 2025年新工艺生产的过氧化异丙苯(DCP)项目申请报告
- 爱心午餐:传递温暖的社会实践演讲稿6篇
- 2025金华金开招商招才服务集团有限公司招聘5人考前自测高频考点模拟试题附答案详解(考试直接用)
- 特定领域特定领域承诺书9篇
- 2025年济柴动力有限公司春季高校毕业生招聘(10人)考前自测高频考点模拟试题(含答案详解)
- 山间清泉流淌的画面描写10篇
- 2025广西百色西林县地方志编纂服务中心公开招聘1人考前自测高频考点模拟试题及答案详解(典优)
- 山西省阳泉市2024-2025学年高一下学期期末地理试题(解析版)
- 2025-2026学年四川省巴中市南江县某中学高二上学期入学考试英语试卷(解析版)
- 2026中国十九冶集团有限公司校园招聘笔试备考试题及答案解析
- 2025年保安员考试经典例题附完整答案详解(典优)
- 网络安全宣传周网络安全知识竞答考试题及答案
- 新能源电厂培训课件
- 司法局社区矫正工作汇报
- 生物安全培训上岗证课件
- 超声医疗安全风险培训课件
- 蜜蜂科普知识教学课件
- 矿山运营成本控制-洞察及研究
- 2026三维设计一轮总复习高中化学-第17讲 卤族元素 溴、碘单质的提取
- 光伏售电合同协议书范本
评论
0/150
提交评论