其实组里的人都比较懒,做完了之后觉得应该做个游戏什么的比较考验自己的能力,不过做实用的软件也确实比较有意思,为此还买了个机械键盘,感觉有点浪费hhh,下面开始正题了。
软件要实现的几个主要功能
我在这里用的是Qt自带的一个比较简单的QSQLite,有需求的可以上远程服务器,不过我这里还是遇到了一些问题就是在打包之后无法使用数据库,可能是依赖没有添加的原因,由于已经蒙混过关了所以就没有深究这一块的问题。
bool OpenDateBase();
int main(int argc, char *argv[])
{
OpenDateBase();
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
bool OpenDateBase(){
QSqlDatabase mydb=QSqlDatabase::addDatabase("QSQLITE");
mydb.setDatabaseName("cashitem.db");
if(mydb.open())
{
qDebug()<<"open success";
QSqlQuery query;
//新建item表,id设置为主键,一个金额,一个类型,一个内容,一个时间
query.exec("create table item(id INTEGER PRIMARY KEY AUTOINCREMENT,money int,type varchar,content varchar,addtime time,useraccount varchar)");//条目,即输入的支出数据
query.exec("create table user(id INTEGER PRIMARY KEY AUTOINCREMENT,useraccount varchar,userpassword varchar,useremail varchar)");//用户信息
query.exec("create table user_budget_setting(id INTEGER PRIMARY KEY AUTOINCREMENT,useraccount varchar,dayBudget int,monthBudget int,yearBudget int)");//用户的支出与预算表
return true;
}
else
{
//给出debug提示,便于定位错误的地点
qDebug()<<"open failed";
return false;
}
}
#-------------------------------------------------
#
# Project created by QtCreator 2019-07-03T10:40:19
#
#-------------------------------------------------
QT += core gui sql charts
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
tagWidgetLayout.setParent(ui->dailyBoardContent);
connect(&user_login,&userLoginWindow::loginSuccess,this,&MainWindow::user_login_sucess);
connect(&itemMark,&itemMark::conveyData,this,&MainWindow::addNewItemLabel);
ui->edit_pushButton->hide();
ui->delet_pushButton_2->hide();
ui->statusBar->hide();
ui->menuBar->hide();
ui->mainToolBar->hide();
}
MainWindow::~MainWindow()//主窗口的销毁函数
{
QSqlQuery query;//建立一个数据库的query
QString sql1;
sql1="insert into user_login(id,useraccount)values(NULL,'') ";
query.exec(sql1);
query.exec("select id,useraccount from user_login where id >= 0");
while (query.next()) {
QString id = query.value(0).toString();
useraccount = query.value(1).toString();
qDebug()<<"mainwindow:"<tabWidget->hide();
itemMark.show();
}
void MainWindow::addNewItemLabel(int money ,QString type,QString content){
newWidget = new itemWidget(money,type,content,ui->itemListWidget);
QSqlQuery query1;
query1.exec("select id,useraccount from user_login where id >= 0");
while (query1.next()) {
QString id = query1.value(0).toString();
useraccount = query1.value(1).toString();
qDebug()<itemListWidget,0);
listwidgetitem->setSizeHint(QSize(50,50));
ui->itemListWidget->setItemWidget(listwidgetitem,newWidget);
ui->itemListWidget->show();
}
}
void MainWindow::deletItem(){
QListWidgetItem *listwidgetitem= ui->itemListWidget->currentItem();
listwidgetitem->setHidden(true);
}
void MainWindow::on_userAvatarPic_clicked()
{
user_login.show();
}
void MainWindow::on_dailyBoardButton_clicked()
{
ui->stackedWidget->setCurrentIndex(0);
}
void MainWindow::on_chartAnalysisButton_clicked()
{
int i = ui->monthSelector->currentIndex();
chartsMaking(i+1);
ui->stackedWidget->setCurrentIndex(1);
}
void MainWindow::on_bugetSettingButton_clicked()
{
QSqlQuery query_user;
query_user.exec("select id,useraccount from user_login where id >= 0");
while(query_user.next()){
useraccount = query_user.value(1).toString();
// qDebug()<stackedWidget->setCurrentIndex(2);
QSqlQuery query;
QDateTime dtm;
QString timeNow=dtm.currentDateTime().toString("yyyyMMdd");
int year = timeNow.toInt();
// int day = year % 100;
year/=100;
// int month = year % 100;
year/=100;
int thisMonthCost(0),thisDayCost(0),thisYearCost(0);
QString monthNow = timeNow.remove(6,7);
timeNow=dtm.currentDateTime().toString("yyyyMMdd");
QString sql =QString("select money,addtime,useraccount from item where addtime between '%1%2%3'and '%4%5%6'").arg(year).arg("01").arg("01").arg(year+1).arg("01").arg("00");
query.exec(sql);
while(query.next()){
if (query.value(2).toString() == useraccount) {
thisYearCost+=query.value(0).toInt();
if (query.value(1).toString().contains(monthNow,Qt::CaseInsensitive)) thisMonthCost+=query.value(0).toInt();
if (query.value(1).toString() == timeNow ) thisDayCost+=query.value(0).toInt();
}
}
//qDebug()<dayBudget)//TODO 增加弹窗提示
{
ui->dayprogressBar->setMaximum(thisDayCost);
}
else ui->dayprogressBar->setMaximum(dayBudget);
if (thisMonthCost>monthBudget)//TODO 增加弹窗提示
{
ui->monthprogressBar->setMaximum(thisMonthCost);
}
else ui->monthprogressBar->setMaximum(monthBudget);
if (thisYearCost>yearBudget)//TODO 增加弹窗提示
{
ui->yearprogressBar->setMaximum(thisYearCost);
}
else ui->yearprogressBar->setMaximum(yearBudget);
ui->dayprogressBar->setValue(thisDayCost);
ui->monthprogressBar->setValue(thisMonthCost);
ui->yearprogressBar->setValue(thisYearCost);
QString daylabel = QString("每日预算:%1/%2").arg(thisDayCost).arg(dayBudget);
QString monthlabel = QString("每月预算:%1/%2").arg(thisMonthCost).arg(monthBudget);
QString yearlabel = QString("每年预算:%1/%2").arg(thisYearCost).arg(yearBudget);
ui->dayBudgetSetlabel->setText(daylabel);
ui->monthBudgetSetlabel->setText(monthlabel);
ui->yearBudgetSetlabel->setText(yearlabel);
}
void MainWindow::on_dayBudgetSetButton_clicked()
{
//接收新的预算
int dayBudget;
dayBudget = QInputDialog::getInt(this,"设置","每日预算:",0);
QSqlQuery query;
QSqlQueryModel *model_2 = new QSqlQueryModel;
QString sql = QString("select count (*) from user_budget_setting where useraccount = '%1'").arg(useraccount);
model_2->setQuery(sql);
QModelIndex index1 = model_2->index(0,0);
if (index1.data()==0){//插入一条新记录
sql = QString("insert into user_budget_setting(id,dayBudget,monthBudget,yearBudget,useraccount) values(NULL,'%1','%2','%3','%4')").arg(dayBudget).arg(0).arg(0).arg(useraccount);
qDebug()<dayprogressBar->value()).arg(dayBudget);
ui->dayBudgetSetlabel->setText(daylabel);
if (ui->dayprogressBar->value()>dayBudget)//TODO 增加弹窗提示
{
ui->dayprogressBar->setMaximum(ui->dayprogressBar->value());
}
else ui->dayprogressBar->setMaximum(dayBudget);
ui->dayBudgetSetlabel->show();
}
void MainWindow::on_monthBudgetSetButton_clicked()
{
//接收新的预算
int monthBudget;
monthBudget = QInputDialog::getInt(this,"设置","每月预算:",0);
//TODO添加数据库操作
QSqlQuery query;
QSqlQueryModel *model_2 = new QSqlQueryModel;
QString sql = QString("select count (*) from user_budget_setting where useraccount = '%1'").arg(useraccount);
model_2->setQuery(sql);
QModelIndex index1 = model_2->index(0,0);
if (index1.data()==0){//插入一条新记录
sql = QString("insert into user_budget_setting(id,dayBudget,monthBudget,yearBudget,useraccount) values(NULL,'%1','%2','%3','%4')").arg(0).arg(monthBudget).arg(0).arg(useraccount);
qDebug()<monthprogressBar->value()).arg(monthBudget);
ui->monthBudgetSetlabel->setText(monthlabel);
if (ui->monthprogressBar->value()>monthBudget)//TODO 增加弹窗提示
{
ui->monthprogressBar->setMaximum(ui->monthprogressBar->value());
}
else ui->monthprogressBar->setMaximum(monthBudget);
ui->monthBudgetSetlabel->show();
}
void MainWindow::on_yearBudgetSetButton_clicked()
{
//接收新的预算
int yearBudget;
yearBudget = QInputDialog::getInt(this,"设置","每年预算:",0);
//TODO添加数据库操作
QSqlQuery query;
QSqlQueryModel *model_2 = new QSqlQueryModel;
QString sql = QString("select count (*) from user_budget_setting where useraccount = '%1'").arg(useraccount);
model_2->setQuery(sql);
QModelIndex index1 = model_2->index(0,0);
if (index1.data()==0){//插入一条新记录
sql = QString("insert into user_budget_setting(id,dayBudget,monthBudget,yearBudget,useraccount) values(NULL,'%1','%2','%3','%4')").arg(0).arg(0).arg(yearBudget).arg(useraccount);
qDebug()<yearprogressBar->value()).arg(yearBudget);
ui->yearBudgetSetlabel->setText(yearlabel);
if (ui->yearprogressBar->value()>yearBudget)//TODO 增加弹窗提示
{
ui->yearprogressBar->setMaximum(ui->yearprogressBar->value());
}
else ui->yearprogressBar->setMaximum(yearBudget);
ui->yearBudgetSetlabel->show();
}
void MainWindow::on_monthSelector_activated(int index)
{
int x = index;
x++;
chartsMaking(x);
}
//饼状图生成函数
void MainWindow::chartsMaking(int month)
{
QSqlQuery query1;
query1.exec("select id,useraccount from user_login where id >= 0");
while (query1.next()) {
QString id = query1.value(0).toString();
useraccount = query1.value(1).toString();
qDebug()<<"BarMaking:"<append("饮食",eatMoney);
series->append("娱乐",entertainmentMoney);
series->append("教育",eduMoney);
series->setLabelsVisible();
/*QPieSlice *slice_red = series->slices().at(0);
QPieSlice *slice_green = series->slices().at(1);
QPieSlice *slice_blue = series->slices().at(2);
slice_red->setColor(QColor(255,0,0,255));
slice_green->setColor(QColor(0,255,0,255));
slice_blue->setColor(QColor(0,0,255,255));*/
QChart *chart = new QChart();
chart->addSeries(series);
QString title = QString("您的%1月的账单统计图").arg(month);
chart->setTitle(title);
chart->legend()->hide();
ui->chartViewer->setChart(chart);
//QChartView *chartview = new QChartView(chart);
//chartview->setRenderHint(QPainter::Antialiasing);
//chartview->resize(400,400);
//chartview->show();
//ui->graphicsView->setChart(chart);
//ui->graphicsView->setRenderHint(QPainter::Antialiasing);
}
//柱状图生成函数
void MainWindow::barChartsMaking(int month){
QSqlQuery query1;
query1.exec("select id,useraccount from user_login where id >= 0");
while (query1.next()) {
QString id = query1.value(0).toString();
useraccount = query1.value(1).toString();
qDebug()<<"BarMaking:"<append(set);
//series->append(setEntertainment);
//series->append(setEdu);
QChart *chart = new QChart();
QString title = QString("您的%1月的账单统计图").arg(month);
chart->setTitle(title);
QBarCategoryAxis *axis = new QBarCategoryAxis();
axis->append(category);
chart->createDefaultAxes();
chart->addSeries(series);
chart->setAxisX(axis,series);
ui->chartViewer->setChart(chart);
}
void MainWindow::on_delet_pushButton_2_clicked()
{
QListWidgetItem *listwidgetitem= ui->itemListWidget->currentItem();
listwidgetitem->setHidden(true);
QSqlQuery query;
int curRow = ui->itemListWidget->currentIndex().row(); //鼠标选择删除第几行
QModelIndex index = ui->itemListWidget->currentIndex();
int id=index.sibling(curRow,0).data().toInt();
QString str =QString("delete from item where id = '%1'").arg(curRow) ;
query.exec(str);
}
//编辑按钮
void MainWindow::on_edit_pushButton_clicked()
{
QSqlQuery query;
query.exec("select id,money,type,content,addtime from item where id >= 1");
QString str;
QString str1;
QString str2;
QString str3;
QString str4;
QString str5;
QDateTime dtm;
int dtm0;
while(query.next())
{
//query.value(0)是id的值,将其转换为int型
//QString str0 = dtm.toString("yyyy-mm-dd hh:mm:ss");
str1 = query.value(0).toString();
str2 = query.value(1).toString();
str3 = query.value(2).toString();
str4 = query.value(3).toString();
str5 = query.value(4).toString();
//输出两个值
qDebug() << str1<< str2<< str3<< str4<itemListWidget->clear();
}
void MainWindow::user_login_sucess(){
QSqlQuery query1;
query1.exec("select id,useraccount from user_login where id >= 0");
while (query1.next()) {
QString id = query1.value(0).toString();
useraccount = query1.value(1).toString();
qDebug()<<"mainwindow:"<itemListWidget->clear();
while (query1.next()) {
QString id = query1.value(0).toString();
int money = query1.value(1).toInt();
QString type = query1.value(2).toString();
QString content = query1.value(3).toString();
useraccount = query1.value(5).toString();
newWidget = new itemWidget(money,type,content,ui->itemListWidget);
QListWidgetItem *listwidgetitem = new QListWidgetItem(ui->itemListWidget,0);
listwidgetitem->setSizeHint(QSize(50,50));
ui->itemListWidget->setItemWidget(listwidgetitem,newWidget);
ui->itemListWidget->show();
qDebug()<monthSelector->currentIndex();
chartsMaking(index+1);
}
void MainWindow::on_selectLinerChart_clicked()
{
int index;
index = ui->monthSelector->currentIndex();
barChartsMaking(index+1);
}
#include "userloginwindow.h"
#include "ui_userloginwindow.h"
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
userLoginWindow::userLoginWindow(QWidget *parent) :
QWidget(parent),
ui(new Ui::userLoginWindow)
{
ui->setupUi(this); this->setWindowTitle(" ");
//注册页面
ui->userID_reg->setPlaceholderText("请输入用户名");
ui->userPassword_reg->setPlaceholderText("密码");
ui->userPassword_reg_2->setPlaceholderText("确认密码");
ui->userPassword_reg->setEchoMode(QLineEdit::Password);
ui->userPassword_reg_2->setEchoMode(QLineEdit::Password);
ui->userMail->setPlaceholderText("[email protected]");
//注册操作
connect(ui->reg_button,&QPushButton::clicked,this,&userLoginWindow::sendToDateBase_regist);
//登陆操作
connect(ui->loginButton,&QPushButton::clicked,this,&userLoginWindow::sendToDateBase_log);
//登录界面
ui->username->setPlaceholderText("请输入用户名");
ui->userPassword->setEchoMode(QLineEdit::Password);
ui->userPassword->setPlaceholderText("请输入密码");
}
userLoginWindow::~userLoginWindow()
{
delete ui;
}
void userLoginWindow::on_registerButton_clicked()
{
ui->log->hide();
ui->reg->show();
}
void userLoginWindow::on_return_button_clicked()
{
ui->log->show();
ui->reg->hide();
}
void userLoginWindow::sendToDateBase_regist(){
QSqlQuery query;
QString sql;
QString str1 ,str2, str3;
str1 = ui->userID_reg->text();
str2 = ui->userPassword_reg->text();
str3 = ui->userMail->text();
QSqlQueryModel *model1=new QSqlQueryModel;
sql = QString("select count (*) from user where useraccount = '%1'").arg(str1);
model1->setQuery(sql);
QModelIndex index1=model1->index(0,0);
//query.exec(sql);
if(index1.data()==0){
//如果这条数据不存在那么插入这条数据
sql = QString("insert into user(id, useraccount, userpassword,useremail) values(NULL,'%1', '%2', '%3')").arg(str1).arg(str2).arg(str3);
query.exec(sql);
//debug测试
query.exec("select id,useraccount,userpassword,useremail from user where id >= 1");
while(query.next())
{
//query.value(0)是id的值,将其转换为int型
//QString str0 = dtm.toString("yyyy-mm-dd hh:mm:ss");
str1 = query.value(1).toString();
str2 = query.value(2).toString();
str3 = query.value(3).toString();
//输出两个值
qDebug() << str1<< str2<< str3 ;
}
qDebug()<<"注册成功";
ui->userID_reg->clear();
ui->userPassword_reg->clear();
ui->userPassword_reg_2->clear();
ui->userMail->clear();
ui->reg->hide();
ui->log->show();
}else{
qDebug()<<"用户已存在";
}
}
void userLoginWindow::sendToDateBase_log(){
QSqlQuery query;
QString sql;
QString str1 ,str2, str3;
str1 = ui->username->text();//用户输入的用户名
str2 = ui->userPassword->text();//用户输入的密码
QSqlQueryModel *model1=new QSqlQueryModel;
QSqlQueryModel *model2=new QSqlQueryModel;
sql = QString("select count (*) from user where useraccount = '%1'").arg(str1);
model1->setQuery(sql);
QModelIndex index1=model1->index(0,0);
if(index1.data()==0){
qDebug()<<"用户名不存在";
}else{
//获取该用户名下的密码进行对比
sql=QString("select userpassword from user where useraccount = '%1'").arg(str1);
model2->setQuery(sql);
QModelIndex index2=model2->index(0,0);
if(index2.data()==str2){
query.exec("create table user_login(id INTEGER PRIMARY KEY AUTOINCREMENT ,useraccount varchar)");//这张表是为了获取当前登录的用户,并以此来确定各个模块的显示
sql = QString("insert into user_login(id,useraccount) values(NULL,'%1')").arg(str1);
query.exec(sql);
qDebug()<<"userlogwindow:"<username->clear();
ui->userPassword->clear();
this->close();
qDebug()<<"登陆成功";
}else{
qDebug()<<"密码错误";
}
}
}
void userLoginWindow::regUser()
{
int user_num_int;
qint64 pos;
QFile file("userAccout.txt");
bool isOk = file.open(QIODevice::ReadWrite|QIODevice::Text);
if (isOk == true){
pos=file.size();
QString user_num = file.readLine();
QTextStream txtout(&file);
for (int i=0;iuserID_reg->text()<userPassword_reg->text()<userMail->text()<log->show();
ui->reg->hide();
ui->userID_reg->clear();
ui->userPassword_reg->clear();
ui->userPassword_reg_2->clear();
ui->userMail->clear();
}