目录
作业基本信息
这个作业属于哪个课程 | <2301-计算机学院-软件工程> |
---|---|
这个作业要求在哪里 | 软件工程实践第一次作业 |
这个作业的目标 | 完成一个具有可视化界面的计算器 |
其他参考文献 | QT实现计算器 |
GitcHub项目地址
GitHub - YaoShan-NSR/Calculator: 软工作业
PSP表格
PSP | Personal Software Process Stages | 预估耗时(分钟) | 实际耗时(分钟) |
---|---|---|---|
Planning | 计划 | 30 | 40 |
Estimate | 估计这个任务需要多少时间 | 60 | 80 |
Development | 开发 | 300 | 280 |
Analysis | 需求分析 (包括学习新技术) | 70 | 80 |
Design Spec | 生成设计文档 | 20 | 30 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 10 | 10 |
Design | 具体设计 | 20 | 50 |
Coding | 具体编码 | 180 | 300 |
Code Review | Code Review | 15 | 20 |
Test | 测试(自我测试,修改代码,提交修改) | 20 | 50 |
Reporting | 报告 | 60 | 100 |
Test Repor | 测试报告 | 10 | 20 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结, 并提出过程改进计划 | 30 | 50 |
合计 | 805 | 1120 |
解题思路描述
本次作业要求实现一个简易计算器,具有图形化界面。了解要求后,发现主要难点在实现图形化界面,通过查看b站视频教学和同学交流方法,决定使用vs2022+QT用c++实现图形化界面。
1.利用QT创建UI界面并设计布局,提供输入按键
2.VS2022用C++对UI界面输入接收,对计算机计算功能的实现,并在UI上利用两个输出界面输出结果
接口设计和实现过程
1.数值输入:在QT中用QPushButton控件输入
2.在VS中利用一个组void Calculator::iniUI(),将所有输入接收
3.用C++对接收到的数值和符号进行判断并计算
4.用指针lineEdit和exp_lineEdit控制对两个显示界面输出
计算器功能展示
1.基本计算功能(含三角函数)
2.特色功能(单个删除、整行删除)
关键代码展示
1.利用一个组void Calculator::iniUI(),将所有输入接收
void Calculator::iniUI()
{
//找到所有按钮,把所有按钮放到一个组里面
auto buttonGroup = new QButtonGroup(this);
auto btnList = findChildren<QPushButton*>();
for (auto btn : btnList)
{
buttonGroup->addButton(btn);
}
connect(buttonGroup, QOverload<QAbstractButton*>::of(&QButtonGroup::buttonClicked), this, &Calculator::onButtonGroupClicked);
vec.resize(5);
2.程序UI界面出现后,初值为0,只输入数字让其直接显示
void Calculator::onButtonGroupClicked(QAbstractButton* btn)
{
float val = ui-> lineEdit->text().toFloat();
QString name = btn->text();
3.对接收到的数值进行运算,以“+”为例
if (name >= "0" && name <= "9"||name ==".")
{
if (ui->lineEdit->text() =="0" && name != ".")
ui->lineEdit->clear();
//
if(prevBtn=="+")
{
ui->lineEdit->clear();
}
//
else if (name == "+")
{
{
vec[0] = val;
vec[1] = "+";
}
}
//
else if (name == "=")
{
vec[2] = val;
vec[3] = "=";
if (vec[1] == "+")
{
vec[4] = vec[0].toFloat() + vec[2].toFloat();
}
性能改进
1.在QT上对UI界面美观度优化
2.开始输出时只能在大框输出,后改进为在小框保存刚才键入计算过程内容,在大框输出结果
3.增加删除一个输入和整行删除的功能
单元测试
异常处理
在功能模块“C”中有调用vec.clear()函数,目的是调用 clear清理 vector容器,但导致程序在按下C键后崩溃,查询资料后,发现是QVector容器的多个操作起了冲突,size出现问题,导致的软件崩溃。
新增设置Vec.resize(5)后可正常运行
心得体会
此次是首次学习进行可视化编程和UI界面设计,通过查询视频和查阅资料,学会QT的一些基础知识,UI界面设计和远程调用,VS2022+QT的环境配置。在编码过程中遇到问题查找资料逐步去运行,提升独立解决问题能力。第一次用博客按要求复盘软件开发过程,提升学习效果。