结队编程
题目要求:
- 一个小组中的两个同学选取比较优秀的 作业1 (两个人的都独立完成了), 把它作为本次作业的基础,然后再修改。
- 结对编程实现上述功能,同样的,在程序正式开发之前,请先预估下PSP每个环节的消耗时间,并在过程中统计实际耗时,最后提交PSP表格。依然注意,这个主要是给你们自己看的,不必造假数据。
-
在两人合作的过程中, 请看下面的内容
a. 满足代码风格规范和代码设计规范(参考书第4章4.1-4.3内容)http://www.cnblogs.com/xinz/archive/2011/11/20/2255971.html
b. 给人提意见的方式——送一个汉堡包http://www.cnblogs.com/xinz/archive/2011/08/22/2148776.html
- 请重视这点,在开发时两个人要有口头上的沟通:“好的,我们一起在开发中遵守一起认可的编码规范”
- 请把你们约定的编码规范文档也提交到gitc. 理解领航员和驾驶员两种角色关系,并在结对编程中两个人轮流做对方的角色。两人都必须参与本次作业的编码工作,并在git提交日志上体现这点。
队友学号:栗海辉 201421123121 黄良静 201421123103
- 记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
- 有计时功能,能显示用户开始答题后的消耗时间。
- 界面支持中文简体/中文繁体/英语,用户可以选择一种
<一>
1.首先应该创建一个用于存放错误题目的.txt文件。
2.在每次判断函数以后若判断为错误,应把生成的题目自动存放到txt文件中。
3.每次增加错误题目的时候记录的错题数目应该+1.
4.错误题目的数量也保存到一个文件中记录下来,每当有错误实时更新错误数量。
<二>
1首先记录时间的计数器不能被界面覆盖应该放置在明显的顶部或者右上方。
2在运行过程中不应该应在未做完题目之前不能够终止计时,并且在答题完成以后终止技术工作。
3在每次重新开始答题的时候计时器自动清零。
<三>
1.引用SetThreadUILanguage函数用于转换语言
2.添加改变语言的按钮,用于链接不同语言的切换
3.用不同的按钮实现改变不同的语言。
b. 程序设计:针对选择的2-3个新开发功能做设计,使用思维导图。
1.
2.
3.
c. 代码展示:展示每个功能的核心代码。
(初始化赋值)FILE * in;
if (fopen_s(&in, "tf.txt", "r")!=0)
{
fopen_s(&in, "tf.txt", "w");
}
fscanf_s(in, "%d,%d", &t, &f);
fclose(in);
n = t + f;
(写入)FILE * out;
fopen_s(&out, "tf.txt", "w");
fprintf_s(out, "%d,%d", t, f);
fclose(out);.
(定时器)
void CMFCApplication1Dlg::OnTimer(UINT_PTR nIDEvent)
{
static UINT s1 = 0;
static UINT f1 = 0;
static UINT h1 = 0;
CString str;
switch (nIDEvent)
{
case 1:
s1++;
if (s1 == 60) { s1 = 0; f1++; }
if (f1 == 60) { f1 = 0; h1++; }
str.Format(_T("%02i:%02i:%02i"), h1, f1, s1);
SetDlgItemText(IDC_EDIT6, str);
break;
case 2:
s2++;
if (s2 == 60) { s2 = 0; f2++; }
if (f2 == 60) { f2 = 0; h2++; }
str.Format(_T("%02i:%02i:%02i"), h2, f2, s2);
SetDlgItemText(IDC_EDIT8, str);
使用定时器:
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CString ls;
ls = "00:00:00";
SetDlgItemText(IDC_EDIT8, ls);
SetTimer(1, 1000, NULL);
SetTimer(2, 1000, NULL);
禁止按钮2(提交按钮)使用次代码实现在生成题目前无法提交,提交答案前无法生成下一道题。
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON1)->EnableWindow(TRUE);
切换语言
1引用库
strTemp.LoadString(IDS_BUTTON1);
SetDlgItemText(IDC_BUTTON1, strTemp);
strTemp.LoadString(IDS_BUTTON2);
SetDlgItemText(IDC_BUTTON2, strTemp);
strTemp.LoadString(IDS_BUTTON3);
SetDlgItemText(IDC_BUTTON3, strTemp);
strTemp.LoadString(IDS_STATIC1);
SetDlgItemText(IDC_STATIC1, strTemp);
strTemp.LoadString(IDS_STATIC2);
SetDlgItemText(IDC_STATIC2, strTemp);
strTemp.LoadString(IDS_STATIC3);
SetDlgItemText(IDC_STATIC3, strTemp);
strTemp.LoadString(IDS_STATIC4);
SetDlgItemText(IDC_STATIC4, strTemp);
strTemp.LoadString(IDS_STATIC5);
SetDlgItemText(IDC_STATIC5, strTemp);
strTemp.LoadString(IDS_STATIC6);
SetDlgItemText(IDC_STATIC6, strTemp);
strTemp.LoadString(IDS_STATIC7);
SetDlgItemText(IDC_STATIC7, strTemp);
2.切换线程语言改为美式英语
SetThreadUILanguage(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US));
d. 程序运行:程序运行及每个功能的使用截图。
e. 小结感受:结队编程真的能够带来1+1>2的效果吗?通过这次结队编程,请谈谈你的感受和体会。
通过初次的结队合作,有许许多多的分歧导致进度有时候变得很难前行,由于编程语言使用的分歧导致有时候代码编写上出现不同,同时由于两个人使用的变量名称不同有时候会让程序报错甚至崩溃。不过通过此次合作也了解了要如何使用未知变量,也了解到了不同人的编程习惯和编程思维是不同的。但是经过两到三天的合作也增加的不少编程的默契,实验最终是全满的完成了。我认为1+1的效果能够大于2是要看两个人长期的合作和默契程度决定的。
提供项目开发的coding.net 地址。
https://git.coding.net/lenmo/MFC_sizeyunsuan.git
描述结队的过程,提供非摆拍的两人在讨论、细化和编程时的结队照片。
提供此次结队作业的PSP。
Planning |
计划 |
10min |
6min |
· Estimate |
估计这个任务需要多少时间 |
2day |
1.5day |
Development |
开发 |
1day |
1day |
· Analysis |
需求分析 (包括学习新技术) |
2h |
4h |
· Design |
具体设计 |
20min |
10min |
· Coding |
具体编码 |
2h |
1h |
· Code Review |
代码复审 |
30min |
2h |
· Test |
测试(自我测试,修改代码,提交修改) |
13 |
21 |