用VC制作一个工资管理系统样本

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

案例四
用VC++制作一种工资管理系统
核心词: VC++数据库数据表控件绑定记录计算
4.1 课程设计目和意义
工资管理是任何企事业单位都需要进行一项工作, 因而, 开发制作工资管理系统具备较大社会现实意义, 同步工资管理系统最大特性是数据解决, 它是数据库应用系统典范, 它具备一切数据库应用系统特性, 如数据录入, 数据记录和数据报表等, 其系统构造与现实生活紧密结合, 详细直观。

工资管理系统也是数据库应用开发中经常进行例证好例子, 它开发应用简朴而又不失普通性。

作为一种案例, 咱们仍需要重复进行某些过程, 如创立工程框架, 引入数据源, 建立消息映射, 最后实现记录计算。

本程序比较简朴, 咱们目是让读者对VC编程逐渐加以理解, 它意义是非常重要。

4.2 系统功能设计
在本系统设计中, 将重要实现如下某些功能: 增长记录功能、修改记录功能、删除记录功能、刷新记录功能, 最后实现记录计算功能。

4.3 数据库与数据表设计
作为工资管理系统, 它是数据库应用系统数据解决典范, 数据库应用系统开发前提是一方面开发数据库和数据库中数据表。

因而在本案例中, 咱们仍采用Microsoft Access 创立数据库和数据表。

为此咱们先定义一种“职工工资数据表”构造, 如表4.1所示。

表4.1 “职工工资数据表”构造
创立数据库及其数据表环节如上:
(1)启动Microsoft Office 中Microsoft Access应用程序, 浮现图4.1所示界面, 通过该界面可以创立一种新数据库或打开一种已经存在数据库。

图4.1 新建数据库选取
(2)选取创立新数据库, 即选取“空Access数据库”选项。

(3)单击“拟定”按钮之后浮现保存对话框, 拟定保存数据库文献位置(D:\ VC++写作案例\CH4\)并给定数据库名称:工资管理数据库;然后浮现图4.2所示界面。

图4.2 数据库中数据表设计界面
在数据库设计界面中, 顾客可以打开已经存在数据表, 也可以创立新数据表。

(4)单击“设计”菜单, 即浮现一种数据表设计器, 顾客可以在其中设计一种新数据表构造, 如图4.3所示。

图4.3 数据表设计器
在Microsoft Access 数据库设计器中, 顾客可以定义数据表字段名称、字段类型、字段大小等数据表构造内容。

数据表构造一经拟定, 顾客可以打开该数据表, 在数据表中输入某些基本数据, 以在背面系统设计中体现设计效果。

最后, 系统自动将创立数据表保存在“D: \VC++写作案例\CH4\32资管理数据库”中, 将创立数据表命名为“职工工资数据表”。

注意, 在微软Microsoft Access各版本之间, 如在Microsoft Access 98与Microsoft Access 中, 采用旧版本创立数据库及其数据库中数据表如要在新版本中运用, 往往需要在新版本中进行转换才行。

4.4 创立工资管理系统基本框架
在前面咱们已经创立了“工资管理数据库”、“职工工资数据表”。

它可为应用程序提供一种数据源。

应用程序就是对该数据源记录进行访问、增长、删除以及数据管理一切操作。

有了这一切工作, 顾客就可以着手进行应用系统构建了。

与前面案例同样, 在VC++应用系统创立中, 需要通过向导先创立一种应用程序框架, 然后再加入数据控件, 与数据源进行绑定, 并进行程序修改与加工制作。

创立“工资管理系统”应用程序框架环节如下:
(1)结束数据库创立并启动VC++, 浮现VC++主控界面。

(2)在VC++主控界面中单击“文献|新建. . . ”菜单项, 浮现新建工程类型选取对话框, 在工程类型列表中选取MFC AppWizard(EXE)工程类型。

(3)输入工程名称为“工资管理系统”, 并选取Win32平台类型。

(4)单击“拟定”按钮, 进入文档类型设立。

