結對隊友學号:201421123048 201421123036
項目代碼:
https://git.coding.net/YJh_/Cal.git
題目描述:
我們在個人作業1中,用各種語言實作了一個指令行的四則運算小程式。進一步,本次要求把這個程式做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手機上的),成為一個有基本功能、一定價值的程式。在下面的功能需求中實作兩個:
- 記錄使用者的對錯總數,程式退出再啟動的時候,能把以前的對錯數量儲存并在此基礎上增量計算。
- 有計時功能,能顯示使用者開始答題後的消耗時間。
- 界面支援中文簡體/中文繁體/英語,使用者可以選擇一種;
需求分析:
- 在作業一中已經完成了四則運算的分數算法。
- 在控制台的輸入操作不夠人性化,使用GUI界面讓使用者使用更加友善。
- 在使用者使用程式做題時需要記錄使用者做題的對錯題數。
- 針對不同的使用者,需要用到不同的語言,繁體字,簡體字,英文版。
- 對于能力不同的使用者,需要有難易不同程度的題目。
- 如果需要測試完成題目所用的時候,需要有記錄做題的消耗時間。
功能分析:
- 基本功能
- GUI界面顯示程式
- 記錄做題時間
- 記錄使用者做題總數和正确題數
- 收集使用者的錯題集并顯示給使用者
- 提供簡體繁體英文界面
- 拓展功能
- 題目難度分為初級中級進階可供使用者選擇
- 在各個難度中還有整數和整數型,整數和分數型,分數和分數型
程式設計:
使用者操作運作流程:

主要分類:
Calculator類
程式測試
測試截圖:
部分代碼展示:
public class LoginMiddle {
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
LoginMiddle window = new LoginMiddle();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public LoginMiddle() {
initialize();
}
private void initialize() {
frame = new JFrame();
frame.setTitle("實戰界面中級版兩個整數與一個分數型");
frame.setSize(750,230);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Label L1=new Label("總題數:",Label.RIGHT);
Label L2=new Label("題目:",Label.RIGHT);
Label L3=new Label("請輸入答案:",Label.RIGHT);
Label L4=new Label("答題情況:",Label.RIGHT);
Label L5=new Label("答對題數:",Label.RIGHT);
Label L6=new Label("答錯題數:",Label.RIGHT);
Label L7=new Label("答題時間:",Label.RIGHT);
final JButton B1=new JButton("開始");
final JButton B2=new JButton("下一題");
final JButton B3=new JButton("退出");
frame.getContentPane().add(panel,"Center");
B3.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
JOptionPane.showMessageDialog(null, "答題總題數為"+tishu+",答對題數為"+dadui+",答錯題數為"+dacuo+",未答題題數為"+noanswer+"。");
frame.setVisible(false);
new Middle();
}
});
B1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
tishu=Integer.parseInt(T1.getText());
noanswer=tishu-dadui-dacuo;
summary++;
timer = new Timer();
finishtime=System.currentTimeMillis();
starttime=finishtime;
timer.schedule(new TimerTask()
{
public void run() {
finishtime=System.currentTimeMillis();
duration=finishtime-starttime;
if(duration/1000==27&&summary<tishu)
{
JOptionPane.showMessageDialog(null, "答題時間已到。答題總題數為"+(dadui+dacuo)+",答對題數為"+dadui+",答錯題數為"+dacuo+",未答題題數為"+(tishu-dacuo-dadui)+",答題使用時間:"+(allduration+duration)/1000+"秒。");
frame.setVisible(false);
new Middle();
}
String str=df.format(new Date(duration));
T7.setText(str);
}
}, 1000, 1000);
allduration=allduration+duration;
char a[]={'+','-','×','÷'};
char b[]={'+','-','×','÷'};
int c=(int)(Math.random()*4);
int d=(int)(Math.random()*4);
int f=(int)(Math.random()*100);
int g=(int)(Math.random()*99+1);
int h=(int)(Math.random()*99+1);
int l=(int)(Math.random()*99+1);
Toolkit kit = Toolkit.getDefaultToolkit();
Dimension screenSize = kit.getScreenSize();
int w1 = screenSize.width;
int h = screenSize.height;
int x1 = w1/3;
int y1 = h/5;
frame.setLocation(x1,y1);
frame.setVisible(true);
frame.setResizable(false);
}
PSP:
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student(/day) | Time (%)(/day) |
Planning | 計劃 | 8 | 7 |
· Estimate | 估計這個任務需要多少時間 | ||
Development | 開發 | 6 | |
· Analysis | 需求分析 (包括學習新技術) | 1 | |
· Design Spec | 生成設計文檔 | ||
· Design Review | 設計複審 | ||
· Coding Standard | 代碼規範 | ||
· Design | 具體設計 | 5 | 4 |
· Coding | 具體編碼 | 2 | |
· Code Review | 代碼複審 | ||
· Test | 測試(自我測試,修改代碼,送出修改) | 3 | |
Reporting | 報告 | ||
·Test Report | 測試報告 | ||
· Size Measurement | 計算工作量 | ||
·Postmortem & Process Improvement Plan | 并提出過程改進計劃 |
小結感受:
- 結隊程式設計真的能夠帶來1+1>2的效果,而且還是女生和我一起結對,俗話說:男女搭配,幹活不累。哈哈哈,還真是哦,雖然這個過程很辛苦,整整編寫了一周,基礎一般,而且java是大二上的課了,很多都是忘記了,特别是GUI界面的程式設計,真的忘關了,我還是重新學習了課本,真的有點累!但是還是堅持過來了,想想有個美女在旁邊指揮我打代碼呢,要好好表現。還真有點效果,界面的設計雖然不好看,能得到美麗的隊友的認可還是挺開心的。
- 由于知識有限,和隊友一路走來十分坎坷,導緻編寫的代碼有點拖沓備援。時間不太夠,是以一些自己想拓展的功能還沒能得到完成。會繼續努力完成的。
- 對于隊友的重要性,有幾點要說的。第一,隊友幫助我很多,像一些找GUI資料,比較一些标簽按鈕的操作知識,都是隊友幫助我一起完成的。第二就是在打代碼打了累的時候,她經常會鼓勵我,陪我談談心,這讓我心情慢慢變得舒暢了很多,不然代碼打久了,是挺壓抑的。
- 自己打的代碼真的有點爛,以後會繼續努力的,經常這次的結對程式設計,受益匪淺,認識到了自己的不足,對GUI的程式設計有更一步的了解和認識。