结对作业-基于GUI的四则运算
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结对作业-基于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的四则运算的主要内容,如果未能解决你的问题,请参考以下文章