vc 中Dao資料庫的簡單應用例項

2021-05-21 22:08:51 字數 3684 閱讀 2118

1、工資管理系統

該系統在磁碟上儲存了某單位上月全體員工的工資資訊,對於每一位職工儲存以下資訊:

月份,職工編號,基本工資,津貼,崗貼,補貼,房貼,交通補貼,應發數,房租,儲蓄,會費,個人所得稅,應扣數,實發數。

個人所得稅計算方法設定為:工資少於800元為0,800-1000元的部分為5%,1000-5000元的部分為10%,5000元以上的部分為20%。

該系統功能如下:

1)建立儲存職工工資資訊的儲存系統。

2)新增職工的工資資訊(增加新職工時用)

3)刪除某職工的工資資訊(職工離職或者死亡時用)

4)修改某職工的部分工資資訊(當月開始增加或減少某些項工資或扣款數變化)

5)輸出指定編號職工的工資資訊(查詢用)

6)輸出當月全體職工的工資資訊(發工資用)

編譯說明:

本工程用vc2005編寫,在vc6.0下無法編譯(沒有dsp和dsw檔案)。 沒有使用寬字元。如果需要移植到6.0下,可以先用vc6.0新建乙個與此工程同名(wagemanager)的sdi單文件工程,把本工程下的所有.h和.cpp檔案拷貝到新建的工程目錄下覆蓋,然後在編譯器的檔案面板中將各個檔案新增到新建的工程中。除此之外還需要將res目錄下的檔案也覆蓋到6.0下新建的工程資料夾內。

在vc2005中dao資料庫的使用僅僅只需要包含afxdao.h,不清楚在vc6.0中此檔案是否存在。

在其他的電腦上演示時,建議使用release版本(release目錄下的執行檔案)。除非對方電腦上裝了與你同樣的vc++編譯器,否則debug版本(debug目錄下的執行檔案)很可能因為找不到必要的dll庫而不能啟動。測試release版本在沒有裝vc和microsoft access的pc上使用正常

工資資訊資料表檔案wageinfo.mdb必須和應用程式處在同一目錄內,當找不到該檔案或者檔案無法開啟時,會自行建立乙個空的資料表。

程式設計過程:

根據題目要求,程式框架為sdi單文件,用dao操作mdb資料庫儲存全體員工的工資資訊,用clistview列表檢視顯示資料表中所有員工的資訊,與檢視關聯的文件類沒用到。

1、新建mfc單文件(sdi)工程,在最後一步將預設的cview類更改為clistview類;

2、在stdafx.h中新增語句:#include"afxdao.h" ,用以支援dao資料庫操作。

3、自定義工資資訊資料表類:cwagedbdaoset。該類由cdaorecordset公有派生而來。類的具體定義見**檔案wagedbdaoset.h和wagedbdaoset.cpp。

4、在資料表類cwagedbdaoset中過載了它的基類的三個函式:getdefaultdbname()、getdefaultsql()和dofieldexchange()。它們的作用分別是:

getdefaultdbname():指定預設的資料庫檔名稱,本程式不允許使用者更改資料庫檔案,也沒這個必要;

getdefaultsql():指定預設資料庫中預設的資料表(乙個個資料庫檔案中可以有多個表,與excel類似)。

dofieldexchange():將表中的各個欄位與變數關聯起來,便於自動讀取資料(與對話方塊類的dodataexchange函式類似)。

5、另外為cwagedbdaoset類自定義了乙個函式createwageinfomdb(),作用是建立乙個空的工資資訊表。這個函式只在程式在某台pc上首次執行時呼叫,或者在資料庫檔案丟失損壞時呼叫。

6、在檢視類的標頭檔案wagemanagerview.h中包含自定義資料表類的標頭檔案,並在該檢視類中宣告乙個cwagedbdaoset物件 m_wagedb.

7、在檢視類的初始化函式oninitialupdate()中初始化檢視列表,包括:將檢視屬性定義為報表(lvs_report)、有邊框(lvs_border)、單選(lvs_singlesel)、選擇常顯示(lvs_showselalways)、網格(lvs_ex_gridlines)、選擇整行(lvs_ex_fullrowselect); 設定顯示字型為「新宋體」,字高110點;按照題目中要求新增16項。

8、在程式啟動時,需要開啟檢查資料庫,因此在檢視類中新增乙個openandcheckdb()函式,它將在檢視初始化函式的結尾處被呼叫。用try——catch語句開啟資料表,如果開啟失敗,說明資料庫不存在,給出錯誤資訊,並嘗試建立新的資料庫檔案,即呼叫cwagedbdaoset類的createwageinfomdb()函式。

