基于PowerBuilder開發(fā)的圖書管理系統(tǒng)

2022-12-20 10:23:21 來源:51CTO博客

基于PowerBuilder開發(fā)的圖書管理系統(tǒng)


前言

本項(xiàng)目采用PowerBuilder12.6作為IDE,PowerBuilder(簡稱PB)是一種快速應(yīng)用程序開發(fā)工具(RAD),和Delphi、Visual Basic齊名。


(資料圖)

本項(xiàng)目開發(fā)的圖書管理系統(tǒng)可以作為演示系統(tǒng),或者作為一個(gè)PB入門項(xiàng)目,用于PB練手或者老項(xiàng)目維護(hù)時(shí)對PB的溫習(xí)。

gitee開放源碼地址為:???https://gitee.com/radarfyh/library_manager.git??


1. 需求說明

總體需求用于管理小型圖書館或者圖書室,圖書管理員能夠使用本系統(tǒng)維護(hù)用戶,對圖書分類和入庫,并提供借還操作用戶管理提供增刪改查功能分類管理提供圖書分類的增刪改查功能圖書管理提供圖書的入庫、出庫、查詢等功能借書管理提供用戶對圖書的借還操作、查詢功能

本項(xiàng)目用于演示,系統(tǒng)需求說明書暫時(shí)不編寫。


2. 系統(tǒng)設(shè)計(jì)

系統(tǒng)采用C/S架構(gòu),Server采用Oracle數(shù)據(jù)庫,Client采用PB提供的Window和DataWindow對象。總體業(yè)務(wù)架構(gòu)設(shè)計(jì)如下圖:

oracle數(shù)據(jù)庫的安裝請參考如下文章:???完美方案:win7/win10下正確安裝oracle 10g??

Oracle數(shù)據(jù)庫管理系統(tǒng)可以采用10g或者11g,這兩個(gè)版本有何區(qū)別,請參考如下文章:???Oracle 10g和11g比較??

總體設(shè)計(jì)說明書暫時(shí)不編寫。


3. 數(shù)據(jù)庫設(shè)計(jì)

數(shù)據(jù)庫建模采用ER方法,實(shí)體劃分:用戶、圖書,圖書分類操作結(jié)果單獨(dú)設(shè)計(jì)一個(gè)關(guān)系:圖書分類,用戶和圖書的關(guān)系形成借還記錄。

(1)數(shù)據(jù)庫邏輯設(shè)計(jì)(采用PowerDesigner工具)如下圖:

(2)數(shù)據(jù)庫物理設(shè)計(jì)(采用PowerDesigner工具)如下圖:

PB訪問Oracle數(shù)據(jù)庫采用OCI接口,如果PB連接Oracle數(shù)據(jù)庫出現(xiàn)問題,請參考如下文章試試:???32位IDE訪問Oracle 數(shù)據(jù)庫錯(cuò)誤的解決??

數(shù)據(jù)庫設(shè)計(jì)說明書暫時(shí)不編寫。


4. 數(shù)據(jù)庫腳本和數(shù)窗設(shè)計(jì)

(1)數(shù)據(jù)庫腳本導(dǎo)出和修改

使用PowerDesigner可以導(dǎo)出Oracle腳本,導(dǎo)出之前需要做如下設(shè)置,注意我使用Oracle 11g,所以下面假定使用11g。

選擇菜單“Change current DBMS ...”,打開change the target dbms窗口,在其中設(shè)置目標(biāo)數(shù)據(jù)庫為oracle 11g,如下圖:選擇菜單“Edit Current DBMS ...”,在General選項(xiàng)卡的左邊樹中選擇Oracle Version 11G-->Script-->Sql-->Format-->CaseSensitivityUsingQuote,然后點(diǎn)選No,如下圖:選擇菜單“Generate Database...”,在General選項(xiàng)卡中設(shè)置腳本文件導(dǎo)出文件夾和名稱,最后點(diǎn)確定就會(huì)導(dǎo)出SQL建庫腳本,如下圖:

導(dǎo)出的SQL腳本沒有表空間、用戶、授權(quán)腳本,需要加上。索引、非空列、默認(rèn)值、主鍵、外鍵均需檢查是否正確,再增加一些測試記錄,形成最終的腳本放在SQL目錄下。

(2)數(shù)窗設(shè)計(jì)

本項(xiàng)目采用PB作為IDE,中間層采用DataWindow(簡稱:數(shù)窗或者DW),DataWindow是PB提供的中間層對象,作為數(shù)據(jù)庫和窗口之間的聯(lián)系紐帶。數(shù)窗設(shè)計(jì)如下:

