小學四則運算界面版

李永豪 201421123117 鄭靖濤 201421123114html

coding 地址:https://git.coding.net/ras/work2.gitgit

1、題目描述web

咱們在我的做業1中,用各類語言實現了一個命令行的四則運算小程序。進一步,本次要求把這個程序作成GUI(能夠是Windows PC 上的,也能夠是Mac、Linux,web,手機上的),成爲一個有基本功能、必定價值的程序。在下面的功能需求中實現兩個:編程

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

2、題目要求小程序

    1. 一個小組中的兩個同窗選取比較優秀的 做業1 (兩我的的都獨立完成了), 把它做爲本次做業的基礎,而後再修改。
    2. 結對編程實現上述功能,一樣的,在程序正式開發以前,請先預估下PSP每一個環節的消耗時間,並在過程當中統計實際耗時,最後提交PSP表格。依然注意,這個主要是給大家本身看的,沒必要造假數據。
    3. 在兩人合做的過程當中, 請看下面的內容app

      a. 知足代碼風格規範和代碼設計規範(參考書第4章4.1-4.3內容)http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
      - 請重視這點,在開發時兩我的要有口頭上的溝通:「好的,咱們一塊兒在開發中遵照一塊兒承認的編碼規範」
      - 請把大家約定的編碼規範文檔也提交到gitdom

      b. 給人提意見的方式——送一個漢堡包http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html

      c. 理解領航員和駕駛員兩種角色關係,並在結對編程中兩我的輪流作對方的角色。兩人都必須參與本次做業的編碼工做,並在git提交日誌上體現這點。學習

3、功能分析測試

  1. 實現GUI界面;
  2. 實現基礎式子生成、計算以及判斷對錯;
  3. 記錄過往的對錯總數,而且在程序退出再啓動時能夠實現保存對錯數量並增量計算;
  4. 實現計時功能;

4、思惟導圖編碼

5、代碼分析

1.使用MFC實現GUI界面

2.點擊生成按鈕自動生成式子

void C第二週Dlg::OnBnClickedButton1()
{
    CString num1;
    CString num2, result;
    CString oper;
    CString s1, s2;
    int  b, c;
    char a;
    s1 = "正確答案";
    s2 = "判斷對錯";
    a = getopre();
    b = random(0, 20);
    c = random(1, 20);
    oper.Format(_T("%c"), a);
    num1.Format(_T("%d"), b);
    num2.Format(_T("%d"), c);
    switch (a)
    {
    case '+': 
        GetDlgItem(IDC_STA1)->SetWindowTextW(num1);
        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);
        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);
        break;
    case '-':  
        GetDlgItem(IDC_STA1)->SetWindowTextW(num1);
        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);
        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);
        break;
    case '*': 
        GetDlgItem(IDC_STA1)->SetWindowTextW(num1);
        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);
        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);
        break;
    case '/': b = c*b;
        num1.Format(_T("%d"), b);
        GetDlgItem(IDC_STA1)->SetWindowTextW(num1);
        GetDlgItem(IDC_STA2)->SetWindowTextW(oper);
        GetDlgItem(IDC_STA3)->SetWindowTextW(num2);
        break;
    }
    GetDlgItem(IDC_STA4)->SetWindowTextW(s1);
    GetDlgItem(IDC_STA5)->SetWindowTextW(s2);
    // TODO: 在此添加控件通知處理程序代碼
}

3.點擊計算按鈕,計算出正確答案並顯示

void C第二週Dlg::OnBnClickedButton2()
{
    CString num1, oper, num2,s1,s2,s3,s4,answer;
    int result;
    GetDlgItem(IDC_STA1)->GetWindowText(num1);
    GetDlgItem(IDC_STA2)->GetWindowText(oper);
    GetDlgItem(IDC_STA3)->GetWindowText(num2);
    int a = _tstoi(LPCTSTR(num1));
    int b = _tstoi(LPCTSTR(num2));
    s1 = "+";
    s2 = "-";
    s3 = "*";
    s4 = "/";
    if (oper == s1) {
        result = a + b;
    }
    else if (oper == s2) {
        result = a - b;
    }
    else if (oper == s3) {
        result = a*b;
    }
    else {
        result = a / b;
    }
    answer.Format(_T("%d"), result);
    GetDlgItem(IDC_STA4)->SetWindowTextW(answer);
    // TODO: 在此添加控件通知處理程序代碼
}

4.輸入用戶計算結果後點擊檢驗按鈕,能夠判斷對錯,而且記錄保存對錯數量

