基于QT(c++)的家庭财务管理系统

您所在的位置:网站首页 财务处理系统中允许什么账户存取 基于QT(c++)的家庭财务管理系统

基于QT(c++)的家庭财务管理系统

2024-06-30 23:35| 来源: 网络整理| 查看: 265

题目:家庭财务管理系统 前言:

家庭财务管理收支管理是一个家庭日常生活中不可缺少一部分,也是财务管理的重要组成部分。

题目要求:

开发一个家庭财务管理系统,实现家庭财务信息的自动化。

系统主要功能:

1.登陆管理 :可以选一名家庭成员做管理员,普通用户只能查看自己的收支信息。

2. 家庭成员管理:成员的信息:姓名、性别、出身日期、年龄,身高,体重。

3. 收支项目管理可以设置收支项目,修改或者删除。收支项目要求分为两层,比如“车辆维护-保养费”;任意一层次都可作为收支项目记账,用户在不清楚支出是否属于“保养费”的时候,可以选择大类“车辆维护”作为支出项

5.家庭成员收支输出   显示每个成员每月的收支情况(时间、收支种类、金额、经手人)。

6.退出管理  

下面是系统功能示意图:                 系统的设计思路如下: 功能实现一:登录窗口实现

ui界面如下:

 

1.管理员登录 管理员登录功能实现:在登录窗口类loginDlg定义私有成员:管理员账号与管理员密码,通过 #include //Qt提供用于写入注册表的类

读写注册表。 

通过lineEdit行编辑输入用户名密码,在代码段中通过管理员登陆的Radio Button是否选中进行判断是否进行管理员登录。 2.管理员密码修改 通过点击左下角的管理员密码修改按钮进行密码修改(进入密码修改对话框),对话框界面如下: 2.

 

密码修改对话框具体功能实现在此先不做具体介绍,

注意:此处密码修改需要用到加密算法,这里使用QT提供用于密码加密的类:

#include //Qt提供用于加密的类 3.普通用户登录:读取数据库 基于QSqlite轻量级数据库,未选中管理员登录Radio Button时,默认为普通用户登录。

以下为具体代码:

logindlg.h

#ifndef LOGINDLG_H #define LOGINDLG_H #include #include #include #include //Qt提供用于加密的类 #include #include //unicode编码与其他编码转换 #include //提供通过连接访问数据库的接口 #include //sql查询中创建、导航和检索数据所涉及的功能 #include #include #include #include #include #include #include #include #include #include #define SUB -1 #define MAIN 1 namespace Ui { class loginDlg; } class loginDlg : public QDialog { Q_OBJECT public: explicit loginDlg(QWidget *parent = nullptr); ~loginDlg(); void setName(QString name) {Mng_Name = name;} void setPswd(QString pswd) {Mng_Pswd = pswd;} bool createConnection(); //创建数据库链接 bool queryAll(QString name, QString pswd); //查找数据库 void SetTabOrder(); //设置tab切换顺序 int SubOrMain; //主,从窗口切换标志 QString NormalUser; //普通用户账号 private: Ui::loginDlg *ui; void readSettings(); //读取设置,注册表 void writeSettings(); //写入设置,注册表 int Mng_tryCount = 0; //试错次数 QString encrypt(const QString& str); //字符串加密 QString Mng_Name = "user"; //初始化用户名 QString Mng_Pswd = "123456"; //初始化密码 QSqlDatabase DB; private slots: void on_LoginPushButton_clicked(); void on_SignOutPushButton_clicked(); void ChangePwd(); //修改密码 void on_radioButton_clicked(); }; #endif // LOGINDLG_H

logindlg.cpp

#include "logindlg.h" #include "ui_logindlg.h" loginDlg::loginDlg(QWidget *parent) : QDialog(parent), ui(new Ui::loginDlg) { ui->setupUi(this); this->setWindowTitle("登陆窗口"); this->setAttribute(Qt::WA_DeleteOnClose); // Mng_Pswd = encrypt("123456"); // writeSettings(); SetTabOrder(); readSettings(); //初始化注册管理员用户名和密码 createConnection(); connect(ui->ChangePswd_PB, SIGNAL(clicked()), this, SLOT(ChangePwd())); } loginDlg::~loginDlg() { delete ui; } bool loginDlg::createConnection() { DB = QSqlDatabase::addDatabase("QSQLITE"); //添加 SQL LITE数据库驱动 DB.setDatabaseName("../familyDb.db"); if (!DB.open()) //打开数据库 { QMessageBox::warning(this, "错误", "打开数据库失败", QMessageBox::Ok,QMessageBox::NoButton); return false; } return true; } bool loginDlg::queryAll(QString name, QString pswd) { DB = QSqlDatabase::database(); //使用默认连接 QSqlQuery query(DB); query.exec("select * from familyBase"); while(query.next()) { if(query.value(6).toString()==name&&query.value(7).toString()==pswd) return true; } return false; } void loginDlg::SetTabOrder() { setTabOrder(ui->IDLineEdit, ui->PassWordLineEdit); setTabOrder(ui->PassWordLineEdit, ui->LoginPushButton); setTabOrder(ui->LoginPushButton, ui->SignOutPushButton); setTabOrder(ui->SignOutPushButton, ui->radioButton); setTabOrder(ui->radioButton, ui->ChangePswd_PB); setTabOrder(ui->ChangePswd_PB, ui->radioButton); } void loginDlg::readSettings() {//读取存储的用户名和密码, 密码是经过加密的 QString organization = "TJJ-Qt"; //用于注册表 QString appName = "FIO_System"; //app名字 QSettings settings(organization, appName); Mng_Name = settings.value("Username","user").toString(); QString defaultPSWD = encrypt("123456"); //缺省密码“123456”加密后的数据 Mng_Pswd = settings.value("PSWD", defaultPSWD).toString(); //读取PSWD } void loginDlg::writeSettings() {//保存用户名,密码等设置 QSettings settings("TJJ-Qt", "FIO_System"); //注册表键组 settings.setValue("Username",Mng_Name); //将管理员账号存至设置 settings.setValue("PSWD",Mng_Pswd); //将管理员密码存至设置 //指向的注册表目录是HKEY_CURRENT_USER/Software/TJJ-Qt/家庭收支管理系统 } QString loginDlg::encrypt(const QString &str) { //字符串MD5算法加密 QByteArray btArray; btArray.append(str);//加入原始字符串 QCryptographicHash hash(QCryptographicHash::Md5); //Md5加密算法 hash.addData(btArray); //添加数据到加密哈希值 QByteArray resultArray =hash.result(); //返回最终的哈希值 QString md5 =resultArray.toHex();//转换为16进制字符串 return md5; } void loginDlg::on_LoginPushButton_clicked() { QString user = ui->IDLineEdit->text().trimmed(); //输入用户名 QString pswd = ui->PassWordLineEdit->text().trimmed(); //输入密码 QString encrptPSWD = encrypt(pswd); //对输入密码进行加密 if(ui->radioButton->isChecked()) { if ((user == Mng_Name)&&(encrptPSWD == Mng_Pswd)) //如果用户名和密码正确 { writeSettings(); //保存设置 SubOrMain = MAIN; this->accept(); //对话框accept(),关闭对话框 } else { Mng_tryCount++; //错误次数 if (Mng_tryCount>3) { QMessageBox::critical(this, "提示", "已达最大试错次数,程序退出"); exit(1); } else {


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3