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