四则运算优化之gui

1. 项目要求

1.1 要求阐述

  在上一次作业的基础上进行一次升级,如下,至少选择一个升级方向:

  • 功能升级
  • 性能升级
  • 界面升级
  • 使用不同语言升级

1.2 项目地址:https://github.com/Lizhizhu/siZe

2.PSP表格

PSP2.1 

任务内容 计划完成需要的时间(min) 实际完成所需要的时间(min)
Plainning  计划 20 20
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 10 20
Analysis 需求分析 (包括学习新技术) 20 25
Design 具体设计 70 80
Coding 具体编码 100 180
test 测试(自我测试,修改) 60 65
Postmortem&Process improvement Plan 事后总结,并提出过程改进计划 30 40
summary 合计 310 430

3.项目

  优化改进:

    1.优化界面

    2.可以选择运算范围

    3.完成题目后有评判并且可查阅试题和答案

代码如下:

复制代码
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
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.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
public class B extends JFrame implements ActionListener{     //界面的设计
    int max=20;
    int MAX=10;   
    int TYPE=1;
    JLabel jlTitle=new JLabel();            
    JLabel jl=new JLabel("");
    JLabel jlAnswer=new JLabel("");
    JLabel jlTotal=new JLabel("共"+max+"题");        
    JLabel jlcorrect=new JLabel();
    JTextField jtf=new JTextField(3);
    JMenuBar jmb=new JMenuBar();
    JMenu jm=new JMenu("类型 ");                                //建立一个可选菜单
    JMenuItem jmi1=new JMenuItem("10以内加法");
    JMenuItem jmi2=new JMenuItem("10以内减法");
    JMenuItem jmi3=new JMenuItem("20以内加法");
    JMenuItem jmi4=new JMenuItem("20以内减法");
    JMenuItem jmi5=new JMenuItem("100以内加法");
    JMenuItem jmi6=new JMenuItem("100以内减法");
    JMenuItem jmi7=new JMenuItem("100以内乘法");
    JMenuItem jmi8=new JMenuItem("100以内除法");
    JMenuItem jmi9=new JMenuItem("真分数的计算");    
    JButton jb1=new JButton("上一题");
    JButton jb2=new JButton("下一题");           //创建button
    JButton jb3=new JButton("评卷");
    JButton jb4=new JButton("答案");
    JPanel jp1=new JPanel();
    JPanel jp2=new JPanel();
    JPanel jp3=new JPanel();
    String[] question=new String[max];       //利用字符串列表来存储问题
    int[] answer=new int[max];
    String[] studentAnswer=new String[max];   //利用字符串列表来存储答案
    boolean[]correct=new boolean[max];
    int count=1;
    boolean submitFlag=false;
    B(){
        super("小学数学测试"); 
        jlTitle.setFont(new Font(null,Font.PLAIN,20));
        jlTotal.setFont(new Font(null,Font.PLAIN,20));      ///字体的设置
        jlAnswer.setFont(new Font(null,Font.PLAIN,20));
        jl.setFont(new Font(null,Font.PLAIN,20));
        jlcorrect.setFont(new Font(null,Font.PLAIN,20));
        jlcorrect.setForeground(Color.RED);
        jtf.setFont(new Font(null,Font.PLAIN,20));
        fillQuestion();
        jb1.addActionListener(this);
        jb2.addActionListener(this);
        jb3.addActionListener(this);
        jb4.addActionListener(this);
        jmi1.addActionListener(this);
        jmi2.addActionListener(this);
        jmi3.addActionListener(this);
        jmi4.addActionListener(this);        
        jmi5.addActionListener(this);
        jmi6.addActionListener(this);
        jmi7.addActionListener(this);
        jmi8.addActionListener(this);                           // 菜单栏的添加
        jm.add(jmi1);jm.add(jmi2);jm.add(jmi3);jm.add(jmi4);jm.add(jmi5);jm.add(jmi6);jm.add(jmi7);jm.add(jmi8);
        jmb.add(jm);
        setJMenuBar(jmb);
        jp1.add(jlTitle);jp1.add(jlTotal);jp1.add(jb3);jp1.add(jb4);
        jp2.add(jl);jp2.add(jtf);jp2.add(jlcorrect);jp2.add(jlAnswer);    //利用panel实现多条文档显示输出
        jp3.add(jb1);jp3.add(jb2);
        add(jp1,BorderLayout.NORTH);
        add(jp2,BorderLayout.CENTER);
        add(jp3,BorderLayout.SOUTH);
        setSize(300, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);  //使用完解放退出
        setLocationRelativeTo(null);
        setVisible(true);               ///窗口可视化
    }
    @Override
    public void actionPerformed(ActionEvent ae) {
        if(ae.getSource()==jb1){
        if(submitFlag==false){
            try{        //点击上一题时抓取用户的不正常输入
            float tempanswer=Integer.valueOf(jtf.getText().trim());  //去除掉多余的空格
            studentAnswer[count-1]=jtf.getText().trim();
            if(count==1)
                count=max;
            else count--;
            jlTitle.setText("第"+count+"题");
            jl.setText(question[count-1]);
            jtf.setText("");
            if(studentAnswer[count-1]==null||studentAnswer[count-1].equals(""))
            {        ///若是出现空白输入,则提醒用户
            }
            else
            {
                jtf.setText(studentAnswer[count-1]);
            }
            }catch(Exception nfe){
                JOptionPane.showMessageDialog(this, "请输入正整数!");
                jtf.requestFocus();
                }
            }
            else{
                if(count==1)count=max;
                else count--;
                jlTitle.setText("第"+count+"题");    
                jl.setText(question[count-1]);
                jlAnswer.setText("");
                jtf.setEnabled(false);
                jtf.setText(studentAnswer[count-1]);
                jb4.setEnabled(true);
                if(correct[count-1]==true){
                    jlcorrect.setText("√");                        // 显示答案正确与否
                }
                else{
                    jlcorrect.setText("×");
                }
            }
        }        
        if(ae.getSource()==jb2){
            if(submitFlag==false){
                try{                                                      //点击下一题时抓取用户的不正常输入
                    float tempanswer=Integer.valueOf(jtf.getText().trim());    
                    studentAnswer[count-1]=jtf.getText().trim();
                    if(count==max)count=1;
                    else count++;
                    jlTitle.setText("第"+count+"题");
                    jl.setText(question[count-1]);
                    jtf.setText("");
                    if(studentAnswer[count-1]==null||studentAnswer[count-1].equals(""))
                    {
                    }
                    else
                    {
                        jtf.setText(studentAnswer[count-1]);
                    }
                }
                catch(Exception nfe)
                {
                    JOptionPane.showMessageDialog(this, "请输入正整数!");
                    jtf.requestFocus();
                }    
            }
            else
            {
                if(count==max)count=1;
                else count++;
                jlTitle.setText("第"+count+"题");
                jl.setText(question[count-1]);
                jlAnswer.setText("");
                jtf.setEnabled(false);
                jtf.setText(studentAnswer[count-1]);
                jb4.setEnabled(true);
                if(correct[count-1]==true){
                    jlcorrect.setText("√");
                }
                else{
                    jlcorrect.setText("×");
                }
            }    
        }
        if(ae.getSource()==jb3){
            try{                                                                    //点击评卷时检测用户的不正常输入,并给出全卷情况
                float tempanswer=Integer.valueOf(jtf.getText().trim());
                studentAnswer[count-1]=jtf.getText().trim();
                for(int i=0;i<max;i++){
                    if(studentAnswer[i]==null||studentAnswer[i].equals("")){
                        correct[i]=false;
                    }
                    else if(Float.valueOf(studentAnswer[i])==answer[i]){
                        correct[i]=true;
                    }
                    else{
                        correct[i]=false;
                    }
                }
                int correctAnswer=0;
                for(int i=0;i<max;i++){
                    if(correct[i]==true){
                        correctAnswer++;
                    }
                }
                String s="共"+max+"道题\n";
                s=s+"答对"+correctAnswer+"道题\n";
                s=s+"答错"+(max-correctAnswer)+"道题\n";
                s=s+"成绩"+String.format("%.2f",(100*(float)correctAnswer/max))+"分\n";
                JOptionPane.showMessageDialog(this, s);
                submitFlag=true;
                jb4.setEnabled(true);
                jtf.setEnabled(false);
                jtf.setText(studentAnswer[count-1]);
                if(correct[count-1]==true){
                    jlcorrect.setText("√");
                }
                else{
                    jlcorrect.setText("×");
                }
            }
            catch(Exception nfe){
                JOptionPane.showMessageDialog(this, "请输入正整数!");
                jtf.requestFocus();
            }
        }
        if(ae.getSource()==jb4){
            jlAnswer.setText(String.valueOf(answer[count-1]));
        }
        if(ae.getSource()==jmi1){
            MAX=10;TYPE=1;fillQuestion();       //菜单的选项
        }
        if(ae.getSource()==jmi2){
            MAX=10;TYPE=2;fillQuestion();
        }
        if(ae.getSource()==jmi3){
            MAX=20;TYPE=1;fillQuestion();
        }
        if(ae.getSource()==jmi4){
            MAX=20;TYPE=2;fillQuestion();
        }
        if(ae.getSource()==jmi5){
            MAX=100;TYPE=1;fillQuestion();
        }
        if(ae.getSource()==jmi6){
            MAX=100;TYPE=2;fillQuestion();
        }
        if(ae.getSource()==jmi7){
            MAX=100;TYPE=3;fillQuestion();
        }
        if(ae.getSource()==jmi8){
            MAX=100;TYPE=4;fillQuestion();
        }
    }    
    public static void main(String[] args) {
        new B();
    }
    public void fillQuestion(){
        count=1;
        for(int i=0;i<max;i++){
        String s=randomQuestion(MAX,TYPE);                 //问题的随机放出
        question[i]=s.substring(0,s.indexOf("=")+1);
        answer[i]=Integer.valueOf(s.substring(s.indexOf("=")+1));
    }
    studentAnswer=new String[max];
    correct=new boolean[max];
    jl.setText(question[0]);
    jlTitle.setText("第"+count+"题");
    jlcorrect.setText("");
    jlAnswer.setText("");
    submitFlag=false;
    jtf.setEnabled(true);
    jtf.setText("");
    jb4.setEnabled(false);
    }
    public String randomQuestion(int MAX,int TYPE) {
        String s="";
        int answer=MAX+1;
        while(answer>MAX||answer<0){   ///random随机出正整数
            int a=(int)(Math.random()*MAX+1);
            int b=(int)(Math.random()*MAX+1);
            int c=(int)(Math.random()*MAX+1);
            int d=(int)(Math.random()*MAX+1);
            switch(TYPE){
                case 1:answer=a+b;break;
                case 2:answer=a-b;break;
                case 3:answer=a*b;break;
                case 4:
                if(a%b==0){
                    answer=a/b;
                }
                break;
            }
            if(answer<=MAX&&answer>=0){
                s=s+a;
                switch(TYPE){
                    case 1:s=s+"+";break;
                    case 2:s=s+"-";break;
                    case 3:s=s+"*";break;
                    case 4:s=s+"/";break;
                }    
                s=s+b+"="+answer;
            }
        }
        return s;
    }
}
复制代码

程序实现:

 

posted @ 2020-09-20 23:15  落尘一缕沙  阅读(139)  评论(0编辑  收藏  举报