首页 > 代码库 > 结对作业-基于GUI的四则运算

结对作业-基于GUI的四则运算

一、需求分析

1、题目要求:

我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:

记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
有计时功能,能显示用户开始答题后的消耗时间。
界面支持中文简体/中文繁体/英语,用户可以选择一种;

2、题目分析:

(1)支持真分数和整数的运算;
(2)能够判断对错,且输出正确答案;能够计算正确率并输出;
(3)将程序弄成GUI;
(4)可切换语言,界面支持中文简体/中文繁体/英语,用户可以选择一种;
(5)计时器功能,点击开始计时时,能显示用户开始答题后的消耗时间;

3、分工

此次程序设计由l吴伟君(201421123080)和我(201221123032)一起完成
我的码云地址:https://git.oschina.net/junge212/Arithmetic_java/tree/master

二、 程序设计

我们选择设计了两个功能:
1、计时器功能,点击开始计时时,能显示用户开始答题后的消耗时间;
2、可切换语言,界面支持中文简体/中文繁体/英语,用户可以选择一种;

流程图:

 技术分享

 


三、代码展示

 

import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;

public class Arithmetic {
	public static void main(String[] args){
		MathF math = new MathF();
		math.show();
	}
}
class MathF extends JFrame{
	public MathF(){
		Container contentPane = getContentPane();
		final Panel panel = new Panel();
		contentPane.add(panel);
		//contentPane.add(label);
		
		setSize(500,500);
		setTitle("四则运算");
		setResizable(false);
		setLocation(0,0);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		panel.setCursor(new Cursor(Cursor.HAND_CURSOR));
		
		JMenuBar menuBar = new JMenuBar();
		JMenu menuSet=new JMenu("设置");
		JMenu menuOut=new JMenu("退出");
        
        JMenuItem TISHU = new JMenuItem("题数");        
        JMenuItem NANDU = new JMenuItem("难度");
        JMenuItem YUYAN = new JMenuItem("语言");
        JMenuItem TUICHU = new JMenuItem("退出");
        
        
        menuBar.add(menuSet);
       
        menuSet.add(TISHU);
        TISHU.addActionListener(new ActionListener(){  
            public void actionPerformed(ActionEvent e){  
            	String i1 = JOptionPane.showInputDialog(null, "请输入你需要的题目数:\n", "题目数",JOptionPane.QUESTION_MESSAGE);	
            	int count = Integer.parseInt(i1);
                panel.SUIJI(count);
            }   
         });
        menuSet.add(NANDU);
        menuSet.add(YUYAN);
        menuSet.add(TUICHU);
        TUICHU.addActionListener(new ActionListener(){  
            public void actionPerformed(ActionEvent e){  
            	int i1 = JOptionPane.showConfirmDialog(null,"是否退出?","提示:",JOptionPane.YES_NO_OPTION);	
                if(i1==JOptionPane.OK_OPTION){
                	System.exit(0); 
                }else{
                	String z = "请继续!";
                	JOptionPane.showMessageDialog(null, z);
                }  
            	
            }   
         });
        
        this.setJMenuBar(menuBar);
       
	}
}

class Panel extends JPanel{
	//int result;
	static int score = 0;
	JButton BUTTON = new JButton(); //提交按钮 触发事件
	JLabel SCORE = new JLabel();//准确率
	JLabel OUT = new JLabel();//退出
	ArrayList<JTextField> answer=new ArrayList<>();
	public Panel(){	
	
	
    //printf("正确率为:%lf",score*1.0/count);
	//this.add(SCORE);
	//this.add(BUTTON);
	BUTTON.setLocation(100,100);
	
	
}
	
