考勤管理系统3.docx

上传人:b****2 文档编号:16917136 上传时间:2023-04-24 格式:DOCX 页数:29 大小:592.83KB
下载 相关 举报
考勤管理系统3.docx_第1页
第1页 / 共29页
考勤管理系统3.docx_第2页
第2页 / 共29页
考勤管理系统3.docx_第3页
第3页 / 共29页
考勤管理系统3.docx_第4页
第4页 / 共29页
考勤管理系统3.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

考勤管理系统3.docx

《考勤管理系统3.docx》由会员分享,可在线阅读,更多相关《考勤管理系统3.docx(29页珍藏版)》请在冰豆网上搜索。

考勤管理系统3.docx

考勤管理系统3

考勤管理系统

摘要:

考勤管理是与我们日常生活息息相关的问题。

本文设计并实现了一个考勤管理系统详细介绍了系统从需求分析,总体设计,详细设计以及实施各阶段的主要内容和成果。

设计实现的管理系统能够正确有效地完成考勤管理的日常工作,并能够根据需求进行灵活的查询;系统与数据库管理系统结合,提供了功能较为强大的数据安全功能;系统界面友好,操作简单,易掌握。

本系统的主要实现目标是统计并显示所有员工的出勤状态。

根据不同用户权限来保护用户信息安全。

并保证系统所收集的信息的正确。

关键词:

出勤管理系统,数据库,面向对象

 

目录

摘要2

1.需求分析2

1.1系统概述2

1.2系统功能模块设计2

1.3与其他系统的联系2

1.4数据流程图3

2.数据库设计3

2.1数据库需求分析3

2.2数据库概念结构设计4

2.3功能模块创建和界面设计5

3.详细设计11

3.1工作记录模块(加班)11

3.2工作记录模块(请假)16

3.3密码修改模块19

个人总结21

1.需求分析

对于一个现代化的企业来说,考勤管理是必须的,如何把每天发生的考勤信息如实地记录下来,保证考勤工作有条理地进行,同时确保相关数据的安全,信息处理的高效,并保证系统的实用性强,这是本系统设计的目的。

1.1系统概述

考勤管理系统可以为提供基本的考勤管理,从而帮助考勤人员能够使用软件对其现有流程进行高效的管理,这些管理包括:

●上班时间的设定。

上下班时间相对固定,可保存在客户端的设置文件中。

●员工出入单位的情况记录。

出入情况主要由考勤机来记录,但是需要设置人工添加的功能,已备特殊情况的处理。

●请假、加班和出差情况的记录。

每个月底进行整个月的出勤情况统计。

1.2系统功能模块设计

系统功能模块图如下:

1.3与其它其他系统的关系

考勤管理系统记录了员工上下班的情况,为工资管理系统直接提供每个月工作时间的统计结果,用以计算工资。

同时考勤系统也需要其他系统提供的员工、部门等信息。

1.4数据流程图

2.数据库设计

2.1数据库需求分析

根据数据流程,可以列出以下出勤管理系统所需的数据项和数据结构。

●出勤记录:

记录号、员工、出入情况和时间,如图1-3所示。

●月考勤统计:

记录号、员工、年月、累计正常工作时间、累计请假时间、累计加班时间、累计出差时间、迟到次数、早退次数和旷工次数,如图1-4所示。

●请假记录:

记录号、员工、假期起止时间/结束时间和请假缘由,如图1-5所示。

●加班记录:

记录号、员工、加班时间长度和日期如图1-6所示。

●出差记录:

记录号、员工、出差起始时间/结束时间和具体描述,如图1-7所示。

●工作时间记录:

职务、上班时间/下班时间,如图

所需的外部数据支持:

●人员信息:

员工号、密码、权限、姓名、部门等。

●部门设置:

部门编号、名称、上下班时间等。

图1-3:

图1-8:

图1-4

图1-5

图1-6图1-7

2.2数据库概念结构设计

系统E-R图

2.3各功能模块的创建和界面设计

本系统采用Dialogbased的应用程序框架。

程序数据库操作是通过MFC的CDBC类实现

(截图为Admin管理员用户和员工号10010普通用户获取)

