软工作业-Calculator

目录

作业基本信息

GitcHub项目地址

PSP表格

解题思路描述

接口设计和实现过程

计算器功能展示

关键代码展示

性能改进

单元测试

异常处理

心得体会

作业基本信息

这个作业属于哪个课程<2301-计算机学院-软件工程>
这个作业要求在哪里软件工程实践第一次作业
这个作业的目标完成一个具有可视化界面的计算器
其他参考文献QT实现计算器

GitcHub项目地址

GitHub - YaoShan-NSR/Calculator: 软工作业

PSP表格

PSPPersonal Software Process Stages预估耗时(分钟)实际耗时(分钟)
Planning计划3040
 Estimate估计这个任务需要多少时间6080
Development开发300280
Analysis需求分析 (包括学习新技术)7080
Design Spec生成设计文档2030
Coding Standard代码规范 (为目前的开发制定合适的规范)1010
Design具体设计2050
Coding具体编码180300
Code ReviewCode Review1520
Test测试(自我测试,修改代码,提交修改)2050
Reporting报告60100
Test Repor测试报告1020
Size Measurement计算工作量1010
Postmortem & Process Improvement Plan事后总结, 并提出过程改进计划3050
合计8051120

解题思路描述

本次作业要求实现一个简易计算器,具有图形化界面。了解要求后,发现主要难点在实现图形化界面,通过查看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的环境配置。在编码过程中遇到问题查找资料逐步去运行,提升独立解决问题能力。第一次用博客按要求复盘软件开发过程,提升学习效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值