9、開啟資料表後,需要將資料表的資訊顯示出來,為此在cwagemanagerview檢視類中新增乙個函式updatelistctrl()函式,他將在openandcheckdb()函式的結尾處被呼叫。在以後修改、刪除資料表的部分資訊後也將呼叫該函式重新整理列表檢視。具體的過程見源**。

10、至此,主視窗介面基本完成,接下來完成功能操作。 首先為檢視新增右鍵選單支援,即在檢視視窗內單擊右鍵會彈出乙個選單,選擇相應的選單項可以對資料表執行以操作:新增資訊、刪除資訊、修改資訊、查詢資訊。 該選單是彈出式選單,需要動態建立。選單有兩種狀態:1) 右鍵單擊時如果選擇了某一行資料,則可以執行修改和刪除操作,這兩個選單項為可選狀態;2)右鍵單擊時沒有選中資料,修改刪除操作不能執行,這兩個選單項為不可選狀態(變灰)。

11、用新增類嚮導為檢視類新增nm_rclick訊息。編譯器自動跳到生成的函式內部,新增實現**,具體參見源**。

12、動態建立選單時,需要為每個選單項指定id,用於以後對映訊息函式。新增id的方法為:在resourcesview面板中展開string table,雙擊開啟string table表,在其最後一行雙擊可以依次新增id識別符號、id值、id對應的含義。

13、為動態建立的選單手動新增訊息響應函式。總共有四個選單項,對用的函式分別為:void onadd() 、void ondel()、void onedit()、void onfind()。在檢視類標頭檔案中新增四個函式的宣告。然後開啟檢視類的cpp檔案,找到以語句begin_message_map(cwagemanagerview, clistview)開頭,以end_message_map()結尾的一段。在這兩句之間新增訊息對映巨集:on_command(id,func) 巨集的引數id為某個選單項的id,func為與該選單項對應的訊息函式名。 然後在cpp檔案中新增各個訊息函式的實現**。

14、新增和修改操作要用到對話方塊,這裡在resources view面板中新增乙個對話方塊資源,並且在上面布置好控制項,然後雙擊該對話方塊資源為其新增類。在該類外宣告乙個wageinfo結構體,用於方便的和主對話方塊傳遞引數。 該對話方塊為新增和修改兩個操作所共用,而且在顯示時內容不一樣,所以需要修改該對話方塊類的建構函式,新增乙個bool型變數判斷是何種操作,從而用不同的方式初始化對話方塊和對話方塊的成員函式。具體見源**。

15、刪除操作只需要根據列表中當前選項的id號,設好資料過濾標準,然後找到該項資料即可刪除

16、查詢操作也要用到對話方塊,用來輸入需查詢的職工id。建立方法類似於新增和修改對話方塊。具體的新增、修改、查詢、刪除操作**在檢視類的cpp中

17、**必要處已做了注釋,可參照msdn檢視各函式或語句的具體用法。

18、16個工資資訊項中,應發數、個人所得稅、應扣數、實發數這四項未知,要根據其他資訊計算。程式編寫時只是簡單計算,所以這四項的計算公式不一定正確,需要修改。 所有需要修改計算公式的地方已在wagemanagerview.cpp中標出。(全部在onadd、onedit兩個函式中)

19、由於程式啟動時就開啟了資料庫並且把內容用列表顯示了出來,所以題目中的第六個功能已經滿足,不再做設計。

vc開發資料庫應用中的常用資料轉換

用vc編寫資料庫程式不可避免的會遇到 bstr t cstring ctime這幾個型別之間的轉換問題,令人頭疼。今早上終於算是解決了cstring和ctime的型別轉換問題。ctime cstring ctime t t ctime getcurrenttime cstring sur sur.f...

資料庫簡單語句的應用

總見 侵刪 1.建立資料庫 create database 資料庫名 character set gbk eg.create database samp db character set gbk 建立乙個名為 samp db 的資料庫 2.顯示已存在的資料庫 3.進入某資料庫 use 資料庫名 eg...

sqlserver資料庫的儲存過程 簡單實用

1.學習 2.優缺點 儲存過程的優點 1.儲存過程加快系統執行速度,儲存過程只在建立時編譯,以後每次執行時不需要重新編譯。2.儲存過程可以封裝複雜的資料庫操作,簡化操作流程,例如對多個表的更新,刪除等。3.可實現模組化的程式設計,儲存過程可以多次呼叫,提供統一的資料庫訪問介面,改進應用程式的可維護性...