《QT实用小工具·二十》存款/贷款计算器

1、概述
源码放在文章末尾

该项目实现了用于存款和贷款的计算器的功能,如下图所示:

项目部分代码如下:

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;

private slots:
    void initForm();
    void on_btnCalc_clicked();
    void on_btnCalc2_clicked();
};

#endif // WIDGET_H
cpp 复制代码
#pragma execution_character_set("utf-8")

#include "widget.h"
#include "ui_widget.h"
#include "qmessagebox.h"
#include "qdebug.h"

Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->initForm();
}

Widget::~Widget()
{
    delete ui;
}

void Widget::initForm()
{
    QDateTime now = QDateTime::currentDateTime();
    ui->dateStart->setDate(now.date());
    ui->dateEnd->setDate(now.date().addYears(1));
}

void Widget::on_btnCalc_clicked()
{
    //当前多少钱
    int moneyCurrent = ui->txtMoneyCurrent->text().toInt();
    //利息
    float rate = ui->txtRate->text().toFloat();
    //定期期限
    int year = ui->cboxYear->currentText().left(1).toInt();
    //总年份 必须是定期期限的倍数
    int years = ui->txtYears->text().toInt();
    //最终多少钱
    int moneyAll = 0;

    if (years % year != 0) {
        ui->txtYears->setFocus();
        QMessageBox::critical(this, "错误", "总年份必须是期限的整数倍数!");
        return;
    }

    if (ui->cboxType->currentIndex() == 0) {
        //傻瓜场景 直接计算
        moneyAll = moneyCurrent + (moneyCurrent * rate * years);
    } else {
        //真实场景 复利计算
        int count = years / year;
        for (int i = 0; i < count; ++i) {
            moneyCurrent = moneyCurrent + (moneyCurrent * rate * year);
        }
        moneyAll = moneyCurrent;
    }

    //计算下来3年期定期存款30年总金额翻2番到最初本金3倍 100W本金3年期自动续期30年=321W
    QString value = QString::number(moneyAll);
    ui->txtMoneyAll->setText(value);

    //拷贝到其他地方
    if (ui->rbtn1->isChecked()) {
        ui->txtValue1->setText(value);
    } else {
        ui->txtValue2->setText(value);
    }

    //计算两种存款方式的差额 比如1年期存3年和3年期存3年
    QString value1 = ui->txtValue1->text().trimmed();
    QString value2 = ui->txtValue2->text().trimmed();
    if (!value1.isEmpty() && !value2.isEmpty()) {
        int value = qAbs(value1.toInt() - value2.toInt());
        ui->txtValue->setText(QString::number(value));
    }
}

void Widget::on_btnCalc2_clicked()
{
    //计算天数
    QDateTime dateStart = ui->dateStart->dateTime();
    QDateTime dateEnd = ui->dateEnd->dateTime();
    int day = dateStart.daysTo(dateEnd);
    int money = ui->txtMoney2->text().toInt();
    float rate = ui->txtRate2->text().toFloat();
    int result = money * rate * day;
    ui->txtResult2->setText(QString::number(result));
    qDebug() << day;
}

源码下载

相关推荐
鬼手点金3 小时前
Scrapy + Playwright 完整示例(JS 动态渲染网页)
开发语言·javascript·爬虫·python·scrapy·html·json
Mr. zhihao3 小时前
深度解析:为什么Java序列化需要搭配ByteArrayOutputStream?IO装饰器模式的精妙设计
java·开发语言·装饰器模式
格林威3 小时前
多相机并行采图最佳实践:Task.WhenAll + 异常处理 + 资源释放
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·机器视觉
djjjx.3 小时前
【 C++ 】多态
开发语言·c++·多态
夜雪一千3 小时前
Python如何使用XPath定位没有特征的元素?无id、无class通用定位技巧
开发语言·python
艾莉丝努力练剑3 小时前
【QT:解决问题】Qt5Core.dll:无法定位程序输入点
java·开发语言·qt·学习·面试
流浪0013 小时前
Python 基础语法(一):常量、变量、输入输出与运算符
开发语言·python
光影少年4 小时前
react离线缓存、图片缓存方案
开发语言·前端·javascript·react native·react.js·缓存·前端框架
鸿芯微控科技4 小时前
MFC关断后还有流量怎么办?零流量、阀门泄漏、压差与Python分析
c++·python·mfc·质量流量控制器·关断泄漏·零流量测试
SomeB1oody4 小时前
【RustyML入门】3.7. 循环层
开发语言·后端·机器学习·rust·教程