首页 > 其他 > 详细

四则运算(计应192马冰冰)

时间:2021-05-29 17:28:46      阅读:23      评论:0      收藏:0      [点我收藏+]

psp个人工作流程表

四则运算

实际花费时间

估计花费时间

计划

10

6

明确需求和其他相关因素,估计每个阶段的时间成本

10

6

开发

82

88

  • 需求分析

8

10

  • 生成设计文档

5

6

  • 设计复审(和同事审核设计文档)

5

6

  • 代码规范(为目前的开发制定合适的规范)

3

3

  • 具体设计

12

12

  • 具体编码

32

21

  • 代码复审

5

9

  • 测试(自测、修改代码、提交修改)

12

21

报告

8

6

  • 测试报告

3

2

  • 计算工作量

2

1

  • 事后总结,并提出过程改进计划

3

3

一.计划

1.随机产生一组(10个)算数题,产生算式,产生+/-,验证,除去不够减,循环产生。

2.在界面显示出题目,结果文本框,计时器,以及开始重置提交功能

3.显示对错,正确值统计,统计时间。

二.开发

需求分析

作为一名一年级小学生的家长,我希望制作一个出题软件,完成100以内的正整数的加减法题随机产生。以便减轻我的家庭负担。

代码规范

注意大小写,注意缩进,括号一定要配对,注意要分行。

具体设计

系统开始,随机产生10道加法或者减法,计算完成后,统计做了多少道题,正确率,以及用了多少时间,系统结束。

6.具体编码

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.*;
import java.util.List;
//StudentTopic
//主窗口
public class StudentTopic extends JFrame{
    public static int firstnum,secondnum,sign;//第一个数,第二个数,sign:0-1:0="+";1="-"
    public static String c = null;//运算符,+  -
    public static  JPanel Result;//计算面板
    public JPanel Buttonpanel;//按钮及结果面板
    public static JButton Resetbutton;//重置按钮
    public static JButton Printfbutton;//打印按钮
    public static JButton Startbutton;//开始按钮
    public static JLabel CountLable;//正确率在标签显示
    public static JLabel sumtimeLable;//时间显示
    public static List<Integer>/*Integer*/ Resultlist = new ArrayList<>();//文本框结果的集合
    public static List<JLabel> Topiclist = new ArrayList<>();//(标签)集合,题目在标签显示
    public static List<JTextField> Textlist = new ArrayList<>();//文本框集合
    public static List<Integer> Correctlist = new ArrayList<>();//正确答案集合
    public static int j=0;
    public static int k=0;
    public static int i=0;
    public static int num ;//设置用户答对的题数
    public static long sum1,sum2,sum3;//存放开始时间,结束时间;sum3=sum1-sum2


    public StudentTopic(){
        //初始化按钮
        Resetbutton = new JButton("重置");
        Printfbutton = new JButton("提交");
        Startbutton = new JButton("开始");
        //设置按钮大小
        Resetbutton.setSize(50,100);
        Printfbutton.setSize(50,100);
        Startbutton.setSize(50,100);
        sumtimeLable = new JLabel("                       ");
        sumtimeLable.setPreferredSize(new Dimension(100, 100));
        sumtimeLable.setFont(new Font("楷体",Font.BOLD, 15));
        sumtimeLable.setText("耗时:");
        //初始化计数面板
        Result = new JPanel();
        Result.setLayout(new GridLayout(25, 4));
        //初始化按钮面板
        Buttonpanel = new JPanel();
        Buttonpanel.setLayout(new FlowLayout());
        Buttonpanel.setSize(600,80);
        Buttonpanel.setBorder(BorderFactory.createLineBorder(Color.GREEN));
        Buttonpanel.add(Startbutton);
        CountLable = new JLabel("      ");
        CountLable.setFont(new Font("楷体",Font.BOLD, 15));
        CountLable.setPreferredSize(new Dimension(100,20));
        CountLable.setText("正确率:");
        //将按钮添加至按钮及结果面板中
        Buttonpanel.add(Resetbutton);
        Buttonpanel.add(Printfbutton);
        Buttonpanel.add(CountLable);
        Buttonpanel.add(sumtimeLable);
        //为计数面板添加标签和文本框
        //设置窗体属性
        setLayout(new BorderLayout());
        setBounds(100,100,600,600);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Container container = getContentPane();
        //将计数面板,按钮面板放置在容器中指定位置
        container.add(Result, BorderLayout.NORTH);
        container.add(Buttonpanel,BorderLayout.SOUTH);
    }


