基于MFC的人事管理系统 VC++

这里使用的是VS2012,新建一个MFC项目,名称为ThkPersoneelManager,选择基于对话框,不使用Unicode字符集,在主对话框界面设置如下
在这里插入图片描述

上面是两个Group Box,里面放置相应的控件,ID可自行设置,编辑框添加变量,变量名称随意,这里添加的变量分别为 m_ed_dept 和m_ed_name。
左下为树控件,为其添加变量,变量名为m_tree_dept,右下为列表控件,添加变量,名为m_list_staf,也可自己设置。
鼠标右击解决方案名称,添加 选择新建项,选择头文件(.h),名称为ThkManagerDef .h
打开该头文件,设置枚举变量和结构体,代码如下:

在这里插入代码片
#pragma once
  typedef enum STF_SEX
{
 E_MAN = 0,
 E_WOMAN = 1,
 E_UNDEF = -1
}sSex;
typedef struct S_STAFF
{
   CString s_strNum;
   CString s_strName;
   sSex s_Sex;
   CString s_strDept;
   int unsigned s_nAge;
   CString s_strTel;
   CString s_strdatebirth;
}sStaff;

右键点击解决方案,添加类,类名为ThkManger,在ThkManger.h头文件中编写函数和成员变量,代码如下:

在这里插入代码片
#pragma once
#include "ThkMangerDef.h"
class Thkmanager
{
public:
    ThkManager(void);
   ~ThkManager(void);
public:
    CArray <sStaff> m_arrStaff;//员工数组,信息保存在数组中,通过数组将数据写入文件
    CArray <CString> m_arrDept;//部门数组,作用同上
public:
    void Read(CString strStaffPath);//从文件中读取员工数据
    void Write(CString strPath);//将员工数据写入文件
    void AddStaff(sStaff &info);//添加员工
    void Delete(int nIndex);//删除员工
    void ResetStaff(int nIndex, sStaff &info);//修改员工信息
    int SearchName(CString strName);//按名字查找员工,返回员工在数组的索引号
    int SearchDept(CString strDept);//按部门名称查找部门,返回部门在数组的索引号
public:
    bool AddDept(CString strDept);//添加部门
    void ReadDept(CString strDeptPath);//从文件读取部门数据
    void WriteDept(CString strDeptPath);//将部门数据写入文件
}

然后在其对应的ThkManger.cpp文件中对这些函数进行定义

在这里插入代码片
#include "stdafx.h"
#include "ThkManger.h"
#include "ThkPersoneelManager.h"
ThkManager::ThkManager(void)
{}
ThkManager::~ThkManager(void)
{}
void ThkManager::Read(CString strStaffPath)
{
  BOOL bResult;
  CStdioFile file;
  DWORD readPos = 0;
  bResult = file.Open((LPCTSTR)strStaffPath,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeReadWrite);
  if(bResult)
  {
  file.Seek(readPos,CFile::begin);
  CString strLine;
  while (file.ReadString(strLine) != FALSE)
  {
    char *pBuf = NULL;
    readPos = (DWORD)file.GetPosition();
    file.Seek(readPos, CFile::begin);
    sStaff staffInfo;
    CString strSex,strAge,strDateBirth;
    staffInfo.s_strNum = strtok_s(strLine.GetBuffer(0)," ",&pBuf);//工号信息
    staffInfo.s_strName = strtok_s(NULL, " ", &pBuf);//姓名
    strSex = strtok_s(NULL, " ", &pBuf); //性别
    if (!strSex.Compare(_T("男")))
    {
      staffInfo.s_Sex = E_MAN;
    }
    else 
    {
    staffInfo.s_Sex = E_WOMAN;
    }
    staffInfo.s_strDept = strtok_s(NULL, " ", &pBuf);//部门
    strAge = strtok_s(NULL, " ", &pBuf);
    staffInfo.s_nAge = _ttoi(strAge);//年龄
    staffInfo.s_strTel = strtok_s(NULL, " ", &pBuf);//电话
    staffInfo.s_strdatebirth = strtok_s(NULL, " ", &pBuf);//出生日期
    m_arrStaff.Add(staffInfo);
  }
  file.Close();
  }
  else
  AfxMessageBox(_T("员工数据读取失败!"));
}

由于函数比较多,这里就不把全部函数的定义写出来了,后面会有源码。
由于对话框较多,并且需要互相传递数据,这里使用全局变量。打开系统生成的ThkPersoneelManager.h文件,在class CThkPersoneelManagerApp : public CWinApp中添加这样几行代码

class CThkPersoneelManagerApp : public CWinApp
{
public:
 CThkPersoneelManagerApp();
 CString g_Company;
 CString g_strStaffName;
 int g_nNum;
 ThkManager manager;
}

5、6、7、8行为自己添加的,后面还有系统自己生成的,这些不用管。
继续右击解决方案,添加资源,选择Dialog
在这里插入图片描述
对话框ID设为IDD_DLG_ADDSTAFF,标题设为 添加员工,界面设置如下

在这里插入图片描述
姓名、年龄、电话对应的为Edit_Control,性别、部门为Combo_box Control,性别的那个控件在属性设置里找到Data,添加内容 男;女,部门的列表框不用设置。出生日期用的是DateTimePicker控件,分别为以上控件添加变量,变量名依次为 m_ed_name,m_combo_sex,m_combo_dept,m_edage,m_ed_tel,m_datetime_birth
然后添加按钮。然后对这个对话框添加类,类名为ThkADDSTAFF,双击按钮,然后写按钮的触发事件
选中该对话框,右击,选择类向导,在虚函数里找到OnInitDialog()函数,然后添加,在该函数中添加代码如下:

for (int nIndex = 0; nIndex < theApp.manager.m_arrDept.GetSize(); nIndex++)
{
    m_combo_dept.AddString(theApp.manager.m_arrDept[nIndex]);
}

再添加一个对话框,ID为IDD_DIALOG_STAFFALTER,
在这里插入图片描述
界面设置如图,其中工号对应的编辑框设置为只读,然后为各控件添加变量,变量名同上

为对话框添加类,类名为ThkAlterStaff,编写按钮触发事件,添加OnInitDialog()函数,函数中代码同上一个对话框。
添加第三个对话框 ID为IDD_DIALOG_COMPANY,然后添加类,类名为ThkCompany
在这里插入图片描述
双击按钮编写触发事件。
至此所需对话框已全部建好。
然后在主界面即文章开头那张显示图片,进行一些设置首先点击树控件,在属性栏,选择控件事件

在这里插入图片描述

图中黄色闪电按钮,
在这里插入图片描述
选择TVN_SELCHANGED 然后添加即可。
在对话框的头文件ThkPersoneelManagerDlg.h中声明一些函数,这些函数在其对应的.cpp文件中实现,
添加的函数如下

public:
 void UpdateTree();
 void InsertListItem(sStaff &staff,int nIndex = 0);
 void StaffInfoList(sStaff &staff,int nIndex);
 void ReadCompanyInfo();
 void InsertStaffInTree(HTREEITEM hItem,CString strStaffName);
 void DeleteChildNode(HTREEITEM hItem);
 CString GetTreeText(HTREEITEM hItem);

cpp文件有实现方法,在此不再写了。至此,整个项目建立完成,把函数实现就完成了。
在这里插入图片描述

这是项目建立完成后的解决方案。

整个项目的解决方案

  • 3
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值