Java个人设计

目    录

1 选题......................................................................................................1

2 系统需求分析........................................................................................2

2.1 系统可行性分析.................................................................................2

2.2 系统需求分析.....................................................................................3

2.3 项目进度安排.....................................................................................4

3 系统设计...............................................................................................5

3.1 系统设计............................................................................................5

3.2 文件设计............................................................................................6

4 系统实现...............................................................................................7

4.1代码实现.............................................................................................8

4.2运行界面实现.....................................................................................17

5 结论和心得.......................................................................................... 22

 

 

1 选题

选题

算术运算测试

题目要求

功能基本要求:实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数,提示要不要继续玩下一局,结束后把分数保存起来。说明:用数字1和2来控制加减法;每道题10分总共一百分;把分数保存到chengji1.txt中,结束游戏后,成绩清空。

能力要求:1.沟通表达能力;2:资料搜集能力;3. 自主学习能力;4.时间规划能力

5.独立完成项目能力;6.文档撰写能力;7.面向对象编程思维和软件工程思想。

使用Java知识

Java基本输入输出、运算符、随机数、while循环、for循环、continue、break、数据类型转换、选择分支、IO流、异常。

选题二

猜数游戏

题目要求

功能基本要求:计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到;猜对了可以点获取随机数继续玩下一局,点结束按钮可以显示次数和分数,最后给出评语。说明:次数大于8默认为60分,7-8次--70分  5-6次--80分  3-4次--90分  1-2次-100分;次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害。

能力要求:1.沟通表达能力;2:资料搜集能力;3. 自主学习能力;4.时间规划能力

5.独立完成项目能力;6.文档撰写能力;7.面向对象编程思维和软件工程思想。

使用Java知识

GUI等基本知识、选择分支、switch选择结构、随机数、类型转换等。

 

 

2 系统需求分析

2.1 系统可行性分析

一、算数运算测试

   1.技术可行性

本次程序运用的是Eclipse这个软件,采用的Java语言,Java面向对象,所以技术上是可行的。

2经济可行性

因为本次程序使用的Eclipse软件是免费的,在这个软件上就能满足我们的需求,我们不需要额外的开销,所以经济上也是可行的。

3.操作可行性

本次程序只需要用户有这个软件并配置好了环境变量就可以使用,操作简单便捷,符合大部用户的使用习惯。因此在操作上是可行的。

二 、猜数游戏

1技术可行性

. 本次程序运用的是Eclipse这个软件中的GUI插件技术,采用的Java语言,Java面向对象,GUI基础语言,所以技术上是可行的。

2.经济可行性

因为本次程序使用的Eclipse软件是免费的,在这个软件上就能满足我们的需求,我们不需要额外的开销,所以经济上也是可行的。

3.操作可行性

本次程序只需要用户有这个软件并配置好了环境变量并且安装WindowBuilder插件就可以使用,操作简单便捷,符合大部用户的使用习惯。因此在操作上是可行的。

2.2 系统需求分析

一、算数运算测试

1.需求分析

实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断做题是否正确,最后计算分数,提示要不要继续玩下一局,结束后把分数保存起来。说明:用数字1和2来控制加减法;每道题10分总共一百分;把分数保存到chengji1.txt中,结束游戏后,成绩清空。

2.功能模块图

 

 

 

图2.2-1算术测试运算模块图

二、猜数游戏

1.需求分析

计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到;猜对了可以点获取随机数继续玩下一局,点结束按钮可以显示次数和分数,最后给出评语。说明:次数大于8为默认为60分,7-8次--70分  5-6次--80分  3-4次--90分  1-2次-100分;次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害。

2.功能模块图

图2.2-2猜数游戏模块图

2.3 进度安排

阶段一进度安排如表2.3-1所示。

表2.3-1 进度安排表

阶段

持续时间

阶段描述

输出

构思阶段

3小时

需求分析

需求说明,功能模块图

设计阶段

3小时

系统设计

