阶段一报告

 

目    录

1 选题... 2

2 系统需求分析... 3

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

2.2 系统需求分析... 3

2.3 进度安排... 5

3 系统设计... 6

3.1 系统设计... 6

3.2 数据库设计... 6

4 系统实现... 7

4.1 代码实现... 7

4.2 运行界面实现... 15

5 结论和心得... 19

 

 

1 选题

选题一

算数运算测试

题目要求

功能基本要求:实现100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断是否正确,如错误将显示正确答案,同时判断是否继续玩,每题10分,最后计算分数。说明:要求数随机,运算符也随机,可以多次游戏,做对一题加10分,直到用户不想玩。

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

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

使用Java知识

 

Java基本输入输出、运算符、随机数、while循环、for循环、continue、break、数据类型转换、选择分支、异常、函数调用、GUI图形界面。

选题二

猜数游戏

题目要求

功能基本要求:计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到;给出所用的时间和评语,保留用户最好的成绩存进数据库,输出排行榜。说明:猜到了也可以继续玩,直到用户不想玩(最好成绩指的是所用时间最短)。

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

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

使用Java知识

 

Java基本输入输出、随机数、while循环、break、选择分支、随机数、类型转换、函数调用、数据库等

 

 

 

 

 

 

 


2 系统需求分析

2.1 系统可行性分析

一、算数运算测试

1.技术可行性

该程序使用Eclipse编译器,采用的Java语言,Java面向对象,GUI图形界面,技术上是可行的。

2经济可行性

该程序使用Eclipse编译器是免费的,该软件能满足设计的基本的需求,不需要额外的开销,经济上是可行的。

3.操作可行性

该程序只需用户安装Eclipse编译器并配置好环境变量就可以使用,GUI也在Eclipse编译器上安装了WindowBuilder插件,操作简单便捷。符合大部用户的使用习惯。操作上是可行的。

二 、猜数游戏

1技术可行性

该程序使用Eclipse编译器,采用的Java语言,Java面向对象,GUI图形界面与JDBC数据库,技术上是可行的。

2.经济可行性

该程序使用Eclipse编译器是免费的,该软件能满足设计的基本的需求,不需要额外的开销,经济上是可行的。

3.操作可行性

该程序只需用户安装Eclipse编译器并配置好环境变量就可以使用,JDBC数据库也安装了开源软件,操作简单便捷。符合大部用户的使用习惯。操作上是可行的。

2.2 系统需求分析

一、算数运算测试

1.需求分析

实现100以内加减法数学题,能根据题目计算出答案,与输入答案对比,判断是否正确,如错误将显示正确答案,同时判断是否继续玩,每题10分,最后计算分数。说明:要求数随机,运算符也随机,可以多次游戏,做对一题加10分,直到用户不想玩。

2.功能模块图

 

 

图2-1 算数运算测试功能模块图

二、猜数游戏

1.需求分析

计算机产生随机数(1-100之间),猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到;给出所用的时间和评语,保留用户最好的成绩存进数据库,输出排行榜。说明:猜到了也可以继续玩,直到用户不想玩(最好成绩指的是所用时间最短)。

 
   


2.功能模块图

 

图2-2 猜数游戏功能模块图

 

2.3 进度安排

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

表2-1 进度安排表

阶段

持续时间

阶段描述

输出

构思阶段

3小时

需求分析

需求说明,功能模块图

设计阶段

3小时

系统设计

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

实现阶段

1天

编写代码

项目工程源代码

1天

系统测试

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

运行阶段

1天

部署、运行

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

 

 

 


3 系统设计

3.1 系统设计

一、算术测试运算

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

GUI图形界面:首先需有一下需要设计的地方:

随机题目生成模块:随机生成了0~3的运算符、随机生成两个0~100之间的数,通过Switch来决定生成什么运算符的算式。

监听提交按钮:点击“提交”按钮,获取到输入的值,强转为Integer类型与正确答案比较,如正确加10分,如错误,显示正确答案。

