Qt 每月收支计算

news/2024/11/17 6:44:06/

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.ppmy.cn/news/451207.html

相关文章

哈希表--day3--(leetcode349/leetcode350)

leetcode349. 两个数组的交集 链接 基本思路 注意题目特意说明&#xff1a;输出结果中的每个元素一定是唯一的&#xff0c;也就是说输出的结果的去重的&#xff0c; 同时可以不考虑输出结果的顺序 这道题用暴力的解法时间复杂度是O(n^2)&#xff0c;那来看看使用哈希法进一…

mateRS能升级鸿蒙系统吗,为什么万元机华为maters保时捷玩吃鸡真么垃圾

满意答案 plae761576 2019.04.06 采纳率&#xff1a;45% 等级&#xff1a;8 已帮助&#xff1a;1160人 现在突然发现好多自媒体都在无下限的刷三观&#xff0c;为了点阅读量&#xff0c;想尽办法给网友们出玩《绝地求生》最低配置&#xff0c;最近看到一个大V自媒体竟然说显…

华为mate20 android,华为MateRS对比华为mate20RS,终于让安卓手机坐上了头等舱!

原标题&#xff1a;华为MateRS对比华为mate20RS&#xff0c;终于让安卓手机坐上了头等舱&#xff01; 最近华为mate20RS正式开卖了&#xff0c;但是却没有现货&#xff0c;因此也出现了很多黄牛在加价售卖这款限量版的手机。今天我们来跟大家说说上一代的限量版华为MateRS跟最新…

华为mate40计算机,华为Mate40兼容欧米多手机电脑,秒变笔电轻办公

万众瞩目的华为Mate40将于10月22日首发&#xff0c;作为史上最强大的华为旗舰手机&#xff0c;Mate40不仅以超强性能吊足了大家的胃口&#xff0c;也因为或将绝版的麒麟9000芯片&#xff0c;充满了悲情色彩&#xff0c;引得众人格外关注这款新机的一举一动。 根据爆料&#xff…

华为mate40pro+和华为mate40RS保时捷有什么区别

华为mate40pro标志性星环设计&#xff0c;来自宇宙的设计灵感&#xff0c;令科技与艺术环环相扣。浪漫秘银&#xff0c;经典黑白&#xff0c;还有黄色和绿色在素皮上带来的温润触感。来&#xff0c;感受一下从视觉到指尖的美妙。 华为Mate40预约抢购地址&#xff1a;https://ww…

【Java高级语法】(六)内部类Inner Class:这可能是史上最全的关于内部类的学习资料~

Java高级语法详解之包装类 :one: 概念:two: 优缺点:three: 使用2.1 成员内部类2.2 局部内部类2.3 匿名内部类2.4 静态内部类2.5 小结&#xff1a;外部类访问四种内部类的特点2.6 小结&#xff1a;其他类访问四种内部类的特点 :four: 内部类与外部类的关系:five: 应用场景:six: …

华为20号鸿蒙系统,鸿蒙系统2.0来了,华为Mate40推迟发布

虽然华为开发者大会比不上谷歌、苹果这一量级的同类活动&#xff0c;但在国内依然拥有极高的关注度。 其中&#xff0c;在主题演讲一项&#xff0c;华为会给我们带来关于 HMS Core 5.0 的最新进展&#xff0c;更重要的是还将会揭开鸿蒙 OS、EMUI11的神秘面纱&#xff01; 相信鸿…

华为mate40rs保时捷鸿蒙系统,鸿蒙手机“定档”,华为Mate40系列或是“最强”机型!...

原标题&#xff1a;鸿蒙手机“定档”&#xff0c;华为Mate40系列或是“最强”机型&#xff01; 华为手机 虽然下半年的手机市场中有大家十分期待的产品&#xff0c;但是对于用户来说&#xff0c;等待却非常折磨&#xff0c;因为当手机用户想持有新机的时候&#xff0c;欲望会被…