




免费预览已结束,剩余34页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目录一、 设计题目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、 系统环境 windowsXP VC+3、 设计内容3.1数据库的设计作为工资管理系统,它主要是数据库应用系统数据处理,数据库应用系统开发的前提是首先开发数据库和数据库中的数据表。因此在本案例中,我采用Microsoft Access 2007创建数据库和数据表。为此我们先定义一个“职工工资数据表”的结构,如下表所示。职工工资数据表 字段名称字段类型字段大小小数位数索引必须填写年份数字整型是月份数字整型是输入日期日期/时间默认是职工编号数字整型是姓名文本16是部门文本20是基本工资数字长整型自动是业绩工资数字长整型自动是奖金数字长整型自动是津贴数字长整型自动是各种补助数字长整型自动是应发数数字长整型自动是水电费数字长整型自动是房租数字长整型自动是储蓄数字长整型自动是会费数字长整型自动是保险数字长整型自动是扣除总计数字长整型自动是实发工资数字长整型自动是3.2 创建数据库及其数据表(1) 启动Microsoft Office 2007中的Microsoft Access应用程序,出现下图所示界面,通过该界面可以创建一个新的数据库。 (2)在创建里头单击“表设计”,用户可以在其中设计一个新的数据表结构。如下图所示。 在Microsoft Access 2007数据库设计器中,用户可以定义数据表的字段名称、字段类型、字段大小等数据表结构的内容。数据表结构一经确定,用户可以打开该数据表,在数据表中输入一些基本数据,以在后面的系统设计中体现设计的效果。最后,系统自动将创建的数据表保存在“D:VC+写作案例CH432资管理数据库”中,将创建的数据表命名为“职工工资表”。3.3 开放数据源。 开始设置控制面板管理工具,双击数据源打开。选择第二个系统DSN,点击“添加”选择Microsoft Access Driver(*.mdb)。点击完成。在弹出的对话框中起一个数据源名,然后点击“选择”,然后在目录一栏选择 刚才建立的那个表。选中,点击确定。一路确定下去,OK。数据源就建立好了。 3.4 创建工资管理系统基本框架 在前面我已经创建了“工资管理数据库”、“职工工资表”。它可为应用程序提供一个数据源。应用程序就是对该数据源的记录进行访问、增加、删除以及数据管理的一切操作。有了这一切的工作,用户就可以着手进行应用系统的构建了。接下来我要创建“工资管理系统”应用程序框架,步骤如下:(1)结束数据库的创建并启动VC+,出现VC+主控界面。(2)在VC+主控界面中单击“文件|新建”菜单项,出现新建工程类型选择对话框,在工程类型列表中选择MFC AppWizard(EXE)工程类型。(3)输入工程名称为“工资管理系统”,并选择Win32平台类型。(4)单击“确定”按钮,进入文档类型设置。(5)选择单文档类型,即创建一个单文档界面的应用程序,设置资源使用语言为中文,选择文档查看体系结构支持。(6)单击“下一步”按钮,进入框架设置的第2步,如图的对话框。在该对话框中,需要用户对数据库的类型作一些相关的选择。(7)选择“查看数据库不使用文件支持”;这时候Data Source按钮处于可用状态(或激活状态);在这一种选择下,VC+将为应用系统引入数据环境,即数据源,该数据源就是我们在前面创建的“工资数据库”,而不使用其他类型数据的文件支持。但数据源在系统制作中的引入需要用一定的驱动程序为之进行。(8)单击“Data Source”按钮,出现图下图所示的选择数据源类型的对话框。 3.5 主对话框IDD_MY_FORM中控件的加入与布局。(1)在主对话框IDD_MY_FORM中放入各种需要的控件,如标签控件、编辑框控件、命令按钮控件,如下图。各个控件的属性设置如下表:标签对象的基本属性ID标题内容IDC_STATICCAPTION职工工资管理系统IDC_STATICNE年份IDC_STATICYF月份IDC_STATICZGBH职工编号IDC_STATICZGXM职工姓名IDC_STATICZGBM部门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所在部门IDC_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_BUTIONSUM执行统计IDC_RADIOADD增加记录IDC_RADIODELETE删除记录IDC_RADIOUPDATE刷新记录 分组对象控件的基本属性ID标题IDC_STATICDATA工资数据处理IDC_STATICBROWSE工资数据浏览3.6 为编辑框控件建立数据字段映射 (1)在主对话框IDD_MY FORM中选取“年份”编辑框控件。 (2)用鼠标右键单击该对话框,出现一个快捷菜单。 (3)在快捷菜单中单击“建立类向导”,出现类向导对话框。 (4)在类向导对话框中将页面切换至Member Variables页面并设置类名为CmySet。该对话框列出了数据集的全部字段名、字段类型和字段的成员变量名称,但成员变量名是在创建数据源时自动生成的,往往不便于与编辑框建立映射关系,为此将全部成员变量名称删除,并重新定义字段的成员变量名称。重新定义后的字段变量名称如下图所示。(5) 在Classname列表中选择CmyView,出现为编辑框控件与字段成员变量建立消息映射的页面,如下图所示。(6)选中IDC_EDITNF(年份编辑)控件资源索引,再单击Add Variable按钮,出现变量选择列表框。在字段选择列表框中选择“年份”成员变量,如下图所示。(7)单击OK按钮,即完成“年份”编辑框与“年份”字段成员变量的映射。采用相同的方法为全部编辑框控件建立消息映射,然后编译对话框,则发现可以在编辑框中修改数据表中的记录。3.7 为命令按钮增加函数并编制过程代码3.7.1 “第一条记录”命令按钮的过程代码(1)在对话框中选取“第一条记录”命令按钮。(2)用鼠标右键单击该命令按钮,出现一个快捷菜单。(3)在快捷菜单中单击“建立类向导”菜单项,出现一个消息映射的对话框。(4)在消息映射的对话框中选择Message Maps页面,选择消息类型为“ON_CLICKED”并单击Add Function按钮,出现一个函数命令对话框,建议接受系统命名的函数名即可。(5)确认函数名后单击Edit Code按钮,出现代码编辑框,在代码编辑框中编辑命令按钮的代码,如下所示:这样,“第一条记录”命令按钮的过程代码就编辑完成了。采用同样的方法,我们可以编辑其他命令按钮的过程代码。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.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: 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 - 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.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 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);m_pSet-Requery();m_pSet-Update();最后编译执行,结果如下图: 四、流程图及模块图4,1 系统的总体设计 根据对系统需求的分析,可以把系统划分:工资数据处理模块、工资数据浏览模块、增加与删除模块、统计模块。系统总体模块工资数据处理模块工资数据处理模块工资数据处理模块工资数据浏览模块4.2工资数据处理模块职工编号 工资数据处理模块 基本工资 奖金职工姓名 部门 年份 会费 储蓄 房租 津贴业绩工资各种补助 水电费 月份 保险4.3 工资数据浏览模块工资数据浏览模块 最后一条上一条下一条 第一条增加记录 删除记录 刷新纪录 增加与删除模块4.4 增加与删除模块实发合计 扣除合计 统计模块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 工资管理View.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 blocks 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()/ 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 size/ 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 under 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)/ Register the applications 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_CLASS(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(cmdInfo);/ 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 : public 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(CAboutDlg)/ 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_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#include 工资管理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 macros 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 reinitialization 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 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_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_ZGXM = _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)/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_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(职工编号), m_ZGBH);/AFX_FIELD_MAP/ CMySet diagnostics#ifdef _DEBUGvoid CMySet:AssertValid() constCRecordset: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 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_ZGXM = _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)/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_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(职工编号), m_ZGBH);/AFX_FIELD_MAP/ CMySet diagnostics#ifdef _DEBUGvoid CMySet:AssertValid() constCRecord
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海代课教师管理办法
- 仓储物流中心管理办法
- 财务决策保税管理办法
- 中国移动调账管理办法
- 业务指标预警管理办法
- iso热处理管理办法
- 上海联诚销售管理办法
- 规范报销费用管理办法
- 中央企业资金管理办法
- 中央投资补助管理办法
- 幼儿文学课件完整版
- DB6101T3128-2022养老服务规范 助餐服务
- 实验室常规玻璃仪器的操作及注意事项课件
- 临时用地复垦与方案
- 语言学纲要课件
- 地下室开槽引流方案
- 电子课件-《市场营销》-A45-2298完整版教学课件全书电子讲义(最新)
- 新苏教版科学六年级上册教学计划含进度表
- 2021年新苏教版科学六年级上册知识点整理
- 美的观念(玛丽艳)
- 农药学原理课件--作用机制研究的思路和方法
评论
0/150
提交评论