监听y->继续游戏:点击“y”按钮,需清空上一题目及相关信息,重新调用随机题目生成模块。

监听n->退出游戏:点击“n”按钮,需清空所有信息,并提示退出游戏与分数的信息。

二、猜数游戏

随机数生成模块:使用Random方法产生随机数,同时键盘输入猜数并比较大小,提示语句大了还是小了。

时间记录模块:设置初始计时时间与程序结束时间做差求出程序运行时间。

成绩记录模块:应用JDBC数据库将程序写入。

评语记录模块:根据所用时间给出评语。

成绩排行榜模块:通过升序输出数据库中的内容,并进行重复数据的删除,保留最好成绩。

退出功能模块:设置用户判断模块,用户根据自身是否要继续游戏而决定。

3.2 数据库设计

一、猜数游戏

图3-1数据库截图

 
   


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4 系统实现

4.1 代码实现

一、算数运算测试

/*算数运算测试,根据题目写出答案,然后和答案比对判断是否正确,最后计算分数

(要求数随机,运算符也随机,可以多次游戏,直到用户不想玩)*/

import java.awt.EventQueue;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.util.Random;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.border.EmptyBorder;

import javax.swing.JLabel;

import javax.swing.JTextField;

import javax.swing.JButton;

import java.awt.Font;

 

public class CountTest extends JFrame implements ActionListener{

        private static final long serialVersionUID = 1L;

        private JPanel contentPane;//定义窗体

        private JTextField textField;//定义文本输入框

        JLabel label=new JLabel("题目:");//输出题目

        JLabel label_题目显示=new JLabel();//输出算式

        JButton button=new JButton("提交");//"提交"按钮

        JButton btnNewButton = new JButton("y");//y继续按钮

        JButton btnNewButton_1 = new JButton("n");//n退出按钮

        JLabel lblNewLabel = new JLabel();//输出正确或者错误

        JLabel lblNewLabel_1 = new JLabel();//输出是否继续提示语句

        JLabel lblNewLabel_2 = new JLabel();//输出得分

        int sum;//正确结果

        int op; //运算符

        int num1;//数1

        int num2;//数2

        int score;//分数

       

        /**

         * Launch the application.

         */

        public static void main(String[] args) {

                 EventQueue.invokeLater(new Runnable() {

                         public void run() {

                                  try {

                                          CountTest frame = new CountTest();

                                          frame.setVisible(true);

                                  } catch (Exception e) {

                                          e.printStackTrace();

                                  }

                         }

                 });

        }

 

        /**

         * Create the frame.

         */