1.登陆界面

2.登陆成功后的主界面

3.系统设置(修改各种职务上下班时间)

4.普通用户

5.普通用户主界面(不能使用系统设置)

6.每日出勤记录(Admin用户)

7.每日出勤记录(普通用户)(不能帮其他用户打卡)

8.出差记录(Admin)(可查看所有用户记录)

9.出差记录(普通用户)(此次截图使用员工号10011登陆看不到其他用户的信息)

加班记录(Admin用户)(可查看所有用户记录)

请假记录(Admin)(可查看所有用户记录)

查询(按早退次数查询)

按旷工次数查询

按员工号查询:

3详细设计

基于系统需求分析与系统总体设计的结论,本系统采用VisualStudio2005实现各模块的功能,下面按照功能模块的划分来分别阐述系统的详细设计和实现过程。

3.1加班

BOOLMore:

:

OnInitDialog()

voidMore:

:

OnBnClickedOk()

voidMore:

:

MyShow(void)

voidMore:

:

OnBnClickedButtonDelete()

voidMore:

:

MoreToMonth(CStringNum,intt)

成员变量:

m_nAllow、m_nEnd、m_nEvent、m_nListCtrl、m_nNum、m_nStart

voidMore:

:

MoreToMonth(CStringNum,intt)

{

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

Month_setrs(&db);

rs.Open(Month_set:

:

dynaset,_T("select*from月考勤统计"));

while(!

rs.IsEOF())

{

if(rs.column3==Num)

{

rs.Edit();

rs.column10+=t;

rs.Update();

break;

}

rs.MoveNext();

}

rs.Close();

db.Close();

}

voidMore:

:

OnBnClickedButtonDelete()

