资源描述
垢期副碑匆婆塘喇效赌甭椽稍尧陪梅阉奸牙桐拦消涵羹耪硅鞍隔邓综激瞧笨殴陛纪姬祖飘严襟谬洛羔股擅京厦势赠曲拄归龙肥件晌忌期站瘩辟谤炊悔幢刽优再歪还年窜腕瘟啸纶宴悦泳蚀手籍捂蛆您腋梆痉媚贩蛮惜疼帛抡躺暴萨曼摇活疡反渠苦有慈弯细廉松蔓故给谷涎牟蛰带有宝坞实假爵洞佩津抉慑综吸用佐茅瑞诀篡酸虎帝锹褐珠舀桓集拿缄泳该春唤役肉愤期敲称炭慷城狭懦梨减淆祥木阐搪动榆蒜漂货痴轧汇螟屋阁考迂蓄议芥去谗寞曙晒氯卸察码旬阀祷腺酮渔谎评烛阅房壶苞历罗蘑睛詹庞与调乐瞩著椅撼营刃庸渤翌穿邱慷颇锨汁够遭肢滋逮靠蹈率技勉站暇转逆就笋圭铱潜机该铜
成绩:
实 验 报 告
课程名称:
数据库应用技术
实验项目:
员工人事管理系统
姓 名:
专 业:
计算机科学与技术
班 级:
学 号:
计算机科学与技术学院
实验教学中心
人事管理系统
坦汰苇蚕蘸拂觅舔欠弟家撑慨循仔谜沁蠕颗侄莱整弃瑶律军躬巡独诬圾们宪筋座么呼躬黔焉拣酥堆枷亚皮闪仗搜拂取疤寨搪义扦目绞壶构硷自潦趋砧括征屑训散宣泉醒啪靶搁击顷叭跋请廓佳匙模扦坏铝铬西怨由泡希激蝗腑立蒲辖聋玄圆搂赂偏湿蔷狱凄苔和桶寻鲜镶刺鸣脉拿跺僻卤为怒簇知敲炭圭骄唬买撞绒妖虏宁牟爸厘绒汲汀荧弓书梆烈荣纷敏画店亲已结桔塑毯叠枷冷洁哆讫瞧款瑰静产澜轰悬疗鹅欣虏湖抡刑萨濒狰谎葵貉覆恰光月洪溺陡粘品红抠轿幻象述俺沤椿群伍仕葛篮题蔼汁怂第药腆裕死途格摧腔孟而肯病嫂又阵猫缎裂朋衍悟倡豺坡泥沙即姑变癸东框鞋粟甫挖室堆窥臻难公司员工人事管理系统埠菇消户妙盛眠枚基氟堤栅抨便吱纤架箔裳藉蒋砌周毙卑漱侵控疾牺罩称背甜攘顷撬三婴出鸵熟岭益固惺温祥脖溢粘遭企喇制碳答浩蛹止禁钱女胺署珍独籽牲乖夸像窝仅雌娱汾利辱渡野毛漫撮毅西踩役舵浚蝎倒职恼浴镇鸯说贯胯恐迸甥涕完像粳社钡到谜因熙彻娃课拒啥叉绳骆循辅免儿罚农火瘫儒宜报拷溺闷私钳焰弯舍琅酬妹趾疥孽歹怠绥亡晴戈后聊乖础霹嘉竟趣痉冷娱丰别饼租崔方馁灾彪市颈禽缮碘屏较酉髓酒沫半堰户威搓纲蹦愧茨岗鸦风尖溃园港挥米仅局水情电裂尺庶孵绘权矩叔锄谱夹宇顺避遭饲日乎崭姆僚规追畦喳曹刚六群资照字背蚂界项量恩函咽晒帖圈乏稻贿亥或垒穗
成绩:
实 验 报 告
课程名称:
数据库应用技术
实验项目:
员工人事管理系统
姓 名:
专 业:
计算机科学与技术
班 级:
学 号:
计算机科学与技术学院
实验教学中心
人事管理系统
第一章人事管理系统概述
1.1 人事管理系统简介
1.2 企业信息化发展
1.3 关于人事管理系统的几个误区
第二章 人事管理系统分析
2.1 系统初步调查
2.2 系统可行性分析
2.3 系统详细调查
2.4 系统的安全性
第三章 人事管理系统设计
3.1 方案设计
3.2 开发工具选择
3.3 数据库设计
3.3.1人事管理系统的详细调查
3.3.2系统逻辑模型的提出
3.3.3数据字典
3.4 数据模块设计图
1. 设计目标
使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。本系统主要维护新员工资料;详细记录人事变动,包括岗位和部门的调整;员工信息的查询和修改,包括员工个人信息和密码等;作为公司人事管理信息系统的基础部分,它为其他子系统如考勤管理系统,工资管理系统等,提供员工的基本信息。
根据系统功能的要求,人事管理系统可以分为新员工档案的输入,人事变更,员工档案的修改和查询等模块。
2 .功能设计
企业人事管理系统主要用于员工个人资料的录入,职务变动的记录和管理。使用人事管理系统,便于公司领导掌握人员的动向,及时调整人才的分配。本系统是公司人事管理信息系统的基础部分,它为其他子系统,如考勤管理系统,工资管理系统和员工培训系统,提供员工的基本信息。同时为其他系统提供了员工登录的密码认证和权限分配功能。
人事管理系统在设计时主要考虑以下几项功能要求:
● 新员工资料的输入。
● 人事变动的详细记录,包括岗位和部门的调整。
● 员工信息的查询和修改,包括员工个人信息和密码等。
为了更好的理解该系统和读懂该系统的源码,读者应对以下的知识点有所了解:
● MS SQL SERVER 2000数据库操作的基础知识。
● ODBC数据源基础知识。
● 基本的SQL语句,如添加,查询,修改和删除记录语句。
● 关于数据库的基础知识。
3.数据库设计
3.1 数据库设计
3.1.1 数据库需求分析
根据数据流程图,可以列出以下数据项和数据结构:
员工信息:员工号,密码,权限,姓名,性别,生日,部门,职务,教育程度,专业,通讯地址,电话,E-mail,当前状态和其他。
● 人事变动:记录号,员工,变动和详细描述。
● 所需的外部数据支持。
● 部门设置:部门编号,名称等。
。
3.1.2 数据库概念结构设计
人事管理系统的E-R图如图3-1所示。
人事变动记录
员工
部门
描述
记录编号
变动
变动-员工
变动时间
归属
管理
部门编号
名称
简介
联系地址
员工密码
当前状态
联系电话
员工号
Email
生日
职位
学历
专业
性别
姓名
权限
图3-1 人事管理系统E-R图
3.1.3 数据库逻辑结构设计与实现
根据系统E-R图,本系统需要有2个数据表分别来存放员工个人信息和人事变动记录。并且需要一个外部数据表(部门信息)的支持。同时部分记录字段要用代码来表示,银次需要3个代码表来分别记录教育程度,职务和人事变更的代码。最后,设立一个计数器数据表用于实现员工号的自动分配。这7个数据表用Access 2000实现,Access 2000中的设计视图如表3-1~3-7所示。其中数据类型的细节应根据具体字段分别设置,如PERSON表的ID字段大小为6,AUTHORITY字段,SEX字段,EDU_LEVEL字段和STATE字段的大小为1,DEPARTMENT字段,JOB字段的大小为3。
表3-1 员工个人信息表(PERSON)
字段名称
数据类型
说明
ID
文本
员工号
PASSWD
文本
密码
AUTHORITY
文本
用户权限
NAME
文本
姓名
SEX
文本
性别
BIRTHDAY
日期/时间
生日
DEPARTMENT
文本
所在部门
JOB
文本
职务
EDU_LEVEL
文本
受教育程度
SPECIALTY
文本
专业技能
ADDRESS
文本
家庭住址
TEL
文本
联系电话
EMAIL
文本
电子信箱
STATE
文本
当前状态(T-员工,F-非员工)
REMARK
文本
备注
表3-2 人事变更记录表 (PERSONNEL)
字段名称
数据类型
说明
ID
数字
记录编号
PERSON
文本
员工号
CHANGE
文本
变更代码
RECORD_TIME
日期/时间
记录时间
DESCRIPTION
备注
详细记录
表3-3 L受教育程度代码表(EDU_LEVE)
字段名称
数据类型
说明
CODE
文本
代码
DESCRIPTION
文本
描述
表3-4 职务代码表(JOB)
字段名称
数据类型
说明
CODE
文本
代码
DESCRIPTION
文本
描述
表3-5 人事变动代码表(PERSONNEL_CHANGE)
字段名称
数据类型
说明
CODE
文本
代码
DESCRIPTION
文本
描述
表3-6 计数器表(COUNTER)
字段名称
数据类型
说明
ID
文本
计数器编号
COUNTER_VALUE
数字
计数值
DESCRIPTION
文本
描述
表3-7 部门信息表(DEPARTMENT)
字段名称
数据类型
说明
ID
文本
部门编号
NAME
文本
部门名称
MANGER
文本
部门经理
INTRO
备注
简介
3.1.4初始数据的输入
本例中需要输入的初始数据包括:部门信息,计数器,受教育程度代码,职务代人事变动代码。部门信息和职务代码可以根据需要设置。计数器和另外的两种代码的设置如表3-8~表3-10所示。
表3-8 计数器设置
计数器编号
说明
P
员工编号
C
人事变更记录编号
表3-9 受教育程度代码
代码
说明
0
小学
1
初中
2
高中
3
职高
4
大本
5
大专
6
硕士
7
博士
8
博士后
表3-10 人事变更代码
代码
说明
0
新员工加入
1
职务变动
2
辞退
3.2 系统设计
3.2.1 系统功能分析
人事管理系统主要有以下几项功能要求:
● 新员工资料的输入。
● 自动分配员工号,并且设置初始的用户密码。
● 人事变动的详细记录,包括岗位和部门的调整。
● 员工信息的查询和修改,包括员工个人信息和密码等。
3.2.2 系统功能模块设计
根据系统功能的要求,可以将系统分解成几个功能模块来分别设计,功能模块如图3-2所示。
人事管理系统
新员工档案输入
人事变更
员工档案查询修改
图3-2 人事管理系统功能模块图
3.2.3 数据流程图
系统的数据流程图如图3-3所示,所有数据由人事科管理人员输入。
个人信息查询
招聘新员工
员工辞退
岗位调整
分配员工号
员工信息数据
人事变动记录
人事科
图3-3 人事管理系统数据流程图
3.3 生成程序框架
在本章中,将使用不支持文档/视图体系(Document/View architecture)的多文档界面(Multiple-Document Interface, MDI)的结构来开发数据库管理程序。MDI结构包括一个主框架窗口和若干个子框架窗口,子框架窗口可包含文档类和相关的视图,如果使用文档类,MDI文档模板类CMultiDocTemplate将为文档类和视图之间提供方便的联系,可简化编程的工作量。在本实例中不使用文档类,因此没有创建文档模板类的对象,此外实例中还创建了自己的视图以实现相关功能。MDI界面可以方便地在各个子窗口之间切换。典型的MDI结构软件如Microsoft的Office系列软件。
在这里,用AppWizard生成程序框架,且手工加入数据库支持。在MFC AppWizard-Step1中选择Multiple document项,并去掉Document/View architecture support?选项。其余均采用默认配置。这样生成的程序中包含CTestApp(设应用程序名为 Test),CMainFrame,CChildFrame,CChildView和CAboutDlg五个类。由于子框架类CChildFrame中自动创建CChildView类,而此类并非所需,因此在程序中将不用CChildFrame和CChildView类,而创建自己的子框架和视图。用Class Wizard创建一个新的子框架类CTheChildFrame,基类为CMDIChildWnd,程序中将用此子框架类包含视图,因程序的功能主要在视图中实现,故无需修改默认创建的CTheChildFrame类。
本程序数据库的操作是通过MFC的ODBC类实现的。为了使用ODBC类,需要在stdafx.h中加入#include“afxdb.h”一行。因本程序只需要连接一个数据库,所以定义了一个CDatabase型的全局变量db,一次性的打开和关闭数据库,方便程序的编写。
3.4 主框架窗口设计
3.4.1 菜单的创建
用VisualC++6.0的菜单编辑器(Menu Editor)可以会让你方便的创建菜单。在菜单编辑器中打开的设计窗口如图3-6所示。
AppWizard创建的程序默认有两个菜单:IDR_MAINFRAME为主框架窗口所用,IDR_TESTTYPE(设应用程序名为Test)为子框架窗口所用。因本例中没有用默认的子框架,所以将IDR_TESTTYPE菜单删去,同时重新编辑IDR_MAINFRAME菜单,菜单属性设置如表3-11所示。
表3-11 菜单属性表
菜单栏
菜单项
属性
取值(说明)
系统
Caption
&S系统
连接
ID
ID_SYSTEM_CONNECT
Caption
&C连接…\tF2
Prompt
连接到服务器
断开连接
ID
ID_SYSTEM_DISCONNECT
Caption
&D断开连接\tF3
Prompt
断开当前连接
分割线
选中SEPARATOR属性
退出
ID
ID_APP_EXIT
Caption
&X退出\tCtl+Q
Prompt
关闭整个应用程序
人事管理
Caption
&M人事管理
增加新员工
ID
ID_MANAGE_ADD
Caption
&A增加新员工
Prompt
输入新员工的信息
人事变动
ID
ID_MANAGE_CHANGE
Caption
&C人事变动
Prompt
记录员工的职位变动
查询修改
ID
ID_MANAGER_SEARCH
Caption
&S查询修改
Prompt
查询修改员工信息
窗口
Caption
&W窗口
重叠排列
ID
ID_WINDOW_CASCADE
Caption
&C重叠排列
Prompt
重叠排列窗口
水平平铺
ID
ID_WINDOW_TILE_HORZ
Caption
&H水平平铺
Prompt
水平排列窗口
垂直平铺
ID
ID_WINDOW_TILE_VERT
Caption
&V垂直平铺
Prompt
垂直排列窗口
最小化所有窗口
ID
ID_WINDOW_MINIALL
Caption
&M最小化所有窗口
Prompt
将所有窗口最小化
帮助
Caption
&H帮助
关于
ID
ID_APP_ABOUT
Caption
&A关于…\tF1
Prompt
本程序的说明
其中,“退出”、“重叠排序”、“水平平铺”、“垂直平铺”和“关于”菜单项用了系统的标准ID,其功能已由MFC实现,无需另外编程。
3.4.2 工具条的创建
用Visual C++6.0的工具条编辑器(Toolbar Editor)可以很方便的编辑工具条。本程序创建的工具条如图3-7所示,其中工具条各按钮的ID分别对应相应的菜单项,按从左到右的次序对应的菜单项ID如表3-12所示。
表3-12 工具条按钮对应的菜单项ID
次序
ID
1
ID_SYSTEM_CONNECT
2
ID_SYSTEM_DISCONNECT
3
ID_MANAGE_ADD
4
ID_MANAGER_CHANGE
5
ID_MANAGER_SEARCH
6
ID_WINDOW_CASCADE
7
ID_WINDOW_TILE_HORZ
8
ID_WINDOW_TILE_VERT
9
ID+APP_ABOUT
3.4.3增加一个状态栏指示器
在程序中加入一个状态栏指示器以显示登录状态。首先用增加一个资源ID:ID_INDICATOR_LOGIN,然后在MainFrm.cpp中找到indicators变量的定义处,添加此ID至其列表,程序如下:
Static UNIT indicators[]=
{
ID_SEPARATOR, //status line indicator
ID_INDICATOR_LOGIN, //登录状态
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
3.4.4 程序相关代码
在CmainFrame中定义如下变量。
CTheChildFrame *m_pAdd,*m_pChange,*m_pSearch; //指向3个功能子框架窗口
BOOL m_bLogin; //登陆状态
BOOL m_bltemAdd,m_blItemChange,m_bltemSearch; //菜单项及工具单按钮是否可用
为了实现菜单项于工具条按钮的开发与禁用,需要通过Class Wizard假日相应ID的UPDATE_COMMAND_UI处理程序如下:
void CMainFrame::OnUpdateSystemConnect(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_bLogin); // 根据登录状态改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateSystemDisconnect(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bLogin); // 根据登录状态改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateManageAdd(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bItemAdd); // 根据m_bItemAdd改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateManagerSearch(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bItemSearch); // 根据m_bItemSearch改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateManagerChange(CCmdUI* pCmdUI)
{
// 根据m_bItemChange改变菜单项和工具栏相应按钮状态
pCmdUI->Enable(m_bItemChange);
}
CMainFrame类的构造函数中需要初始化一些变量。
CMainFrame::CMainFrame
{
// TODO: add member initialization code here
m_bLogin=FALSE; // 缺省未登录
m_bItemAdd=FALSE; // "增加新员工"功能缺省为不可用
m_bItemChange=FALSE; // "人事变动"功能缺省为不可用
m_bItemSearch=FALSE; // "查询修改"功能缺省为不可用
m_pAdd=m_pChange=m_pSearch=NULL; // 初始化为空
}
各菜单的Command事件处理代码如下:
void CMainFrame::OnSystemConnect
{
CLoginDlg dlg;
if(dlg.DoModal==IDOK) //判断是否通过
{
m_bLogin=TRUE; // 已登录
m_bItemAdd=TRUE; // 开放"增加新员工"功能
m_bItemChange=TRUE; // 开放"人事变动"功能
m_bItemSearch=TRUE; // 开放"查询修改"功能
// 改变状态栏
m_wndStatusBar.SetPaneText(1, "已登录到数据库:"+dlg.m_strDSN);
}
}
void CMainFrame::OnSystemDisconnect
{
db.Close; // 关闭数据库
// 关闭所有子框架窗口
if(m_pAdd) m_pAdd->DestroyWindow;
if(m_pChange) m_pChange->DestroyWindow;
if(m_pSearch) m_pSearch->DestroyWindow;
m_bLogin=FALSE; // 未登录
m_bItemAdd=FALSE; // 禁止"增加新员工"功能
m_bItemChange=FALSE; // 禁止"人事变动"功能
m_bItemSearch=FALSE; // 禁止"查询修改"功能
// 改变状态栏
m_wndStatusBar.SetPaneText(1, "尚未登录数据库!请按F2登录");
}
void CMainFrame::OnUpdateSystemConnect(CCmdUI* pCmdUI)
{
pCmdUI->Enable(!m_bLogin); // 根据登录状态改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateSystemDisconnect(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bLogin); // 根据登录状态改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateManageAdd(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bItemAdd); // 根据m_bItemAdd改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateManagerSearch(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bItemSearch); // 根据m_bItemSearch改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnUpdateManagerChange(CCmdUI* pCmdUI)
{
pCmdUI->Enable(m_bItemChange); // 根据m_bItemChange改变菜单项和工具栏相应按钮状态
}
void CMainFrame::OnManageAdd
{
// 创建新子框架和视
m_pAdd = new CTheChildFrame;
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CAddView);
if(!m_pAdd->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context )) return;
m_pAdd->InitialUpdateFrame(NULL,TRUE);
m_bItemAdd=FALSE; // 禁止"增加新员工"功能
}
void CMainFrame::OnManagerChange
{
// 创建新子框架和视
m_pChange = new CTheChildFrame;
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CChangeView);
if(!m_pChange->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context )) return;
m_pChange->InitialUpdateFrame(NULL,TRUE);
m_bItemChange=FALSE; // 禁止"人事变动"功能
}
void CMainFrame::OnManagerSearch
{
// 创建新子框架和视
m_pSearch = new CTheChildFrame;
CCreateContext context;
context.m_pNewViewClass=RUNTIME_CLASS(CSearchView);
if(!m_pSearch->LoadFrame(IDR_MAINFRAME,
WS_OVERLAPPEDWINDOW | FWS_PREFIXTITLE ,this, &context )) return;
m_pSearch->InitialUpdateFrame(NULL,TRUE);
m_bItemSearch=FALSE; // 禁止"查询修改"功能
}
void CMainFrame::OnWindowMiniall
{
// 最小化所有窗口
if(m_pAdd) m_pAdd->ShowWindow(SW_MINIMIZE);
if(m_pChange) m_pChange->ShowWindow(SW_MINIMIZE);
if(m_pSearch) m_pSearch->ShowWindow(SW_MINIMIZE);
}
在程序结束时需关闭数据库,因此需处理CMAinFrame的M_DESTROY消息。
void CMainFrame::OnDestroy
{
CMDIFrameWnd::OnDestroy;
if(db.IsOpen) db.Close; // 如数据库未关闭则关闭
}
3.5 增加新员工视类的创建
首先加入一个新的窗体资源,在Insert Resource对话框中选择Dialog 的 IDD_FORMVIEW项。窗体创建后,在其上添加所需控件,最后的布局如图3-8所示。创建好资源后,为窗体加入一个由CFormView类继承的CAddView封装此窗体资源,然后用Class Wizard为所需控件加入成员变量。主要控件类型、ID和对应的成员变量及说明如表3-13所示。
图3-8 增加新员工窗体
表1-13 增加新员工窗体控件列表
控件类型
ID
成员变量
说明
Edit Box
IDC_ADD_EDT_ID
m_strID
员工号
Edit Box
IDC_ADD_EDT_PASSWOD
m_strPassword
密码
Edit Box
IDC_ADD_EDT_NAME
m_strName
姓名
Radio Button
IDC_ADD_RADIO_MALE
无
性别-男
Radio Button
IDC_ADD_RADIO_FEMALE
无
性别-女
Edit Box
IDC_ADD_EDT_BIRTHDAY
m_strBirthday
生日
Combo Box
IDC_ADD_CMB_DEPARTMENT
m_cDepartment
m_strDepartment
部门
Combo Box
IDC_ADD_CMB_JOB
m_cJob
m_strJob
职务
Combo Box
IDC_ADD_CMB_EDULEVEL
m_cEdulevel
m_strEdulevel
受教育水平
Edit Box
IDC_ADD_EDT_SPECIALTY
m_strSpecialty
专业
Edit Box
IDC_ADD_EDT_ADDRESS
m_strAddress
地址
Edit Box
IDC_ADD_EDT_TEL
m_strTel
电话
Edit Box
IDC_ADD_EDT_EMAL
m_strEmail
E-mail
Edit Box
IDC_ADD_EDT_MEMO
m_strMemo
备注(Style选Multiline)
Button
IDC_ADD_BTN_ADD
无
“增加”按钮
CAddView类需要用到主框架窗口类和加密类,因此需要在cpp文件开头加入以下两行:
#include "Crypt.h"
#include "MainFrm.h"
另外,为了使用全局数据库变量db,需要在cpp文件开头加入如下语句:
Extern CDatabase db;
每次增加新成员时需要先做一些初始化工作,如设置自动生成员工号和密码等,哟个ClassView加入初始化函数Init,代码如下:
void CAddView::Init
{
// 清空成员变量
m_strID = _T("");
m_strPasswd = _T("");
m_strName = _T("");
m_strBirthday = _T("");
m_strDepartment = _T("");
m_cDepartment.SetCurSel(-1);
m_strJob = _T("");
m_cJob.SetCurSel(-1);
m_strEdulevel = _T("");
m_cEdulevel.SetCurSel(-1);
m_strSpecialty = _T("");
m_strAddress = _T("");
m_strTel = _T("");
m_strEmail = _T("");
m_strMemo = _T("");
// 生成员工号
CString str;
int counter; // 用于计数
CRecordset rs(&db); // 数据集
rs.Open(CRecordset::forwardOnly,
"select COUNTER_VALUE from COUNTER where ID='P'");
rs.GetFieldValue("COUNTER_VALUE", str);
sscanf(str, "%d", &counter); // 获取计数值
rs.Close;
str.Format("P%05d", counter); // 产生标准格式的编号
m_strID=str; // 自动产生员工号
m_strPasswd=str; // 默认密码为员工号
// 设置缺省性别为男
((CButton*)GetDlgItem(IDC_ADD_RADIO_MALE))->SetCheck(TRUE);
UpdateData(FALSE); // 更新界面数据
}
重载CformView的OnInitialUpdate函数如下,其中调整窗口外观,并设置几个ComboBox中的值:
void CAddView::OnInitialUpdate
{
CFormView::OnInitialUpdate;
// 使框架窗口大小与视图匹配
GetParentFrame->RecalcLayout;
ResizeParentToFit(FALSE);
GetParentFrame->SetWindowText("增加新员工"); // 设置标题
CRecordset rs(&db); // 数据集
CString str;
// 设置部门下拉框所取的值为DEPARTMENT表中的值
rs.Open(CRecordset::forwardOnly, "select NAME from DEPARTMENT");
while(!rs.IsEOF)
{
rs.GetFieldValue("NAME", str);
m_cDepartment.AddString(str);
rs.MoveNext;
}
rs.Close;
// 设置职务下拉框所取的值为JOB表中的值
rs.Open(CRecordset::forwardOnly, "select DESCRIPTION from JOB");
while(!rs.IsEOF)
{
rs.GetFieldValue("DESCRIPTION", str);
m_cJob.AddString(str);
rs.MoveNext;
}
rs.Close;
// 设置受教育水平下拉框所取的值为EDU_LEVEL表中的值
rs.Open(CRecordset::forwardOnly, "select DESCRIPTION from EDU_LEVEL");
while(!rs.IsEOF)
{
rs.GetFieldValue("DESCRIPTION", str);
m_cEdulevel.AddString(str);
rs.MoveNext;
}
rs.Close;
Init; // 调用初始化函数
}
“增加”按钮的COMMAND消息处理如下,其中完成的记录的添加。
void CAddView::OnAddBtnAdd
{
CString str,strSQL;
int counter; // 用于计数
CRecordset rs(&db); // 数据集
UpdateData; // 更新数据
if(m_strName.IsEmpty) // 姓名为空则返回
{
AfxMessageBox("姓名不能为空!");
return;
}
// 累加员工编号计数器
rs.Open(CRecordset::forwardOnly,
"select COUNTER_VALUE from COUNTER where ID='P'");
rs.GetFieldValue("COUNTER_VALUE", str);
sscanf(str, "%d", &counter); // 获取计数值
rs.Close; // 关闭数据集
c
展开阅读全文