vc++工資管理系統(tǒng)設計與實現(xiàn)_第1頁
vc++工資管理系統(tǒng)設計與實現(xiàn)_第2頁
vc++工資管理系統(tǒng)設計與實現(xiàn)_第3頁
vc++工資管理系統(tǒng)設計與實現(xiàn)_第4頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、目錄一、 設計題目 .2二、 系統(tǒng)環(huán)境 .2三、 設計內(nèi)容 .23.1數(shù)據(jù)庫的設計 .23.2創(chuàng)建數(shù)據(jù)庫及其數(shù)據(jù)表 .33.3開放數(shù)據(jù)源。 .43.4創(chuàng)建工資管理系統(tǒng)基本框架.63.5主對話框 IDD_MY_FORM中控件的加入與布局。 .83.6為編輯框控件建立數(shù)據(jù)字段映射 .113.7為命令按鈕增加函數(shù)并編制過程代碼 .13四、流程圖及模塊圖 .174,1系統(tǒng)的總體設計 .174.2工資數(shù)據(jù)處理模塊 .184.3工資數(shù)據(jù)瀏覽模塊 .184.4增加與刪除模塊 .194.5統(tǒng)計模塊 .19五、程序清單 .19六、程序中遇到的問題及解決方法 .38七、心得體會 .38八、參考文獻 .391一、設

2、計題目工資管理系統(tǒng)設計與實現(xiàn)。二、系統(tǒng)環(huán)境windowsXP VC+三、設計內(nèi)容3.1 數(shù)據(jù)庫的設計作為工資管理系統(tǒng),它主要是數(shù)據(jù)庫應用系統(tǒng)數(shù)據(jù)處理,數(shù)據(jù)庫應用系統(tǒng)開發(fā)的前提是首先開發(fā)數(shù)據(jù)庫和數(shù)據(jù)庫中的數(shù)據(jù)表。因此在本案例中,我采用 Microsoft Access 2007 創(chuàng)建數(shù)據(jù)庫和數(shù)據(jù)表。為此我們先定義一個 “職工工資數(shù)據(jù)表 ”的結(jié)構,如下表所示。職工工資數(shù)據(jù)表字段名稱字段類型字段大小小數(shù)位數(shù)索引必須填寫年份數(shù)字整型是月份數(shù)字整型是輸入日期日期 /時間默認是職工編號數(shù)字整型是姓名文本16是部門文本20是基本工資數(shù)字長整型自動是業(yè)績工資數(shù)字長整型自動是獎金數(shù)字長整型自動是津貼數(shù)字長整型自

3、動是各種補助數(shù)字長整型自動是應發(fā)數(shù)數(shù)字長整型自動是水電費數(shù)字長整型自動是2房租數(shù)字長整型自動是儲蓄數(shù)字長整型自動是會費數(shù)字長整型自動是保險數(shù)字長整型自動是扣除總計數(shù)字長整型自動是實發(fā)工資數(shù)字長整自動是型3.2 創(chuàng)建數(shù)據(jù)庫及其數(shù)據(jù)表( 1)啟動 Microsoft Office 2007 中的 Microsoft Access 應用程序,出現(xiàn)下圖所示界面,通過該界面可以創(chuàng)建一個新的數(shù)據(jù)庫。(2)在創(chuàng)建里頭單擊“表設計” ,用戶可以在其中設計一個新的數(shù)據(jù)表結(jié)構。如下圖所示。3在 Microsoft Access 2007 數(shù)據(jù)庫設計器中,用戶可以定義數(shù)據(jù)表的字段名稱、字段類型、字段大小等數(shù)據(jù)表結(jié)構

4、的內(nèi)容。數(shù)據(jù)表結(jié)構一經(jīng)確定,用戶可以打開該數(shù)據(jù)表,在數(shù)據(jù)表中輸入一些基本數(shù)據(jù),以在后面的系統(tǒng)設計中體現(xiàn)設計的效果。最后,系統(tǒng)自動將創(chuàng)建的數(shù)據(jù)表保存在 “D:VC+ 寫作案例 CH432 資管理數(shù)據(jù)庫 ”中,將創(chuàng)建的數(shù)據(jù)表命名為 “職工工資表 ”。3.3 開放數(shù)據(jù)源。4開始設置控制面板管理工具,雙擊數(shù)據(jù)源打開。選擇第二個系統(tǒng) DSN,點擊“添加”選擇Microsoft Access Driver(*.mdb) 。點擊完成。在彈出的對話框中起一個數(shù)據(jù)源名,然后點擊“選擇”,然后在目錄一欄選擇剛才建立的那個表。 選中,點擊確定。一路確定下去, OK 。數(shù)據(jù)源就建立好了。53.4 創(chuàng)建工資管理系統(tǒng)基本

