关于微信账单分析报表程序
摘要:学习了一个月左右的Qt,想实际编写一个小程序,偶然产生一个想法,根据记账APP,可以分析各类消费数据,但是微信账单不存在分析类功能,所以编写这样一个程序,套用了网上的一些模板代码,以及Qt自带典例,进行修改,本程序仍存在一些小问题,没有想到解决办法,待日后更深刻理解后,重新拾起再行修改。
创作思路:
1.编写界面框架:添加注册、登陆、忘记密码、退出等基础模块
2.编写数据库模型框架:文档信息、注册人员信息表、所导入微信账单数据、以及数据修改查找功能
3.加载数据图表功能:根据所导入数据,进行简单运算,绘制成图表,饼状图、以及柱形图
在加载数据的时候,通过读取文本文件,提取所需信息,从而创建表,插入数据以及对数据的处理
主界面框架界面

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//主界面
#include <QMainWindow>
#include <QCloseEvent>
#include <QSqlQuery>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
static MainWindow* getIntance();
// explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QString name;//注册者姓名
QString passward;注册者密码
QString identify;注册者编号
QSqlQuery *query;
// void closeEvent(QCloseEvent *event);
private slots:
void on_pushButton_clicked();//注册按键
void on_pushButton_2_clicked();//登陆按键
void on_pushButton_3_clicked();//忘记密码按键
void on_pushButton_4_clicked();//退出按键
private:
explicit MainWindow(QWidget *parent = 0);
static MainWindow* MW;
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
#include "mainwindow.h" #include "ui_mainwindow.h" #include"register.h" #include"logging.h" #include <QInputDialog> #include "mysql.h" #include <QSqlQuery> #include<QDebug> #include "sqlmodel.h" //主窗口 MainWindow * MainWindow::MW=NULL; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QFont labelFont,buttonFont;//设置字体 labelFont.setFamily("华文行楷"); ui->label->setFont(labelFont); buttonFont.setPointSize(18); buttonFont.setBold(true); ui->pushButton->setFont(buttonFont); ui->pushButton_2->setFont(buttonFont); ui->pushButton_3->setFont(buttonFont); ui->pushButton_4->setFont(buttonFont); } MainWindow *MainWindow::getIntance() { if(MW == NULL) { MW = new MainWindow(); } return MW; } MainWindow::~MainWindow() { MySql* mysql = new MySql; mysql->deleteDatas(); delete mysql; qDebug()<<"delete"; delete ui; } void MainWindow::on_pushButton_clicked()//注册 { Register *reg = new Register(this);//弹出注册窗口 reg->resize(390,300); reg->setWindowModality(Qt::WindowModal); reg->setWindowTitle("注册"); reg->show(); } void MainWindow::on_pushButton_2_clicked()//登陆 { logging *log = new logging(this);//弹出登陆窗口 log->resize(300,190); log->setWindowModality(Qt::WindowModal); log->setWindowTitle("登陆"); log->show(); } void MainWindow::on_pushButton_3_clicked()//忘记密码 { bool ok; QInputDialog ecf; name = ecf.getText(this,tr("忘记密码"),tr("请输入用户名:"),QLineEdit::Normal,NULL,&ok); identify=ecf.getText(this,tr("忘记密码"),tr("请输入证件号:"),QLineEdit::Normal,NULL,&ok); MySql mysql; bool ret=mysql.forgetpassward(name,identify); if(!ret) { QMessageBox::information(this,tr("消息"),tr("消息不匹配!"),QMessageBox::Ok); return; } QMessageBox::information(this,tr("消息"),tr("请妥善保管您的密码:%1").arg(passward),QMessageBox::Ok); return; } void MainWindow::on_pushButton_4_clicked()//退出 { //这里是想退出的时候删除掉之前创建的表,却保证每一次都产生唯一的表,保证数据的唯一性 //如果不删除表,会造成再登陆账户使用原来的表,新添加的数据会产生冲突 MySql* mysql = new MySql; mysql->closedb(); mysql->deleteDatas(); mysql->deleteProcessTables(sqlmodel::minMonth,sqlmodel::maxMonth,sqlmodel::Months); delete mysql; query=new QSqlQuery; while(query->next()){ static QString deletestrnumberall = QString("drop table MonthTradeTypeNumberall%1").arg(sqlmodel::Months); static QString deletestrAmountOfMoneyall = QString("drop table MonthTradeTypeAmountOfMoneyall%1").arg(sqlmodel::Months); static QString deletestrIncomeall = QString("drop table MonthIncomeall%1").arg(sqlmodel::Months); static QString deletestrSpendingall = QString("drop table MonthSpendingall%1").arg(sqlmodel::Months); query->exec(deletestrnumberall); query->exec(deletestrAmountOfMoneyall); query->exec(deletestrIncomeall); query->exec(deletestrSpendingall); } close(); }
注册界面


