Visual C++60考勤管理系统.docx
《Visual C++60考勤管理系统.docx》由会员分享,可在线阅读,更多相关《Visual C++60考勤管理系统.docx(30页珍藏版)》请在冰豆网上搜索。
VisualC++60考勤管理系统
摘 要
在现代化企业中,企业员工的考勤工作不仅工作量大,而且时效性强。
随着数据库技术的发展和企业信息化建设的进行,使用计算机管理企业考勤工作也成为大势所趋,它为企业的考勤工作节约了大量的人力和物力,也大大减轻了考勤工作人员的工作量。
考勤管理系统是企业对考勤实行了信息化管理,其目的是为了实现员工考勤数据采集、信息查询和数据统计过程的自动化,完善人事管理现代化,方便管理人员统计、考核员工出勤情况,计算员工工资。
关键词:
考勤管理,Access2007,数据库,VC++
Abstract
Inthecorporationstoday,employees’jobofcheckonworkattendancenotonlyworkloadisverylarge,butalsotimeisverystrong.Alongwithdevelopmentofdatabasetechnologyandprogressofcorporationinformation’sbuilding,usingcomputertomanagecheckonworkattendanceofcorporationswhichitisnecessary.Itsavesamassofmanpowerandmaterialresourcesandgreatlylightensworkloadofemployees.
AttendanceManagementSystemisabusiness-to-appraisaloftheimplementationofinformationmanagement,whichaimsisdesignedtoachievestaffattendancedatacollection,informationqueryandstatisticalprocessautomation,improvepersonnelmanagementmodernization,andtheconvenienceofstafftoreporttowork,facilitatemanagementstatistics,theexaminationstaffattendance.
Keywords:
attendance,Access2007,database,VC++
目 录
0 绪论1
1 系统目标及使用软件介绍1
1.1 系统目标1
1.2 使用软件的介绍1
2 可行性研究及设计思想2
2.1 可行性研究2
2.2 开发设计思想3
3 需求分析3
3.1 用户需求分析3
3.2 数据分析——概念模型设计3
3.2.1 数据描述3
3.2.2 数据库建模4
3.2.3 关系描述的设计5
4 系统设计6
4.1 Access2007数据库的建立6
4.2 数据库连接7
4.3 数据库操作8
4.4 各个模块的设计与实现9
5 主要技术15
5.1 主要控件代码15
5.2 ADO数据库访问技术16
6 结束语17
致 谢18
参考文献18
0 绪论
当今社会,资金是企业生存的主要元素,资金的流动影响到企业的整体运作,企业员工的工资是企业资金管理的一个重要的组成部分。
而随着企业人员数量的增加,企业的工资管理也变得越来越复杂。
企业员工的人数越多,工资的统计工作就越多,工资的发放困难就越大。
传统的纸张材料的数据信息管理方式已经不适合现代企业的发展,实现工资管理的系统化、规范化、自动化,将成为现代公司管理工资的首选。
随着计算机的诞生和普及以及计算机网络的发展,我们可以开发一个工资管理系统,用计算机代替大量的人工统计和计算,完成许多工资信息的处理,同时,使用计算机还可以安全地、完整地保存大量的工作记录。
1 系统目标及使用软件介绍
1.1 系统目标
系统需符合考勤工资管理制度,并达到操作直观、方便、实用、安全等要求。
能够提供详细的员工基础信息,包括自然条件信息、工资情况、来源、去向、岗位变动情况。
能够随时查阅在职、非在职人员信息,提供出职工花名册,同时为财务部提供人员变动单及月基本工资汇总情况等。
针对这些要求,系统建立了职工信息查询、职工信息删除、职工工资信息管理、职工工资信息查询4个主要信息库。
系统根据增减人员、工资变动操作自动生成记录记载变动内容,以便用户查询其变动过程。
实现了对员工信息的查询、统计、增减、变动记录等功能。
1.2 使用软件的介绍
(1) 应用程序开发工具
微软公司的VC++6.0是Windows应用程序开发工具,是目前最为广泛的、易学易用的面向对象的开发工具。
VC++6.0提供了大量的控件,这些控件可用于设计界面和实现各种功能,减少了编程人员的工作量,也简化了界面设计过程,从而有效的提高了应用程序的运行效率和可靠性。
故而,实现本系统VC是一个相对较好的选择[1]。
VC++6.0编程语言是一个面向对象的集成开发系统。
它简单、高效的特点使它成为编程者的最爱。
它提供了灵活的可视化设计工具,将可视化界面与面向对象技术完善、紧密地结合起来,其友好的集成开发界面,可视化的双向开发模式,良好的数据库应用支持高效的程序开发和程序运行,备受广大程序开发人员的好评。
采用Access2007数据库环境开发,可缩短开发周期,提高开发效率的特点。
对系统的软硬件要求也低,减少用户的资金投入[2]。
(2) 关系型数据库的选择
Access2007就是关系数据库开发工具,数据库能汇集各种信息以供查询、存储和检索。
Access的优点在于它能使用数据表示图或自定义窗体收集信息。
数据表示图提供了一种类似于Excel的电子表格,可以使数据库一目了然[3]。
另外,Access允许创建自定义报表用于打印或输出数据库中的信息。
Access也提供了数据存储库,可以使用桌面数据库文件把数据库文件置于网络文件服务器,与其他网络用户共享数据库。
Access是一种关系数据库工具,关系数据库是已开发的最通用的数据库之一。
如上所述,Access作为关系数据库开发具备了许多优点,可以在一个数据包中同时拥有桌面数据库的便利和关系数据库的强大功能。
2 可行性研究及设计思想
2.1 可行性研究
(1) 技术可行性
随着国内软件开发的日益发展壮大,各种中小企事业单位已具备独立开发各种类型的软件的能力,能够满足不同行业的特别的需求。
而这个系统尽管其在组织关系上存在着很大的复杂性,繁琐性,但是就整个系统的技术构成上来看,它还是属于一个数据库应用类的系统。
其基本操作还是对存在数据库进行添加、删除、查找、编辑等。
所以就单纯的数据库应用来看,暂不存在太大的技术问题。
(2) 经济可行性
对于整个系统而言,在系统未运行之前,初期投资比较大,花费相对而言比较多。
各部门必须配置电脑、服务器、打印机、传真机及相关的网络设备,但是在整个系统投入运行之后,因为现在计算机已经普及了,相关的人员培训费可以减少很多。
而同时又减少了数据的流通环节,不必要花费那么多的时间,也就是说最重要的就是提高了效率,而又保证了各项数据的准确性,也避免了工作人员的流动造成的收据丢失等问题,适应了当前的发展形式。
(3) 管理可行性
随着时代的发展,人员素质的提高,不论是对于电脑系统的基本操作还是对于系统的维护都有了一定的基础。
同时还可以配置专业的电脑维护人员来维护电脑,不必担心电脑故障问题。
(4) 开发环境可行性
我采用的VC++6.0开发工具,它首先是一个开放的协作式系统,可以和多种PC产品集成,并可以通过专用接口或ODBC接口连接许多比较常用的数据库;其次它具有可视化的开发环境,使代码的编写更为直观,并且在可视化环境下的调试和维护也相对容易。
而为方便用户界面的开发,VC++6.0提供了大量控件,这既丰富了应用程序的表达能力,也加快了项目的开发速度。
同时,它拥有多平台的开发环境,如果需要把一个平台上开发的代码移植到另外一个平台上,只要重新编译就可以了。
2.2 开发设计思想
本系统开发设计思想:
(1) 尽量利用企业现有软件环境,采用先进的管理系统方案,从而达到充分利用企业现有资源,提高系统开发水平和应用效果的目的。
(2) 系统应符合企业工资管理的规定,满足企业相关人员日常使用的需要,并达到操作过程的直观、方便、实用、安全等要求。
(3) 系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于技术维护人员进行补充、维护。
(4) 系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。
3 需求分析
3.1 用户需求分析
随着社会现代化的发展,单位日常管理相关的信息随之急剧增加,传统的人力手工管理模式越来越不能适应现在的工作效率和准确性。
在这个高节奏的信息时代,安全、准确的管理信息系统是每个管理者所需求的。
建立一个适应现代化社会经济体制的管理信息系统势在必行。
在大量地调查和研究的基础上,包括访问用户,了解财务系统模型,熟悉现有的工作流程和数据流程等工作,采集和分析有关资料和、报表和业务规定,进行了财务管理软件的开发。
在整个系统的设计和开发过程中,积极采纳最终用户的意见。
对于开发财务管理系统进行了认真仔细的分析,在实施过程中不断地加以修改和完善,使这套财务管理系统能更好地运行。
该系统的具体任务就是设计一个电脑公司财务的数据库管理系统,由计算机来代替人工执行一系列诸如增加、删除、修改、查询、统计及打印等操作。
这样就使办公人员以轻松快捷地完成财务管理的任务。
3.2 数据分析——概念模型设计
3.2.1 数据描述
(1) 静态数据
静态数据是系统内部有关的数据结构与操作规程。
具体可包括:
员工基本信息表(PersonInfo)、员工工种情况表(Department)、员工考勤情况表(Attendance)、员工缺勤情况表(Absent)、员工加班情况表(Duty)、部门表(Dept)、工资表(PersonPay)。
(2) 动态数据
动态数据包括程序运行时输入和输出的数据,具体是数据库的各个表的各个不同元组与属性值.
(3) 数据库描述
根据上面的分析就可以设计出能够满足用户需求的各种数据实体,以及它们之间的关系,为后面的逻辑结构设计打下基础,这些实体包括各种具体信息,通过相互之间的作用形成数据的流动。
概念型数学模型是一种面向问题的数学模型,是按用户的观点来对数据和信息建模。
最常用的表示概念数据模型的方法是实体——联系方法(Entity——RelationshipApproach)。
这种方法用E—R图描述现实世界中的实体,而不涉及这些实体在系统中的实现方法,该方法又称E—R模型。
E—R图中共有三种符号:
实体、属性和联系。
通常实体用矩形来表示,属性用椭圆或圆角矩形来表示,联系用菱形来表示[4]。
联系又分为一对一、一对多和多对多三种类型。
3.2.2 数据库建模
经过上面的分析,能够提取出以下几个实体:
员工、工种、考勤情况、月工资等。
它
们的实体图如图3.1至3.2所示。
图3.1 员工信息实体图
图3.2 工种实体图
3.2.3 关系描述的设计
根据以上各实体图和考勤管理系统的E—R图,经过转换,可以得出各个关系。
其转换规则为:
首先每个实体应转化为一个关系,有属性的联系也应转化为一个关系,然后需要给出每个关系的关键字。
根据以上规则,直接给出所有关系。
员工基本信息(PersonInfo),见表3.1。
表3.1 员工基本信息
员工编号
员工姓名
性别
所在部门
所属工种
工种编号
PersonID
PersonName
PersonSex
Dept
Job
DeptNO
部门信息(Department),见表3.2。
表3.2 部门信息
工种编号
所在部门
工种名称
基本工资
DeptNO
Dept
Job
Pay
员工考勤情况(Attendance),见表3.3。
表3.3 员工考勤信息
员工编号
员工姓名
执勤天数
加班天数
缺勤天数
所在月份
PersonID
PersonName
AtDays
DutyDays
AbDays
AtMonth
员工缺勤情况(Absent),见表3.4。
表3.4 员工缺勤情况
员工编号
员工姓名
缺勤天数
请假类型
所在月份
备注
扣除工资
PersonID
PersonName
AbDays
AbReason
AbMonth
AbRemarks
AbPay
员工加班情况(Duty),见表3.5。
表3.5 员工加班情况
员工编号
员工姓名
加班天数
所在月份
加班工资
PersonID
PersonName
DutyDays
DuMonth
DutyPay
员工工资信息(PersonPay),见表3.6。
表3.6 员工工资信息
员工编号
员工姓名
工种
编号
基本工资
加班
工资
扣除
工资
总工资
月份
PersonID
PersonName
DutyNO
BasePay
DutyPay
AbPay
SumPay
PMonth
在得出以上关系后,根据关系数据库的理论要求,需要对所有关系进行关系规范化,至少要求各个关系达到第三范式的要求,按照第三范式的要求对比以上各个关系,在所有关系中都不存在非主属性对关键字的部分依赖,即满足第三范式。
4 系统设计
4.1 Access2007数据库的建立
为了在操作过程中使用数据的方便,选用Access作为数据库,启动Access建立一个空白的数据库:
(1) 打开Access2007,点击【空白数据库】,为数据库命名Attendance,选择好存储路径,单击创建,如图4.1所示。
图4.1 数据库创建图
(2) 在工资数据库中创建部门信息表,月工资表,管理员,考勤记录,员工信息表等表,如图4.2所示。
图4.2 考勤数据库图
4.2 数据库连接
首先,需要在stdafx.h中添加如下代码:
#import"C:
\ProgramFiles\CommonFiles\System\ado\msado15.dll"no_namespacerename("EOF","adoEOF")
然后,在CAttendanceApp中的InitInstance函数下添加如下代码:
AfxOleInit();
HRESULThr;
m_pConnection.CreateInstance(__uuidof(Connection));
try
{
m_pConnection->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Attendance.mdb";
m_pConnection->ConnectionTimeout=10;
hr=m_pConnection->Open("","","",adModeUnknown);
if(hr!
=S_OK)
AfxMessageBox("无法连接到数据库,请确定数据库路径正确!
");
}
catch(_com_errore)
{
CStringerrormessage;
errormessage.Format("连接数据库失败!
\r\n错误信息:
%d",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
}
利用externCAttendanceApptheApp;在所有的操作页面类中声明一个外部的对象,就可以对数据库进行操作了。
4.3 数据库操作
要对数据库进行操作,首先需要声明一个数据集,以便用它操作,例如:
_RecordsetPtrm_pRecPer;
m_pRecPer.CreateInstance(__uuidof(Recordset));///进行实例化…
打开指定记录集:
try
{
m_pRecPer->Open("select*fromPersonInfo",_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_errore)
{
CStringstr;
str.Format("数据库打开失败!
\r\n错误信息:
%s",e.ErrorMessage);
AfxMessageBox(str);
}
向表中添加信息(打开记录集方法同上,更换所需要的SQL语句即可):
m_pRecPer->AddNew();
m_pRecPer->PutCollect("PersonID",(_variant_t)(dlg.m_strNO));
m_pRecPer->PutCollect("PersonName",(_variant_t)(dlg.m_strName));
m_pRecPer->PutCollect("PersonSex",(_variant_t)(strSex));
m_pRecPer->PutCollect("Dept",(_variant_t)(dlg.m_strDept));
m_pRecPer->PutCollect("Job",(_variant_t)(dlg.m_strJob));
m_pRecPer->Update();
m_pRecPer->Close();
修改表中信息:
m_pRecPer->PutCollect("PersonID",(_variant_t)(dlg.m_strNO));
m_pRecPer->PutCollect("PersonName",(_variant_t)(dlg.m_strName));
m_pRecPer->PutCollect("PersonSex",(_variant_t)(strSex));
m_pRecPer->PutCollect("Dept",(_variant_t)(dlg.m_strDept));
m_pRecPer->PutCollect("Job",(_variant_t)(dlg.m_strJob));
m_pRecPer->Update();
m_pRecPer->Close();
删除选中信息:
m_pRecPer->Delete(adAffectCurrent);
m_pRecPer->Update();
m_pRecPer->Close();
4.4 各个模块的设计与实现
(1) 登陆模块
系统登录模块用于验证用户登录系统时输入的用户名,密码是否正确,只有合法的用户才可以进入系统。
为了实现此功能,需要在数据库中加入表Login,表内容见表4.1:
表4.1 Login表内容
字段名称
数据类型
必填字段
相关属性
备注
ID
自动编号
是
——
主键
userName
文本
否
字段大小=12
用户名
userPassword
文本
否
字段大小=16
密码
实现验证用户名,密码功能的代码如下:
CStringstrName;
strName.Format("selectuserPasswordfromLoginwhereuserName='%s'",m_strName);
BSTRbstrSql=strName.AllocSysString();
try
{
m_pRecordset->Open(bstrSql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
}
catch(_com_errore)
{
CStringstrOpen;
strOpen.Format("数据库打开失败!
\r\n错误信息:
%d",e.ErrorMessage);
AfxMessageBox(strOpen);
}
if(!
m_pRecordset->adoEOF)
{
if(m_strPass==(_bstr_t)m_pRecordset->GetCollect("userPassword"))
CDialog:
:
OnOK();
else
AfxMessageBox("密码不正确!
");
}
else
AfxMessageBox("该用户不存在!
");
该系统还实现了注册新用户的功能,在系统菜单下有注册新用户选项卡,点击注册新用户,即可注册新用户,如图4.3
图4.3 新用户注册
点击后弹出注册窗口,实现注册新用户代码如下:
CStringstr;
str.Format("select*fromLoginwhereuserName='%s'",m_strName);
BSTRbstrSql=str.AllocSysString();
try
{m_pRecordset->Open(bstrSql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenDynamic,adLockOptimistic,adCmdText);
}
catch(_com_errore)
{
AfxMessageBox(e.ErrorMessage());
}
if(m_pRecordset->adoEOF)
{
try
{
m_pRecordset->AddNew();
m_pRecordset->PutCollect("userName",(_variant_t)(m_strName));
m_pRecordset->PutCollect("userPassword",(_variant_t)(m_strPass));
m_pRecordset->Update();
}
catch(_com_errore)
{
AfxMessageBox(e.ErrorMessage());
}
AfxMessageBox("新用户注册成功!
");
CDialog:
:
OnOK();
}
else
AfxMessageBox("该用户名已存在!
");
新用户注册成功后会提示“新用户注册成功!
”,可以利用重新登录来检测是否注册成功。
(2) 员工信息模块
员工信息模块可以显示员工基本信息,并可以增加新的员工信息并对需要修改或删除的员工信息加以修改、删除,在删除的同时还需要把其他表单中相应的员工记录删除。
点击数据选择菜单下的员工信息,就可以弹出员