基于C++的企业考勤管理系统的方案设计书代码.docx
《基于C++的企业考勤管理系统的方案设计书代码.docx》由会员分享,可在线阅读,更多相关《基于C++的企业考勤管理系统的方案设计书代码.docx(47页珍藏版)》请在冰豆网上搜索。
基于C++的企业考勤管理系统的方案设计书代码
1、问题描述
某公司需要存储雇员的编号、姓名、性别、所在部门,级别,并进行工资的计算。
其中,雇员分为经理、技术人员、销售人员和销售经理。
定义一个将小时换成天数的类。
转换规则:
8小时转换为一天,12小时转换为1.5天。
可进行天数的加、减。
定义一个记录员工生病、休假时间的类。
其中包括:
员工生病没工作的天数、生病可以不工作的最多天数、员工已经带薪休假的天数、员工可以带薪休假的天数。
公司规定带薪休假不能超过24小时。
生病可以不工作的最多不能超过16小时。
设计一程序能够对公司人员的休假情况进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。
2、功能要求
(1)添加功能:
程序能够任意添加上述四类人员的记录,可提供选择界面供用户选择所要添加的人员类别,要求员工的编号要唯一,如果添加了重复编号的记录时,则提示数据添加重复并取消添加。
还可以添加带薪休假和生病休假的记录,每条记录中必须包含员工编号和姓名。
(2)查询功能:
可根据编号、姓名等信息对已添加的员工信息和休假信息进行查询,如果未找到,给出相应的提示信息,如果找到,则显示相应的记录信息;
(3)显示功能:
可显示当前系统中所有记录,每条记录占据一行。
(4)编辑功能:
可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
(5)删除功能:
主要实现对已添加的人员记录和休假记录进行删除。
如果当前系统中没有相应的人员记录,则提示“记录为空!
”并返回操作。
(6)统计功能:
能根据多种参数进行人员的统计。
例如,统计四类人员数量以及总数,
统计任一员工的休假天数等信息。
(7)保存功能:
可将当前系统中各类人员记录和休假记录存入文件中,存入方式任意。
(8)读取功能:
可将保存在文件中的信息读入到当前系统中,供用户进行使用。
3、问题的解决方案
根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
#import"msado15.dll"no_namespacerename("EOF,"adoEOF")
classCADOConnection
{
private:
StaticvoidInitADO()。
StaticvoidUnInitADO()。
protected:
_ConnectionPtrm_Connection。
public:
BOOLIsOpen()。
_ConnectionPtrGetConnection()。
CstringGetSQLConstr(CStringIP,CStringDBName)。
BOOLOpen(CStringConStr)。
CADOConnection()。
Virtual~CADOConnection()。
}。
CADOConnection*GetConnection()。
IntConCount=0。
CADOConnectiong_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()。
}
VoidCADOConnection:
:
InitADO()
{
If(ConCount++==0)
CoInitialize(NULL)。
}。
voidCADOConnection:
:
UnInitADO()
{
if(~ConCount==0)
CoUninitialize()。
}。
BOOLCADOConnection:
:
Open(CStringConStr)
{
if(IsOpen())
m_Connection->Close()。
m_Connection->Open((_bstr_t)ConStr,","adModeUnknown)。
returnIsOpen()。
}
CStringCADOConnection:
:
GetSQLConStr(CStringIP,CStringDBName)
{
CStringStr。
Str.Format("Provider=SQLOLEDB.1。
PersistSecurityInfo=False。
UserID=sa。
InitialCatalog=%s。
DataSource=%s",DBName,IP)。
returnStr。
}
_ConnectionPtrCADOConnection:
:
GetConnection()
{
returnm_Connection:
}
BOOLCADOConnection:
:
IsOpen()
{
longState。
m_Connection->get_State(&State)。
if(State==adStateOpen)
returntrue。
returnfalse。
}
classCADODataSet
{
protected:
_RecoedsetPtrm_DataSet。
CADOConnection*m_Connection
public:
voidDelete()。
intGetRecordNo()。
voidmove(intnIndex)。
voidSave()。
voidSetFieldValue(CStringFieldName,_variant_tValue)。
voidAddNew()。
BOOLNext()。
FieldsPtrGetFields()。
intGetRecordCount()。
voidSetConnetion(CADOConnection*pCon)。
BOOLOpen(CStringSQLStr)。
CADODataSet()。
virtual~CADODataSet()。
private:
BOOLIsOpen()。
}。
CADODataSet:
:
CADODataSet()
{
m_DataSet.CreateInstance("ADODB.Recordset")。
}
CADODataSet:
:
~CADODataSet()
{
if(IsOpen())
m_DataSet->Close()。
m_DataSet=NULL。
m_Connection=NULL。
}
voidCADODataSet:
:
SetConnection(CADOConnection*pCon)
{
m_Connection=pCon。
}
intCADODataSet:
:
GetRecordCount()
{
if(IsOpen())
returnm_DataSet->GetRecordCount()。
else
return0。
}
BOOLCADODataSet:
:
Open(CStringSQLStr)
{
if(IsOpen)
m_DataSet->Close()。
}
BOOLCADODataSet:
:
IsOpen()
{
longState。
m_DataSet->get_State(&State)。
if(State==adStateOpen)
returntrue。
returnfalse。
}
FieldsPtrCADODataSet:
:
GetFields()
{
returnm_DataSet->GetFields()。
}
BOOLCADODataSet:
:
Next()
{
if(m_DataSet->adoEOF)
retuenfalse。
m_DataSet->MoveNext()。
returntrue。
}
voidCADODataSet:
:
AddNew()
{
m_DataSet->AddNew()。
}
voidCADODataSet:
:
SetFieldValue(CStringFieldName,_variant_tValue0)
{
m_DataSet->PutCollect((_bstr_t)FieldName,Value)。
}
voidCADODataSet:
:
Save()
{
m_DataSet->Upsate()。
}
voidCADODataSet:
:
Move(intnIndex)
{
m_DataSet->MoveFirst()。
m_DataSet->Move(nIndex)。
}
intCADODataSet:
:
GetRecordNO()
{
returnm_DataSet->AbsolutePositon。
}
voidCADODataSet:
:
Delete()
{
m_DateSet->Delete(adAffectCurent)。
}
BOOLCPersonApp:
:
InitInstance()
{
AfxEnableControlContainer()。
#ifdef_AFXDLL
Enable3dControls()。
#else
Enable3dControlsStatic()。
#endif
LoadSkin()。
BOOLbCon=GetConnection()->Open(GetConnection()->GetSQLConStr("127.0.0.1","tb_person"))。
CLoginDialoglogindlg。
if(logindlg.DoModal()!
=IDOK)
returnfalse。
CPersonDlgdlg。
m_pMainWnd=&dlg。
intnResponse=dlg.DoModal()。
if(nResponse==IDOK)
{
}
elseif(nResponse==IDCANCEL)
{
}
returnFALSE。
}
BOOLCLoginDialog:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog()。
m_DataSet.SetConnection(GetConnection())。
m_DataSet.Open("Select*FromTab_User")。
intcount=m_DataSet.GetRecordCount()。
for(inti=0。
ii++)
{
m_UserList.AddString((_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value)。
m_DataSet.Next()。
}
m_UserList.SetCurSel(0)。
returnTRUE。
}
voidCLoginDialog:
:
OnLogin()
{
CStringsql,user,pass。
m_UserList.GetWindowText(user)。
m_passWord.GetWindowText(pass)。
sql.Format("Select*Fromtab_userWhereUserName='%s'andPassWord='%s'",user,pass)。
m_DataSet.Open(sql)。
if(m_DataSet.GetRecordCount()==1)
{
:
:
SetUserName(user)。
this->OnOk()。
}
else
AfxMessageBox。
}
voidCUserManage:
:
UpdateGrid()
{
m_DataSet.Open("Select*Fromtab_User")。
m_grid.DeleteAllItems()。
for(int=0。
ii++)
{m_grid.InsertItem(i,(_bstr_t)m_DataSet.GetFields()->Item[L"UserName"]->Value)。
intno=m_DataSet.GetRecordNo()。
m_grid.SetItemData(i,no)。
m_DataSet.Next()。
}
}
BOOLCUserManage:
:
OnInitDialog()
{
CDialog:
:
OnInitDialog()。
m_grid.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES)。
m_grid.InsertColumn(0,"用户名")。
m_grid.SetColumnWidth(0,150)。
m_DataSet.SetConnection(:
:
GetConnection())。
UpdateGrid()。
returnTRUE。
}
voidCUserManage:
:
OnAppend()
{
CUserEdituseredit。
if(useredit.DoModal()==IDOK)
{
m_DataSet.AddNew()。
m_DataSet.SetFieldValue("UserName",(_bstr_t)useredit.name)。
m_DataSet.Save()。
UpdateGrid()。
}
}
voidCUserManage:
:
OnEdit()
{
CUserEdituseredit。
intno=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()。
}
}
voidCUserManage:
:
OnDelete()
{
if(MessageBox("是否删除此记录!
","提示",
MB_YESNO|MB_ICONWARNING)==IDYES)
{
intno=m_grid.GetItemData(m_grid.GetSelectionMark())。
m_DataSet.move(no-1)。
m_DataSet.Delete()。
m_DataSet.Save()。
UpdateGrid()。
}
}
voidCDeptManage:
:
GetNode(HTREEITEMpNode,intnPid)
{
HTREEITEMnode。
CADODataSetDataSet。
DataSet.SetConnection(:
:
GetConnection())。
CStringstr。
str.Format("Select*Fromtab_Deptwherepid=%d,nPid")。
DataSet.Open(str)。
intcount=DataSet.GetRecordCount()。
intID。
_variant_tvalue。
for(inti=0。
ii++)
{
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()。
}
}
voidCDeptManage:
:
UpdateDept()
{
m_tree.DeleteAllItems()。
GetNode(TVI_ROOT,0)。
}
voidCDeptManage:
:
GetNode(HTREEITEMpNode,intnPid)
{
HTREEITEMnode。
CADODataSetDataSet。
DataSet.SetConnection(:
:
GetConnection())。
CStringstr。
str.Format("Select*Fromtab_Deptwherepid=%d",nPid)。
DataSet.Open(str)。
intcount=DataSet.GetRecordCount()。
intID。
_variant_tvalue。
for(inti=0。
ii++)
{
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()。
}
}
voidCDeptManage:
:
OnAdd()
{
CDeptEditdeptedit。
if(deptedit.DoModal()==IDOK)
{
HTREEITEMpNode=m_tree.GetSelectedItem()。
intpID。
if(deptedit.isroot)
pID=0。
else
pID=m_tree.GetItemData(pNode)。
CADODataSetdataset。
dataset.SetConnection(:
:
GetConnection())。
dataset.Open("Selecttop1*Fromtab_Dept")。
dataset.AddNew()。
dataset.SetFieldValue("DeptName",(_variant_t)deptedit.name)。
dataset.SetFieldValue("memo",(_variant_t)deptedit.memo)。
dataset.SetFieldValue("PID",(long)pID)。
dataset.Save()。
UpdateDept()。
}
}
voidCDeptManage:
:
OnEdit()
{
CDeptEditdeptedit。
deptedit.visible=false。
HTREEITEMpNode=m_tree.GetSelectedItem()。
if(pNode==0)
return。
intpID=m_tree.GetItemData(pNode)。
CADODataSetdataset。
dataset.SetConnection(:
:
GetConnection())。
CStringstr。
str.Format("Select*Fromtab_Deptwhereid=%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()。
}
}
voidCDeptManage:
:
OnDelete()
{
HTREEITEMpNode=m_tree.GetSelectedItem()。
if(pNode==0)
return。
if(MessageBox("是否删除此记录!
","提示",
MB_YESNO|MB_ICONWARNING)==IDYES)
{
intpID=m_tree.GetItemData(pNode)。
CADODataSetdataset。
dataset.SetConnection(:
:
GetConnection())。
CStringstr。
str.Format("Select*Fromtab_Deptwhereid=%d",pID)。
dataset.Open(str)。
dataset.Delete()。
dataset.Save()。
UpdateDept()。
}
}
voidCPersonManage:
:
OnSelchangedTreedept(NMHDR*pNMHDR,LRESULT*pResult)
{
NM_TREEVIEW*pNMTreeView=(NM_TREEVIEW*)pNMHDR。
m_DeptID=m_tr