设计说明-可以画流程图;

实现阶段

2天

编写代码

项目工程源代码

1天

系统测试

进行黑盒测试(功能测试)-测试说明

运行阶段

1天

部署、运行

系统使用说明、运维报告、录制视频

 

3 系统设计

3.1 系统设计

一、算术测试运算

根据系统的实际功能需求分析,对系统功能部分进行了设计。

随机测试题目生成模块:先随机产生两个1-100之间的数,判断产生的随机数在不在1-100之间,不在的话退出本次循环继续下一次的。在的话再随机生成1、2两个数字,1代表加法,2代表减法。

题目测试模块:输入得数,判断是不是1-100之间的数字并判断是否正确,正确继续下一道题,错误,告诉正确答案继续下一道题。

成绩记录模块:每道题十分,一共十道题,总共100分。

保存成绩模块:把总分保存到系统中默认的地址chengji1.txt中。

退出功能模块:系统询问要不要继续,y代表继续,n代表不继续。n的话退出游戏,y的话循环做游戏。如果输入的不是这两个字母,提醒用户让他重新输入。

 

二、猜数游戏

随机数生成模块:运行过后,弹出GUI图形界面,点获取随机数按钮,系统随机生成一个数。

判断随机数与输入模块:”输入”标签后的文本框里填写数字,按确定按钮,判断文本框的值与猜的数是否相等,并给出提示,继续猜,直到猜对为止。

次数记录模块:每猜一次记录一次,记录总次数。

成绩记录模块:次数大于8为默认为60分,7-8次--70分  5-6次--80分  3-4次--90分  1-2次-100分.

评语记录模块:次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害。猜对给出标签提示。

退出功能模块:继续按“获取随机数”按钮,所有的提示清空,重复上面步骤。按”结束”按钮给出用户所猜的次数和所得的分数并给出评语,然后直接关闭窗口即可。

3.2 文件设计

一、算术运算测试

为了让用户更清楚的看到自己的成绩,创建了chengji1.txt保存用户的成绩。

  

 

图3.2-1文件设计

 

4 系统实现

4.1代码实现

一、算数运算测试

package hu;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Scanner;

/*功能基本要求:实现十道100以内加减法数学题,能根据题目计算出答案,与输入答案对比,

 * 判断做题是否正确,最后计算分数,提示要不要继续玩下一局,结束后把分数保存起来。

 * 说明:用数字1和2来控制加减法;每道题10分,总共一百分;把分数保存到chengji1.txt中

 * 结束游戏后,成绩清空

 */

public class JiaJianFa {

