0414复利计算6.0-----结对编程
结对同伴:
姓名:许佳仪
学号:201406114212
博客园地址:http://www.cnblogs.com/xjy-gg/
一、项目简介
开发工具:MyEclipse
开发语言:java
主要功能:复利单利的计算、贷款的计算以及投资运算三大功能。
二、新增功能
部分界面的设计。
三、估计
估计用时:5小时
实际用时:6小时
估计代码行数:500行左右
实际代码行数:470行
四、任务分配
两人皆对界面设计的代码不擅长,所以一起讨论并参考网上资料。
五、新增代码
1 import java.awt.event.KeyAdapter; 2 import java.awt.event.KeyEvent; 3 import java.awt.event.MouseAdapter; 4 import java.awt.event.MouseEvent; 5 6 import javax.swing.DefaultComboBoxModel; 7 import javax.swing.JButton; 8 import javax.swing.JComboBox; 9 import javax.swing.JFrame; 10 import javax.swing.JLabel; 11 import javax.swing.JOptionPane; 12 import javax.swing.JRadioButton; 13 import javax.swing.JTextField; 14 import javax.swing.SwingUtilities; 15 import javax.swing.UIManager; 16 17 import org.dyno.visual.swing.layouts.Constraints; 18 import org.dyno.visual.swing.layouts.GroupLayout; 19 import org.dyno.visual.swing.layouts.Leading; 20 21 //VS4E -- DO NOT REMOVE THIS LINE! 22 public class Fulijisuan extends JFrame { 23 24 private static final long serialVersionUID = 1L; 25 private JTextField jTextField0; 26 private JTextField jTextField1; 27 private JTextField jTextField2; 28 private JTextField jTextField3; 29 private JLabel jLabel0; 30 private JLabel jLabel1; 31 private JLabel jLabel2; 32 private JLabel jLabel3; 33 34 private JButton jButton0; 35 private JButton jButton1; 36 37 public Fulijisuan() { 38 initComponents(); 39 } 40 41 private void initComponents() { 42 setLayout(new GroupLayout()); 43 add(getJTextField0(), new Constraints(new Leading(121, 132, 10, 10), new Leading(26, 38, 10, 10))); 44 add(getJTextField1(), new Constraints(new Leading(121, 132, 10, 10), new Leading(85, 41, 10, 10))); 45 add(getJTextField2(), new Constraints(new Leading(121, 132, 10, 10), new Leading(148, 39, 10, 10))); 46 add(getJLabel0(), new Constraints(new Leading(59, 44, 12, 12), new Leading(30, 31, 12, 12))); 47 add(getJLabel1(), new Constraints(new Leading(55, 43, 10, 10), new Leading(85, 40, 12, 12))); 48 add(getJLabel2(), new Constraints(new Leading(62, 12, 12), new Leading(146, 39, 10, 10))); 49 add(getJLabel3(), new Constraints(new Leading(59, 10, 10), new Leading(216, 37, 12, 12))); 50 add(getJComboBox1(), new Constraints(new Leading(323, 120, 10, 10), new Leading(128, 31, 10, 10))); 51 add(getJTextField3(), new Constraints(new Leading(121, 132, 10, 10), new Leading(216, 41, 10, 10))); 52 add(getJRadioButton0(), new Constraints(new Leading(326, 10, 10), new Leading(197, 12, 12))); 53 add(getJButton0(), new Constraints(new Leading(124, 10, 10), new Leading(290, 10, 10))); 54 add(getJButton2(), new Constraints(new Leading(233, 10, 10), new Leading(292, 10, 10))); 55 add(getJComboBox0(), new Constraints(new Leading(323, 120, 10, 10), new Leading(67, 32, 10, 10))); 56 setSize(460, 374); 57 } 58 59 private JButton getJButton2() { 60 if (jButton2 == null) { 61 jButton2 = new JButton(); 62 jButton2.setText("清除"); 63 jButton2.addMouseListener(new MouseAdapter() { 64 65 public void mouseClicked(MouseEvent event) { 66 jButton1MouseMouseClicked(event); 67 } 68 }); 69 } 70 return jButton2; 71 } 72 73 private JButton getJButton0() { 74 if (jButton0 == null) { 75 jButton0 = new JButton(); 76 jButton0.setText("计算"); 77 jButton0.addMouseListener(new MouseAdapter() { 78 79 public void mouseClicked(MouseEvent event) { 80 jButton0MouseMouseClicked(event); 81 } 82 }); 83 } 84 return jButton0; 85 } 86 87 private JRadioButton getJRadioButton0() { 88 if (jRadioButton0 == null) { 89 jRadioButton0 = new JRadioButton(); 90 jRadioButton0.setSelected(false); 91 jRadioButton0.setText("定投"); 92 jRadioButton0.addMouseListener(new MouseAdapter() { 93 94 public void mouseClicked(MouseEvent event) { 95 jRadioButton0MouseMouseClicked(event); 96 } 97 }); 98 } 99 return jRadioButton0; 100 } 101 102 private JComboBox getJComboBox1() { 103 if (jComboBox1 == null) { 104 jComboBox1 = new JComboBox(); 105 jComboBox1.setModel(new DefaultComboBoxModel(new Object[] { "复利计算", 106 "单利计算" })); 107 jComboBox1.setDoubleBuffered(false); 108 jComboBox1.setBorder(null); 109 } 110 return jComboBox1; 111 } 112 113 private JComboBox getJComboBox0() { 114 if (jComboBox0 == null) { 115 jComboBox0 = new JComboBox(); 116 jComboBox0.setModel(new DefaultComboBoxModel(new Object[] { "求本息和", 117 "求本金", "求利率", "求年数 ", "求等额本息还款" })); 118 jComboBox0.setDoubleBuffered(false); 119 jComboBox0.setBorder(null); 120 jComboBox0.addMouseListener(new MouseAdapter() { 121 }); 122 } 123 return jComboBox0; 124 } 125 126 private JLabel getJLabel3() { 127 if (jLabel3 == null) { 128 jLabel3 = new JLabel(); 129 jLabel3.setText("本息"); 130 } 131 return jLabel3; 132 } 133 134 private JLabel getJLabel2() { 135 if (jLabel2 == null) { 136 jLabel2 = new JLabel(); 137 jLabel2.setText("年限"); 138 } 139 return jLabel2; 140 } 141 142 private JLabel getJLabel1() { 143 if (jLabel1 == null) { 144 jLabel1 = new JLabel(); 145 jLabel1.setText("年利率"); 146 } 147 return jLabel1; 148 } 149 150 private JLabel getJLabel0() { 151 if (jLabel0 == null) { 152 jLabel0 = new JLabel(); 153 jLabel0.setText("本金"); 154 } 155 return jLabel0; 156 } 157 158 private JTextField getJTextField3() { 159 if (jTextField3 == null) { 160 jTextField3 = new JTextField(); 161 } 162 jTextField3.addKeyListener(new KeyAdapter() { 163 public void keyTyped(KeyEvent e) { 164 165 int keyChar = e.getKeyChar(); 166 if (keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9 167 || keyChar == '.') { 168 169 } else { 170 e.consume(); 171 172 } 173 } 174 }); 175 return jTextField3; 176 } 177 178 private JTextField getJTextField2() { 179 if (jTextField2 == null) { 180 jTextField2 = new JTextField(); 181 } 182 jTextField2.addKeyListener(new KeyAdapter() { 183 public void keyTyped(KeyEvent e) { 184 185 int keyChar = e.getKeyChar(); 186 if (keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9 187 || keyChar == '.') { 188 189 } else { 190 e.consume(); 191 192 } 193 } 194 }); 195 return jTextField2; 196 } 197 198 private JTextField getJTextField1() { 199 if (jTextField1 == null) { 200 jTextField1 = new JTextField(); 201 } 202 jTextField1.addKeyListener(new KeyAdapter() { 203 public void keyTyped(KeyEvent e) { 204 205 int keyChar = e.getKeyChar(); 206 if (keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9 207 || keyChar == '.') { 208 209 } else { 210 e.consume(); 211 212 } 213 } 214 }); 215 return jTextField1; 216 } 217 218 private JTextField getJTextField0() { 219 if (jTextField0 == null) { 220 jTextField0 = new JTextField(); 221 jTextField0.addKeyListener(new KeyAdapter() { 222 public void keyTyped(KeyEvent e) { 223 224 int keyChar = e.getKeyChar(); 225 if (keyChar >= KeyEvent.VK_0 && keyChar <= KeyEvent.VK_9 226 || keyChar == '.') { 227 228 } else { 229 e.consume(); 230 231 } 232 } 233 }); 234 } 235 return jTextField0; 236 } 237 238 private static void jiemian() { 239 try { 240 String lnfClassname = PREFERRED_LOOK_AND_FEEL; 241 if (lnfClassname == null) 242 lnfClassname = UIManager.getCrossPlatformLookAndFeelClassName(); 243 UIManager.setLookAndFeel(lnfClassname); 244 } catch (Exception e) { 245 System.err.println("Cannot install " + PREFERRED_LOOK_AND_FEEL 246 + " on this platform:" + e.getMessage()); 247 } 248 } 249 250 boolean y = false; 251 String key2; 252 private JComboBox jComboBox0; 253 254 private JRadioButton jRadioButton0; 255 256 private JComboBox jComboBox1; 257 258 private JButton jButton2; 259 private static final String PREFERRED_LOOK_AND_FEEL = "javax.swing.plaf.metal.MetalLookAndFeel"; 260 public static void main(String[] args) { 261 jiemian(); 262 SwingUtilities.invokeLater(new Runnable() { 263 public void run() { 264 Fulijisuan frame = new Fulijisuan(); 265 frame.setDefaultCloseOperation(Fulijisuan.EXIT_ON_CLOSE); 266 frame.setTitle("Fulijisuan"); 267 frame.getContentPane().setPreferredSize(frame.getSize()); 268 frame.pack(); 269 frame.setLocationRelativeTo(null); 270 frame.setVisible(true); 271 } 272 }); 273 } 274 275 public void jButton0MouseMouseClicked(MouseEvent event) { 276 String key1; 277 boolean canplay = false; 278 String b, c, d; 279 double i = 0, n = 0, p = 0, f = 0; 280 key1 = (String) jComboBox0.getSelectedItem(); 281 key2 = (String) jComboBox1.getSelectedItem(); 282 if (key1 == "求本息和") { 283 b = String.valueOf(jTextField1.getText()); 284 c = String.valueOf(jTextField2.getText()); 285 d = String.valueOf(jTextField0.getText()); 286 if (b.length() > 0 && c.length() > 0 && d.length() > 0) { 287 i = Double.parseDouble(jTextField1.getText()); 288 n = Double.parseDouble(jTextField2.getText()); 289 p = Double.parseDouble(jTextField0.getText()); 290 canplay = deposit(i, n, p); 291 } 292 293 } else if (key1 == "求本金") { 294 b = String.valueOf(jTextField1.getText()); 295 c = String.valueOf(jTextField2.getText()); 296 d = String.valueOf(jTextField3.getText()); 297 if (b.length() > 0 && c.length() > 0 && d.length() > 0) { 298 i = Double.parseDouble(jTextField1.getText()); 299 n = Double.parseDouble(jTextField2.getText()); 300 f = Double.parseDouble(jTextField3.getText()); 301 canplay = principal(i, n, f); 302 } 303 } else if (key1 == "求利率") { 304 b = String.valueOf(jTextField0.getText()); 305 c = String.valueOf(jTextField2.getText()); 306 d = String.valueOf(jTextField3.getText()); 307 if (b.length() > 0 && c.length() > 0 && d.length() > 0) { 308 p = Double.parseDouble(jTextField0.getText()); 309 n = Double.parseDouble(jTextField2.getText()); 310 f = Double.parseDouble(jTextField3.getText()); 311 canplay = interest(p, n, f); 312 } 313 } else if (key1 == "求年数 ") { 314 b = String.valueOf(jTextField0.getText()); 315 c = String.valueOf(jTextField1.getText()); 316 d = String.valueOf(jTextField3.getText()); 317 if (b.length() > 0 && c.length() > 0 && d.length() > 0) { 318 p = Double.parseDouble(jTextField0.getText()); 319 i = Double.parseDouble(jTextField1.getText()); 320 f = Double.parseDouble(jTextField3.getText()); 321 canplay = year(p, i, f); 322 } 323 } else if (key1 == "求等额本息还款") { 324 b = String.valueOf(jTextField0.getText()); 325 c = String.valueOf(jTextField1.getText()); 326 d = String.valueOf(jTextField2.getText()); 327 if (b.length() > 0 && c.length() > 0 && d.length() > 0) { 328 p = Double.parseDouble(jTextField0.getText()); 329 i = Double.parseDouble(jTextField1.getText()); 330 n = Double.parseDouble(jTextField2.getText()); 331 canplay = loan(p, i, n); 332 } 333 } 334 if (canplay == false) { 335 JOptionPane.showMessageDialog(null, "请输入正确的数字!"); 336 } 337 } 338 339 public void jButton1MouseMouseClicked(MouseEvent event) { 340 this.jTextField0.setText(null); 341 this.jTextField1.setText(null); 342 this.jTextField2.setText(null); 343 this.jTextField3.setText(null); 344 } 345 346 public void jRadioButton0MouseMouseClicked(MouseEvent event) { 347 if (y == false) 348 y = true; 349 else 350 y = false; 351 } 352 353 public boolean deposit(double i, double n, double p) { 354 double f = 0; 355 if (i > 0 && n > 0 && p > 0) { 356 if (n > 200) 357 return false; 358 if (key2 == "复利计算") { 359 if (y == true) { 360 double p2 = p; 361 for (int a = 0; a < n; a++) { 362 p = p + f; 363 f = p * (1 + i); 364 } 365 366 } else { 367 double s = 1; 368 for (int a = 0; a < n; a++) { 369 370 s = s * (1 + i); 371 } 372 f = p * s; 373 374 } 375 } else { 376 if (y == true) { 377 378 f = p * n *( i * n+ 1); 379 } else { 380 381 f = p * (i * n + 1); 382 } 383 } 384 this.jTextField3.setText(String.format("%.2f", f)); 385 return true; 386 } else 387 return false; 388 } 389 390 public boolean principal(double i, double n, double f) { 391 double p = 0, s = 1; 392 if (i > 0 && n > 0 && f > 0) { 393 if (n > 200) 394 return false; 395 if (key2 == "复利计算") { 396 for (int a = 0; a < n; a++) { 397 s = (i + 1) * s; 398 } 399 p = f * (1 / s); 400 401 } else { 402 p = f * (1 / (1 + i * n)); 403 404 } 405 this.jTextField0.setText(String.format("%.2f", p)); 406 407 return true; 408 } else 409 return false; 410 } 411 412 public boolean interest(double p, double n, double f) { 413 double i = 0; 414 if (f > 0 && n > 0 && p > 0) { 415 if (n > 200) 416 return false; 417 if (key2 == "复利计算") { 418 i = Math.pow(f / p, 1.0 / n) - 1; 419 420 } else { 421 i = (f - p) / (p * n); 422 423 } 424 this.jTextField1.setText(String.format("%.2f", i)); 425 426 return true; 427 } else 428 return false; 429 } 430 431 public boolean year(double p, double i, double f) { 432 double n = 0; 433 434 if (i > 0 && f > 0 && p > 0) { 435 if (key2 == "复利计算") { 436 n = Logarithm.log(f / p, 1 + i); 437 438 } else { 439 n = (f - p) / (p * i); 440 441 } 442 this.jTextField2.setText(String.format("%.2f", n)); 443 return true; 444 } else 445 return false; 446 } 447 448 public boolean loan(double p, double i, double n) { 449 double f = 0; 450 if (n > 200) 451 return false; 452 if (i > 0 && n > 0 && p > 0) { 453 i = i / 12; 454 n = n * 12; 455 f = p * i * Math.pow(1 + i, n) / (Math.pow(1 + i, n) - 1); 456 457 this.jTextField3.setText(String.format("%.2f", f)); 458 return true; 459 } else 460 return false; 461 462 } 463 }
1 public class Logarithm { 2 static public double log(double value, double base){ 3 return Math.log(value)/Math.log(base); 4 5 } 6 7 }
六、运行结果
七、总结
由于我跟同伴的编程能力都不好,老师这次让我们实现的功能选项对我们来说难度很大,所以就选了相对较简单点的界面设计,但是结果还不是很理想。但之后会多花点时间把不懂得尽量补回来~
github 地址:https://github.com/xujiayi-gg/ggg