(5)选取单文档类型, 即创立一种单文档界面应用程序, 设立资源使用语言为中文, 选取文档/查看体系构造支持。

(6)单击“下一步”按钮, 进入框架设立第2步, 浮现图4.4所示对话框。

在该对话框中, 需要顾客对数据库类型作某些有关选取。

图4.4 程序框架设立第2步
(7)选取“查看数据库不使用文献支持”;这时候Data Source按钮处在可用状态(或激活状态);在这一种选取下, VC+将为应用系统引入数据环境, 即数据源, 该数据源就是咱们在前面创立“工资数据库”, 而不使用其她类型数据文献支持。

但数据源在系统制作中引入需要用一定驱动程序为之进行。

(8)单击“Data Source”按钮, 浮现图4.5所示选取数据源类型对话框。

图4.5 数据源创立类型
注意, 在ODBC数据源文献列表中, 咱们已经创立了一种ODBC数据源文献, 因而可以在其中直接选取引用即可。

如果没有“工资管理数据库”这样文献, 则往往需要用操作系统控制面板中ODBC程序加以创立, 其办法参照案例一。

(9)单击OK按钮, 浮现数据源中数据表, 即工资数据库中数据表。

选取“职工工资数据表”, 如图4.6所示。

图4.6 选取职工工资数据表
(10)单击OK按钮选定该数据表。

然后返回到图4.4所示对话框, 完毕数据源创立工作。

(11)在图4.4所示对话框中单击“完毕”按钮, 即完毕应用程序框架生成工作, 浮现工程框架创立所有信息, 该信息将提示顾客所创立应用程序框架涉及内容, 如:应用系统名称、界面类型、适合操作系统、类文档创立和系统特色等, 如下所示:
Application type of 工资管理系统:
Single Document Interface Application targeting:
Win 32
Classes to be created:
Application: CMyApp in 工资管理系统.h and 工资管理系统.cpp
Frame: CMainFrame in MainFrm.h and MainFrm.cpp
Document: CMyDoc in 工资管理系统Doc.h and 工资管理系统Doc.Cpp
RecordView : CMyView in 工资管理系统View.h and 工资管理系统View.cpp
Recordset:CMyset.in 工资管理系统Set.h and 工资管理系统Set.cpp
(connected to table ‘[职工工资数据表]’ in data source ‘工资管理数据库’)
Features:
+ Initial toolbar in main frame
+ Initial status bar in main frame
+ Frinting and Print Preview support in view
+ 3D Controls
+ Uses shared DLL implementation (MFC42.DLL)
+ Database support, without file support
+ ActiveX Controls support enabled
+ Localizable text in:
中文[中华人民共和国]
确认创立信息之后, 浮现应用程序框架界面, 如图4.7所示。

图4.7 应用程序框架界面
4.5 开发工资解决界面
如前所述, 应用系统向导只能生成一种应用程序基本框架, 该框架还不具备任何功能, 咱们需要在框架基本上进行系统各种功能制作。

普通一种应用程序框架生成两个对话框, 一种是IDD_ABOUTBOX对话框, 它是一种阐明该系统对话框, 几乎由向导自动完毕, 如图4.8所示。

图4.8 ABOUTBOX对话框
该对话框依然是基本, 如果顾客需要修饰或修改, 可以依照自己需要进行。

在基本框架中此外一种对话框就是主对话框IDD_MY_FORM, 它是咱们加工制作重要内容, 数据源也是专门为该对话框引入。

4.5.1 主对话框IDD_MY_FORM中控件加入与布局
在工资管理系统中, 主对话框重要用于解决工资管理一切内容。

制作该对话框重要环节如下:
(1)在主对话框IDD_MY_FORM中将提示文本框“TODO: 在这个对话框里设立表格控制。

”删除。

(2)在主对话框IDD_MY_FORM中放入各种需要控件, 如标签控件、编辑框控件、命令按钮控件, 其对话框布局如图4.9所示。

图4.9 主对话框IDD_MY_FORM控件布局其中, 各个控件属性设立如表4.2-表4.5所示。

