结对项目作业

1)在文章开头给出Coding.Net项目地址

https://git.coding.net/yfxxf/JD.git

2)在开始实现程序之前,在下述PSP表格记录下你估计将在程序的各个模块的开发上耗费的时间。

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3)看教科书和其它资料中关于Information Hiding, Interface Design, Loose Coupling的章节,说明你们在结对编程中是如何利用这些方法对接口进行设计的。

 

 

4)计算模块接口的设计与实现过程。设计包括代码如何组织,比如会有几个类,几个函数,他们之间关系如何,关键函数是否需要画出流程图?说明你的算法的关键(不必列出源代码),以及独到之处。

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、实现字符串拼接

 

6)计算模块部分单元测试展示。展示出项目部分单元测试代码,并说明测试的函数,构造测试数据的思路。并将单元测试得到的测试覆盖率截图,发表在博客中。只需要测试命令行部分,且该部分覆盖率到90%以上,否则单元测试部分视作无效。

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();
		}
	}

}

  

7)计算模块部分异常处理说明。在博客中详细介绍每种异常的设计目标。每种异常都要选择一个单元测试样例发布在博客中,并指明错误对应的场景。 

    在命令行测试中,对用户输入的命令即其参数进行判断:

      1. 当输入的不是应有命令时,对用户做出提醒,输入正确的命令,列出合法命令

      2.当用户输入的参数错误时,对用户做出提醒,并解释各个参数的写法及各个命令的含义

      3.对于合法的命令和参数,对参数进行检查,看是否符合要求:不能出现负数题数,负数符号数,下界不能大于上界等。

8)界面模块的详细设计过程。在博客中详细介绍界面模块是如何设计的,并写一些必要的代码说明解释实现过程。

 

    

    

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中类似网格的布局方式,六行两列布局,文字和输入框相对应

  简陋的不行的界面……但是同时也还算简洁

9)界面模块与计算模块的对接。详细地描述UI模块的设计与两个模块的对接,并在博客中截图实现的功能。

 

//10)描述结对的过程,提供非摆拍的两人在讨论的结对照片。

  和这个队友平时就有些共同语言,分工方面也比较方便,组队水到渠成

  照片……这个暂时真没有……

11)

优点

1分工合理,效率更高

2相对而言工作量小,更容易干活细致

3可以互相讨论,各自陈明利害

缺点

1有些时候意见不统一,容易互相耽误

2做工节奏不一致,需要时间磨合

 

 

posted @ 2018-04-09 23:45  云妹抖抖抖  阅读(217)  评论(3编辑  收藏  举报