gin-top: 0px; margin-bottom: 0px; -ms-text-justify: inter-ideograph;">User.GetInfo(m_User); // 判断密码是否正确
if(User.Passwd != m_Passwd)
{……//同用户判断}
CDialog::OnOK();// 关闭对话框}
基本信息管理模块包括节假日信息管理,部门信息管理和员工信息管理。
节假日信息管理,首先对节假日信息的编辑,判断节假日记录是否存在,存入数据。在从HolidaySet中读取所有节假日记录,在对记录进行操作,即添加,修改和删除。普通用户是不能打开这一块信息的,节假日管理对他们是不可见的。
图3 节假日信息框
部分代码如下:
BOOL CHolidayManDlg::OnInitDialog()// 初始化
{CDialog::OnInitDialog();
RefreshData();}
void CHolidayManDlg::RefreshData()// 更新数据
{UpdateData(TRUE);
CString cSource = "SELECT Id, HolidayDate AS 节假日, HolidayName AS 名称" " FROM HolidaySet";// 设置Select语句
m_Adodc.SetRecordSource(cSource); //刷新ADO Data控件的记录源
m_Adodc.RefreshData()}
void CHolidayManDlg::OnAddButton() //添加按钮
{UpdateData(TRUE);
CHolidayEditDlg dlg; // 初始化HolidayEditDlg对话框中的变量
if (dlg.DoModal() == IDOK)
RefreshData();}
void CHolidayManDlg::OnModiButton()// 修改按钮
{CHolidayEditDlg dlg; // 设置HolidayEditDlg对话框中的变量
if (dlg.DoModal() == IDOK) // 打开HolidayEditDlg对话框
RefreshData();}
void CHolidayManDlg::OnDelButton()// 删除按钮
{cur.SqlDelete(m_Datagrid.GetItem(0));
RefreshData();}
部门信息管理模块包括部门信息编辑对话框,部门信息管理对话框和部门信息选择对话框。
部门编辑主要是用来添加和修改部门信息。部门信息管理对话框,是系统管理员进行的操作,如果当前用户不是系统管理员,则添加,修改,和删除等按钮是不可以用,他们没有相关的权限。在删除部门的时候要对部门信息进行判断,如果部门是根节点,包含下一级部门和员工时不能删除。部门信息的选择,是为了方便用户选择部门,以后的其他模块程序可以通过此程序来获取选择的部门信息。
图4 部门图
主要代码如下:
BOOL CDepManDlg::OnInitDialog() //初始化
{CDialog::OnInitDialog();}
void CDepManDlg::AddtoTree(HTREEITEM m_node, int UpperId)
{//使用递归方法将部门添加到TreeView控件中
int i;
HTREEITEM m_child;
if(UpperId == atoi(dep.a_UID.GetAt(i)))
{m_child = m_tree.InsertItem(dep.a_DepName.GetAt(i), m_node);
m_tree.SetItemData(m_child, atol(dep.a_DepId.GetAt(i)));
AddtoTree(m_child, atoi(dep.a_DepId.GetAt(i)));
}}
void CDepManDlg::OnAddButton() //添加按钮
{HTREEITEM node; //用于保存当前选择的节点
node = m_tree.GetSelectedItem(); //取得当前选择的节点}
// 删除按钮
void CDepManDlg::OnDelButton()
{HTREEITEM node; //用于保存当前节点
node = m_tree.GetSelectedItem(); //取得当前节点
//弹出对话框,要求用户确认是否删除。如果用户单击“是”按钮,则删除
if (MessageBox("是否删除当前部门?", "请确认", MB_YESNO) == IDYES)
{dep.SqlDelete(cDepId); //删除表Departments中的指定记录
m_tree.DeleteItem(node); //删除Tree控件中的当前节点}}
编辑员工基本信息对话框用来添加和修改员工信息,主要包括员工的姓名,性别,出生日期,身份证号,到岗日期,办公电话,手机电话,工作岗位,职务和描述信息。员工管理则是通过选择部门信息,添加,修改和删除员工信息 这里可以查看每个部门下的员工信息。同样普通用户只能查看员工信息,不能对其信息进行添加,修改和删除等操作。
图5 员工信息图
主要代码如下:
void CEmpManDlg::RefreshData()
{UpdateData(TRUE);
int iDepId; //从Tree控件中读取部门编号信息
HTREEITEM node;
node = m_tree.GetSelectedItem();
iDepId = m_tree.GetItemData(node);
CString cDepId; //根据部门编号设置SELECT语句
cDepId.Format("%d", iDepId);
// 设置SELECT语句
CString cSource = "SELECT EmpId, Name AS 姓名, Sex AS 性别,"
" Birthday AS 生日, IdCard AS 身份证号, OfficePhone AS 办公电话,"
" Mobile AS 手机号码, HireDate AS 到岗日期, Mission AS 工作岗位,"
" Duty AS 职务, Memo AS 备注 FROM EmpInfo e, DepInfo d"
" WHERE e.DepId = d.DepId";…}
void CEmpManDlg::OnAddButton()// 添加按钮
{UpdateData(TRUE);
CTime CurrentTime = CTime::GetCurrentTime();// 添加员工时,将日期控件设置为当天
if(dlg.DoModal()==IDOK)
RefreshData();}
void CEmpManDlg::OnModiButton()// 修改按钮
{UpdateData(TRUE);
CEmpInfo emp; // 读取选择员工的记录
emp.GetInfo(m_Datagrid.GetItem(0));
CEmpEditDlg dlg; // 将员工数据读取到编辑对话框中
if(dlg.DoModal()==IDOK)
RefreshData();}
void CEmpManDlg::OnDelButton()// 删除按钮
{CEmpInfo emp;
emp.SqlDelete(m_Datagrid.GetItem(0));
RefreshData();}
考勤管理模块主要实现了出勤信息管理,加班信息管理,请假信息管理和出差信息管理。
出勤信息编辑对话框中,首先单击选择部门按钮,在左侧的表格中将显示选择部门中的所有员工信息。选择一个员工,会在右侧下方显示他的出勤状态。选择出勤状态,然后单击确定按钮,可以保存指定员工的出勤情况。
出勤管理对话框中,根据左边的部门,列出各个部门中的员工及其员工的出勤信息,出勤时间,是否全勤,是否出差,是否迟到,是否早退,是否旷工等。用户可以根据实际的情况进行具体的操作,添加,修改和删除。
图6 出勤信息
主要代码如下:
void COnDutyManDlg::RefreshData()
{UpdateData(TRUE);
int iDepId; //从Tree控件中读取部门编号信息
HTREEITEM node;
node = m_tree.GetSelectedItem();
iDepId = m_tree.GetItemData(node);
CString cDepId; //根据部门编号设置SELECT语句
cDepId.Format("%d", iDepId);
// 设置SELECT语句
CString cSource = "SELECT c.EmpId AS 员工编号, e.Name AS 姓名, c.CheckDate AS 出勤日期," " c.QuanQin AS 是否全勤, c.XiuXi AS 是否休息, c.KuangGong AS 是否旷工,"" c.ChiDao AS 是否迟到, c.ZaoTui AS 是否早退 FROM CheckInfo c, EmpInfo e, DepInfo d"" WHERE c.EmpId = e.EmpId AND e.DepId = d.DepId";
m_Adodc.SetRecordSource(cSource); //刷新ADO Data控件的记录源
m_Adodc.Refresh();}
void COnDutyManDlg::OnAddButton()// 添加按钮{...}
void COnDutyManDlg::OnModiButton()//修改按钮{…}
void COnDutyManDlg::OnDelButton()//删除按钮{…}
程序调用m_tree.GetSelectedItem()函数获取当前选择的部门接点数据,并使用GetItemData(node)函数获取部门编号。然后根据选择的部门编号设置SELECT语句,从表CheckInfo,表EmpInfo和表DepInfo中获取部门中所有员工的出勤记录。
加班信息编辑对话框主要是对员工的加班情况的添加和修改。首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的加班状态。选择加班状态,包括加班时数,加班原因和加班类型,然后单击确定按钮,可以保存指定员工的加班情况。
加班信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的加班信息,加班时间,加班时数,加班原因和加班类型等。用户可以根据实际的情况进行具体的操作,添加,修改和删除。
图7 加班信息框
部分代码如下:
void COvertimeManDlg::OnAddButton() //添加按钮
{COvertimeEditDlg dlg;
CurrentTime = CTime::GetCurrentTime();
dlg.otDate = CurrentTime.Format("%Y-%m-%d");
if (dlg.DoModal() == IDOK)
RefreshData();}
void COvertimeManDlg::OnModiButton()// 修改按钮
{if (m_Adodc.GetRecordset().GetEof())
{MessageBox("请选择要修改的记录!");
return;}
CEmpInfo emp; // 根据员工编号得到员工信息
emp.GetInfo(m_Datagrid.GetItem(0));
CString cDepId; // 根据部门编号得到部门信息
cDepId.Format("%d", emp.DepId);
dep.GetInfo(cDepId);
COvertimeEditDlg dlg;
if(m_Datagrid.GetItem(4) == "法定节假日加班")
dlg.m_overtime = 0;
else if(m_Datagrid.GetItem(4) == "周六日加班")
dlg.m_overtime = 1;
else if(m_Datagrid.GetItem(4) == "日常加班")
dlg.m_overtime = 2;
dlg.otDate = m_Datagrid.GetItem(2);// 日期
dlg.m_describe = m_Datagrid.GetItem(5);
if (dlg.DoModal() == IDOK)
RefreshData();}
void COvertimeManDlg::OnDelButton()//删除按钮
{cur.SqlDelete(m_Datagrid.GetItem(2), m_Datagrid.GetItem(0));}
请假信息编辑对话框中,首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的请假状态。选择出勤状态,请假分为病假和事假,并且需要输入请假原因,然后单击确定按钮,可以保存指定员工的请假情况。
请假信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的信息,选中员工的姓名则可以进行员工的请假信息的编辑。用户可以根据实际的情况进行具体的操作,添加,修改和删除。
图8 请假信息图
主要代码如下:
void CLeaveEditDlg::OnOK()
{UpdateData(TRUE);
if(m_Adodc.GetRecordset().GetEof())// 是否选择人员
{MessageBox("请选择人员");
return;}
if(m_shijia == -1) // 是否进行添加考勤状态
{MessageBox("请选择出勤状态");
return;}
CCheckInfo cur;
cur.CheckDate = CheckDate; // 赋值到CCheckInfo对象中
cur.EmpId = atol(m_Datagrid.GetItem(0));
switch(m_shijia)
{cur.Memo = m_memo;
if(EmpId == "")
{// 在添加时,若人员有出勤记录,则不允许添加
if(cur.HaveEmp(CheckDate, m_Datagrid.GetItem(0)))
{MessageBox("已经有此员工的出勤信息,不能添加");
return;}
cur.SqlInsert();// 插入记录}
else
{cur.UpdateLeave(cur.CheckDate, EmpId); // 修改CheckInfo表记录}
CDialog::OnOK();}
请假信息保存在表CheckInfo中,如果在出勤信息管理模块中输入了出勤信息,则不能再输入请假信息。如果修改记录,则程序调用Update Leave()函数,更新表CheckInfo中的Shijia ,Bingjia和Memo等字段的值。
出差信息管理编辑对话框主要是对员工的出差情况的添加和修改。首先点击选择部门,在左侧则列出所有部门及其员工信息,选择一个员工,会在右侧下方显示他的出差状态。选择出差状态,写出出差原因,然后单击确定按钮,可以保存指定员工的出差情况。
出差信息管理对话框中,通过点击左边的部门,列出各个部门中的员工及其员工的出差信息。用户可以根据实际的情况进行具体的操作,添加,修改和删除。
图9 出差信息
主要代码如下:
void CErrandEditDlg::OnOK()
{UpdateData(TRUE);
if(m_Adodc.GetRecordset().GetEof())// 是否选择人员
{MessageBox("请选择人员");
return; }
CCheckInfo cur;
cur.CheckDate = CheckDate; // 赋值到CCheckInfo对象中
cur.EmpId = atol(m_Datagrid.GetItem(0));
cur.ChuChai = "是";
cur.QuanQin = "否";
cur.BingJia = "否";
cur.ShiJia = "否";
cur.KuangGong = "否";
cur.XiuXi = "否";
cur.ChiDao = "否";
cur.ZaoTui = "否";
cur.Memo = m_memo;
if(EmpId == "")
{// 在添加时,若人员有出勤记录,则不允许添加
if(cur.HaveEmp(CheckDate, m_Datagrid.GetItem(0)))
{MessageBox("已经有此员工的出勤信息,不能添加");
Return;}
cur.SqlInsert();// 插入记录}
else
{cur.UpdateErrand(cur.CheckDate, m_Datagrid.GetItem(0)); // 修改CheckInfo表记录}
CDialog::OnOK();……}
统计查询模块主要是实现了日考勤统计表,月考勤统计表,当日缺勤人员列表3个功能。
日考勤统计表按日查询所有员工的出勤,加班,请假和出差等信息。首先选择要查询的日期,在点击查询按钮,即列出这日期的员工信息,包括员工编号,员工姓名,出勤日期,是否全勤,是否出差,是否请假,是否加班等等。
图10 日考勤统计图
主要代码如下:
void CTimeSelDlg::RefreshData()
{UpdateData(TRUE);
CString cTime; //根据部门编号设置SELECT语句
cTime = m_time.Format("%Y-%m-%d");
// 设置SELECT语句
CString cSource = "SELECT c.EmpId AS 员工编号, e.Name AS 姓名, c.CheckDate AS 出勤日期," " c.QuanQin AS 是否全勤, c.ChuChai AS 是否出差, c.ShiJia AS 是否事假," " c.BingJia AS 是否病假, c.KuangGong AS 是否旷工, c.XiuXi AS 是否休息," " c.ChiDao AS 是否迟到, c.ZaoTui AS 是否早退, c.Memo AS 备注"" FROM CheckInfo c, EmpInfo e WHERE c.EmpId = e.EmpId AND c.CheckDate = '" + cTime + "'";
//刷新ADO Data控件的记录源
m_Adodc.SetRecordSource(cSource);
m_Adodc.Refresh();}
程序执行SELECT语句,从表CheckInfo和EmpInfo中读取选择日期中各员工的考勤信息。
月考勤统计表是按月统计所有员工的出勤天数,请假天数,出差天数等信息。为了对各种考勤天数进行统计,需要创建一组视图,分别按月统计所有员工的全勤天数,休息天数,旷工天数,迟到次数,早退次数,病假天数,事假天数和出差天数。在表CheckInfo中,CheckDate字段保存考勤日期,LEFT(CheckDate)返回考勤日期的年份和月份信息,使用COUNT()函数和GROUP BY子句统计考勤月份和员工分组的各种考勤天数。
图11 月考勤统计图
主要代码如下:
void CDepDlg::RefreshData()
{UpdateData(TRUE);
//根据部门编号设置SELECT语句
CString cStrCnd,cDepId;
cDepId.Format("%d", iDepId);
if ( iDepId >0 )
cStrCnd = " And d.DepId=" + cDepId;
else
cStrCnd = "";
CString cTime; // 查询日期
// 得到年份和月份
m_year.GetLBText(m_year.GetCurSel(), cYear);
m_month.GetLBText(m_month.GetCurSel(), cMonth);
cTime = cYear + "-" + cMonth; // 得到日期
// 设置SELECT语句
CString cSource = "SELECT e.Name AS 姓名,"
" ISNULL(v1.CountQuanQin,0) AS 全勤天数, ISNULL(v2.CountChuChai,0) AS 出差天数,"
" ISNULL(v3.CountShiJia,0) AS 事假天数, ISNULL(v4.CountBingJia,0) AS 事假天数,"
" ISNULL(v5.CountKuangGong,0) AS 旷工天数, ISNULL(v6.CountXiuXi,0) AS 休息天数,"
" ISNULL(v7.CountChiDao,0) AS 迟到次数, ISNULL(v8.CountZaoTui,0) AS 早退次数"
" FROM v_QuanQin v1, v_ChuChai v2, v_ShiJia v3, v_BingJia v4,DepInfo d, "
" v_KuangGong v5, v_XiuXi v6, v_ChiDao v7, v_ZaoTui v8, EmpInfo e"
" WHERE e.EmpId *= v1.EmpId AND e.EmpId *= v2.EmpId And e.DepId=d.DepId"
" AND e.EmpId *= v3.EmpId AND e.EmpId *= v4.EmpId AND e.EmpId *= v5.EmpId"
" AND e.EmpId *= v6.EmpId AND e.EmpId *= v7.EmpId AND e.EmpId *= v8.EmpId"
" AND v1.CheckMonth = '" + cTime + "' AND v2.CheckMonth = '" + cTime +
"' AND v3.CheckMonth = '" + cTime + "' AND v4.CheckMonth = '" + cTime +
"' AND v5.CheckMonth = '" + cTime + "' AND v6.CheckMonth = '" + cTime +
"' AND v7.CheckMonth = '" + cTime + "' AND v8.CheckMonth = '" + cTime + "'" + cStrCnd;
//刷新ADO Data控件的记录源
m_Adodc.SetRecordSource(cSource);
m_Adodc.Refresh();…}
程序执行SELECT语句,从表EmpInfo和其他视图中读取选择月份中各员工的考勤信息,ISNULL()函数是SQL Server的内部函数,它的功能是当第一个参数为NULL时,将第二个参数作为结果返回。
当日考勤人员列表查询当前系统日期中所有缺勤的员工信息,缺勤指病假,事假和旷工等情况。
图12 当日缺勤人员图
主要代码如下:
void CAbsenceDlg::RefreshData()
{UpdateData(TRUE);
CString cTime; //根据部门编号设置SELECT语句
cTime = CurrentTime.Format("%Y-%m-%d");
// 设置SELECT语句
CString cSource = "SELECT e.EmpId AS 员工编号, e.Name AS 姓名, d.DepName AS 部门名称,"
" e.Mobile AS 联系电话 FROM DepInfo d, EmpInfo e"
" WHERE e.DepId = d.DepId AND e.EmpId IN"
" (SELECT EmpId FROM CheckInfo WHERE (ShiJia='是' OR BingJia='是' OR KuangGong='是')"
" AND CheckDate = '" + cTime + "')";
m_Adodc.SetRecordSource(cSource); //刷新ADO Data控件的记录源
m_Adodc.Refresh();…}
程序中使用了嵌套查询语句,即在一个SELECT语句中嵌套使用了另外一个SELECT语句。主SELECT语句显示员工和部门信息,在其查询条件中使用IN子句嵌套另一个SELECT语句。从SELECT可以返回表CheckInfo中当日事假,病假和旷工的记录。
根据用户类型的不同,用户管理模块的功能也不相同,主要包括Admin用户可以创建其他用户,修改用户的密码,删除其他用户,而其他用户只能修改自身的用户信息。
这个模块包括了用户管理和密码修改两个功能。在用户管理中只有Admin用户才可以进行操作,可以添加删除其他用户信息。
图13 用户管理框图
主要代码如下:
void CUserManDlg::RefreshData()
{UpdateData(TRUE);
// 设置Select语句
CString cSource = "SELECT UserName AS 用户名, Passwd,"
" (CASE When UserType=1 Then '系统管理员' ELSE '普通用户' END) AS 用户类型,"
"UserType FROM UserInfo";
//刷新ADO Data控件的记录源
m_Adodc.SetRecordSource(cSource);
m_Adodc.Refresh();……}
void CPasswdDlg::OnOK()
{//将对话框中编辑框的数据读取到成员变量中
UpdateData(TRUE);
//检查数据有效性
if (m_old == "")
{MessageBox("请输入旧密码");
GetDlgItem(IDC_OLD_EDIT)->SetFocus();
return;}
if (m_new == "")
{MessageBox("请输入新密码");
GetDlgItem(IDC_NEW_EDIT)->SetFocus();
return;}
if (m_confirm != m_new)
{MessageBox("两次输入的新密码不同");
UpdateData(FALSE);
GetDlgItem(IDC_NEW_EDIT)->SetFocus();
return;}
//定义CUserInfo对象,用于从表UserInfo中读取数据
CUserInfo cur;
cur.GetInfo(m_user);
//如果读取的数据与用户输入数据不同,则返回
if (cur.Passwd != m_old)
{MessageBox("用户密码不正确!");
UpdateData(FALSE);
GetDlgItem(IDC_OLD_EDIT)->SetFocus();
return;}
cur.Passwd = m_new;
cur.SqlUpdate(m_user);
MessageBox("密码修改成功,下次登录请使用新密码");
CDialog::OnOK();}
SELECT语句中使用了3个表,表UserInfo,表DepInfo和EmpInfo。为了防止因为表UserInfo中的EmpId字段找不到表EmpInfo中对应的EmpId字段值而造成用户记录无法显示问题,在表之间连接关系时使用了LEFT JION关键字,即只要是UserInfo中存在的记录都将出现在结果集中,无论它在其他两个表中是否存在对应的记录。
程序将对用户输入的密码进行验证,包括旧密码是否为空,新密码是否为空,两次输入的新密码是否相同,旧密码是否通过密码验证,通过验证后,程序调用CUsers::sql_updatePassword()函数,更新用户密码。
下载说明书及源码C++ 员工考勤管理系统.zip
,考勤管理系统的用户是各单位负责考勤管理的员工和领导,它可以有效的管理公司单位员工的出勤情况,规范人事制度的管理。管理员可以创建用户,修改用户信息以及删除用户,和对公司一些员工信息的编辑等。该系统包括基本信息管理,考勤信息管理,统计查询和用户管理等主要模块。每一个功能模块都需要针对不同的表来完成相同的数据库操作,即添加记录,修改记录,删除记录以及查询显示记录信息。具体功能有以下几个方面。
1、基本信息的添加,修改,删除和查询。节本信息管理包括节假日日期设置,部门信息管理和员工信息管理。
2、考勤信息管理包括出勤管理,加班管理,请假管理和出差管理等功能。
3、统计查询功能包括日考勤统计表,月考勤统计表和当日缺勤人员列表。
4、用户管理包括Admin用户管理和其他用户管理。
考勤管理系统由基本信息管理模块、考勤信息模块、统计查询模块和用户管理模块四个主要功能模块构成。
基本信息管理模块,包括节假日日期设置,部门信息管理缓和员工信息管理。节假日日期信息只包括具体的日期数据,部门信息包括部门名称和部门功能的描述,员工信息包括员工姓名,性别,生日,身份证号等。
考勤信息包括出勤,加班,请假,出差等信息。出勤信息包括全勤,休息,旷工,迟到和早退等信息;加班信息包括员工信息,加班时间,加班类型和加班描述;请假信息包括员工信息,请假类型和原因;出差信息包括员工信息和出差原因。
统计查询模块包括日考勤统计表,月考勤统计表和当日缺勤人员列表。日考勤统计表包括员工姓名,考勤日期,是否全勤,是否请假等信息,月考勤统计表包括员工姓名,考勤月份,全勤天数,出差天数等信息,当日缺勤人员列表包括系统当前日期缺勤员工的姓名,所在部门和联系电话等信息。
用户管理模块用户包括Admin用户和普通用户。Admin用户可以修改自己的密码,创建修改和删除普通用户信息。普通用户只能修改自身的信息
功能模块构成如图1:
图1 功能模块
考勤管理系统数据库采用Microsoft SQL SERVER 2000,在使用数据库过程中,接触最多的就是数据库中的表,表是数据存储的地方,是数据库最重要的部分。这个系统数据库表由6个表构成,具体如下。
CheckInfo表是记录考勤信息的,记录员工迟到,早退,全勤,旷工,病假,事假,休息,出差等信息。
表1 CheckInfo
字 段 | 数据类型 | 长 度 | 是否允许为空 | 字段描述 |
CheckDate | char | 10 | 否 | 考勤日期 |
EmpId | int | 4 | 否 | 员工编号 |
QuanQin | char | 2 | 是 | 全勤 |
ChuChai | char | 2 | 是 | 出差 |
BingJia | char | 2 | 是 | 病假 |
ShiJia | char | 2 | 是 | 事假 |
KuangGong | char | 2 | 是 | 旷工 |
XiuXi | char | 50 | 是 | 休息 |
ChiDao | char | 50 | 是 | 迟到 |
Zaotui | char | 50 | 是 | 早退 |
Memo | varchar | 200 | 是 | 备注 |
DepInfo表是记录部门信息的。DepId为主键。
表2 DepInfo
字 段 | 数据类型 | 长 度 | 是否允许为空 | 字段描述 |
DepId | int | 4 | 否 | 部门编号 |
DepName | varchar | 50 | 否 | 部门名称 |
Describes | varchar | 250 | 是 | 描述 |
UID | int | 4 | 否 | 总的编号 |
EmpInfo表是记录员工的基本信息。管理员可以查看员工信息,添加员工信息需要用的表。EmpId是主键。
表3 EmpInfo
字 段 | 数据类型 | 长 度 | 是否允许为空 | 字段描述 |
EmpId | int | 4 | 否 | 编号 |
Name | varchar | 50 | 否 | 姓名 |
Sex | char | 2 | 是 | 性别 |
Birthday | varchar | 20 | 是 | 生日 |
IdCard | varchar | 20 | 是 | 身份证号 |
OfficePhone | varchar | 30 | 是 | 办公电话 |
Mobile | varchar | 30 | 是 | 手机电话 |
HireDate | Int | 4 | 是 | 到岗日期 |
DepId | varchar | 40 | 是 | 部门编号 |
Mission | varchar | 50 | 是 | 工作岗位 |
Duty | varchar | 20 | 是 | 职务 |
Memo | varchar | 200 | 是 | 备注信息 |
HolidaySet表是设置节假日信息的。Id为主键。
表4 HolidaySet
字 段 | 数据类型 | 长 度 | 是否允许为空 | 字段描述 |
Id | int | 4 | 否 | 编号 |
HolidayDate | char | 10 | 否 | 节假日期 |
HolidayName | varchar | 50 | 是 | 节假名称 |
OverTime表是记录加班信息的。
表5 OverTime
字 段 | 数据类型 | 长 度 | 是否允许为空 | 字段描述 |
otDate | Char | 10 | 否 | 加班日期 |
EmpId | int | 4 | 否 | 员工编号 |
otHour | smallint | 2 | 否 | 加班时间 |
otType | varchar | 50 | 否 | 加班类型 |
Describes | varchar | 200 | 是 | 描述 |
UserInfo表是记录用户信息的,包括用户名和密码。
表6 UserInfo
字 段 | 数据类型 | 长 度 | 是否允许为空 | 字段描述 |
UserName | varchar | 40 | 否 | 用户名 |
Passwd | varchar | 40 | 是 | 密码 |
UserType | int | 4 | 否 | 用户类型 |
用户要使用本系统,首先必须通过系统的身份认证。如果用户名错误或者不存在,密码错误3次后,对话框自动关闭。
图2 登陆对话框
具体代码如下:
void CLoginDlg::OnOK()
{UpdateData(TRUE); //将对话框中编辑框的数据读取到成员变量中
if(m_User == "")// 没有输入用户名
{MessageBox("请输入用户名", "信息提示");
GetDlgItem(IDC_USER_EDIT)->SetFocus();
return;}
CUserInfo User; // 定义用户信息表变量
if(!User.IsExistUser(m_User)) // 判断用户是否存在
{count++;
if(count < 3)
{MessageBox("用户名不存在,请重新输入!", "用户名错误", MB_ICONINFORMATION);
UpdateData(FALSE);
GetDlgItem(IDC_USER_EDIT)->SetFocus();
return;}
else
{MessageBox("重试次数已到,不能再输入用户名和密码,即将退出系统!", "用户名错误", MB_ICONEXCLAMATION);
exit(0);}}