一、Ui界面
二、人员管理系统练习(源码)
1.底层类
staff.h
#pragma once
#include <QString>
class ThkStaff
{
public:
ThkStaff();
~ThkStaff();
public:
int m_nId;
QString m_strName;
QString m_strSex;
int m_nAge;
QString m_strAddress;
QString m_StrPhone;
int m_nDId;
public:
bool IsValid(); //判断有效性
};
staff.cpp
#include "ThkStaff.h"
#include "QStringList"
using namespace std;
ThkStaff::ThkStaff()
{
m_nAge = -1;
m_nId= -1;
m_nDId = -1;
}
ThkStaff::~ThkStaff() {}
bool ThkStaff::IsValid()
{
if (m_nId>0 && !m_strName.isEmpty()&&!m_strSex.isEmpty()&&m_nAge>0&&!m_strAddress.isEmpty()&&!m_StrPhone.isEmpty()&&m_nDId>0)
{
return true;
}
return false;
}
department.h
#pragma once
#include <QString>
class ThkDepartment
{
public:
ThkDepartment();
~ThkDepartment();
public:
int m_nId;
QString m_strName;
QString m_strTitle;
};
department.cpp
#include "ThkDepartment.h"
ThkDepartment::ThkDepartment()
{
m_nId = -1;
}
ThkDepartment::~ThkDepartment()
{
}
2.管理类
staffmanage.h
#pragma once
#include "ThkStaff.h"
#include <vector>
#include "ThkDepartment.h"
using namespace std;
class ThkManage
{
public:
ThkManage();
~ThkManage();
public:
bool ReadDepFile(); //部门读取文本信息
bool AddDepartment(int id,QString name,QString title); // 添加部门
QString FindDepartment(int nId); //判断是否有相同部门号的部门,若相同可以找到位置
int FindDepartment(QString name); //判断是否有相同部门名称的部门,若相同可以找到位置
bool WriteDepFile(); //把部门信息存入到文本重
bool ReadFile(); //人员读取文本信息
bool WriteFile(); //将人员信息存入到文本中
bool AddStaff(int nId, QString name, QString sex,int nAge,QString address, QString phone,QString dname); //添加职工
bool AddStaff(int nId, QString name, QString sex, int nAge, QString address, QString phone, int nDId); //添加职工
bool DelStaff(int nId); //删除职工
bool UpStaff(int nId, QString name, QString sex, int nAge, QString address, QString phone,int did); //更新职工
int FindStaff(int nId); //判断是否有相同工号的员工 ,若有相同可以找到位置/查找员工
public:
vector<ThkStaff> m_vStaffList;
vector<ThkDepartment>m_vDepartment;
};
staffmanage.cpp
#include "ThkManage.h"
#include <fstream>
#include <iostream>
#define PATH "infomation.txt"
#define P "departement.txt"
ThkManage::ThkManage()
{
}
ThkManage::~ThkManage()
{
}
bool ThkManage:: ReadDepFile() //部门读取文本信息
{
ifstream is;
is.open(P);
if (!is.is_open())
{
return false;
}
string id, name, title;
while (is>>id>>name>>title)
{
int nId = QString::fromStdString(id).toInt();
QString strName = QString::fromStdString(name);
QString strTitle = QString::fromStdString(title);
AddDepartment(nId, strName, strTitle);
}
is.close();
return true;
}
bool ThkManage::AddDepartment(int nId, QString strName, QString strTitle)
{
if (nId<0||strName.isEmpty()||strTitle.isEmpty())
{
return false;
}
QString strFindId = FindDepartment(nId);
if (!strFindId.isEmpty())
{
return false;
}
ThkDepartment dep;
dep.m_nId = nId;
dep.m_strName = strName;
dep.m_strTitle = strTitle;
m_vDepartment.push_back(dep);
return true;
}
QString ThkManage::FindDepartment(int nId)
{
if (nId < 0)
{
return QString();
}
for (int i = 0; i < m_vDepartment.size(); i++)
{
ThkDepartment& Dep = m_vDepartment[i];
if (Dep.m_nId == nId)
{
return Dep.m_strName;
}
}
return QString();
}
int ThkManage::FindDepartment(QString name)
{
for (int i = 0; i < m_vDepartment.size(); i++)
{
ThkDepartment& Dep = m_vDepartment[i];
if (Dep.m_strName.compare(name) == 0)
{
return Dep.m_nId;
}
}
return -1;
}
bool ThkManage::WriteDepFile()
{
ofstream os;
os.open(P);
if (!os.is_open())
{
return false;
}
auto ite = m_vDepartment.begin();
while (ite!=m_vDepartment.end())
{
string id = QString::number(ite->m_nId).toStdString();
string name = ite->m_strName.toStdString();
string title = ite->m_strTitle.toStdString();
os << id << " " << name << " " << title << endl;
ite++;
}
os.close();
return true;
}
bool ThkManage::ReadFile()
{
ifstream is;
is.open(PATH);
if (!is.is_open())
{
return false;
}
else
{
string id, name, sex, age, address, phone,did;
while (is >> id >> name >> sex >> age >> address >> phone>> did)
{
int nid = QString::fromStdString(id).toInt();
QString strname = QString::fromStdString(name);
QString strsex = QString::fromStdString(sex);
int nage = QString::fromStdString(age).toInt();
QString straddress = QString::fromStdString(address);
QString strphone = QString::fromStdString(phone);
int ndid = QString::fromStdString(did).toInt();
AddStaff(nid, strname, strsex, nage, straddress, strphone,ndid);
}
is.close();
}
return true;
}
bool ThkManage::WriteFile()
{
ofstream os;
os.open(PATH);
if (!os.is_open())
{
return false;
}
else
{
auto ite = m_vStaffList.begin();
while (ite != m_vStaffList.end())
{
string id = QString::number(ite->m_nId).toStdString();
string name = ite->m_strName.toStdString();
string sex = ite->m_strSex.toStdString();
string age = QString::number(ite->m_nAge).toStdString();
string address = ite->m_strAddress.toStdString();
string phone = ite->m_StrPhone.toStdString();
string did = QString::number(ite->m_nDId).toStdString();
os << id << " " << name << " " << sex << " " << age << " " << address << " " << phone <<" "<<did<<endl;
ite++;
}
os.close();
}
return true;
}
bool ThkManage::AddStaff(int nId, QString name, QString sex, int nAge, QString address, QString phone,QString dname)
{
if (nId < 0 ||name.isEmpty() || sex.isEmpty() || nAge < 0 || address.isEmpty() ||phone.isEmpty() || dname<0)
{
return false;
}
int nFindId = FindStaff(nId);
if (nFindId >= 0)
{
return false;
}
int nDId = FindDepartment(dname);
if (nDId<0 || nDId>m_vDepartment.size())
{
return false;
}
AddStaff(nId, name, sex, nAge, address, phone, nDId);
return true;
}
bool ThkManage::AddStaff(int nId, QString name, QString sex, int nAge, QString address, QString phone, int nDId)
{
if (nId < 0 || name.isEmpty() || sex.isEmpty() || nAge < 0 || address.isEmpty() || phone.isEmpty() || nDId < 0)
{
return false;
}
int nFindId = FindStaff(nId);
if (nFindId >= 0)
{
return false;
}
ThkStaff sta;
sta.m_nId = nId;
sta.m_strName = name;
sta.m_nAge = nAge;
sta.m_strSex = sex;
sta.m_strAddress = address;
sta.m_StrPhone = phone;
sta.m_nDId = nDId;
m_vStaffList.push_back(sta);
return true;
}
bool ThkManage::DelStaff(int nId)
{
if (nId < 0)
{
return false;
}
int nFind = FindStaff(nId);
if (nFind<0)
{
return false;
}
m_vStaffList.erase(m_vStaffList.begin() + nFind);
return true;
}
bool ThkManage::UpStaff(int nId, QString name, QString sex, int nAge, QString address, QString phone,int did)
{
if (nId < 0)
{
return false;
}
int nFindIdx = FindStaff(nId);
if (nFindIdx<0)
{
return false;
}
ThkStaff& sta = m_vStaffList[nFindIdx];
sta.m_strName = name;
sta.m_nAge = nAge;
sta.m_strSex = sex;
sta.m_strAddress = address;
sta.m_StrPhone = phone;
sta.m_nDId = did;
return true;
}
int ThkManage::FindStaff(int nId)
{
if (nId<0)
{
return -1;
}
for (int i = 0; i < m_vStaffList.size(); i++)
{
ThkStaff& sta = m_vStaffList[i];
if (sta.m_nId == nId)
{
return i;
}
}
return -1;
}
3.界面类
staffmandlg.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_Widget.h"
#include "ThkManage.h"
#include "ThkDepartment.h"
class ThkStaffManDlg : public QWidget
{
Q_OBJECT
public:
ThkStaffManDlg(QWidget *parent = Q_NULLPTR);
~ThkStaffManDlg();
void initConnect();//信号绑定
public Q_SLOTS:
void ShowAllStaff(); //显示所有信息
void pushButtonAdd(); //添加按钮槽函数
void pushButtonDel(); //删除按钮槽函数
void ShowlineEdit(QTableWidgetItem* pItem); //将表格数据显示到右侧
void pushButtonFre(); //重置
void pushButtonUp(); //修改信息
void pushButtonSerch(); //查找
void ShowDep(); //显示部门
void ShowDepStaff(QTreeWidgetItem* pItem,int colum); // 获取被点击的名字转化为id,根据id进行筛选显示部门显示所在该部门的人员
public:
Ui::WidgetClass ui;
ThkManage m_Man;
};
staffmandlg.cpp
#include "ThkStaffManDlg.h"
#include <QDebug>
#include <QString>
#include <QMessageBox>
#include "ui_Widget.h"
ThkStaffManDlg::ThkStaffManDlg(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
initConnect();
m_Man.ReadDepFile();
m_Man.ReadFile();
ShowAllStaff();
ShowDep();
setWindowTitle(QStringLiteral("员工管理系统"));
ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
}
ThkStaffManDlg::~ThkStaffManDlg()
{
}
void ThkStaffManDlg::initConnect()
{
connect(ui.pushButtonAdd, SIGNAL(clicked()), this, SLOT(pushButtonAdd()));
connect(ui.pushButtonDel, SIGNAL(clicked()), this, SLOT(pushButtonDel()));
connect(ui.tableWidget, SIGNAL(itemClicked(QTableWidgetItem *)), this, SLOT(ShowlineEdit(QTableWidgetItem*)));
connect(ui.pushButtonFre, SIGNAL(clicked()), this, SLOT(pushButtonFre()));
connect(ui.pushButtonUp, SIGNAL(clicked()), this, SLOT(pushButtonUp()));
connect(ui.pushButtonSerch, SIGNAL(clicked()), this, SLOT(pushButtonSerch()));
connect(ui.treeWidget, SIGNAL(itemClicked(QTreeWidgetItem * , int)), this, SLOT(ShowDepStaff(QTreeWidgetItem*, int)));
}
void ThkStaffManDlg::ShowAllStaff()
{
int nCount = m_Man.m_vStaffList.size();
if (nCount == 0)
{
return;
}
int iRow = 0;
for (int i=0;i<nCount;i++)
{
auto& staff = m_Man.m_vStaffList[i];
ui.tableWidget->setRowCount(iRow +1);
ui.tableWidget->setItem(iRow, 0, new QTableWidgetItem(QString::number(staff.m_nId)));
ui.tableWidget->setItem(iRow, 1, new QTableWidgetItem(staff.m_strName));
ui.tableWidget->setItem(iRow, 2, new QTableWidgetItem(staff.m_strSex));
ui.tableWidget->setItem(iRow, 3, new QTableWidgetItem(QString::number(staff.m_nAge)));
ui.tableWidget->setItem(iRow, 4, new QTableWidgetItem(staff.m_strAddress));
ui.tableWidget->setItem(iRow, 5, new QTableWidgetItem(staff.m_StrPhone));
ui.tableWidget->setItem(iRow, 6, new QTableWidgetItem(m_Man.FindDepartment(staff.m_nDId)));
iRow++;
}
}
void ThkStaffManDlg::pushButtonAdd()
{
int nId = ui.lineEditId->text().toInt();
QString Name = ui.lineEditName->text();
QString Sex = ui.lineEditSex->text();
int nAge = ui.lineEditAge->text().toInt();
QString Address = ui.lineEditAddress->text();
QString Phone = ui.lineEditPhone->text();
QString dname = ui.lineEditDepartement->text();
if (nId <= 0 || Name.isEmpty() || Sex.isEmpty() || nAge < 0 || Address.isEmpty() || Phone.isEmpty()||dname.isEmpty())
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("您输入的数据不完整或者存在无效数据"));
return;
}
int nFindId = m_Man.FindStaff(nId);
if (nFindId >= 0)
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("该学号成员已存在"));
return;
}
int nDFindId = m_Man.FindDepartment(dname);
if (nDFindId<0)
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("没有该部门"));
}
if (m_Man.AddStaff(nId,Name, Sex,nAge,Address,Phone,dname))
{
m_Man.WriteFile();
ShowAllStaff();
}
else
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("添加成员失败"));
}
}
void ThkStaffManDlg::pushButtonDel()
{
if (ui.tableWidget->currentItem() == NULL)
return;
QString t_strWarning = QStringLiteral("是否将员工号为") + ui.tableWidget->item(ui.tableWidget->currentRow(), 0)->text() + QStringLiteral("信息删除?");
int result = QMessageBox::warning(this, QStringLiteral("Warning!"), t_strWarning, QMessageBox::Yes | QMessageBox::No);
if (result == QMessageBox::Yes)
{
int nId = ui.tableWidget->item(ui.tableWidget->currentRow(), 0)->text().toInt();
if (m_Man.DelStaff(nId))
{
ui.tableWidget->removeRow(ui.tableWidget->currentRow());
pushButtonFre();
m_Man.WriteFile();
}
else
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("删除成员失败"));
}
}
}
void ThkStaffManDlg::ShowlineEdit(QTableWidgetItem* pItem)
{
int row = ui.tableWidget->currentRow();
ui.lineEditId->setText(ui.tableWidget->item(row, 0)->text());
ui.lineEditName->setText(ui.tableWidget->item(row, 1)->text());
ui.lineEditSex->setText(ui.tableWidget->item(row, 2)->text());
ui.lineEditAge->setText(ui.tableWidget->item(row, 3)->text());
ui.lineEditAddress->setText(ui.tableWidget->item(row, 4)->text());
ui.lineEditPhone->setText(ui.tableWidget->item(row, 5)->text());
ui.lineEditDepartement->setText(ui.tableWidget->item(row, 6)->text());
}
void ThkStaffManDlg::pushButtonFre()
{
ui.lineEditId->clear();
ui.lineEditName->clear();
ui.lineEditSex->clear();
ui.lineEditAge->clear();
ui.lineEditAddress->clear();
ui.lineEditPhone->clear();
ui.lineEditDepartement->clear();
ShowAllStaff();
}
void ThkStaffManDlg::pushButtonUp()
{
int nId = ui.lineEditId->text().toInt();
QString Name = ui.lineEditName->text();
QString Sex = ui.lineEditSex->text();
int nAge = ui.lineEditAge->text().toInt();
QString Address = ui.lineEditAddress->text();
QString Phone = ui.lineEditPhone->text();
QString Dname = ui.lineEditDepartement->text();
if (nId <= 0 || Name.isEmpty() || Sex.isEmpty() || nAge < 0 || Address.isEmpty() || Phone.isEmpty()||Dname.isEmpty())
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("您输入的数据不完整或者存在无效数据"));
return;
}
int ndid = m_Man.FindDepartment(Dname);
if (ndid<0)
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("该部门不存在,修改失败!"));
return;
}
if (m_Man.UpStaff(nId, Name, Sex, nAge, Address, Phone,ndid))
{
m_Man.WriteFile();
ShowDepStaff(ui.treeWidget->currentItem(),0);
}
else
{
QMessageBox::warning(this, QStringLiteral("警告"), QStringLiteral("不允许修改员工号!"));
}
}
void ThkStaffManDlg::pushButtonSerch()
{
int nId = ui.lineEditId->text().toInt();
int nFindIdx = m_Man.FindStaff(nId);
if (nFindIdx >= 0)
{
ui.tableWidget->clear();
ui.tableWidget->setRowCount(1);
ui.tableWidget->setItem(0, 0, new QTableWidgetItem(QString::number(m_Man.m_vStaffList[nFindIdx].m_nId)));
ui.tableWidget->setItem(0, 1, new QTableWidgetItem(m_Man.m_vStaffList[nFindIdx].m_strName));
ui.tableWidget->setItem(0, 2, new QTableWidgetItem(m_Man.m_vStaffList[nFindIdx].m_strSex));
ui.tableWidget->setItem(0, 3, new QTableWidgetItem(QString::number(m_Man.m_vStaffList[nFindIdx].m_nAge)));
ui.tableWidget->setItem(0, 4, new QTableWidgetItem(m_Man.m_vStaffList[nFindIdx].m_strAddress));
ui.tableWidget->setItem(0, 5, new QTableWidgetItem(m_Man.m_vStaffList[nFindIdx].m_StrPhone));
ui.tableWidget->setItem(0, 6, new QTableWidgetItem(m_Man.FindDepartment(m_Man.m_vStaffList[nFindIdx].m_nDId)));
}
else
{
QMessageBox::warning(this, QStringLiteral("注意"), QStringLiteral("未找到该员工"));
}
}
void ThkStaffManDlg::ShowDep()
{
QTreeWidgetItem* dep = new QTreeWidgetItem(ui.treeWidget);
dep->setText(0, QStringLiteral("部门"));
ui.treeWidget->addTopLevelItem(dep);
QTreeWidgetItem* dep1 = new QTreeWidgetItem(dep);
dep1->setText(0, m_Man.m_vDepartment[0].m_strName);
QTreeWidgetItem* dep2 = new QTreeWidgetItem(dep);
dep2->setText(0, m_Man.m_vDepartment[1].m_strName);
QTreeWidgetItem* dep3 = new QTreeWidgetItem(dep);
dep3->setText(0, m_Man.m_vDepartment[2].m_strName);
}
void ThkStaffManDlg::ShowDepStaff(QTreeWidgetItem* pItem, int colum)
{
ui.tableWidget->clearContents();
QTreeWidgetItem* dep = ui.treeWidget->currentItem();
QString dname = dep->text(0);
int did = m_Man.FindDepartment(dname);
if (did < 0)
{
ShowAllStaff();
return;
}
int nCount = m_Man.m_vStaffList.size();
if (nCount == 0)
{
return;
}
int iRow = 0;
for (int i = 0; i < nCount; i++)
{
auto& staff = m_Man.m_vStaffList[i];
if (staff.m_nDId != did)
{
continue;
}
ui.tableWidget->setRowCount(iRow + 1);
ui.tableWidget->setItem(iRow, 0, new QTableWidgetItem(QString::number(staff.m_nId)));
ui.tableWidget->setItem(iRow, 1, new QTableWidgetItem(staff.m_strName));
ui.tableWidget->setItem(iRow, 2, new QTableWidgetItem(staff.m_strSex));
ui.tableWidget->setItem(iRow, 3, new QTableWidgetItem(QString::number(staff.m_nAge)));
ui.tableWidget->setItem(iRow, 4, new QTableWidgetItem(staff.m_strAddress));
ui.tableWidget->setItem(iRow, 5, new QTableWidgetItem(staff.m_StrPhone));
ui.tableWidget->setItem(iRow, 6, new QTableWidgetItem(m_Man.FindDepartment(staff.m_nDId)));
iRow++;
}
}