博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
结对项目——四则运算
阅读量:5889 次
发布时间:2019-06-19

本文共 3741 字,大约阅读时间需要 12 分钟。

一、github地址

https://github.com/kinglc/AutoCalculator

二、PSP

PSP2.1  

   Personal Software Process Stages    

 预估耗时(分钟)

 实际耗时(分钟)

Planning

计划

30

30

·Estimate

·估计这个任务需要多少时间

30

30

Development

开发

2010

 2160

·Analysis

·需求分析(包括学习新技术)

480

400

·Design Spec

·生成设计文档

60

50

·Design Review

·设计复审

30

30

·Coding Standard

·代码规范

30

60

·Design

·具体设计

240

300

·Coding

·具体编码

900

1080

·Code Review

·代码复审

90

60

·Test

·测试

180

180

Reporting

报告

 70

 70

·Test Report

·测试报告

30

30

·Size Measurement

·计算工作量

10

10

·Postmortem&Process Improvement Plan

·事后总结并提出过程改进计划

30

30

 

合计

2110

2260

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

三、设计思路

  1.整个项目包括生成题目及存储、解题、GUI、倒计时及历史记录功能。(队友博客地址https://home.cnblogs.com/u/shera)

  2.解题:

    按优先级分为小括号、两种乘方、乘除和加减。用while处理完算式中所有包含该运算符的部分,依次往后确定优先级。使用substring获取计算的数字,转为BigDecimal类型提高精度。

    乘方运算中由于pow函数参数为double,为了保证精度此处使用for循环进行计算。

 
View Code

 

    分数单独开一个类,分为分子,分母进行计算。类中内含加减乘除约分方法,其中约分为private。

 
View Code

  3.GUI

    使用自由度相对较高的FlowLayout进行布局,添加JLabel,JButton,JTextField控件。对于乘方的设置:

1 jrb1.setFont(new java.awt.Font("Dialog", 1, 15));2         jrb2.setFont(new java.awt.Font("Dialog", 1, 15));3         ButtonGroup bg = new ButtonGroup();4         bg.add(jrb1);5         bg.add(jrb2);6         jrb1.setSelected(true);

  4.倒计时

    使用Thread.sleap(1000)计时,若不提交答案时间结束则重置时间,减少生命,并重置算式。

1    while (time >= 0) { 2             jltime.setText( "" + time ); 3             try { 4                 Thread.sleep(1000); 5             } catch (InterruptedException e) { 6                 e.printStackTrace(); 7             } 8             time--; 9             if(time==-1) {10                 time=20;11                 life--;12                 jllife.setText("生命"+life);13                 jltime.setText("时间"+time);14                 Create c= new Create(power_form);15                 jlformula.setText(c.formula);16 17             }18         }

  5.历史记录

    新建一个score.txt文件,每次得分为0时FileWriter.writer会在文件末尾写入时间和得分,并弹窗显示最新的十条记录。

1    try { 2                                 Calendar c = Calendar.getInstance(); 3                                 FileWriter writer = new FileWriter(scorefile, true); 4                                 writer.write(c.get(Calendar.MONTH)+1+"月"+c.get(Calendar.DAY_OF_MONTH)+"日" 5                                                 +c.get(Calendar.HOUR_OF_DAY)+"时"+c.get(Calendar.MINUTE)+"分" + 6                                                  "  得分:  "+score+"\n"); 7                                 writer.close(); 8                             } catch (IOException e1) { 9                                 e1.printStackTrace();10                             }11                             try {12                                 time=-2;13                                 showscores();14                                 end();15                             } catch (IOException e1) {16                                 e1.printStackTrace();17                             }
1     public void showscores() throws IOException { 2         BufferedReader bfr = new BufferedReader(new FileReader(scorefile)); 3         String score[]= new String[1000]; 4         String s,ans=""; 5         int pos=0; 6         while ((s=bfr.readLine())!=null){ 7             score[pos++]=s; 8         } 9         for(i=pos-10;i
=0){11 ans+=score[i]+"\n";12 }13 JOptionPane.showMessageDialog(null, ans, "历史记录", JOptionPane.INFORMATION_MESSAGE);14 15 }16 17 public void end(){18 System.exit(0);19 }

三、总结

  首先从知识方面,熟悉了java的GUI,对文件的操作,加深了类的认识,更了解了一些此前完全没有接触过的类和方法。

  从项目经验来说,结对项目就存在着交互。项目一共四个类,Fraction和Calculator是我写的,Create是队友写的,Fraction只在Calculator中调用,都没有什么大问题。而MainJF是不断在两个人之间交替,我写完GUI计时计算,队友接着写生成,生成之后两人一起研究历史记录,历史记录有涉及到之前的计时,就会难免杂乱。不过也是由于其他事情比较多没有在一段时间内专心做这一项,没能顺畅地走下一套流程。不过这也是很难得的一次经历了。

转载于:https://www.cnblogs.com/linanyj/p/9105241.html

你可能感兴趣的文章
23种设计模式介绍(三)---- 行为型模式
查看>>
项目owner看这里,MaxCompute全表扫描新功能,给你“失误”的机会
查看>>
2018-07-16笔记(tomcat 配置)
查看>>
用框架思维解读生活目标
查看>>
selinux
查看>>
ci完整集成
查看>>
深度学习目标检测(object detection)系列(二) SPP-Net
查看>>
Python类、模块、包的概念及区别
查看>>
FreeMarker笔记 第四章 其它
查看>>
Oracle 11g 新特性简介(一)
查看>>
详解Oracle的几种分页查询语句
查看>>
从零部署RHEV3.3红帽虚拟化-2 (用kvm虚拟机安装RHEL6.4)
查看>>
Varnish 3.X详解
查看>>
javascript继承方式详解
查看>>
lnmp环境安装sh脚本
查看>>
大型管理类软件项目开发,为什么必须要有代码生成器的深切体会总结
查看>>
白话讲反射技术 --- 适合初学者入门引导
查看>>
css变形 transform
查看>>
Entity Framework 4 in Action读书笔记——第七章:持久化对象到数据库:使用SaveChanges持久化实体...
查看>>
Android安全讲座第八层 android应用的安装和卸载
查看>>