选题:PC端记账本软件

语言:C++

开发工具:Qt库、Qt Creator

其实组里的人都比较懒,做完了之后觉得应该做个游戏什么的比较考验自己的能力,不过做实用的软件也确实比较有意思,为此还买了个机械键盘,感觉有点浪费hhh,下面开始正题了。
软件要实现的几个主要功能

1.记录每日支出

2.实现简单的本地登录功能->即实现数据库的写入与读取

我在这里用的是Qt自带的一个比较简单的QSQLite,有需求的可以上远程服务器,不过我这里还是遇到了一些问题就是在打包之后无法使用数据库,可能是依赖没有添加的原因,由于已经蒙混过关了所以就没有深究这一块的问题。

3.实现支出数据的图表化


总体看下来个人认为比较繁琐的是数据库的部分,巧的是我之前做的一个项目里有比较接近的模块,所以这部分是我自己来负责的,零零总总还都比较简单,由于队友都不太行hhhh,我也就没想着做拓展功能,谁能想到五个人的团队实际上只有两个人在写代码呢?

bool OpenDateBase();
int main(int argc, char *argv[])
{OpenDateBase();QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

可以看到main部分的代码还是比较简单的,大概是实现这么一个逻辑:打开数据库,生成窗口实例,展示窗口最后再让窗口一直显示

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

必须在Qt给出的.pro文件中添加sql,见下文的最后一行

#-------------------------------------------------
#
# Project created by QtCreator 2019-07-03T10:40:19
#
#-------------------------------------------------QT       += core gui sql charts

这一部分的代码我是根据网上的一篇博客改的,在这里我先创建了一个数据库,若数据库存在那么就会直接调用,这里的数据库使用还是比较轻松的,以前我用服务器的数据库真的是一波三折哈哈哈,而后创建了三张数据表,含义在我给的注释里。

这个主键我也是纠结了很久,我以为给他传一个NULL就好了,后来我发现还不能加‘’单引号确实比较坑爹,详细可以看我后面给出的代码。

接下来是主窗口的代码mainwindow:


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;//建立一个数据库的queryQString 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:"<<id<<useraccount;}delete ui;
}void MainWindow::on_addItemButton_clicked()
{//ui->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()<<id<<useraccount;}if(content!=NULL){QDateTime dtm;QString timestr = dtm.currentDateTime().toString("yyyyMMdd");QSqlQuery query;//建立一个数据库的queryQString sql1;sql1=QString("insert into item(id, money, type,content,addtime,useraccount) values(NULL,'%1', '%2', '%3','%4','%5')").arg(money).arg(type).arg(content).arg(timestr).arg(useraccount);query.exec(sql1);qDebug()<<money<<type<<content<<timestr<<useraccount;QListWidgetItem *listwidgetitem = new QListWidgetItem(ui->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()<<useraccount;}ui->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()<<thisDayCost;//qDebug()<<thisMonthCost;//qDebug()<<thisYearCost;sql = QString("select dayBudget,monthBudget,yearBudget from user_budget_setting where useraccount = '%1'").arg(useraccount);query.exec(sql);int dayBudget(0),monthBudget(0),yearBudget(0);while(query.next()){qDebug()<<query.value(0).toInt();qDebug()<<query.value(1).toInt();qDebug()<<query.value(2).toInt();dayBudget=query.value(0).toInt();monthBudget=query.value(1).toInt();yearBudget=query.value(2).toInt();}if (thisDayCost>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()<<useraccount;query.exec(sql);}else { //更新记录//DebugqDebug()<<"更新成功";sql = QString("update user_budget_setting set dayBudget = '%1' where useraccount = '%2'").arg(dayBudget).arg(useraccount);query.exec(sql);}//更新预算进度标签QString daylabel = QString("每日预算:%1/%2").arg(ui->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()<<useraccount;query.exec(sql);}else { //更新记录//DebugqDebug()<<"更新成功";sql = QString("update user_budget_setting set monthBudget = '%1' where useraccount = '%2'").arg(monthBudget).arg(useraccount);query.exec(sql);}//更新预算进度标签QString monthlabel = QString("每月预算:%1/%2").arg(ui->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()<<useraccount;query.exec(sql);}else { //更新记录//DebugqDebug()<<"更新成功";sql = QString("update user_budget_setting set yearBudget = '%1' where useraccount = '%2'").arg(yearBudget).arg(useraccount);query.exec(sql);}//更新预算进度标签QString yearlabel = QString("每年预算:%1/%2").arg(ui->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:"<<id<<useraccount;}//获取当前用户账号QSqlQuery query;QString sql =QString("select  money, type from item where useraccount = '%1'and addtime between '20190%2%3'and '20190%4%5'").arg(useraccount).arg(month).arg("01").arg(month+1).arg("00") ;query.exec(sql);int eatMoney,entertainmentMoney,eduMoney;eatMoney=0;entertainmentMoney = 0;eduMoney=0;//int eatMoney_per,entertainmentMoney_per,eduMoney_per;while (query.next()) {if(query.value(1).toString()=="饮食"){eatMoney+=query.value(0).toInt();}else if(query.value(1).toString()=="娱乐"){entertainmentMoney+=query.value(0).toInt();}else if(query.value(1).toString()=="教育"){eduMoney+=query.value(0).toInt();}}qDebug()<<eatMoney;qDebug()<<entertainmentMoney;qDebug()<<eduMoney;qDebug()<<month;QPieSeries *series = new QPieSeries();series->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:"<<id<<useraccount;}//获取当前用户账号QStringList category;QSqlQuery query;QString sql =QString("select  money, type from item where useraccount = '%1'and addtime between '20190%2%3'and '20190%4%5'").arg(useraccount).arg(month).arg("01").arg(month+1).arg("00") ;query.exec(sql);QBarSet *set = new QBarSet("总览");QBarSet *setEntertainment = new QBarSet("娱乐");QBarSet *setEdu = new QBarSet("教育");int eatMoney,entertainmentMoney,eduMoney;eatMoney=0;entertainmentMoney = 0;eduMoney=0;//int eatMoney_per,entertainmentMoney_per,eduMoney_per;while (query.next()) {if(query.value(1).toString()=="饮食"){eatMoney+=query.value(0).toInt();}else if(query.value(1).toString()=="娱乐"){entertainmentMoney+=query.value(0).toInt();}else if(query.value(1).toString()=="教育"){eduMoney+=query.value(0).toInt();}}*set<<eatMoney<<entertainmentMoney<<eduMoney;*setEntertainment<<entertainmentMoney;*setEdu<<eduMoney;/*while(query.next()){int i=1;if(query.value(1).toString()=="饮食"){*setEat<<query.value(0).toInt();//*setEntertainment<<0;//*setEdu<<0;category<<"饮食";}else if(query.value(1).toString()=="娱乐"){//*setEat<<0;*setEntertainment<<query.value(0).toInt();//*setEdu<<0;category<<"娱乐";}else if(query.value(1).toString()=="教育"){//*setEat<<0;//*setEntertainment<<0;*setEdu<<query.value(0).toInt();category<<"教育";}}*/category<<"饮食"<<"娱乐"<<"教育";QBarSeries *series = new QBarSeries();series->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<<str5 ;}
}void MainWindow::on_clearButton_clicked()
{QSqlQuery query;query.exec("drop table item");query.exec("drop table user");query.exec("drop table user_login");query.exec("drop table user_buget_setting");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_login(id INTEGER PRIMARY KEY AUTOINCREMENT ,useraccount varchar)");ui->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:"<<id<<useraccount;}qDebug()<<useraccount;QString sql = QString("select id,money,type,content,addtime,useraccount from item where useraccount = '%1'").arg(useraccount);query1.exec(sql);ui->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()<<money<<type<<content<<useraccount;}
}void MainWindow::on_selectPieChart_clicked()
{int index;index = ui->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<QFile>
#include<QString>
#include<QDialog>
#include<QFileDialog>
#include<QDebug>
#include<QSqlQuery>
#include<QSqlQueryModel>
#include<iostream>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("xxx@xxx.xxx");//注册操作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:"<<str1;emit loginSuccess();//将用户名作为信息传递出去//清空输入栏ui->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;i<user_num_int*4;i++){ if (file.canReadLine()) file.readLine();}txtout<<"------"<<endl;txtout<<ui->userID_reg->text()<<endl;txtout<<ui->userPassword_reg->text()<<endl;txtout<<ui->userMail->text()<<endl;user_num_int = user_num.toInt() + 1;file.close();}else qDebug()<<"Open Failed";isOk = file.open(QIODevice::WriteOnly|QIODevice::Text);if (isOk == true){QTextStream txtout(&file);txtout<<user_num_int<<endl;}ui->log->show();ui->reg->hide();ui->userID_reg->clear();ui->userPassword_reg->clear();ui->userPassword_reg_2->clear();ui->userMail->clear();
}