表4.2 标签对象基本属性
表4.3 编辑框控件基本属性和编辑内容
表4.4 命令按钮对象基本属性
表4.5 分组控件对象基本属性
4.5.2 为编辑框控件建立数据字段映射
在对话框中一切编辑框控件, 均是用于进行数据解决和数据显示, 但一方面咱们应当为它们建立字段映射, 即将创立数据集中每一种字段与一种编辑框进行‘数据绑定”。

其办法咱们在前面案例中已有所涉及。

咱们以其中一种编辑框, 即“年份”编辑框为例, 阐明为编辑框与数据集中字段建立映射关系办法。

为此进行如下操作:
(1)在主对话框IDD_MY FORM中选用“年份”编辑框控件。

(2)用鼠标右键单击该对话框, 浮现一种快捷菜单。

(3)在快捷菜单中单击“建立类向导”, 浮现类向导对话框。

(4)在类向导对话框中将页面切换至Member Variables页面并设立类名为CmySet。

该对话框列出了数据集所有字段名、字段类型和字段成员变量名称, 但成员变量名是在创立数据源时自动生成, 往往不便于与编辑框建立映射关系, 为此将所有成员变量名称删除, 并重新定义字段成员变量名称。

重新定义后字段变量名称如图4.10所示。

图4.10 重新定义字段变量名称
(5)在Classname列表中选取CmyView, 浮现为编辑框控件与字段成员变量建立消息映射页面, 如图4.11所示。

图4.1l 编辑框控件与字段变量映射页面
(6)选中IDC_EDITNF(年份编辑)控件资源索引, 再单击Add Variable按钮, 浮现变量选取列表框。

在字段选取列表框中选取“年份”成员变量, 如图4.12所示。

图4.12 字段成员变量列表
(7)单击OK按钮, 即完毕“年份”编辑框与“年份”字段成员变量映射。

采用相似办法为所有编辑框控件建立消息映射, 然后编译对话框, 则发现可以在编辑框中修改数据表中记录。

4.5.3 为命令按钮增长函数并编制过程代码
事实上, 在前面咱们已经在编辑框与数据集之间建立了一种映射关系, 但解决数据功能还不是很完善。

为此咱们需要用某些命令来完毕对数据操作, 需要为命令按钮建立函数和编制过程代码。

同样, 在对话框中存在各种命令按钮, 咱们以“第一条记录”命令按钮为例来阐明建立函数与编制过程办法。

1.“第一条记录”命令按钮过程代码
(1)在对话框中选用“第一条记录”命令按钮。

(2)用鼠标右键单击该命令按钮, 浮现一种快捷菜单。

(3)在快捷菜单中单击“建立类向导”菜单项, 浮现一种消息映射对话框。

(4)在消息映射对话框中选取Message Maps页面, 选取消息类型为“ON_CLICKED”并单击Add Function按钮, 浮现一种函数命令对话框, 建议接受系统命名函数名即可。

(5)确认函数名后单击Edit Code按钮, 出当代码编辑框, 在代码编辑框中编辑命令按钮代码, 如下所示:
void CMyView : : OnButtonfirst ()
{
/ / TODO: Add your control notification handler code here
m_pSet - > MoveFirst ();
if (m_pSet - > IsBOF())
{
MessageBox (“记录已经在第一条!”)
m_pSet - > MoveNext ();
UpdateData (FALSE);
Return;
}
UpdateData (FALSE);
}
这样, “第一条记录”命令按钮过程代码就编辑完毕了。

采用同样办法, 咱们可以编辑其她命令按钮过程代码。

