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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM