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.测试

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

  • 相关阅读:
    安装CentOS--设置网络_2
    VMware虚拟机中涉及的3种常见网络模式
    Java_静态变量
    安装CentOS--设置网络_1
    队列的基本操作-队列的链式存储结构(带图详细)
    单链表的基本操作-单链表的创建、插入、删除结点等
    Linux下设置mysql不区分大小写
    python课后练习当前目录下有一个文件名为score3.txt的文本文件, 存放着某班学生的学号和其两门专业课的成绩。
    实现斐波那契数列算法-递归和非递归
    算法之除去递增有序单向链表中的重复元素
  • 原文地址:https://www.cnblogs.com/bladepoint/p/14829176.html
Copyright © 2011-2022 走看看