2. “下一条记录”命令按钮过程代码
void CMyView : : OnButtonnext ()
{
/ / TODO: Add your control notification handler ode here m_pSet - > MoveNext();
if (m_pSet - > IsEOF ()) {
MessageBox (“记录已经在最后一条!”);
m_pSet - > MovePrev ();
UpdateData (FALSE);
Return;
}
UpdateData (FALSE);
}
3. “前一条记录”命令按钮过程代码
void CMyView : : OnButtonprev ()
{
/ / TODO: Add your control notification handler code here
m_pSet - >MovePrev ();
if (m_pSet - >IsBOF()) {
MessageBox (“记录已经在第一条!”);
m_pSet - >MoveNext ();
UpdateData (FALSE);
return;
}
UpdateData (FALSE);
}
4. “最后一条记录”命令按钮过程代码
void CMyView : : OnButtonlast ()
{
/ / TODO: Add your control notification handler code here m_pSet - >MoveLast ();
if (m_pSet - >IsEOF ())
{
MessageBox (“记录已经在最后一条!”);
m_pSet - >MovePrev ();
UpdateData (FALSE);
Return;
}
UpdateData (FALSE);
}
5. “增长记录”选项按钮过程代码
void CMyView : : OnRadiodd ()
{
//TODO: Add your control notification handler code here m_pSet - >AddNew ();
UpdateData (FALSE);
6. “删除记录”选项按钮过程代码
void CMyView : : OnRadiodelete ()
{
//TODO: Add your control notification handler code here m_pSet - >Delete ();
m_pSet - >MoveNext ();
if (m_pSet - >IsEOF ())
m_pSet - > MoveLast ();
if (m_pSet -> IsBOf())
m_pSet - > SetFieldNull (NULL);
UpdateData (FALSE);
}
7. “刷新记录”选项按钮过程代码
void CMyView : : OnRadioupdate ()
{
//TODO: Add your control notification handler code here
m_pSet->Edit ();
UpdateData ();
m_pSet-> Update ();
m_pSet-> Requery ();
m_pSet-> CancelUpdate ();
8. “执行记录”命令按钮过程代码
void CMyView : : OnButtonsum ()
{
//TODO: Add your control notification handler code here
m_pSet->Edit ();
m_pSet->m_YES = m_pSet ->m_JBGZ+m_pSet->m_JJ+m_pSet->m_YJGZ+m_pSet->m_JT+
m_pSet->m_GZBZ;
m_pSet->m_KCZJ=m_pSet->m_CX+m_pSet->m_HF+m_pSet-> m_FZOU+m_pSet->m_RDF +m_pSet->m_BX;
m_pSet->m_SFGZ= m_pSet->m_YES- m_pSet->m_KCZZ;
UpdateData (FALSE);
m_pSet->Requery();
m_pSet->Update();
}
最后编译执行工程, 检核对话框中数据解决效果, 如图 4.13所示。

图4.13 对话框运营效果
4.5.4 资源文献分析
在工程创立完毕后, 读者可以对已经创立工程某些文献进行阅读和分析。

人们常说: 软件=文档+代码, 这一“等式”几乎对于一切开发平台都是合用;这里文档涉及顾客创立文档和系统派生文档两类, 无论是顾客创立文档或是系统派生文档, 它们往往都是对系统开发过程“记录”。

因而, 通过阅读这些“记录”, 不但对VC++开发环境有了更进一步理解, 并且对整个系统实现全过程也一清二楚。

本小节分析两个文档, 一种是工程实现文档, 另一种是工程设立文档。

1. “工资管理系统”工程实现文献
工资管理系统实现文献记录了该工程创立声明、编写过程代码、资源消息映射、数据集创立和控件映射等等内容, 工程实现文档往往是顾客开发过程中编写最多文档, 一切过程代码编制往往都是在工程实现文档中进行。

“工资管理系统”工程实现文档所有内容如下所示(仅供读者在开发实践中参照, 若无必要, 也可以略去对这某些阅读)://工资管理系统View.cpp : implementation of the CMyView class
# include “stdafx.h”
# include “工资管理系统.h”
# include “工资管理系统Set.h”
# include “工资管理系统Doc.h”
# include “工资管理系统View.h”
# ifdef _DEBUG
# define new DEBUG_NEW
# undef THIS_FILE
static char THIS_FILE [] = __FILE__;
# endif
/////////////////////////////////////////////////////////////////////////////////////////////////////// //////////
//CMyView
IMPLEMENT_DYNCREATE (CMyView, CRecordView)
BEGIN_MESSAGE_MAP (CMyView, CRecordView)
//{{AFX_MSG_MAP (CMyView)
ON_BN_CLICKED (IDC_BUTTONFIRST, OnButtonfirst)
ON_BN_CLICKED (IDC_BUTTONNEXT, OnButtonnext)
ON_BN_CLICKED (IDC_BUTTONPREV, OnButtonprev)
ON_BN_CLICKED (IDC_BUTTONLAST, OnButtonlast)
ON_BN_CLICKED (IDC_RADIODD, OnRadiodd)
ON_BN_CLICKED (IDC_RADIODELETE, OnRadelete)
ON_BN_CLICKED (IDC_RADIOUPDATE, OnRadioupdate)
ON_BN_CLICKED (IDC_BUTTONSUM, OnButtonsum)
ON_BN_CLICKED (IDC_RADIOEDIT, OnRadioedit)
//}}AFX_MSG_MAP
//Standard printing commands
ON_COMMAND (ID_FILE_PRINT, CRecordView : : OnFilePrint)
ON_COMMAND (ID_FILE_DIRECT, CRecordView : : OnFilePrint)
ON_COMMAND (ID_FILE_PREVIEW, CRecordView ::OnFilePrieview)
END_MESSAGE_MAP ()
/ / / / / / / / // / / / / // / / / / / / / / / / / // / / / / // / / / / / / / / / / / // / / / / // / / / //CMyView construction/destruction
CMyView : : CMyView () : CRecordView (CMyView : : IDD)
{
//{{AFX_DATA_INIT (CMyView)
m_pSet = NULL;
//}} AFX_DATA_INIT
//TODO: add construction code here
}
CMyView : : ~CMyView ()
{
}
void CMyView : : DoDataExchange (CDataExchange* pDX)
{
CRecordView : : DoDataExchange (pDX);
//{{AFX_DATA_MAP (CMyView)
DDX_FieldText (pDX, IDC_EDITNF, m_pSet - > m_NF, m_pSet);
DDX_FieldText (pDX, IDC_EDITYF, m_pSet - > m_YF, m_pSet);
DDX_FieldText (pDX, IDC_EDITZGBH, m_pSet - > m_ZGBH, m_pSet);
DDX_FieldText (pDX, IDC_EDITZGBM, m_pSet - > m_BM, m_pSet);
m_pSet);
DDX_FieldText (pDX, IDC_EDITJBGZ, m_pSet - > m_JBGZ, m_pSet);
DDX_FieldText (pDX, IDC_EDITJJ, m_pSet - > m_JJ, m_pSet);
DDX_FieldText (pDX, IDC_EDITSFGZ, m_pSet - > m_SFGZ, m_pSet);
DDX_FieldText (pDX, IDC_EDITYFHJ, m_pSet - > m_YFS, m_pSet);
DDX_FieldText (pDX, IDC_EDITKCHJ, m_pSet - > m_KCZJ, m_pSet);
DDX_FieldText (pDX, IDC_EDITBX, m_pSet - > m_NF, m_pSet);
DDX_FieldText(pDX, IDC_EDITBX, m_pSet->m_BX, m_pSet);
DDX_ FieldText(pDX, IDC_EDITCX, m_pSet->m_CX, m_pSet);
DDX _FieldText(pDX, IDC _EDITFZOU, m_pSet->m_FZOU, m_pSet);
DDX _FieldText(pDX, IDC _EDITGZBZ, m_pSet->m_GZBZ, m_pSet);
DDX _FieldText(pDX, IDC _EDITHF, m_pSet->m_HF, m_pSet);
DDX _FieldText(pDX, IDC_ EDITJT, m_pSet->m_JT, m_pSet);
DDX _FieldText(pDX, IDC_EDITRDF, m pSet->m_RDF, m pSet);
m_pSet);
//}}AFX_ DATA_ MAP
}
BOOL CMyView :: PreCreateWindow(CREATESTRUCT&
{
//TODO: Modify the Window class or styles here by modifying
//the CREATESTRUCT cs
return CRecordView :: PreCreateWindow(cs);
}
void CMyView::OnInitialUpdate()
{
m_pSet = &GetDocument()->m_mySet;
CRecordView :: OnInitialUpdate();
GetParentFrame () ->RecalcLayout();
Resize ParentToFit();
}
///////////////////////////////////////////////////////////////////////////////////////////////////////// //CMyView printing
BOOL CMyView :: OnPreparePrinting(CPrintInfo* pInfo)
{
//default preparation
return DoPreparePrinting(pInfo);
}
void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
//TODO: add extra initialization before printing
}
void CMyView :: OnBeginPrinting (CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
//TODO: add cleanup after printing
////////////////////////////////////////////////////////////////////////////////////////////////////// ////
// CMyView diagnostics
# ifdef _DEBUG
void CMyView :: AssertValid () const
{
CRecordView :: AssertValid ();
}
void CMyView :: Dump (CDumpContext & sc) const
{
CRecordView :: Dump(dc);
{
CMyDoc* CMyView :: GetDocument () // non-debug version is inline
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc))) ;
Return (CMyDoc*)m_pDocument;
}
# endif //_DEBUG
////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////
//CMyView database support
CRecordset* CMyView :: OnGetRecordset()
{
return m_pSet;
}
////////////////////////////////////////////////////////////////////////////////////////////////////// ////////////
//CMyView message handlers
void CMyView :: OnButtonfirst()
{
//TODO: Add your control notification handler code here
m_pSet->MoveFirst ();
if(m_pSet->IsBOF ())
{
Mes sageBox ( "记录已经在第一条!");
m_pSet->MoveNext ();
UpdateData (FALSE);
return;
}
UpdateData ( FALSE);
}
void CMyView :: OnButtonnext ()
{
// TODO: Add your control notification handler code here M_ pSet->MoveNext ();
If (m_pSet->IsEOF()) {
MessageBox ( "记录已经在最后一条!");
m_pSet->MovePrev ();
UpdateData(FALSE);
return;
}
UpdateData (FALSE);
}
void CMyView::OnButtonprev ()
{
// TODO: Add your control notification handler code here m_pSet->MovePrev ();
if(m_pSet->IsBOF()) {
MessageBox("记录已经在第一条!");
m_ pSet->MoveNext ();
UpdateData(FALSE);
return;
}
UpdateData (FALSE);
}
void CMyView::OnButtonlast ()
}
// TODO: Add your control notification handler code here
m_pSet->Edit ();
if m_pSet->IsEOF())
{
MessageBox("记录已经在第一条!");
m_pSet->MovePrev (); -
UpdateData(FALSE);
return;
}
UpdateData(FALSE);
}
void CMyView :: OnRadiodd()
{
// TODO: Add your control notification handler code here m_pSet->AddNew ();
UpdateData(FALSE);
}
void CMyView :: OnRadiodelete()
{
// TODO: Add your control notification handler code here
m_pSet->Delete();
m_pSet->MoveNext();
if (m_pSet->IsEOF())
m_pSet->MoveLast();
if(m_pSet->IsBOF())
m_pSet->SetFieldNull(NULL);
UpdateData(FALSE);
}
void CMyView::OnRadioupdate()
{
// TODO: Add your control notification handler code here m_pSet->Edit () ;
UpdateData ();
m_pSet->Update ();
m_pSet->Requery ();
// m_pSet->CancelUpdate ();
}
void CMyView::OnButtonsum()
{
//TODO: Add your control notification handler code here m_ pSet->Edit ();
m_pSet->m_YFS=0;
m_ pSet->m_KCZJ=0;
m_pSet->m_SFGZ=0;
m_pSet->Update ( );
m_pSet->Edit ();
(m_pSet->m_YFS) = (m_pSet->m_JBGZ) + (m_pSet->m_JJ) + (m_pSet->m_YJGZ) + (m_pSet->mJT) + (m_pSet->m_GZBZ);
(m_pSet->m_KCZJ) = (m_pSet->m_CX) + (m_pSet->m_HF) + (m_pSet->m_FZOU) + (m pSet->m_RDF) + (m_pSet->m_BX);
(m_pSet->m_SFGZ) = (m_pSet->m_YFS) - (m_pSet->m KCZJ);
m_pSet->Update ( );
UpdateData (FALSE);
m_pSet->Requery();
}
2. “工资管理系统”工程设立文档(Set.cpp)
工程设立文档用来记录工程中对于头文献声明设立、预定义变量、给变量赋初值、记录字段变量定义等, 请参照如下内容:
//工资管理系统Set.cpp: implementation of the CMySet class
# include “stdafx.H”
# include “工资管理系统. h”
# include “工资管理系统Set. h”
# ifdef _DEBUG
# define new DEBUG_NEW
# undef THIS_FILE
static char THIS FILE [] = __FILE__;
#endif
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
//CMySet implementation
IMPLEMENT_DYNAMIC (CMySet, CRecordset)
CMySet : : CMySet (CDatabase* pdb) : CRecordset (pdb)
{
//{{AFX_FIELD_INIT(CMySet)
m_BX = 0;
m_BM = T("");
m_CX = 0;
m_FZOU = 0;
m_GZBZ = 0;
m_HF = 0;
m_JBGZ = 0;
m_JJ = 0;
m_JT = 0;
m_KCZJ = 0;
m_SFGZ = 0;
m_RDF = 0;
m_XM = _T("");
m_YJGZ = 0;
m_YFS = 0;
m_ NF = 0.0f;
m_YF = 0.0f;
m_ZGBH = 0;
m_nFields = 19;
//}}AFX_FIELD_INIT
m_nDefaultType = snapshot;
}
CString CMySet: : GetDefaultConnect()
{
return_T ( "ODBC;DSN=工资管理数据库");
}
CString CMySet: :GetDefaultSQL()
{
return _T ("职工工资数据表");
}
void CMySet : : DoFieldExchange(CFieldExchange* pFX) {
//{ {AFX_FIELD MAP (CMySet)
pFX->SetFieldType (CFieldExchange:: outputColumn);
RFX_Long (pFX, _T ("[保险]"), m_BX);
RFX_Text(pFX, _T("[部门]"), m_BM);
RFX_Long(pFX, _T("[储蓄]"), m_CX);
RFX_Long(pFX, _T("[房租]"), m_FZOU);
RFX_Long (pFX, _T ("[各种补贴]"), m_GZBZ);
RFX_Long(pFX, _T("[会费]"), m_HF);
RFX_Long(pFX, _T("基本工资"), m_JBGZ);
RFX_Long(pFX, _T("[奖金]"), m_JJ);
RFX_Long(pFX, _T ("[津贴]") , m_JT);
RFX_Long(pFX, _T("[扣除总计]"), m_KCZJ);
RFX_Long(pFX, _T("[实发工资]"), m_SFGZ);
RFX_Date(pFX, _T("[输入日期]"), m_SRRQ);
RFX_Long(pFX, _T("[水电费]") , m_RDF);
RFX_Text(pFX, _T("[姓名]"), m_XM);
RFX_Long(pFX, _T("[业绩工资]"), m_YJGZ);
RFX_Long(pFX, _T("[应发数]") , m_YFS);
RFX_Single(pFX,_T("[年份]"), m_NF);
RFX_Single (pFX, _T ("[月份]"), m_YF);
RFX_Int (pFX, _T ("[职工编号]"), m_ZGBH);
//}}AFX_FIELD_MAP
}
/ / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
//CMySet diagnostics
# ifdef _DEBUG
void CMySet: :AssertValid() const
{
CRecordset: :AssertValid ();
}
void CMySet::Dump(CDumpContext& dc) const
{
CRecordset:: Dump (dc);
}
#endif //_DEBUG
在本案例中, 咱们结合呈个工资管理系统制作, 进一步阐明了运用VC++制作数据库应用系统办法, 特别是对数据集操作解决和记录计算办法, 可以看出数据集中字段记录过程, 就是对其她字段变量值数字计算过程。

相关文档
最新文档