1. 程式人生 > >結對項目-四則運算出題程序(GUI版)

結對項目-四則運算出題程序(GUI版)

頁面 入參 inf 多層 深入 java 信息 算法實現 函數

目錄:

一.致搭檔(含項目地址)

二.PSP(planning)

三.結對編程中對接口的設計

四.計算模塊接口的設計與實現過程

五.計算模塊接口部分的性能改進

六.計算模塊部分單元測試展示

七.計算模塊部分異常處理說明

八.界面模塊的詳細設計過程

九.界面模塊與計算模塊的對接

十.結對過程的描述

十一.結對編程的優缺點

十二.PSP(actual)


一、致搭檔:

  隊友:李庭娟(我很喜歡把這位隊友叫娟子,感覺很親切)

首先非常非常感謝這位結對搭檔——娟子,從最初組隊到如今合作,始終非常信任我,鼓勵我。性格灑脫,熱情親切。跟她合作過程中,真的沒有一絲分歧。這些天和我一起討論,分工,合作這個作業。都說“男女搭配,幹活不累”,我是真的體會到了。完成項目的整個過程中,她始終積極主動的分擔任務。我倒是很慚愧,由於個人能力的原因,不能承擔著一個男生應該承擔的任務。臨近截止日期,我還催著她和我一起熬夜趕項目,非常非常不好意思。在此,衷心地向我的搭檔說句感謝,很開心能有一次結對項目的作業,非常開心能有一次這樣的機會去深入認識了解身邊的同學,最最開心的是兩個人在這個過程中的彼此信任與支持。不管結果怎麽樣,這是一次不同尋常的學習經歷,不僅限於知識的學習和項目的制作,還有的是同伴的合作。

我的Coding.net源碼倉庫地址:https://git.coding.net/Vsmile1997/homework.git

搭檔博客地址:http://www.cnblogs.com/tingjuanli/p/8746012.html

二、PSP(planning)

PSP

任務內容

計劃時間(min)

Planning

計劃

30

Estimate

估計這個任務需要多少時間,並規劃大致工作步驟

10

Development

開發

780

Analysis

需求分析

23

Design Spec

生成文檔

0

Design Review

設計復審

0

Coding Standard

代碼規範

7

Design

具體設計

40

Coding

具體編碼

210

Code Review

代碼復審

30

Test

測試

30

Reporting

報告

160

Test Report

測試報告

180

Size Measurement

計算工作量

40

Postmortem & Process Improvement Plan

事後總結, 並提出過程改進計劃

60

三、結對編程中對接口的設計

1、Information Hiding

  信息隱藏是結構化設計於面向對象設計的基礎。在結構化中函數的概念和面向對象的封裝思想都來源於信息隱藏。信息隱藏原則的主要應用有:

(1)多層設計中的層與層之間加入接口層;

(2)所有類與類之間都通過接口類訪問;

(3)類的所有數據成員都是private,所有訪問都是通過訪問函數實現的。

我們的做法:信息隱藏的目的主要是隱藏復雜度,它所具有的封裝思想就是體現了這個目的。我們把程序分解為各個模塊(主模塊,生成算式模塊,計算模塊等),隱藏每個模塊具體算法的實現原理,而只需要知道每個模塊的功能,按需調用即可。

2、Interface Design

接口設計,我理解的接口就是契約,一種職責。在我們的項目中使用接口指明了多個類需要實現的方法,不需要知道對象對應的類,就可以知道對象之間的交互界面,提高了編程效率。

3、Loose Coupling

松耦合就是降低系統部件和部件之間的耦合性,也就是降低部件的依賴性,使得部件之間相互獨立,這樣對於日後的系統維護以及擴展都是有好處的。因此,耦合程度,模塊與模塊之間的聯系性就更高,系統的靈活性就越低,報錯率就更高。我們的理解就是,松耦合歸根結底就是一種“模塊化”編程思想,將項目盡可能多的分為相互獨立的幾個模塊,便於調用和實現優化。我們在項目中也力求實現模塊化處理,做到松耦合。

四、計算模塊接口的設計與實現過程

方法說明:

Command:調用其它方法,實現整個程序的功能;

arithmetic()方法:綜合了不同定制要求的算式方法;