      public static void main(String[] args) {

             File file=null;//创建文件

                 int j=1;

             boolean f=false;//设置不能追加,文件覆盖掉原先的   

                 //(缓冲输出流) BufferedWriter bw=new BufferedWriter(new Filewriter(file),f);Filewriter是字符流

       //给循环设标签

                 loop:

             while(true) {

             System.out.println("*********欢迎来到算数游戏(100以内加减法)*************");

                 int count=0;//分数

                

                 Scanner input=new Scanner(System.in);

                 //循环10次

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

                                  boolean flag=false;//做对了为true,没做对false   

                                  //随机生成两个数

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

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

                                  //随机生成加减法

                                  int c=(int)((Math.random()*2)+1);//1是+法,2是-法[0,2)[1,3)

                          

                                  //不在1-100范围内

                                  if(a+b>100||a-b<0) {

                                         i=i-1;

                                         continue;//跳出本次循环继续做

                                  }

                                  else {

                                         System.out.println("第"+i+"道算式:");

                   

                    //c为1时做加法

                    if(c==1) {

                           System.out.println("输出:"+a+"+"+b+"=?");

                          

                           while(true) {

                                  System.out.print("得数:");

                                  String    n=input.next();

                                  //匹配一个或多个数字并判断用户输入的是不是1-100之间的数

                                  if(!(n.matches("[0-9]+"))||(Integer.valueOf(n)>100||Integer.valueOf(n)<0)) {//String类型转换int类型

                                         System.out.println("您输入有误,请重新输入!请输入1-100之间的数字!");

                           }     else{

                                  //String类型转换为int类型

                                  if(Integer.parseInt(n)==(a+b)) {

                                  System.out.println("您算对了!");

                                  flag=true;

                                 

                           }

                          

                                  else {

                                         System.out.println("您算错了!正确答案是:"+(a+b));

                                        

                    }

                          

                           break ;//结束最近的循环

                                  }

                                 

                           }

                    }    

                   

                    //c为2时做减法

             else if(c==2){

                           System.out.println("输出:"+a+"-"+b+"=?");

                   

                           while(true) {

                                  System.out.print("得数:");

                           String    n1=input.next();

                           //匹配一个或多个数字

                           if(!(n1.matches("[0-9]+"))||(Integer.valueOf(n1)>100||Integer.valueOf(n1)<0)) {

                                  System.out.println("您输入有误,请重新输入!请输入1-100之间的数字!");

                    }     else{

                           //String类型转换为int类型

                           if(Integer.parseInt(n1)==(a-b)) {

                           System.out.println("您算对了!");

                           flag=true;

                          

                    }

                   

                           else {

                                  System.out.println("您算错了!正确答案是:"+(a-b));

                                 

             }

                   

                    break ;//结束循环

                           }

                          

                    }

             }    

                    }

                    //做对了得分。每道10分,满分100分

             if(flag==true) {

                    count=count+10;

             }

            

             }

                                 

             System.out.println("总分是:"+count);

            

             //用字符流把成绩保存起来

            

             BufferedWriter bw=null;//缓冲流效率高,字符流保存文字不出现乱码

            

                           try {

                                  file=new File("chengji1.txt");

                                   bw=new BufferedWriter(new FileWriter(file,f));//f初始值设置不能追加,文件覆盖掉原先的

                                  bw.write("第"+j+"次成绩:"+count+"\n");

                                  j++;

                          

                                  System.out.println("成绩保存成功!");

                                 

                           }

                           catch (IOException e) {

                                  e.printStackTrace();

                           }

                          

                           finally {

                                  try {

                                         bw.flush();//刷新缓冲区

                                         bw.close();

                                        

                                        

                                  } catch (IOException e) {

                                         e.printStackTrace();

                                  }

                          

                           }

                   

             System.out.println("您是否要继续呢?(y是的/n不是)");

             String answer=input.next();

     

             while(true) {

                    if(answer.equals("y")) {

                           f=true;//继续玩的话设置可追加保留上面的成绩

                           break ;

                   

             }else if(answer.equals("n")) {

                    System.out.println("***********游戏结束**************");

                    break loop;//结束标签的循环

            

                   

             }else {

                    System.out.println("输入有误!请重新输入!");

                    answer=input.next();

                   

             }

                    }

            

            

             }

            

      }

}

二、猜数游戏

package hu1;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

 

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JPanel;

import javax.swing.JTextField;

/*功能基本要求:计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,

继续猜,直至猜到,猜对了可以点获取随机数继续玩下一局,点结束按钮可以显示次数和分数,最后给出评语。

说明:次数大于8为默认为60分,7-8次--70分  5-6次--80分  3-4次--90分  1-2次-100分;

次数大于8,给出评语您需要继续努力;次数小于等于8,给出评语您真厉害*/

public class CaiShuNameGUI extends JFrame {

      JPanel jp1,jp2,jp3,jp4;//面板

      JButton jb1,jb2,jb3;//按钮

      JTextField jtf;//文本框

      JLabel jL1,jL2,jL3,jL4,jL5;//标签

      int random;//随机数

      int count=1;//次数

      int score;//分数

      //初始化界面

