import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.GroupLayout; import javax.swing.GroupLayout.Alignment; import javax.swing.LayoutStyle.ComponentPlacement; import java.awt.Font; import javax.swing.JTextPane; import javax.swing.JButton; import java.awt.Color; import javax.swing.JTextField; import javax.swing.JLabel; import java.awt.event.*; import java.util.Random; public class SiZeYunSuan { private JFrame frame; private JTextField textField; private JTextField textField_1; private JTextField textField_2; private JTextField textField_3; int num=5,T=0,F=0,count=1; int ranswer=0; int uanswer=0; private JTextField textField_4; private JTextField textField_5; private JTextField textField_6; private JTextField textField_7; private boolean stop = false; String str=""; String z=""; JTextPane textPane = new JTextPane(); JButton button = new JButton("u5F00u59CBu7B54u9898"); long startTime; long endTime; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { SiZeYunSuan window = new SiZeYunSuan(); window.frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the application. */ public SiZeYunSuan() { initialize(); } /** * Initialize the contents of the frame. */ private void initialize() { frame = new JFrame(); frame.setResizable(false); JPanel panel = new JPanel(); GroupLayout groupLayout = new GroupLayout(frame.getContentPane()); groupLayout.setHorizontalGroup( groupLayout.createParallelGroup(Alignment.LEADING) .addGroup(groupLayout.createSequentialGroup() .addComponent(panel, GroupLayout.PREFERRED_SIZE, 448, GroupLayout.PREFERRED_SIZE) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); groupLayout.setVerticalGroup( groupLayout.createParallelGroup(Alignment.LEADING) .addComponent(panel, GroupLayout.PREFERRED_SIZE, 487, Short.MAX_VALUE) ); textPane.setFont(new Font("Microsoft Sans Serif", Font.BOLD, 22)); textPane.setEditable(false); textPane.setToolTipText(""); textPane.setBackground(Color.WHITE); JPanel panel_1 = new JPanel(); panel_1.setBackground(new Color(204, 204, 204)); button.setBackground(Color.GREEN); JButton button_1 = new JButton("u9000u51FA"); button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.exit(0); } }); button_1.setBackground(Color.RED); JLabel lblNewLabel = new JLabel(" u8F93u5165u9898u6570uFF1A"); lblNewLabel.setFont(new Font("楷体_GB2312", Font.PLAIN, 15)); lblNewLabel.setForeground(new Color(0, 0, 0)); JLabel label = new JLabel(" u7B54u5BF9u9898u6570uFF1A"); label.setFont(new Font("楷体_GB2312", Font.PLAIN, 15)); JLabel label_1 = new JLabel(" u7B54u9519u9898u6570uFF1A"); label_1.setFont(new Font("楷体_GB2312", Font.PLAIN, 15)); JLabel label_2 = new JLabel(" u4FE1u606Fu53CDu9988uFF1A"); label_2.setFont(new Font("楷体_GB2312", Font.PLAIN, 15)); textField = new JTextField(); textField.setColumns(10); textField_1 = new JTextField(); textField_1.setForeground(Color.GREEN); textField_1.setEditable(false); textField_1.setColumns(10); textField_2 = new JTextField(); textField_2.setForeground(Color.RED); textField_2.setEditable(false); textField_2.setColumns(10); textField_3 = new JTextField(); textField_3.setFont(new Font("宋体", Font.PLAIN, 12)); textField_3.setForeground(Color.RED); textField_3.setEditable(false); textField_3.setColumns(10); JLabel label_3 = new JLabel(" u6B63u786Eu7B54u6848uFF1A"); label_3.setFont(new Font("Dialog", Font.PLAIN, 15)); JLabel label_4 = new JLabel(" u8F93u5165u7B54u6848uFF1A"); label_4.setFont(new Font("Dialog", Font.PLAIN, 15)); JLabel label_5 = new JLabel(" u5F53u524Du9898u6570uFF1A"); label_5.setFont(new Font("Dialog", Font.PLAIN, 15)); textField_4 = new JTextField(); textField_4.setEditable(false); textField_4.setColumns(10); textField_5 = new JTextField(); textField_5.setColumns(10); textField_6 = new JTextField(); textField_6.setFont(new Font("Yu Gothic", Font.BOLD, 14)); textField_6.setForeground(Color.CYAN); textField_6.setEditable(false); textField_6.setColumns(10); JLabel label_6 = new JLabel(" u6240u7528u65F6u95F4uFF1A"); label_6.setFont(new Font("Dialog", Font.PLAIN, 15)); textField_7 = new JTextField(); textField_7.setFont(new Font("宋体", Font.PLAIN, 14)); textField_7.setEditable(false); textField_7.setColumns(10); GroupLayout gl_panel_1 = new GroupLayout(panel_1); gl_panel_1.setHorizontalGroup( gl_panel_1.createParallelGroup(Alignment.TRAILING) .addGroup(gl_panel_1.createSequentialGroup() .addGap(11) .addComponent(lblNewLabel, GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE) .addGap(110)) .addGroup(gl_panel_1.createSequentialGroup() .addContainerGap() .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_1.createSequentialGroup() .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addComponent(label_5, GroupLayout.PREFERRED_SIZE, 90, GroupLayout.PREFERRED_SIZE) .addComponent(label, GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE)) .addPreferredGap(ComponentPlacement.RELATED)) .addGroup(gl_panel_1.createSequentialGroup() .addComponent(label_3, GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE) .addPreferredGap(ComponentPlacement.RELATED))) .addGroup(gl_panel_1.createSequentialGroup() .addComponent(label_1) .addPreferredGap(ComponentPlacement.RELATED))) .addGroup(gl_panel_1.createSequentialGroup() .addComponent(label_4) .addPreferredGap(ComponentPlacement.RELATED))) .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addComponent(textField_2, GroupLayout.DEFAULT_SIZE, 54, Short.MAX_VALUE) .addComponent(textField_1, GroupLayout.DEFAULT_SIZE, 54, Short.MAX_VALUE) .addComponent(textField_4, GroupLayout.DEFAULT_SIZE, 54, Short.MAX_VALUE) .addGroup(gl_panel_1.createSequentialGroup() .addComponent(textField, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED, 13, Short.MAX_VALUE)) .addComponent(textField_5, GroupLayout.DEFAULT_SIZE, 54, Short.MAX_VALUE) .addComponent(textField_6, GroupLayout.DEFAULT_SIZE, 54, Short.MAX_VALUE)) .addGap(66)) .addGroup(Alignment.LEADING, gl_panel_1.createSequentialGroup() .addContainerGap() .addGroup(gl_panel_1.createParallelGroup(Alignment.TRAILING, false) .addComponent(label_6, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(label_2, GroupLayout.DEFAULT_SIZE, 90, Short.MAX_VALUE)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addComponent(textField_7, GroupLayout.PREFERRED_SIZE, 54, GroupLayout.PREFERRED_SIZE) .addComponent(button_1, GroupLayout.PREFERRED_SIZE, 82, GroupLayout.PREFERRED_SIZE) .addComponent(textField_3, GroupLayout.PREFERRED_SIZE, 75, GroupLayout.PREFERRED_SIZE)) .addContainerGap(10, Short.MAX_VALUE)) .addGroup(Alignment.LEADING, gl_panel_1.createSequentialGroup() .addGap(52) .addComponent(button) .addContainerGap(91, Short.MAX_VALUE)) ); gl_panel_1.setVerticalGroup( gl_panel_1.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_1.createSequentialGroup() .addContainerGap() .addGroup(gl_panel_1.createParallelGroup(Alignment.BASELINE) .addComponent(lblNewLabel, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE) .addComponent(textField, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)) .addGap(18) .addComponent(button, GroupLayout.PREFERRED_SIZE, 42, GroupLayout.PREFERRED_SIZE) .addGap(18) .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_1.createSequentialGroup() .addGap(18) .addGroup(gl_panel_1.createParallelGroup(Alignment.BASELINE) .addComponent(label_5, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE) .addComponent(textField_4, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel_1.createSequentialGroup() .addGap(40) .addGroup(gl_panel_1.createParallelGroup(Alignment.BASELINE) .addComponent(textField_6, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE) .addComponent(label_3, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE))) .addGroup(gl_panel_1.createParallelGroup(Alignment.BASELINE) .addComponent(textField_5, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE) .addComponent(label_4, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE))) .addPreferredGap(ComponentPlacement.UNRELATED) .addGroup(gl_panel_1.createParallelGroup(Alignment.LEADING) .addComponent(label, GroupLayout.PREFERRED_SIZE, 28, GroupLayout.PREFERRED_SIZE) .addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_panel_1.createParallelGroup(Alignment.BASELINE) .addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE) .addComponent(label_1))) .addGroup(gl_panel_1.createSequentialGroup() .addGap(206) .addGroup(gl_panel_1.createParallelGroup(Alignment.BASELINE) .addComponent(label_2, GroupLayout.PREFERRED_SIZE, 26, GroupLayout.PREFERRED_SIZE) .addComponent(textField_3, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)))) .addPreferredGap(ComponentPlacement.RELATED) .addGroup(gl_panel_1.createParallelGroup(Alignment.BASELINE) .addComponent(label_6, GroupLayout.PREFERRED_SIZE, 26, GroupLayout.PREFERRED_SIZE) .addComponent(textField_7, GroupLayout.PREFERRED_SIZE, 30, GroupLayout.PREFERRED_SIZE)) .addGap(33) .addComponent(button_1, GroupLayout.PREFERRED_SIZE, 41, GroupLayout.PREFERRED_SIZE) .addGap(40)) ); panel_1.setLayout(gl_panel_1); button.addActionListener(new ActionListener(){//开始答题 public void actionPerformed(ActionEvent e) { count=1; T=0;F=0; str=""; z=""; stop=false; textField_6.setText(""); textField_4.setText(""+count); try{ num=Integer.parseInt(textField.getText()); if(num>5) { textPane.setText("输入题数错误,请重新输入!(1~5)"); textField.setText(""); } else { startTime=System.currentTimeMillis(); textField_1.setText(""+T); textField_2.setText(""+F); button.setVisible(false); textField.setEditable(false); showtext(); } } catch(NumberFormatException e1) { textPane.setText("输入题数错误,请重新输入!(1~5)"); textField.setText(""); } } }); textField_5.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) {try{ if(!stop) { uanswer=Integer.parseInt(textField_5.getText()); if(num==count) { if(uanswer==ranswer) { textField_6.setText(""+ranswer); textField_3.setText("答对!"); T++; textField_1.setText(""+T); count++; } else { textField_6.setText(""+ranswer); textField_3.setText("答错!"); F++; textField_2.setText(""+F); count++; } stop=true; textField_3.setText(" 答題結束!"); endTime=System.currentTimeMillis(); textField.setEditable(true); button.setVisible(true); textField_7.setText((endTime-startTime)/1000+"s"); } else if(uanswer==ranswer) { textField_6.setText(""+ranswer); textField_3.setText("答对!"); T++; textField_1.setText(""+T); showtext(); count++; } else { textField_6.setText(""+ranswer); textField_3.setText("答错!"); F++; textField_2.setText(""+F); showtext(); count++; } } } catch(NumberFormatException e2) { textPane.setText(str+"答案格式错误,请重新输入答案!"); textField_5.setText(""); } } }); GroupLayout gl_panel = new GroupLayout(panel); gl_panel.setHorizontalGroup( gl_panel.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel.createSequentialGroup() .addComponent(textPane, GroupLayout.PREFERRED_SIZE, 243, GroupLayout.PREFERRED_SIZE) .addPreferredGap(ComponentPlacement.RELATED, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(panel_1, GroupLayout.PREFERRED_SIZE, 196, GroupLayout.PREFERRED_SIZE) .addGap(28)) ); gl_panel.setVerticalGroup( gl_panel.createParallelGroup(Alignment.LEADING) .addGroup(gl_panel.createSequentialGroup() .addGroup(gl_panel.createParallelGroup(Alignment.LEADING) .addComponent(textPane, GroupLayout.PREFERRED_SIZE, 484, GroupLayout.PREFERRED_SIZE) .addComponent(panel_1, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); panel.setLayout(gl_panel); frame.getContentPane().setLayout(groupLayout); frame.setBounds(100, 100, 454, 518); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } void showtext() { char op='+'; int a=0,b=0,c=0,e=0,f=0,opnum=0,chioce=0; int temp=0; Random ra =new Random(); e=ra.nextInt(10)+1; f=ra.nextInt(10)+1; chioce=ra.nextInt(2)+1; if(e%2==0) { a=ra.nextInt(10)+2; } else { a=-ra.nextInt(10)+2; } if(f%2==0) { b=ra.nextInt(10)+2; } else { b=-ra.nextInt(10)+2; } c=ra.nextInt(5); opnum=Math.abs(ra.nextInt())%4+1; textField_5.setText(""); switch(chioce) { case 1: { switch(opnum) { case 1: op='+'; break; case 2: op='-'; break; case 3: op='*'; break; case 4: op='/'; break; } if((op=='-') && (a<b)) { temp=a; a=b; b=temp; } if(op=='/') { if(b==0) { b=1; } a=a*b; } if(a>0&&b>0) { z=String.valueOf(a)+String.valueOf(op)+String.valueOf(b)+"="+" "; } else if(a<0&&b>0) { z="("+String.valueOf(a)+")"+String.valueOf(op)+String.valueOf(b)+"="+" "; } else if(a>0&&b<0) { z=String.valueOf(a)+String.valueOf(op)+"("+String.valueOf(b)+")"+"="+" "; } else { z="("+String.valueOf(a)+")"+String.valueOf(op)+"("+String.valueOf(b)+")"+"="+" "; } str=str+z; textPane.setText(str); switch(op) { case '+': ranswer=a+b; break; case '-': ranswer=a-b; break; case '*': ranswer=a*b; break; case '/': ranswer=a/b; break; } break; } case 2: { int jc=1; str=str+String.valueOf(c)+"!="+" "; textPane.setText(str); for(int i=c;i>0;i--) { jc=jc*i; } ranswer=jc; break; } } } }
程序运行截图如下:
===一开始的进去的界面
===程序设定的是输入1~5的题数,如果输入不正确会提示重新输入~~
===输入正确后按开始答题按钮,按钮会消失,并且输入题数的框是不可改的。用户只能在输入答案的框内输入,当题数答完后,输入题数的框可以重新输入,开始答题的按钮会重新出现~~~
===每答完一题,界面会显示正确答案和判断对错,并且显示答对的题数和答错的题数,答题结束后,界面显示用户答题的所用时间,然后用户可以重新输入答题的题数,重新开始或者按退出按钮退出~~~
===作业中的照片,人太丑,不敢露脸~~~
这个结对作业,我们估计的总用时是8-10小时,结果我们用了7个小时完成了这个实验,比预计的快了一个小时。
1.我们用的是Eclipse(java)进行编程的
2.我们完成的内容是:
(2).可以出表达式里含有负整数(负整数最小不小于-100)的题目,且负数需要带括号,用户输入的结果不用带括号。如: 2*(-4) = -8
(3)用户答题结束以后,程序可以显示用户答题所用的时间
(4)用户可以选择出题的个数(最多不能超过5个题目),答题结束可以显示用户答错的题目个数和答对的题目个数
(6)程序可以出单个整数阶乘的题目:如:4!=24
3.本次结对的同学为 :
201306114305 欧其锋 博客:http://www.cnblogs.com/ouqifeng/
201306114305 吕日荣 博客:http://www.cnblogs.com/Russelling/
4.这个编程过程中,框架界面是共同完成的,欧其锋完成的功能是(2)(3),吕日荣完成的功能是(4)(6);
总结:通过这次实验,我觉得我们的收获还是挺大的,首先这个实验要求我们能够提高效率,因为结对的作用就是为了提高工作的效率,这方面我们还是做到了,我们用的时间比预想的时间少了。其次这个实验其实最难的部分是界面的实现,做界面这个东西,我们运用到了WindowBuilder,这个东西让我们在做界面的时候提高了效率,也提高了容错率,在这方面我觉得这个东西帮到了我们很多。最后就是功能与面板之间的一个支持方面的难点,我们在这方面使用了很多很多时间去解决这个问题。 我们觉得,这个实验其实只是一个开始,毕竟我们寻找bug的能力还有所缺陷,我们想到的范围还是比较狭隘的,我们希望这个实验是我们提高的一个阶段,当老师寻找到bug的时候,我们会继续去思考,解决这些bug,完善这个程序。
这只是1.0的版本,后期会有功能更加完善的功能的2.0,3.0版,请期待!
bug1已经修改好了,代码更新了,解决方法是将NumberFormatException加入一个异常处理,除了输入题数的框修改外,输入答案的框也进行了异常处理;
修复后的截图如下: