小组成员:王震(201421123054)、王杰(201421123055)

Coding地址:https://git.coding.net/a506504661/sssss.git

一、题目描述

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

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

二、需求分析

  1.有计时功能:在答题结束时,能够显示用户答题所用时间。

  2.有语言切换功能:界面可以支持中文简体、中文繁体、英语的切换

  3.有相应的界面区域以及按钮等。

三、程序设计

主要流程图:

四则运算Calculator类:

结对编程1----基于java的四则运算生成器-LMLPHP

GUI类:

结对编程1----基于java的四则运算生成器-LMLPHP

四、代码展示

四则运算实现相关代码:

  加法

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< && denominator<){
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[];
jTextField1.setText("("+all[]+")"+all[]+"("+all[]+")"+"=");
IntputField2.setText("");
answer.setText("");
congratulations.setText("");
now=System.currentTimeMillis();
i++; }
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {
over=System.currentTimeMillis();
now1=((over-now) / ( * * ) % )+":"+((over-now)/ ( * )% )+":"+((over-now)/ % );
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;

四、测试

开始做题:

  错题

结对编程1----基于java的四则运算生成器-LMLPHP

对题

结对编程1----基于java的四则运算生成器-LMLPHP

结束

结对编程1----基于java的四则运算生成器-LMLPHP

切换文字

结对编程1----基于java的四则运算生成器-LMLPHP

结对编程1----基于java的四则运算生成器-LMLPHP

五、实验小结

本次实验对于要求方面有很多问题的不懂,比如按键不匹配,错题不会累加等等,记过讨论和咨询,完成了本次结对实验,收益很多。

结对编程1----基于java的四则运算生成器-LMLPHP

PSP:

Personal Software Process Stages

Time (h) Senior

Student

Time (h)

计划

0.50.7
估计这个任务需要多少时间810.2
开发32.7
需求分析(包括学习新技术)0.51.5
生成设计文档00
设计复审00
代码规范0.50.7
具体设计0.20.4
具体编码23
代码复审0.30.2
测试(自我测试,修改代码,提交修改)0.50.6
报告0.50.8
测试报告0.10.1
计算工作量0.10.1
并提出过程修改计划0.10.1
  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
05-07 15:50