对公司管理系统的简单实现,实际上功能不是很全。
登陆界面:
头文件logindialog.h:
#ifndef LOGINDIALOG_H
#define LOGINDIALOG_H
#include <QDialog>
#include <dialog.h>
namespace Ui {
class LoginDialog;
}
class LoginDialog : public QDialog
{
Q_OBJECT
public:
explicit LoginDialog(QWidget *parent = 0);
~LoginDialog();
private slots:
void on_LoginButton_clicked();
void on_exit_clicked();
private:
Ui::LoginDialog *ui;
Dialog *dialog;
};
#endif // LOGINDIALOG_H
logindialog.cpp:
#include "logindialog.h"
#include "ui_logindialog.h"
#include <QtWidgets/QMessageBox>
#include <dialog.h>
LoginDialog::LoginDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::LoginDialog)
{
ui->setupUi(this);
ui-> pwdLineEdit-> setEchoMode(QLineEdit::Password);//设置密码为输入后不可见
}
LoginDialog::~LoginDialog()
{
delete ui;
}
//点击登录按钮进入系统
void LoginDialog::on_LoginButton_clicked()
{
if((ui->usrLineEdit->text().trimmed()==tr("admin"))&&(ui->pwdLineEdit->text()==tr("admin")))
{
ui->usrLineEdit->clear();//清空用户名输入框
ui->pwdLineEdit->clear();//清空密码输入框
//进入系统,打开系统界面
dialog = new Dialog(this);
dialog->show();
}
else
{
QMessageBox::warning(this,tr("Error!"),tr("Username or password is incorrect!"),QMessageBox::Yes);
//如果输入的用户名或密码不正确,弹出提示对话框
ui->usrLineEdit->clear();//清空用户名输入框
ui->pwdLineEdit->clear();//清空密码输入框
ui->usrLineEdit->setFocus();//将光标转到用户名输入框
}
}
//点击退出按钮退出系统
void LoginDialog::on_exit_clicked()
{
close();
}
主界面:
头文件dialog.h:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
#include <adddialog.h>
#include <calcdialog.h>
#include <querydialog.h>
#include <deldialog.h>
#include <updatedialog.h>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = 0);
~Dialog();
private slots:
void on_add_clicked();
void on_calculate_clicked();
void on_query_clicked();
void on_exit_clicked();
void on_del_clicked();
void on_update_clicked();
private:
Ui::Dialog *ui;
AddDialog *dialog1;
calcDialog *dialog2;
queryDialog *dialog3;
delDialog *dialog4;
updateDialog *dialog5;
};
#endif // DIALOG_H
dialog.cpp:
#include "dialog.h"
#include "ui_dialog.h"
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
//点击“新增”按钮打开新增人员界面
void Dialog::on_add_clicked()
{
dialog1 = new AddDialog(this);
dialog1->show();
}
//点击“计算奖金”按钮打开计算奖金界面
void Dialog::on_calculate_clicked()
{
dialog2 = new calcDialog(this);
dialog2->show();
}
//点击“查询”按钮打开查询界面
void Dialog::on_query_clicked()
{
dialog3 = new queryDialog(this);
dialog3->show();
}
//点击“退出”按钮退出系统
void Dialog::on_exit_clicked()
{
close();
}
//点击“删除”按钮打开删除界面
void Dialog::on_del_clicked()
{
dialog4 = new delDialog(this);
dialog4->show();
}
//点击“修改”按钮打开修改界面
void Dialog::on_update_clicked()
{
dialog5 = new updateDialog(this);
dialog5->show();
}
以下均以姓名:张三、工号:20151001、职务:主任、部门:客管中心、本月全勤为例
新增职工信息:
头文件adddialog.h:
#ifndef ADDDIALOG_H
#define ADDDIALOG_H
#include <QDialog>
namespace Ui {
class AddDialog;
}
class AddDialog : public QDialog
{
Q_OBJECT
public:
explicit AddDialog(QWidget *parent = 0);
~AddDialog();
private slots:
void on_confirm_clicked();
void on_exit_clicked();
private:
Ui::AddDialog *ui;
};
#endif // ADDDIALOG_H
头文件connection.h: 用于与数据库的连接
#ifndef CONNECTION_H
#define CONNECTION_H
#include <QtWidgets/QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
static bool createConnection()
{
QSqlDatabase dataBase=QSqlDatabase::addDatabase("QMYSQL");//添加数据库驱动
dataBase.setDatabaseName(":memory:");//数据库连接命名
bool ok=dataBase.open();//打开数据库
if(ok)
{
return true;
}
else
{
QMessageBox::warning(NULL,"Error!","cannot open database!");
return false;
}
}
#endif // CONNECTION_H
adddialog.cpp:
#include "adddialog.h"
#include "ui_adddialog.h"
#include <QtWidgets/QMessageBox>
#include <QString>
#include <QtSql>
#include <connection.h>
AddDialog::AddDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::AddDialog)
{
ui->setupUi(this);
}
AddDialog::~AddDialog()
{
delete ui;
}
//确认按钮
void AddDialog::on_confirm_clicked()
{
int flag1,flag2,flag3 = 0,flag4 = 0;
QString name,no,pos,dep;
name = ui->namelineEdit->text();
no = ui->nolineEdit->text();
//判断姓名是否未填写
if(name=="")
{
ui->tip1->setText(QString::fromLocal8Bit("此处不可以为空"));
flag1 = 1;
}
else
flag1 = 0;
//判断工号是否未填写
if(no=="")
{
ui->tip2->setText(QString::fromLocal8Bit("此处不可以为空"));
flag2 = 1;
}
else
flag2 = 0;
//判断职务是否已选择
if(ui->positioncombo->currentIndex()==0)
{ ui->tip3->setText(QString::fromLocal8Bit("此处不可以为空"));
flag3 = 1;
}
//判断部门是否已选择
if(ui->departcombo->currentIndex()==1)
{ ui->tip4->setText(QString::fromLocal8Bit("此处不可以为空"));
flag4 = 1;
}
//若四项都已填好、选好,将数据插入到数据库中
if(flag1==0&&flag2==0&&flag3==0&&flag4==0)
{
QSqlQuery query;
//设置创建information表的SQL语句
query.exec("CREATE table information(name varchar(20) primary key, no varchar(20),"
"position varchar(20), department varchar(20))");
//从姓名输入框、工号输入框、职务选项、部门选项中获取信息,设置要执行的SQL插入语句
QString savesql = QString("INSERT INTO information(name,no,position,department)");
savesql += QString(" VALUES('%1','%2','%3','%4')").arg(ui->namelineEdit->text())
.arg(ui->nolineEdit->text())
.arg(ui->positioncombo->currentText())
.arg(ui->departcombo->currentText());
bool ok = query.exec(savesql);//返回执行SQL插入语句是否成功
if(ok)
{
QMessageBox::about(NULL,"Success!","Insert is done!");
ui->namelineEdit->clear();//清空姓名输入框
ui->nolineEdit->clear();//清空工号输入框
}
else
{
QMessageBox::warning(NULL,"Error!","Insert fails!");
}
}
}
//返回按钮
void AddDialog::on_exit_clicked()
{
close();
}
查询职工信息:
头文件querydialog.h:
#ifndef QUERYDIALOG_H
#define QUERYDIALOG_H
#include <QDialog>
namespace Ui {
class queryDialog;
}
class queryDialog : public QDialog
{
Q_OBJECT
public:
explicit queryDialog(QWidget *parent = 0);
~queryDialog();
private slots:
void on_query_clicked();
void on_exit_clicked();
private:
Ui::queryDialog *ui;
};
#endif // QUERYDIALOG_H
querydialog.cpp:
#include "querydialog.h"
#include "ui_querydialog.h"
#include <adddialog.h>
#include <QtSql>
queryDialog::queryDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::queryDialog)
{
ui->setupUi(this);
}
queryDialog::~queryDialog()
{
delete ui;
}
//查询按钮
void queryDialog::on_query_clicked()
{
QString name = ui->namelineEdit->text();//获取要查询的职工的姓名
QSqlQuery query;
// 设置将要执行的SQL查询语句,:sname是要被绑定数据的位置
query.prepare("SELECT * FROM information WHERE name = :name");
query.bindValue(":name",name);//绑定数据到指定的位置
query.exec();//执行上面的SQL语句
//QSqlRecord 类封装了一条数据库记录。这里创建一个名为rec的对象存放刚才的查询结果
QSqlRecord rec = query.record();
while(query.next())
{
rec = query.record();
//分别获得索引值
int nameindex = rec.indexOf("name");
int noindex = rec.indexOf("no");
int posindex = rec.indexOf("position");
int depindex = rec.indexOf("department");
//利用索引值得到string类型的内容
QString value1 = query.value(nameindex).toString();
QString value2 = query.value(noindex).toString();
QString value3 = query.value(posindex).toString();
QString value4 = query.value(depindex).toString();
//将得到的内容赋给对应的label,显示出查询结果
ui->nameresult->setText(value1);
ui->noresult->setText(value2);
ui->positionresult->setText(value3);
ui->departmentresult->setText(value4);
}
}
//返回按钮
void queryDialog::on_exit_clicked()
{
close();
}
修改职工信息:张三升职为经理,调至营销中心
头文件updatedialog.h:
#ifndef UPDATEDIALOG_H
#define UPDATEDIALOG_H
#include <QDialog>
namespace Ui {
class updateDialog;
}
class updateDialog : public QDialog
{
Q_OBJECT
public:
explicit updateDialog(QWidget *parent = 0);
~updateDialog();
private slots:
void on_exit_clicked();
void on_confirm_clicked();
private:
Ui::updateDialog *ui;
};
#endif // UPDATEDIALOG_H
updatedialog.cpp:
#include "updatedialog.h"
#include "ui_updatedialog.h"
#include <QString>
#include <QtSql>
#include <QtWidgets/QMessageBox>
updateDialog::updateDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::updateDialog)
{
ui->setupUi(this);
}
updateDialog::~updateDialog()
{
delete ui;
}
//返回按钮
void updateDialog::on_exit_clicked()
{
close();
}
//修改按钮
void updateDialog::on_confirm_clicked()
{
QSqlQuery query;
//设定查询SQL语句
QString updatesql = QString("UPDATE information SET name,no,position,department");
updatesql += QString(" VALUES('%1','%2','%3','%4')").arg(ui->namelineEdit->text())
.arg(ui->nolineEdit->text())
.arg(ui->positioncomboBox->currentText())
.arg(ui->departmentcomboBox->currentText());
bool ok = query.exec(updatesql);
if(ok)
{
QMessageBox::about(NULL, "Success!", "Update is done!");
}
else
{
QMessageBox::warning(NULL, "Error!", "Update fails!");
}
}
删除职工信息:
头文件deldialog.h:
#ifndef DELDIALOG_H
#define DELDIALOG_H
#include <QDialog>
namespace Ui {
class delDialog;
}
class delDialog : public QDialog
{
Q_OBJECT
public:
explicit delDialog(QWidget *parent = 0);
~delDialog();
private slots:
void on_confirm_clicked();
void on_exit_clicked();
private:
Ui::delDialog *ui;
};
#endif // DELDIALOG_H
deldialog.cpp:
#include "deldialog.h"
#include "ui_deldialog.h"
#include <QtWidgets/QMessageBox>
#include <QtSql>
#include <QString>
delDialog::delDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::delDialog)
{
ui->setupUi(this);
}
delDialog::~delDialog()
{
delete ui;
}
//确定按钮
void delDialog::on_confirm_clicked()
{
QString name = ui->namelineEdit->text();//获取要删除信息的职工的姓名
QSqlQuery deletequery;
//设置删除信息的SQL语句
QString deletesql = QString("DELETE FROM information WHERE name ='%1'").arg(name);
bool ok = deletequery.exec(deletesql);
if(ok)
{
QMessageBox::about(NULL, "Success!", "Delete is done!");
ui->namelineEdit->clear();
}
else
{
QMessageBox::about(NULL, "Error!", "Delete fails!");
}
}
//返回按钮
void delDialog::on_exit_clicked()
{
close();
}
计算奖金:
头文件caldialog.h:
#ifndef CALCDIALOG_H
#define CALCDIALOG_H
#include <QDialog>
namespace Ui {
class calcDialog;
}
class calcDialog : public QDialog
{
Q_OBJECT
public:
explicit calcDialog(QWidget *parent = 0);
~calcDialog();
private slots:
void on_exit_clicked();
void on_confirm_clicked();
private:
Ui::calcDialog *ui;
};
#endif // CALCDIALOG_H
头文件position.h:
#ifndef POSITION_H
#define POSITION_H
class position
{
public:
double depSal,absSal,abs,sumSal;
virtual double sum() = 0;//定义一个计算总奖金的虚函数
};
#endif // POSITION_H
头文件position_1.h:
#ifndef POSITION_1_H
#define POSITION_1_H
#include <position.h>
class position_1:virtual public position
{
public:
double posSal1;
virtual double sum()
{
sumSal = (depSal+posSal1+absSal)*abs;
return sumSal;
}
};
#endif // POSITION_1_H
头文件position_2.h:
#ifndef POSITION_2_H
#define POSITION_2_H
#include <position.h>
class position_2:virtual public position
{
public:
double posSal2,fuelSal;
virtual double sum()
{
sumSal = (depSal+posSal2+absSal)*abs+fuelSal;
return sumSal;
}
};
#endif // POSITION_2_H
头文件position_3.h:
#ifndef POSITION_3_H
#define POSITION_3_H
#include <position_1.h>
#include <position_2.h>
//position_3类由position_1类和position_2类派生而来
class position_3:public position_1,public position_2
{
public:
double posSal3,extraSal;
virtual double sum()
{
sumSal = (depSal+posSal3+absSal)*abs+fuelSal+extraSal;
return sumSal;
}
};
#endif // POSITION_3_H
caldialog.cpp:
#include "calcdialog.h"
#include "ui_calcdialog.h"
#include <stdlib.h>
#include <position.h>
#include <position_1.h>
#include <position_2.h>
#include <position_3.h>
calcDialog::calcDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::calcDialog)
{
ui->setupUi(this);
}
calcDialog::~calcDialog()
{
delete ui;
}
//返回按钮
void calcDialog::on_exit_clicked()
{
close();
}
//计算奖金
void calcDialog::on_confirm_clicked()
{
position_1 p1;
position_2 p2;
position_3 p3;
double sumSal;//奖金和
int flag = 0;//作为记号
QString result;
{
//设定营销中心的部门奖金
if(ui->departcomboBox->currentIndex()==1)
{
p1.depSal = 3516.5;
p2.depSal = 3516.5;
p3.depSal = 3516.5;
}
//设定客管中心的部门奖金
else if(ui->departcomboBox->currentIndex()==2)
{
p1.depSal = 3755.7;
p2.depSal =3755.7;
p3.depSal = 3755.7;
}
//设定离退休管理中心的部门奖金
else if(ui->departcomboBox->currentIndex()==3)
{
p1.depSal = 4166.8;
p2.depSal = 4166.8;
p3.depSal = 4166.8;}
else
{
flag = 1;//若部门选项未选,flag记号为1
}
}
{
//设定全勤奖与奖金系数
if(ui->absentcomboBox->currentIndex()==1)
{
p1.absSal = 300.0;p1.abs = 1.03;
p2.absSal = 250.0;p2.abs = 1.04;
p3.absSal = 300.0;p3.abs = 1.02;
}
//非全勤没有奖金,奖金系数也有所不同
else if(ui->absentcomboBox->currentIndex()==2)
{
p1.absSal = 0.0;p1.abs = 0.95;
p2.absSal = 0.0;p2.abs = 0.95;
p3.absSal = 0.0;p3.abs = 0.95;
}
else
{
flag = 1;//若是否全勤未选,flag记号为1
}
}
{
//设定主管的职务奖金,并计算总奖金
if(ui->positioncomboBox->currentIndex()==1)
{
p1.posSal1 = 550.0;
sumSal = p1.sum();
}
//设定主任的职务奖金,并计算总奖金
else if(ui->positioncomboBox->currentIndex()==2)
{
p2.posSal2 = 750.0;
p2.fuelSal = 600.0;
sumSal = p2.sum();
}
//设定经理的职务奖金,并计算总奖金
else if(ui->positioncomboBox->currentIndex()==3)
{
p3.posSal3 = 950.0;
p3.extraSal = 500.0;
sumSal = p3.sum();
}
else
{
flag = 1;//若职务未选,flag记号为1
}
}
if(flag==1)
{
ui->resultlineEdit->setText(QString::fromLocal8Bit("选项不可以为空!请重新选择!"));
}
else
{
//将double类型转换为string类型并在文本框中输出奖金计算的结果
result = QString::number(sumSal,'f',2);
ui->resultlineEdit->setText(result);
}
}
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <dialog.h>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private:
Ui::Widget *ui;
Dialog *dialog;
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
main.cpp:
#include "widget.h"
#include <QApplication>
#include <logindialog.h>
#include <connection.h>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
LoginDialog login;
//判断连接数据库是否成功
if (!createConnection())
return 1;
//打开登陆界面
if(login.exec()==QDialog::Accepted)
{
w.show();
return a.exec();
}
else
return 0;
}