5、框架在前面我已經(jīng)創(chuàng)建了 “工資管理數(shù)據(jù)庫 ”、“職工工資表 ”。它可為應用程序提供一個數(shù)據(jù)源。應用程序就是對該數(shù)據(jù)源的記錄進行訪問、增加、刪除以及數(shù)據(jù)管理的一切操作。有了這一切的工作,用戶就可以著手進行應用系統(tǒng)的構建了。接下來我要創(chuàng)建 “工資管理系統(tǒng) ”應用程序框架,步驟如下:(1)結(jié)束數(shù)據(jù)庫的創(chuàng)建并啟動VC+ ,出現(xiàn) VC+ 主控界面。(2)在 VC+ 主控界面中單擊 “文件 |新建 ”菜單項,出現(xiàn)新建工程類型選擇對話框,在工程類型列表中選擇MFC AppWizard(EXE) 工程類型。(3)輸入工程名稱為 “工資管理系統(tǒng) ”,并選擇 Win32 平臺類型。(4)單擊 “確定 ”按鈕,進入

6、文檔類型設置。(5)選擇單文檔類型,即創(chuàng)建一個單文檔界面的應用程序,設置資源使用語言為中文,選擇文檔查看體系結(jié)構支持。(6)單擊 “下一步 ”按鈕,進入框架設置的第 2 步,如圖的對話框。在該對話框中,需要用戶對數(shù)據(jù)庫的類型作一些相關的選擇。6(7)選擇“查看數(shù)據(jù)庫不使用文件支持”;這時候Data Source按鈕處于可用狀態(tài)(或激活狀態(tài));在這一種選擇下, VC+ 將為應用系統(tǒng)引入數(shù)據(jù)環(huán)境,即數(shù)據(jù)源,該數(shù)據(jù)源就是我們在前面創(chuàng)建的 “工資數(shù)據(jù)庫 ”,而不使用其他類型數(shù)據(jù)的文件支持。但數(shù)據(jù)源在系統(tǒng)制作中的引入需要用一定的驅(qū)動程序為之進行。(8)單擊 “ Data Source按鈕”,出現(xiàn)圖下圖所

7、示的選擇數(shù)據(jù)源類型的對話框。73.5 主對話框 IDD_MY_FORM 中控件的加入與布局。(1)在主對話框 IDD_MY_FORM 中放入各種需要的控件,如標簽控件、編輯框控件、命令按鈕控件,如下圖。各個控件的屬性設置如下表:標簽對象的基本屬性ID標題內(nèi)容IDC_STATICCAPTION職工工資管理系統(tǒng)8IDC_STATICNE年份IDC_STATICYF月份IDC_STATICZGBH職工編號IDC_STATICZGXM職工姓名IDC_STATICZGBM部門IDC_STATICJBGZ基本工資IDC_STATICJJ獎金IDC_STATICYJGZ業(yè)績工資IDC_STATICJT津貼I

8、DC_STATICGZBZ各種補助IDC_STATICRDF水電費IDC_STATICFZOU房租IDC_STATICCX儲蓄IDC_STATICHF會費IDC_STATICBX保險IDC_STATICYFHJ應發(fā)合計IDC_STATICKCHJ扣除合計IDC_STATICSFGZ實發(fā)工資編輯框空間的基本屬性和編輯內(nèi)容ID編輯內(nèi)容IDC_EDITNF年份IDC_EDITYF月份IDC_EDITZGBH職工編號IDC_EDITZGBM所在部門IDC_EDITZGXM職工姓名IDC_EDITJBGZ基本工資9IDC_EDITJJ獎金IDC_EDITYJGZ業(yè)績工資IDC_EDITJT津貼IDC_E

9、DITGZBZ各種補助IDC_EDITRDF水電費IDC_EDITFZOU房租IDC_EDITCX儲蓄IDC_EDITHF會費IDC_EDITBX保險IDC_EDITYFHJ應發(fā)合計IDC_EDITKCHJ扣除合計IDC_EDITSFGZ實發(fā)工資命令按鈕對象的基本屬性和內(nèi)容ID標題內(nèi)容IDC_BUTIONFIRST|第一條IDC_BUTIONNEXT下一條IDC_BUTIONPREV前一條IDC_BUTIONLAST|最后一條IDC_BUTIONSUM執(zhí)行統(tǒng)計IDC_RADIOADD增加記錄IDC_RADIODELETE刪除記錄IDC_RADIOUPDATE刷新記錄分組對象控件的基本屬性ID標

