第一章 引言
1.1设计开发的意义
传统意义上的职工考勤管理都是采用原始的手工操作来完成的。人事部的管理人员或办公室人员要进行经常的繁琐的记录、修改、查询、统计等工作,不仅时间长、劳动强度大、工作效率低下,并且在这种管理模式下对职工的考勤信息不全且易造成混乱。
随着社会的进步,计算机科技的广泛应用,通过现代化的科学的方式对职工考勤信息进行管理已成为可能。基于此,我希望能通过开发这一管理系统,由计算机代替人工操作一系列职工基本信息的输入、修改、查询、统计等操作,既减轻了管理人员的工作强度,提高了工作效率,降低解企业的经营成本;同时,也对企业内部管理的科学化、规范化作出一点尝试。
1.2任务及目标
项目的提出者:天津理工大学计算机与通信工程学院课题开发组。 开发单位:08中加3-4班项目小组。
充分了解用户的需求,了解工作的流程,以及可能出现的问题。职工考勤信息管理系统中首先必须设置好职工基本信息,职工基本信息在本系统占据着很重要的地位。在对职工的出差、出勤、加班、请假这些信息管理的时候都需通过职工基本信息进行操作。本系统结合实际的职工考勤管理制度,经过实际的需求分析,采用功能强大的Visual Basic6.0作为开发工具而开发出来的职工考勤信息管理系统。职工考勤管理信息系统的具体功能包括:职工基本信息实体,职工出勤信息实体,管理员管理系统信息实体。
主要功能:管理员功能:签到,增加职工及职工信息,增加登录用户,设置用户权限,查看职工出勤信息,修改职工出勤信息。 签到用户功能:签到。
灵活性:本软件对变更的适应性较强,采用人工手动输入与系统自动输入相结合的形式,数据库文件可以单独转移到其他地方使用,可以保证数据的安全和高兼容性,当系统改变时可以自动调整精度与安全性
1.3开发环境
操作系统:windows 7
编译环境:使用Visual Studio 2010来进行系统汇编
使用Access 2007进行数据库管理
1
数据库课程设计说明书
第二章 系统分析与设计
2.1系统需求分析
2.1.1 处理需求
根据职工签到特性,设计了以下功能:
管理员功能:签到,增加职工及职工信息,增加登录用户,设置用户权限,查看职工出勤信息,修改职工出勤信息。
用户功能:职工签到。
一些基本的功能通常是必须具备的,如用户的管理与维护,基本数据的维护,灵活的信息查询等。
2.1.2信息需求
本系统需要的信息:
签到用户信息:职工姓名,职工编号等。
2.2数据库概念结构设计
职工信息表
签到表 职工 职工姓名 职工编号
签到状况 签到信息 签到职工 签到时间 管理员:
职工编号 2
数据库课程设计说明书
登录名 登录名 管理员 密码
2.3数据库逻辑结构设计
2.4数据库创建
签到信息表
3
数据库课程设计说明书
签到时间设置表
签到职工信息表
管理员信息表
2.5系统结构设计
2.5.1 功能图
2.5.2 模块图
职工信息E-R图
4
数据库课程设计说明书
职工签到表E-R图
管理员E-R图
第三章 系统开发及实现
3.1论述设计开发采用的技术及设计效果
5
数据库课程设计说明书
3.1.1登陆界面 实现用户输入用户名密码,当输入完成后,连接数据库查看数据库中管理
员表中的数据,当正确的时候返回登录成功。
实现代码
CSingleDocTemplate* pDocTemplate; pDocTemplate = new CSingleDocTemplate(
CdlgLogOn dlg; int ret = dlg.DoModal(); if (ret == IDSUPER) { }
if (ret == IDCHECK){
}
isSuper = FALSE; isSuper = TRUE; IDR_MAINFRAME,
RUNTIME_CLASS(CCheckInDoc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CCheckInView));
AddDocTemplate(pDocTemplate);
3.1.2签到用户 实当以签到用户登录,则不能进行查询/修改、系统维护。
6
数据库课程设计说明书
职工签到界面
输入正确职工编码,提示签到成功
输入错误时提示不正确,重新输入
3.1.3管理员用户 增加职工,管理出勤,增加登录用户等功能
7
数据库课程设计说明书
增加、删除、修改职工信息
当职工编号存在,提示已经存在
实现代码
CUserRecordset rsUser;
if (rsUser.IsRepeatUser(this->m_strUserName)){ } else { }
pEditName->SetWindowText(\"\");
8
MessageBox(\"此用户已经存在!\提示\
CString strAuthority;
this->m_AuthorityCombo.GetWindowText(strAuthority);
if (rsUser.AddUser(this->m_strUserName,this->m_strPass1,strAuthority)){ } else
MessageBox(\"增加失败!\提示\MessageBox(\"增加成功!\提示his->UpdateUserListBox();
数据库课程设计说明书
pEditPass->SetWindowText(\"\"); pEditName->SetFocus(); }
当删除员工时,同时删除签到记录 实现代码
void CCheckRecordset::DeleteEmpCheck(CString EmployId){ } }
增加登录用户(设置用户权限)
if (!IsOpen())
Open(CRecordset::dynaset,_T(\"select * from tbCheckIn where EmployeeID
='\"+EmployId+\"'\"));
if(!IsBOF()){ }
MoveFirst(); while(!IsEOF()){ this->Delete(); MoveNext();
实现代码
void CdlgUser::OnButtonAdd() {
CEdit *pEditName = (CEdit*)this->GetDlgItem(IDC_EDIT_USERNAME); CEdit *pEditPass = (CEdit*)this->GetDlgItem(IDC_EDIT_PASSWORD1);
UpdateData(true);
if (this->m_strUserName == \"\"){
MessageBox(\"必须输入用户名!\提示\pEditName->SetFocus();
9
数据库课程设计说明书
return; }
if (this->m_AuthorityCombo.GetCurSel() == CB_ERR ){
MessageBox(\"必须选择用户权限!\提示\
MB_ICONINFORMATION|MB_OK);
pEditName->SetFocus(); return; }
CUserRecordset rsUser;
if (rsUser.IsRepeatUser(this->m_strUserName)){ } else { }
pEditName->SetWindowText(\"\"); pEditPass->SetWindowText(\"\"); pEditName->SetFocus(); }
void CdlgUser::OnSelchangeListUser() {
int iSel = this->m_ListBox.GetCurSel(); if (iSel!=0){ } }
10
MessageBox(\"此用户已经存在!\提示\
CString strAuthority;
this->m_AuthorityCombo.GetWindowText(strAuthority);
if (rsUser.AddUser(this->m_strUserName,this->m_strPass1,strAuthority)){ } else
MessageBox(\"增加失败!\提示\MessageBox(\"增加成功!\提示his->UpdateUserListBox();
CButton *pDelBtn = (CButton*)this->GetDlgItem(IDC_BUTTON_DELETE); pDelBtn->EnableWindow(true);
数据库课程设计说明书
void CdlgUser::OnButtonDelete() {
int iSel = this->m_ListBox.GetCurSel(); if (iSel == LB_ERR){ } else {
MessageBox(\"请选择要删除的用户!\提示\
MB_ICONINFORMATION|MB_OK);
if (MessageBox(\"真的要删除这个用户吗?(Y/N)\提示\
return;
CUserRecordset rsUser; CString strTmp;
else {
this->m_ListBox.GetText(iSel,strTmp); CString SelUserName; CString tmp; for(int i=0;;i++){ }
SelUserName = strTmp.Mid(0,i); BOOL bFind = FALSE; if (!rsUser.IsOpen()) } if (bFind) {
11
tmp = strTmp.Mid(i,1); if (tmp == \" \") break;
rsUser.Open(); rsUser.MoveFirst();
if (rsUser.m_UserName== SelUserName ){ }
bFind = TRUE; break;
if(!rsUser.IsBOF()) while(!rsUser.IsEOF()){
rsUser.MoveNext();
数据库课程设计说明书
} }
}
}
rsUser.Delete(); rsUser.Close();
this->m_ListBox.DeleteString(iSel);
else { }
MessageBox(\"找不到符合条件的用户!\提示\
MB_ICONINFORMATION|MB_OK);
设置上班时间及浮动时间
实现代码
void CdlgConfigSet::OnConfirm() {
CEdit *pHourEdit = (CEdit*)this->GetDlgItem(IDC_EDIT_HOUR); CEdit *pMinuteEdit = (CEdit*)this->GetDlgItem(IDC_EDIT_MINUTE); CEdit *pDeltaEdit = (CEdit*)this->GetDlgItem(IDC_EDIT_DELTA); this->UpdateData(true);
if ((m_iHour>24) || (m_iHour<0) || (m_iMinute >60) ||(m_iMinute< 0)){ }
CConfigRecordset rsConfig;
if (!(rsConfig.AddConfigToTable(this->m_iHour,this->m_iMinute,this->m_iDelta))){
12
MessageBox (\"设置不合法!\提示\pHourEdit->SetWindowText(\"\"); pMinuteEdit->SetWindowText(\"\"); pDeltaEdit->SetWindowText(\"\"); pHourEdit->SetFocus();
数据库课程设计说明书
}
MessageBox (\"设置失败!\提示\pHourEdit->SetWindowText(\"\"); pMinuteEdit->SetWindowText(\"\"); pDeltaEdit->SetWindowText(\"\"); pHourEdit->SetFocus();
else{ } }
查询职工出勤
CDialog::OnOK();
实现代码
void CdlgEditCheck::OnSee() {
if ((strY == \"\") && (strM == \"\")&&(strD == \"\")){
13
this->UpdateData(true);
CEdit *pEditYear,*pEditMonth,*pEditDay;
pEditYear = (CEdit*)this->GetDlgItem(IDC_EDIT_YEAR); pEditMonth = (CEdit*)this->GetDlgItem(IDC_EDIT_MONTH); pEditDay = (CEdit*)this->GetDlgItem(IDC_EDIT_DAY); CString strY,strM,strD;
pEditYear->GetWindowText(strY); pEditMonth->GetWindowText(strM); pEditDay->GetWindowText(strD);
数据库课程设计说明书
}
MessageBox(\"日期必须输入!\提示\ return;
char year[10],month[10],day[10]; sprintf(year,\"%d\sprintf(month,\"%d\sprintf(day,\"%d\if (this->m_strEmpId==\"\"){ }
CCheckRecordset rsCheck; CEmployeeRecordset rsEmployee; try{
if(rsCheck.IsOpen()){ }
rsCheck.Close();
MessageBox(\"必须输入员工号!\提示\return;
rsCheck.Open(CRecordset::dynaset,_T(\"select * from tbCheckIn where EmployeeID =
'\"+this->m_strEmpId+\"'\")); catch(CDBException &e){ } }
MessageBox(e.m_strError,\"提示\
BOOL CdlgEditCheck::OnInitDialog() { CDialog::OnInitDialog();
this->m_CheckList.AddString(\"员工号 员工姓名 签到时间 结果\"); return TRUE; }
修改职工出勤
14
数据库课程设计说明书
第四章 总结
这次课程设计学校安排了几周时间让我们完成,我们选择了职工考勤信息系统的课题,并从图书管借了数据库程序设计和C++设计的资料书,对课程设计中会遇到的问题提前做了些准备,并到网上也找相关的系统的代码看了下,对这个系统有了一定的全局观,完成了初步的需求分析。稍作细化后,便开始设计数据库。而后做了界面设计,完成了程序大部分的主要界面。
而在编码方面,我从系统的功能、规模和实用方面考虑,采用C++技术。在数据库设计时,细致的考虑到了用户的全部需求,并用了大量的时间进行了信息的收集建立了比较完善的信息表,编码阶段,在设计接近完成的时候,我对部分代码做了优化,将一些重复工作加以封装调节;将批处理操作改为以事务方式处理。
这次课程设计,我更加深入的了解到软件工程的复杂性,以及前期规划分析的重要性。而且如果系统再稍微大型一些,以一人之力也难以完成。以后的学习中应该学习一些先进的思想,并多加实践,从写程序和软件架构两个方面都增强自己的能力。
在编程中遇到了很多困难,通过不懈的努力,在网上查找资料,借阅资料,终于完成了!我发自内心的高兴。我赶到编程设计真的很辛苦,一个程序,哪怕只有一个小小的拼写错误,都不能成功运行,当写完程序测试时,心里都是在打鼓,怕出现错误,一次次的测试,一次次的更改,终于成功了!我感到十分的自豪!
通过这次的数据库课程,我学会了在制作程序时应仔细谨慎,因为细小的错误都会导致程序的失败。另外老师还教会了我们,在制作一个系统时,要有自己的思想,使自己制作的程序能锦上添花,做出属于自己的东西。我也会在以后的生活学习中尽量完善自己的工作,使自己做的更好!
15
数据库课程设计说明书
第五章 参考文献
《C++ Preimer》 中文版 第四版 人民邮电出版社
《Access数据库开发实例解析》 机械工业出版社 李俊民、高春燕等 《Visual C++工程应用与项目实践》 机械工业出版社 张雨、阮伟良等 《Visual C++ 从入门到精通》 第二版 清华大学出版社 《Visual C++ 管理信息系统完整项目实例剖析》
16
人民邮电出版社
因篇幅问题不能全部显示,请点此查看更多更全内容