結對編程--四則運算改進版(107,120)

代碼連接git

題目描述:

本次要求把這個程序作成GUI(能夠是Windows PC 上的,也能夠是Mac、Linux,web,手機上的),成爲一個有基本功能、必定價值的程序。
在下面的功能需求中實現兩個:web

  • 記錄用戶的對錯總數,程序退出再啓動的時候,能把之前的對錯數量保存並在此基礎上增量計算。
  • 有計時功能,能顯示用戶開始答題後的消耗時間。
  • 界面支持中文簡體/中文繁體/英語,用戶能夠選擇一種;

需求分析

本次編程要求實現記錄用戶的對錯總數,而且在之前的基礎上進行增量計算。所以,這就要求咱們須要建立文件或其餘方法來保存對錯的數量,以便於在再次開啓程序時可以讀入之前作題的數目。計時功能是相對比較容易實現的,只需在開始答題是開啓時鐘,提交答案時關閉時鐘,兩次的差值就是答題所用的時間。多種語言選擇,其實就是在實現中文的基礎上將顯示界面和答案對錯提示用不一樣的語言來替代,而內在的關於計算、比較答案的算法卻沒有太大的變化。算法

功能分析

  • 基本功能
    實現中文版的四則運算
  • 擴展功能
    一、實現英文版的四則運算;
    二、實現計時功能,能顯示用戶在每個題目的用時;
    三、記錄用戶的對錯總數,並下次程序運行時能在以前的基礎上增量計算。
  • 高級功能(暫時尚未)
    一、建立一個相似排行榜的文件,可以記錄用戶在作相同數量的題目的最短用時,或以分數來計算時的最高得分;
    二、提供錯題循環出題的功能。

設計實現

代碼說明

程序中判斷答案的代碼以下(爲中文版的),在切換到英文等其餘語言時,只需將顯示正確錯誤的的中文設置爲英文,而生成題目的函數並不須要有任何的改變。編程

char* Submit(char result[],char * answer)
{
    static char prompt[20]; 
    FILE * in;
    FILE * out;

    in=fopen("number.txt","r");
    fscanf(in,"%d,%d",&right,&wrong);
    fclose(in);
    
    if(strcmp(answer,result)==0)
    {   
        strcpy(prompt,"正確!");
        right++;
    }
    else
    {   
        strcpy(prompt,"錯誤!  ");
        strcat(prompt,"正確答案是:");
        strcat(prompt,result);
        wrong++;
    }

    out=fopen("number.txt","w");
    fprintf(out,"%d,%d",right,wrong);
    fclose(out);

    return prompt;
}

整個工程總共有三個界面:選擇語言的界面、中文界面和英文界面(中文繁體的只需建立一個新的界面,而後調用以前的函數便可)。界面之間的跳轉使用按鈕來控制,如下是部分代碼(主界面到中文界面):函數

void CTeamworkDlg::OnChinese() 
{
    // TODO: Add your control notification handler code here
    chinese chinese;
    CTeamworkDlg::OnOK();
    chinese.DoModal();
    
}

每一題計時的代碼以下:學習

void chinese::OnButton() 
{
    // TODO: Add your control notification handler code here
    UpdateData();
    m_Show1=Draw();
    start=clock();
    UpdateData(false);
}

void chinese::OnButton_Submit() 
{
    // TODO: Add your control notification handler code here
    finish= clock();
    duration =(double)(finish-start)/CLOCKS_PER_SEC;
    sprintf(temp,"%g",duration);
    m_Show3=temp;
    UpdateData(false);
}

計時功能經過按鈕實現,在生成題目以後開啓時鐘,在提交以後在記錄一個時間,兩個時間的差值就是本題的用時。測試

測試運行

PSP展現

PSP2.1 Personal Software Process Stages Time (%) Senior Student(/hour) Time (%)(/hour)
· Planning 計劃 2 1.8
· Estimate 估計這個任務須要多少時間 25 20
· Analysis 需求分析 (包括學習新技術) 2 1
· Coding Standard 代碼規範 1 1.5
· Design 具體設計 1.5 1
· Coding 具體編碼 20 15
· Test 測試(自我測試,修改代碼,提交修改) 1 1.5
Reporting 報告 1 1

小結

整個編程過程當中,遇到很多的問題。相似[Error]:LNK2005 ——生成題目的函數寫在Draw.h的頭文件中,在只有中文界面時調用函數時沒有任何的問題,而在加入英文界面的由於重複定義而出現了錯誤。上網百度後,發現只需聲明該方法便可,並不須要從新定義其餘與之功能相同的異名函數。在讀入文件時,也曾就文件的路徑編寫時使用絕對路徑或則相對路徑出現過問題。一開始使用絕對路徑編寫,發現編譯後運行生成的.exe文件時會出現錯誤。以後,將文件路徑改成相對路徑並將其移入到Debug文件夾中後就能夠很好地實現實驗要求的功能。同時,在計時方面仍有不足,只可以一題一題的統計時間。程序還有許多不足,以後會不斷改進!!!編碼

相關文章
相關標籤/搜索