人员管理系统的完成(c++\qt)


一、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++;
	}

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

行为艺术家Zzz

新人 求鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值