黃 越,游 丹,楊存榜,熊 勇
(中國工程物理研究院激光聚變研究中心,四川 綿陽 621900)
PowerBuilder是由Sybase公司推出的一種廣泛應(yīng)用于C/S結(jié)構(gòu)下的數(shù)據(jù)庫前端開發(fā)工具,它采用面向?qū)ο蟮脑O(shè)計思想和可視化的圖形界面,具有良好的開放性和操作性[1]。數(shù)據(jù)窗口是PowerBuilder的核心技術(shù),它是一類功能十分強大的對象,通過它可以高效地對數(shù)據(jù)庫中的數(shù)據(jù)進行添加、刪除、修改、查詢、瀏覽等操作,無需另外編寫SQL代碼。數(shù)據(jù)窗口對象在數(shù)據(jù)檢索和處理方面的強大功能使得它在統(tǒng)計報表制作方面顯示出突出的優(yōu)越性[2]。
在目前眾多利用PowerBuilder開發(fā)的項目信息管理系統(tǒng)中,項目的進度管理界面多是采用數(shù)據(jù)列表的形式,通過列表中的時間和文本數(shù)據(jù)表現(xiàn)項目的進展情況。這種方式便于用戶對數(shù)據(jù)進行操作,卻不能直觀地顯示項目的進度信息。不同于傳統(tǒng)的進度管理,這里所設(shè)計的項目進度管理界面以甘特圖為設(shè)計思想,利用數(shù)據(jù)窗口對象生成數(shù)據(jù)列表和圖形界面,并將列表中的數(shù)據(jù)轉(zhuǎn)化為圖形輸出,這樣一方面,用戶可以在數(shù)據(jù)列表中對數(shù)據(jù)進行添加、刪除、修改和查詢操作;另一方面,又可以通過圖形界面直觀地獲取項目的進度信息。
項目進度管理的主要功能是幫助用戶獲取項目進展的關(guān)鍵節(jié)點信息,包括項目階段名稱、各階段起止時間、耗時、各階段之間的關(guān)系等。甘特圖就是一種能充分表現(xiàn)這種功能的工具。根據(jù)用戶需求,在設(shè)計的項目進度功能界面既需包含數(shù)據(jù)列表,又需包含以列表中的數(shù)據(jù)為支撐的圖形界面。圖1顯示了項目進度管理功能的任務(wù)需求。
圖1 項目進度管理功能任務(wù)需求
項目進度管理功能涉及3個表,tab_project(項目信息表)、tab_schedule(項目進度表)和tab_milestone(項目階段表)。各表包含的字段如表1、表2、表3所示,下劃線標注的字段為主鍵。
表1 tab_project項目信息表
表2 tab_schedule項目進度表
表3 tab_milestone項目階段表
項目進度管理的功能如圖2所示。為了方便瀏覽各類信息,同時使窗體布局簡潔,采用在一個Tab控件上建立多個Tab頁的方式實現(xiàn)進度管理的各類功能。其中,圖形進度界面是設(shè)計的重點。圖形進度界面以數(shù)據(jù)窗口控件為載體,通過后臺計算,將數(shù)據(jù)列表中的數(shù)字信息轉(zhuǎn)化為圖形輸出。利用甘特圖為設(shè)計思想,以項目進展的各階段為單位,以不同顏色的條形圖代表不同的項目階段,以條形圖的長短代表項目階段用時的長短,以柱狀條的起止點表示該階段在項目周期里的起止位置,點擊每一階段的條形圖,可以顯示該階段具體的起止時間。
圖2 項目進度管理的功能
鑒于數(shù)據(jù)窗口對象與數(shù)據(jù)庫良好的交互性,設(shè)計的項目進度管理的所有子功能模塊都通過數(shù)據(jù)窗口實現(xiàn)。
新建一個Grid風(fēng)格的數(shù)據(jù)窗口dw_schedule,數(shù)據(jù)源選擇 tab_schedule,將 Mst_id、Beg_time、End_time設(shè)置為可視,其余設(shè)為隱藏。添加一個Compute控件,在計算公式(Compute Expression)中輸入:daysafter(Beg_time,End_time),由此得出項目各階段耗時天數(shù)。
在Window頁面中新建一個Tab控件,在tabpage_1中添加兩個數(shù)據(jù)窗口控件,一個為寫入窗口,一個為讀出窗口。第一個數(shù)據(jù)窗口作為用戶錄入、保存項目階段信息的界面,包含“新增”、“取消”和“保存”功能,當用戶為項目錄入某一階段的基本信息后,系統(tǒng)自動將其保存至數(shù)據(jù)庫相應(yīng)的數(shù)據(jù)表中。第二個數(shù)據(jù)窗口用于顯示項目階段信息,設(shè)置其數(shù)據(jù)對象為dw_schedule,運行時系統(tǒng)將自動讀取數(shù)據(jù)庫,以列表的形式顯示各階段信息,添加“刪除”、“刷新”兩個按鈕,方便用戶刪除某一階段的信息并實時更新。
為了區(qū)別各階段的時間進度,可以為各階段的時間進度條設(shè)置不同的顏色,通過系統(tǒng)函數(shù)ChooseColor()打開拾色器,選擇所需的顏色并將代表顏色的數(shù)值寫回到表tab_milestone的Mst_color列里。
使用數(shù)據(jù)窗口實現(xiàn)圖形顯示項目進度的功能。新建一個Grid風(fēng)格的數(shù)據(jù)窗口dw_schedule_view,數(shù)據(jù)源選擇 tab_project的 Jh_beg_time、Jh_end_time、Sj_beg_time、Sj_end_time,tab_schedul的 Pro_id、Mst_id、Beg_tiem、End_tiem 和 tab_milestone 的 Mst_color,將tab_schedule_Mst_id設(shè)置為可視,其余設(shè)為隱藏。設(shè)置tab_schedule_Mst_id的數(shù)據(jù)欄(Data Column)為Mst_id,顯示欄(Display Column)為 Mst_name。再添加一個rectangle控件r_1作為顯示項目階段的時間進度條,放至在tab_schedule_Mst_id右側(cè)。設(shè)置控件r_1的屬性Brush color和 Pen color的公式為 tab_milestone_Mst_color。為了實現(xiàn)項目各階段時間進度條在項目周期內(nèi)按時間比例的顯示,需要對每個項目階段的進度條r_1的起點坐標(r_1.X)和寬度(r_1.Width)進行計算,這也是進度管理功能最重要的地方,其中,r_1.X的計算公式為式(1)和式(2)。
當項目尚未結(jié)束,項目實際結(jié)束時間沒有確定,X的坐標為:
當項目已經(jīng)結(jié)束,項目實際結(jié)束時間已經(jīng)確定,X的坐標為:
每個項目階段進度條的寬度與項目階段的起始時間有關(guān),計算r_1.Width的公式為式(3)和式(4)。
當項目尚未結(jié)束,項目實際結(jié)束時間沒有確定,X的坐標為:
當項目已經(jīng)結(jié)束,項目實際結(jié)束時間已經(jīng)確定,X的坐標為:
公式(1)~公式(4)中,X0代表矩形控件r_1在數(shù)據(jù)窗口對象dw_schedule_view中起始點的X坐標,W0代表r_1在dw_schedule_view中的初始寬度。
在Window頁面中為Tab控件添加一個新頁,命名為tabpage_2,并添加一個數(shù)據(jù)窗口控件,其數(shù)據(jù)對象選擇為dw_schedule_view。該窗口主要用于顯示項目各階段的用時信息,為了實現(xiàn)點擊任一進度條可以顯示項目階段起始日期的功能,可以在數(shù)據(jù)窗口控件的clicked()函數(shù)中編輯如下代碼:
在Window頁面中為Tab控件添加一個新頁,命名為tabpage_3,并添加一個圖形控件,命名為 gr_phase,該控件用于顯示項目各階段的耗時。gr_phase的標題為“時間消耗比例圖”,橫坐標(Category)設(shè)置為“項目階段”,縱坐標(Value)設(shè)置為各階段的“歷時天數(shù)”。
為了實現(xiàn)變換圖表類型的功能,需要定義一個用戶類,向用戶提供可選擇的圖表類型,將這個類命名為u_graph_gallery。在類上添加一個圖形控件p_gallery,控件顯示的圖片是面積圖、條形圖、柱形圖、折線圖、餅圖、xy散點圖等眾多圖表類型小標志的集合,在其click()函數(shù)中進行相關(guān)定義,通過獲取用戶鼠標點擊的x、y坐標來計算用戶點擊的是哪種圖標類型的小標志,再利用函數(shù)of_choose_type()改變當前圖標類型。
根據(jù)以上的設(shè)計思想,編寫代碼實現(xiàn)了項目進度管理的功能界面,圖3至圖5展示了此進度管理模塊的各項功能。
圖3 項目階段信息的錄入及顯示
圖4 圖形顯示項目各階段
圖5 統(tǒng)計項目各階段時間消耗比例圖
本文介紹的項目進度管理功能界面已在項目管理系統(tǒng)中得到應(yīng)用,其前臺操作系統(tǒng)為Windows XP,開發(fā)工具為PowerBuilder 10,后臺數(shù)據(jù)庫為MS SQL Server 2000。實踐表明,進度功能管理界面能成功地將項目階段的數(shù)字信息轉(zhuǎn)化為圖形輸出,提高了信息辨識度。
[1]盧守東.PowerBuilder數(shù)據(jù)庫應(yīng)用開發(fā)技術(shù)[M].北京:清華大學(xué)出版社,2006.
[2]余金山.PowerBuilder 10參考手冊——PowerBuilder 10企業(yè)應(yīng)用程序開發(fā)系列[M].北京:科學(xué)出版社,2005.
[3]江正濤.用PowerBuilder制作任務(wù)進度條[J].華南金融電腦,2004,12(9):47.
[4]王艷君,趙書良,邱志宇.基于PowerBuilder的圖形化管理信息系統(tǒng)的研究與實現(xiàn)[J].計算機應(yīng)用與軟件,2004,21(3):40-41.
[5]王羨欠,周燕玲.PowerBuilder 9與Flash的交互編程[J].計算機與現(xiàn)代化,2009(9):129-131.
[6]王羨欠,周燕玲.基于PowerBuilder實現(xiàn)S-P表曲線自動繪制[J].計算機與現(xiàn)代化,2011(4):128-130.
[7]劉宇,趙嵩正,徐恒.基于Graph圖形控件技術(shù)的休哈特控制圖設(shè)計與實現(xiàn)[J].微型電腦應(yīng)用,2007,23(6):51-52,55.
[8]王占清,蘇茜.PowerBuilder項目開發(fā)實踐[M].北京:中國鐵道出版社,2003.
[9]張英杰,曹巖,曾高強.PowerBuilder應(yīng)用工程軟件開發(fā)指南[M].西安:西安交通大學(xué)出版社,2005.
[10]周復(fù)明,王志科,王東.PowerBuilder+Oracle項目開發(fā)實例詳解[M].北京:中國鐵道出版社,2004.
[11]王晟,鄧遠輝.PowerBuilder數(shù)據(jù)庫開發(fā)經(jīng)典案例解析[M].北京:清華大學(xué)出版社,2005.
[12]何旭洪,傅立宏.PowerBuilder9.0信息管理系統(tǒng)開發(fā)實例導(dǎo)航[M].北京:人民郵電出版社,2005.
[13]向隅.新編 PowerBuilder程序設(shè)計實例教程[M].北京:清華大學(xué)出版社,2009.
[14]姚策,王東.PowerBuilder程序設(shè)計技能百練[M].北京:中國鐵道出版社,2004.