        public CountTest() {

                 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                 setBounds(100, 100, 450, 300);

                 contentPane = new JPanel();

                 contentPane.setBorder(new EmptyBorder(5, 5, 50, 50));

                 setContentPane(contentPane);

                 contentPane.setLayout(null);

                 label.setFont(new Font("宋体", Font.PLAIN, 19));

                

 

                 label.setBounds(72, 61, 53, 40);

                 contentPane.add(label);

                 label_题目显示.setFont(new Font("宋8", Font.PLAIN, 12));

                

 

                 label_题目显示.setBounds(134, 61, 150, 40);

                 contentPane.add(label_题目显示);

                

                 textField = new JTextField();

                 textField.setBounds(342, 71, 66, 21);

                 contentPane.add(textField);

                 textField.setColumns(10);

                 btnNewButton.setFont(new Font("宋体", Font.PLAIN, 14));

                

                 btnNewButton.addActionListener(this);//监听y

                 button.setFont(new Font("宋体", Font.PLAIN, 14));

                

 

                 button.addActionListener(this);//监听提交

                 button.setBounds(179, 218, 93, 23);

                 contentPane.add(button);

                

                 btnNewButton.setBounds(72, 218, 97, 23);

                 contentPane.add(btnNewButton);

                 btnNewButton_1.setFont(new Font("宋体", Font.PLAIN, 14));

                

                 btnNewButton_1.addActionListener(this);//监听n

                 btnNewButton_1.setBounds(282, 219, 97, 23);

                 contentPane.add(btnNewButton_1);

                 lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 12));

                

                 lblNewLabel.setBounds(72, 111, 361, 15);

                 contentPane.add(lblNewLabel);

                

                 lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 12));

                 lblNewLabel_1.setBounds(72, 153, 371, 15);

                 contentPane.add(lblNewLabel_1);

                

                 lblNewLabel_2.setFont(new Font("宋体", Font.PLAIN, 12));

                 lblNewLabel_2.setBounds(72, 193, 384, 15);

                

                 contentPane.add(lblNewLabel_2);

                

                 random();//初始化后就有题目

        }

 

        @Override

        public void actionPerformed(ActionEvent arg0) {

                 if(arg0.getSource()==button) {

                         int a = Integer.parseInt(textField.getText());

                         if(Integer.valueOf(a).equals(sum)) {

                                  score=score+10;

                                  lblNewLabel.setText("回答正确!");

                         }else {

                                  lblNewLabel.setText("回答错误!正确答案是:"+sum);

                         }

                         lblNewLabel_1.setText("您是否需要继续计算:   是:Y  否: N");

                        

                 }

                 if(arg0.getSource()==btnNewButton) {

                         textField.setText(null);

                         label_题目显示.setText(null);

                         lblNewLabel.setText(null);

                         lblNewLabel_1.setText(null);

                         lblNewLabel_2.setText(null);

                        

                         random();

                 }

                 if(arg0.getSource()==btnNewButton_1) {

                         textField.setText(null);

                         label_题目显示.setText(null);

                         lblNewLabel.setText(null);

                         lblNewLabel_1.setText("退出游戏!");

                         lblNewLabel_2.setText("您的分数为:"+score+"分!");

                 }

        }

 

       

        public void random() {

                 op = new Random().nextInt(3); //随机生成运算符

                 num1 = new Random().nextInt(100);//随机生成数1

                 num2 = new Random().nextInt(100);//随机生成数2

                 switch(op) {                             //通过随机数选择运算符

                 case 0:label_题目显示.setText(num1+"+"+num2+"=?");

                            sum=num1+num2;

                            break;

                 case 1:label_题目显示.setText(num1+"-"+num2+"=?");

                                  sum=num1-num2;

                                  break;

                 case 2:label_题目显示.setText(num1 + "*" + num2 + "=?");

                                  sum=num1*num2;

                                  break;

                 case 3:label_题目显示.setText(num1 + "/" + num2 + "=?");

                                  sum=num1/num2;

                                  break;

                 }

       

        }

}

二、猜数游戏

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.*;

/*猜数游戏,计算机产生随机数,猜中即胜,猜不中提示是大了还是小了,直到猜到,然后给出所用的时间和评语

保留用户测试的成绩,做出成绩排行榜。猜到了也可以继续玩,直到不想玩,保留最好成绩(时间最短)*/

public class GussingGame{

