zoukankan      html  css  js  c++  java
  • 结对作业-基于GUI的四则运算

    一、需求分析

    1、题目要求:

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

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

    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, "请输入你需要的题目数:
    ", "题目数",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("
    提交");
    			//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的基本框架,能够显示用户所需的数量的题目,但是输入的答案没能传入和正确答案比较,目前还在寻找解决方案。

  • 相关阅读:
    新院址运行统计
    游标使用之四
    游标使用之三
    css基础知识
    javascript基础知识
    [每日一题2020.06.20]BFS
    白嫖一个免费域名并解析到博客园
    [每日一题2020.06.19]leetcode #84 #121 单调栈
    操作系统---文件管理
    [每日一题2020.06.18]leetcode #3 hash_map实现滑动窗口
  • 原文地址:https://www.cnblogs.com/212junge/p/6552993.html
Copyright © 2011-2022 走看看