qt项目:员工信息管理系统
开发一个员工信息管理系统
一、项目具体要求:
1、用qt开发界面,数据库用QSqlite 数据库文件名:demostudent.db
2、通过界面能够查看到数据库中员工信息表中内容,包括员工姓名、年龄、性别、
成绩、生日、基本工资和照片。
3、能够查看指定记录,修改和编辑员工信息
4、员工信息中包含照片,界面上可以显示学员照片并且可以修改学员照片
5、通过界面可增加员工记录,可以删除指定的学员记录
二、项目界面展示
1、主界面:通过openDB按钮打开指定的数据库文件,将数据库表中的学员信息显示在主界面中tableView中。
其它的按钮依次是 插入按钮、编辑当前记录和删除指定记录
点击upSalary按钮,所有学员的基本工资增加1000
2、编辑学员信息的界面
单击编辑按钮或者双击某一个记录,则弹出如下编辑窗口
编辑窗口通过相关控件显示指定的记录各个字段的数据,包括照片信息
修改相关数据之后,点击ok按钮之后,则新数据更新到数据库中
通过setPhoto和clearPhoto两个按钮可以设置和修改照片
3、增加学员信息的界面
通过界面相关控件录入员工的信息,包括设置照片。
点击ok按钮,将学员信息插入到数据库表中。
三、项目代码实现:
1、项目中主要为两个类文件,描述界面的类文件mainWidget
和描述插入和编辑界面的类文件wDialogData
2、mainWidget类文件代码如下:
mainWidget.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QItemSelectionModel>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_actOpenDB_triggered();
void on_actInsert_triggered();
void on_actEdit_triggered();
void on_tableView_doubleClicked(const QModelIndex &index);
void on_actDelete_triggered();
void on_actUpsalary_triggered();
private:
Ui::MainWindow *ui;
QSqlDatabase db;
QSqlQueryModel *theModel;
QItemSelectionModel *theSelection;
void openTable();
void updateRecord(int recNo);
};
#endif // MAINWINDOW_H
mainWidget.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "wdialogdata.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QDebug>
#include <QSqlError>
#include <QSqlRecord>
#include <QSqlQuery>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::openTable()
{
theModel = new QSqlQueryModel(this);
theSelection = new QItemSelectionModel(theModel);
theModel->setQuery("select id,name,age,sex,birthday,salary,photo from stu");
if(theModel->lastError().isValid())
{
QMessageBox::information(this,"error","select error\n" + theModel->lastError().text(),QMessageBox::Ok,QMessageBox::NoButton);
return;
}
theModel->setHeaderData(0,Qt::Horizontal,"工号");
theModel->setHeaderData(1,Qt::Horizontal,"姓名");
theModel->setHeaderData(2,Qt::Horizontal,"年龄");
theModel->setHeaderData(3,Qt::Horizontal,"性别");
theModel->setHeaderData(4,Qt::Horizontal,"生日");
theModel->setHeaderData(5,Qt::Horizontal,"工资");
ui->tableView->setModel(theModel);
ui->tableView->setColumnHidden(6,true);
ui->tableView->setSelectionModel(theSelection);
ui->actOpenDB->setEnabled(false);
ui->actInsert->setEnabled(true);
ui->actDelete->setEnabled(true);
ui->actEdit->setEnabled(true);
}
void MainWindow::updateRecord(int recNo)
{
QSqlRecord curRec = theModel->record(recNo);
//int empNo = curRec.value("id").toInt();
QSqlQuery query;
WDialogData *dataDialog = new WDialogData(this);
dataDialog->setUPdateRecord(curRec);
int ret = dataDialog->exec();
if(ret == QDialog::Accepted)
{
QSqlRecord recData = dataDialog->getRecord();
query.prepare("update stu set name = :name,age = :age ,sex = :sex,birthday = :birthday,salary = :salary,photo = :photo where id = :id");
query.bindValue(":id",recData.value("id"));
query.bindValue(":name",recData.value("name"));
query.bindValue(":age",recData.value("age"));
query.bindValue(":sex",recData.value("sex"));
query.bindValue(":birthday",recData.value("birthday"));
query.bindValue(":salary",recData.value("salary"));
query.bindValue(":photo",recData.value("photo"));
if(!query.exec())
QMessageBox::critical(this,"error","update error\n" + query.lastError().text(),QMessageBox::Ok,QMessageBox::NoButton);
else
theModel->query().exec();
}
delete dataDialog;
}
void MainWindow::on_actOpenDB_triggered()
{
QString aFile = QFileDialog::getOpenFileName(this,"select database file","","sqlite(*.db *.db3)");
if(aFile.isEmpty())
{
return;
}
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(aFile);
qDebug()<<aFile;
if(!db.open())
{
QMessageBox::warning(this,"error","open database error",QMessageBox::Ok,QMessageBox::NoButton);
return;
}
openTable();
}
void MainWindow::on_actInsert_triggered()
{
QSqlQuery query;
query.exec("select * from stu where id = -1");
QSqlRecord curRec = query.record();
curRec.setValue("id",theModel->rowCount() + 2000);
qDebug()<<curRec.value("id").toInt();
WDialogData *dataDialog = new WDialogData(this);
dataDialog->setInsertRecord(curRec);
int ret = dataDialog->exec();
if(ret == QDialog::Accepted)
{
QSqlRecord recData = dataDialog->getRecord();
query.prepare("insert into stu(id,name,age,sex,birthday,salary,photo) values(:id,:name,:age,:sex,:birthday,:salary,:photo)");
query.bindValue(":id",recData.value("id"));
query.bindValue(":name",recData.value("name"));
query.bindValue(":age",recData.value("age"));
query.bindValue(":sex",recData.value("sex"));
query.bindValue(":salary",recData.value("salary"));
query.bindValue(":photo",recData.value("photo"));
query.bindValue(":birthday",recData.value("birthday"));
if(!query.exec())
{
QMessageBox::critical(this,"error","insert error\n" + query.lastError().text(),QMessageBox::Ok,QMessageBox::NoButton);
}else
theModel->setQuery("select id,name,age,sex,birthday,salary,photo from stu");
}
delete dataDialog;
}
void MainWindow::on_actEdit_triggered()
{
int curRecNo = theSelection->currentIndex().row();
updateRecord(curRecNo);
}
void MainWindow::on_tableView_doubleClicked(const QModelIndex &index)
{
int curRecNo = index.row();
updateRecord(curRecNo);
}
void MainWindow::on_actDelete_triggered()
{
int curRecord = theSelection->currentIndex().row();
QSqlRecord curRec = theModel->record(curRecord);
if(curRec.isEmpty())
return;
int empNo = curRec.value("id").toInt();
QSqlQuery query;
query.prepare("delete from stu where id = :id");
query.bindValue(":id",empNo);
if(!query.exec())
QMessageBox::critical(this,"error","delete error\n" + query.lastError().text(),QMessageBox::Ok,QMessageBox::NoButton);
else
theModel->query().exec();
}
void MainWindow::on_actUpsalary_triggered()
{
QSqlQuery qryEmpList;
qryEmpList.exec("select id,salary from stu order by id");
qryEmpList.first();
QSqlQuery qryUpdate;
qryUpdate.prepare("update stu set salary = :salary where id = :id");
while (qryEmpList.isValid()) {
int empId = qryEmpList.value("id").toInt();
float salary = qryEmpList.value("salary").toFloat();
salary = salary + 1000;
qryUpdate.bindValue(":id",empId);
qryUpdate.bindValue(":salary",salary);
qryUpdate.exec();
if(!qryEmpList.next())
break;
}
theModel->query().exec();
QMessageBox::information(this,"notice","update salary finish",QMessageBox::Ok,QMessageBox::NoButton);
}
3、wDialogData类文件代码如下:
wDialogData.h
#ifndef WDIALOGDATA_H
#define WDIALOGDATA_H
#include <QDialog>
#include <QSqlRecord>
namespace Ui {
class WDialogData;
}
class WDialogData : public QDialog
{
Q_OBJECT
public:
explicit WDialogData(QWidget *parent = 0);
~WDialogData();
void setUPdateRecord(QSqlRecord &recData);
void setInsertRecord(QSqlRecord &recData);
QSqlRecord getRecord();
private:
QSqlRecord mRecord;
private:
Ui::WDialogData *ui;
private slots:
void on_setPhoto_clicked();
void on_clearPhoto_clicked();
};
#endif // WDIALOGDATA_H
wDialogData.cpp
#include "wdialogdata.h"
#include "ui_wdialogdata.h"
#include <QDebug>
#include <QDate>
#include <QFileDialog>
WDialogData::WDialogData(QWidget *parent) :
QDialog(parent),
ui(new Ui::WDialogData)
{
ui->setupUi(this);
}
WDialogData::~WDialogData()
{
delete ui;
}
void WDialogData::setUPdateRecord(QSqlRecord &recData)
{
mRecord = recData;
ui->spinEmpNo->setEnabled(false);
setWindowTitle("update");
ui->spinEmpNo->setValue(recData.value("id").toInt());
ui->editName->setText(recData.value("name").toString());
ui->spinAge->setValue(recData.value("age").toInt());
QString strDate = recData.value("birthday").toString();
ui->EditBirth->setDate(QDate::fromString(strDate,"yyyy-MM-dd"));
ui->comboSex->setCurrentText(recData.value("sex").toString());
ui->spinSalary->setValue(recData.value("salary").toInt());
QVariant va = recData.value("photo");
if(!va.isValid())
ui->labPhoto->clear();
else
{
QByteArray data = va.toByteArray();
QPixmap pic;
pic.loadFromData(data);
ui->labPhoto->setPixmap(pic.scaledToWidth(ui->labPhoto->size().width()));
}
}
void WDialogData::setInsertRecord(QSqlRecord &recData)
{
mRecord = recData;
qDebug()<<recData.value("id").toInt();
ui->spinEmpNo->setEnabled(true);
setWindowTitle("insert a new record");
ui->spinEmpNo->setValue(recData.value("id").toInt());
}
QSqlRecord WDialogData::getRecord()
{
mRecord.setValue("id",ui->spinEmpNo->value());
mRecord.setValue("name",ui->editName->text());
mRecord.setValue("sex",ui->comboSex->currentText());
mRecord.setValue("age",ui->spinAge->value());
mRecord.setValue("birthday",ui->EditBirth->date());
mRecord.setValue("salary",ui->spinSalary->value());
return mRecord;
}
void WDialogData::on_setPhoto_clicked()
{
QString aFile = QFileDialog::getOpenFileName(this,"select photo","","photo(*.jpg)");
if(aFile.isEmpty())
return;
QByteArray data;
QFile *file = new QFile(aFile);
file->open(QIODevice::ReadOnly);
data = file->readAll();
file->close();
mRecord.setValue("photo",data);
QPixmap pic;
pic.loadFromData(data);
ui->labPhoto->setPixmap(pic.scaledToWidth(ui->labPhoto->size().width()));
}
void WDialogData::on_clearPhoto_clicked()
{
ui->labPhoto->clear();
mRecord.setNull("photo");
}
qt项目:员工信息管理系统的更多相关文章
- Python 员工信息管理系统
学Python将近一个月了,第一次写了两百多行代码,一个很简单的脚本. 员工信息管理系统: 需求: 1.管理员账户能够增加,删除,修改,查询员工信息,并且设置管理员账户. 2.普通账户可以查看所有员工 ...
- jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)
1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...
- 谈一谈个人利用Java的mysql的知识完成的数据库的项目-----用户信息管理系统
首先,我先简述一下自己做的过程啊,相信大家来找这样的博客,也都是为了完成自己课程任务吧.我也一样是一名大一的学生,是为了自己的课程任务而开始做数据库的项目的.因为还没学mysql吗,所以是自己找视频啊 ...
- Node.js小项目——学生信息管理系统
这是迄今为止第一次接触后端的东西,是一个很小的项目,但是对于前端学习入门很好.我是先学了VUE框架再学的Node,学起来比较轻松,不过每个人都有自己的学习方法️ 一.项目描述 学生信息管理系统,可以实 ...
- Qt项目——数字内容管理系统的参考资料和细节
打开文件路径,若带空格,要用引号括起路径 LPCWSTR与QString的转换:LPCWSTR strL = strQ.toStdWString().c_str(); 用指定程序打开文件(选择文件的打 ...
- python--员工信息管理系统编译及思路
员工管理系统,顾名思义,应该具有增删查改功能.拿到需求后,应该按照一定的流程依次编写,最后达到程序的统一和兼容. 系统需求如下: 文件存储格式如下: id,name,age,phone,job 1,A ...
- 读《31天学会CRM项目开发》记录2 - 企业信息管理系统
在信息技术的快速推动下,企业如果依然利用传统的管理方式,以人为主,那效率便会大打折扣.在此背景下,企业信息化系统得 到了高速发展.如我们常见的ERP系统.MES系统,都是提高公司运行效率,降低运营以及 ...
- 简易商品信息管理系统——首个Web项目
正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...
- 详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统)、模糊查询
详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统).模糊查询 1,创建数据库,我的用户名:root 密码:root,数据库名称:lianwei,表名:login 2,效果 ...
随机推荐
- MySQL8.0加载文件内容报错: ERROR 1148: The used command is not allowed with this MySQL version
mysql数据库将文件内容加载到表中报错: mysql> LOAD DATA LOCAL INFILE '/path/pet.txt' INTO TABLE pet LINES TERMINAT ...
- 【Linux】安装Nginx
注:转自https://www.cnblogs.com/hdnav/p/7941165.html 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Window ...
- Csharp and Vbscript: Encryption/Decryption Functional
1 /// <summary> 2 /// 塗聚文 3 /// 20130621 4 /// 自定义字符串加密解密 5 /// < ...
- scss-比较运算符
与JavaScript类似,scss中也有比较运算符,下面就分别做一下介绍. 一.==相等和!=不相等运算符: 此运算符用来判断两个操作数是否相等. 特别说明: 上面两个运算符,支持类似于JavaSc ...
- 2018.10.16 NOIP模拟赛解题报告
心路历程 预计得分:\(100 + 100 + 20 = 220\) 实际得分:\(100 + 100 + 30 = 230\) 辣鸡模拟赛.. T1T2都是一眼题,T3考验卡常数还只有一档暴力分. ...
- P2085 最小函数值(minval)
题目描述 有n个函数,分别为F1,F2,...,Fn.定义Fi(x)=Aix^2+Bix+Ci (x∈N*).给定这些Ai.Bi和Ci,请求出所有函数的所有函数值中最小的m个(如有重复的要输出多个). ...
- OPENCV VS设置
OPENCV VS设置 第一步 工程->工具->选项->VC++目录 第二步 这两项放到系统path下 D:\OpenCV2.4.3\VS\bin\Debug;D:\OpenCV2. ...
- AngularJS Toaster的简单介绍
github地址: https://github.com/jirikavi/AngularJS-Toaster 参考博客: https://www.cnblogs.com/youzhuxiaoyao/ ...
- Select selectedIndex 属性
定义和用法 selectedIndex 属性可设置或返回下拉列表中被选选项的索引号. 注意: 若允许多重选择,则仅会返回第一个被选选项的索引号. 语法 设置 selectedIndex 属性: sel ...
- FlexPaper实现文档在线浏览(附源码)
园子里也有关于FlexPaper的文章,但都不怎么详细. 没有较全的参数说明.就连官方网站都没有.没法,最后只得将swf文件反编译后查看了源码才将里面的参数全部弄出来. 好了,废话不多说,开始正题. ...