结对编程(70,73)
题目描述
我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序。进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac、Linux,web,手机上的),成为一个有基本功能、一定价值的程序。
需求分析
1:记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
2:有计时功能,能显示用户开始答题后的消耗时间。
3:界面支持中文简体/中文繁体/英语,用户可以选择一种。
结对分工
天生(队友):
1:有计时功能,能显示用户开始答题后的消耗时间。
2:界面支持中文简体/中文繁体/英语,用户可以选择一种。
毕川(本人):
1:建构四则运算式的题库。(网上找的题库,然后自己用算法计算出题目的结果)
2:记录用户的对错总数,程序退出再启动的时候,能把以前的对错数量保存并在此基础上增量计算。
思维导图
1:中缀表达式转后缀表达式
2:后缀表达式求值
代码展示
void inFix_postFix(string inFix, string &postFix) //中缀表达式转化成后缀表达式
{
int len_in = inFix.size();
int k = 0;
stack<char>Q;
for (int i = 0; i < len_in; i++)
{
if (inFix[i] >= '0' && inFix[i] <= '9') //遇到数字直接输出到postFix中
{
while (inFix[i] >= '0' && inFix[i] <= '9')
{
postFix += inFix[i];
i++;
}
i--;
postFix += ' ';
}
else if (inFix[i] == '(') //遇到左括号直接入栈
{
Q.push(inFix[i]);
}
else if (inFix[i] == ')') //遇到右括号,将栈中的元素全部输出到postFix中,直到遇见左括号
{
while (Q.top() != '(')
{
postFix += Q.top();
Q.pop();
}
Q.pop();
}
else //遇到运算符
{
if (Q.empty() == true || Q.top() == '(' || Precedence(inFix[i], Q.top()) == false) //如果栈为空,或栈顶元素为左括号,或inFix中的运算符比栈顶的元素的级别高的话,则直接入栈
{
Q.push(inFix[i]);
}
else
{
while (Q.empty() != true && Q.top() != '(' && Precedence(inFix[i], Q.top()) == true)//栈中的元素不为空且栈顶不是右括号且输入的运算符比栈顶的元素的优先级低,弹出
{
postFix += Q.top(); //将出栈元素放到后缀表达式的数组中
Q.pop();
}
Q.push(inFix[i]);//弹出之后再把输入元素入栈
}
}
}
while (!Q.empty()) //把栈中剩下的元素全部放到后缀表达式的数组中
{
postFix += Q.top();
Q.pop();
}
}
算法说明
实现了四则混合运算,可以计算分数和整数的混合运算(带小括号的)。
对于分数的处理,是使用了两个栈,分子和分母栈。
代码规范
变量命名的规则:以变量的功能命名,使用完整的英文描述,采用驼峰命名法。
函数传参过程中尽量采用形式传值
花括号“{}”不允许省略,即使只有一段代码。
使用括号“()”来强调运算符优先级。
记得格式化代码,eclipse里面Ctrl+Shilft+F
注释代码段,注释逻辑选择!
小结感受
1:与队友第二次合作,但是这次的合作没有那么顺利,因为队友用的技术我不会,所以只用了负责后端的算法和记录用户的对错总数。
2:结对编程中,代码的规范还是挺重要的!
3:结对编程,大家各有擅长的地方,可以加快开发的速度,所以1+1是大于2的。
程序链接
PSP(Personal Software Process)表格
PSP2.1 | Personal Software Process Stages | Time (%) Senior Student | Time (%) |
Planning | 计划 | ||
· Estimate | 估计这个任务需要多少时间 | ||
Development | 开发 | 6 | 4 |
· Analysis | 需求分析 (包括学习新技术) | 0.5 | 0.2 |
· Design Spec | 生成设计文档 | 0.3 | 0.2 |
· Design Review | 设计复审 | 0 | 0 |
· Coding Standard | 代码规范 | 0.2 | 0.1 |
· Design | 具体设计 | ||
· Coding | 具体编码 | ||
· Code Review | 代码复审 | 0.5 | 0.6 |
· Test | 测试(自我测试,修改代码,提交修改) | 1 | 1 |
Reporting | 报告 | 2 | 3 |
·Test Report | 测试报告 | 0 | 0 |
· Size Measurement | 计算工作量 | ||
·Postmortem & Process Improvement Plan | 并提出过程改进计划 |