Qt 每月收支计算

news2024/9/22 13:29:28

Qt 每月收支计算,针对每月有支出(房贷、车贷、花呗、借呗)的情况,计算收支明细,直观看到未来的个人经济情况,培养良好的消费习惯,进行理性的财富支配,量入为出。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDate>
#include <QMessageBox>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QFont font;
    font.setPixelSize(16);
    setFont(font);

    setWindowTitle(QStringLiteral("每月收支计算"));

    ui->lineEdit_shouru->setMaximumWidth(70);
    ui->lineEdit_shouru->setMinimumWidth(70);

    ui->lineEdit_huan->setMaximumWidth(70);
    ui->lineEdit_huan->setMinimumWidth(70);

    ui->lineEdit_curent_money->setMaximumWidth(70);
    ui->lineEdit_curent_money->setMinimumWidth(70);

    ui->dateEdit_shouru->setCalendarPopup(true);
    ui->dateEdit_shouru->setDate(QDate::currentDate());

    ui->dateEdit_huan->setCalendarPopup(true);
    ui->dateEdit_huan->setDate(QDate::currentDate());

    ui->dateEdit_huanqing->setCalendarPopup(true);
    ui->dateEdit_huanqing->setDate(QDate::currentDate());
}

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

void MainWindow::on_pushButton_add_clicked()
{
    int huan = ui->lineEdit_huan->text().toInt();
    QDate huanDay = ui->dateEdit_huan->date();
    QDate huanqingDay = ui->dateEdit_huanqing->date();
    QMap<QDate, int> tmpMap;
    QDate tmp = huanDay;
    while (tmp <= huanqingDay)
    {
        tmpMap.insert(tmp, huan);
        tmp = tmp.addMonths(1);
    }

    foreach (QDate date, tmpMap.keys())
    {
        ui->textBrowser_huan->append(QStringLiteral("%1 %2").arg(date.toString("yyyy-MM-dd")).arg(tmpMap.value(date)));
        if (huanMap.contains(date))
        {
            huanMap.insert(date, huanMap.value(date) + tmpMap.value(date));
        }
        else
        {
            huanMap.insert(date, tmpMap.value(date));
        }
    }

    ui->textBrowser_huan->append("\n");
}

void MainWindow::on_pushButton_calc_clicked()
{
    if (huanMap.isEmpty())
    {
        return;
    }

    ui->textBrowser_total->clear();

    QStringList monthLst;
    QList<QDate> huanDateLst = huanMap.keys();
    foreach (QDate date, huanDateLst)
    {
        QString key = date.toString("yyyy-MM");
        if (!monthLst.contains(key))
        {
            monthLst.append(key);
        }
    }

    int shouru = ui->lineEdit_shouru->text().toInt();
    int shouruDay = ui->dateEdit_shouru->date().day() - 1;
    QMap<QDate, int> shouruMap;
    foreach (QString key, monthLst)
    {
        QDate date = QDate::fromString(key, "yyyy-MM").addDays(shouruDay);
        if (!huanDateLst.contains(date))
        {
            huanDateLst.append(date);
        }
        shouruMap.insert(date, shouru);
    }

    qSort(huanDateLst.begin(), huanDateLst.end());

    int shouruTotal = 0;
    int huanTotal = 0;
    int currentMoney = ui->lineEdit_curent_money->text().toInt();
    foreach (QString month, monthLst)
    {
        int total = 0;

        foreach (QDate date, huanDateLst)
        {
            QString dateStr = date.toString("yyyy-MM-dd");
            if (dateStr.startsWith(month))
            {
                if (shouruMap.contains(date))
                {
                    currentMoney += shouruMap.value(date);

                    ui->textBrowser_total->append(QStringLiteral("%1 +%2 余%3").arg(dateStr).arg(shouruMap.value(date)).arg(currentMoney));
                    shouruTotal += shouruMap.value(date);
                }

                if (huanMap.contains(date))
                {
                    currentMoney -= huanMap.value(date);

                    ui->textBrowser_total->append(QStringLiteral("%1 -%2 余%3").arg(dateStr).arg(huanMap.value(date)).arg(currentMoney));
                    total += huanMap.value(date);
                }
            }
        }

        ui->textBrowser_total->append(QStringLiteral("%1 共还%2\n").arg(month).arg(total));
        huanTotal += total;
    }

    ui->textBrowser_total->append(QStringLiteral("总收入:%1 总支出:%2 净:%3 余:%4\n").arg(shouruTotal).arg(huanTotal).arg(shouruTotal + ui->lineEdit_curent_money->text().toInt() - huanTotal).arg(currentMoney));
}

