




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目录一、 设计题目1二、 系统环境1三、 设计内容13.1数据库的设计13.2 创建数据库及其数据表23.3 开放数据源。43.4 创建工资管理系统基本框架53.5 主对话框IDD_MY_FORM中控件的加入与布局。83.6 为编辑框控件建立数据字段映射103.7 为命令按钮增加函数并编制过程代码13四、流程图及模块图174,1 系统的总体设计174.2工资数据处理模块184.3 工资数据浏览模块184.4 增加与删除模块194.5 统计模块19五、程序清单19六、程序中遇到的问题及解决方法38七、心得体会38八、参考文献39一、设计题目工资管理系统设计与实现。2、 系统环境 windowsX
2、P VC+3、 设计内容3.1数据库的设计作为工资管理系统,它主要是数据库应用系统数据处理,数据库应用系统开发的前提是首先开发数据库和数据库中的数据表。因此在本案例中,我采用Microsoft Access 2007创建数据库和数据表。为此我们先定义一个“职工工资数据表”的结构,如下表所示。职工工资数据表 字段名称字段类型字段大小小数位数索引必须填写年份数字整型 是月份数字整型 是输入日期日期/时间默认 是职工编号数字整型 是姓名文本16 是部门文本20
3、0;是基本工资数字长整型自动 是业绩工资数字长整型自动 是奖金数字长整型自动 是津贴数字长整型自动 是各种补助数字长整型自动 是应发数数字长整型自动 是水电费数字长整型自动 是房租数字长整型自动 是储蓄数字长整型自动 是会费数字长整型自动 是保险数字长整型自动 是扣除总计数字长整型自动 是实发工资数字长整型自动 是3.2 创建数据库及其数据表(1) 启动Microsoft Office 2007中的Microsoft Access应用程序,出现下图所示界面,通过该界
4、面可以创建一个新的数据库。 (2)在创建里头单击“表设计”,用户可以在其中设计一个新的数据表结构。如下图所示。 在Microsoft Access 2007数据库设计器中,用户可以定义数据表的字段名称、字段类型、字段大小等数据表结构的内容。数据表结构一经确定,用户可以打开该数据表,在数据表中输入一些基本数据,以在后面的系统设计中体现设计的效果。最后,系统自动将创建的数据表保存在“D:VC+写作案例CH432资管理数据库”中,将创建的数据表命名为“职工工资表”。3.3 开放数据源。 开始设置控制面板管理工具,双击数据源打开。选择第二个系统DSN,点击“添加”选择Microsoft Access
5、Driver(*.mdb)。点击完成。在弹出的对话框中起一个数据源名,然后点击“选择”,然后在目录一栏选择 刚才建立的那个表。选中,点击确定。一路确定下去,OK。数据源就建立好了。 3.4 创建工资管理系统基本框架 在前面我已经创建了“工资管理数据库”、“职工工资表”。它可为应用程序提供一个数据源。应用程序就是对该数据源的记录进行访问、增加、删除以及数据管理的一切操作。有了这一切的工作,用户就可以着手进行应用系统的构建了。接下来我要创建“工资管理系统”应用程序框架,步骤如下:(1)结束数据库的创建并启动VC+,出现VC+主控界面。(2)在VC+主控界面中单击“文件|新建”菜单项,出现新建工程类
6、型选择对话框,在工程类型列表中选择MFC AppWizard(EXE)工程类型。(3)输入工程名称为“工资管理系统”,并选择Win32平台类型。(4)单击“确定”按钮,进入文档类型设置。(5)选择单文档类型,即创建一个单文档界面的应用程序,设置资源使用语言为中文,选择文档查看体系结构支持。(6)单击“下一步”按钮,进入框架设置的第2步,如图的对话框。在该对话框中,需要用户对数据库的类型作一些相关的选择。 (7)选择“查看数据库不使用文件支持”;这时候Data Source按钮处于可用状态(或激活状态);在这一种选择下,VC+将为应用系统引入数据环境,即数据源,该数据源就是我们在前面创
7、建的“工资数据库”,而不使用其他类型数据的文件支持。但数据源在系统制作中的引入需要用一定的驱动程序为之进行。(8)单击“Data Source”按钮,出现图下图所示的选择数据源类型的对话框。 3.5 主对话框IDD_MY_FORM中控件的加入与布局。(1)在主对话框IDD_MY_FORM中放入各种需要的控件,如标签控件、编辑框控件、命令按钮控件,如下图。各个控件的属性设置如下表:标签对象的基本属性ID标题内容IDC_STATICCAPTION职工工资管理系统IDC_STATICNE年份IDC_STATICYF月份IDC_STATICZGBH职工编号IDC_STATICZGXM职工姓名IDC_S
8、TATICZGBM部门IDC_STATICJBGZ基本工资IDC_STATICJJ奖金IDC_STATICYJGZ业绩工资IDC_STATICJT津贴IDC_STATICGZBZ各种补助IDC_STATICRDF水电费IDC_STATICFZOU房租IDC_STATICCX储蓄IDC_STATICHF会费IDC_STATICBX保险IDC_STATICYFHJ应发合计IDC_STATICKCHJ扣除合计IDC_STATICSFGZ实发工资 编辑框空间的基本属性和编辑内容ID编辑内容IDC_EDITNF年份IDC_EDITYF月份IDC_EDITZGBH职工编号IDC_EDITZGBM所在部门I
9、DC_EDITZGXM职工姓名IDC_EDITJBGZ基本工资IDC_EDITJJ奖金IDC_EDITYJGZ业绩工资IDC_EDITJT津贴IDC_EDITGZBZ各种补助IDC_EDITRDF水电费IDC_EDITFZOU房租IDC_EDITCX储蓄IDC_EDITHF会费IDC_EDITBX保险IDC_EDITYFHJ应发合计IDC_EDITKCHJ扣除合计IDC_EDITSFGZ实发工资 命令按钮对象的基本属性和内容ID标题内容IDC_BUTIONFIRST|第一条IDC_BUTIONNEXT下一条IDC_BUTIONPREV前一条IDC_BUTIONLAST|最后一条IDC_BUTI
10、ONSUM执行统计IDC_RADIOADD增加记录IDC_RADIODELETE删除记录IDC_RADIOUPDATE刷新记录 分组对象控件的基本属性ID标题IDC_STATICDATA工资数据处理IDC_STATICBROWSE工资数据浏览3.6 为编辑框控件建立数据字段映射 (1)在主对话框IDD_MY FORM中选取“年份”编辑框控件。 (2)用鼠标右键单击该对话框,出现一个快捷菜单。 (3)在快捷菜单中单击“建立类向导”,出现类向导对话框。 (4)在类向导对话框中将页面切换至Member Variables页面并设置类名为CmySet。该对话框列出了数据集的全部字段名、字段类型和字段的
11、成员变量名称,但成员变量名是在创建数据源时自动生成的,往往不便于与编辑框建立映射关系,为此将全部成员变量名称删除,并重新定义字段的成员变量名称。重新定义后的字段变量名称如下图所示。(5) 在Classname列表中选择CmyView,出现为编辑框控件与字段成员变量建立消息映射的页面,如下图所示。 (6)选中IDC_EDITNF(年份编辑)控件资源索引,再单击Add Variable按钮,出现变量选择列表框。在字段选择列表框中选择“年份”成员变量,如下图所示。(7)单击OK按钮,即完成“年份”编辑框与“年份”字段成员变量的映射。采用相同的方法为全部编辑框控件建立消息映射,然后编译对话框
12、,则发现可以在编辑框中修改数据表中的记录。3.7 为命令按钮增加函数并编制过程代码3.7.1 “第一条记录”命令按钮的过程代码(1)在对话框中选取“第一条记录”命令按钮。(2)用鼠标右键单击该命令按钮,出现一个快捷菜单。(3)在快捷菜单中单击“建立类向导”菜单项,出现一个消息映射的对话框。(4)在消息映射的对话框中选择Message Maps页面,选择消息类型为“ON_CLICKED”并单击Add Function按钮,出现一个函数命令对话框,建议接受系统命名的函数名即可。(5)确认函数名后单击Edit Code按钮,出现代码编辑框,在代码编辑框中编辑命令按钮的代码,如下所示: 这样
13、,“第一条记录”命令按钮的过程代码就编辑完成了。采用同样的方法,我们可以编辑其他命令按钮的过程代码。3.7.2 “下一条记录”命令按钮的过程代码void CMyView:OnButionnext() / TODO: Add your control notification handler code herem_pSet->MoveNext();if(m_pSet->IsEOF()MessageBox("已经是最后了!");m_pSet->MovePrev();UpdateData(FALSE);return; UpdateData(FALSE);3.7.
14、3“上一条记录”命令按钮的过程代码void CMyView:OnButionprev() / TODO: Add your control notification handler code herem_pSet->MovePrev();if(m_pSet->IsBOF()MessageBox("已经是第一条了!");m_pSet->MoveNext();UpdateData(FALSE);return; UpdateData(FALSE);3.7.4“最后一条记录”命令按钮的过程代码void CMyView:OnButionlast() / TODO:
15、Add your control notification handler code herem_pSet->MoveLast();if(m_pSet->IsEOF()MessageBox("已经是最后了!");m_pSet->MovePrev();UpdateData(FALSE);return; UpdateData(FALSE);3.7.5 “增加记录”选项按钮的过程代码void CMyView : : OnRadiodd ()/TODO: Add your control notification handler code herem_pSet -
16、 >AddNew ();UpdateData (FALSE); 3.7.6“删除记录”选项按钮的过程代码void CMyView:OnRadiodelete() / TODO: Add your control notification handler code herem_pSet->Delete();m_pSet->MoveNext();if(m_pSet->IsEOF()m_pSet->MoveLast();if(m_pSet->IsBOF()m_pSet->SetFieldNull(NULL); UpdateData(FALSE);3
17、.7.7“刷新记录”选项按钮的过程代码void CMyView:OnRadioupdate() / TODO: Add your control notification handler code herem_pSet->Edit();UpdateData();m_pSet->Update();m_pSet->Requery();m_pSet->CancelUpdate();3.7.8 “执行统计”命令按钮的过程代码void CMyView:OnButionsum() / TODO: Add your control notification handler code
18、herem_pSet->Edit();m_pSet->m_YJGZ=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_YJGZ-m_pSet->m_KCZJ;UpdateData(FALSE);
19、m_pSet->Requery();m_pSet->Update();最后编译执行,结果如下图: 四、流程图及模块图4,1 系统的总体设计 根据对系统需求的分析,可以把系统划分:工资数据处理模块、工资数据浏览模块、增加与删除模块、统计模块。系统总体模块工资数据处理模块工资数据处理模块工资数据处理模块工资数据浏览模块4.2工资数据处理模块职工编号 工资数据处理模块 基本工资 奖金职工姓名 部门 年份 会费 储蓄 房租 津贴业绩工资各种补助 水电费 月份 保险4.3 工资数据浏览模块工资数据浏览模块 最后一条上一条下一条 第一条增加记录 删除记录 刷新纪录 增加与删除模块4.4 增加与
20、删除模块实发合计 扣除合计 统计模块4.5 统应发合计 计模块五、程序清单5.1 / 工资管理.cpp : Defines the class behaviors for the application./#include "stdafx.h"#include "工资管理.h"#include "MainFrm.h"#include "ChildFrm.h"#include "工资管理Set.h"#include "工资管理Doc.h"#include "工资管理V
21、iew.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyAppBEGIN_MESSAGE_MAP(CMyApp, CWinApp)/AFX_MSG_MAP(CMyApp)ON_COMMAND(ID_APP_ABOUT, OnAppAbout)/ NOTE - the ClassWizard will add and remove mapping macros here./ DO NOT EDIT what you see in these blo
22、cks of generated code!/AFX_MSG_MAP/ Standard file based document commandsON_COMMAND(ID_FILE_NEW, CWinApp:OnFileNew)ON_COMMAND(ID_FILE_OPEN, CWinApp:OnFileOpen)/ Standard print setup commandON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp:OnFilePrintSetup)END_MESSAGE_MAP()/ CMyApp constructionCMyApp:CMyApp()/
23、 TODO: add construction code here,/ Place all significant initialization in InitInstance/ The one and only CMyApp objectCMyApp theApp;/ CMyApp initializationBOOL CMyApp:InitInstance()AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the siz
24、e/ of your final executable, you should remove from the following/ the specific initialization routines you do not need.#ifdef _AFXDLLEnable3dControls();/ Call this when using MFC in a shared DLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically#endif/ Change the registry key u
25、nder which our settings are stored./ TODO: You should modify this string to be something appropriate/ such as the name of your company or organization.SetRegistryKey(_T("Local AppWizard-Generated Applications");LoadStdProfileSettings(); / Load standard INI file options (including MRU)/ Reg
26、ister the application's document templates. Document templates/ serve as the connection between documents, frame windows and views.CMultiDocTemplate* pDocTemplate;pDocTemplate = new CMultiDocTemplate(IDR_MYTYPE,RUNTIME_CLASS(CMyDoc),RUNTIME_CLASS(CChildFrame), / custom MDI child frameRUNTIME_CLA
27、SS(CMyView);AddDocTemplate(pDocTemplate);/ create main MDI Frame windowCMainFrame* pMainFrame = new CMainFrame;if (!pMainFrame->LoadFrame(IDR_MAINFRAME)return FALSE;m_pMainWnd = pMainFrame;/ Parse command line for standard shell commands, DDE, file openCCommandLineInfo cmdInfo;ParseCommandLine(cm
28、dInfo);/ Dispatch commands specified on the command lineif (!ProcessShellCommand(cmdInfo)return FALSE;/ The main window has been initialized, so show and update it.pMainFrame->ShowWindow(m_nCmdShow);pMainFrame->UpdateWindow();return TRUE;/ CAboutDlg dialog used for App Aboutclass CAboutDlg : p
29、ublic CDialogpublic:CAboutDlg();/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides/AFX_VIRTUAL(CAboutDlg)protected:virtual void DoDataExchange(CDataExchange* pDX); / DDX/DDV support/AFX_VIRTUAL/ Implementationprotected:/AFX_MSG(CAbou
30、tDlg)/ No message handlers/AFX_MSGDECLARE_MESSAGE_MAP();CAboutDlg:CAboutDlg() : CDialog(CAboutDlg:IDD)/AFX_DATA_INIT(CAboutDlg)/AFX_DATA_INITvoid CAboutDlg:DoDataExchange(CDataExchange* pDX)CDialog:DoDataExchange(pDX);/AFX_DATA_MAP(CAboutDlg)/AFX_DATA_MAPBEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG
31、_MAP(CAboutDlg)/ No message handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ App command to run the dialogvoid CMyApp:OnAppAbout()CAboutDlg aboutDlg;aboutDlg.DoModal();/ CMyApp message handlers5,2 / 工资管理Doc.cpp : implementation of the CMyDoc class/#include "stdafx.h"#include "工资管理.h"#inclu
32、de "工资管理Set.h"#include "工资管理Doc.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CMyDocIMPLEMENT_DYNCREATE(CMyDoc, CDocument)BEGIN_MESSAGE_MAP(CMyDoc, CDocument)/AFX_MSG_MAP(CMyDoc)/ NOTE - the ClassWizard will add and remove mapping macr
33、os here./ DO NOT EDIT what you see in these blocks of generated code!/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDoc construction/destructionCMyDoc:CMyDoc()/ TODO: add one-time construction code hereCMyDoc:CMyDoc()BOOL CMyDoc:OnNewDocument()if (!CDocument:OnNewDocument()return FALSE;/ TODO: add reinitializati
34、on code here/ (SDI documents will reuse this document)return TRUE;/ CMyDoc serializationvoid CMyDoc:Serialize(CArchive& ar)if (ar.IsStoring()/ TODO: add storing code hereelse/ TODO: add loading code here/ CMyDoc diagnostics#ifdef _DEBUGvoid CMyDoc:AssertValid() constCDocument:AssertValid();void
35、CMyDoc:Dump(CDumpContext& dc) constCDocument:Dump(dc);#endif /_DEBUG/ CMyDoc commands5.3 / 工资管理Set.cpp : implementation of the CMySet class/#include "stdafx.h"#include "工资管理.h"#include "工资管理Set.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FIL
36、E = _FILE_;#endif/ CMySet implementationIMPLEMENT_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_NF = 0;m_SFGZ = 0;m_RDF = 0;m_ZGXM = _T
37、("");m_YJGZ = 0;m_YFHJ = 0;m_YF = 0;m_ZGBH = 0;m_nFields = 18;/AFX_FIELD_INITm_nDefaultType = snapshot;CString CMySet:GetDefaultConnect()return _T("ODBC;DSN=工资管理");CString CMySet:GetDefaultSQL()return _T("工资管理");void CMySet:DoFieldExchange(CFieldExchange* pFX)/AFX_FIELD
38、_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("会费")
39、, 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_NF);RFX_Long(pFX, _T("实发工资"), m_SFGZ);RFX_Long(pFX, _T("水电费"), m_RDF
40、);RFX_Text(pFX, _T("姓名"), m_ZGXM);RFX_Long(pFX, _T("业绩工资"), m_YJGZ);RFX_Long(pFX, _T("应发数"), m_YFHJ);RFX_Long(pFX, _T("月份"), m_YF);RFX_Long(pFX, _T("职工编号"), m_ZGBH);/AFX_FIELD_MAP/ CMySet diagnostics#ifdef _DEBUGvoid CMySet:AssertValid() constCRecord
41、set:AssertValid();void CMySet:Dump(CDumpContext& dc) constCRecordset:Dump(dc);#endif /_DEBUG5.4/ / 工资管理Set.cpp : implementation of the CMySet class/#include "stdafx.h"#include "工资管理.h"#include "工资管理Set.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char
42、THIS_FILE = _FILE_;#endif/ CMySet implementationIMPLEMENT_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_NF = 0;m_SFGZ = 0;m_RDF = 0;m_Z
43、GXM = _T("");m_YJGZ = 0;m_YFHJ = 0;m_YF = 0;m_ZGBH = 0;m_nFields = 18;/AFX_FIELD_INITm_nDefaultType = snapshot;CString CMySet:GetDefaultConnect()return _T("ODBC;DSN=工资管理");CString CMySet:GetDefaultSQL()return _T("工资管理");void CMySet:DoFieldExchange(CFieldExchange* pFX)/A
44、FX_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("会
45、费"), 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_NF);RFX_Long(pFX, _T("实发工资"), m_SFGZ);RFX_Long(pFX, _T("水电费"), m_RDF);RFX_Text(pFX, _T("姓名"), m_ZGXM);RFX_Long(pFX, _T("业绩工资"), m_YJGZ);RFX_Long(pFX, _T("应发数"), m_YFHJ);RFX_Long(pFX, _T("月份"), m_YF);RFX_Long(pFX, _T(&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 对数函数试题及答案解析
- 施工现场安全突破与创新试题及答案
- 政策支持对新技术创业的推动效果试题及答案
- 广元中考物理试题及答案
- 急救车试题及答案
- 护理招聘测试题及答案
- 安全工程师考试应对策略试题及答案
- 物理学中的经典与量子分析试题及答案
- 注册土木工程师考试信息技术对行业的影响试题及答案
- 家具设计中的人性化特征与客户满意度的关系研究试题及答案
- 人教版三年级下册数学口算题题卡1000道带答案可打印
- 竣工结算审计服务投标方案(2024修订版)(技术方案)
- 《健康成年人身体活动能量消耗参考值》
- 热力学统计物理-第四版-汪志诚-课后答案
- 《铁路工务维修现场实战技巧》课件 任务2.9轨道检查仪作业
- 中国常规肺功能检查基层指南(2024年)解读
- 水域景观课件用
- 村集体小二型水库承包协议书
- 人人学点营销学(请分别进入班级观看视频不要在默认班级观看观看无效)学习通超星期末考试答案章节答案2024年
- 一例乳癌个案护理
- DBJ04∕T 290-2012 袖阀管注浆加固地基技术规程
评论
0/150
提交评论