软件工程网络15结对编程1——四则运算优化
软件工程网络15结对编程1——四则运算优化
成员及其学号
毛卓(201521044152),林健(201521145048)
码云地址:
https://gitee.com/linbighandsome/events
coding:
1.需求分析
重构了老师给出的原代码中的第二个,原来的代码中各个函数写的非常详细,大部分都不需要更改,原代码包含了加减乘除运算,也支持分数运算,支持化简;我们写出测试代码,测试代码覆盖率,以及对代码进行单元测试,加强原函数的运算能力,实际上原代码里的最小公倍数函数没有用,然后改进一下她们的求最大公约数GCD(),她们本来用的是while循环来实现,注释上却写的是递归实现,递归函数里是不会用循环语句的,所以我们将该方法重构了一下,然后重新设计一下界面。
2.关系类图:
3.代码展示:
四则运算代码之加减:
public void add(String s)//加法
{
String[] str=s.split("[+]");
if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
{
String[] str1=str[0].split("[/]");
String[] str2=str[1].split("[/]");
if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
{
result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))+(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
}else{
throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
}
}
else{//整数
if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
{
result = Integer.parseInt(str[0])+Integer.parseInt(str[1])+"";
}
else{
throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
}
}
public void substract(String s)//减法
{
String[] str=s.split("[-]");
if(str[0].indexOf("/")>-1 || str[1].indexOf("/")>-1)//分数
{
String[] str1=str[0].split("[/]");
String[] str2=str[1].split("[/]");
if(Integer.parseInt(str1[1]) != 0 && Integer.parseInt(str2[1]) != 0)//分母不为零
{
result =simplefraction(((Integer.parseInt(str1[0])*Integer.parseInt(str2[1]))-(Integer.parseInt(str2[0])*Integer.parseInt(str1[1]))),(Integer.parseInt(str1[1])*Integer.parseInt(str2[1])));
}else{
throw new IllegalArgumentException("Divisor cannot be zero!");//除数为零时抛出异常
}
}
else{//整数
if( Integer.parseInt(str[0])<1000&&Integer.parseInt(str[1])<1000&&Integer.parseInt(str[0])>-1000&&Integer.parseInt(str[1])>-1000)
{
result = Integer.parseInt(str[0])-Integer.parseInt(str[1])+"";
}
else{
throw new IllegalArgumentException("overrun!");}//数值范围超出时抛出异常
}
}
界面设计:
private static CalcFunction calcFunction=new CalcFunction();
public static class CalFrame extends JFrame {
private void init() {
FlowLayout flc = new FlowLayout(FlowLayout.CENTER);
this.setSize(new Dimension(300, 200));
this.setLayout(flc);
JPanel jp = new JPanel(flc);
final JTextField num1 = new JTextField();
num1.setColumns(10);
final JTextField res = new JTextField();
res.setColumns(5);
jp.add(num1);
jp.add(new JLabel("="));
jp.add(res);
this.add(jp);
JButton jbt = new JButton("计算");
jbt.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
String num=num1.getText().toString();
calcFunction.calc(num);
res.setText(calcFunction.getResult());
}
});
this.add(jbt);
}
public CalFrame() {
init();
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setResizable(false);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
4.程序运行:
四则运算程序运行(含分数):
单元测试:
代码覆盖率:
5.小结感受:
我负责的部分是代码部分,将代码优化,包括加减乘除部分,还有递归整除,界面。因为之前比较迟才组队,周六才开始正式看代码,今天和队友形影不离五六个小时,才把作业做完,经过这次结对经验,发现两个人的效率的确比一人高,我们互相督促,不敢放松,很好的一次体验。
6.结对作业PSP:
代码要求
要求必须增量式开发-提交到码云地址,码云上要能看到多次commit的记录,同时必须有两个人各自的commit记录。