void MainWindow::on_pushButton_clear_clicked()
{
    if (informationMessageBox(QStringLiteral("提示"), QStringLiteral("确定清空数据"), false))
    {
        huanMap.clear();

        ui->lineEdit_shouru->clear();
        ui->lineEdit_huan->clear();
        ui->lineEdit_curent_money->clear();

        ui->dateEdit_shouru->setDate(QDate::currentDate());
        ui->dateEdit_huan->setDate(QDate::currentDate());
        ui->dateEdit_huanqing->setDate(QDate::currentDate());

        ui->textBrowser_huan->clear();
        ui->textBrowser_total->clear();
    }
}

bool MainWindow::informationMessageBox(const QString &title, const QString &text, bool isOnlyOk)
{
    QMessageBox msgBox(this);
    msgBox.setFont(this->font());
    msgBox.setIcon(QMessageBox::Information);
    msgBox.setWindowTitle(title);
    msgBox.setText(text);
    if (isOnlyOk)
    {
        msgBox.setStandardButtons(QMessageBox::Ok);
        msgBox.setButtonText(QMessageBox::Ok, QStringLiteral("确定"));
    }
    else
    {
        msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
        msgBox.setButtonText(QMessageBox::Ok, QStringLiteral("确定"));
        msgBox.setButtonText(QMessageBox::Cancel, QStringLiteral("取消"));
    }
    return (msgBox.exec() == QMessageBox::Ok);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云安全技术(三)之云计算相关的安全概念

云计算相关的安全概念 Security Concepts Relevant to Cloud Computing 1. 密码学和密钥管理 Cryptography and key management 1、加密技术: 有许多不同类型和等级的加密技术。在云环境中&#xff0c;云安全专家有责任评价应用程序的需求、所使用的技术、需要保护的数据类型&…

【UE 从零开始制作坦克】5-通过旋转摄像机控制炮塔旋转

效果 步骤 打开动画蓝图“ABP_West_Tank_M1A1Abrams” 我们在动画图表中可以发现控制坦克炮塔旋转和炮管旋转的变量分别是“TurretRotation”和“GunRotattion”&#xff0c;因此只需改变这两个旋转体的值即可控制炮塔和炮管的旋转。 切换到事件图表中&#xff0c;首先通过“T…

单向散列函数【密码学】(一)

目录 一、前言&#xff1a;密码学有什么用&#xff1f; 二、单向散列函数 1、单向函数 2、散列函数 3、单向散列函数 三、怎么解决完整性问题 四、如何设置合适的安全强度 一、前言&#xff1a;密码学有什么用&#xff1f; 二、单向散列函数 单向散列函数就是用来解决…

article-6-pss 并联六自由度机构轨迹规划

建模 ** [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-djltxj90-1687070335773)(data:image/svgxml;utf8, )] ** 程序如下&#xff1a; % clc % clear all % function []PSS1(XP,YP,ZP) tic %%%%%鍒濆浣嶇疆鐨勪綅濮?%%%%% % XP 0; %鍔ㄥ钩鍙…

存储笔记6 SAN

SAN&#xff08;Storage Area Networks&#xff09; SAN 优势 benefitsSAN 组件 componentsSAN连接选项 connective optionsFC协议 FC寻址 protocol addressing\FC拓扑 topologie SAN优缺点 光纤通道 fibre channel SAN组件 FC三种互联 FC端口类型 fabric 企业需要和科技…

RFID期末复习总结

一.概念部分 1.基础概念 射频识别无线电频率识别RFID 应答器&#xff1a;存放识别信息的电子数据载体 阅读器&#xff1a;将识别信息从应答器中读出&#xff08;还可以写入数据&#xff09; 应答器是统称&#xff0c;在各种专业场合有专业名字&#xff0c;比如射频卡&#…

pikachu靶场-PHP反序列化

在理解这个漏洞前,你需要先搞清楚php中serialize()&#xff0c;unserialize()这两个函数。 序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串,比如下面是一个对象: class S{public $test"pikachu";}$snew S(); //创建一个对象serialize($s); //…

FPGA时序约束--进阶篇(主时钟约束)

在FPGA设计中&#xff0c;时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中&#xff0c;已经详细介绍了FPGA时序约束的基础知识。 本文将重点讲解主时钟约束设置&#xff0c;给出详细的约束命令&#xff0c;并介绍了在Vivado中如何写入主时钟约束。 一、主时…

一文详解!接口测试(http与rpc)总结

目录 前言&#xff1a; 一、了解一下HTTP与RPC 二、HTTP接口测试 三、RPC接口测试 四、接口测试用例设计 五、测试思路总结 前言&#xff1a; 在接口测试方面&#xff0c;常见的接口类型有HTTP接口和RPC接口。这两者的测试方法略有不同&#xff0c;在测试前需要进行技术选…

