李永豪 201421123117 鄭靖濤 201421123114html
coding 地址:https://git.coding.net/ras/work2.gitgit
1、題目描述web
咱們在我的做業1中,用各類語言實現了一個命令行的四則運算小程序。進一步,本次要求把這個程序作成GUI(能夠是Windows PC 上的,也能夠是Mac、Linux,web,手機上的),成爲一個有基本功能、必定價值的程序。在下面的功能需求中實現兩個:編程
2、題目要求小程序
在兩人合做的過程當中, 請看下面的內容app
a. 知足代碼風格規範和代碼設計規範(參考書第4章4.1-4.3內容)http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
- 請重視這點,在開發時兩我的要有口頭上的溝通:「好的,咱們一塊兒在開發中遵照一塊兒承認的編碼規範」
- 請把大家約定的編碼規範文檔也提交到gitdom
c. 理解領航員和駕駛員兩種角色關係,並在結對編程中兩我的輪流作對方的角色。兩人都必須參與本次做業的編碼工做,並在git提交日誌上體現這點。學習
3、功能分析測試
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、總結
第一次嘗試結對的方法進行編程,能夠說是很不習慣的,由於歷來編程都是一我的來完成的,兩我的原本是能夠分開寫兩個不一樣的模塊,加快完成的速度,但是這樣有的時候本身的思路和同伴的思路不相符,還須要解釋,這樣大大拉長了完成的時間。可有利有弊,有一我的在旁邊複審,一段代碼通過兩雙眼睛,這樣減小了錯誤的發生,也能夠集思廣益想出更多的解決方法。可是即使如此我仍是比較習慣於本身寫代碼,由於有我的在旁邊看着讓我感受很不習慣,並且每一次的編程都須要調節兩我的都有空的時間,感受很麻煩。