        public static void main(String[] args) {

                

                 loop:

                 while(true) {

                         Scanner in=new Scanner(System.in);

                         System.out.println("请输入用户名:");

                         String user=in.next();

                         //调用一次猜数

                         Gussing gus=new Gussing();

                         long time=gus.start()/1000;//单位是毫秒

                         if(time<=20){          //输出时间和评语

                             System.out.println("用时:"+time+"s"+"   "+"you are so clever!");

                         }

                         if(time>20&&time<50){

                                  System.out.println("用时:"+time+"s"+"   "+"you are good!");

                         }

                         if(time>=50){

                             System.out.println("用时:"+time+"s"+"   "+"you need practice!");

                         }

                         //保留用户测试的成绩

                         Connection con=null;

                Statement statement = null;

                        

                         try { //设置参数

                         String driverClass = "com.mysql.jdbc.Driver";

                         String url = "jdbc:mysql://localhost:3306/user";

                         String username = "root";

                         String password = "root";

                        

                                  Class.forName(driverClass);

                                 

                                  //获取Conection对象

                    con = DriverManager.getConnection(url, username, password);

                    //获取Statement对象

                    statement = con.createStatement();

                 

                    String sql = "insert into userinfo (userName, score) values ('"+ user +"',"+ time +")";

                    statement.execute(sql);

                    //通过分组统计出数据库中不重复的最小数据score,然后通过 not in 去删除其他重复多余的数据。

                    String sql1=" DELETE FROM userinfo WHERE score NOT IN (SELECT score FROM (SELECT MIN(score) AS score FROM  userinfo GROUP BY userName) t)";

                                  statement.execute(sql1);

                                  //从数据库中升序输出

                                  String sql2="SELECT @rowNum:=@rowNum + 1 AS 'rank',a.* FROM userinfo a,(SELECT @rowNum:=0) b ORDER BY a.score";

                                  ResultSet rs =statement.executeQuery(sql2);

                                 

                                  System.out.println("**********成绩排行榜如下*********");

                                  System.out.println("排名" + "\t\t" + "姓名" + "\t\t" + "成绩");

                                  while(rs.next()) {

                                          String name1 = rs.getString("userName");

                                          int grade1 = rs.getInt("score");

                                          int rank = rs.getInt("rank");

                                          System.out.println(rank + "\t\t" +  name1+"\t\t" + grade1+"s");

                                  }

                         } catch (Exception e) {

                                  e.printStackTrace();          

                         } finally {

                                  try {

                                          if (statement != null) {

                                                  statement.close();

                                          }

                                  } catch (SQLException e) {

                                          e.printStackTrace();

                                  }

 

                                  try {

                                          if (con != null) {

                                                  con.close();

                                          }

                                  } catch (SQLException e) {

                                          e.printStackTrace();

                                  }

                         }

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

       

                        

                         System.out.println("你要继续玩游戏吗?y/n");

                         String answer=in.next();

                         while(true) {

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

                                          break;

                                  }

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

                                          System.out.println("********游戏结束,感谢您参与!************");     

                                          break loop;//结束最上面while()循环

                                  }else {

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

                                          answer=in.next();

                                  }

                         }

       

                 }     

        }

}

class Gussing{

        public long start(){

            //产生随机数

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

            //输入数据和给出提示

            Scanner inn=new Scanner(System.in);

            System.out.println("请输入1~100之间的数:");

         

           

            long startime=System.currentTimeMillis(); //设定初始计时时间

            int inputNum=inn.nextInt();

          

            while(!(inputNum==innerNum)){            

                     if(inputNum>innerNum)

                             System.out.println("输入的数偏大!");

                     else

                             System.out.println("输入的数偏小!");

                     inputNum=inn.nextInt();

            }

            //计算所用时间

            long endtime=System.currentTimeMillis();

            long usedtime=endtime-startime;  

            return usedtime;

           

    }

}

       

       

4.2 运行界面实现 

一、算数运算测试

 

图4-2-1  算数测试页面

 

图4-2-2  计算正确

 

 

 

 

 

 

 

 

 

 

 

图4-2-3  退出页面显示分数

 

 

 

 

二、猜数游戏

 

图4-2-4  猜数录入第一人成绩

 

 

图4-2-5  猜数录入第二人成绩

 

 

 

图4-2-6  猜数保留最新成绩

 

 

 

5 结论和心得

在学习JAVA的过程中,我有很深的体会,首先培养面向对象的思想是非常重要的,而且要有编程思想,而不是普通的解决问题,将具体问题模块化,找到解决方法,如果遇到不会做的程序,要学会网络检索学习他人的优秀代码,深刻理解后化为己用。

多看多练习,将陌生的东西看熟练久而久之就会写了。更重要的是时间管理和合理的需求分析,考虑时间可行性真的很重要。我也会更加努力完善自己的代码,养成良好的编程习惯。

 

posted @ 2020-06-25 15:07  pozzz  阅读(220)  评论(1)    收藏  举报