0405复利5.0震撼来袭
前注:
结对同伴的学号:201406114205
姓名:陈嘉慧
博客地址:http://www.cnblogs.com/hui1005039632/
一、项目简介
项目名称:复利计算软件 |
版 本 :5.0 |
版本类型:java |
使用工具:eclipse+swing插件 |
主要功能:复利单利的计算、贷款的计算以及投资的计算三大功能 |
备 注 :本代码仅作为学习交流用途,更多功能及后续开发请关注本博客园 |
二、新的功能需求
即要追求利益,又要面对不可预知的金融投资风险, “不能把鸡蛋放在同一个篮子里”,所以有必要进行组合投资。
通过上述计算与对比,可以帮助客户进行投资决策。
客户:那么能否帮我记录下一笔一笔不同类型的投资,并动态显示资金现值呢?
三、设计
在久功能的基础上加入一个新的类,创建新的界面
四、估算。
估计用时:3h
估计代码行:70
实际用时:5h
实际代码行:250行
五、任务分配
陈嘉慧这次的主要任务:1、设计界面,将新的投资界面设计出来
2、查阅相关资料,提出需求,包括需要的数据个数及公式
3、复审代码,包括风格规范和代码设计规范,让代码更加简明易读无二义性
我这次做的主要任务:1、将投资界面用代码尽可能地实现出来
2、检阅代码,进行单元测试,尽可能地减少bug
六、源代码主要功能介绍
private void CreateWindows() //创建窗体
private void CreateComponent() //创建窗口的零件
private void LayoutComponent() //设计窗口
private void MouseLinsten() //鼠标 监控
public void InitjtextArea() //初始化文本区域框
public void ReadFile(){ File file1=new File("principal.txt"); if(file1.exists()){ try { //文件读取三流不能少 FileInputStream fis=new FileInputStream(file1); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); BufferedReader br=new BufferedReader(isr); String line; String outup="本金"+"/"+"期限"+"/"+"期末价值"+"\n"; while((line=br.readLine())!=null){ //System.out.println(line); outup=outup+line; } jtextArea.setText(outup); //先创建的后关闭,后创建的先关闭 br.close(); isr.close(); fis.close(); } catch (UnsupportedEncodingException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } public void WriteFile(){ File newfile=new File("principal.txt"); FileOutputStream fos; try { //文件写入三流,不可少 fos = new FileOutputStream(newfile); OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8"); BufferedWriter bw=new BufferedWriter(osw); for(int i=0;i<input;i++){ bw.write(Pricinal[i]+"\n"); } bw.close(); osw.close(); fos.close(); } catch (FileNotFoundException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }
七、Junit测试减少bug而修改的代码
源代码:
private class C2Action implements ActionListener { public void actionPerformed(ActionEvent e) { b1.setText(""); b2.setText(""); b3.setText(""); b6.setText(""); InitjtextArea(); } }
捕捉到空指针异常,以下是改进的代码:
private class C2Action implements ActionListener { public void actionPerformed(ActionEvent e) { try { b1.setText(""); b2.setText(""); b3.setText(""); b6.setText(""); } catch (NullPointerException e2) { // TODO: handle exception } InitjtextArea(); } }
源代码:
private class C1Action implements ActionListener { public void actionPerformed(ActionEvent e) { double principal = 0; //b1 double amount = 0; //b3 double rate = 0; //b6 double time=0; //b2 if(b3.getText().equals("") && b1.getText() != null && b6.getText() != null && b2.getText() != null) { rate = Double.parseDouble(b6.getText()); principal = Double.parseDouble(b1.getText()); time = Double.parseDouble(b2.getText()); amount=principal*(1+rate); b3.setText(""+amount); Amount[input]=amount; Day[input]=time; Pricinal[input]=principal; input+=1; } else if(b3.getText()!=null && b1.getText() != null && b6.getText() != null && b2.getText() != null) { JOptionPane.showMessageDialog(null, "请删除期末价值"); } else { JOptionPane.showMessageDialog(null, "请输入数据"); } } }
捕捉到空指针异常。以下是改进的代码
private class C1Action implements ActionListener { public void actionPerformed(ActionEvent e) { double principal = 0; //b1 double amount = 0; //b3 double rate = 0; //b6 double time=0; //b2 if(b3.getText().equals("") && b1.getText() != null && b6.getText() != null && b2.getText() != null) { try { rate = Double.parseDouble(b6.getText()); principal = Double.parseDouble(b1.getText()); time = Double.parseDouble(b2.getText()); } catch (Exception e2) { // TODO: handle exception rate=0; principal=0; time=0; } amount=principal*(1+rate); b3.setText(""+amount); Amount[input]=amount; Day[input]=time; Pricinal[input]=principal; input+=1; } else if(b3.getText()!=null && b1.getText() != null && b6.getText() != null && b2.getText() != null) { JOptionPane.showMessageDialog(null, "请删除期末价值"); } else { JOptionPane.showMessageDialog(null, "请输入数据"); } } }
这样即使误输入也能输出一个为0的结果。
八、主界面及运行结果截图
这是主界面
这是投资模块界面
这三张是运行结果截图
九、总结
1、代码规范使读起来节省很多时间
2、结对合作由于有另一个队友有所要求,不像之前的任意式,能够提高代码的质量
十、资源
github:https://github.com/hellolaona/Fuli5.0