结对项目作业
https://git.coding.net/yfxxf/JD.git
PSP2.1 |
任务内容 |
计划共完成需要的时间(min) |
实际完成需要的时间(min) |
Planning |
计划 |
25 |
35 |
· Estimate |
· 估计这个任务需要多少时间,并规划大致工作步骤 |
25 |
35 |
Development |
开发 |
285 |
290 |
· Analysis |
· 需求分析 (包括学习新技术) |
65 |
125 |
· Design |
· 具体设计 |
35 |
50 |
· Coding |
· 具体编码 |
125 |
153 |
· Code Review |
· 代码复审 |
25 |
20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
55 |
40 |
Reporting |
报告 |
80 |
182 |
· Test Report |
· 测试报告 |
20 |
20 |
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
65 |
162 |
static private String createFormula() { int digital, sign = 0; char symbol = 0; String formula = ""; digital = (int)(Math.random()*20); formula = formula + digital; for(int i=0; i<sumOfOperator; i++) { if(sign >= 2 || !haveMulityAndDivid) //没有乘除的话只生成+ - sign = (int)(Math.random()*2); else sign = (int)(Math.random()*4); if(sign == 0) { symbol = '+'; digital = (int)(Math.random()*maxNum+minNum); } else if(sign == 1) { symbol = '-'; digital = (int)(Math.random()*digital+minNum); //减去上一个digital } else if(sign == 2) { symbol = '*'; digital = (int)(Math.random()*(100/(digital+1))+1); } else if(sign == 3) { symbol = '÷'; for(int j=2; j<=digital; j++) if(digital%j == 0) { digital = j; break; } } formula = formula + symbol + digital; } return formula; }
1、随机生成算式第一个数
2、依次确定(生成)五个运算符以及第二个数字
(1)sign用于避免出现连续的“乘”、“除”运算(原理:sign随机确定运算符,sign的上一个值>=2时,后面生成的运算符只有“+”、“-”)
(2)为避免出现负数,当sign为“-”时,后一个数的生成范围为“比上一个数小”
(3)当sign为“×”时,为避免出现大雨100的结果,第二个数的生成范围为[0,100/上一个数]
(4)当sign为“÷”时,为保证不出现分数,第二个数为 [2~第一个数] 这个范围内找“第一个数的因数”生成
3、实现字符串拼接
import static org.junit.Assert.*; import java.io.IOException; import org.junit.Test; public class LibTest { @Test public void testLib() { Lib lib = new Lib(); } @Test public void testSetOps() { Lib.setOps(3); Lib.setOps(5); } @Test public void testSetOpLevel() { Lib.setOpLevel(true); Lib.setOpLevel(false); } @Test public void testSetNum() { Lib.setNum(5, 50); Lib.setNum(1, 100); } @Test public void testSetSum() { Lib.setSum(15); } @Test public void testPrintFormula() { Lib.setSum(5); Lib.setOps(5); Lib.setNum(1, 100); Lib.setOpLevel(true); try { Lib.printFormula(15); Lib.printFormula(); } catch(IOException ioe) { ioe.printStackTrace(); } } }
在命令行测试中,对用户输入的命令即其参数进行判断:
1. 当输入的不是应有命令时,对用户做出提醒,输入正确的命令,列出合法命令
2.当用户输入的参数错误时,对用户做出提醒,并解释各个参数的写法及各个命令的含义
3.对于合法的命令和参数,对参数进行检查,看是否符合要求:不能出现负数题数,负数符号数,下界不能大于上界等。
public GUI() { Color color = new Color(200,200,200); Font font = new Font("SansSerif",Font.BOLD,13); Font font2 = new Font("SansSerif",Font.CENTER_BASELINE,28); JPanel p1 = new JPanel(); p1.setLayout(new GridLayout(6,2)); JLabel NOQ= new JLabel(" 需要的题目数量" +"(1~10000):"); NOQ.setFont(font); p1.add(NOQ); p1.add(sum); JLabel RON = new JLabel(" 题目的数值范围(下界1~100):"); RON.setFont(font); p1.add(RON); p1.add(min); p1.add(new JLabel(" 题目的数值范围(上界50~1000):")); p1.add(max); JLabel NOO = new JLabel(" 题目中最多存在运算符数量:"); NOO.setFont(font); p1.add(NOO); p1.add(ops); JLabel isMul = new JLabel(" 题目中是否有乘除法:"); isMul.setFont(font); p1.add(isMul); p1.add(b2); b2.setBackground(new Color (200,200,200)); p1.setFont(font); JPanel p2 = new JPanel(); Cre.addActionListener(new ButtonListener()); Cre.setFont(font); Cre.setBackground(new Color(250,250,250)); p2.add(Cre,BorderLayout.WEST); add(p1,BorderLayout.CENTER); JLabel title = new JLabel("四则运算题目生成系统"); title.setFont(font2); JPanel p3 = new JPanel(); p3.add(title,BorderLayout.CENTER); add(p3,BorderLayout.NORTH); add(p2,BorderLayout.SOUTH); setBackground(Color.cyan); p1.setBackground(new Color(200,200,200)); p2.setBackground(new Color (200,200,200)); p3.setBackground(new Color (200,200,200)); }
利用GUI中类似网格的布局方式,六行两列布局,文字和输入框相对应
简陋的不行的界面……但是同时也还算简洁
2相对而言工作量小,更容易干活细致
3可以互相讨论,各自陈明利害
缺点
1有些时候意见不统一,容易互相耽误
2做工节奏不一致,需要时间磨合