zoukankan      html  css  js  c++  java
  • 计应193第一组小学生做题软件——任文凯

    .计划

    UML 图

     

    Psp个人计划:

     

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

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

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

    二.开发

    1.需求分析

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

    2.生成设计文档

    3.设计复审

    4.代码规范

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

    5.具体设计

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

    6.具体编码

    package test;

    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为用户输入计算结果的文本框集合

                Textlist.add(textField);

            }

            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(){

            Random random = new Random();

         // Topiclist为题目(标签)集合,题目在标签中呈现

            for(JLabel lable: Topiclist){

             firstnum = random.nextInt(101);

             secondnum = random.nextInt(101);

             sign = random.nextInt(2);

                String d = "=";

                switch (sign) {

                    case 0:

                        c = "+";

                      //创建规定算数题范围函数,即和不大于100,差不小于0

                        RandomRange();

                     lable.setText(firstnum+c+secondnum+d);

                      //Correctlist为所有题目正确答案的集合

                       Correctlist.add(firstnum+secondnum);

                        break;

                    default:

                        c = "-";

                      //创建规定算数题范围函数,即和不大于100,差不小于0

                        RandomRange();

                     lable.setText(firstnum+c+secondnum+d);

                      //Correctlist为所有题目正确答案的集合

                        Correctlist.add(firstnum-secondnum);

                        break;

                }

            }

        }

      //创建规定算数题范围函数,即和不大于100,差不小于0

        public static void RandomRange(){

            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("正确率:");

                    sum3=0;

                    sum1=0;

                    sum2=0;

                    CreateRandom();

                }

            });

            //为提交按钮添加监听

            Printfbutton.addActionListener(new ActionListener() {

                public void actionPerformed(ActionEvent arg0) {

                    Integer i;

                    Double result1;

                    num = 0;

                    //获取用户在文本框中输入的计算结果

                  //Textlist为用户输入计算结果的文本框集合

                    for(i = 0;i<Textlist.size();i++){

                     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++;

                         //Correctlist为所有题目正确答案的集合

                        }else{

                         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();

                   sum3 =(sum2-sum1)/1000;

                   if(sum1==0 && Integer.parseInt(Textlist.get(1).getText())==-1) {

                    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);

    Topiclist.get(i).setBorder(BorderFactory.createLineBorder(Color.GREEN));

                    }

                    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();

        }

    }

     运行结果

     

    7.代码复审

    8.测试

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

  • 相关阅读:
    494. Target Sum 添加标点符号求和
    636. Exclusive Time of Functions 进程的执行时间
    714. Best Time to Buy and Sell Stock with Transaction Fee有交易费的买卖股票
    377. Combination Sum IV 返回符合目标和的组数
    325. Maximum Size Subarray Sum Equals k 和等于k的最长子数组
    275. H-Index II 递增排序后的论文引用量
    274. H-Index论文引用量
    RabbitMQ学习之HelloWorld(1)
    java之struts2的数据处理
    java之struts2的action的创建方式
  • 原文地址:https://www.cnblogs.com/bladepoint/p/14829176.html
Copyright © 2011-2022 走看看