#ifndef REGISTER_H
#define REGISTER_H
#include <QMainWindow>
#include<QPushButton>
#include<QMessageBox>
#include"mysql.h"
#include <QProgressDialog>
//注册界面
namespace Ui {
class Register;
}
class Register : public QMainWindow
{
Q_OBJECT
public:
explicit Register(QWidget *parent = 0);
~Register();
private slots:
void on_yesOrNoBox_clicked(QAbstractButton *button);//只有一组按钮
private:
Ui::Register *ui;
};
#endif // REGISTER_H
#include "register.h"
#include "ui_register.h"
Register::Register(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::Register)
{
ui->setupUi(this);
ui->passwd->setEchoMode(QLineEdit::Password);//设置为密码模式不可见
ui->passwd2->setEchoMode(QLineEdit::Password);
}
Register::~Register()
{
delete ui;
}
//检测是否为空,以及密码两行是否正确
void Register::on_yesOrNoBox_clicked(QAbstractButton *button)//注册
{
if(ui->yesOrNoBox->button(QDialogButtonBox::Ok) == button)
{
if((ui->name->text() == "") || (ui->ID->text() == "") || (ui->passwd->text() == "") || (ui->passwd2->text() == ""))
{
QMessageBox::information(this, tr("警告"), tr("输入不能为空!!"), QMessageBox::Ok);
return;
}
if(ui->passwd->text() != ui->passwd2->text())
{
QMessageBox::information(this, tr("警告"), tr("输入密码错误!!"), QMessageBox::Ok);
return;
}
QString name = ui->name->text();
QString ids = ui->ID->text();
int id = ids.toInt();
QString teacher = ui->passwd->text();
QProgressDialog dialog(tr("正在注册"),tr("取消"), 0, 3000, this);
dialog.setWindowTitle(tr("进度"));
dialog.setWindowModality(Qt::WindowModal);
dialog.show();
for(int k = 0; k < 3000; k++)
{
dialog.setValue(k);
QCoreApplication::processEvents();
if(dialog.wasCanceled())
{
break;
}
}
dialog.setValue(3000);
//检查用户信息表中是否存在,如存在不能注册,不存在可以正常注册
//并会弹出提示框
MySql* mysql = new MySql;
bool ret = mysql->initcourses(id,name,teacher);
if(ret == false)
{
QMessageBox::information(this, tr("消息"), tr("用户已被注册!"), QMessageBox::Ok);
this->close();
return;
}
QMessageBox::information(this, tr("消息"), tr("注册成功!"), QMessageBox::Ok);
this->close();
}
else if(ui->yesOrNoBox->button(QDialogButtonBox::Cancel) == button)
{
this->close();
QProgressDialog dialog(tr("正在返回主界面"),tr("取消"), 0, 3000, this);
dialog.setWindowTitle(tr("进度"));
dialog.setWindowModality(Qt::WindowModal);
dialog.show();
for(int k = 0; k < 3000; k++)
{
dialog.setValue(k);
QCoreApplication::processEvents();
if(dialog.wasCanceled())
{
break;
}
}
dialog.setValue(3000);
}
}
登陆界面