void C第二週Dlg::OnBnClickedButton5()
{
    CString num1, oper, num2, s1, s2, s3, s4,s5,s6,s7, answer,key,rights,mistakes;
    int result,right,mistake,i=0,t=0;
    CString strline;
    CStdioFile  File1;
    CStdioFile  File2;
    File1.Open(_T("TRUE.txt"), CFile::modeReadWrite);
    File2.Open(_T("FALSE.txt"), CFile::modeReadWrite);
    while (File1.ReadString(strline))
        i++;
    while (File2.ReadString(strline))
        t++;
    rights.Format(_T("%d"), i);
    mistakes.Format(_T("%d"), t);
    
    GetDlgItem(IDC_STA1)->GetWindowText(num1);
    GetDlgItem(IDC_STA2)->GetWindowText(oper);
    GetDlgItem(IDC_STA3)->GetWindowText(num2);
    int a = _tstoi(LPCTSTR(num1));
    int b = _tstoi(LPCTSTR(num2));
    s1 = "+";
    s2 = "-";
    s3 = "*";
    s4 = "/";
    s5 = "true";
    s6 = "false";
    s7 = "恭喜";
    if (oper == s1) {
        result = a + b;
    }
    else if (oper == s2) {
        result = a - b;
    }
    else if (oper == s3) {
        result = a*b;
    }
    else {
        result = a / b;
    }
    answer.Format(_T("%d"), result);
    GetDlgItem(IDC_EDIT1)->GetWindowText(key);
    if (key == answer) {
        GetDlgItem(IDC_STA5)->SetWindowTextW(s5);
        GetDlgItem(IDC_STA4)->SetWindowTextW(s7);
        GetDlgItem(IDC_STA10)->SetWindowTextW(rights);
        File1.SeekToEnd();
        File1.WriteString(rights);
        File1.Write("\n", 1);
    }
    else {
        GetDlgItem(IDC_STA5)->SetWindowTextW(s6);
        GetDlgItem(IDC_STA4)->SetWindowTextW(answer);
        GetDlgItem(IDC_STA11)->SetWindowTextW(mistakes);
        File2.SeekToEnd();//文件尾部
        File2.WriteString(mistakes);
        File2.Write("\n", 1);
    }
    File1.Close();
    File2.Close();
    // TODO: 在此添加控件通知處理程序代碼
}

5.點擊開始按鈕開始計時,點擊暫停按鈕暫停計時

void C第二週Dlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: 在此添加消息處理程序代碼和/或調用默認值
    CDialogEx::OnTimer(nIDEvent);
    static UINT mm = 0;
    static UINT ss = 0;
    static UINT mss = 0;
    CString str2;
    switch (nIDEvent)
    {
    case 1:
        mss++;
        if (mss == 60) { mss = 0; ss++; }
        if (ss == 60) { ss = 0; mm++; }
        str2.Format(_T("%02i:%02i:%02i"), mm, ss, mss);
        m_time.SetWindowTextW(str2);
        break;
    }
}
void C第二週Dlg::OnStnClickedSta6()
{
    // TODO: 在此添加控件通知處理程序代碼
}
void C第二週Dlg::OnBnClickedButton4()
{
    // TODO: 在此添加控件通知處理程序代碼
    SetTimer(1, 1000, NULL);
}

void C第二週Dlg::OnBnClickedButton7()
{
    // TODO: 在此添加控件通知處理程序代碼
    KillTimer(1);
}

6、PSP展現

PSP2.1

Personal Software Process Stages

Time (%) Senior Student

Time (%)

Planning

計劃

2h

2.5h

· Estimate

估計這個任務須要多少時間

36h

41h

· Analysis

需求分析 (包括學習新技術)

1h

2h

· Coding Standard

代碼規範

1h

1h

· Design

具體設計

2h

3h

· Coding

具體編碼

30h

32h

· Test

測試(自我測試,修改代碼,提交修改)

1.5h

2h

Reporting

報告

1h

1h

 

 7、總結

  第一次嘗試結對的方法進行編程,能夠說是很不習慣的,由於歷來編程都是一我的來完成的,兩我的原本是能夠分開寫兩個不一樣的模塊,加快完成的速度,但是這樣有的時候本身的思路和同伴的思路不相符,還須要解釋,這樣大大拉長了完成的時間。可有利有弊,有一我的在旁邊複審,一段代碼通過兩雙眼睛,這樣減小了錯誤的發生,也能夠集思廣益想出更多的解決方法。可是即使如此我仍是比較習慣於本身寫代碼,由於有我的在旁邊看着讓我感受很不習慣,並且每一次的編程都須要調節兩我的都有空的時間,感受很麻煩。

相關文章
相關標籤/搜索