第一篇:軟件項(xiàng)目總結(jié)報(bào)告
西安科技大市場(chǎng)創(chuàng)新云服務(wù)股份有限公司
項(xiàng)目總結(jié)報(bào)告
XXXXXXXXXXXXXXXXXXXXXXX系統(tǒng)
項(xiàng)目總結(jié)報(bào)告
XXXXXXXXX 2017/7/27 / 4 西安科技大市場(chǎng)創(chuàng)新云服務(wù)股份有限公司
項(xiàng)目總結(jié)報(bào)告 項(xiàng)目概要信息
XXXXXXXXXXXXXXXXXXXXXXX系統(tǒng)的技術(shù)團(tuán)隊(duì)由11人組成,其中項(xiàng)目經(jīng)理1人,需求分析師1人,UI設(shè)計(jì)師1人,開發(fā)人員6人,測(cè)試人員2人。
本項(xiàng)目的前期工作從2017年5月19日開始,歷時(shí)16個(gè)工作日,于6月9日完成需求分析等準(zhǔn)備工作。開發(fā)階段從2017年6月12日開始,歷時(shí)22個(gè)工作日,于7月10日完成全部開發(fā)工作,進(jìn)入外部業(yè)務(wù)人員驗(yàn)證測(cè)試階段,目前,可使用XXXXXXXXXXXXXXXXXXXXXXX的二級(jí)域名進(jìn)行訪問,詳細(xì)信息如下:
用戶資助申報(bào)地址:XXXXXXXXXXXXXXXXXXXXXXX 用戶審核管理地址:XXXXXXXXXXXXXXXXXXXXXXX
本項(xiàng)目的開發(fā)過程有5個(gè)關(guān)鍵的里程碑,具體時(shí)間及內(nèi)容如下: 2017年06月21日:項(xiàng)目初次全新功能開發(fā)完成;
2017年06月29日:項(xiàng)目初次內(nèi)部功能測(cè)試、安全測(cè)試、性能測(cè)試完成; 2017年07月04日:需求變更,準(zhǔn)備進(jìn)行二次開發(fā); 2017年07月10日:項(xiàng)目二次開發(fā)全部完成;
2017年07月11日:項(xiàng)目二次內(nèi)部測(cè)試完成,等待外部業(yè)務(wù)人員驗(yàn)證測(cè)試。項(xiàng)目經(jīng)驗(yàn)
因?yàn)槭浅醮螕?dān)任項(xiàng)目經(jīng)理的角色,我最初找不到切入點(diǎn),領(lǐng)導(dǎo)和同事在整個(gè)的過程中給了我很多的指導(dǎo)和建議。實(shí)際的項(xiàng)目管理工作使我對(duì)自己已學(xué)的理論知識(shí)有了更深刻的體會(huì)。所謂理論指導(dǎo)實(shí)踐,實(shí)踐驗(yàn)證理論,回想整個(gè)項(xiàng)目開發(fā)過程,至少可以總結(jié)了以下幾點(diǎn)經(jīng)驗(yàn): 2.1 溝通討論 信息交換要及時(shí)
溝通討論是貫穿整個(gè)項(xiàng)目生命周期的活動(dòng),團(tuán)隊(duì)成員間信息交換是否及時(shí),更是項(xiàng)目成功的關(guān)鍵。雖然不同角色承擔(dān)不同工作,但都是以達(dá)成項(xiàng)目目標(biāo)為指導(dǎo)的,團(tuán)/ 4 西安科技大市場(chǎng)創(chuàng)新云服務(wù)股份有限公司
項(xiàng)目總結(jié)報(bào)告
隊(duì)成員只有始終保持溝通討論,保證接收到最新的、一致的項(xiàng)目需求信息,才能使得開發(fā)工作順利進(jìn)行,避免出現(xiàn)信息交換不及時(shí)而導(dǎo)致的返工。
對(duì)于溝通,結(jié)合實(shí)際來說,如果需求分析師不能將變更的需求信息及時(shí)傳遞給UI設(shè)計(jì)人員,就會(huì)導(dǎo)致不符合用戶需求的設(shè)計(jì),更會(huì)使開發(fā)人員寫出無用的代碼,這必然導(dǎo)致重設(shè)計(jì)、重編碼,甚至?xí)诱`整體項(xiàng)目進(jìn)度。
對(duì)于討論,尤其是像我這樣缺少經(jīng)驗(yàn)的項(xiàng)目經(jīng)理,不論是制定計(jì)劃,還是工作量識(shí)別,都必須向有經(jīng)驗(yàn)的同事請(qǐng)教,接受正確的建議,才能得到合理的安排。2.2項(xiàng)目范圍 功能邊界要清晰
項(xiàng)目經(jīng)理以需求文檔為依據(jù),將項(xiàng)目范圍及邊界清晰羅列,是把控項(xiàng)目開發(fā)進(jìn)度的先決條件。
對(duì)于XXXXXXXXXXXX系統(tǒng)來說,其功能并不復(fù)雜,且開發(fā)周期短,所以在確定項(xiàng)目范圍并進(jìn)行任務(wù)細(xì)化時(shí),可精確到接口、頁面。把一個(gè)大任務(wù)分解成一個(gè)個(gè)的小任務(wù)的好處是,可以幫助我們更加精確的估計(jì)出它們的工作量,并暴露出很多可能一時(shí)無法想到的工作量,也可以保證后續(xù)進(jìn)行項(xiàng)目開發(fā)過程的狀態(tài)跟蹤,更加精確。2.3 時(shí)間計(jì)劃 人員分配要合理
以前總認(rèn)為寫計(jì)劃比寫代碼容易的多,其實(shí)恰恰相反。一份合理的項(xiàng)目計(jì)劃需要經(jīng)過思考、溝通、權(quán)衡、詢問、傾聽的過程,要知道,用來分析解決問題需要花費(fèi)的時(shí)間,遠(yuǎn)遠(yuǎn)大于單純的寫代碼時(shí)間。
項(xiàng)目進(jìn)度計(jì)劃必須將分解出來的小任務(wù),綜合考慮時(shí)間、難易程度、人員能力,估出工作量并進(jìn)行合理分配。2.4 代碼開發(fā) 功能驗(yàn)證要同步
當(dāng)日的開發(fā)任務(wù)結(jié)束后,作為項(xiàng)目經(jīng)理應(yīng)該對(duì)現(xiàn)有開發(fā)成果做驗(yàn)證,即對(duì)已完成的功能做驗(yàn)證,及時(shí)發(fā)現(xiàn)缺陷或其他問題,次日找對(duì)應(yīng)的開發(fā)人員做修復(fù)。/ 4 西安科技大市場(chǎng)創(chuàng)新云服務(wù)股份有限公司
項(xiàng)目總結(jié)報(bào)告
因此,代碼開發(fā)和功能驗(yàn)證的同步進(jìn)行,既可以保證軟件質(zhì)量,同時(shí)也可以保證項(xiàng)目進(jìn)度。當(dāng)然,應(yīng)該根據(jù)實(shí)際情況同步調(diào)整項(xiàng)目進(jìn)度計(jì)劃,預(yù)留處理缺陷的時(shí)間。2.5進(jìn)度執(zhí)行 問題修復(fù)要反饋
項(xiàng)目成員必須及時(shí)反饋當(dāng)日任務(wù)完成情況,及前一天遺留缺陷的修復(fù)情況,才可以保證項(xiàng)目經(jīng)理對(duì)整體進(jìn)度的把控,準(zhǔn)確跟蹤項(xiàng)目狀態(tài)。2.6
需求變更 文檔修改要記錄
開發(fā)過程中的任何變更,都應(yīng)做記錄,作為項(xiàng)目成員之間溝通交流的依據(jù),也可以避免重復(fù)修改,增加無謂的工作量。項(xiàng)目教訓(xùn)
3.1 計(jì)劃應(yīng)當(dāng)先于執(zhí)行
項(xiàng)目計(jì)劃必須要盡可能周全,并且在項(xiàng)目經(jīng)理的可控范圍內(nèi),可以根據(jù)實(shí)際情況及時(shí)做調(diào)整,但一定要保證,具體工作的開展是在計(jì)劃范圍內(nèi),因?yàn)闆]有計(jì)劃直接執(zhí)行會(huì)直接導(dǎo)致項(xiàng)目進(jìn)度不可控,狀態(tài)無法跟蹤。3.2 溝通應(yīng)當(dāng)注意技巧
高效溝通是項(xiàng)目成功的決定因素。因缺乏高效的溝通技巧。對(duì)內(nèi),在與開發(fā)人員進(jìn)行需求溝通、代碼實(shí)現(xiàn)方式設(shè)計(jì)等方面溝通時(shí),并不能快速準(zhǔn)確表達(dá)自己意圖;對(duì)外,在與業(yè)務(wù)人員協(xié)商問題時(shí),會(huì)不自覺的使用技術(shù)術(shù)語等業(yè)務(wù)人員不易理解的詞匯,導(dǎo)致雙方無法在較短時(shí)間內(nèi)達(dá)成一致意見。希望自己以后有更多的鍛煉機(jī)會(huì),學(xué)習(xí)彌補(bǔ)這方面的欠缺。/ 4
第二篇:軟件項(xiàng)目總結(jié)報(bào)告
XXXXXXXXXXXXXXXXXXXXXXX系統(tǒng)
項(xiàng)目總結(jié)報(bào)告
XXXXXXXXX 2017/7/27 項(xiàng)目概要信息
XXXXXXXXXXXXXXXXXXXXXXX系統(tǒng)的技術(shù)團(tuán)隊(duì)由11人組成,其中項(xiàng)目經(jīng)理1人,需求分析師1人,UI設(shè)計(jì)師1人,開發(fā)人員6人,測(cè)試人員2人。
本項(xiàng)目的前期工作從2017年5月19日開始,歷時(shí)16個(gè)工作日,于6月9日完成需求分析等準(zhǔn)備工作。開發(fā)階段從2017年6月12日開始,歷時(shí)22個(gè)工作日,于7月10日完成全部開發(fā)工作,進(jìn)入外部業(yè)務(wù)人員驗(yàn)證測(cè)試階段,目前,可使用XXXXXXXXXXXXXXXXXXXXXXX的二級(jí)域名進(jìn)行訪問,詳細(xì)信息如下:
用戶資助申報(bào)地址:XXXXXXXXXXXXXXXXXXXXXXX 用戶審核管理地址:XXXXXXXXXXXXXXXXXXXXXXX
本項(xiàng)目的開發(fā)過程有5個(gè)關(guān)鍵的里程碑,具體時(shí)間及內(nèi)容如下: 2017年06月21日:項(xiàng)目初次全新功能開發(fā)完成;
2017年06月29日:項(xiàng)目初次內(nèi)部功能測(cè)試、安全測(cè)試、性能測(cè)試完成; 2017年07月04日:需求變更,準(zhǔn)備進(jìn)行二次開發(fā); 2017年07月10日:項(xiàng)目二次開發(fā)全部完成;
2017年07月11日:項(xiàng)目二次內(nèi)部測(cè)試完成,等待外部業(yè)務(wù)人員驗(yàn)證測(cè)試。項(xiàng)目經(jīng)驗(yàn)
因?yàn)槭浅醮螕?dān)任項(xiàng)目經(jīng)理的角色,我最初找不到切入點(diǎn),領(lǐng)導(dǎo)和同事在整個(gè)的過程中給了我很多的指導(dǎo)和建議。實(shí)際的項(xiàng)目管理工作使我對(duì)自己已學(xué)的理論知識(shí)有了更深刻的體會(huì)。所謂理論指導(dǎo)實(shí)踐,實(shí)踐驗(yàn)證理論,回想整個(gè)項(xiàng)目開發(fā)過程,至少可以總結(jié)了以下幾點(diǎn)經(jīng)驗(yàn): 2.1 溝通討論 信息交換要及時(shí)
溝通討論是貫穿整個(gè)項(xiàng)目生命周期的活動(dòng),團(tuán)隊(duì)成員間信息交換是否及時(shí),更是項(xiàng)目成功的關(guān)鍵。雖然不同角色承擔(dān)不同工作,但都是以達(dá)成項(xiàng)目目標(biāo)為指導(dǎo)的,團(tuán)隊(duì)成員只有始終保持溝通討論,保證接收到最新的、一致的項(xiàng)目需求信息,才能使得開發(fā)工作順利進(jìn)行,避免出現(xiàn)信息交換不及時(shí)而導(dǎo)致的返工。
對(duì)于溝通,結(jié)合實(shí)際來說,如果需求分析師不能將變更的需求信息及時(shí)傳遞給UI設(shè)計(jì)人員,就會(huì)導(dǎo)致不符合用戶需求的設(shè)計(jì),更會(huì)使開發(fā)人員寫出無用的代碼,這必然導(dǎo)致重設(shè)計(jì)、重編碼,甚至?xí)诱`整體項(xiàng)目進(jìn)度。
對(duì)于討論,尤其是像我這樣缺少經(jīng)驗(yàn)的項(xiàng)目經(jīng)理,不論是制定計(jì)劃,還是工作量識(shí)別,都必須向有經(jīng)驗(yàn)的同事請(qǐng)教,接受正確的建議,才能得到合理的安排。2.2項(xiàng)目范圍 功能邊界要清晰
項(xiàng)目經(jīng)理以需求文檔為依據(jù),將項(xiàng)目范圍及邊界清晰羅列,是把控項(xiàng)目開發(fā)進(jìn)度的先決條件。
對(duì)于XXXXXXXXXXXX系統(tǒng)來說,其功能并不復(fù)雜,且開發(fā)周期短,所以在確定項(xiàng)目范圍并進(jìn)行任務(wù)細(xì)化時(shí),可精確到接口、頁面。把一個(gè)大任務(wù)分解成一個(gè)個(gè)的小任務(wù)的好處是,可以幫助我們更加精確的估計(jì)出它們的工作量,并暴露出很多可能一時(shí)無法想到的工作量,也可以保證后續(xù)進(jìn)行項(xiàng)目開發(fā)過程的狀態(tài)跟蹤,更加精確。2.3時(shí)間計(jì)劃 人員分配要合理
以前總認(rèn)為寫計(jì)劃比寫代碼容易的多,其實(shí)恰恰相反。一份合理的項(xiàng)目計(jì)劃需要經(jīng)過思考、溝通、權(quán)衡、詢問、傾聽的過程,要知道,用來分析解決問題需要花費(fèi)的時(shí)間,遠(yuǎn)遠(yuǎn)大于單純的寫代碼時(shí)間。
項(xiàng)目進(jìn)度計(jì)劃必須將分解出來的小任務(wù),綜合考慮時(shí)間、難易程度、人員能力,估出工作量并進(jìn)行合理分配。2.4代碼開發(fā) 功能驗(yàn)證要同步
當(dāng)日的開發(fā)任務(wù)結(jié)束后,作為項(xiàng)目經(jīng)理應(yīng)該對(duì)現(xiàn)有開發(fā)成果做驗(yàn)證,即對(duì)已完成的功能做驗(yàn)證,及時(shí)發(fā)現(xiàn)缺陷或其他問題,次日找對(duì)應(yīng)的開發(fā)人員做修復(fù)。
因此,代碼開發(fā)和功能驗(yàn)證的同步進(jìn)行,既可以保證軟件質(zhì)量,同時(shí)也可以保證項(xiàng)目進(jìn)度。當(dāng)然,應(yīng)該根據(jù)實(shí)際情況同步調(diào)整項(xiàng)目進(jìn)度計(jì)劃,預(yù)留處理缺陷的時(shí)間。
2.5進(jìn)度執(zhí)行 問題修復(fù)要反饋
項(xiàng)目成員必須及時(shí)反饋當(dāng)日任務(wù)完成情況,及前一天遺留缺陷的修復(fù)情況,才可以保證項(xiàng)目經(jīng)理對(duì)整體進(jìn)度的把控,準(zhǔn)確跟蹤項(xiàng)目狀態(tài)。2.6
需求變更 文檔修改要記錄
開發(fā)過程中的任何變更,都應(yīng)做記錄,作為項(xiàng)目成員之間溝通交流的依據(jù),也可以避免重復(fù)修改,增加無謂的工作量。項(xiàng)目教訓(xùn)
3.1計(jì)劃應(yīng)當(dāng)先于執(zhí)行
項(xiàng)目計(jì)劃必須要盡可能周全,并且在項(xiàng)目經(jīng)理的可控范圍內(nèi),可以根據(jù)實(shí)際情況及時(shí)做調(diào)整,但一定要保證,具體工作的開展是在計(jì)劃范圍內(nèi),因?yàn)闆]有計(jì)劃直接執(zhí)行會(huì)直接導(dǎo)致項(xiàng)目進(jìn)度不可控,狀態(tài)無法跟蹤。3.2溝通應(yīng)當(dāng)注意技巧
高效溝通是項(xiàng)目成功的決定因素。因缺乏高效的溝通技巧。對(duì)內(nèi),在與開發(fā)人員進(jìn)行需求溝通、代碼實(shí)現(xiàn)方式設(shè)計(jì)等方面溝通時(shí),并不能快速準(zhǔn)確表達(dá)自己意圖;對(duì)外,在與業(yè)務(wù)人員協(xié)商問題時(shí),會(huì)不自覺的使用技術(shù)術(shù)語等業(yè)務(wù)人員不易理解的詞匯,導(dǎo)致雙方無法在較短時(shí)間內(nèi)達(dá)成一致意見。希望自己以后有更多的鍛煉機(jī)會(huì),學(xué)習(xí)彌補(bǔ)這方面的欠缺。
第三篇:軟件項(xiàng)目階段性總結(jié)報(bào)告
xxx
Xxxxx 階段性總結(jié)報(bào)告
有限公司xxxCO., LTD
項(xiàng)目階段性總結(jié)報(bào)告
1.引言 a)編寫目的
說明編寫這份項(xiàng)目開發(fā)總結(jié)報(bào)告的目的,指出預(yù)期的閱讀范圍。
b)背景
本項(xiàng)目的名稱和所開發(fā)出來的軟件系統(tǒng)的名稱
此軟件的任務(wù)提出者、開發(fā)者、用戶及安裝此軟件的計(jì)算中心
c)定義
列出本文件中用到的專門術(shù)語的定義和外文首字母組詞的原詞組
d)參考資料
列出要用到的參考資料,如:
本項(xiàng)目的已核準(zhǔn)的計(jì)劃任務(wù)書或合同、上級(jí)機(jī)關(guān)的批文;
屬于本項(xiàng)目的其他已發(fā)表的文件;
本文件中各處所引用的文件、資料,包括所要用到的軟件開發(fā)標(biāo)準(zhǔn)。列出這些文件 的標(biāo)題、文件編號(hào)、發(fā)表日期和出版單位,說明能夠得到這些文件資料的來源
2.實(shí)際開發(fā)結(jié)果 a)產(chǎn)品
說明最終制成的產(chǎn)品,包括:
程序系統(tǒng)中各個(gè)程序的名字,它們之間的層次關(guān)系,以千字節(jié)為單位的各個(gè)程序的 程序量、存儲(chǔ)媒體的形式和數(shù)量;
程序系統(tǒng)共有哪幾個(gè)版本,各自的版本號(hào)及它們之間的區(qū)別; 每個(gè)文件的名稱;
所建立的每個(gè)數(shù)據(jù)庫。如果開發(fā)中制訂過配置管理計(jì)劃,要同這個(gè)計(jì)劃相比較 b)主要功能
逐項(xiàng)列出本軟件產(chǎn)品所實(shí)際具有的主要功能和性能,對(duì)照可行性研究報(bào)告、項(xiàng)目開發(fā)計(jì)劃、功能需求說明書的有關(guān)內(nèi)容,說明原定的開發(fā)目標(biāo)是達(dá)到了、未完全達(dá)到、或超過了
c)基本流程
用圖給出本程序系統(tǒng)的實(shí)際的基本的處理流程
d)進(jìn)度
列出原定計(jì)劃進(jìn)度與實(shí)際進(jìn)度的對(duì)比,明確說明,實(shí)際進(jìn)度是提前了、還是延遲了,分析主要原因
e)費(fèi)用
列出原定計(jì)劃費(fèi)用與實(shí)際支出費(fèi)用的對(duì)比,包括: 工時(shí),以人月為單位,并按不同級(jí)別統(tǒng)計(jì)
計(jì)算機(jī)的使用時(shí)間,區(qū)別CPU時(shí)間及其他設(shè)備時(shí)間; 物料消耗、出差費(fèi)等其他支出。
明確說明,經(jīng)費(fèi)是超出了、還是節(jié)余了,分析其主要原因
3.開發(fā)工作評(píng)價(jià)
a)對(duì)生產(chǎn)效率評(píng)價(jià)
給出實(shí)際生產(chǎn)效率,包括:
程序的平均生產(chǎn)效率,即每人月生產(chǎn)的行數(shù); 文件的平均生產(chǎn)效率,即每人月生產(chǎn)的千字?jǐn)?shù); 并列出原訂計(jì)劃數(shù)作為對(duì)比 b)對(duì)產(chǎn)品質(zhì)量評(píng)價(jià)
說明在測(cè)試中檢查出來的程序編制中的錯(cuò)誤發(fā)生率,即每干條指令(或語句)中的錯(cuò)誤指令數(shù)(或語句數(shù))
。如果開發(fā)中制訂過質(zhì)量保證計(jì)劃或配置管理計(jì)劃,要同這些計(jì)劃相比較 c)對(duì)技術(shù)方法評(píng)價(jià)
給出對(duì)在開發(fā)中所使用的技術(shù)、方法、工具、手段的評(píng)價(jià) d)錯(cuò)誤原因分析
給出對(duì)于開發(fā)中出現(xiàn)的錯(cuò)誤的原因分析 4.經(jīng)驗(yàn)與教訓(xùn)
出從這項(xiàng)開發(fā)工作中所得到的最主要的經(jīng)驗(yàn)與教訓(xùn)及對(duì)今后的項(xiàng)目開發(fā)工作的建議
第四篇:軟件項(xiàng)目開發(fā)總結(jié)報(bào)告模版
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
火車票系統(tǒng)的開發(fā)
1引言
研究報(bào)告(1.研究計(jì)劃;2.完成的研究?jī)?nèi)容、研究方法、研究過程與結(jié)論、成果;3.比照研究計(jì)劃,分析超過或未達(dá)到預(yù)定目標(biāo)、進(jìn)度、研究?jī)?nèi)容的原因;4.參考文獻(xiàn)等。)
隨著人們生活水平和經(jīng)濟(jì)水平的提高,網(wǎng)絡(luò)科技的全球化的發(fā)展,出游和出差的頻率越來越多。這大大的激發(fā)了交通水平的發(fā)展。其中,火車這種又方便有便宜的交通工具作為人們的首選,火車站的客運(yùn)列車增加,客運(yùn)量也隨之增加。原有的售票的方式已經(jīng)不再能滿足旅客的需求了。為了方便旅客售票系統(tǒng)不僅僅只能售票也能夠了解列車的各種信息。這樣才能成為現(xiàn)在網(wǎng)絡(luò)社會(huì)的真的適應(yīng)者。
2需求分析
該售票系統(tǒng)是融合了火車票銷售、退票、列車管理、車票管理、售票員管理、列車管理信息,以及售票信息查詢?yōu)橐惑w的綜合系統(tǒng)。該系統(tǒng)主要編寫的功能是列車和售票信息的查詢及售票功能。
2.1用戶
該系統(tǒng)主要有兩類用戶:管理員和售票員。管理員主要工作有車次管理,車票管理和售票員管理。對(duì)于每項(xiàng)功能都有添加,刪除和修改的功能。售票的主要工作是售票和退票。
2.2主要功能
該系統(tǒng)從功能方面可以分為四個(gè)方面: 登錄。不管你是管理員還是售票員必須登錄以后才可以進(jìn)行系統(tǒng)允許的操作。當(dāng)然要登錄的管理員和售票員都必須是再數(shù)據(jù)庫中已經(jīng)發(fā)布的。
基本設(shè)置:該模塊主要是修改售票員的相關(guān)信息,修改列車的相關(guān)信息和修改車票的相
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
關(guān)信息。這一塊的功能只有管理員才可以操作。其他的售票員是不可以對(duì)他進(jìn)行操作的。
售票和退票:這部分工作主要是售票員來操作的。售票員根據(jù)買票人員提出的要求進(jìn)行查詢。查詢的方式有兩種:一是根據(jù)車次查詢;一是根據(jù)目的地來查詢。退票主要是將已經(jīng)出售的車票在列車開出之前再一次的返回到數(shù)據(jù)庫中,并繼續(xù)出售。
列車和車票查詢;當(dāng)需要查詢列車信息或者是車票信息是所做的操作。
2.3基本流程
3開發(fā)過程
3.1內(nèi)容
該程序包括三個(gè)部分?jǐn)?shù)據(jù)庫的設(shè)計(jì)、通用模塊的實(shí)現(xiàn)、各個(gè)模塊的實(shí)現(xiàn)。
3.1.1 數(shù)據(jù)庫的設(shè)計(jì):
將本系統(tǒng)所需的所有的數(shù)據(jù)都存儲(chǔ)到數(shù)據(jù)庫中。需要在數(shù)據(jù)庫中管理員表、售票員表、列車信息表和車票信息表。如圖所示:
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
管理員表:
售票員表:
列車信息表:
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
車票信息表:
3.1.2通用模塊的實(shí)現(xiàn):
通用模塊為了減少代碼的重復(fù)。在該系統(tǒng)中,對(duì)經(jīng)常使用的操作進(jìn)行封裝,如將多次需要調(diào)用的數(shù)據(jù)庫和操作數(shù)庫的增、刪、改和查等操作進(jìn)行封裝。使代碼有很好的重用性,即使出現(xiàn)錯(cuò)誤也很容易調(diào)試。如本程序中的Conn.java
import java.sql.*;public class Conn {
private static Connection con;private static final String DRIVER = “com.mysql.jdbc.Driver”;private static final String URL =“jdbc:mysql://localhost:3306/newdatabase”;private static final String NAME=“root”;private static final String PASSWORD=“021702190804”;static{
} public static Connection getConnection(){
} public static void closeCon(Connection con){
try { if(con!=null)con.close();try {
} return con;con=DriverManager.getConnection(URL,NAME,PASSWORD);e.printStackTrace();} catch(SQLException e){ try {
} Class.forName(DRIVER);e.printStackTrace();} catch(ClassNotFoundException e){ } catch(SQLException e){ 4
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
}
} public static void closePt(PreparedStatement pt){
} public static void closeRs(ResultSet rs){
} try {
} if(rs!=null)rs.close();try {
} if(pt!=null)pt.close();} e.printStackTrace();} catch(Exception e){ e.printStackTrace();} catch(Exception e){ e.printStackTrace();
用戶登錄界面的設(shè)計(jì)、主界面的設(shè)計(jì)、基本設(shè)置模塊、銷售及退票模塊和列車及車票查詢模塊。
用戶登錄模塊:該部分是通過設(shè)計(jì)login.java來實(shí)現(xiàn)的。這部分代碼的作用是用戶首先選擇自己的登錄的是管理員還是售票員,然后輸入賬號(hào)和密碼。單擊登錄,用戶先判斷用戶登錄的類型,然后給sql變量賦SQL語句值,系統(tǒng)調(diào)用DAO.java類的login()傳入sql變量。.Login 代碼是:
import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.graphics.Image;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;
import com.huizhi.dao.DAO;public class Login {
private Text nameText;
private Text passText;
private Combo combo;
private String type;
private Display display = new Display();
private Shell shell = new Shell(display);
public Login(){
FormLayout layout = new FormLayout();
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
layout.marginHeight =40;
layout.marginWidth =40;
shell.setLayout(layout);
shell.setText(“l(fā)ogin”);
Image image = new Image(display,“2.jpg”);
shell.setBackgroundImage(image);
setUIControl();
shell.pack();
shell.open();
while(!shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
private void setUIControl(){
Label username = new Label(shell, SWT.NONE);
username.setText(“username”);
nameText = new Text(shell, SWT.SINGLE | SWT.BORDER);
Label password = new Label(shell, SWT.NONE);
password.setText(“password”);
passText = new Text(shell, SWT.SINGLE | SWT.BORDER| SWT.PASSWORD);
// passText.setEchoChar('*');
Label select=new Label(shell, SWT.NONE);
select.setText(“ select
”);
Button submit = new Button(shell,SWT.PUSH);
submit.setText(“l(fā)ogin ”);
submit.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
type=combo.getText();
String name=nameText.getText();
String pass=passText.getText();
String sql=null;
boolean flag=false;
MessageBox box=new MessageBox(shell,SWT.OK);
if(“".equals(type)||”“.equals(name)||”“.equals(pass))
{
box.setMessage(”please input all the information“);
box.open();
return;
}
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
DAO dao=new DAO();
if(”users“.equals(type)){
sql=”select * from users where username='“+name+”' and password='“+pass+”'“;
}else if(”admin“.equals(type)){
sql=”select * from admin where username='“+name+”' and password='“+pass+”'“;
}
flag=dao.login(sql);
if(flag)
{
shell.dispose();
new Main(type);
}else{
box.setMessage(”wrong name or password“);
box.open();
}
}
});
Button reset = new Button(shell, SWT.PUSH);
reset.setText(”cancel“);
String value[]={”users“,”admin“};
combo=new Combo(shell,SWT.DROP_DOWN);
combo.setItems(value);
FormData data = new FormData();
data.top = new FormAttachment(30,0);
username.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(username,0,SWT.CENTER);
data.left = new FormAttachment(username,10, SWT.RIGHT);
nameText.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(select,0,SWT.CENTER);
data.left = new FormAttachment(select,10, SWT.RIGHT);
combo.setLayoutData(data);
data = new FormData();
data.top = new FormAttachment(username,10, SWT.BOTTOM);
password.setLayoutData(data);
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
data = new FormData();
data.top = new FormAttachment(password,0,SWT.CENTER);
data.left = new FormAttachment(nameText,0,SWT.LEFT);
passText.setLayoutData(data);
data=new FormData();
data.top=new FormAttachment(password,10,SWT.BOTTOM);
submit.setLayoutData(data);
data=new FormData();
data.top=new FormAttachment(submit,0,SWT.CENTER);
data.left=new FormAttachment(submit,20,SWT.RIGHT);
reset.setLayoutData(data);
}
public static void main(String[] args){
new Login();
} } DAO.java的login()代碼:
public boolean login(String sql){
boolean flag=false;
con=Conn.getConnection();
try {
pt=con.prepareStatement(sql);
rs=pt.executeQuery();
if(rs.next()){
flag=true;
}
} catch(SQLException e){
e.printStackTrace();
}finally{
Conn.closeRs(rs);
Conn.closePt(pt);
Conn.closeCon(con);
}
return flag;} 圖示為;
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
實(shí)現(xiàn)主界面:
import org.eclipse.swt.*;import org.eclipse.swt.widgets.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.events.*;
public class Main {
private String type;Display display=Display.getCurrent();Shell shell=new Shell(display);public Main(String type){
this.type=type;
shell.setText(”Train ticketing system“);
shell.setLayout(new FillLayout());
Menu menu=new Menu(shell,SWT.BAR);
//第一個(gè)菜單
MenuItem basic=new MenuItem(menu,SWT.CASCADE);
basic.setText(”Basic Settings“);
if(”users“.equals(type))
{
basic.setEnabled(false);
}
Menu filemenu=new Menu(shell,SWT.DROP_DOWN);
MenuItem train=new MenuItem(filemenu,SWT.PUSH);
train.setText(”Trains Management“);
train.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
new TrainManage();
}
});
MenuItem ticket=new MenuItem(filemenu,SWT.PUSH);
ticket.setText(”Tickets Management“);
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
ticket.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){
new TicketManage();} });MenuItem users=new MenuItem(filemenu,SWT.PUSH);users.setText(”Users Management“);users.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){
new UsersManage();} });MenuItem exit=new MenuItem(filemenu,SWT.PUSH);exit.setText(”quit“);basic.setMenu(filemenu);exit.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
display.dispose();} });//第二個(gè)菜單
MenuItem market=new MenuItem(menu,SWT.CASCADE);market.setText(”Sales and Refunds“);Menu editMenu=new Menu(shell,SWT.DROP_DOWN);MenuItem marketItem=new MenuItem(editMenu,SWT.PUSH);marketItem.setText(”Sales Tickets“);marketItem.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){
new XiaosTicket();} });MenuItem refundItem=new MenuItem(editMenu,SWT.PUSH);refundItem.setText(”Refunds Tickets“);market.setMenu(editMenu);refundItem.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){
new TuiTicket();} });//第三個(gè)菜單
MenuItem find=new MenuItem(menu,SWT.CASCADE);find.setText(”Trains and Tickets query“);Menu taiMenu=new Menu(shell,SWT.DROP_DOWN);MenuItem trainFind=new MenuItem(taiMenu,SWT.PUSH);
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
trainFind.setText(”Trains query“);
trainFind.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
new FindTrain();
}
});
MenuItem ticketFind=new MenuItem(taiMenu,SWT.PUSH);
ticketFind.setText(”Ticket query“);
find.setMenu(taiMenu);
ticketFind.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
new FindTicket();
}
});
shell.setMenuBar(menu);
shell.setSize(500,400);
shell.open();
while(!shell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
display.dispose();
} }
圖示為:
基本設(shè)置模塊包括車次管理,車票管理和售票員管理。
車次管理主要是是對(duì)于列車的增加,刪除和修改等操作。其中包括它的相關(guān)的信息等。它是由TrainManagement.java.代碼如下: import java.util.List;11
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;
import com.huizhi.dao.DAO;import com.huizhi.vo.Train;
public class TrainManage {
Display display=Display.getCurrent();
Shell tmshell=new Shell(display);
final Table table=new Table(tmshell,SWT.SINGLE|SWT.H_SCROLL|SWT.V_SCROLL|SWT.H_SCROLL|SWT.BORDER|SWT.FULL_SELECTION);
TrainManage tm=this;public TrainManage(){
RowLayout rowLayout=new RowLayout();
rowLayout.pack=true;
rowLayout.wrap=true;
rowLayout.justify=false;
rowLayout.marginTop=20;
tmshell.setLayout(rowLayout);
final TableColumn column1=new TableColumn(table,SWT.LEFT);
column1.setText(”Train ID“);
column1.setWidth(80);
final TableColumn column2=new TableColumn(table,SWT.LEFT);
column2.setText(”TrainNum“);
column2.setWidth(80);
final TableColumn column3=new TableColumn(table,SWT.LEFT);
column3.setText(”TrainType“);
column3.setWidth(80);
final TableColumn column4=new TableColumn(table,SWT.LEFT);
column4.setText(”Starting“);
column4.setWidth(80);
final TableColumn column5=new TableColumn(table,SWT.LEFT);
column5.setText(”startingTime“);
column5.setWidth(80);
final TableColumn column6=new TableColumn(table,SWT.LEFT);
column6.setText(”terminal“);
column6.setWidth(80);
final TableColumn column7=new TableColumn(table,SWT.LEFT);
column7.setText(”terminal Time“);
column7.setWidth(80);12
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
final TableColumn column8=new TableColumn(table,SWT.LEFT);column8.setText(”is kongtiao“);column8.setWidth(80);final TableColumn column9=new TableColumn(table,SWT.LEFT);column9.setText(”price“);column9.setWidth(80);final TableColumn column10=new TableColumn(table,SWT.LEFT);column10.setText(”middleStation“);column10.setWidth(80);final TableColumn column11=new TableColumn(table,SWT.LEFT);column11.setText(”yzNum“);column11.setWidth(80);final TableColumn column12=new TableColumn(table,SWT.LEFT);column12.setText(”rzNum“);column12.setWidth(80);final TableColumn column13=new TableColumn(table,SWT.LEFT);column13.setText(”ywNum“);column13.setWidth(80);final TableColumn column14=new TableColumn(table,SWT.LEFT);column14.setText(”rwNum“);column14.setWidth(80);table.setHeaderVisible(true);table.setLinesVisible(true);freshData();table.setSize(800,200);Button add=new Button(tmshell,SWT.PUSH);add.setText(”add trains“);add.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
new AddTrain(tm);
} });Button update=new Button(tmshell,SWT.PUSH);update.setText(”modify“);update.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
TableItem[] selection=table.getSelection();
TableItem selectedRow=selection[0];
Train train=new Train();
train.setId(Integer.parseInt(selectedRow.getText(0)));
train.setTrainNum(selectedRow.getText(1));
train.setTrainType(selectedRow.getText(2));
train.setStarting(selectedRow.getText(3));13
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
train.setStartingTime(selectedRow.getText(4));
train.setTerminal(selectedRow.getText(5));
train.setTerminalTime(selectedRow.getText(6));
train.setIskongTiao(selectedRow.getText(7));
train.setPrice(Float.parseFloat(selectedRow.getText(8)));
train.setMiddleStation(selectedRow.getText(9));
train.setYzNum(Integer.parseInt(selectedRow.getText(10)));
train.setRzNum(Integer.parseInt(selectedRow.getText(11)));
train.setYwNum(Integer.parseInt(selectedRow.getText(12)));
train.setRwNum(Integer.parseInt(selectedRow.getText(13)));
new UpdateTrain(train,tm);
}
});
Button delete=new Button(tmshell,SWT.PUSH);
delete.setText(”cancel“);
delete.addSelectionListener(new SelectionAdapter(){
public void widgetSelected(SelectionEvent e){
MessageBox box=new MessageBox(tmshell,SWT.YES|SWT.NO);
box.setMessage(”Are you sure to cancel?“);
int num=box.open();
if(num==128)
return;
TableItem[] selection=table.getSelection();
TableItem selectedRow=selection[0];
DAO dao=new DAO();
String sql=”delete from train where id=“+selectedRow.getText(0)+”“;
int i=dao.update(sql);
if(i>0){
box.setMessage(”succeed“);
box.open();
table.remove(table.getSelectionIndex());
}else{
box.setMessage(”failure“);
box.open();
}
}
});14
武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告
tmshell.setSize(1200,400);
tmshell.setText(”train Management“);
tmshell.open();
while(!tmshell.isDisposed()){
if(!display.readAndDispatch())
display.sleep();
}
tmshell.dispose();} public void freshData(){
table.removeAll();
try{
DAO dao=new DAO();
List list=dao.getAllTrain();
int number=list.size();
for(int i=0;i Train train=(Train)list.get(i); final TableItem item[]=new TableItem[number]; item[i]=new TableItem(table,SWT.None); item[i].setText(new String[]{Integer.toString(train.getId()),train.getTrainNum(),train.getTrainType(),train.getStarting(),train.getStartingTime(),train.getTerminal(),train.getTerminalTime(),train.getIskongTiao(),Float.toString(train.getPrice()),train.getMiddleStation(),Integer.toString(train.getYzNum()),Integer.toString(train.getRzNum()),Integer.toString(train.getYwNum()),Integer.toString(train.getYwNum())}); } }catch(Exception e){ e.printStackTrace(); } } } 在該段代碼中調(diào)用了DAO.java類中的getAllTrain()方法來獲得所有的車輛信息,然后以表格的形式顯示出來。DAO.java類中的getAllTrain()和update()方法如下: public int update(String sql){ int i=0; con=Conn.getConnection(); try { pt=con.prepareStatement(sql); i=pt.executeUpdate(); } catch(SQLException e){ 15 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 e.printStackTrace();}finally{ Conn.closePt(pt); Conn.closeCon(con);}return i;} public List getAllTrain(){ List list=new ArrayList();con=Conn.getConnection();try { pt=con.prepareStatement(”select * from train“); rs=pt.executeQuery(); while(rs.next()){ Train train=new Train(); train.setId(rs.getInt(1)); train.setTrainNum(rs.getString(2)); train.setTrainType(rs.getString(3)); train.setStarting(rs.getString(4)); train.setStartingTime(rs.getString(5)); train.setTerminal(rs.getString(6)); train.setTerminalTime(rs.getString(7)); train.setIskongTiao(rs.getString(8)); train.setPrice(rs.getFloat(9)); train.setMiddleStation(rs.getString(10)); train.setYzNum(rs.getInt(11)); train.setRzNum(rs.getInt(12)); train.setYwNum(rs.getInt(13)); train.setRwNum(rs.getInt(14)); list.add(train); } } catch(SQLException e){ e.printStackTrace();}finally{ Conn.closeRs(rs); Conn.closePt(pt); Conn.closeCon(con);}return list;} 其中的update的功能是,首先連接數(shù)據(jù)庫,然后用傳遞過來的SQl語句在列表中刪除某輛列車的信息。getAllTrain()方法是顯示所有的列車的信息。圖示如下: 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 在車次管理中的對(duì)于列車信息添加的功能是通過AddTrain.java 來實(shí)現(xiàn)的。代碼如下: import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*;import com.huizhi.dao.DAO; public class AddTrain { Display display=Display.getCurrent();Shell tmshell=new Shell(display);TrainManage trainmanage=null;public AddTrain(TrainManage tm){ trainmanage=tm;GridLayout gridlayout=new GridLayout();tmshell.setText(”add trains information“);gridlayout.numColumns=2;gridlayout.makeColumnsEqualWidth=true;tmshell.setLayout(gridlayout); GridData gd = new GridData(GridData.FILL_BOTH);Label l=new Label(tmshell,SWT.LEFT);l.setText(”trainNum“);l.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainNum=new Text(tmshell,SWT.NONE);trainNum.setSize(50,60);trainNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l1=new Label(tmshell,SWT.LEFT);l1.setText(”trainType“);l1.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainType=new Text(tmshell,SWT.LEFT);17 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 trainType.setSize(30,40);trainType.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l2=new Label(tmshell,SWT.LEFT);l2.setText(”starting“);l2.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text starting=new Text(tmshell,SWT.LEFT);starting.setSize(30,40);starting.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l3=new Label(tmshell,SWT.LEFT);l3.setText(”startingtime“);l3.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text startingTime=new Text(tmshell,SWT.LEFT);startingTime.setSize(30,40);startingTime.setLayoutData(gd);Label l4=new Label(tmshell,SWT.LEFT);l4.setText(”terminal“);l4.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminal=new Text(tmshell,SWT.LEFT);terminal.setSize(30,40);terminal.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l5=new Label(tmshell,SWT.LEFT);l5.setText(”terminaltime“);l5.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminalTime=new Text(tmshell,SWT.LEFT);terminalTime.setSize(30,40);terminalTime.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l6=new Label(tmshell,SWT.LEFT);l6.setText(”iskongtiao“);l6.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text iskongTiao=new Text(tmshell,SWT.LEFT);18 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 iskongTiao.setSize(30,40);iskongTiao.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l7=new Label(tmshell,SWT.LEFT);l7.setText(”price“);l7.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text price=new Text(tmshell,SWT.LEFT);price.setSize(30,40);price.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l8=new Label(tmshell,SWT.LEFT);l8.setText(”middleStation“);l8.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text middleStation=new Text(tmshell,SWT.LEFT);middleStation.setSize(30,40);middleStation.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l9=new Label(tmshell,SWT.LEFT);l9.setText(”yzNum“);l9.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text yzNum=new Text(tmshell,SWT.LEFT);yzNum.setSize(30,40);yzNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l10=new Label(tmshell,SWT.LEFT);l10.setText(”rzNum“);l10.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rzNum=new Text(tmshell,SWT.LEFT);rzNum.setSize(30,40);rzNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l11=new Label(tmshell,SWT.LEFT);l11.setText(”ywNum“);l11.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);19 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 final Text ywNum=new Text(tmshell,SWT.LEFT);ywNum.setSize(30,40);ywNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l12=new Label(tmshell,SWT.LEFT);l12.setText(”rwNum“);l12.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rwNum=new Text(tmshell,SWT.LEFT);rwNum.setSize(30,40);rwNum.setLayoutData(gd);Button b=new Button(tmshell,SWT.LEFT);b.setText(”add“);b.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){ MessageBox box = new MessageBox(tmshell ,SWT.OK); if(”“.equals(trainNum.getText())||”“.equals(trainType.getText())||”“.equals(starting.getText()) ||”“.equals(startingTime.getText())||”“.equals(terminal.getText())||”“.equals(terminalTime.getText()) ||”“.equals(iskongTiao.getText())||”“.equals(price.getParent())||”“.equals(middleStation.getText())||”“.equals(yzNum.getText()) ||”“.equals(rzNum.getText())||”“.equals(ywNum.getText())||”“.equals(rwNum.getText())){ box.setMessage(”please input the right information“); box.open(); return; } DAO dao=new DAO(); String sql=”insert into train(trainNum,trainType,starting1,startingTime,terminal,terminalTime,iskongTiao,price,“ + ”middleStation,yzNum,rzNum,ywNum,rwNum)values('“+trainNum.getText()+”','“+trainType.getText()+”','“+starting.getText()+”',“ + ”'“+startingTime.getText()+”','“+terminal.getText()+”','“+terminalTime.getText()+”','“+iskongTiao.getText()+”',“ + 20 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 ”'“+price.getText()+”','“+middleStation.getText()+”','“+yzNum.getText()+”','“+rzNum.getText()+”','“+ywNum.getText()+”','“+rwNum.getText()+”')“; int i=dao.update(sql); if(i>0){ box.setMessage(”add“); box.open(); fresh(); } } });Button b1=new Button(tmshell,SWT.LEFT);b1.setText(”quit“);b1.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){ tmshell.setVisible(false); } });tmshell.layout(); tmshell.setSize(500,450); tmshell.open(); while(!tmshell.isDisposed()){ if(!display.readAndDispatch()) display.sleep(); } tmshell.dispose();} public void fresh(){ trainmanage.freshData();} } 圖示為: 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 修改列車功能是在UpdateTrain.java.類中實(shí)現(xiàn)的。代碼如下: import org.eclipse.swt.SWT;import org.eclipse.swt.events.*;import org.eclipse.swt.layout.*;import org.eclipse.swt.widgets.*; import com.huizhi.dao.DAO;import com.huizhi.vo.Train; public class UpdateTrain { private Train train;Display display=Display.getCurrent();Shell utrainshell=new Shell(display);TrainManage trainmanage=null;public UpdateTrain(Train train,TrainManage tm){ this.trainmanage=tm;this.train=train;GridLayout gridlayout=new GridLayout();utrainshell.setText(”modify train information“);gridlayout.numColumns=2;gridlayout.makeColumnsEqualWidth=true;utrainshell.setLayout(gridlayout); 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 GridData gd = new GridData(GridData.FILL_BOTH);Label ll=new Label(utrainshell,SWT.LEFT);ll.setText(”train ID“);ll.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text num=new Text(utrainshell,SWT.NONE);num.setText(Integer.toString(train.getId()));num.setEnabled(false);num.setSize(50,60);num.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l=new Label(utrainshell,SWT.LEFT);l.setText(”TrainNum“);l.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainNum=new Text(utrainshell,SWT.NONE);trainNum.setText(train.getTrainNum());trainNum.setSize(50,60);trainNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l1=new Label(utrainshell,SWT.LEFT);l1.setText(”TrainType“);l1.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text trainType=new Text(utrainshell,SWT.LEFT);trainType.setText(train.getTrainType());trainType.setSize(30,40);trainType.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l2=new Label(utrainshell,SWT.LEFT);l2.setText(”starting“);l2.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text starting=new Text(utrainshell,SWT.LEFT);starting.setText(train.getStarting());starting.setSize(30,40);starting.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l3=new Label(utrainshell,SWT.LEFT);l3.setText(”startingTime“);23 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 l3.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text startingTime=new Text(utrainshell,SWT.LEFT);startingTime.setText(train.getStartingTime());startingTime.setSize(30,40);startingTime.setLayoutData(gd);Label l4=new Label(utrainshell,SWT.LEFT);l4.setText(”terminal“);l4.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminal=new Text(utrainshell,SWT.LEFT);terminal.setText(train.getTerminal());terminal.setSize(30,40);terminal.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l5=new Label(utrainshell,SWT.LEFT);l5.setText(”terminalTime“);l5.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text terminalTime=new Text(utrainshell,SWT.LEFT);terminalTime.setText(train.getTerminalTime());terminalTime.setSize(30,40);terminalTime.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l6=new Label(utrainshell,SWT.LEFT);l6.setText(”iskongtiao“);l6.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text iskongTiao=new Text(utrainshell,SWT.LEFT);iskongTiao.setText(train.getIskongTiao());iskongTiao.setSize(30,40);iskongTiao.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l7=new Label(utrainshell,SWT.LEFT);l7.setText(”price“);l7.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text price=new Text(utrainshell,SWT.LEFT);price.setText(Float.toString(train.getPrice()));price.setSize(30,40);24 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 price.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l8=new Label(utrainshell,SWT.LEFT);l8.setText(”middleStation“);l8.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text middleStation=new Text(utrainshell,SWT.LEFT);middleStation.setText(train.getMiddleStation());middleStation.setSize(30,40);middleStation.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l9=new Label(utrainshell,SWT.LEFT);l9.setText(”yzNum“);l9.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text yzNum=new Text(utrainshell,SWT.LEFT);yzNum.setText(Integer.toString(train.getYzNum()));yzNum.setSize(30,40);yzNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l10=new Label(utrainshell,SWT.LEFT);l10.setText(”rzNum“);l10.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rzNum=new Text(utrainshell,SWT.LEFT);rzNum.setText(Integer.toString(train.getRzNum()));rzNum.setSize(30,40);rzNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l11=new Label(utrainshell,SWT.LEFT);l11.setText(”ywNum“);l11.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text ywNum=new Text(utrainshell,SWT.LEFT);ywNum.setText(Integer.toString(train.getYwNum()));ywNum.setSize(30,40);ywNum.setLayoutData(gd); gd = new GridData(GridData.FILL_BOTH);Label l12=new Label(utrainshell,SWT.LEFT);25 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 l12.setText(”rwNum“);l12.setLayoutData(gd);gd = new GridData(GridData.FILL_BOTH);final Text rwNum=new Text(utrainshell,SWT.LEFT);rwNum.setText(Integer.toString(train.getRwNum()));rwNum.setSize(30,40);rwNum.setLayoutData(gd);Button b=new Button(utrainshell,SWT.LEFT);b.setText(”modify“);b.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){ MessageBox box = new MessageBox(utrainshell ,SWT.OK); if(”“.equals(trainNum.getText())||”“.equals(trainType.getText())||”“.equals(starting.getText()) ||”“.equals(startingTime.getText())||”“.equals(terminal.getText())||”“.equals(terminalTime.getText()) ||”“.equals(iskongTiao.getText())||”“.equals(price.getText())||”“.equals(middleStation.getText())||”“.equals(yzNum.getText()) ||”“.equals(rzNum.getText())||”“.equals(ywNum.getText())||”“.equals(rwNum.getText())){ box.setMessage(”please input right information then modify “); box.open(); return; } DAO dao=new DAO(); String sql=”update train set trainNum='“+trainNum.getText()+”',trainType='“+trainType.getText()+”',starting1='“+starting.getText()+”',“ + ”startingTime='“+startingTime.getText()+”',terminal='“+terminal.getText()+”',terminalTime='“+terminalTime.getText()+”',iskongTiao='“+iskongTiao.getText()+”',“ + ”price='“+price.getText()+”',middleStation='“+middleStation.getText()+”',yzNum='“+yzNum.getText()+”',rzNum='“+rzNum.getText()+”',ywNum='“+ywNum.getText()+”',rwNum='“+rwNum.getText()+”' where id='“+num.getText()+”'“; int i=dao.update(sql); if(i>0){ 26 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 box.setMessage(”succeed“); box.open(); fresh(); }else{ box.setMessage(”failure“); box.open(); } } });Button b1=new Button(utrainshell,SWT.LEFT);b1.setText(”quit");b1.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent e){ utrainshell.setVisible(false); } });utrainshell.layout(); utrainshell.setSize(500,450); utrainshell.open(); while(!utrainshell.isDisposed()){ if(!display.readAndDispatch()) display.sleep(); } utrainshell.dispose();} public void fresh(){ trainmanage.freshData();} } 車票管理主要包括對(duì)車票的增加,刪除和修改的操作。由TicketManagement.java 實(shí)現(xiàn)。代碼類似上面的:(具體看壓縮包)。其中的查詢列車表和售票表調(diào)用的DAO.java類中selectTicket()方法。圖示為: 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 售票員管理是對(duì)售票員進(jìn)行增加、刪除和修改進(jìn)行操作。由UserMannage.java類來實(shí)現(xiàn)。代碼類似以上。在該類中調(diào)用了DAO.java 類中g(shù)etAllUser()方法。圖示為: 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 售票及退票模塊包括兩部分:火車售票和退票。售票系統(tǒng)是xiaosTickect.java 實(shí)現(xiàn)的。圖示如下: 退票是售票員根據(jù)用戶提供的車票信息在系統(tǒng)中進(jìn)行售票。主要是由TuiTicket.java來實(shí)現(xiàn)的。在該類中涉及到DAO.java類中的selectTrain()方法.圖示如下: 列車及車票查詢系統(tǒng)主要功能包括兩部分:查詢列車信息和查詢車票信息.有FindTrain.Java和FindTicket.java 實(shí)現(xiàn).圖示如下: 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 4學(xué)習(xí)心得 我是再?zèng)]有接觸eclipse之前就接觸了java,我自己都先用記事本編寫java程序,然后在doc下進(jìn)行編譯和運(yùn)行。后來安裝了ecplise這個(gè)集成環(huán)境,但是只把它當(dāng)成一個(gè)運(yùn)行java的集成環(huán)境。 后來經(jīng)過開發(fā)工具的學(xué)習(xí)和相關(guān)書籍的查看,開始深入的理解了什么是ecplise。其實(shí)整個(gè)ecplise體系結(jié)構(gòu)就像一個(gè)大的拼圖,可以不斷地向其中添加插件,同時(shí)在現(xiàn)有的插件上還可以再增加插件??梢哉f,在ecplise中一切都是插件。這里有一張圖片很形象的說明了ecplise的體系結(jié)構(gòu): 在我學(xué)習(xí)ecplise的工程中,我覺得它跟一般的軟件比起來有很大的優(yōu)勢(shì):在編寫代碼的過程中,如果有編譯錯(cuò)誤的話系統(tǒng)馬上會(huì)提醒,我們很容易就會(huì)會(huì)發(fā)現(xiàn)。而且它會(huì)給你提供一些解決問題的方法,雖然有些解決方法有一些笨,但是這對(duì)于一些想我們這樣的初學(xué)者來說,無疑是雪中送炭。而且在編寫代碼的過程中,我們使用一些類的對(duì)象的方法的過程中系統(tǒng)給予一定的提示。這大大的減少了我們出錯(cuò)的機(jī)會(huì),并且我們也可以順便了解一下該類的其他方法。加快我們的學(xué)習(xí)進(jìn)度。 武漢理工大學(xué)《軟件開發(fā)工具》論文報(bào)告 對(duì)于ecplise的具體的功能的學(xué)習(xí)感悟:對(duì)于調(diào)試器板塊該環(huán)境提供了很多的功能包括單步執(zhí)行、設(shè)置斷點(diǎn)和值、檢查變量和值以及暫掛和恢復(fù)線程的能力。在我們課堂上只學(xué)習(xí)了本地調(diào)試中的斷點(diǎn)。斷點(diǎn)提供了一種強(qiáng)大的工具,使我們能夠在需要的時(shí)間和位置掛起執(zhí)行。與逐句或逐條指令的檢查代碼不同的是,可以讓程序一直執(zhí)行,直到遇到斷點(diǎn)。然后開始調(diào)試。這大大的加快了調(diào)試過程。沒有這個(gè)功能,調(diào)試大型程序幾乎不能完成。至于遠(yuǎn)程的調(diào)試對(duì)于現(xiàn)在學(xué)習(xí)的程度來說有一點(diǎn)難。所以先放棄,以后再研究。 對(duì)于JUnit,包括模塊接口測(cè)試、局部數(shù)據(jù)結(jié)構(gòu)測(cè)試、路經(jīng)測(cè)試、錯(cuò)誤處理測(cè)試、邊界測(cè)試。它的核心類主要有jnuit.framework包下的TestCase、Testsuite和TestResult,junit.runnier包下的BaseTestRunner類。而我們現(xiàn)在用到的只有斷言Assert。在這里有一點(diǎn)原則是需要注意的它的測(cè)試名要很容易與應(yīng)用類區(qū)分開來。 我覺得學(xué)會(huì)用ecplise來創(chuàng)建的基于SWT的圖形應(yīng)用程序十分的重要。這個(gè)要源于它的開發(fā)緣由。在這之前,使用的awt是原生窗口部件,但是它一直未能突破LCD。為了解決這個(gè)問題,又開發(fā)了swing。它使用的是仿真窗口部件,不存在LCD問題。但是消耗太多的內(nèi)存等。為了徹底解決 上述問題,IBM開發(fā)了SWT。在基于Windows的ecplise中,SWT通過DLL形式的本地庫與操作系統(tǒng)交互;在UNIX下,SWT可通過的GTK運(yùn)行。 最近的學(xué)習(xí)和看書,讓我覺得自己的真的就像在軟件的最頂層。自己現(xiàn)在學(xué)習(xí)的東西在軟件 中真的是基礎(chǔ)中的基礎(chǔ)。我們還有很長(zhǎng)的路要走。真的要加油,好好學(xué)習(xí)?。?/p> 5.參考文獻(xiàn) [1]java核心技術(shù)卷1:基礎(chǔ)知識(shí) 葉乃文 鄺勁筠 杜永萍 2008.5 機(jī)械工業(yè)出版社 [2]eclipse 3.0 程序開發(fā)技術(shù)詳解 吳越勝 李新磊 2010.10 清華大學(xué)出版社 附件4-6 項(xiàng)目開發(fā)總結(jié)報(bào)告 引言...............................................................................................................................3 1.1 1.2 1.3 1.4 2 編寫目的............................................................................................................3 背景....................................................................................................................3 定義....................................................................................................................3 參考資料............................................................................................................3 實(shí)際開發(fā)結(jié)果................................................................................................................4 2.1 2.2 2.3 2.4 2.5 產(chǎn)品....................................................................................................................4 主要功能和性能.................................................................................................4 基本流程............................................................................................................4 進(jìn)度....................................................................................................................4 費(fèi)用....................................................................................................................5 開發(fā)工作評(píng)價(jià)................................................................................................................5 3.1 3.2 3.3 3.4 對(duì)生產(chǎn)效率的評(píng)價(jià)..............................................................................................5 對(duì)產(chǎn)品質(zhì)量的評(píng)價(jià)..............................................................................................5 對(duì)技術(shù)方法的評(píng)價(jià)..............................................................................................5 出錯(cuò)原因的分析.................................................................................................6 經(jīng)驗(yàn)與教訓(xùn)....................................................................................................................6 引言 1.1 編寫目的 說明編寫這份項(xiàng)目開發(fā)總結(jié)報(bào)告的目的,指出預(yù)期的閱讀范圍。 1.2 背景 說明: 1)本項(xiàng)目的名稱和所開發(fā)出來的軟件系統(tǒng)的名稱; 2)此軟件的任務(wù)提出者、開發(fā)者、用戶及安裝此軟件的計(jì)算中心。 1.3 定義 列出本文件中用到的專門術(shù)語的定義和外文首字母組詞的原詞組。 1.4 參考資料 列出要用到的參考資料,如: 1)本項(xiàng)目的已核準(zhǔn)的計(jì)劃任務(wù)書或合同、上級(jí)機(jī)關(guān)的批文; 2)屬于本項(xiàng)目的其他已發(fā)表的文件; 3)本文件中各處所引用的文件、資料,包括所要用到的軟件開發(fā)標(biāo)準(zhǔn)。列出這些文件的標(biāo)題、文件編號(hào)、發(fā)表日期和出版單位,說明能夠得到這些文件資料的來源。2 實(shí)際開發(fā)結(jié)果 2.1 產(chǎn)品 說明最終制成的產(chǎn)品包括: 1)程序系統(tǒng)中各個(gè)程序的名字,它們之間的層次關(guān)系,以千字節(jié)為單位的各個(gè)程序的程序量、存儲(chǔ)媒體的形式和數(shù)量; 2)程序系統(tǒng)共有哪幾個(gè)版本,各自的版本號(hào)及它們之間的區(qū)別; 3)每個(gè)文件的名稱; 4)所建立的每個(gè)數(shù)據(jù)庫。如果開發(fā)中制訂過配置管理計(jì)劃,要同這個(gè)計(jì)劃相比較。 2.2 主要功能和性能 逐項(xiàng)列出本軟件產(chǎn)品所實(shí)際具有的主要功能和性能,對(duì)照可行性研究報(bào)告、項(xiàng)目開發(fā)計(jì)劃、功能需 .求說明書的有關(guān)內(nèi)容,說明原定的開發(fā)目標(biāo)是達(dá)到了、未完全達(dá)到、或超過了。 2.3 基本流程 用圖給出本程序系統(tǒng)的實(shí)際的基本的處理流程。 2.4 進(jìn)度 列出原定計(jì)劃進(jìn)度與實(shí)際進(jìn)度的對(duì)比,明確說明,實(shí)際進(jìn)度是提前了、還是延遲了,分析主要原因。2.5 費(fèi)用 列出原定計(jì)劃費(fèi)用與實(shí)際支出費(fèi)用的對(duì)比,包括: 1)工時(shí),以人月為單位,并按不同級(jí)別統(tǒng)計(jì); 2)計(jì)算機(jī)的使用時(shí)間,區(qū)別CPU時(shí)間及其他設(shè)備時(shí)間; 3)物料消耗、出差費(fèi)等其他支出。 明確說明,經(jīng)費(fèi)是超出了、還是節(jié)余了,分析其主要原因。開發(fā)工作評(píng)價(jià) 3.1 對(duì)生產(chǎn)效率的評(píng)價(jià) 給出實(shí)際生產(chǎn)效率,包括: 1)程序的平均生產(chǎn)效率,即每人月生產(chǎn)的行數(shù); 2)文件的平均生產(chǎn)效率,即每人月生產(chǎn)的千字?jǐn)?shù); 并列出原訂計(jì)劃數(shù)作為對(duì)比。 3.2 對(duì)產(chǎn)品質(zhì)量的評(píng)價(jià) 說明在測(cè)試中檢查出來的程序編制中的錯(cuò)誤發(fā)生率,即每干條指令(或語句)中的錯(cuò)誤指令數(shù)(或語句數(shù))。如果開發(fā)中制訂過質(zhì)量保證計(jì)劃或配置管理計(jì)劃,要同這些計(jì)劃相比較。 3.3 對(duì)技術(shù)方法的評(píng)價(jià) 給出對(duì)在開發(fā)中所使用的技術(shù)、方法、工具、手段的評(píng)價(jià)。3.4 出錯(cuò)原因的分析 給出對(duì)于開發(fā)中出現(xiàn)的錯(cuò)誤的原因分析。經(jīng)驗(yàn)與教訓(xùn) 列出從這項(xiàng)開發(fā)工作中所得到的最主要的經(jīng)驗(yàn)與教訓(xùn)及對(duì)今后的項(xiàng)目開發(fā)工作的建議。第五篇:附6 軟件項(xiàng)目開發(fā)總結(jié)報(bào)告