资源描述
题目12“企业员工考勤管理系统设计”
1、问题描述
某企业需要存储雇员 编号、姓名、性别、所在部门,级别,并进行工资 计算。其中,雇员分为经理、技术人员、销售人员和销售经理。
定义一种将小时换整天数 类。转换规则:8小时转换为一天,12小时转换为1.5天。可进行天数加、减。
定义一种统计员工生病、休假时间类。其中涉及:员工生病没工作天数、生病能够不工作
最多天数、员工已经带薪休假 天数、员工能够带薪休假 天数。企业要求带薪休假不能超出二十四小时。生病能够不工作 最多不能超出16小时。
设计一程序能够对企业人员 休假情况进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件 输入/输出等内容。
2、功能要求
(1) 添加功能:程序能够任意添加上述四类人员 统计,可提供选择界面供顾客选择所要添加
人员类别,要求员工 编号要唯一,假如添加了反复编号 统计时,则提醒数据添加反复并取消
添加。还能够添加带薪休假和生病休假 统计,每条统计中必须涉及员工编号和姓名。
(2) 查询功能:可根据编号、姓名等信息对已添加 员工信息和休假信息进行查询,假如未找
到,给出相应 提醒信息,假如找到,则显示相应 统计信息;
(3) 显示功能:可显示目前系统中全部统计,每条统计占据一行。
(4) 编辑功能:可根据查询成果对相应 统计进行修改,修改时注意编号 唯一性。
(5) 删除功能:主要实现对已添加 人员统计和休假统计进行删除。假如目前系统中没有相应
人员统计,则提醒“统计为空!”并返回操作。
(6) 统计功能:能根据多种参数进行人员 统计。例如,统计四类人员数量以及总数,
统计任一员工休假天数等信息。
(7) 保存功能:可将目前系统中各类人员统计和休假统计存入文件中,存入方式任意。
(8) 读取功能:可将保存在文件中 信息读入到目前系统中,供顾客进行使用。
3、问题处理方案
根据系统功能要求,能够将问题处理分为如下环节:
(1) 应用系统分析,建立该系统 功能模块框图以及界面 组织和设计;
(2) 分析系统中 各个实体及它们之间 关系;
(3) 根据问题描述,设计系统 类层次;
(4) 完毕类层次中各个类 描述;
(5) 完毕类中各个组员函数定义;
(6) 完毕系统应用模块;
(7) 功能调试;
(8) 完毕系统总结报告。
#import"msado15.dll" no_namespace rename("EOF,"adoEOF")
class CADOConnection
{
private:
Static void InitADO();
Static void UnInitADO();
protected:
_ConnectionPtr m_Connection;
public:
BOOL IsOpen();
_ConnectionPtr GetConnection();
Cstring GetSQLConstr(CString IP,CString DBName);
BOOL Open(CString ConStr);
CADOConnection();
Virtual CADOConnection();
};
CADOConnection*GetConnection();
Int ConCount = 0;
CADOConnection g_Connection;
CADOConnection*GetConnection()
{
Return & g_Connection;
}
CADOConnection:: CADOConnection ()
{
InitADO();
m_Connection.CreateInstance("ADODB.Connection");
}
CADOConnection:: CADOConnection ()
If(IsOpen());
m_Connection->Close();
m_Connection = NULL;
UnInitADO();
}
Void CADOConnection::InitADO()
{
If(ConCount ++ == 0)
CoInitialize(NULL);
};
void CADOConnection::UnInitADO()
{
if( ConCount == 0)
CoUninitialize();
};
BOOL CADOConnection::Open(CString ConStr)
if(IsOpen())
m_Connection->Close();
m_Connection->Open((_bstr_t)ConStr,","adModeUnknown);
return IsOpen();
}
CString CADOConnection::GetSQLConStr(CString IP,CString DBName)
{
CString Str;
Str.Format(叩rovider = SQLOLEDB.1;Persist Security Info =
False;User ID = sa;Initial Catalog = %s;Data Source = %s”,DBName,IP);
return Str;
}
_ConnectionPtr CADOConnection::GetConnection()
{
return m_Connection:
BOOL CADOConnection::IsOpen()
{
long State;
m_Connection->get_State(&State);
if(State == adStateOpen)
return true;
return false;
}
class CADODataSet
{
protected:
_RecoedsetPtr m_DataSet;
CADOConnection *m_Connectionpublic:
void Delete();
int GetRecordNo();
void move(int nIndex);
void Save();
void SetFieldValue(CString FieldName,_variant_t Value);
void AddNew();
BOOL Next();
FieldsPtr GetFields();
int GetRecordCount();
void SetConnetion(CADOConnection *pCon);
BOOL Open(CString SQLStr);
CADODataSet();
virtual CADODataSet();
private:
BOOL IsOpen();
};
CADODataSet: : CADODataSet()
m_DataSet.CreateInstance("ADODB.Recordset");
}
CADODataSet: : ~CADODataSet()
{
if(IsOpen())
m_DataSet->Close();
m_DataSet = NULL;
m_Connection = NULL;
}
void CADODataSet::SetConnection(CADOConnection *pCon)
{
m_Connection = pCon;
}
int CADODataSet::GetRecordCount()
{
if(IsOpen())
return m_DataSet->GetRecordCount();
else
return 0;
}
BOOL CADODataSet::Open(CString SQLStr)
{
if(IsOpen)
m_DataSet->Close();
}
BOOL CADODataSet::IsOpen()
{
long State;
m_DataSet->get_State(&State);
if(State == adStateOpen)
return true;
return false;
}
FieldsPtr CADODataSet::GetFields()
return m_DataSet->GetFields();
}
BOOL CADODataSet::Next()
{
if(m_DataSet->adoEOF)
retuen false;
m_DataSet->MoveNext();
return true;
}
void CADODataSet::AddNew()
{
m_DataSet->AddNew();
}
void CADODataSet::SetFieldValue(CString FieldName,_variant_t Value0)
m_DataSet->PutCollect((_bstr_t)FieldName,Value);
void CADODataSet::Save()
{
m_DataSet->Upsate();
}
void CADODataSet::Move(int nIndex)
{
m_DataSet->MoveFirst();
m_DataSet->Move(nIndex);
}
int CADODataSet::GetRecordNO()
{
return m_DataSet->AbsolutePositon;
}
void CADODataSet::Delete()
{
m_DateSet->Delete(adAffectCurent);
BOOL CPersonApp::InitInstance()
{
AfxEnableControlContainer();
#ifdef一AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
LoadSkin();
BOOLbCon=
,"tb_person"));
CLoginDialog logindlg;
if(logindlg.DoModal()! = IDOK)
return false;
CPersonDlg dlg;
m_pMainWnd =& dlg;
int nResponse = dlg.DoModal();
if(nResponse == IDOK)
{
}
else if(nResponse == IDCANCEL)
{
}
return FALSE;
}
BOOL CLoginDialog::OnInitDialog()
CDialog::OnInitDialog();
m_DataSet.SetConnection(GetConnection());
m_DataSet.Open("Select* From Tab_User");
int count = m_DataSet.GetRecordCount();
for(int i = 0;i < count;i++)
{
m_UserList.AddString((_bstr_t)m_DataSet.GetFields()->Item[L"User
Name"]->Value);
m_DataSet.Next();
}
m_UserList.SetCurSel(0);
return TRUE;
}void CLoginDialog::OnLogin()
CString sql,user,pass;
m_UserList.GetWindowText(user);
m_passWord.GetWindowText(pass);
sql.Format("Select From tab_user Where UserName = '%s' and PassWord='%s'",user,pass);
m_DataSet.Open(sql);
if(m_DataSet.GetRecordCount() == 1)
{
::SetUserName(user);
this->OnOk();
}
else
AfxMessageBox;
void CUserManage::UpdateGrid()
m_DataSet.Open("Select *From tab_User");
m_grid.DeleteAllItems();
for(int = 0;i < m_DataSet.GetRecordCount();i++)
{m_grid.InsertItem(i,(_bstr_t)m_DataSet.GetFields()->Item
[L"UserName"]->Value);
int no = m_DataSet.GetRecordNo();
m_grid.SetItemData(i,no);
m_DataSet.Next();
BOOL CUserManage::OnInitDialog()
CDialog::OnInitDialog();
m_grid.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_grid.InsertColumn (顾客名");
m_grid.SetColumnWidth(0,150);
m_DataSet.SetConnection(::GetConnection());
UpdateGrid();
return TRUE;
}
void CUserManage::OnAppend()
{
CUserEdit useredit;
if (useredit.DoModal() == IDOK)
{
m_DataSet.AddNew();
m_DataSet.SetFieldValue("UserName",(_bstr_t)useredit.name);
m_DataSet.Save();
UpdateGrid();
}
}
void CUserManage::OnEdit()
{
CUserEdit useredit;
int no = m_grid.GetItemData(m_grid.GetSelectionMark());
m_DataSet.move(no-1);
useredit.name=(char
*)(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value;
if (useredit.DoModal() == IDOK)
{
m_DataSet.SetFieldValue("UserName",(_bstr_t)useredit.name);
m_DataSet.Save();
UpdateGrid();
}
void CUserManage::OnDelete()
{
if (MessageBox是否删除此统计!",提醒",
MB_YESNO|MB_ICONWARNING) == IDYES)
{
int no = m_grid.GetItemData(m_grid.GetSelectionMark());
m_DataSet.move(no-1);
m_DataSet.Delete();
m_DataSet.Save();
UpdateGrid();
}
void CDeptManage::GetNode(HTREEITEM pNode,int nPid){
HTREEITEM node;
CADODataSet DataSet;
DataSet.SetConnection(::GetConnection());
CString str;
str.Format("Selec*t From tab_Dept where pid = %d,nPid ");
DataSet.Open(str);
int count = DataSet.GetRecordCount();
int ID;
_variant_t value;
for(int i = 0;i < count;i++)
{
node=
m_tree.InsertItem((bstr_t)DataSet.GetFields()->Item["DeptName"]->Value,pNode);
value = (_vaiant_t)DataSet.GetFields()->Item["ID"]->Value;
ID = value.intVal;
m_tree.SetItemData(node,ID);
GetNode(node,ID);
DataSet.Next();
}
}
void CDeptManage::UpdateDept()
{
m_tree.DeleteAllItems();
GetNode(TVI_ROOT,0);
}
void CDeptManage::GetNode(HTREEITEM pNode,int nPid)
HTREEITEM node;
CADODataSet DataSet;
DataSet.SetConnection(::GetConnection());
CString str;
str.Format("Select * From tab_Dept where pid = %d",nPid);
DataSet.Open(str);
int count = DataSet.GetRecordCount();
int ID;
_variant_t value;
for (int i = 0;i<count;i++)
{
node=
m_tree.InsertItem((_bstr_t)DataSet.GetFields()->Item["DeptName"]->Value,pNode);
value = (_variant_t)DataSet.GetFields()->Item["ID"]->Value;
ID = value.intVal;
m_tree.SetItemData(node,ID);
GetNode(node,ID);
DataSet.Next();
}
}
void CDeptManage::OnAdd()
{
CDeptEdit deptedit;
if (deptedit.DoModal() == IDOK)
{
HTREEITEM pNode = m_tree.GetSelectedItem();
int pID;
if (deptedit.isroot)
pID = 0;
else
pID = m_tree.GetItemData(pNode);
CADODataSet dataset;
dataset.SetConnection(::GetConnection());
dataset.Open("Select top 1 * From tab_Dept");
dataset.AddNew();
dataset.SetFieldValue("DeptName",(_variant_t)deptedit.name);
dataset.SetFieldValue("memo",(_variant_t)deptedit.memo);
dataset.SetFieldValue(叩ID",(long)pID);
dataset.Save();
UpdateDept();
}
}
void CDeptManage::OnEdit()
{
CDeptEdit deptedit;
deptedit.visible = false;
HTREEITEM pNode = m_tree.GetSelectedItem();if (pNode == 0)
return;
int pID = m_tree.GetItemData(pNode);
CADODataSet dataset;
dataset.SetConnection(::GetConnection());
CString str;
str.Format("Select * From tab_Dept where id = %d",pID);
dataset.Open(str);
deptedit.name = (char *)(_bstr_t)dataset.GetFields()->Item[L"DeptName"]->Value;
deptedit.memo = (char *)(_bstr_t)dataset.GetFields()->Item["memo"]->Value;
if (deptedit.DoModal() == IDOK){
dataset.SetFieldValue("DeptName",(_variant_t)deptedit.name);
dataset.SetFieldValue("memo",(_variant_t)deptedit.memo);
dataset.Save();
UpdateDept();
void CDeptManage::OnDelete()
{
HTREEITEM pNode = m_tree.GetSelectedItem();
if (pNode == 0)
return;
if (MessageBox是否删除此统计!”,提醒”,
MB_YESNO|MB_ICONWARNING) == IDYES)
{
int pID = m_tree.GetItemData(pNode);
CADODataSet dataset;
dataset.SetConnection(::GetConnection());
CString str;
str.Format("Select * From tab_Dept where id = %d",pID);
dataset.Open(str);
dataset.Delete();
dataset.Save();
UpdateDept();
}
}
void CPersonManage::OnSelchangedTreedept(NMHDR * pNMHDR,LRESULT *pResult)
{
NM_TREEVIEW * pNMTreeView = (NM_TREEVIEW*)pNMHDR;
m_DeptID = m_tree.GetItemData(pNMTreeView->itemNew.hItem);
UpdatePerson();
*pResult = 0;
}
void CPersonManage::UpdatePerson()
m_list.DeleteAllItems();
CADODataSet DataSet;
DataSet.SetConnection(::GetConnection());
CString str;
if(m_DeptID == -1)
str.Format("Select * From tab_Employees");
else
str.Format("Select * From tab_Employees where Dept
=%d",m_DeptID);
DataSet.Open(str);
int count = DataSet.GetRecordCount();
int n = 0;
_variant_t value;
for(int i = 0;i<count;i++)
{
int index = 1;
m_list.InsertItem(n,(_bstr_t)DataSet.GetFields()->Item["
Emp_Id"]->Value);
value = DataSet.GetFields()->Item["AutoID"]->Value;
m_list.SetItemData(n,value,lVal);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Emp_NAME"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Sex"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Nationality"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Birth"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item[叩olitical_Party"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Culture_Level"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Marital_Condition"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Id_Card"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Office_phone"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Mobile"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["HireDate"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Duty"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Memo"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Files_Keep_Org"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Hukou"]->Value);
m_list.SetItemText(n,index++,(_bstr_t)DataSet.GetFields(
)->Item["Family_Place"]->Value);
n ++;
DataSet.Next();
}
}
BOOL CPersonManage::OnInitDialog()
{
CDialog::OnInitDialog();
m_DeptID = -1;
UpdateDept();
int i = 0;
m_list.InsertColumn 人,员编号");
m_list.SetColumnWidth(i++,80);
m_list.InsertColumn 人员名称");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 性别");
m_list.SetColumnWidth(i++,50);
m_list.InsertColumn 民族");
m_list.SetColumnWidth(i++,50);
m_list.InsertColumn出生日期");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 政治面貌");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 文化程度");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 婚姻情况");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 身份证号");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 办公"");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i," ");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn到岗日期");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 职务"");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 备注");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 家庭住址");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn 档案所在地");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumnH, 所在地");
m_list.SetColumnWidth(i++,1);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
UpdatePerson();
return TRUE;
}
BOOL CPersonManage::OnInitDialog()
CDialog::OnInitDialog();
m_DeptID = -1;
UpdateDept();
int i = 0;
m_list.InsertColumn(i,"人员编号");
m_list.SetColumnWidth(i++,80);
m_list.InsertColumn(i,"人员名称");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"性别");
m_list.SetColumnWidth(i++,50);
m_list.InsertColumn(i,"民族");
m_list.SetColumnWidth(i++,50);
m_list.InsertColumn(i,”出生日期”);m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"政治面貌");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"文化程度");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"婚姻情况");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"身份证号");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"办公 ");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"到岗日期");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"职务");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"备注");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"家庭住址");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"档案所在地");
m_list.SetColumnWidth(i++,1);
m_list.InsertColumn(i,"户所在地”);m_list.SetColumnWidth(i++,1);
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
UpdatePerson();
return TRUE;
}
void CPersonManage::OnEdit()
{
if (m_list.GetSelectionMark() == -1)
return;
int id = m_list.GetItemData(m_list.GetSelectionMark());
CPersonEdit personedit;
CADODataSet dataset;
dataset.SetConnection(::GetConnection());
CString str;
str.Format("select * from tab_Employees where autoid = %d",id);
dataset.Open(str);
personedit.m_id=(char
*)(_bstr_t)dataset.GetFields()->Item["Emp_Id"]->Value;
personedit.m_name=(char
*)(_bstr_t)dataset.GetFields()->Item["Emp_NAME"]->Value;
personedit.m_sex=(char
*)(_bstr_t)dataset.GetFields()->Item["Sex"]->Value;
personedit.m_nationality=(char
*)(_bstr_t)dataset.GetFields()->Item["Nationality"]->Value;
CStringbirth=(char
*)(_bstr_t)dataset.GetFields()->Item["Birth"]->Value;
展开阅读全文