結對項目-四則運算 “軟體”之升級版

來源:互聯網
上載者:User

標籤:src   改進   col   nal   照片   可視化   content   nio   analysis   

201606120038李家俊

部落格園:https://www.cnblogs.com/-QAQ/

201606120043曾鵬菲

部落格園:https://www.cnblogs.com/zpfs/

github:https://github.com/rg-zpf/rg-software

一.基本要求

  • 自動產生題目,單個題目最多不能超過4個運算子,運算元小於100。
  • 使用者可以輸入答案
  • 若使用者輸入答案正確,則提示正確;若答案錯誤,則提示錯誤,並要提示正確答案是多少。

二.開發環境

  程式所使用的開發環境是:IntelliJ IDEA 2018.2.2x

三.擴充方向

1.使用者可以選擇出題的個數(最多不能超過5個題目),答題結束可以顯示使用者答錯的題目個數和答對的題目個數,並且顯示使用者的得分(曾鵬菲)

2.程式可以出單個整數階乘的題目:如:4!=24(階層在10以內隨機產生)(曾鵬菲)

3.使用者答題結束以後,程式可以顯示使用者答題所用的時間(以00:00形式顯示)(李家俊)

4.程式可以設定答題時間,時間設定為整數,單位為秒,最大不能超過120秒,若超過了答題時間未答題,則提示:時間已到,不能答題。(每一題的答題時間)(曾鵬菲)

5.程式設定總時間5分鐘,若5分鐘內還未完成所有題目,時間到則當程式結束,未作答的題目當錯誤(程式總時間)(李家俊)

四.程式實現

結隊項目的實現,需要有可視化介面的顯示。

1.首先,程式採用javafx表單架構的編程,介面設計略顯簡單粗糙。

請輸入題目數按鈕:在輸入框內輸入題目數,點擊按鈕,觸發點擊按鈕事件,num=輸入數

產生題目按鈕:在輸入題目數後,點擊產生題目按鈕會產生題目,每做完一道題目,就需要點擊一次,產生題目,如果做完最後一道題,點擊產生題目按鈕,就會顯示最後得分和用時

確定按鈕:輸入框內輸入答案,點擊確定提交,判斷答案對錯

2.程式運行,即總時間開始倒計時5分鐘,若倒計時完畢還未答題完畢,則不能再作答,直接輸出最後得分和做對題目數和做錯題目數。

tis = new Timer();        tis.schedule(new TimerTask() {            public void run() {                if (times==0){                    code = num - count;                    string = string + "\n" + "正確:" +count +"\t"+"錯誤:" + code +"\n"+ "你的最後分數是:"+(float)count/num*100;                    Content.setText(string);                    tis.cancel();                    timer.cancel();                    n=-1;                }else {                    times--;                    long hh = times / 60 / 60 % 60;                    long mm = times / 60 % 60;                    long ss = times % 60;                    StrOut = "還剩" + hh + "小時" + mm + "分鐘" + ss + "秒";                    outTime.setText(StrOut);                }            }        }, 0, 1000);

3.輸入題目數,題目數不能超過5題,輸入完題目數,點擊按鈕的同時,做題開始計算做題時間(總時間與做題計算時間不同步)

Number.setOnMouseClicked(new EventHandler<MouseEvent>() {            @Override            public void handle(MouseEvent event) {                num = Integer.parseInt(NumText.getText());                if (num>5){                    string = string + "\n" + "題目數不能超過5題,請重新輸入!"+ "\n" + "請輸入題目數目:";                    Content.setText(string );                }else {                    string = string + NumText.getText();                    Content.setText(string);                }                TimerTask task1 = new TimerTask() {                    @Override                    public void run() {                        StrTime = String.format("%1$tM:%1$tS",System.currentTimeMillis()-time);                    }                };                new Timer().schedule(task1, 1, 1000);            }        });

4.產生題目按鈕,點擊後,會隨機產生題目,產生題目的同時,還同時啟動了一個計時器,改計時器的作用是規定每一道題目的答題時間不能超過120秒,超過則當該題答案錯誤處理;每產生一道題目,都必須要點擊一次按鈕,已經做完最後一題,則在點擊按鈕後,會輸入最後的得分和用時、題目的對錯數量。

