开发一个员工信息管理系统

一、项目具体要求:

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项目:员工信息管理系统的更多相关文章

  1. Python 员工信息管理系统

    学Python将近一个月了,第一次写了两百多行代码,一个很简单的脚本. 员工信息管理系统: 需求: 1.管理员账户能够增加,删除,修改,查询员工信息,并且设置管理员账户. 2.普通账户可以查看所有员工 ...

  2. jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)

    1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...

  3. 谈一谈个人利用Java的mysql的知识完成的数据库的项目-----用户信息管理系统

    首先,我先简述一下自己做的过程啊,相信大家来找这样的博客,也都是为了完成自己课程任务吧.我也一样是一名大一的学生,是为了自己的课程任务而开始做数据库的项目的.因为还没学mysql吗,所以是自己找视频啊 ...

  4. Node.js小项目——学生信息管理系统

    这是迄今为止第一次接触后端的东西,是一个很小的项目,但是对于前端学习入门很好.我是先学了VUE框架再学的Node,学起来比较轻松,不过每个人都有自己的学习方法️ 一.项目描述 学生信息管理系统,可以实 ...

  5. Qt项目——数字内容管理系统的参考资料和细节

    打开文件路径,若带空格,要用引号括起路径 LPCWSTR与QString的转换:LPCWSTR strL = strQ.toStdWString().c_str(); 用指定程序打开文件(选择文件的打 ...

  6. python--员工信息管理系统编译及思路

    员工管理系统,顾名思义,应该具有增删查改功能.拿到需求后,应该按照一定的流程依次编写,最后达到程序的统一和兼容. 系统需求如下: 文件存储格式如下: id,name,age,phone,job 1,A ...

  7. 读《31天学会CRM项目开发》记录2 - 企业信息管理系统

    在信息技术的快速推动下,企业如果依然利用传统的管理方式,以人为主,那效率便会大打折扣.在此背景下,企业信息化系统得 到了高速发展.如我们常见的ERP系统.MES系统,都是提高公司运行效率,降低运营以及 ...

  8. 简易商品信息管理系统——首个Web项目

    正文之前 在学习了一段时间的Java Web的内容之后,当然需要有个项目来练练手,我相信大多数人的首选项目都是信息管理系统吧,所以我选择了商品信息管理系统 目前项目源码已全部上传至GitHub,欢迎大 ...

  9. 详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统)、模糊查询

    详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统).模糊查询 1,创建数据库,我的用户名:root 密码:root,数据库名称:lianwei,表名:login 2,效果 ...

随机推荐

  1. 查看和设置Oracle数据库字符集

    数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集. 客户端字符集环境select * from nls_inst ...

  2. css-知识总结

    是什么 CSS通常称为CSS样式或层叠样式表,主要用于设置HTML页面中的文本内容(字体,大小,对其方式等),图片的外形 (高宽.边框样式.边距等)以及版面的布局等外观显示样式. CSS可以是HTML ...

  3. C#工具类之数据库连接

    一.SQL Server /// <summary> /// 数据库的通用访问代码 /// 此类为抽象类, /// 不允许实例化,在应用时直接调用即可 /// </summary&g ...

  4. 30 Excellent WordPress Video Tutorials

    http://sixrevisions.com/wordpress/30-excellent-wordpress-video-tutorials/ WordPress是一种使用PHP语言开发的博客平台 ...

  5. yeoman-bower-grunt之间的关系

    npm install -g yo 前置技能 Node and NPM nodeJs就是基于谷歌v8引擎的一个javascript环境,使js不仅可以运行在浏览器端,也能在服务器端运行. NPM(No ...

  6. Java设计模式—门面模式(带案例分析)

    1.门面模式的定义: 门面模式(Facade Pattern)也叫做外观模式,是一种比较常用的封装模式,其定义如下:       要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行.门面模式 ...

  7. PopupWindow简单使用

    如图是效果图 当点击 “点我”的按钮是   会弹出 如图的 弹窗 补充为PopupWindow设置一个显示动画和消失的动画 先在anim的文件下分别设置显示和消失的动画 <?xml versio ...

  8. matlab练习程序(矩形变换为圆)

    最近对图像坐标的变换很感兴趣啊,这次是将一张图像变换为圆形. 变换原理就是按变换前后像素到圆心的距离按比例缩减就行了. 改变x,y方向上的系数,应该还可以变换为椭圆,不过我还没有尝试. 注意我这里相当 ...

  9. SELECT s.* FROM person p INNER JOIN shirt s ON s.owner = p.id WHERE p.name LIKE 'Lilliana%' AND s.color <> 'white';

    SELECT s.* FROM person p INNER JOIN shirt sON s.owner = p.idWHERE p.name LIKE 'Lilliana%'AND s.color ...

  10. 使用CTE公用表表达式的递归查询(WITH AS)

    公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE.递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式. 当某个查询引用递归 ...