10、題IDC_STATICDATA工資數(shù)據(jù)處理10IDC_STATICBROWSE工資數(shù)據(jù)瀏覽3.6 為編輯框控件建立數(shù)據(jù)字段映射(1)在主對話框 IDD_MY FORM 中選取“年份”編輯框控件。(2)用鼠標右鍵單擊該對話框,出現(xiàn)一個快捷菜單。(3)在快捷菜單中單擊 “建立類向?qū)?”,出現(xiàn)類向?qū)υ捒颉#?)在類向?qū)υ捒蛑袑㈨撁媲袚Q至 Member Variables 頁面并設置類名為CmySet。該對話框列出了數(shù)據(jù)集的全部字段名、字段類型和字段的成員變量名稱,但成員變量名是在創(chuàng)建數(shù)據(jù)源時自動生成的,往往不便于與編輯框建立映射關系,為此將全部成員變量名稱刪除,并重新定義字段的成員變量名稱。重新

11、定義后的字段變量名稱如下圖所示。(5)在 Classname列表中選擇 CmyView ,出現(xiàn)為編輯框控件與字段成員變量建立消息映射的頁面,如下圖所示。11(6)選中 IDC_EDITNF( 年份編輯 )控件資源索引,再單擊 Add Variable 按鈕,出現(xiàn)變量選擇列表框。在字段選擇列表框中選擇 “年份 ”成員變量,如下圖所示。(7)單擊 OK 按鈕,即完成 “年份 ”編輯框與 “年份 ”字段成員變量的映射。12采用相同的方法為全部編輯框控件建立消息映射,然后編譯對話框,則發(fā)現(xiàn)可以在編輯框中修改數(shù)據(jù)表中的記錄。3.7 為命令按鈕增加函數(shù)并編制過程代碼3.7.1 “第一條記錄 ”命令按鈕的過

12、程代碼( 1)在對話框中選取 “第一條記錄 ”命令按鈕。( 2)用鼠標右鍵單擊該命令按鈕,出現(xiàn)一個快捷菜單。( 3)在快捷菜單中單擊 “建立類向?qū)?”菜單項,出現(xiàn)一個消息映射的對話框。( 4)在消息映射的對話框中選擇 Message Maps 頁面,選擇消息類型為 “ ON_CLICKED”并單擊 Add Function 按鈕,出現(xiàn)一個函數(shù)命令對話框,建議接受系統(tǒng)命名的函數(shù)名即可。( 5)確認函數(shù)名后單擊 Edit Code 按鈕,出現(xiàn)代碼編輯框,在代碼編輯框中編輯命令按鈕的代碼,如下所示:這樣, “第一條記錄 ”命令按鈕的過程代碼就編輯完成了。采用同樣的方法,我們可以編輯其他命令按鈕的過程