newCode.setOnMouseClicked(new EventHandler<MouseEvent>() {            @Override            public void handle(MouseEvent event) {                n++;                if(n<num){                    string = string+ "\n"+Code();                    Content.setText(string);                    //每一道題目的規定答題時間                    timer = new Timer();//第二個計時器:計算每一題的規定時間                    long nowTime = System.currentTimeMillis();                    TimerTask task2 = new TimerTask() {                        @Override                        public void run() {                            endTime = (System.currentTimeMillis()-nowTime)/1000;                            //System.out.println(endTime);                            if (endTime>120){                                string = string + "\n" + "此題逾時,答案錯誤!";                                Content.setText(string);                                code++;                                timer.cancel();                            }                        }                    };                    timer.schedule(task2,1,1000);                //所有題目答題完畢                }else {                    tis.cancel();//總時間                    new Timer().cancel();//答題所用時間(所有題目)                    string = string + "\n" + "正確:" +count +"\t"+"錯誤:" + code + "\n"+ "你的最後分數是:"+(float)count/num*100;                    Content.setText(string + "\n" + "你的用時:" + StrTime);                    n=-1;                }            }        });

5.填寫答案框中輸入答案,點擊確定按鈕提交,則會判斷答案對錯,在點擊按鈕後的同時,計算每一題的答題時間定時器也會同時關閉,相當於該題答題完畢,下一題再建立新的計時器計數。判斷答案對錯,還會分別統計正確和錯誤的數量。

Answer.setOnMouseClicked(new EventHandler<MouseEvent>() {            @Override            public void handle(MouseEvent event) {                timer.cancel();//每一道題的結束                answer = Integer.parseInt(AnswerText.getText());                if(Math.abs(answer-result())<0.1){                    string = string + AnswerText.getText() + "\n" +"恭喜你,計算正確,答案是:"+result();                    Content.setText(string);                    count=count+1;                    }else{                        string = string + AnswerText.getText() + "\n" +"很遺憾,計算錯誤,答案是:"+result();                        Content.setText(string);                        code++;                    }            }        });

6.清除按鈕,點擊則清除所有資料,再重新輸入題目數目開始,總時間倒計時也回到5分鐘,重新開始倒計時。

clear.setOnMouseClicked(new EventHandler<MouseEvent>() {            @Override            public void handle(MouseEvent event) {                NumText.setText(null);                AnswerText.setText(null);                Content.setText(null);                string = "請輸入題目數目:";                Content.setText(string);                time=System.currentTimeMillis();                count=0;                code=0;                //複位總時間                times=300;                tis = new Timer();                tis.schedule(new TimerTask() {                    public void run() {                        if (times == 0) {                            code = num - count;                            string = string + "\n" + "正確:" + count + "\t" + "錯誤:" + code + "\n" + "你的最後分數是:" + (float) count / num * 100;                            Content.setText(string);                            tis.cancel();                            timer.cancel();                            n = -1;                        } else {                            times--;                            long hh = times / 60 / 60 % 60;                            long mm = times / 60 % 60;                            long ss = times % 60;                            StrOut = "還剩" + hh + "小時" + mm + "分鐘" + ss + "秒";                            outTime.setText(StrOut);                        }                    }                }, 0, 1000);            }        });

五.問題與解決

1.javafx的表單設定介面,之前已經學過這個,但學的不深入,所以現在用起來也不熟練,甚至,在該程式中,介面的設定也是過於簡單的,並且有些控制項的位置,我感覺自己不能隨心所欲想讓它放在哪邊就在哪邊,在遇到這個問題的時候,我也只能自己上網去查相關資訊,但也比較難找到適合自己問題並解決的。

2.變數的範圍。該程式的變數大部分是採取了全域變數的,因為大部分變數都是涉及到各個功能中的;其實我個人認為一個程式定義過多的全域變數是不怎麼好的,能盡量用局部變數解決問題的就盡量用,這樣好像更低耦合,實在沒辦法再考慮全域變數。

3.定時器的使用。一個定時器很容易管理, 但2個或多個以上,就會容易出現混淆了,該程式中運用了三個定時器,總時間倒計時定時器、答題時間計時器、每一道題目規定時間定時器;一開始我也混淆了,結果導致不能關閉某一個定時器,後來查閱相關資料後, 我採取了兩種方式建立定時器,就比較好的區分開來了。

4.清除、複位功能。清除按鈕,等於複位,重新開始,該功能中,要注意所有相關的資料,都必須複位,恢複一開始的資料狀態,時間、題目數,正確題目數、錯誤題目數都要複位。

六.感悟

       程式是需要編碼和無數次的測試才完成的,有時候,編碼編程是困難的,當你沒有思路的時候,它的確是很困難,這個時候可以先停下來想一想,思考一下,該如何去做,還可以先查閱相關資料,才動手去做,或者,有時候已經編碼很長時間了,可以先停一停,去運動一下先,一直剛下去,或者效果反而沒有那麼高效;然而測試,有時候比編碼難很多,是因為它運行出錯了,你卻無法發現,或者,你發現出錯了,但你不知道它錯在哪裡,如何去調試才能發現問題所在,所以,需要測試過很多,很多情況都能出現過並解決,這才是一個比較完整的程式,我的這個程式中,也有一個我無法發現錯在什麼地方的bug,查看了很多次都不知道如何修改。

       總而言之,花了時間去做事情,無論做得好壞,都會有一個結果,但不花時間,就別談結果了,所有的成果,都是用時間和精力去堆積成的,所以,每一件事情都需要花時間下去,才能做出一些成果,好壞就看個人而言了。

七.結隊工作照片

八.統計表

PSP2.1 Personal Software Process Stages Time Senior Student(h) Time(h)
Planning 計劃 1 1
· Estimate 估計這個任務需要多少時間 50 55
Development 開發 3 3
· Analysis 需求分析 (包括學習新技術) 1 1
· Design Spec 產生設計文檔 1 1
· Design Review 設計複審 2 2
· Coding Standard 代碼規範 5 5
· Design 具體設計 1 1
· Coding 具體編碼 20 22
· Code Review 代碼複審 5 5
· Test 測試(自我測試,修改代碼,提交修改) 10 13
Reporting 報告 2 2
· 測試報告 0.5 0.5
· 計算工作量 1 1
· 並提出流程改善計劃 0.5 0.5

結對項目-四則運算 “軟體”之升級版

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.