天天看點

結對程式設計1

結對隊友學号:201421123036 201421123048

項目代碼:

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 {
    float sum;
    int dadui=0;
    int dacuo=0;
    int tishu;
    int noanswer=0;
    int summary=0;
    String parten = "0.00";
    DecimalFormat decimal = new DecimalFormat(parten);
    String str;
    static Timer timer = null; 
    static SimpleDateFormat df=new SimpleDateFormat("mm:ss");     
    long starttime;
    long finishtime;
    long duration;
    long allduration;
    private JFrame frame;
    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("退出");
        final JTextField T1=new JTextField(5);
        final JTextField T2=new JTextField(10);
        final JTextField T3=new JTextField(5);
        final JTextField T4=new JTextField(20);
        final JTextField T5=new JTextField(10);
        final JTextField T6=new JTextField(10);
        final JTextField T7=new JTextField(10);
        JPanel panel=new JPanel();
        JPanel panel0=new JPanel();
        JPanel panel1=new JPanel();
        JPanel panel2=new JPanel();
        JPanel panel3=new JPanel();
        panel.add(panel0);
        panel.add(panel1);
        panel0.add(panel2);
        panel0.add(panel3);
        frame.getContentPane().add(panel,"Center");
        L1.setFont(new java.awt.Font("宋體", 1, 14));
        L2.setFont(new java.awt.Font("宋體", 1, 14));
        L3.setFont(new java.awt.Font("宋體", 1, 14));
        L4.setFont(new java.awt.Font("宋體", 1, 14));
        L5.setFont(new java.awt.Font("宋體", 1, 14));
        L6.setFont(new java.awt.Font("宋體", 1, 14));
        L7.setFont(new java.awt.Font("宋體", 1, 14));
        panel.setLayout(new FlowLayout());
        panel0.setLayout(new GridLayout(1,2));
        panel2.setLayout(new GridLayout(4,2,5,10));
        panel3.setLayout(new GridLayout(4,2,10,10));
        panel2.add(L1);
        panel2.add(T1);
        panel2.add(L2);
        panel2.add(T2);
        panel2.add(L3);
        panel2.add(T3);
        panel2.add(L4);
        panel2.add(T4);
        panel3.add(L5);
        panel3.add(T5);
        panel3.add(L6);
        panel3.add(T6);
        panel3.add(L7);
        panel3.add(T7);
        panel1.add(B1);
        panel1.add(B2);
        panel1.add(B3);
        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);
              
        T3.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                str= decimal.format(sum);
                if(Float.parseFloat(str)==Float.parseFloat(T3.getText()))
                {
                    T4.setText("恭喜你!答對了!");
                    dadui++;
                    T5.setText(String.valueOf(dadui));
                }
                else
                {
                    T4.setText("真遺憾!答錯了!正确答案是"+Float.parseFloat(str));
                    dacuo++;
                    T6.setText(String.valueOf(dacuo));
                }
                noanswer=tishu-dadui-dacuo;
            }
        });
        B2.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent e) {
                if(summary==tishu)
                {
                    JOptionPane.showMessageDialog(null, "答題已完成。答題總題數為"+tishu+",答對題數為"+dadui+",答錯題數為"+dacuo+",未答題題數為"+noanswer+",答題使用時間:"+allduration/1000+"秒。");
                    frame.setVisible(false);
                    new Middle();
                }
                else
                {
                    T2.setText(null);
                    T3.setText(null);
                    T4.setText(null);
                }
            }
        });
        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 15
· Estimate 估計這個任務需要多少時間 7
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的效果,編寫和實作這個程式過程很漫長,兩個人的征讨也挺多的,一開始覺得兩個人合作好像很麻煩,進度很很慢,可是到了過了幾天,兩個人的磨合期過後,真的帶來了1+1>2的效果。
  • 在結對程式設計一開始我是扮演領航員的角色的,在一邊審查隊友的代碼和提供一些界面上的設計建議。
  • 在編寫代碼裡面我是負責中級難度的編寫的,主要是模仿隊友初級難度來編寫的,因為基礎相對比較差。在我自己編寫代碼的時候,隊友會時常提醒我變量名稱的命名,在Eclipse編寫中,經常出現正常的錯誤,還有一些函數的使用,比如标簽按鈕設定位置大小背景燈。有點拖累了隊友,有點不好意思哦。
  • 首先一開始結對一起程式設計程式,對于我來說程式設計十分困難,基本功太差了,但是在中間要是有什麼好的建議和想法,都有會利用給人提意見的方式:給人一個漢堡包,給隊友一些意見,換個好的角度來給隊友評價
  • 最後總結一點,在這段漫長又痛苦的一周裡,學到了很多,特别是兩個人合作的重要性,還有對GUI的學習認識,雖然可能以後不從事程式設計方面,學到了這些也覺得很有意義。

合作照片:

結對程式設計1