13、代碼。133.7.2 “下一條記錄 ”命令按鈕的過程代碼void CMyView:OnButionnext()/ TODO: Add your control notification handler code here m_pSet-MoveNext();if(m_pSet-IsEOF()MessageBox( 已經(jīng)是最后了!);m_pSet-MovePrev();UpdateData(FALSE);return;UpdateData(FALSE);3.7.3“上一條記錄 ”命令按鈕的過程代碼void CMyView:OnButionprev()/ TODO: Add your contro

14、l notification handler code here m_pSet-MovePrev();if(m_pSet-IsBOF()MessageBox(已經(jīng)是第一條了! );m_pSet-MoveNext();UpdateData(FALSE);return;UpdateData(FALSE);143.7.4“最后一條記錄 ”命令按鈕的過程代碼void CMyView:OnButionlast()/ TODO: Add your control notification handler code here m_pSet-MoveLast();if(m_pSet-IsEOF()Messag

15、eBox(已經(jīng)是最后了! );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 notific

16、ation handler code here15m_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 here m_pSet-Edit();UpdateData();m_pSet-Update

17、(); m_pSet-Requery(); m_pSet-CancelUpdate();3.7.8 “執(zhí)行統(tǒng)計 ”命令按鈕的過程代碼void CMyView:OnButionsum()/ TODO: Add your control notification handler code here m_pSet-Edit();m_pSet-m_YJGZ=m_pSet-m_JBGZ+m_pSet-m_JJ+m_pSet-m_YJ GZ+m_pSet-m_JT+m_pSet-m_GZBZ;m_pSet-m_KCZJ=m_pSet-m_CX+m_pSet-m_HF+m_pSet-m_FZO U+m_pS

18、et-m_RDF+m_pSet-m_BX;m_pSet-m_SFGZ=m_pSet-m_YJGZ-m_pSet-m_KCZJ;16UpdateData(FALSE);m_pSet-Requery();m_pSet-Update();最后編譯執(zhí)行,結(jié)果如下圖:四、流程圖及模塊圖4,1 系統(tǒng)的總體設計根據(jù)對系統(tǒng)需求的分析, 可以把系統(tǒng)劃分: 工資數(shù)據(jù)處理模塊、 工資數(shù)據(jù)瀏覽模塊、增加與刪除模塊、統(tǒng)計模塊。系統(tǒng)總體模塊工工工工資資資資數(shù)數(shù)數(shù)數(shù)據(jù)據(jù)據(jù)據(jù)瀏處處處覽理理理模模模模塊塊塊塊174.2 工資數(shù)據(jù)處理模塊保險會費儲蓄房租月份年份職工編號職工姓名工 資 數(shù)據(jù)處理模部門塊水電費各種補助4.3 工資數(shù)

19、據(jù)瀏覽模塊津貼業(yè)績工資基本工資獎金工資數(shù)據(jù)瀏覽模塊下上最第一一后一條條一條條184.4 增加與刪除模塊增加與刪除模塊增刪刷加除新記記紀錄錄錄4.5 統(tǒng)計模塊統(tǒng)計模塊應實扣發(fā)發(fā)除合合合計計計五、程序清單5.1 / 工資管理 .cpp : Defines the class behaviors for the application./#include stdafx.h#include 工資管理 .h19#include MainFrm.h#include ChildFrm.h#include 工資管理 Set.h#include 工資管理 Doc.h#include 工資管理 View.h#if

20、def _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 macroshere./ DO NOT EDIT what you see in these blocks of generate

21、dcode!/AFX_MSG_MAP/ Standard file based document commands20ON_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 c

22、onstruction code here,/ Place all significant initialization in InitInstance/ The one and only CMyApp objectCMyApp theApp;/ CMyApp initializationBOOL CMyApp:InitInstance()21AfxEnableControlContainer();/ Standard initialization/ If you are not using these features and wish to reduce the size/ of your

23、 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 sharedDLL#elseEnable3dControlsStatic();/ Call this when linking to MFC statically #endif/ Change the registry key under which

24、 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 (includingMRU)/ Register the applications

25、document templates. Document templates/ serve as the connection between documents, frame windows and22views.CMultiDocTemplate* pDocTemplate;pDocTemplate = new CMultiDocTemplate(IDR_MYTYPE,RUNTIME_CLASS(CMyDoc),RUNTIME_CLASS(CChildFrame), / custom MDI child frame RUNTIME_CLASS(CMyView);AddDocTemplate

26、(pDocTemplate);/ create main MDI Frame window CMainFrame* pMainFrame = new CMainFrame;if (!pMainFrame-LoadFrame(IDR_MAINFRAME) return FALSE;m_pMainWnd = pMainFrame;/ Parse command line for standard shell commands, DDE, file open CCommandLineInfo cmdInfo; ParseCommandLine(cmdInfo);/ Dispatch commands

27、 specified on the command lineif (!ProcessShellCommand(cmdInfo)return FALSE;23/ 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(

28、);/ Dialog Data/AFX_DATA(CAboutDlg)enum IDD = IDD_ABOUTBOX ;/AFX_DATA/ ClassWizard generated virtual function overrides /AFX_VIRTUAL(CAboutDlg)protected:24virtual void DoDataExchange(CDataExchange* pDX);/ DDX/DDVsupport/AFX_VIRTUAL/ Implementation protected:/AFX_MSG(CAboutDlg)/ No message handlers/A

29、FX_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_MAP25BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)/AFX_MSG_MAP(CAboutDlg)/ No messag

30、e handlers/AFX_MSG_MAPEND_MESSAGE_MAP()/ App command to run the dialog void CMyApp:OnAppAbout()CAboutDlg aboutDlg; aboutDlg.DoModal();/ CMyApp message handlers5,2 / 工資管理 Doc.cpp : implementation of the CMyDoc class/#include stdafx.h#include 工資管理 .h#include 工資管理 Set.h26#include 工資管理 Doc.h#ifdef _DEBU

31、G#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 macroshere./ DO NOT EDIT what you see in these blocks of generatedcode

32、!/AFX_MSG_MAPEND_MESSAGE_MAP()/ CMyDoc construction/destruction27CMyDoc: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;/28/ CMyDoc serializationvoid CMyDoc:Serialize(CArchive& ar)if (ar.IsStoring()/ TOD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論