结对编程1----基于java的四则运算生成器
小组成员:王震(201421123054)、王杰(201421123055)
Coding地址:https://git.coding.net/w934707136/Pairing-operations.git
一、题目描述
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。在下面的功能需求中实现两个:
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
- 有计时功能,能显示用户开始答题后的消耗时间。
- 界面支持中文简体/中文繁体/英语,用户可以选择一种;
二、需求分析
1.有计时功能:在答题结束时,能够显示用户答题所用时间。
2.有语言切换功能:界面可以支持中文简体、中文繁体、英语的切换
3.有相应的界面区域以及按钮等。
三、程序设计
主要流程图:
四则运算Calculator类:
GUI类:
四、代码展示
四则运算实现相关代码:
加法
Calculator add(Calculator r){ // 加法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b + denominator * a; int newDenominator = denominator * b; Calculator result = new Calculator(newNumerator,newDenominator); return result; }
减法
Calculator sub(Calculator r){ // 减法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b - denominator * a; int newDenominator = denominator * b; Calculator result = new Calculator(newNumerator,newDenominator); return result; }
乘法
Calculator muti(Calculator r){ // 乘法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * a; int newDenominator = denominator * b; Calculator result = new Calculator(newNumerator,newDenominator); return result; }
除法
Calculator div(Calculator r){ // 除法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b; int newDenominator = denominator * a; Calculator result = new Calculator(newNumerator,newDenominator); return result; }
分数:
int numerator; // 分子 int denominator; // 分母 void setNumeratorAndDenominator(int a, int b){ // 设置分子和分母 int c = f(Math.abs(a),Math.abs(b)); // 计算最大公约数 numerator = a / c; denominator = b / c; if(numerator<0 && denominator<0){ numerator = - numerator; denominator = - denominator; } }
计时器相关代码:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Calculator cal = new Calculator(); String h=InputField.getText(); int g = Integer.parseInt(h); String[] all={""}; all=cal.answer(); c=all[5]; jTextField1.setText("("+all[1]+")"+all[2]+"("+all[4]+")"+"="); IntputField2.setText(""); answer.setText(""); congratulations.setText(""); now=System.currentTimeMillis(); i++; }
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { over=System.currentTimeMillis(); now1=((over-now) / (1000 * 60 * 60) % 60)+":"+((over-now)/ (1000 * 60)% 60)+":"+((over-now)/ 1000 % 60); String a=now1+""; jTextField7.setText(a); }
语言选择相关代码:
jMenu1.setText("文字转换"); jMenu1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenu1ActionPerformed(evt); } }); jMenuItem2.setText("英语"); jMenuItem2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem2ActionPerformed(evt); } }); jMenu1.add(jMenuItem2); jMenu1.add(jSeparator1); jMenuItem3.setText("中文简体"); jMenuItem3.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem3ActionPerformed(evt); } }); jMenu1.add(jMenuItem3); jMenuItem1.setText("中文繁体"); jMenuItem1.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { jMenuItem1ActionPerformed(evt); } });
GUI界面相关代码:
private javax.swing.JTextField InputField; private javax.swing.JTextField IntputField2; private javax.swing.JTextField answer; private javax.swing.JTextField congratulations; private javax.swing.JTextField good; private javax.swing.JButton jButton1;//开始做题按钮 private javax.swing.JButton jButton2;//查看答案按钮 private javax.swing.JButton jButton3;//结束答题按钮 private javax.swing.JButton jButton4;//下一题按钮 private javax.swing.JLabel jLabel1;//四则运算生成器标签 private javax.swing.JLabel jLabel10;//正确答案标签 private javax.swing.JLabel jLabel2;//请输入题数标签 private javax.swing.JLabel jLabel3;//题目标签 private javax.swing.JLabel jLabel4;//下一题标签 private javax.swing.JLabel jLabel5;//你的答案是标签 private javax.swing.JLabel jLabel6;//答题数标签 private javax.swing.JLabel jLabel7;//错题数标签 private javax.swing.JLabel jLabel8;//正确率标签 private javax.swing.JLabel jLabel9;//所用时间标签 private javax.swing.JMenu jMenu1;//文字转换选择菜单 private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1;//中文繁体选项 private javax.swing.JMenuItem jMenuItem2;//英语选项 private javax.swing.JMenuItem jMenuItem3;//中文简体选项 private javax.swing.JPanel jPanel1;//界面格局 private javax.swing.JPopupMenu jPopupMenu1; private javax.swing.JPopupMenu jPopupMenu2; private javax.swing.JRadioButtonMenuItem jRadioButtonMenuItem1; private javax.swing.JPopupMenu.Separator jSeparator1; private javax.swing.JPopupMenu.Separator jSeparator2; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField7; private javax.swing.JTextField mistake; private javax.swing.JTextField title1;
四、测试
开始做题:
错题
对题
结束
切换文字
五、实验小结
对于本次实验,开始初期对于计时器的实现,比较陌生,后通过百度以及询问同学,可以通过System.currentTimeMillis()获取计算机时间进行实现,但是还是实现的不够完美,无法令其直接显示出来;
对于图形界面设计,也是存在一些问题,导致编写的时候,对应的按钮与实际无法真正的联系,比如存在问题:只有点击答案才会累加错题数,只有下一题才会累加答题数;这个问题会在后续继续完善;
对于本次结对实验,与队友合作,虽然有时存在意见分歧,但是通过讨论选择一些较优的方案,在编写代码时,遇到难点,两人一起看书查资料,运行测试,往往自己无法发现问题,队友总能发现出来,这些在未来工作中应该是必不可少的。
PSP:
Personal Software Process Stages |
Time (h) Senior Student |
Time (h) |
计划 |
0.5 | 0.7 |
估计这个任务需要多少时间 | 8 | 10.2 |
开发 | 3 | 2.7 |
需求分析(包括学习新技术) | 0.5 | 1.5 |
生成设计文档 | 0 | 0 |
设计复审 | 0 | 0 |
代码规范 | 0.5 | 0.7 |
具体设计 | 0.2 | 0.4 |
具体编码 | 2 | 3 |
代码复审 | 0.3 | 0.2 |
测试(自我测试,修改代码,提交修改) | 0.5 | 0.6 |
报告 | 0.5 | 0.8 |
测试报告 | 0.1 | 0.1 |
计算工作量 | 0.1 | 0.1 |
并提出过程修改计划 | 0.1 | 0.1 |