dw_type 分類管理對象

瀏覽編輯圖書分類記錄,如下圖:

關(guān)鍵屬性包括:Freeform風(fēng)格、QuickSelect數(shù)據(jù)源、選擇t_type表的所有列、ID升序排列、邊框樣式采用ShadowBox。

dw_book 圖書管理對象

瀏覽編輯圖書記錄,如下圖:

關(guān)鍵屬性包括:Grid 風(fēng)格、QuickSelect數(shù)據(jù)源、選擇 t_book 表的所有列、不設(shè)排序、邊框樣式采用Raised、列標(biāo)題背景為Button Face、typeid列的Style Type=DropDownDW、typeid列的DataWindow=dw_book_type、typeid列的Display Column=id、typeid列的Data Column=id、company列的屬性和typeid列的屬性類似設(shè)置。

還有兩個(gè)子對象:dw_book_type,dw_book_company,前者(dw_book_type)用作圖書分類列的數(shù)據(jù)源,如下圖:

關(guān)鍵屬性包括:Tabular 風(fēng)格、QuickSelect數(shù)據(jù)源、選擇t_type表的所有列、ID升序排列、邊框樣式采用ShadowBoxtype表的所有列、ID升序排列、邊框樣式采用ShadowBox。

后者(dw_book_company)用作出版社列的數(shù)據(jù)源,如下圖:

關(guān)鍵屬性包括:Tabular 風(fēng)格、External數(shù)據(jù)源(外部數(shù)據(jù)源定義為ID/string/5和title/string/20,斜杠分隔的第一個(gè)數(shù)據(jù)是列名,第二個(gè)是數(shù)據(jù)類型,第三個(gè)是長度)、列標(biāo)題背景為Button Face、列對象的Display ONLY屬性值為TRUE、列對象的Show Focus Rectangle設(shè)為false。

dw_user 用戶管理對象

瀏覽編輯用戶記錄,如下圖:

關(guān)鍵屬性包括:Freeform風(fēng)格、QuickSelect數(shù)據(jù)源、選擇t_user表的所有列、ID升序排列、邊框樣式采用ShadowBox。

dw_log 借還管理對象

記錄借還操作,如下圖:

關(guān)鍵屬性設(shè)置參見源代碼,不在此列出。

有兩個(gè)子對象:dw_log_book 和 dw_log_user,前者(dw_log_book )用作圖書單列的數(shù)據(jù)源,如下圖:

其關(guān)鍵屬性設(shè)置參見源代碼,不在此列出。

后者(dw_log_user)用作用戶單列的數(shù)據(jù)源,如下圖:

dw_log_user關(guān)鍵屬性設(shè)置參見源代碼,不在此列出。

查詢類對象包括:dw_query_user 和 dw_query_log前者(dw_query_user )用作用戶查詢選擇,如下圖:

注意這里需要?jiǎng)?chuàng)建一個(gè)query對象,命名為q_user,數(shù)據(jù)源就關(guān)聯(lián)這個(gè)query對象,其他關(guān)鍵屬性設(shè)置參見源代碼,不在此列出。

后者(dw_query_log)用于選擇指定用戶的借書記錄,如下圖:

dw_query_log關(guān)鍵屬性設(shè)置參見源代碼,不在此列出。


5. 窗口設(shè)計(jì)

PB支持可視化窗口界面設(shè)計(jì),這是他能快速開發(fā)應(yīng)用程序的原因之一。下圖是窗口設(shè)計(jì)總圖:

具體設(shè)計(jì)參見源碼。


6. 事件代碼

PB是事件驅(qū)動(dòng)的,所以幾乎所有代碼都在控件的事件中。具體事件的代碼編寫參見源碼,其中有詳細(xì)的注釋。


7. 系統(tǒng)測試

執(zhí)行后主界面如下圖:

分類管理界面如下圖:

用戶管理界面如下圖:

圖書管理界面如下圖:

借書管理界面如下圖:

記錄查詢界面如下圖:

關(guān)于界面如下圖:


8. 開放源碼

gitee開放源碼地址為:??https://gitee.com/radarfyh/library_manager.git??

標(biāo)簽: 關(guān)鍵屬性 邊框樣式 屬性設(shè)置

上一篇:每日快播:vivo 推薦業(yè)務(wù) x DeepRec:全鏈路優(yōu)化實(shí)踐
下一篇:環(huán)球熱推薦:Go 實(shí)現(xiàn)線性查找算法和二分查找算法