#ifndef LOGGING_H
#define LOGGING_H
#include <QMainWindow>
#include <QPushButton>
#include <QMessageBox>
#include <QProgressDialog>
#include "mysql.h"
//登陆界面
#include <QAbstractButton>
namespace Ui {
class logging;
}
class logging : public QMainWindow
{
Q_OBJECT
public:
explicit logging(QWidget *parent = 0);
~logging();
private slots:
void on_yesOrNoBox_clicked(QAbstractButton *button);
private:
Ui::logging *ui;
};
#endif // LOGGING_H
#include "logging.h"
#include "ui_logging.h"
#include <QCompleter>
#include <QMessageBox>
#include"sqlmodel.h"
//登陆界面
logging::logging(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::logging)
{
//这里原本添加了一个自动补全功能,后来没有用上
ui->setupUi(this);
QStringList wordlist;
wordlist<<"数学"<<"英语"<<"计算机";
QCompleter *completer = new QCompleter(wordlist,this);
completer->setCaseSensitivity(Qt::CaseInsensitive);
ui->lineinput->setCompleter(completer);
ui->passward->setEchoMode(QLineEdit::Password); //密码方式显示文本
}
logging::~logging()
{
delete ui;
}
//如果账号密码相同则可以登陆弹出数据模型界面
//如不匹配则返回上一个窗口
void logging::on_yesOrNoBox_clicked(QAbstractButton *button)
{
if(ui->yesOrNoBox->button(QDialogButtonBox::Ok)==button)
{
if((ui->lineinput->text()=="")||(ui->passward->text()==""))
{
QMessageBox::information(this,tr("警告"),tr("输入不能为空!"),QMessageBox::Ok);
return;
}
QString name= ui->lineinput->text();
QString password=ui->passward->text();
QProgressDialog dialog(tr("正在登录"),tr("取消"),0,3000,this);
dialog.setWindowTitle(tr("进度"));
dialog.setWindowModality(Qt::WindowModal);
dialog.show();
for(int k=0;k<3000;k++)
{
dialog.setValue(k);
QCoreApplication::processEvents();
if(dialog.wasCanceled())
{
break;
}
}
dialog.setValue(3000);
MySql *mysql=new MySql;
bool ret=mysql->loguser(name,password);
if(!ret)
{
QMessageBox::information(this,tr("消息"),tr("帐号密码不匹配!"),QMessageBox::Ok);
this->close();
// Mparent->show(); //回到上一个窗口
return;
}
QMessageBox::information(this,tr("消息"),tr("登录成功!"),QMessageBox::Ok);
this->close();
sqlmodel *sql=new sqlmodel(this);
// sql->setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
sql->show();
return;
}
else if(ui->yesOrNoBox->button(QDialogButtonBox::Cancel)==button)
{
this->close();
QProgressDialog dialog(tr("正在返回主界面"),tr("取消"),0,3000,this);
dialog.setWindowTitle(tr("进度"));
dialog.setWindowModality(Qt::WindowModal);
dialog.show();
for(int k=0;k<3000;k++)
{
dialog.setValue(k);
QCoreApplication::processEvents();
if(dialog.wasCanceled())
{
break;
}
}
dialog.setValue(3000);
}
}
这里忘记密码和退出就不介绍了,代码再mainWindow里面
下面介绍数据库的使用
#ifndef MYSQL_H
#define MYSQL_H
#include<QSqlTableModel>
#include <QSql>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlQuery>
#include <QMessageBox>
#include "mainwindow.h"
class QSqlTableModel;
class MySql
{
public:
MySql();
void initsql();//配置数据库
bool loguser(QString name,QString passward);//检验账号密码
void createtable(); //建用户信息密码表
void createnewtable(); //创建数据表微信账单所包含的信息
bool forgetpassward(QString name,QString identify);//忘记密码处理
void dataProcessingTable(int minMonth,int maxMonth,int Months);//删除所有数据表
void theDataProcess(int minMonth,int maxMonth,int Months);//数据计算
//bool inituser(int id,QString name,QString teacher);
bool initcourses(int id,QString name,QString teacher);//添加注册信息
void initdatas(int id,QString TradingHours ,QString TradeType ,QString CounterParty,QString Goods ,
QString IncomeAndExpenses ,QString Sum ,QString MethodOfPayment ,
QString TheCurrentState ,QString TransactionNumber,
QString GoodsNumber ,QString Note );//添加微信账单所包含的信息
void deleteDatas();//清除数据表(微信账单的所有数据)
//void deleteProcessTable(int months);
void deleteProcessTables(int minMonth,int maxMonth,int Months );//清除所产生的分析数据
void closedb();//关闭数据库
private:
QSqlQuery *query;
QSqlTableModel *model;
QSqlDatabase db;
};
#endif // MYSQL_H
#include "mysql.h"
//数据库
MySql::MySql()
{
}
void MySql::initsql()
{
//由于Qt自带数据库驱动支持QSQLITE,所以选择这个数据库,基本连接方式,翻书参考教程
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("127.0.0.1");//本地主机
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("Stu.db");//数据库名称”Stu“
//数据库打开,则控制台输出"Database connected successfully!"否则弹出警告窗口
if(db.open())
{
qDebug()<<"Database connected successfully!";
return;
}
else
{
QMessageBox::critical(0,"Cannot open database","Unable to establish a database connection.",QMessageBox::Cancel);
}
}
bool MySql::loguser(QString name,QString passward)
{
//检测账号密码是否正确
//运用查找语句以及数据表的数据对比,有的地方需要格式转换如toInt(),toString()需要什么种类的数据
//自行筛选转换
bool check = false;
query=new QSqlQuery;
query->exec("select * from courses");
while(query->next()){
qDebug()<<query->value(0).toInt()<<query->value(1).toString()<<query->value(2).toString();
if((name==query->value(1).toString())&&(passward==query->value(2).toString()))
{
check =true;
}
}
if(check==true){
return true;
}
else
return false;
}
void MySql::createtable()
{
QSqlQuery query;
//创建表,这张表用来储存用户信息
// 创建courses表
query.exec("create table courses (id int primary key, "
"name varchar, teacher varchar)");
}
void MySql::createnewtable()
{
QSqlQuery query;
//创建数据表datas
//这张表用来储存从微信账单中读出的每一条数据,
bool ret = query.exec("create table datas (id int primary key, "
"TradingHours varchar, TradeType varchar,CounterParty varchar,Goods varchar,"
"IncomeAndExpenses varchar,Sum varchar,MethodOfPayment varchar,"
"TheCurrentState varchar,TransactionNumber varchar,"
"GoodsNumber varchar,Note varchar)");
qDebug()<<ret<<"datas";
}
bool MySql::forgetpassward(QString name, QString identify)
{
//这里是密码找回功能,如忘记密码,提供账号以及编号可获取密码
bool check = false;
query=new QSqlQuery;
query->exec("select * from courses");
QString ids = identify;
int id = ids.toInt();
while(query->next()){
qDebug()<<query->value(0).toInt()<<query->value(1).toString()<<query->value(2).toString();
if((name==query->value(1).toString())||(id==query->value(0).toInt()))
{
check =true;
MainWindow *MW=MainWindow::getIntance();
MW->passward=query->value(2).toString();
}
}
if(check==true){
return true;
}
else
return false;
}
void MySql::dataProcessingTable(int minMonth, int maxMonth, int Months)//创建数据处理表
{
QSqlQuery query;
//这里是创建数据处理表,每一份微信账单可能有1-4个月份,因此根据月份不同自动识别创建表
//有类型数据表,类型价格表,收入价格表,支出价格表
//创建表都是重复过程代码量有些长,看第一个case(1)就好了
switch(Months){
case (1):{
static QString strnumber1 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(minMonth);
static QString strAmountOfMoney1 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(minMonth);
static QString strIncome1 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(minMonth);
static QString strSpending1 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(minMonth);
bool strn1 = query.exec(strnumber1);
bool stra1 = query.exec(strAmountOfMoney1);
bool stri1 = query.exec(strIncome1);
bool strs1 = query.exec(strSpending1);
qDebug()<<strn1<<stra1<<stri1<<strs1<<"成功创建四个处理数据表单";
} break;
case(2):{
//总表
static QString strnumberall = QString("create table MonthTradeTypeNumberall%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(Months);
static QString strAmountOfMoneyall = QString("create table MonthTradeTypeAmountOfMoneyall%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(Months);
static QString strIncomeall = QString("create table MonthIncomeall%1(id int primary key,IncomeNumber double)").arg(Months);
static QString strSpendingall = QString("create table MonthSpendingall%1(id int primary key,IncomeNumber double)").arg(Months);
//小月份
static QString strnumber1 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(minMonth);
static QString strAmountOfMoney1 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(minMonth);
static QString strIncome1 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(minMonth);
static QString strSpending1 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(minMonth);
//大月份
static QString strnumber2 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(maxMonth);
static QString strAmountOfMoney2 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(maxMonth);
static QString strIncome2 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(maxMonth);
static QString strSpending2 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(maxMonth);
query.exec(strnumberall);
query.exec(strAmountOfMoneyall);
query.exec(strIncomeall);
query.exec(strSpendingall);
query.exec(strnumber1);
query.exec(strAmountOfMoney1);
query.exec(strIncome1);
query.exec(strSpending1);
query.exec(strnumber2);
query.exec(strAmountOfMoney2);
query.exec(strIncome2);
query.exec(strSpending2);
}break;
case(3):{
//总表
static QString strnumberall = QString("create table MonthTradeTypeNumberall%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(Months);
static QString strAmountOfMoneyall = QString("create table MonthTradeTypeAmountOfMoneyall%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(Months);
static QString strIncomeall = QString("create table MonthIncomeall%1(id int primary key,IncomeNumber double)").arg(Months);
static QString strSpendingall = QString("create table MonthSpendingall%1(id int primary key,IncomeNumber double)").arg(Months);
//小月份
static QString strnumber1 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(minMonth);
static QString strAmountOfMoney1 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(minMonth);
static QString strIncome1 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(minMonth);
static QString strSpending1 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(minMonth);
//中月份
static QString strnumber2 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(minMonth+1);
static QString strAmountOfMoney2 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(minMonth+1);
static QString strIncome2 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(minMonth+1);
static QString strSpending2 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(minMonth+1);
//大月份
static QString strnumber3 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(maxMonth);
static QString strAmountOfMoney3 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(maxMonth);
static QString strIncome3 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(maxMonth);
static QString strSpending3 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(maxMonth);
query.exec(strnumberall);
query.exec(strAmountOfMoneyall);
query.exec(strIncomeall);
query.exec(strSpendingall);
query.exec(strnumber1);
query.exec(strAmountOfMoney1);
query.exec(strIncome1);
query.exec(strSpending1);
query.exec(strnumber2);
query.exec(strAmountOfMoney2);
query.exec(strIncome2);
query.exec(strSpending2);
query.exec(strnumber3);
query.exec(strAmountOfMoney3);
query.exec(strIncome3);
query.exec(strSpending3);
} break;
case(4):{
//总表
static QString strnumberall = QString("create table MonthTradeTypeNumberall%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(Months);
static QString strAmountOfMoneyall = QString("create table MonthTradeTypeAmountOfMoneyall%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(Months);
static QString strIncomeall = QString("create table MonthIncomeall%1(id int primary key,IncomeNumber double)").arg(Months);
static QString strSpendingall = QString("create table MonthSpendingall%1(id int primary key,IncomeNumber double)").arg(Months);
//小1月
static QString strnumber1 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(minMonth);
static QString strAmountOfMoney1 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(minMonth);
static QString strIncome1 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(minMonth);
static QString strSpending1 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(minMonth);
//小2月
static QString strnumber2 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"
"changeWithDraeal int,scanningQrCodeToPay int,"
"weChatLuckyMoney int,ChangeToPrepaidPhone int)").arg(minMonth+1);
static QString strAmountOfMoney2 = QString("create table MonthTradeTypeAmountOfMoney%1(id int primary key,consumption double,"
"transfer double,other double,transferTheRefund double,"
"changeWithDraeal double,scanningQrCodeToPay double,"
"weChatLuckyMoney double,ChangeToPrepaidPhone double)").arg(minMonth+1);
static QString strIncome2 = QString("create table MonthIncome%1(id int primary key,IncomeNumber double)").arg(minMonth+1);
static QString strSpending2 = QString("create table MonthSpending%1(id int primary key,IncomeNumber double)").arg(minMonth+1);
//大3月
static QString strnumber3 = QString("create table MonthTradeTypeNumber%1(id int primary key,consumption int,"
"transfer int,other int,transferTheRefund int,"

使用Qt编写的微信账单分析程序,包含注册、登录、数据导入和图表展示功能。通过对微信账单数据的处理,生成饼状图和柱形图进行消费分析。
最低0.47元/天 解锁文章
1929

被折叠的 条评论
为什么被折叠?