	public void SUIJI(int count){
			int SUIJI;
		   // printf("请输入题目数?");
		    //scanf("%d",&count);
			String s1,s2=null;
		    for(int i=0;i<count;i++)
		    {
		    	SUIJI = new Random().nextInt(2);
		        if(SUIJI==0)
		        {s2=this.zhengshu();}
		        else
		        {s2=this.fenshu();}
		        s1=answer.get(i).getText();
		        System.out.println(s1);
			    if(s1.equals(s2)){
			    	score ++ ;
			    	}
		    }
		
		    this.add(BUTTON);
		    this.add(SCORE);
		    BUTTON.setText("\r提交");
			//this.add(OUT);
			BUTTON.addActionListener(new ActionListener(){  
		        public void actionPerformed(ActionEvent e){
		        	SCORE.setText("正确率:"+score/count);
		    }
		});	
	}
	 public String zhengshu(){
		 		String result=new String();
				int left = new Random().nextInt(9) + 1;
				int mid = new Random().nextInt(4);
				int right = new Random().nextInt(9) + 1;
				JLabel XIANSHI1 = new JLabel();
				JLabel XIANSHI2 = new JLabel();
				JLabel XIANSHI3 = new JLabel();
				//JButton TIJIAO = new JButton();
				JTextField SHURU = new JTextField(10);
				String s2 =null;
				this.add(XIANSHI1);
				this.add(XIANSHI2);
				this.add(XIANSHI3);
				//this.add(TIJIAO);
				//this.add(BUTTON);
				this.add(SHURU);
				answer.add(SHURU);
				//is.setLayout(null);
				
				XIANSHI1.setText("         "+left+" ");
				switch(mid)
			    {
			        case(0):result=left+right+"";
			        XIANSHI2.setText(" + ");break;
			        case(1):result=left-right+"";
			        XIANSHI2.setText(" - ");break;
			        case(2):result=left*right+"";
			        XIANSHI2.setText(" * ");break;
			        case(3):result=left/right+"";
			        XIANSHI2.setText(" / ");break;
			    }
				XIANSHI3.setText(" "+right+"   =       ");
				System.out.println(left+" " +mid+" "+right +result);
				return result;
				}
	 public String fenshu(){
		 int left_x,left_y,mid,right_x,right_y,x = 0,y = 0,GYS;
		    do{
		     left_x = new Random().nextInt(9) + 1;
		     left_y = new Random().nextInt(9) + 1;
		     mid = new Random().nextInt(4) ;
		     right_x = new Random().nextInt(9) + 1;
		     right_y = new Random().nextInt(9) + 1;
		    }while(!(left_x<left_y&&right_x<right_y));
		    JLabel XIANSHI1 = new JLabel();
			JLabel XIANSHI2 = new JLabel();
			JLabel XIANSHI3 = new JLabel();
			//JLabel TIJIAO = new JLabel();
			JTextField SHURU = new JTextField(10);
			String s1 = SHURU.getText();
			String s2 ="";
			this.add(XIANSHI1);
			this.add(XIANSHI2);
			this.add(XIANSHI3);
			//this.add(TIJIAO);
			//this.add(BUTTON);
			this.add(SHURU);
			answer.add(SHURU);
			//is.setLayout(null);
			
			XIANSHI1.setText("        "+left_x+"/"+left_y);
				switch(mid)
		        {
		            case(0):x=left_x*right_y+left_y*right_x;
		                    y=left_y*right_y;GYS=gcd(x,y);x=x/GYS;y=y/GYS;s2 = x +"/" +y;
		                    XIANSHI2.setText(" + ");break;
		            case(1):x=left_x*right_y-left_y*right_x;
		                    y=left_y*right_y; GYS=gcd(x,y);x=x/GYS;y=y/GYS; s2 = x +"/" +y;
		                    XIANSHI2.setText(" - ");break;
		            case(2):x=left_x*right_x;
		                    y=left_y*right_y;GYS=gcd(x,y);x=x/GYS;y=y/GYS;s2 = x +"/" +y;
		                    XIANSHI2.setText(" * ");break;
		            case(3):x=left_x*right_y;
		                    y=left_y*right_x;GYS=gcd(x,y);x=x/GYS;y=y/GYS;s2 = x +"/" +y;
		                    XIANSHI2.setText(" / ");break;
		        }
				System.out.println(left_x+"/"+left_y +"   "+mid+"   "+right_x+"/"+right_y+"="+x +"/" +y);
				XIANSHI3.setText(" "+right_x+"/"+right_y+"  =      ");
				
		    return s2;
		    
	 }
	private int gcd(int x, int y) {
		int r;
	    r=x%y;
	    while(r!=0)
	    {
	        x=y;
	        y=r;
	        r=x%y;
	    }
	    return y;
	}
}

 

  

 

  

四、程序运行

技术分享

 

 

五 psp

 技术分享

 

 

 

 六 小结

这次的实验是对上次实验的功能的一种完善,升级,本次要求把这个程序做成GUI。我和吴伟君华同学做该项目的时候由于基础不扎实,在GUI的方面花费了大量时间,导致我们的程序没能完成原先设计的许多功能,包括计时器功能,中英转换,唯有一个GUI的基本框架,能够显示用户所需的数量的题目,但是输入的答案没能传入和正确答案比较,目前还在寻找解决方案。

 

结对作业-基于GUI的四则运算