Qt 每月收支计算

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

Qt 每月收支计算_第1张图片

Qt 每月收支计算_第2张图片Qt 每月收支计算_第3张图片

Qt 每月收支计算_第4张图片

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 

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 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 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 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);
}

你可能感兴趣的:(qt,ui,开发语言)