201421123002 翁珊, 201421123006 黃月梅, 2014211007 徐曉珊
題目描述:
我們在個人作業1中,用各種語言實作了一個指令行的四則運算小程式。進一步,本次要求把這個程式做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手機上的),成為一個有基本功能、一定價值的程式。
1.記錄使用者的對錯總數,程式退出再啟動的時候,能把以前的對錯數量儲存并在此基礎上增量計算。
2.有計時功能,能顯示使用者開始答題後的消耗時間。
3.界面支援中文簡體/中文繁體/英語,使用者可以選擇一種;
在軟體開發中,我們需要大量使用工具來輔助設計,每個環節大家都要善于學習和使用工具。設計的時候,請使用思維導圖設計你的子產品之間的關系,
需求分析:
- 除了整數以外,還要支援真分數的四則運算,真分數的運算,例如:1/6 + 1/8 = 7/24
- 運算符為 +, −, ×, ÷
- 并且要求能處理使用者的輸入,并判斷對錯,打分統計正确率。
- 要求能處理使用者輸入的真分數, 如 1/2, 5/12 等。
思維導圖:

關鍵代碼分析:
(1)Frames類制作基本架構
flow = new FlowLayout();
flow.setAlignment(FlowLayout.LEFT)
flow.setHgap(30);
flow.setVgap(15);
setTitle(name);
setSize(525, 500);
setLayout(flow);
(2)界面支援切換語言利用按鈕的事件監聽器實作(以下隻顯示繁體部分)
B6.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
B1.setText("生成題目");
B2.setText("檢視答案");
B3.setText("清除資訊");
B4.setText("送出答案");
L1.setText("題目數");
L2.setText("範圍");
L3.setText("伱的答案");
}
(3)計時功能實作
- ...
- while(true)
- {
- validate();
- if(open==1)
- Minute.setText(String.valueOf(M));
- Second.setText(String.valueOf(S));
- if(H==99)
- H=0;
- S++;
- }
- if(S==60)
- S=0;
- M++;
- if(M==60)
- M=0;
- try{
- Thread.sleep(10);
- catch(Exception e){
- H++;
- if(clear==1)
- M=S=H=0;
- clear=0;
(4)compute類進行+,—, *,÷的運算(以加法為例)
public static String add(Frac a, Frac b)
{
int i, j, k, s, m, n, p;
i = a.getZi();
j = a.getMu();
k = b.getZi();
s = b.getMu();
m = i * s + j * k;
n = s * j;
p = Answer.getGCD(m, n);
return Answer.Reduction(m / p, n / p);
}
(5)進行分數的構造及化簡
public class Frac {
private int Zi;
private int Mu;
private String fra;
public Frac() {
}
(6)Test類調用四則運算圖形架構
package hw2;
public class Test { public static void main(String[] args) throws Throwable{
Frac f1 = new Frac();
Frac f2 = new Frac();
new Frames("歡迎來到711制作的四則運算",f1,f2); } }
實驗結果:
語言切換功能展示:
a.簡體:
b.繁體:
c.英語:
結對照片:
coding連結:
https://coding.net/u/watermelon123/p/homework2/git/tree/master
實驗小結:
本次實驗經我和我的隊友黃月梅、徐曉珊讨論一緻決定采用我上次的實驗為基礎來進行圖形化的程式設計。是以,我負責主體的程式設計,黃月梅和徐曉珊負責代碼複審、測試以及提出不足。
我們保持了上次的實驗的大體架構及内容,主要的工作是加上了GUI 的架構來實作圖形界面。還有兩項附加的功能,一是語言的切換,支援中文,繁體以及英文的切換;二是計時器功能的實作,這項功能的實作對我們來說有點困難,但是借助上網,請教同學等方式,最終順利完成了此項功能。
感覺這次的結對程式設計,讓我深刻地了解到真的是人多力量大,在程式設計的過程當中,遇到困難,可以一同商讨,查找資料;出現錯誤也能及時的改正;在最後寫報告的時候也分工合作,取長補短,更快更好的完成......總之,這次結對程式設計的體驗不錯!
漢堡包式評價?
先來一片面包:三人經過讨論很快達成對程式設計的共識。并且我們三個是同一個宿舍的,處于一個相對比較安全的環境。
再把肉放上:在這次的程式設計過程中遇到了不少的問題,後來經過我們的商讨及查找資料等得到了解決。由于我們三個的程式設計能力都相對比較薄弱,遇到棘手的問題的時候比較缺乏耐心。但是,在不斷地實踐中,我相信我們會更上一層樓的。
然後再來一片面包:結對程式設計能提高程式設計的效率,也能更好地發現自己的不足并改進。
PSP表格:
PSP2.1 | Personal Software Process Stages | Estimated Time(hour) | Actual Time (hour) |
Planning | 計劃 | 0.5 | |
· Estimate | 估計這個任務需要多少時間 | 10 | 12 |
Development | 開發 | 5 | 4 |
· Analysis | 需求分析 (包括學習新技術) | 1 | |
· Design Spec | 生成設計文檔 | ||
· Design Review | 設計複審 | 1.5 | 2 |
· Coding Standard | 代碼規範 | ||
· Design | 具體設計 | ||
· Coding | 具體編碼 | 6 | 6.5 |
· Code Review | 代碼複審 | 1/3 | |
· Test | 測試(自我測試,修改代碼,送出修改) | 2/3 | |
Reporting | 報告 | ||
· | 測試報告 | 1/6 | |
計算工作量 | 0.25 | ||
并提出過程改進計劃 |