最后做完了整个项目后反思了一下,有这么几个做的不太好:

最后放上我的GitHub地址:TankNee’s Repo -CashBook

万分感谢各位合作的队友们

也感谢那个没有因为情感因素而陷入苦恼的我。

Qt实现的简单记账本软件相关推荐

  1. 基于C++和QT实现的简单数独游戏软件

    资源下载地址:https://download.csdn.net/download/sheziqiong/85660211 一.实验题目与要求 本次实验主要内容是实现一个简单的数独软件,具体要求如下: ...

  2. Qt实现一个简单的编译器(软件生成器)

    Qt实现一个简单的编译器(软件生成器) 本文章只记录如何用Qt实现一个简单编译器,即点击本软件中的按钮便可在另一目录中生成一个新的软件(与本软件不冲突). 文章目录 Qt实现一个简单的编译器(软件生成 ...

  3. 使用Qt做一个简单计算器

    title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...

  4. android简易记账,简单记账(便捷快速记账)

    简单记账让用户能够快速便捷的进行记账,随时随地的进行记账内容的填充,让你的在生活当中的每一笔花销都能够在这款软件的记录下完成,并且这款软件还比较优秀的点就是用树状图的方式进行时间上面的排列,感兴趣的话 ...

  5. qt登录界面简单制作,是真的保姆级别了!!!

    qt登录界面简单制作,是真的保姆级别了!!! 第二周工程创新实践:创建一个窗体,设计用户登录的界面(含有用户名.密码),并实现用户登录的功能,要求用户提交的登录按钮时能获取界面中的用户名.密码数据并与 ...

  6. VS+QT+SQLite实现简单的计算器

    VS+QT+SQLite实现简单的计算器 0. 计算器功能说明 0.1 计算器界面 0.2 历史记录模块 0.3 总体说明 1. 安装VS 1.1 下载VS_Community 1.2 安装VS 2. ...

  7. Python制作一个简单的抽奖软件(二)

    Python制作一个简单的抽奖软件(二) 认识QT 因为都对 QT和tkinter都没用过,之前简单使用tkinter后发现,界面调整不太好弄.然后度娘了之后,QT是强大GUI库之一,很多人都推荐它. ...

  8. 团队博客第一篇-手机端记账小软件

    在第八周和第九周,这两周的时间内,我们需要做一个身边的软件,所以我们一块组成了一个团队,团队的名称为"kitkat".(kitkat是Google(谷歌公司)Android 4.4 ...

  9. QT + opencv做的切图软件,将一幅图切成多张并附加在背景上

    一个简单的小软件,QT + opencv做的,将一幅图切成多张并附加在背景上,如图: 代码地址: https://gitee.com/xiongqiumin/image-cut exe下载连接: ht ...

  10. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

最新文章

  1. python区域增长_Python – 有效地为高密度区域创建密度图,稀疏区域的点
  2. [分际]如何使用EVENTLOG类操作日志
  3. d3 line example debug 2015-05-31
  4. 《移动App测试的22条军规》—第1章1.2节移动App的生命周期
  5. CSRF:跨站请求伪造
  6. Python3.5 配置MySql数据库连接
  7. YOLOX目标检测模型Keras实现,超越Yolov5
  8. 14. 税收规则(Tax Rules)
  9. 运输层详解(二)(TCP)
  10. java web 登录demo_JavaWeb之Servlet登录demo
  11. r2d 小米路由器2_维修一台亮黄灯的R2D小米路由器2
  12. 【软件工程】软件测试报告——软件测试说明书
  13. Eureka注册服务列表显示ip+端口
  14. 128G的U盘格式化后只有300M,如何恢复成128G
  15. 电脑可以联网但是有的网页打不开
  16. c语言变量是直接寻址,直接寻址页变量
  17. 利用桌面背景进行任务管理
  18. 什么是创新,什么是发明
  19. [AGC056E]Cheese
  20. 当上CEO,迎娶白富美,走向人生巅峰,只有这背水一战!

热门文章

  1. 在连接至 Steam 服务器时发生了一个错误。请稍后重试。
  2. 小程序中 icon 颜色自定义解决方案
  3. CVPR2019目标检测
  4. 基于Yahoo网站性能优化的34条军规及自己的见解
  5. 脉冲神经网络SNN的简介
  6. TableauとSFDCデータ整理
  7. 看到强烈的太阳光你会不由自主的打喷嚏吗?
  8. 海底电缆变为“地震仪”
  9. 如何在“一周内”摸清一个行业
  10. 求求你用数学炒股行不行?