Simple()方法:產生滿足定制需求的加減算式;

OnlyMD()方法:產生滿足定制需求的加減乘除算式

OnlyBra()方法:產生滿足定制需求的含括號的加減算式;

BothMDBra()方法:產生滿足定制需求的含括號的加減乘除算式;

Youxianji()方法:處理計算結果過程中的優先級問題;

Stack()方法:處理後綴表達式的運算順序問題;

login.java,ShowGridLayout.java,MyExGUI.java等實現GUI面板的Java文件。

技術分享圖片

五、計算模塊接口部分的性能改進

  1.性能分析改進

在整體編程結束後,進行性能分析與改進是非常有必要的。因為在小規模的數據下或者是一般情況下,功能的實現是不太會涉及到優化算法的。但是,個別特例或者是大規模的數據往往會導致程序報錯,這就要求我們需要對程序進行性能的優化改進。比如,我們在生成算式過程中,由於上下限和算式個數選擇上偏於極端情況,算式的結果“遲遲”無法生成,CPU占有率極大。因此我們在算法中做了異常處理,並且規範輸入,這樣一來,軟件的使用性能上就得到了優化改進。

   2.性能分析截圖

  項目總體分析圖,從內存,多線程,CPU等方面分析了計算模塊的性能,截圖如下:

技術分享圖片

性能分析過程截圖:

技術分享圖片

技術分享圖片

技術分享圖片

六、計算模塊部分單元測試展示

測試Command.java類(下圖的單元測試中的Main即代碼中的Command,截圖時未更名):

package test;

import static org.junit.Assert.*;

import org.junit.Before;
import org.junit.Test;

public class CommandTest {

	private static Command con = new Command();
	@Before
	public void setUp() throws Exception {
	}

	@Test
	public void testSimple() {
		con.Simple(2,50,3);//產生2個50以內最多3個運算符的算式
	}

	@Test
	public void testOnlyMD() {
		con.OnlyMD(1,500,2);//產生1個500以內最多2個運算符的算式
	}

	@Test
	public void testOnlyBra() {
		con.OnlyBra(10,50,4,1);//故意輸入參數錯誤,檢驗單元測試報錯
	}

	@Test
	public void testBothMDBra() {
		fail("Not yet implemented");//未編寫單元測試函數,單元測試失敗
	}

}

技術分享圖片

代碼覆蓋率:

技術分享圖片

七、計算模塊部分異常處理說明

技術分享圖片

八、界面模塊的詳細設計過程

1.登陸面板:

單用戶登陸:username:1 password:1

技術分享圖片

技術分享圖片

對應部分代碼展示:

技術分享圖片
 1 JButton b_log=new JButton("登錄");  
 2         b_log.addActionListener(new ActionListener() {  
 3             public void actionPerformed(ActionEvent e) {  
 4                 // TODO Auto-generated method stub  
 5                 //獲取用戶名和密碼,進行校驗  
 6                 String myUsername=tf_name.getText(); 
 7                 String myPassword=password.getText();  
 8                 if(myUsername.equals("1")&&              myPassword.equals("1")){  
 9                     JOptionPane.showMessageDialog(null, "登陸成功!");  
10                     f.dispose();
11                     //new MyExGUI();
12                     new ShowGridLayout();
13                     
14                 }
15                 else{  
16                     JOptionPane.showMessageDialog(null, "賬號或密碼錯誤!");  
17                     tf_name.setText( "");  
18                     password.setText( "");  
19                 }  
20                   
21             }  
22         });  
View Code

2.定制面板:

通過輸入合理有效的數值,定制不同需求的題目

技術分享圖片

對應部分代碼展示:

技術分享圖片
 1 JButton b_enter=new JButton("進入");  
 2         b_enter.addActionListener(new ActionListener() {  
 3             public void actionPerformed(ActionEvent e) {
 4  
 5                 String myNum=tf_num.getText(); 
 6                 int n = Integer.parseInt(myNum);
 7                 
 8                 String myLow=tf_low.getText();
 9                 int ml = Integer.parseInt(myLow);
10                 
11                 String myUp=tf_up.getText(); 
12                 int mu = Integer.parseInt(myUp);
13                 
14                 String myOp=tf_op.getText(); 
15                 int o = Integer.parseInt(myOp);
16                 
17                 String myMul=tf_mul.getText();
18                 
19                 String myBak=tf_bak.getText(); 
20                 
21                 if((n>0&& n<10001) && (ml>0&& ml<101) && (mu>=50&&mu<1001) && (o>0&&o<11) &&
22                         ( myMul.equals("0")|| myMul.equals("1") )&& 
23                         ( myBak.equals("0")|| myBak.equals("1") )
24                   ){
25                     JOptionPane.showMessageDialog(null, "歡迎使用!");
26                         f.dispose();
27                         new MyExGUI(n,ml,mu,o,myMul,myBak);
28                     
29                 }
30                 else{  
31                     JOptionPane.showMessageDialog(null, "你輸入的數據有錯!");  
32                     tf_num.setText( "");
33                     tf_low.setText( "");  
34                     tf_up.setText( "");
35                     tf_op.setText( "");  
36                     tf_mul.setText( "");
37                     tf_bak.setText( "");  
38                 }  
39                   
40             }  
41         }); 
View Code

九、界面模塊與計算模塊的對接

UI的整體設計思路:

我們想設計登陸,定制,菜單,統計4個面板:

(1)登陸頁面包含用戶的名稱和密碼以及多種語言的選擇;

(2)定制頁面包含具體不同需求的題目定制以及輸入異常數據的提示處理;

(3)菜單頁面包含啟動開始答題項,文件的保存,本地文件的上傳的功能;

(4)統計頁面包含對答題結果的統計和分析,給出分數柱狀圖。

部分圖片展示如下:

技術分享圖片

文件的上傳

技術分享圖片

保存文件:

技術分享圖片

技術分享圖片

題目解答:每題5分。給出對應得分並繪制柱形圖

技術分享圖片

十、描述結對的過程,提供非擺拍的兩人在討論的結對照片。

1.一開始本打算做網頁版的,但是前端我們都不大熟悉,所以決定做GUI界面。此次結對編程中,一人負責內部功能的算法實現,一人負責界面,各自負責編寫自己的那部分代碼;對接過程中,我們一起合作,在這一階段也充分感受到了結對編程的高效,也意識到好隊友的挑選對項目的完成有很大的促進促進作用。

2.結對照片展示

技術分享圖片

十一、結對編程的優缺點

1.結對編程的優缺點

優點:充分鍛煉了兩個人的合作,溝通能力。兩個人之間可以相互學習交流,從而取長補短。後期兩人共同對接模塊時,充分結合了兩人的優點,使對接較為順利的完成。

缺點:需要一段磨合時間,剛開始時效率不高,需要相互熟悉了解代碼風格之後漸入佳境。

2.結對個人優缺點

我的優點: (1)擅長算法,編碼效率高。對項目進度的把握很有規劃

(2)編程思路清晰,能夠盡最大的能力做到最好

       (3)既細心又耐心。在結對編程中能很快地處理bug

缺點: (1)缺乏主見,在選擇上搖擺不定

搭檔優點:(1)編程思路清晰,能夠盡自己最大的能力實現自己能做到的最好

(2)耐心,不懼怕問題的出現,出現問題時不驕不躁,能靜下心來處理解決問題

缺點: (1)我認為娟子最大的缺點就是沒有缺點,哈哈哈哈哈!

十二、在你實現完程序之後,在附錄提供的PSP表格記錄下你在程序的各個模塊上實際花費的時間。

PSP

任務內容

計劃時間(min)

完成時間(min)

Planning

計劃

30

30

Estimate

估計這個任務需要多少時間,並規劃大致工作步驟

10

10

Development

開發

780

2700

Analysis

需求分析

23

40

Design Spec

生成文檔

0

20

Design Review

設計復審

0

20

Coding Standard

代碼規範

7

15

Design

具體設計

40

60

Coding

具體編碼

210

1800

Code Review

代碼復審

30

45

Test

測試

30

700

Reporting

報告

160

840

Test Report

測試報告

180

780

Size Measurement

計算工作量

40

30

Postmortem & Process Improvement Plan

事後總結, 並提出過程改進計劃

60

30

結對項目-四則運算出題程序(GUI版)