      public CaiShuNameGUI() {

             this.setTitle("欢迎来到猜数游戏!");//设置标题

             this.setBounds(400,200,400,300);//设置位置大小

             this.setLayout(new GridLayout(4,1));//设置布局4行1列

              jp1=new JPanel();

              jp2=new JPanel();

              jp3=new JPanel();

              jp4=new JPanel();

              jL1=new JLabel("输入");

            

              jL2=new JLabel();

              jL3=new JLabel();

              jL4=new JLabel();

              jL5=new JLabel();

              jtf=new JTextField(20);

              jb1=new JButton("获取随机数");

              jb2=new JButton("确定");

              jb3=new JButton("结束");

     

            

             //将组件添加到面板上

             jp1.add(jL1);

             jp1.add(jtf);

            

             jp2.add(jb1);

             jp2.add(jb2);

             jp2.add(jb3);

            

            

             jp3.add(jL2);

            

             jp4.add(jL3);

             jp4.add(jL4);

             jp4.add(jL5);

            

             //将面板添加到窗体上

             this.add(jp1);

             this.add(jp2);

             this.add(jp3);

             this.add(jp4);

            

     

             //设置窗体可见

             this.setVisible(true);

             //按钮jb1设置监听事件

             jb1.addActionListener(new ActionListener() {

                   

                    @Override

                    public void actionPerformed(ActionEvent e) {

                           //将jL2,jL3,JL4,jL5设为空

                           jL2.setText(null);

                           jL3.setText(null);

                           jL4.setText(null);

                           jL5.setText(null);

                           count=0;//次数清零

                           random=(int)(Math.random()*100+1);//0-100之间的数

                   

                    }

             });

             //按钮jb2设置监听事件

             jb2.addActionListener(new ActionListener() {

                   

                    @Override

                    public void actionPerformed(ActionEvent e) {

                           String  s=jtf.getText().trim();//将文本框里的值取出来

                           int n=Integer.parseInt(s);//将String类型转换为int型

                           //再依次比较

                           if(n>random) {

                                  jL2.setText("猜大了");

                           }else if(n<random) {

                                  jL2.setText("猜小了");

                           }else {

                                  jL2.setText("猜对了,点击结束查看次数分数和评语;点击获取随机数,继续游戏");

                           }

                           count++;

                    }

                   

             });

             //按钮jb3设置监听事件

             jb3.addActionListener(new ActionListener() {

                   

                    @Override

                    public void actionPerformed(ActionEvent e) {

                           jL3.setText("您一共猜了"+count+"次");

                           //根据次数写出成绩

                           switch(count) {

                           case 1:

                           case 2:

                                  score=100;

                                  break;

                   

                           case 3:

                           case 4:

                                  score=90;

                                  break;

                                 

                           case 5:

                           case 6:

                                  score=80;

                                  break;

                           case 7:

                           case 8:

                                  score=70;

                                  break;

                                  default:

                                         score=60;//否则设为默认值60分

                                  }

                           //给标签设置字

                           jL4.setText("您的成绩是:"+score+"分");

                           if(count>8) {

                                  jL5.setText("您需要继续努力!");

                           }else {

                                  jL5.setText("您真厉害!");

                           }

                          

                          

                    }

             });

                   

            

      }

            

      public static void main(String[] args) {

             CaiShuNameGUI c=new CaiShuNameGUI();

      }

     

            

             }

 

4.2运行界面实现  

一、算数运算测试

 

 

  

 

 

 

图4.2-1算术运算测试运行图

 图4.2-2用户成绩表

二、猜数游戏

 

 

 

 

 

 

                        图4-2-3猜数游戏测试运行图

5 结论和心得

心得:通过这次的学习真的让自己成长的不少,学会了很多新知识,复习了很多旧知识。虽然过程非常的艰辛,期间遇到了很多难题,但是通过老师的指导以及自己上网百度,翻阅资料顺利的做了下来。我相信只要有付出就会有收获。今后我一定会继续学习,丰富自己的知识。

posted @ 2020-06-23 22:53  hyy1  阅读(130)  评论(1)    收藏  举报