zoukankan      html  css  js  c++  java
  • 结对作业

      齐鲁工业大学实验报告          成绩          

                                                                                  

    课程名称  《软件工程》      指导教师  赵培英      实验日期                 

     

    院(系)   信息学院       专业班级    计科(高职)13-3  实验地点                  

     

    学生姓名  杨磊          学号   201303014107    结对人 韩朝燕                                

     

    实验项目名称                     猜数字                              

    Git链接:https://github.com/yangleiwangximin/yanglei

    结对人博客:http://www.cnblogs.com/hanzhao/p/4507714.html

    1、设计任务与要求

    1.1 设计任务与要求

    功能要求:该程序用图形界面实现下面功能:用计算机产生一个100以内的随机数,游戏者进行猜数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜对为止。游戏结束后给出评语并计算出玩家所用的时间与所猜的次数。

    具体要求:

    (1) 输入任意一个数字。数字的要求是1—100的自然数即可。

    (2) 系统对您输入的数字进行判断。如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。系统将提示您,数字太大请您重新输入。如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。

    (3) 每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。

    (4) 欢迎界面:通过这里提供的选项(或按钮),进入游戏界面。

    (5) 游戏界面提供“获取随机数”按钮,系统获取到随机数,游戏者输入自己的猜测结果,通过按“确认”按钮完成输入。每次提示输入猜测结果时,给出猜测的准确度提示。

    (6) 按“获取随机数”按钮,继续游戏。

    (7) 游戏结束后给出评语并计算出玩家所用的时间与所猜次数。

    界面要示:用图形界面实现。

    1.2 选题目的与意义

    通过猜数游戏这个课题我可以学到文本框、标签框、按钮、布局、对话框方面的知识和应用,达到设计登陆界面、加入图像显示功能以及设计按钮的目的,让我更加的掌握和理解java面向对象语言的需求分析、系统设计,所以我选择猜数游戏这个课题。

    2、需求分析

    2.1 用户需求分析

    1.玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。

    2.对玩家输入的数字进行判断大小,如果不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入,给出提醒以便玩家进一步选择。

    3.玩家猜中时系统给出所用时间和游戏水平的判断,系统给出是否继续的提示及判断。

    4.系统根据您猜数字的次数,自动计数.

    5.直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.

    2.2 开发环境分析

    Eclipse企业级工作平台(Eclipse Enterprise Workbench ,简称Eclipse)是对Eclipse IDE的扩展,利用它我们可以在数据库和JavaEE的开发、发布,以及应用程序服务器的整合方面极大的提高工作效率。它是功能丰富的JavaEE集成开发环境,包括了完备的编码、调试、测试和发布功能,完整支持HTML, Struts, JSF, CSS, Javascript, SQL, Hibernate。

    在结构上, Eclipse的特征可以被分为7类:

      1. JavaEE模型

      2. WEB开发工具

      3. EJB开发工具

      4. 应用程序服务器的连接器

      5. JavaEE项目部署服务

      6. 数据库服务

      7. Eclipse整合帮助

       对于以上每一种功能上的类别,在Eclipse中都有相应的功能部件,并通过一系列的插件来实现它们。Eclipse结构上的这种模块化,可以让我们在不影响其他模块的情况下,对任一模块进行单独的扩展和升级。

    简单而言,Eclipse是Eclipse的插件,也是一款功能强大的JavaEE集成开发环境,支持代码编写、配置、测试以及除错。

    该程序基于JDK和Eclipse编写,选用Eclipse是界面设计所需。根据系统范围随机产生一个数字,可根据玩家选择给出不同的数字。玩家输入所猜数字时给出与真实数字的大小比较。在玩家猜中时,可给出其所用时间,并给出评价。最后,游戏的结束与继续可由玩家控制。

    3、系统设计

    3.1 系统总体设计:

    3.1.1 总体设计分析

    1.随机数的获取:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。

    2. 输入输出模块:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。

    3. 判断模块:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。

    4.自动计数模块:系统根据您猜数字的次数,自动计数.

    5.结果输出模块:直到用户猜到数字为止,提示信息是否继续猜数字,如果继续将进入下一次游戏,如果退出将退出游戏系统.

    3.1.2 程序结构

    点击“获取随机数”按钮,系统获取到一个随机数。 玩家输入一个数,如果玩家输入的数比系统给出的随机数小,系统会提示“您猜的太小了,请继续猜!”。如果玩家输入的数比系统给出的随机数大,系统提示“您猜的太大了,请继续猜!”。 如果玩家猜对了数,但是所用时间大于十秒,系统会提示“这么久才猜出来,有点笨!”,并且会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于十秒,系统会提示“恭喜您,猜对了!您真棒,智商真高!”,并且会计算出玩家所用的时间和所猜的次数。

    3.2 功能模块设计

    3.2.1 功能模块图

        游戏分为随机数的获取,输入输出模块,判断模块,自动计数模块,结果输出模块。其中输入输出模块中系统会对玩家给出的数进行判断和输出。判断模块会对玩家的水平进行判断,并计算出玩家所用的时间和次数。

     

    3.2.2 功能模块详细设计

    (1)随机数的获取

    功能描述:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。

    2) 输入输出模块

    功能描述:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。

     

    (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 随机数的获取

    num=(int)(Math.random()*100);

    String answer;

    Scanner input=new Scanner(System.in);

     

    4.2.2 输入输出

        for(i=1;i<=10;i++)

            {

    if(num2<num){

        lbshow.setText("您猜的太小了,请继续猜!");

    continue;

    }

    else if(num2>num){

    lbshow.setText("您猜的太大了,请继续猜!");

    continue;

    }

    long endTime=System.currentTimeMillis();

    long t;

    t=(endTime-startTime)/1000;

    strshow="您总共猜了"+counter+"次,您猜数字总共花了"+(endTime-startTime)/1000+"秒";

    if(t<10)

    lbshow.setText("恭喜您,猜对了!您真棒,智商真高!"+strshow);

    else if(t>10)

    lbshow.setText("这么久才猜出来,有点笨!"+strshow);

            }   

    4.2.3 判断时间

    startTime=System.currentTimeMillis();

    long endTime=System.currentTimeMillis();

    strshow="您猜数字总共花了"+(endTime-startTime)/1000+"秒";

    4.2.4 自动计数

       int geust=0;

       counter++;

    strshow="您总共猜了"+counter+"次;

    4.2.5 结果输出

       long t;

    t=(endTime-startTime)/1000;

    strshow="您总共猜了"+counter+"次,您猜数字总共花了"+(endTime-startTime)/1000+"秒";

    if(t<10)

    lbshow.setText("恭喜您,猜对了!您真棒,智商真高!"+strshow);

    else if(t>10)

    lbshow.setText("这么久才猜出来,有点笨!"+strshow);

    4.2.6 图形界面的实现

            BorderLayout bdmg=new BorderLayout();

      Button button1=new Button("获取随机数"); 

        Button button2=new Button("确定"); 

        String str=null;

        String str2=null;

    long startTime;

        int num,num2;

        int counter=0;

        myGeustNum my1=new myGeustNum();

        TextField input;

        Label lbshow=new Label("");

        Label lbshow2=new Label("");

        int i;

        String strshow;

        public void init()

         setLayout(bdmg);

            add(button1,BorderLayout.NORTH); 

                button1.addActionListener(this);

                button1.setSize(50,50);

                

         Label lb1=new Label(" 请输入");

         lb1.setSize(50,20);

         this.add(lb1,BorderLayout.WEST);

        

        

         input=new TextField(10);

         input.setSize(40,50);

         add(input,BorderLayout.CENTER);

         add(button2,BorderLayout.EAST); 

         lb1.setSize(50,20);

         button2.addActionListener(this);

         button2.setSize(50,20);

        

        

         add(lbshow,BorderLayout.SOUTH);

         setSize(450,200);

    4.3 类的实现

    首先搭建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); 

     Eclipse立即在错误语句处划出红线,把鼠标移动到红线上。

    包(Package)的概念

    Java API中包含了极其丰富、类似于Random这样由Sun预先定义好的类。不同包中可以有同名同姓的类,如果没有包的概念,就会遇到命名冲突问题。此外,包还能进行安全控制。Random类是在java.util这个包中。可以手动在源程序顶部输入import java.util.Random;语句来申明该程序将要使用java.util包中的Random类,然而有了Eclipse,就不用那么麻烦了—把光标移动到有红色波浪线的Random上,然后按下Ctrl+Shift+M,Eclipse会自动帮你完成导入的工作了,此时保存一下源代码。

    第二句语句定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。

    第二步:标准输入输出

    标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发送到标准错误(Standard error)。通过输入输出,应用程序和应用程序之间可以被串联起来使用。虽然标准输入输出是从UNIX发展出来的概念,在Windows中也广泛应用。

    猜数字游戏主要用到标准输入,更明确一些,就是控制台输入。相反,要从控制台输入,就需要用到System.in。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,我们需要把它包装成一个BufferedReader。

        第三步:使用BorderLayout对图形界面的窗口进行设计。

     

     

    5、源程序:

    Package a;

    import java.awt.Color; 

    import java.awt.Container; 

    import java.awt.FlowLayout; 

    import java.awt.event.ActionEvent; 

    import java.awt.event.ActionListener;  

    import javax.swing.Box; 

    import javax.swing.JButton; 

    import javax.swing.JFrame; 

    import javax.swing.JLabel; 

    import javax.swing.JOptionPane; 

    import javax.swing.JTextField; 

    class WindowButton extends JFrame implements ActionListener{ /**  *    

    */ 

    private static final long serialVersionUID = 1L; 

    int number; 

    JTextField inputNumber; 

    JLabel feedBack; 

    JButton buttonGetNumber,buttonEnter; 

    WindowButton(String s){ super("猜数字小游戏"); 

    buttonGetNumber=new JButton("得到一个随机数"); 

    feedBack=new JLabel("无反馈信息",JLabel.CENTER); 

    feedBack.setBackground(Color.green); 

    inputNumber=new JTextField("0",5); 

    buttonEnter=new JButton("确定"); 

    buttonEnter.addActionListener(this); 

    buttonGetNumber.addActionListener(this); 

    buttonGetNumber.addActionListener(this); 

    Box boxH1=Box.createHorizontalBox(); 

    boxH1.add(new JLabel("获取1-100之间的随机数:")); 

    boxH1.add(buttonGetNumber); 

    Box boxH2=Box.createHorizontalBox(); 

    boxH2.add(new JLabel("输入您的猜测: "));

    boxH2.add(inputNumber); 

    Box boxH3=Box.createHorizontalBox(); 

    boxH3.add(new JLabel("单击确定按钮: "));

    boxH3.add(buttonEnter); 

    Box boxH4=Box.createHorizontalBox(); 

    boxH4.add(new JLabel("反馈信息: ")); 

    boxH4.add(feedBack); 

    Box baseBox=Box.createVerticalBox(); 

    baseBox.add(boxH1); 

    baseBox.add(boxH2); 

    baseBox.add(boxH3); 

    baseBox.add(boxH4); 

    Container con=getContentPane(); 

    con.setLayout(new FlowLayout()); 

    con.add(baseBox); 

    con.validate(); 

    setBounds(120,125,279,200); 

    setVisible(true); 

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    setBounds(100,100,150,150); 

    setVisible(true); 

    validate(); }  

    public void actionPerformed(ActionEvent e){ 

    if(e.getSource()==buttonGetNumber){ 

    number=(int)(Math.random()*100)+1; } 

    else if(e.getSource()==buttonEnter){

    int guess=0; 

    try{ 

    guess=Integer.parseInt(inputNumber.getText()); 

    if(guess==number){ 

    JOptionPane.showMessageDialog(this,"猜对了");  } 

    else if(guess>number){ 

    JOptionPane.showMessageDialog(this,"猜大了");  

    inputNumber.setText(null); } 

    else if(guess<number){ 

    JOptionPane.showMessageDialog(this,"猜小了");  

    inputNumber.setText(null); } } 

    catch(NumberFormatException event){ 

    JOptionPane.showMessageDialog(this,"请输入数字字符");  } } 

    } } 

    public class 猜数字游戏 

    public static void main(String args[]){

    new WindowButton("猜数字小游戏"); } 

    }

    package b;

    import java.util.Date;

    import java.util.Scanner;

    public class test2 {

    public static void main(String[] args) {

    //给定生成随机数的范围1~1000

    Scanner input = new Scanner(System.in);

    int num = (int) (Math.random() * 100) + 1;

    System.out.println("系统已经生成数字,猜猜看这个数字是多少?(如果实在猜不出来,就输入'投降')");

    Date d1 = new Date();

    int gNum = 0;

    int count = 0;

    boolean isHandup = false;

    do {

    count++;

    System.out.print("" + count + "次:");

    try {

    gNum = input.nextInt();

    if (gNum < num) {

    System.out.println("猜小了");

    }

    if (gNum > num) {

    System.out.println("猜大了");

    }

    } catch (Exception ex) {

    if (input.next().trim().equals("投降")) {

    isHandup = true;

    break;

    }

    System.out.println("输入数字格式不正确,请重新输入。");

    count--;

    continue;

    }

    } while (gNum != num);

    Date d2 = new Date();

    int time = (int) ((d2.getTime() - d1.getTime()) / 1000 + 0.5);

    if (isHandup) {

    System.out.println("悲剧,你投降了!共用了" + time + ",猜了" + (count-1)

    + "次。");

    isHandup=false;

    } else {

    if (count * time < 10) {

    System.out.println("太棒了!你运气真好!共用了" + time + ",猜了" + count

    + "次。");

    } else if (count * time < 50) {

    System.out.println("你真聪明!共用了" + time + ",猜了" + count + "次。");

    } else if (count * time < 1000) {

    System.out.println("真棒!你竟然猜出来了!共用了" + time + ",猜了" + count

    + "次。");

    } else {

    System.out.println("终于猜对了,你也太笨 了吧。。。共用了" + time + ",猜了" + count

    + "次。");

    }

    }

    }

    }

     

     

    6、测试运行

    6.1 系统测试方案

    1.点击运行程序后,显示出图形界面。

    2.点击“获取随机数”按钮,系统获取到一个随机数。

    3 .玩家输入一个数,点击“确定”按钮。如果玩家输入的数比系统给出的随机数小,系统会提示“您猜的太小了,请继续猜!”。如果玩家输入的数比系统给出的随机数大,系统提示“您猜的太大了,请继续猜!”。

    4 .如果玩家猜对了数,但是所用时间大于十秒,系统会提示“这么久才猜出来,有点笨!”,并且会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于十秒,系统会提示“恭喜您,猜对了!您真棒,智商真高!”,并且会计算出玩家所用的时间和所猜的次数。

    5. 如果玩家想重新再玩一次,点击“获取随机数”按钮即可继续玩下一轮游戏。

    6.2 运行结果分析

    开始运行程序时图形界面的显示

    图7 图形显示界面

    玩家输入一个数“10”后,点击“确定”,系统提示“您猜的太小了”。玩家再次输入一个数“70”后,点击“确定”,系统提示“您猜的太大了”。 玩家再次输入一个数“32”,点击“确定”,系统提示“猜对了”。

     

     

    6.3结论

          第一次结对做作业,一起讨论,一起合作感觉真的很开心,同时还学到了很多知识,认识了很多朋友,作业也进一步完善,体会到了合作的乐趣。

  • 相关阅读:
    [CF538F]A Heap of Heaps(主席树)
    [BZOJ1901][luogu2617]Dynamic Rankings(树状数组+主席树)
    [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)
    [BZOJ2588]Count on a tree(LCA+主席树)
    [BZOJ2733][HNOI2012] 永无乡(线段树合并)
    [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 (Treap+单调队列)
    【贪心】POJ2376-Cleaning Shifts
    【穷竭】POJ3187-Backward Digit Sums
    【枚举+贪心】POJ2718-Smallest Difference
    【BFS】POJ3669-Meteor Shower
  • 原文地址:https://www.cnblogs.com/yangdaxia/p/4507586.html
Copyright © 2011-2022 走看看