《面向对象程序设计》课程设计报告题目: 下拉列表运算器设计 专业: xxxxx 班级: xxx 姓名: xx 指导教师: xx 成绩:xxxxxx 年 x 月xx 日xx目录1 设计内容及要求 (1)1.1 课程设计目的 (1)1.2 设计项目名称 (1)1.3 类的结构分布 (1)2 概要设计 (2)2.1系统总体功能 (2)2.2 游戏流程概述 (2)3 设计过程或程序代码 (3)3.1 猜数游戏 (3)3.2功能模块详细设计 (4)3.3 类的设计 (5)4 程序代码调试 (6)4.1程序流程 (6)4.2关键算法与技术实现 (6)4.2.1 随机数的获取 (6)4.2.2 输入输出 (6)4.2.3 判断时间 (7)4.2.4 自动计数 (7)4.2.5 结果输出 (8)4.2.6 图形界面的实现 (8)4.3 类的实现 (9)5设计结果与分析 (10)5.1登录界面 (10)5.2游戏界面 (10)5.3猜数举例 (11)参考文献 (12)1 设计内容及要求功能要求:该程序用图形界面实现下面功能:用计算机产生一个100以内的随机数,游戏者进行猜数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜对为止。
游戏结束后计算出玩家所用的时间与所猜的次数。
1.1 课程设计目的通过设计一个《标准化考试系统设计》,进一步熟悉Java中的概念、基本知识和技能利用所学的基本知识和技能解决简单的面向对象的程序设计问题。
了解系统开发的需求分析、层次设计、模块分解、编码测试、模块组装与整体调试的全过程,加深对Java的理解与eclipse环境的使用:逐步熟悉程序设计的方法,并养成良好的编程习惯。
1.2 设计项目名称猜数游戏设计1.3 类的结构分布图 1 类的分布2 概要设计在设计标准考试设计时,编写了2个Java源文件:GuessShu.java,Dengru.java. 游戏分为随机数的获取,输入输出模块,判断模块,自动计数模块,结果输出模块。
其中输入输出模块中系统会对玩家给出的数进行判断和输出。
判断模块会对玩家的水平进行判断,并计算出玩家所用的时间和次数。
2.1系统总体功能2.2 游戏流程概述图 3 游戏流程3 设计过程或程序代码3.1 猜数游戏1.随机数的获取:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。
2. 输入输出模块:对玩家输入的数字进行判断和提示。
如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。
如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。
如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。
3. 判断模块:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。
4.自动计数模块:系统根据您猜数字的次数,自动计数.5.结果输出模块:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.3.2功能模块详细设计(1)随机数的获取功能描述:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。
(2)输入输出模块功能描述:对玩家输入的数字进行判断和提示。
如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。
如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。
如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。
图4 输入输出模块图(3) 判断模块 功能描述:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。
(4) 自动计数模块功能描述:系统根据您猜数字的次数,自动计数.图5 自动计数模块图(5) 结果输出模块功能描述:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.3.3 类的设计从用户的角度看,Java 源程序中的类分为两种:系统定义的类:即 Java 类库,它是系统定义好的类。
Java 语言由语法规则和类库两部分组成,语法规则确定 Java 程序的书写规范;类库则提供了 Java 程序与运行它的系统软件(Java虚拟机)之间的接口。
用户自定义类:系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。
在 Java 程序中,用户自定义类的一般格式如下: class 类名 数据成员 成员方法类的结构是由类说明和类体两部分组成的。
类的说明部分由关键字 class 与类名组成,类名的命名遵循 Java 标识符的定义规则。
类体是类声明中花括号所包括的全部内容,它又是由数据成员(属性)和成员方法(方法)两部分组成。
数据成员描述对象的属性;成员方法则刻画对象的行为或动作,每一个成员方法确定一个功能或操作。
首先搭建Java 程序框架。
打开Eclipse ,新建名为GuessNumberGame 的项目,然后新建名为GuessNumber的Java类。
GuessNumber加上合适的javadoc。
第一步:随机数的产生我们可以借助Java API提供的Random类来产生一个随机数。
首先在main函数中加入以下三行代码:// 新建一个随机数产生器,然后生成一个1到100之间的整数。
num=(int)(Math.random()*100);String answer;Scanner input=new Scanner(System.in);第二步:标准输入输出标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。
应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发送到标准错误(Standard error)。
通过输入输出,应用程序和应用程序之间可以被串联起来使用。
虽然标准输入输出是从UNIX发展出来的概念,在Windows中也广泛应用。
猜数字游戏主要用到标准输入,更明确一些,就是控制台输入。
相反,要从控制台输入,就需要用到System.in。
它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,我们需要把它包装成一个BufferedReader。
第三步:使用BorderLayout对图形界面的窗口进行设计。
4 程序代码调试4.1程序流程点击“获取随机数”按钮,系统获取到一个随机数。
玩家输入一个数,如果玩家输入的数比系统给出的随机数小,系统会提示“猜小了”。
如果玩家输入的数比系统给出的随机数大,系统提示“猜大了”。
如果玩家猜对了数,会计算出玩家所用的时间和所猜的次数。
如果玩家猜对了数。
4.2关键算法与技术实现4.2.1 随机数的获取number = (int) (Math.random() * 10) + 1;4.2.2 输入输出public void actionPerformed(ActionEvent e) {if (e.getSource() == buttonGetNumber) {number = (int) (Math.random() * 10) + 1;} else if (e.getSource() == buttonEnter) {int guess = 0;try {guess = Integer.parseInt(inputNumber.getText());if (guess == number) {JOptionPane.showMessageDialog(this, "猜对了");dui++;} else if (guess > number) {JOptionPane.showMessageDialog(this, "猜大了");da++;inputNumber.setText(null);} else if (guess < number) {JOptionPane.showMessageDialog(this, "猜小了");xiao++;inputNumber.setText(null);}} catch (NumberFormatException event) {JOptionPane.showMessageDialog(this, "请输入数字字符");}}else if(e.getSource()==result){time2=System.currentTimeMillis();4.2.3 判断时间time2=System.currentTimeMillis();JOptionPane.showMessageDialog(this, "您此次操作花费时间为"+(time2-time1)+"ms"+"\n"+"猜对有:"+dui+"次"+"\n"+"猜大有:"+da+"次"+"\n"+"猜小有:"+xiao+"\n");};4.2.4 自动计数if (guess == number) {JOptionPane.showMessageDialog(this, "猜对了");dui++;} else if (guess > number) {JOptionPane.showMessageDialog(this, "猜大了");da++;inputNumber.setText(null);} else if (guess < number) {JOptionPane.showMessageDialog(this, "猜小了");xiao++;inputNumber.setText(null)4.2.5 结果输出JOptionPane.showMessageDialog(this, "您此次操作花费时间为"+(time2-time1)+"ms"+"\n"+"猜对有:"+dui+"次"+"\n"+"猜大有:"+da+"次"+"\n"+"猜小有:"+xiao+"\n");4.2.6 图形界面的实现JPanel jp1,jp2,jp3;JTextField inputNumber;JLabel jl1,jl2;JButton buttonGetNumber, buttonEnter,exit,result;long time1,time2;int da=0,xiao=0,dui=0;public GuessShu() {time1=System.currentTimeMillis();jp1=new JPanel();jl1=new JLabel("产生随机数");buttonGetNumber = new JButton("随机数");jp1.add(jl1);jp1.add(buttonGetNumber);jp2=new JPanel();jl2=new JLabel("输入你猜的数");inputNumber = new JTextField("0", 5);jp2.add(jl2);jp2.add(inputNumber);jp3=new JPanel();buttonEnter = new JButton("确定");result=new JButton("结果");exit=new JButton("结束");exit.addActionListener(this);jp3.add(buttonEnter);jp3.add(result);jp3.add(exit);result.addActionListener(this);buttonEnter.addActionListener(this);buttonGetNumber.addActionListener(this);this.setLayout(new GridLayout(3, 1)); // 3, 1this.getContentPane().add(jp1);this.getContentPane().add(jp2);this.getContentPane().add(jp3);this.setResizable(false);this.setTitle("沈悦:猜数字游戏");this.setBounds(100, 100, 280, 200);this.setVisible(true);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);4.3 类的实现首先搭建Java程序框架。