    //设置Result面板中的组件
    public static void Result(){
        for(i=0;i<10;i++){
            JLabel label = new JLabel();
            //在设置布局的条件下,调用setPreferredSize(new Dimension(80, 20))可以设置标签的大小
            //不能调用setsize()方法
            label.setPreferredSize(new Dimension(80, 20));
            label.setFont(new Font("楷体",Font.BOLD, 20));
            label.setBorder(BorderFactory.createLineBorder(Color.GREEN));//设置标签的边框
            Topiclist.add(label);// Topiclist为题目(标签)集合,题目在标签中呈现
            JTextField textField = new JTextField(4);
            textField.enable(false);
            Textlist.add(textField);//Textlist为用户输入计算结果的文本框集合
        }
        for(i = 0;i<20;i++){//利用if-else语句来间隔输出标签和文本框
            if(i%2 == 0){//如果余数为0,则添加标签
                Result.add( Topiclist.get(j));
                j++;
            }else{//如果余数为1,则添加文本框
                Result.add(Textlist.get(k));
                k++;
            }

        }
        CreateRandom();//调用创建随机题目的方法CreateRandom();
        myAddActionLIstener();//调用按钮的动作监听方法myAddActionLIstener()
    }
    //随机创建算术题
    public static void CreateRandom(){
        //int a,b,cint;
        //String c = null;
        Random random = new Random();
        for(JLabel lable: Topiclist){// Topiclist为题目(标签)集合,题目在标签中呈现
            firstnum = random.nextInt(101);
            secondnum = random.nextInt(101);
            sign = random.nextInt(2);
            String d = "=";
            switch (sign) {
                case 0:
                    c = "+";

                    RandomRange();//创建规定算数题范围函数,即和不大于100,差不小于0
                    lable.setText(firstnum+c+secondnum+d);
                    Correctlist.add(firstnum+secondnum);//Correctlist为所有题目正确答案的集合

                    break;
                default:
                    c = "-";
                    RandomRange();//创建规定算数题范围函数,即和不大于100,差不小于0
                    lable.setText(firstnum+c+secondnum+d);
                    Correctlist.add(firstnum-secondnum);//Correctlist为所有题目正确答案的集合
                    break;
            }
        }
    }
    public static void RandomRange(){//创建规定算数题范围函数,即和不大于100,差不小于0
        Random r = new Random();
        switch (c) {
            case "+":
                while(firstnum+secondnum>100){
                    firstnum = r.nextInt(101);
                    secondnum = r.nextInt(101);
                    if(firstnum + secondnum <= 100){

                    }
                }
                break;
            default:
                while(firstnum-secondnum<0){
                    firstnum = r.nextInt(101);
                    secondnum = r.nextInt(101);
                    if(firstnum - secondnum >= 0){
                        break;
                    }
                }
                break;
        }
    }
    //为按钮添加动作监听方法
    public static void myAddActionLIstener() {
        //为重置按钮添加动作监听
        Resetbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                for(JTextField cleartextField : Textlist){
                    cleartextField.setText("");
                }
                for(int i=0;i<Topiclist.size();i++) {
                    Topiclist.get(i).setText("");
                    Topiclist.get(i).setBorder(BorderFactory.createLineBorder(Color.GREEN));
                }
                Correctlist.removeAll(Correctlist);
                Resultlist.removeAll(Resultlist);
                CountLable.setText("正确率:");
                CreateRandom();
            }
        });
        //为提交按钮添加监听
        Printfbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                Integer i;
                Double result1;
                num = 0;
                //获取用户在文本框中输入的计算结果
                for(i = 0;i<Textlist.size();i++){//Textlist为用户输入计算结果的文本框集合
                    if("".equals(Textlist.get(i).getText())) {
                        Textlist.get(i).setText("-1");;
                    }
                    Resultlist.add(Integer.parseInt(Textlist.get(i).getText()));
                }
                //计算用户做对的题目个数
                //System.out.println(Correctlist.get(0)+"============"+Resultlist.get(0));
                for(i = 0;i<Resultlist.size();i++){
                    if(Correctlist.size()==0) {
                        break;
                    }
                    if(Resultlist.get(i)==Correctlist.get(i)){
                        num++;
                    }else{//Correctlist为所有题目正确答案的集合
                        Topiclist.get(i).setBorder(BorderFactory.createLineBorder(Color.RED));
                        Topiclist.get(i).setText( Topiclist.get(i).getText()+"             	错误    "
                                + "    正确答案:"+Correctlist.get(i)	 );
                    }

                }
                //计算用户做题的正确率
                result1 = ((num*1.0)/( Topiclist.size())*100);
                CountLable.setText("正确率:");
                CountLable.setText(CountLable.getText()+result1 + "%");
                sumtimeLable.setText("耗时:");
                sum2=System.currentTimeMillis();
                sum2=System.currentTimeMillis();
                sum3 =(sum2-sum1)/1000;
                System.out.println(sum1);
                if(sum1==0) {
                    sumtimeLable.setText(sumtimeLable.getText()+""+0+"s");
                }else {
                    sumtimeLable.setText(sumtimeLable.getText()+""+sum3+"s");
                }
                Correctlist.removeAll(Correctlist);
                Resultlist.removeAll(Resultlist);
            }
        });
        Startbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                for(int i = 0;i<Textlist.size();i++) {
                    Textlist.get(i).setText("");
                    Textlist.get(i).enable(true);

                }
                Resultlist.removeAll(Resultlist);
                Correctlist.removeAll(Correctlist);
                CreateRandom();
                sum1= System.currentTimeMillis();
            }

        });
    }
    public static void main(String[] args) {
        for(int i1 = 0;i1<Textlist.size();i1++) {
            Textlist.get(i1).enable(false);
        }
        new StudentTopic().setVisible(true);
        Result();
    }
}

  运行结果

技术分享图片

技术分享图片

三、总结:

看似简单实际上要考虑很多问题,界面的设计及其功能的实现,重置按钮如何重置等问题,虽然过程有点难,但是理清思路就好写很多,先写界面再写功能实现

 

四则运算(计应192马冰冰)

原文:https://www.cnblogs.com/hnzj-jy192-/p/14825617.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!