[INFO] [copilotIgnore] inactive,github copilot没反应怎么解决

在使用github copilot的时候&#xff0c;插件不工作&#xff0c;后台出现了这种输出&#xff0c; 这种情况下就是它的激活出现了问题&#xff0c;如果账号的使用权没有问题的话&#xff0c;就将该插件disable之后再重新enable&#xff0c;重新观察输出&#xff0c;就会看到copi…

LAMP架构搭建实操

目录 一、LAMP架构概述 二、LAMP框架搭建 1.准备工作 2.部署apache 3.部署mysql 4.部署php 三、部署BBS论坛 一、LAMP架构概述 LAMP架构是目前成熟的企业网站应用模式之一&#xff0c;指的是协同工作的一整套系统和相关软件&#xff0c;能够提供动态Web站点服务及其应用…

win11系统提示msvcp140.dll丢失的三个解决方法,简单实用

Win11系统在运行photoshop或其他软件&#xff0c;游戏的时候&#xff0c;电脑提示“找不到msvcp140.dll”&#xff0c;“msvcp140.dll丢失”&#xff0c;“无法定位输入点msvcp140.dll”等问题&#xff0c;都是由于Windows11系统中的msvcp140.dll文件丢失或者损坏了。 问题场景…

数据结构 串

串 术语概念 在数据结构中&#xff0c;串&#xff08;String&#xff09;是由零个或多个字符组成的有限序列。它是一种常见的数据类型&#xff0c;常用于表示文本、字符串和符号序列等信息。串可以包含任意字符&#xff0c;包括字母、数字、符号以及空格等。 主串&#xff08…

CANDENCE : 如何绘制元器件

如何绘制元器件 绘制元器件之前先新建一个原理图库。 step1:打开某一个原理图工程 step2:在该工程系下新建一个库文件&#xff0c;如下图&#xff1a; 新建完成&#xff0c;如下图&#xff1a; 右键点击保存&#xff1a;save。 命名并保存&#xff0c;保存的位置自己决定 …

AI - stable-diffusion 艺术化二维码

系列文章&#xff1a; 《AI - stable-diffusion(AI 绘画)的搭建与使用》《AI - AI 绘画的精准控图(ControlNet)》 一、介绍 近日&#xff0c;AI 绘画&#xff08;stable-diffusion&#xff09;用来艺术化二维码算是比较火热的事了&#xff0c;这个 idea 是由国人用 Checkpoi…

Spring Security 实战篇

文章目录 前言内存版(memory)数据库库版(jdbc)自定义登录 - 单体&#xff08;custom-login-single&#xff09;自定义登录 - 前后分离会话一致性方案方案一方案二方案三为什么不用JWT 登录改json方式登录&#xff08;custom-login-json&#xff09;认证密码加密登录&#xff08…

【欧瑞博智能家居】ZigBee Mini网关、超静音智能开合帘电机 添加操作流程

目录 一、添加ZigBee Mini网关 二、添加超静音智能开合帘电机 参考资料 一、添加ZigBee Mini网关 1. 下载《智家365》APP 2. 网关通电&#xff0c;用网线连接路由器的网线接口 3. 再次扫描产品手册里面的二维码添加ZigBee Mini网关&#xff0c;注意手机wifi要在同一个网络…

Nucleo-F411RE (STM32F411)LL库体验 10 - RT-Thread nano finsh的移植

Nucleo-F411RE &#xff08;STM32F411&#xff09;LL库体验 10 - RT-Thread nano finsh的移植 1、Makefile中添加finsh的编译 编译报错如下&#xff1a; 在rtconfig.h添加#include “finsh_config.h” 继续编译&#xff0c;继续报错&#xff1a; 这里是个WEAK函数&#xff…

【python中对点云PCL库的下载安装与配置】

需要的资料&#xff1a; python_pcl-0.3.1-cp36-cp36m-win_amd64.whl 压缩包&#xff1a;pcl-1.12.1-pdb-msvc2019-win64 pcl程序&#xff1a;PCL-1.12.1-AllInOne-msvc2019-win64 网盘链接&#xff1a;https://pan.baidu.com/s/184yY7fc5rqwwd9F4cMncDw 提取码&#xff1a…

SpringSecurity(一):权限管理设计与实现(官文英解+源码调试+基本环境搭建)

权限管理设计与实现 前言权限管理认证授权安全管理框架 整体架构认证AuthenticationManagerAuthenticationSecurityContextHolder 授权AccessDecisionManagerAccessDecisionVoterConfigAttribute 环境搭建技术栈创建项目整合Spring Security 实现原理官方文档解读A Review of F…