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

關鍵代碼分析:
(1)Frames類制作基本架構
public class Frames extends JFrame {
private static final long serialVersionUID = 1L;
int creat , fw;
JButton B1, B2, B3,B4;
int open=0,M=0,S=0,H=0,num=1,clear=0;
JTextField T1, T2, T3, T4, T5;
JTextArea JT1;
FlowLayout flow;
String S1, S2;
}
(2)Aswer類進行使用者結果的正誤判斷
static boolean compare(String a, String b)
{
if (a.equals(b))
{System.out.println("回答正确");
return true;}
else
{
System.out.println("回答錯誤,正确答案是" + b);
return false;
}
}
(3)compute類進行+,—, *,÷的運算(以乘法為例)
public static String mul(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 * k;
n = j * s;
p = Answer.getGCD(m, n);
return Answer.Reduction(m / p, n / p);
}
(4)進行分數的構造及化簡
public class Frac {
private int Zi;
private int Mu;
private String fra;
public Frac() {
}
(5)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);
}
}
(6)界面支援切換語言利用按鈕的事件監聽器實作(以下隻顯示繁體部分)
B6.addActionListener(new ActionListener(){//選擇繁體
public void actionPerformed(ActionEvent e) {
B1.setText("生成題目");
B2.setText("檢視答案");
B3.setText("清除資訊");
B4.setText("送出答案");
L1.setText("題目數");
L2.setText("範圍");
L3.setText("伱的答案");
}
});
(7)計時功能實作
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)
{
H=0;
S=0;
M++;
}
if(M==60)
{
M=0;
S=0;
H=0;
}
try{
Thread.sleep(10);
}
catch(Exception e){
}
H++;
}
if(clear==1)
{
M=S=H=0;
Minute.setText(String.valueOf(M));
Second.setText(String.valueOf(S));
clear=0;
}
結對照片:
coding連結:https://git.coding.net/Amber9611/sizeyunsuan2.git
psp表格:
小結:
由于我上次是采用Python語言程式設計,而我對Python的圖形界面比較生疏,曉珊采用的是C++實作圖形界面也較難,而大家都學習過Java語言,較易于實作圖形界面;是以三人達成共識,本次實驗是基于翁珊同學上次的四則運算實驗1進行修改。
首先我們一起讨論了總體的布局和分析其需要的功能。也覺得翁珊同學的控制題目範圍的這個設計很不錯,也繼續沿用了下來。主要是增加了GUI架構、計時功能以及語言的切換功能。由于這個實驗翁珊比較熟悉,是以主體程式設計是由翁珊負責的,我和曉珊主要負責代碼的複審和測試運作以及提出不足,期間效率得到不小的提升。遇到問題一起讨論,也比之前自己一個人思考解決的速度更快!
對于本次實驗我們覺得計時器的那一塊比較有挑戰性。後來經過讨論查找資料以及請教同學之後也順利解決了。因為經過這次實驗後,覺得結對程式設計的好處真的很多!
漢堡式評價:
先來一片面包:三人達成結對程式設計的共識,況且我們是一個宿舍的,相處融洽。
再把肉放上:這次程式設計過程中,雖然翁珊負責主體程式設計,但是期間遇到了諸多問題和不足都是大家一起提出來一起想辦法解決的。因為我們三個的程式設計基礎相對也比較薄弱,時間成本耗費很大,是以遇到棘手問題也比較難以解決,需要查閱大量資料學習借鑒,請教程式設計能力較強的同學,彌補不足。但是我相信,通過幾次程式設計實驗的努力完成,吸取經驗教訓後,我們将會做的更好,取得進步。
然後再來一片面包: 這次程式設計讓我們對對方的程式設計實力有了更深的了解,也發現隻要認真努力對待就可以把工作做好,正所謂隻要功夫深,鐵杵磨成針。