天天看點

結對程式設計1

結對隊友學号:201421123048 201421123036

項目代碼:

https://git.coding.net/YJh_/Cal.git

題目描述:

我們在個人作業1中,用各種語言實作了一個指令行的四則運算小程式。進一步,本次要求把這個程式做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手機上的),成為一個有基本功能、一定價值的程式。在下面的功能需求中實作兩個:

  1. 記錄使用者的對錯總數,程式退出再啟動的時候,能把以前的對錯數量儲存并在此基礎上增量計算。
  2. 有計時功能,能顯示使用者開始答題後的消耗時間。
  3. 界面支援中文簡體/中文繁體/英語,使用者可以選擇一種;

需求分析:

  1. 在作業一中已經完成了四則運算的分數算法。
  2. 在控制台的輸入操作不夠人性化,使用GUI界面讓使用者使用更加友善。
  3. 在使用者使用程式做題時需要記錄使用者做題的對錯題數。
  4. 針對不同的使用者,需要用到不同的語言,繁體字,簡體字,英文版。
  5. 對于能力不同的使用者,需要有難易不同程度的題目。
  6. 如果需要測試完成題目所用的時候,需要有記錄做題的消耗時間。

功能分析:

  • 基本功能
    • GUI界面顯示程式
    • 記錄做題時間
    • 記錄使用者做題總數和正确題數
    • 收集使用者的錯題集并顯示給使用者
    • 提供簡體繁體英文界面
  • 拓展功能
    • 題目難度分為初級中級進階可供使用者選擇
    • 在各個難度中還有整數和整數型,整數和分數型,分數和分數型

程式設計:

使用者操作運作流程:

結對程式設計1

主要分類:

結對程式設計1

Calculator類

結對程式設計1

程式測試

測試截圖:

結對程式設計1
結對程式設計1
結對程式設計1
結對程式設計1
結對程式設計1
結對程式設計1
結對程式設計1
結對程式設計1

部分代碼展示:

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的程式設計有更一步的了解和認識。

合作照片:

結對程式設計1