{

//TODO:

在此添加控件通知处理程序代码

if(MessageBox(_T("确定删除当前记录?

"),NULL,MB_YESNO)==IDYES)

{

CStringNum;intt;

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

More_setrs(&db);

rs.Open(More_set:

:

dynaset,_T("select*from加班记录表"));

rs.Move(m_nListCtrl.GetSelectionMark());

Num=rs.column2;

t=-(24*(365*(rs.column5.GetYear()-rs.column4.GetYear())+(30*(rs.column5.GetMonth()-rs.column4.GetMonth()))+(rs.column5.GetDay()-rs.column4.GetDay()))+rs.column5.GetHour()-rs.column4.GetHour());

rs.Delete();//删除当前记录

rs.MoveNext();//移到下一记录

if(rs.IsEOF())//删除记录为最后一条记录处理

rs.MoveLast();

if(rs.IsBOF())//删空记录集处理

rs.SetFieldNull(NULL);

rs.Close();

db.Close();

MyShow();

MoreToMonth(Num,t);

}

}

voidMore:

:

MyShow(void)

{

externCStringsz_Admin2;

CStringSQL;

if(sz_Admin2!

=_T(""))

{

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

CDataRowsetworkrs(&db);

rs.Open(CDataRowsetwork:

:

dynaset,_T("select*from员工表"));

while(!

rs.IsEOF())

{

if(rs.column2==sz_Admin2)

{

SQL.Format(_T("select*from加班记录表WHERE加班记录表.员工号='%s'ORDERBY编号DESC"),rs.column1);

break;

}

rs.MoveNext();

}

rs.Close();

db.Close();

}

else

SQL=_T("select*from加班记录表ORDERBY编号DESC");

m_nListCtrl.DeleteAllItems();

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

More_setrs(&db);

rs.Open(More_set:

:

dynaset,SQL);

while(!

rs.IsEOF())

{

CStringstr1;

str1.Format(_T("%d"),rs.column1);

intPos;

Pos=m_nListCtrl.InsertItem(0,str1);

m_nListCtrl.SetItemText(Pos,1,rs.column2);

m_nListCtrl.SetItemText(Pos,2,rs.column3.Format("%Y-%m-%d"));

m_nListCtrl.SetItemText(Pos,3,rs.column4.Format("%Y-%m-%d%H:

%M:

%S"));

m_nListCtrl.SetItemText(Pos,4,rs.column5.Format("%Y-%m-%d%H:

%M:

%S"));

m_nListCtrl.SetItemText(Pos,5,rs.column6);

m_nListCtrl.SetItemText(Pos,6,rs.column7);

rs.MoveNext();

}

rs.Close();

db.Close();

}

voidMore:

:

OnBnClickedOk()

{

//TODO:

在此添加控件通知处理程序代码

externCStringsz_Admin;

if(UpdateData(TRUE))

{

if(MessageBox(_T("确定添加?

"),NULL,MB_YESNO)==IDYES)

{

CStringNum;intt;

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

More_setrs;

rs.Open(More_set:

:

dynaset,_T("select*from加班记录表"));

rs.AddNew();

rs.column2=m_nNum;

rs.column3=CTime(m_nStart.GetYear(),m_nStart.GetMonth(),m_nStart.GetDay(),0,0,0);

rs.column4=CTime(m_nStart.GetYear(),m_nStart.GetMonth(),m_nStart.GetDay(),m_nStart.GetHour(),m_nStart.GetMinute(),m_nStart.GetSecond());

rs.column5=CTime(m_nEnd.GetYear(),m_nEnd.GetMonth(),m_nEnd.GetDay(),m_nEnd.GetHour(),m_nEnd.GetMinute(),m_nEnd.GetSecond());

Num=rs.column2;

t=24*(365*(rs.column5.GetYear()-rs.column4.GetYear())+(30*(rs.column5.GetMonth()-rs.column4.GetMonth()))+(rs.column5.GetDay()-rs.column4.GetDay()))+rs.column5.GetHour()-rs.column4.GetHour();

rs.column6=m_nEvent;

rs.column7=sz_Admin;

rs.Update();

rs.Close();

db.Close();

MoreToMonth(Num,t);

}

MyShow();

//OnOK();

}

}

BOOLMore:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//TODO:

在此添加额外的初始化

externCStringsz_Admin;

m_nListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);

LPWSTRname[7]={_T("编号"),_T("员工号"),_T("加班日期"),_T("加班开始时间"),_T("加班结束时间"),_T("加班事由"),_T("批准人")};

for(intn=0;n<=6;n++)

{

LVCOLUMNlv;

lv.fmt=LVCFMT_CENTER;

lv.mask=LVCF_WIDTH|LVCF_TEXT|LVCF_FMT;

lv.pszText=name[n];

if(n==3||n==4)

lv.cx=190;

else

lv.cx=100;

m_nListCtrl.InsertColumn(n,&lv);

}

if(sz_Admin!

=_T(""))

{

m_nAllow=sz_Admin;

UpdateData(false);

}

if(sz_Admin=="")

{

GetDlgItem(IDC_BUTTON_DELETE)->EnableWindow(FALSE);

GetDlgItem(IDOK)->EnableWindow(FALSE);

SetWindowPos(NULL,50,50,600,260,SWP_NOMOVE|SWP_SHOWWINDOW);

}

MyShow();

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

//异常:

OCX属性页应返回FALSE

}

3.2请假

BOOLOff:

:

OnInitDialog()

voidOff:

:

OnBnClickedOk()

voidOff:

:

MyShow(void)

voidOff:

:

OnBnClickedButtonDelete()

voidOff:

:

OffToMonth(CStringNum,intt)

成员变量:

m_nAllow、m_nEnd、m_nEvent、m_nListCtrl、m_nNum、m_nStart

BOOLOff:

:

OnInitDialog()

{

CDialog:

:

OnInitDialog();

//TODO:

在此添加额外的初始化

externCStringsz_Admin;

m_nListCtrl.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT);

LPWSTRname[6]={_T("编号"),_T("员工号"),_T("请假开始时间"),_T("请假结束时间"),_T("请假事由"),_T("批准人")};

for(intn=0;n<=5;n++)

{

LVCOLUMNlv;

lv.fmt=LVCFMT_CENTER;

lv.mask=LVCF_WIDTH|LVCF_TEXT|LVCF_FMT;

lv.pszText=name[n];

if(n==2||n==3)

lv.cx=190;

else

lv.cx=100;

m_nListCtrl.InsertColumn(n,&lv);

}

if(sz_Admin!

=_T(""))

{

m_nAllow=sz_Admin;

UpdateData(false);

}

if(sz_Admin=="")

{

GetDlgItem(ID_BUTTON_DELETE)->EnableWindow(FALSE);

GetDlgItem(IDOK)->EnableWindow(FALSE);

SetWindowPos(NULL,50,50,600,260,SWP_NOMOVE|SWP_SHOWWINDOW);

}

MyShow();

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

//异常:

OCX属性页应返回FALSE

}

voidOff:

:

OnBnClickedOk()

{

//TODO:

在此添加控件通知处理程序代码

externCStringsz_Admin;

if(UpdateData(TRUE))

{

if(MessageBox(_T("确定添加?

"),NULL,MB_YESNO)==IDYES)

{

intt;

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

Off_setrs;

rs.Open(Off_set:

:

dynaset,_T("select*from请假记录表"));

rs.AddNew();

rs.column2=m_nNum;

rs.column3=CTime(m_nStart.GetYear(),m_nStart.GetMonth(),m_nStart.GetDay(),m_nStart.GetHour(),m_nStart.GetMinute(),m_nStart.GetSecond());

rs.column4=CTime(m_nEnd.GetYear(),m_nEnd.GetMonth(),m_nEnd.GetDay(),m_nEnd.GetHour(),m_nEnd.GetMinute(),m_nEnd.GetSecond());t=365*(rs.column4.GetYear()-rs.column3.GetYear())+(30*(rs.column4.GetMonth()-rs.column3.GetMonth()))+(rs.column4.GetDay()-rs.column3.GetDay());

rs.column5=m_nEvent;

rs.column6=sz_Admin;

rs.Update();

rs.Close();

db.Close();

OffToMonth(m_nNum,t);

}

MyShow();

}

}

voidOff:

:

MyShow(void)

{

externCStringsz_Admin2;

CStringSQL;

if(sz_Admin2!

=_T(""))

{

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

CDataRowsetworkrs(&db);

rs.Open(CDataRowsetwork:

:

dynaset,_T("select*from员工表"));

while(!

rs.IsEOF())

{

if(rs.column2==sz_Admin2)

{

SQL.Format(_T("select*from请假记录表WHERE请假记录表.员工号='%s'ORDERBY编号DESC"),rs.column1);

break;

}

rs.MoveNext();

}

rs.Close();

db.Close();

}

else

SQL=_T("select*from请假记录表ORDERBY编号DESC");

m_nListCtrl.DeleteAllItems();

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

Off_setrs(&db);

rs.Open(Off_set:

:

dynaset,SQL);

while(!

rs.IsEOF())

{

CStringstr1;

str1.Format(_T("%d"),rs.column1);

intPos;

Pos=m_nListCtrl.InsertItem(0,str1);

m_nListCtrl.SetItemText(Pos,1,rs.column2);

m_nListCtrl.SetItemText(Pos,2,rs.column3.Format("%Y-%m-%d%H:

%M:

%S"));

m_nListCtrl.SetItemText(Pos,3,rs.column4.Format("%Y-%m-%d%H:

%M:

%S"));

m_nListCtrl.SetItemText(Pos,4,rs.column5);

m_nListCtrl.SetItemText(Pos,5,rs.column6);

rs.MoveNext();

}

rs.Close();

db.Close();

}

voidOff:

:

OnBnClickedButtonDelete()

{

//TODO:

在此添加控件通知处理程序代码

if(MessageBox(_T("确定删除当前记录?

"),NULL,MB_YESNO)==IDYES)

{

CStringNum;

intt;

CDatabasedb;

db.Open(_T("ODBC;DSN=MYACCESS"));

Off_setrs(&db);

rs.Open(Off_set:

:

dynaset,_T("select*from请假记录表"));

rs.Move(m_nListCtrl.GetSelectionMark());

Num=rs.column2;

t=-(365*(rs.column4.GetYear()-rs.column3.GetYear())+(30*(rs.column4.GetMonth()-rs.column3.GetMonth()))+(rs.column4.GetDay()-rs.column

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1