软工第一次作业
【课程】福州大学2021级软件工程A | 班级链接 |
---|---|
这个作业要求在哪里 | 作业要求地址 |
这个作业的目标 | 完成一个具有可视化界面的计算器,实现加减乘除、归零、次方、开根号、三角函数的功能 |
0.界面展示
计算器
1.Gitcode项目地址
2.PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 60 | 40 |
• Estimate | • 估计这个任务需要多少时间 | 30 | 20 |
Development | 开发 | 240 | 300 |
• Analysis | • 需求分析 (包括学习新技术) | 180 | 300 |
• Design Spec | • 生成设计文档 | 60 | 60 |
• Design Review | • 设计复审 | 60 | 90 |
• Coding Standard | • 代码规范 (为目前的开发制定合适的规范) | 60 | 90 |
• Design | • 具体设计 | 120 | 110 |
• Coding | • 具体编码 | 120 | 180 |
• Code Review | • 代码复审 | 60 | 40 |
• Test | • 测试(自我测试,修改代码,提交修改) | 60 | 180 |
Reporting | 报告 | 90 | 100 |
• Test Repor | • 测试报告 | 60 | 100 |
• Size Measurement | • 计算工作量 | 60 | 60 |
• Postmortem & Process Improvement Plan | • 事后总结, 并提出过程改进计划 | 30 | 30 |
合计 | 1290 | 1600 |
3.解题思路描述
1.上网查询实现可视化计算器的方法,因为已经下载有VS2022,所以选择MFC来实现可视化计算器。
2.设计界面,MFC有控件,添加即可。
3.点击控件,编写控件功能代码,使用的是c++语言。
4.先编写简单四则运算,然后逐步加入其他科学计算。
5.测试代码,改进性能。
6.上传Gitcode。
6.进行单元测试。
7.撰写博客。
4.接口设计和实现过程
使用VS2022的MFC,自带button控件和static text控件。点击button按键形成输入,输出显示在text上。
void CCalculatorDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
result += L"1"; //字符前加L是把字符转换成Unicode型,将案件内容显示在编辑框
SetDlgItemText(IDC_EXP, result);
}
5.关键代码展示
void CCalculatorDlg::OnBnClickedEqual()//等于
{
// TODO: 在此添加控件通知处理程序代码
num = _wtof(result);
switch (symbol)
{
case'+':
result0 = result0 + num;
break;
case'-':
result0 = result0 - num;
break;
case'*':
result0 = result0 * num;
break;
case'^':
result0= num * num;
break;
case'!':
result0 = sqrt(num);
break;
case's':
result0 = sin(num * PI / 180.0);
break;
case'c':
result0 = cos(num * PI / 180.0);
break;
case't':
{
if (num == 90)
{
SetDlgItemText(IDC_RESULT, L"无穷大");
result.Empty();
show.Empty();
temp.Empty();
num = 0;
result0 = 0;
symbol = 0;
return;
}
result0 = tan(num * PI / 180.0);
break;
}
case'/':
{
if (num == 0)
{
//设置文本提示除数不能为零
SetDlgItemText(IDC_RESULT, L"除数不能为0");
result.Empty();
show.Empty();
temp.Empty();
num = 0;
result0 = 0;
symbol = 0;
return;
}
result0 = result0 / num;
break;
}
case 0:
SetDlgItemText(IDC_RESULT, result);
break;
}
//下面的文本框RESULT显示结果,把计算结果转换成文本
CString str;
str.Format(L"%f", result0);
SetDlgItemText(IDC_EXP, show+result);
SetDlgItemText(IDC_RESULT,str);
temp = result = str;//中间变量 备份 及时更新结果
result.Empty();//清空原有内容
symbol = 0;//清空符号
}
6.性能改进
改进1
对于只有单个操作数的运算,实现点击运算符后同时显示操作数和运算符,运算符在前操作数在后。
例如:
改进2
实现点击等于按键时将等号左边的表达式输出在上面的文本框。
7.单元测试
使用VS2022自带的Google test。
例:
TEST(TestCaseName, TestName) {
CCalculatorDlg x;
double exp = 6.0;
x.OnBnClickedButton4();
x.OnBnClickedAdd();
x.OnBnClickedButton2();
x.Calculator();
ASSERT_EQ(exp, x.result0);
}
8.异常处理
异常1
除数为0时显示“除数不能为0”。
异常2
tan 90度时输出无穷大。
9.心得体会
通过本次作业的完成,感受到了实现一个软件的不易。拿到作业要求后,我通过上网查询各种资料,发现有许多种实现可视化计算器的方法,最后我选择使用VS2022里的MFC程序来实现可视化计算器,比较方便。我在设计界面和实现代码的时候没有遇到太大的困难,但是因为是第一次使用Gitcode、实现单元测试、撰写博客,所以在这些方面花的时间比较长。做到后面发现MFC较少用,相关资料比较少,以后作业得换个法子。这次作业学习到了很多没接触过的知识,下次继续努力。