![88項(xiàng)目實(shí)戰(zhàn)(全)-學(xué)生管理系統(tǒng)(java)_第1頁(yè)](http://file4.renrendoc.com/view/3316ce4b2e6c9fb77abd387b50f2a9c4/3316ce4b2e6c9fb77abd387b50f2a9c41.gif)
![88項(xiàng)目實(shí)戰(zhàn)(全)-學(xué)生管理系統(tǒng)(java)_第2頁(yè)](http://file4.renrendoc.com/view/3316ce4b2e6c9fb77abd387b50f2a9c4/3316ce4b2e6c9fb77abd387b50f2a9c42.gif)
![88項(xiàng)目實(shí)戰(zhàn)(全)-學(xué)生管理系統(tǒng)(java)_第3頁(yè)](http://file4.renrendoc.com/view/3316ce4b2e6c9fb77abd387b50f2a9c4/3316ce4b2e6c9fb77abd387b50f2a9c43.gif)
![88項(xiàng)目實(shí)戰(zhàn)(全)-學(xué)生管理系統(tǒng)(java)_第4頁(yè)](http://file4.renrendoc.com/view/3316ce4b2e6c9fb77abd387b50f2a9c4/3316ce4b2e6c9fb77abd387b50f2a9c44.gif)
![88項(xiàng)目實(shí)戰(zhàn)(全)-學(xué)生管理系統(tǒng)(java)_第5頁(yè)](http://file4.renrendoc.com/view/3316ce4b2e6c9fb77abd387b50f2a9c4/3316ce4b2e6c9fb77abd387b50f2a9c45.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java項(xiàng)目實(shí)戰(zhàn)——實(shí)訓(xùn)教材主編:徐翠娟、王瓊、陳慧強(qiáng)副主編:楊文、宿佳寧、宋磊、馬慧娟目錄TOC\o"1-3"\u課題一需求分析 3課題二項(xiàng)目計(jì)劃安排 6課題三概要設(shè)計(jì) 11課題四詳細(xì)設(shè)計(jì) 13課題五數(shù)據(jù)庫(kù)設(shè)計(jì) 20課題六開發(fā)前期項(xiàng)目準(zhǔn)備 25課題七系統(tǒng)功能設(shè)計(jì) 27課題八項(xiàng)目的測(cè)試 116課題九實(shí)戰(zhàn)演練 118課題一需求分析一套軟件是否有市場(chǎng),滿足用戶需求是關(guān)鍵因素,所以搞清楚用戶到底需要什么是軟件開發(fā)的頭等大事。用戶需求如何得來?用戶有沒有把需求描述清楚?如何把用戶需求轉(zhuǎn)化成自動(dòng)化方式?軟件的開發(fā)其實(shí)就是從一個(gè)個(gè)問題開始,再一個(gè)個(gè)地解決地過程。整個(gè)需求的過程如圖:用戶需求分析流程圖用戶需求分析流程圖開始需求用戶提出需求分析人員體驗(yàn)用戶工作流程分析人員確定調(diào)研結(jié)果并寫報(bào)告項(xiàng)目組分析并確定最終需求與用戶共同確定工作環(huán)境結(jié)束需求準(zhǔn)備進(jìn)入設(shè)計(jì)1.1用戶提出自己的需求本例用戶是××職業(yè)技術(shù)學(xué)院,目前使用的是手工記錄學(xué)生的信息。隨著學(xué)校規(guī)模的增大以及新增學(xué)生選課的影響,手工方式已經(jīng)無法記錄學(xué)生的實(shí)時(shí)信息,該學(xué)校決定用一套新的學(xué)生信息管理系統(tǒng)軟件,并要求滿足以下條件。(1)學(xué)生卡使用磁卡及防偽標(biāo)志,學(xué)生卡如有遺失,學(xué)校方面可以補(bǔ)辦、原資料需重新錄入。(2)學(xué)生卡不能轉(zhuǎn)借給他人使用,如違反給予相應(yīng)處罰。(3)學(xué)生可以選課,并查看個(gè)人信息。(4)對(duì)學(xué)生信息、選課信息、課程信息進(jìn)行記錄。學(xué)校需要的就是能滿足以上需求的軟件。需求就是一套軟件的終極目標(biāo),但并不是每一個(gè)需求都能達(dá)到的,分析人員還要根據(jù)開發(fā)環(huán)境一條條地分析這些需求。1.2系統(tǒng)分析人員分析用戶的需求分析人員體驗(yàn)用戶環(huán)境當(dāng)軟件公司在接到用戶的需求時(shí),不是盲目地進(jìn)行開發(fā),而是應(yīng)該對(duì)需求進(jìn)行調(diào)研。需求的調(diào)研就是親自到用戶那里體驗(yàn)整個(gè)工作過程,掌握軟件的運(yùn)行環(huán)境以及人員操作水平等。系統(tǒng)分析員的任務(wù)就是了解并確認(rèn)用戶的需求,最終做出系統(tǒng)的流程設(shè)計(jì)。分析人員如何快速有效地掌握用戶的整體情況,最好的方法就是提問題,然后找到這些問題的答案,不管什么樣的軟件系統(tǒng),都可以從以下問題出發(fā)。(1)用戶為什么要引入系統(tǒng)?這個(gè)問題的答案將最終決定軟件的定位。一套軟件系統(tǒng)可繁瑣可簡(jiǎn)單,根據(jù)用戶需要軟件的原因制定快速的開發(fā)計(jì)劃,既滿足了用戶需求又節(jié)省了開發(fā)時(shí)間,降低了雙方的成本。(2)軟件要實(shí)現(xiàn)什么功能?用戶最初的需求列表是否可行,分析人員要深入到用戶的工作流程中,親自體驗(yàn)工作環(huán)境,對(duì)照用戶需求來分析各個(gè)流程是否有局限性,并與用戶的管理層多進(jìn)行溝通,對(duì)需求有異議的地方力求妥善解決。(3)操作人員有哪些?對(duì)于一個(gè)完善的軟件系統(tǒng)來說,安全是不可缺少的一部分。并不是所有的人都能管理軟件系統(tǒng),不同的人應(yīng)該具備不同的權(quán)限。從軟件角度講,就是角色分配問題。管理人員有編輯刪除的權(quán)限,而普通人員只能查看。分析人員要時(shí)刻與管理人員進(jìn)行溝通,了解用戶的組織管理機(jī)構(gòu),掌握用戶角色的精確劃分。(4)如何滿足用戶的需求?一個(gè)完整的軟件系統(tǒng),首先功能要完整,即用戶的需求必須滿足。軟件該使用什么樣的方式來滿足用戶的需求,并在滿足需求的同時(shí),提高用戶的工作效率,節(jié)約用戶的工作成本。分析人員要理清思路,清晰地處理與用戶之間的每個(gè)問題,并將結(jié)果記錄,為以后設(shè)計(jì)用例圖準(zhǔn)備好詳細(xì)資料。因?yàn)椴豢赡芩械拈_發(fā)人員都去用戶那里體驗(yàn)工作流程,所以分析人員要力求實(shí)現(xiàn)需求的準(zhǔn)確性和詳細(xì)性。分析并確定調(diào)研結(jié)果分析人員將需求調(diào)研的結(jié)果帶回公司,寫出調(diào)研報(bào)告、召開會(huì)議研討,開發(fā)人員和項(xiàng)目經(jīng)理等所有參與項(xiàng)目的人都要參加。根據(jù)報(bào)告一條條地分析具體流程的有效性和可行性,從軟件的角度完善其中的細(xì)節(jié),并將不清晰的地方再與用戶進(jìn)行溝通,爭(zhēng)取做到每個(gè)人都清楚地明白用戶究竟要什么樣的功能。研討完畢后,將可行需求和不可行需求(包括有局限性的需求)分別記錄,并在不可行需求中詳細(xì)注明原因,最后說明軟件的目的及功能。在本例中,不可行的需求的列表如下。(1)學(xué)生卡使用磁卡及防偽標(biāo)志。使用磁卡可以,但必須具備掃描卡專用設(shè)備,僅僅靠軟件無法實(shí)現(xiàn)。防偽標(biāo)志的使用由用戶自己決定,也不能通過軟件實(shí)現(xiàn)。(2)學(xué)生卡不能轉(zhuǎn)借他人使用。軟件不是萬能的,無法判斷學(xué)生卡是否是本人使用,此需求只能由用戶管理部分實(shí)施各種監(jiān)管制度來滿足。(3)學(xué)生卡補(bǔ)辦需重新輸入資料,學(xué)生資料已存儲(chǔ)在數(shù)據(jù)庫(kù)中,無需重新輸入所有資料。對(duì)于局限性的需求一定要仔細(xì)推敲,并與用戶緊密溝通,以達(dá)成改善的意見??尚行粤斜韺⒃诤竺娼榻B。軟件的目的是提高用戶的工作效率,細(xì)分員工的工作職責(zé),協(xié)調(diào)部分之間的業(yè)務(wù)往來,監(jiān)督業(yè)務(wù)運(yùn)行的過程。該軟件的主要功能包括。(1)對(duì)學(xué)生信息的管理(2)對(duì)教師信息的管理(3)對(duì)課程信息的管理(4)對(duì)選課信息的管理1.3用戶與項(xiàng)目管理人員確定最后的需求整個(gè)項(xiàng)目組已經(jīng)討論并確定了需求,對(duì)于不清晰的地方也與用戶進(jìn)行了溝通,最后需要列出軟件的最終需求。(1)學(xué)生卡使用磁卡,允許手工輸入學(xué)生證號(hào)和掃描器輸入兩種方式。學(xué)生證號(hào)的長(zhǎng)度為10:1-2位是專業(yè)編號(hào),3-6位是入學(xué)年份,7-10連續(xù)編號(hào)(2)學(xué)生卡辦理之前需登記學(xué)生的詳細(xì)資料,其中包括學(xué)生的學(xué)號(hào)、姓名、性別、生日、地址、電話、身份證號(hào)等,并且系統(tǒng)還應(yīng)能夠修改輸入錯(cuò)誤的學(xué)生個(gè)人信息記錄(3)可以對(duì)學(xué)生所選的課程進(jìn)行管理,包括學(xué)生的可選課程和個(gè)人已選課的信息,并可以進(jìn)行選課。(4)可以對(duì)課程進(jìn)行管理,課程管理包括增加課程,該課程包括任課教師和所屬專業(yè)。(5)根據(jù)學(xué)號(hào)、身份證號(hào)查詢學(xué)生信息。根據(jù)學(xué)號(hào)查詢選課信息。(6)軟件使用權(quán)限管理方式。根據(jù)工作流程,軟件有2種角色:管理員、學(xué)生和教師。管理員允許對(duì)課程信息、教師信息、學(xué)生信息的管理。學(xué)生可以進(jìn)行選課和查看課程信息的操作。教師可以查看本人所授課程的學(xué)生信息(7)本軟件從簽字起二個(gè)月內(nèi)交付。確定需求時(shí),要從用戶實(shí)際需求和工作環(huán)境出發(fā),本著一切為用戶著想的原則,盡量滿足用戶的需求。為了用戶成本方面的考慮,盡量與用戶已有軟件系統(tǒng)不沖突,在可能的情況下,盡量實(shí)現(xiàn)兩個(gè)系統(tǒng)的融合。需求在整個(gè)開發(fā)過程中相當(dāng)重要,一旦與實(shí)際情況出現(xiàn)偏差,則會(huì)造成整個(gè)工程的反復(fù)。確定需求后,項(xiàng)目經(jīng)理開始組織項(xiàng)目開發(fā)小組討論需求以及用戶工作環(huán)境的注意事項(xiàng)。1.4根據(jù)最終需求確定工作環(huán)境軟件環(huán)境除了要安裝學(xué)生管理系統(tǒng)外,還必須具備相應(yīng)的軟件環(huán)境,才能更好地運(yùn)行。(1)Java虛擬機(jī),支持Java開發(fā)的軟件。(2)應(yīng)采用統(tǒng)一的軟件操作系統(tǒng)(XP),這是為了更好地管理。(3)服務(wù)器上安裝數(shù)據(jù)庫(kù)系統(tǒng)(SQLServer2000或2005),從而實(shí)現(xiàn)信息資源安全化管理。(4)安裝防病毒軟件,病毒防火墻等。因?yàn)樗械臋C(jī)器都是互連的,一旦有病毒侵入,容易造成整個(gè)系統(tǒng)的癱瘓。硬件環(huán)境軟件不是一套可獨(dú)立運(yùn)行的系統(tǒng),必須依托在完善的硬件設(shè)備上。本例從實(shí)際應(yīng)用角度考慮,要使軟件正常有效地運(yùn)行,還必須具備以下硬件環(huán)境。(1)操作系統(tǒng)必須是586以上,64MB內(nèi)存配置。為了更好更快地運(yùn)行,如果情況允許,建議盡量采用內(nèi)存較大的電腦。(2)運(yùn)行通暢的網(wǎng)絡(luò)環(huán)境。所有的內(nèi)容都通過網(wǎng)絡(luò)傳輸,如果網(wǎng)絡(luò)出現(xiàn)問題,則系統(tǒng)將無法正常工作。(3)服務(wù)器:由于系統(tǒng)采用C/S結(jié)構(gòu),為了數(shù)據(jù)安全和速度問題,數(shù)據(jù)庫(kù)和系統(tǒng)文件等要求單獨(dú)安裝在一臺(tái)機(jī)器上,服務(wù)器的選擇是系統(tǒng)穩(wěn)定性的關(guān)鍵因素。(4)寫卡器及刷卡器:學(xué)生卡全部采用新版磁卡,必須具備讀寫磁卡的設(shè)備才能進(jìn)行正確的掃描。寫卡器一般用于向?qū)W生卡內(nèi)寫入學(xué)生學(xué)號(hào)等簡(jiǎn)單信息。以上這些軟硬件環(huán)境一定要跟用戶及時(shí)溝通,如果用戶保證不了這些環(huán)境要求,軟件不能很好地運(yùn)行,后果責(zé)任等一定提前說清楚。確定一切內(nèi)容之后,雙方在最終需求書上簽字,軟件進(jìn)入實(shí)質(zhì)開發(fā)階段。因?yàn)樾枨笫钦麄€(gè)軟件的基礎(chǔ),從開始到了解到分析是一個(gè)異常慎重的過程,每一步的失誤都可能導(dǎo)致軟件的重新開發(fā)。為了更好、更快地開發(fā)系統(tǒng),項(xiàng)目小組要在開發(fā)前進(jìn)行充分的討論,有問題的地方一定要跟用戶及時(shí)溝通。最后要做出需求說明書,供將來設(shè)計(jì)、開發(fā)和測(cè)試等人員查看。需求說明書一般采用IEEE標(biāo)準(zhǔn)830-1998(IEEE1998)描述的需求規(guī)格說明書模板,如表所示。需求說明書根據(jù)模板格式書寫清楚,放在公司的共享資料庫(kù)內(nèi),整個(gè)需求分析過程就結(jié)束了,項(xiàng)目進(jìn)入第二階段。課題二項(xiàng)目計(jì)劃安排一項(xiàng)任務(wù)的成功完成,必須依靠合理的計(jì)劃安排以及各種資源的有效利用。有計(jì)劃、有步驟地進(jìn)行軟件開發(fā),除了可以提高開發(fā)進(jìn)度外,更能明確項(xiàng)目組各成員之間的職責(zé)及任務(wù)。項(xiàng)目進(jìn)度表要安排每個(gè)成員的任務(wù),并要求成員每天修改自己的進(jìn)度,保證項(xiàng)目管理人員可以隨時(shí)查看整個(gè)項(xiàng)目的進(jìn)度,以及時(shí)發(fā)現(xiàn)問題,調(diào)整工作策略。2.1項(xiàng)目計(jì)劃軟件對(duì)于項(xiàng)目計(jì)劃軟件,主要使用的是Microsoft提供的Project。Project2003是Office2003中帶的一項(xiàng),安裝比較簡(jiǎn)單,所以安裝過程不作介紹。創(chuàng)建一個(gè)進(jìn)度表Project項(xiàng)目軟件是一個(gè)可以直觀顯示項(xiàng)目進(jìn)度和管理項(xiàng)目資源的軟件。下面創(chuàng)建一個(gè)本例的初期進(jìn)度安排表。(1)打開Project,選擇“文件|新建”菜單命令,出現(xiàn)窗口如圖2-1所示。默認(rèn)情況下開打4個(gè)區(qū)域:視圖、任務(wù)定義、任務(wù)列表、圖形任務(wù)顯示。一般,所有的任務(wù)都在任務(wù)列表區(qū)完成,圖形任務(wù)顯示區(qū)只用于顯示,不能修改。圖2-1Project的工作界面(2)新建一個(gè)任務(wù),雙擊任務(wù)列表區(qū)的第一行,出現(xiàn)對(duì)話框,如圖2-2所示。這里有6個(gè)選項(xiàng)卡:常規(guī)、前置任務(wù)、資源、高級(jí)、備注、自定義域,通常情況下只設(shè)置前4個(gè)即可。常規(guī)選項(xiàng)卡中要求寫明任務(wù)的名稱,工期長(zhǎng)短,開始日期和結(jié)束日期;前置任務(wù)選項(xiàng)卡中要求寫明必須完成什么任務(wù)后才可以進(jìn)行此項(xiàng)任務(wù);資源選項(xiàng)卡中寫明此項(xiàng)任務(wù)需要的資源,包括人員、設(shè)備等。高級(jí)選項(xiàng)卡一般指明此任務(wù)的一些限制。圖2-2任務(wù)信息圖(3)填寫任務(wù)名稱和任務(wù)所需資源后,就粗略完成了一項(xiàng)任務(wù),如圖2-3所示。圖2-3填寫好任務(wù)的工作界面使用不同的圖表顯示項(xiàng)目進(jìn)度為了更加直觀地顯示任務(wù)安排,Project提供了多種圖形供選擇。有甘特圖、跟蹤甘特圖、日歷圖、網(wǎng)格圖等,默認(rèn)的圖形是甘特圖。下面分別介紹各種圖形的顯示方式。在“視圖欄”中有一些變換圖形顯示的快捷按鈕。(1)單擊“日歷”按鈕,界面變化為如圖2-4所示的效果。這主要是以日歷的形式展現(xiàn)每個(gè)任務(wù)以及任務(wù)的工期。圖2-4日歷式顯示任務(wù)(2)單擊“網(wǎng)格”按鈕,以分段的形式展示任務(wù)列表,如圖2-5所示。這樣更直觀地顯示了有多少任務(wù)以及任務(wù)的安排時(shí)間
圖2-5網(wǎng)絡(luò)式顯示任務(wù)(3)單擊“跟蹤甘特圖”按鈕,以進(jìn)度比例的方式顯示每個(gè)任務(wù),如圖2-6所示。這個(gè)圖和甘特圖是十分相似的,只是有個(gè)進(jìn)度跟蹤顯示,其他沒什么區(qū)別。圖2-6跟蹤甘特圖式顯示任務(wù)每種圖都從不同的角度顯示了進(jìn)度安排情況,但只有甘特圖的方式可以清晰地顯示任務(wù)的前置關(guān)系(必須完成的前提任務(wù))、任務(wù)的進(jìn)度等。其他幾種圖只是比較簡(jiǎn)單直觀的顯示任務(wù)名稱及任務(wù)的時(shí)間安排。2.2實(shí)現(xiàn)此項(xiàng)目需要的資源一個(gè)項(xiàng)目,必須包括人員和設(shè)備。在項(xiàng)目進(jìn)度表中所說的資源,就是完成該項(xiàng)目需要的人員和設(shè)備。每個(gè)階段分配不同的資源,什么職責(zé)該干什么,用多長(zhǎng)時(shí)間,就是一個(gè)項(xiàng)目安排進(jìn)度的過程。(1)單擊“視圖欄|資源工作表”列表按鈕,顯示如圖2-7所示界面圖2-7資源工作表(2)添加資源的操作方式與添加任務(wù)是相同的,雙擊表格第一行,出現(xiàn)對(duì)話框,如圖2-8所示。資源信息分5項(xiàng):常規(guī)、工作時(shí)間、成本、備注和自定義區(qū)域。常規(guī)選項(xiàng)卡中主要說明資源的名稱、類型等,一般寫人名。工作時(shí)間選項(xiàng)卡定義工作日和非工作日以及工作日中幾點(diǎn)到幾點(diǎn)屬于工作時(shí)間。成本選項(xiàng)卡設(shè)置某資源1小時(shí)的費(fèi)用,通常用來作成本控制。一般小型軟件不需要設(shè)定。圖2-8資源屬性信息(3)根據(jù)情況填寫資源信息,項(xiàng)目組的人員名稱,筆記本等設(shè)備名稱。人員的類型是“工時(shí)”,設(shè)備的類型一般選擇“材料”。(4)單擊“甘特圖”界面轉(zhuǎn)換到任務(wù)列表。(5)雙擊要分配資源的任務(wù),打開任務(wù)信息,選中“資源”選項(xiàng)卡,此時(shí)就可以在資源名稱處選擇此任務(wù)需要的資源。如圖2-9所示。圖2-9資源選項(xiàng)卡的內(nèi)容(6)給所有的任務(wù)分配好資源后,可以通過“任務(wù)分配情況”和“資源使用情況”來查看和調(diào)節(jié)每項(xiàng)任務(wù)的資源。除了可以用以上方式添加資源外,Project提供了更簡(jiǎn)便的方式:資源可以從公司的電子通訊簿導(dǎo)入。安排好任務(wù)和資源后,其實(shí)就完成了一個(gè)項(xiàng)目進(jìn)度安排表。因?yàn)镻roject是一個(gè)比較簡(jiǎn)單的工具,十分容易上手,真正功能完善的進(jìn)度表還得在實(shí)踐中不斷地探索。2.3如何寫好項(xiàng)目計(jì)劃安排表項(xiàng)目計(jì)劃不僅僅安排工作日期,還代表了很多在軟件開發(fā)過程中的關(guān)鍵因素,比如成本、資源等。項(xiàng)目計(jì)劃主要內(nèi)容包含以下內(nèi)容。(1)估計(jì)任務(wù)工期。根據(jù)資源的安排情況和任務(wù)的多少以及任務(wù)的完成期限可以估算出整個(gè)項(xiàng)目的工期。(2)分階段地明確項(xiàng)目的進(jìn)度??梢詫⑷蝿?wù)標(biāo)記為里程碑,在甘特圖中就能很明顯地看到所分的階段以及每個(gè)階段的任務(wù)。(3)考慮管理成本。在資源中可以設(shè)置每項(xiàng)資源的工時(shí)費(fèi),Project會(huì)根據(jù)任務(wù)中此項(xiàng)資源的使用情況自動(dòng)核算此項(xiàng)資源在整個(gè)項(xiàng)目中占多大成本。(4)優(yōu)化項(xiàng)目計(jì)劃,控制項(xiàng)目風(fēng)險(xiǎn),滿足預(yù)算要求,保證完成日期。通過以上幾點(diǎn)分析,可以看到項(xiàng)目計(jì)劃既是給管理層人員的一份報(bào)告,又是控制項(xiàng)目小組成員進(jìn)度的一份跟蹤表,起到了承上啟下的作用。知道了項(xiàng)目計(jì)劃可以為系統(tǒng)做什么,則該如何做好呢?這應(yīng)該全面考慮本項(xiàng)目的各個(gè)方面。(1)是否考慮成本預(yù)算問題。如果考慮,則在人員和設(shè)備的選擇上要精確計(jì)算。(2)此項(xiàng)目是否與其他項(xiàng)目有關(guān)聯(lián)。如果有,那需要判斷是否有相沖突的資源,是否可以共享其他的資源以節(jié)約時(shí)間。(3)要及時(shí)記錄任務(wù)進(jìn)度,尤其是在開發(fā)一個(gè)有前置任務(wù)的資源時(shí)。(4)各階段的里程碑要設(shè)置明確,而且要恰到好處。例如分析是一個(gè)階段,開發(fā)是一個(gè)階段,測(cè)試是一個(gè)階段,這樣看起來層次分明,對(duì)各階段的資源也有個(gè)詳細(xì)的劃分。(5)任務(wù)列表不要一個(gè)層級(jí)往下走,要精確劃分,每個(gè)任務(wù)都不能包括太多的功能,有層次的顯示任務(wù),讓其他成員能一目了然。2.4前期的項(xiàng)目計(jì)劃表由于在做項(xiàng)目進(jìn)度安排時(shí),并不知道詳細(xì)的軟件模塊,只知道具體需要哪些功能,所以初期無法詳細(xì)地描述開發(fā)進(jìn)度,而只是給出一個(gè)開發(fā)的時(shí)間段,由分析人員做完具體的模塊劃分后,再在項(xiàng)目計(jì)劃安排表中予以補(bǔ)充。下面是學(xué)生信息管理系統(tǒng)前期的項(xiàng)目進(jìn)度表。如圖2-10所示。圖2-10前期計(jì)劃表在這里,大的任務(wù)主要有6個(gè)。(1)需求分析:分解需求,畫出用例圖,分出類模塊。(2)模塊劃分:將分析出的類分配給不同資源(3)開發(fā):進(jìn)入編寫代碼階段,并要求開發(fā)人員自己進(jìn)行初步測(cè)試。(4)測(cè)試:測(cè)試人員分兩步完成測(cè)試。單元測(cè)試并不要求所有模塊都完成,而集成測(cè)試則是所有模塊完成后統(tǒng)一進(jìn)行的測(cè)試。(5)部署:將開發(fā)完成的代碼部署到服務(wù)器或互聯(lián)網(wǎng)中。(6)材料準(zhǔn)備:相關(guān)資料以及幫助性的說明文檔。在甘特圖中,菱形黑點(diǎn)標(biāo)示里程碑,此進(jìn)度表分了3個(gè)里程碑。(1)模塊劃分完畢(2)開發(fā)完畢(3)測(cè)試完畢從甘特圖中可以很明顯的看出任務(wù)的資源、任務(wù)的進(jìn)度以及某項(xiàng)任務(wù)的前置任務(wù),如此直觀的圖例方便了管理人員的監(jiān)督和開發(fā)人員的計(jì)劃安排。越詳細(xì)的項(xiàng)目計(jì)劃表就越能說明整個(gè)軟件系統(tǒng)開發(fā)流程及資源利用率,所以在實(shí)際應(yīng)用中應(yīng)盡可能詳細(xì)地描述各個(gè)任務(wù)及任務(wù)的輔助信息。課題三概要設(shè)計(jì)概要設(shè)計(jì)階段主要是粗略描述整個(gè)軟件的框架,并從業(yè)務(wù)的角度描述軟件的模塊、工作流程等。項(xiàng)目的成功取決于設(shè)計(jì)的好壞,而概要設(shè)計(jì)則是整個(gè)設(shè)計(jì)的關(guān)鍵部分。概要設(shè)計(jì)的主要任務(wù)是將用戶的需求劃分為不同的功能,然后將這些功能細(xì)分成模塊,并給模塊一些規(guī)則約束,以達(dá)到各個(gè)模塊之間可以相互交流的目的。概要設(shè)計(jì)關(guān)乎到系統(tǒng)的整體架構(gòu),因此想做好一個(gè)概要設(shè)計(jì),不僅僅要熟悉用戶的業(yè)務(wù)流程,還要具備相當(dāng)豐富的設(shè)計(jì)經(jīng)驗(yàn)。3.1概要設(shè)計(jì)的原則概要設(shè)計(jì)是根據(jù)系統(tǒng)分析的需求和工作環(huán)境的情況對(duì)整個(gè)軟件的總體結(jié)構(gòu)進(jìn)行大致的設(shè)計(jì)。概要設(shè)計(jì)要堅(jiān)持以下幾個(gè)原則。(1)細(xì)分原則:軟件系統(tǒng)都是由很多不同的模塊組成,當(dāng)設(shè)計(jì)一套軟件時(shí),要先將所有的功能分解。解決復(fù)雜問題的方法是將其分解成幾個(gè)小問題,一個(gè)個(gè)來解決。(2)提高代碼重用性:在面向?qū)ο笤O(shè)計(jì)中,首先考慮的就是代碼的重用,一個(gè)好的設(shè)計(jì),將來在升級(jí)換代時(shí)不需要太大的改動(dòng),節(jié)省了人力物力。(3)從上而下層層分析:概要設(shè)計(jì)要從整體出發(fā),逐個(gè)剖析軟件的功能,從上而下,先分析系統(tǒng)總的功能,然后一步步細(xì)分,直到最小的功能模塊。(4)一致性原則:概要設(shè)計(jì)要求所有功能模塊在定義時(shí)使用統(tǒng)一的規(guī)范。(5)提高獨(dú)立性,減少耦合:各個(gè)模塊與模塊之間盡量減少關(guān)聯(lián),否則修改一個(gè)地方就會(huì)引起其他多處的變動(dòng),不符合面向?qū)ο蟮脑瓌t。一般情況下,對(duì)類封裝后,只允許對(duì)類進(jìn)行擴(kuò)展,而不能修改,而封裝的類必須具有單一職責(zé),既理論情況下不允許兩個(gè)類共同完成一個(gè)功能。(6)模塊的大小要盡量適中:不是結(jié)構(gòu)算法越復(fù)雜的模塊越好,模塊的大小要根據(jù)實(shí)際工作目標(biāo)和其他類的耦合緊密程度來決定。經(jīng)驗(yàn)表明,一個(gè)模塊的規(guī)模不應(yīng)過大,模塊的總行數(shù)應(yīng)控制在10~100行的范圍內(nèi),最好為30~60行,這樣理解和閱讀都較方便。過長(zhǎng)的模塊往往是分解不充分的表現(xiàn),會(huì)增加閱讀理解的難度;但小規(guī)模太多也會(huì)使模塊之間聯(lián)系變得復(fù)雜,增大系統(tǒng)在模塊調(diào)用時(shí)傳遞信息所花費(fèi)的開銷。由于概要設(shè)計(jì)是整個(gè)設(shè)計(jì)的重中之重,牽一發(fā)而動(dòng)全身,所以要努力做一個(gè)好的概要設(shè)計(jì),才能在今后軟件開發(fā)過程中不再反復(fù)。現(xiàn)在軟件行業(yè)流行模式化驅(qū)動(dòng)設(shè)計(jì),將一些市場(chǎng)上比較成功的模式拿來用在自己的設(shè)計(jì)中。3.2將用戶需求模塊化根據(jù)概要設(shè)計(jì)的原則來分析一下本項(xiàng)目的用戶需求,并最終轉(zhuǎn)化成用程序語(yǔ)言描述的模塊。什么樣的需求才是一個(gè)模塊?模塊應(yīng)該具備如下3個(gè)特征。(1)輸入和輸出:模塊必須能被調(diào)用并且正確的返回調(diào)用,而且調(diào)用都是相對(duì)一個(gè)對(duì)象而言,這是模塊獨(dú)立性的一個(gè)體現(xiàn)。(2)處理功能:模塊必須可以對(duì)調(diào)用的輸入數(shù)據(jù)進(jìn)行靈活的處理,并為輸出準(zhǔn)備好處理結(jié)果。(3)程序代碼:用來實(shí)現(xiàn)模塊功能的源代碼。3.3確定系統(tǒng)最終模塊概要設(shè)計(jì)中最重要的就是確定此項(xiàng)目包括哪些模塊。根據(jù)上兩節(jié)講述的設(shè)計(jì)原則和模塊特征,將用戶需求轉(zhuǎn)化為下面的模塊。(1)管理員模塊:是本系統(tǒng)的核心模塊,該模塊又包括對(duì)學(xué)生管理和課程管理2個(gè)子模塊,功能如下:1)學(xué)生管理子模塊:實(shí)現(xiàn)對(duì)學(xué)生信息的添加、修改、刪除操作,還可以輸入查詢條件進(jìn)行查詢操作。查詢學(xué)生信息查詢學(xué)生信息刪除學(xué)生信息修改學(xué)生信息學(xué)生管理子模塊添加學(xué)生信息圖3-1學(xué)生管理子模塊2)課程管理子模塊:實(shí)現(xiàn)對(duì)課程的添加,添加時(shí)為其分配任課教師、上課時(shí)間和地點(diǎn),實(shí)現(xiàn)對(duì)課程的修改、刪除,查看某個(gè)課程的詳細(xì)信息等。查詢課程信息查詢課程信息刪除課程信息修改課程信息課程管理子模塊添加課程信息圖3-2課程管理子模塊(2)教師模塊:實(shí)現(xiàn)查看自己所教授的課程、課程有哪些學(xué)生選修,以及利用本系統(tǒng)提交學(xué)生的成績(jī)。教師模塊教師模塊查看所授課程錄入學(xué)生成績(jī)圖3-3教師管理模塊(3)學(xué)生模塊:實(shí)現(xiàn)學(xué)生的選課,查看、修改自己的選課信息。學(xué)生模塊學(xué)生模塊選課查看選課信息修改選課信息圖3-4學(xué)生模塊(4)公有模塊:實(shí)現(xiàn)用戶的身份驗(yàn)證,密碼修改,退出系統(tǒng)等功能。公有模塊公有模塊身份驗(yàn)證密碼修改退出系統(tǒng)圖3-5公有模塊3.4根據(jù)模塊劃分完善項(xiàng)目計(jì)劃表在初期的項(xiàng)目計(jì)劃表中,只簡(jiǎn)單地估計(jì)了開發(fā)的時(shí)間,并沒有詳細(xì)劃分模塊。截止到目前,模塊已經(jīng)分配清楚,則必須在項(xiàng)目計(jì)劃表中分配模塊所需的資源以及模塊開發(fā)的時(shí)間這樣能更好地估計(jì)開發(fā)時(shí)間,掌握項(xiàng)目進(jìn)度。課題四詳細(xì)設(shè)計(jì)概要設(shè)計(jì)是為了明確開發(fā)人員的工作步驟和工作目標(biāo)。詳細(xì)設(shè)計(jì)使開發(fā)人員可以輕松地完成代碼的編寫,并熟悉所編寫的業(yè)務(wù)流程。4.1UMLUML(UnifiedModelingLanguage,統(tǒng)一建模語(yǔ)言)是一種可視化的建模語(yǔ)言。對(duì)各建模元素可進(jìn)行詳細(xì)的說明,并能生成所建模型的文檔。為什么用UMLUML語(yǔ)言是一種可視化的語(yǔ)言,是一種圖形符號(hào)。UML的出現(xiàn)就是為了詳細(xì)描述工作過程,以用例驅(qū)動(dòng)的方式描述流程中的元素和順序,客觀而又直觀地體現(xiàn)了業(yè)務(wù)流程。設(shè)計(jì)人員把使用UML的過程叫做建模,建模就是對(duì)現(xiàn)實(shí)的簡(jiǎn)化。使用UML可以給設(shè)計(jì)帶來很多便利。(1)按照程序需要的樣式對(duì)系統(tǒng)實(shí)現(xiàn)可視化流程展示。(2)可以詳細(xì)說明系統(tǒng)的結(jié)構(gòu)和各種行為。(3)對(duì)所有的決策可實(shí)現(xiàn)文檔化管理。(4)可以以體系結(jié)構(gòu)為中心,實(shí)現(xiàn)增量和迭代。UML是統(tǒng)一化的一種設(shè)計(jì)標(biāo)準(zhǔn)。因?yàn)榻y(tǒng)一,所以任何人所做的設(shè)計(jì)只要符合標(biāo)準(zhǔn),都可以很容易地讓別人看懂,符合UML標(biāo)準(zhǔn)的用例圖也可以讓用戶看懂。因此,大部分的設(shè)計(jì)人員目前都采用UML來進(jìn)行詳細(xì)設(shè)計(jì)。UML包括的內(nèi)容UML主要包括3個(gè)構(gòu)造塊,分別是事物、關(guān)系、圖。事物是UML模型中最基本的面向?qū)ο蟮慕ㄖK。其在模型中屬于最靜態(tài)的部分,代表概念上或物理上的元素。UML的4種事物主要包括如下。(1)結(jié)構(gòu)事物:類、接口等。(2)行為事物:交互、狀態(tài)等。(3)分組事物:包。(4)注釋事物:注釋、文檔等。關(guān)系用來形容UML中事物之間的關(guān)聯(lián),某事物是否依賴于其他事物,或者某事物的改變是否會(huì)影響到其他事物。UML的4中關(guān)系包括:依賴、泛化、關(guān)聯(lián)和實(shí)現(xiàn)。圖是組織這些建筑塊的方式。圖代表一系列的元素,這些元素常常被畫成用點(diǎn)(事物)和?。P(guān)系)相連的圖。利用圖來從不同的視角觀察系統(tǒng)。UML的10種圖包括如下。(1)類圖:描述類以及類之間的關(guān)系。描述類的職責(zé),顯示類的方法和屬性。(2)對(duì)象圖:是類圖所反映的事物實(shí)例。(3)用例圖:參與者與模塊間的關(guān)系。(4)交互圖:要實(shí)現(xiàn)一個(gè)目的行為的一種交互操作。(5)順序圖:按時(shí)間順序體現(xiàn)對(duì)象之間的消息傳遞。(6)協(xié)作圖:與順序圖可以互換,主要體現(xiàn)對(duì)象之間的結(jié)構(gòu)組織。(7)狀態(tài)圖:某對(duì)象的幾種可能狀態(tài)以及狀態(tài)之間的切換。(8)活動(dòng)圖:工作流方式的一種圖形展示。(9)構(gòu)件圖:構(gòu)件之間的組織和依賴。(10)部署圖:軟硬件結(jié)合的一種表現(xiàn)整個(gè)系統(tǒng)架構(gòu)的圖例。4.2分析設(shè)計(jì)工具VisioUML只是一種建模語(yǔ)言,不是一種工具,就像Java語(yǔ)言一樣,必須使用Java開發(fā)工具才能進(jìn)行開發(fā)。市場(chǎng)上有很多建模工具,有些工具甚至可以實(shí)現(xiàn)UML與Java語(yǔ)言的互相轉(zhuǎn)換。Visio是Microsoft提供的一款建模工具,使用起來比較方便。為什么用Visio本項(xiàng)目使用的版本是MicrosoftVisualStudio.NETEnterpriseArchitect(VSEA)版本中自帶的Visio。在VS的版本中,只有此版本自帶有Visio。另外,也可以單獨(dú)下載此版本中的Visio。不要使用Office自帶的Visio版本,因?yàn)楹芏喙δ茉谶@個(gè)版本上無法實(shí)現(xiàn)。Visio不僅包括軟件工程的一些建模,還涉及其他建筑、網(wǎng)絡(luò)、建筑工程等建模。Visio中可以全面應(yīng)用UML語(yǔ)言中所有的事務(wù)、關(guān)系和圖,更好地體現(xiàn)了圖形化設(shè)計(jì)的意義。其可視化設(shè)計(jì)允許操作者通過拖拽就能夠輕松地完成模塊的建設(shè)。Visio的開始界面如圖4-1所示,主要包括類別區(qū)和模板區(qū)。圖4-1Visio的開始界面使用Visio設(shè)計(jì)模塊本小節(jié)以學(xué)生管理子模塊為例,詳細(xì)介紹如何用Visio設(shè)計(jì)模塊。(1)啟動(dòng)Visio后單擊“類別區(qū)|軟件”列表按鈕,模板列出預(yù)定義的軟件項(xiàng)目的模板,如圖4-2所示。圖4-2軟件模型(2)選擇模板區(qū)的“UML模型圖”,打開UML模型的工作界面,如圖4-3所示。這里主要包括形狀工具欄、模型資源管理區(qū)、工作區(qū)3部分,從圖中可以看到工具欄區(qū)列出了UML所有的圖形模式。圖4-3Visio的軟件模型工作界面(3)單擊形狀工具欄區(qū)的“UML靜態(tài)結(jié)構(gòu)”列表按鈕,顯示出了在Visio中類圖的所有元素,如圖4-4所示,包括包、類、接口等。圖4-4類圖的元素圖(4)拖拽類元素到工作區(qū),出現(xiàn)一個(gè)UML定義的標(biāo)準(zhǔn)類圖,如圖4-5所示。類圖主要分3部分,最上面顯示類名,中間列出類屬性,最下面類出類的方法。圖4-5類(5)雙擊類圖,打開類的屬性窗口,如圖4-6所示。左側(cè)是對(duì)類中類別的羅列,右側(cè)是每個(gè)類的具體屬性。圖4-6類的屬性窗口(6)在該對(duì)話框右側(cè)類的屬性中,將“名稱”設(shè)置為“Student”;在“可見性”下拉列表中選擇“Public”,因?yàn)橐话闱闆r下類都是對(duì)所有模塊可見,如果僅僅內(nèi)部可見,則選擇“Private”。在“文檔”文本框內(nèi)可以輸入對(duì)此類的描述,以便將來生成統(tǒng)一的文檔資料。(7)選擇左側(cè)列表欄的“特性”,對(duì)話框右側(cè)會(huì)隨之更改為特性的相關(guān)屬性,如圖4-7所示。學(xué)生類型的屬性包括學(xué)生學(xué)號(hào)、密碼、姓名、系院號(hào)、年級(jí)、班級(jí)。單擊“新建”按鈕,將這幾個(gè)屬性添加,并同時(shí)指明屬性的類型和可見性。學(xué)號(hào)(ID:string)、密碼(Password:string)、姓名(Name:string)、院系號(hào)(Depart:int)、年級(jí)(Grade:int)、班級(jí)(Class:int)均為內(nèi)部可見。圖4-7添加屬性的界面(8)選擇左側(cè)列表欄的“操作”項(xiàng),如圖4-8所示。此處允許添加類的操作,即類的方法。學(xué)生類的方法包括:添加學(xué)生信息、修改學(xué)生信息、刪除學(xué)生信息和獲取學(xué)生信息。單擊“新建”按鈕,將這4個(gè)方法添加,并選擇每個(gè)方法的返回類型。圖4-8添加方法界面(9)如果方法有輸入?yún)?shù),則單擊“屬性”按鈕,打開方法屬性窗口,如圖4-9所示,將參數(shù)一一添加即可。圖4-9方法參數(shù)窗口(10)添加完類名、類的屬性、類的方法后,一個(gè)類圖就基本完成了。為了減少以后的設(shè)計(jì)反復(fù),此處對(duì)于類的方法和屬性一定要全面而且精確。當(dāng)然,設(shè)計(jì)需要經(jīng)過很多實(shí)踐經(jīng)驗(yàn)的積累,剛剛開始做設(shè)計(jì)的程序員做不到完美也是允許的。說明:在靜態(tài)類圖中,類名、屬性名、方法名一般要求用英文表示,類名和方法名首字母大寫,屬性名全部小寫。完成的類圖,如圖4-10所示。圖4-10完成屬性和方法的類圖4.3用圖例實(shí)現(xiàn)設(shè)計(jì)既然UML是一種圖形化的設(shè)計(jì)語(yǔ)言,而Visio又是一種圖形化的設(shè)計(jì)工具,則用圖例來實(shí)現(xiàn)設(shè)計(jì),然后再配上文檔說明則是完成詳細(xì)設(shè)計(jì)的最好方法。本節(jié)先用用例圖詳細(xì)說明業(yè)務(wù)流程,再用類圖詳細(xì)描述各個(gè)模塊的功能。用用例圖實(shí)現(xiàn)業(yè)務(wù)流程的設(shè)計(jì)用例圖是描述業(yè)務(wù)流程的一種設(shè)計(jì)圖,由于其簡(jiǎn)單易懂,需求分析人員在初期體驗(yàn)用戶業(yè)務(wù)時(shí),就可以畫出用例圖,并與用戶就用例圖進(jìn)行磋商。這樣,完成的用例圖就比較接近事實(shí)上的業(yè)務(wù)。上一節(jié)講到了類圖,其實(shí)類圖是一種靜態(tài)圖,只是描述一些特性,而用例圖是一種動(dòng)態(tài)行為圖,描述業(yè)務(wù)的流程。本項(xiàng)目以學(xué)生選課為例,設(shè)計(jì)一個(gè)選課的業(yè)務(wù)用例圖。首先用語(yǔ)言描述一下選課的流程。(1)管理員錄入學(xué)生信息和課程信息(2)學(xué)生使用管理員提供的用戶名和密碼登陸本系統(tǒng)。(3)查看可供該學(xué)生選擇的課程列表。(4)從該列表中選擇要所選課程,對(duì)該課程進(jìn)行選課,系統(tǒng)自動(dòng)記錄選課信息。整個(gè)業(yè)務(wù)流程分為4步,下面以圖形化方式描述以上流程。(1)啟動(dòng)Visio的UML模型圖,打開如圖4-3所示界面,顯示類圖的所有元素。(2)選擇左側(cè)形狀工具欄最下面一項(xiàng)“UML用例”,顯示UML用例的模型符號(hào),如圖4-10所示。主角一般表示行為操作者,通常情況下是人或設(shè)備;而用例就是業(yè)務(wù)過程中的一個(gè)行為;包的意義就是統(tǒng)一歸納多步行為。圖4-10UML用例圖模型元素(3)在學(xué)生選課流程中有兩個(gè)主角,管理員和教師,先拖拽出2個(gè)主角符號(hào)到工作區(qū),并分別命名。(4)在此例中有5個(gè)行為,錄入學(xué)生信息、錄入課程信息、登錄、查看課程列表,選課。拖拽5個(gè)“用例”符號(hào)到工作區(qū),并分別命名。此時(shí)的用例圖如圖4-11所示,包括2個(gè)角色5個(gè)用例。圖4-11角色和用例(5)確定角色和行為之間的關(guān)系。角色和行為之間不屬于使用關(guān)系,也不屬于擴(kuò)展關(guān)系,是一般情況下的通信關(guān)系。將“通信”符號(hào)添加到工作區(qū),并依次連接角色和用例,最后如圖4-12所示。圖4-12學(xué)生選課業(yè)務(wù)用例圖業(yè)務(wù)流程圖中要注意有些手工行為在實(shí)際程序中是不能實(shí)現(xiàn)的,但為了體現(xiàn)業(yè)務(wù)流程的完整性,一般還是在用例圖中體現(xiàn),此時(shí)要根據(jù)實(shí)際程序加以注釋或說明。類圖實(shí)現(xiàn)靜態(tài)模塊結(jié)構(gòu)的設(shè)計(jì)開發(fā)人員了解一個(gè)類的屬性就是靠研究類圖和業(yè)務(wù)流程。類圖是設(shè)計(jì)人員根據(jù)業(yè)務(wù)流程和面向?qū)ο笤O(shè)計(jì)原則總結(jié)出來的相關(guān)屬性的集合,便于將來代碼的重用和維護(hù)。類圖與類圖之間的關(guān)系雖然在設(shè)計(jì)類時(shí),要堅(jiān)持類與類之間低耦合的原則,但很多情況下,類于類之間有相互調(diào)用或依賴的關(guān)系,所以為了讓開發(fā)人員清晰地明白類和類之間的關(guān)系,設(shè)計(jì)人員應(yīng)該有條理的設(shè)計(jì)好類圖與類圖之間的依賴關(guān)系。類與類之間的依賴關(guān)系在Visio中定義了以下幾種。(1)Call:調(diào)用。某類中的方法可以調(diào)用其他類的方法,箭頭指向被調(diào)用者。(2)Friend:友好。兩個(gè)類是友元關(guān)系。(3)實(shí)例:某對(duì)象是某類的實(shí)例。(4)繼承:某類是某類的子類,這個(gè)是比較常見的類的關(guān)系。課題五數(shù)據(jù)庫(kù)設(shè)計(jì)數(shù)據(jù)是企業(yè)運(yùn)作過程中不可缺少的重要部分,建立自己的數(shù)據(jù)資料庫(kù)是提高企業(yè)整體競(jìng)爭(zhēng)力的關(guān)鍵因素。對(duì)于程序而言,安全完整地保存客戶的信息是一種責(zé)任,因此,數(shù)據(jù)庫(kù)設(shè)計(jì)就成了整個(gè)軟件開發(fā)中重要的一個(gè)環(huán)節(jié)。一旦數(shù)據(jù)設(shè)計(jì)出現(xiàn)問題,軟件就會(huì)出現(xiàn)問題,某些功能的使用就發(fā)揮不了最大作用。所以,為了更好地開發(fā)數(shù)據(jù)庫(kù),了解信息的來源以及信息的流向是頭等大事。對(duì)于客戶的整個(gè)操作流程,都要親身參與,才能客觀地掌握數(shù)據(jù)資料的真實(shí)性,為設(shè)計(jì)良好的數(shù)據(jù)庫(kù)打下基礎(chǔ)。本章主要介紹如何收集客戶的數(shù)據(jù)資料,并將其轉(zhuǎn)化為程序需要的數(shù)據(jù)資源。5.1羅列數(shù)據(jù)信息在前面已經(jīng)羅列出了用戶的需求,這也正是數(shù)據(jù)庫(kù)信息的來源。根據(jù)列表內(nèi)容,可以提煉出以下數(shù)據(jù)信息。(1)需要管理學(xué)生信息:學(xué)生表。(2)需要管理教師信息:教師表。(3)需要管理課程信息:課程表。(4)需要管理選課信息:選課表。(5)需要管理院系信息:院系表。(6)需要管理管理員信息:管理員表。很多初做設(shè)計(jì)的程序員容易犯一個(gè)錯(cuò)誤:每個(gè)需求都做成一個(gè)獨(dú)立的表。其實(shí)這是一個(gè)誤區(qū),在選擇表時(shí),需要遵守以下原則。(1)每個(gè)表中不能有重復(fù)的字段屬性。(2)將相關(guān)數(shù)據(jù)合成到一個(gè)表中。(3)每個(gè)表都有一個(gè)主鍵,而其他屬性對(duì)這個(gè)主鍵有依賴性。對(duì)于重復(fù)添加的字段屬性,最好單獨(dú)列表,如果教師信息中有職稱這個(gè)字段屬性,這個(gè)字段就是重復(fù)增加的。為了減少數(shù)據(jù)冗余,可以單獨(dú)將城市拿出來做一個(gè)表。5.2根據(jù)數(shù)據(jù)信息構(gòu)建表結(jié)構(gòu)對(duì)于如何提取數(shù)據(jù)表字段,要遵守3個(gè)原則。(1)每個(gè)字段都是不可再分的最小數(shù)據(jù)單位。(2)非主鍵字段必須完全依賴于主鍵(3)如果兩個(gè)表存在關(guān)聯(lián),必須有字段作為外鍵進(jìn)行連接。表5-1Student(學(xué)生)表字段名數(shù)據(jù)類型備注stuIDvarchar(20)notnull學(xué)號(hào)stuPwdvarchar(20)notnull密碼stuNamevarchar(10)notnull姓名stuDepartint系院號(hào)stuGradeint年級(jí)stuClassint班級(jí)表5-2Teacher(教師)表字段名數(shù)據(jù)類型備注teaIDvarchar(20)notnull教師編號(hào)teaPwdvarchar(20)notnull教師密碼teaNamevarchar(10)notnull教師姓名teaDepartint系院號(hào)表5-3Cource(課程)表字段名數(shù)據(jù)類型備注courceIDvarchar(20)notnull課程編號(hào)tealIDvarchar(20)notnull教師編號(hào)courceNamevarchar(100)notnull課程名稱courceTimevarchar(20)上課時(shí)間courceAddressvarchar(50)上課地點(diǎn)courceInfotext課程簡(jiǎn)介表5-4Elect(選課)表字段名數(shù)據(jù)類型備注electIdintnotnull選課編號(hào)stuIDvarchar(20)notnull學(xué)生編號(hào)teaIDvarchar(20)notnull教師編號(hào)courceIDvarchar(20)notnull課程編號(hào)scoreint成績(jī)表5-5Users(系統(tǒng)管理員)表字段名數(shù)據(jù)類型備注adminNamevarchar(20)notnull管理員用戶名adminPwdvarchar(20)管理員密碼表5-6Depart(系院)表字段名數(shù)據(jù)類型備注departedintnotnull系院號(hào)departNamevarchar(100)系院名稱5.3數(shù)據(jù)庫(kù)構(gòu)建工具PowerDesigner本項(xiàng)目的數(shù)據(jù)庫(kù)采用SQLServer,它的功能很強(qiáng)大,可以完成所有與數(shù)據(jù)表相關(guān)的操作。因?yàn)槠涮珡?qiáng)大,從而增加了復(fù)雜性,操作起來不容易上手,顯示出來也不夠直觀。為了方便用戶構(gòu)建數(shù)據(jù)表,Sybase公司推出了PowerDesigner工具。使用構(gòu)建工具PowerDesignerPowerDesigner是一種功能強(qiáng)大的數(shù)據(jù)庫(kù)設(shè)計(jì)工具,其優(yōu)點(diǎn)如下。(1)可以圖形化地展現(xiàn)數(shù)據(jù)庫(kù)的結(jié)構(gòu)(2)可以方便地修改數(shù)據(jù)庫(kù)和表結(jié)構(gòu)(3)與數(shù)據(jù)庫(kù)之間可以進(jìn)行反向操作,既可以很方便的生成數(shù)據(jù)庫(kù),也可以將已有數(shù)據(jù)庫(kù)的內(nèi)容通過逆向工程顯示在PowerDesigner中。綜上所述,為了可以直觀顯示數(shù)據(jù)庫(kù)的設(shè)計(jì),并很好地體現(xiàn)數(shù)據(jù)庫(kù)中各表之間的關(guān)系,采用PowerDesigner將使所有操作變得簡(jiǎn)單。PowerDesigner的使用目前市場(chǎng)上通用的版本是PowerDesigner9.5,最新版本是PowerDesigner12。為了快速地掌握其應(yīng)用,本項(xiàng)目所有的數(shù)據(jù)庫(kù)設(shè)計(jì)都以比較容易上手的PowerDesigner9.5為例。PowerDesigner有4種模型文件。(1)概念數(shù)據(jù)模型(CDM):僅僅表示數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu),與用什么軟件沒有關(guān)系,一般不用來實(shí)現(xiàn)的數(shù)據(jù)抽象表。(2)物理數(shù)據(jù)模型(PDM):具體表示表的結(jié)構(gòu)和關(guān)系。(3)面向?qū)ο髷?shù)據(jù)模型(OOM):用來設(shè)計(jì)類的一種模型,由于功能有限,并不通用。(4)業(yè)務(wù)程序模型(BPM):對(duì)任務(wù)的流程進(jìn)行描述的模型,也不通用。這4種模型中,物理數(shù)據(jù)模型是目前數(shù)據(jù)庫(kù)設(shè)計(jì)領(lǐng)域比較常用的一種模型。PowerDesigner的安裝比較簡(jiǎn)單,不再介紹。下面學(xué)習(xí)使用PowerDesigner創(chuàng)建一個(gè)物理數(shù)據(jù)模型。(1)打開PowerDesigner,其工作界面如圖5-1所示,主要包括工作空間、數(shù)據(jù)庫(kù)展示、輸出空間和模型工具欄4個(gè)區(qū)域。圖5-1PowerDesigner的工作界面(2)單擊“文件|數(shù)據(jù)模型”菜單命令,則彈出一個(gè)對(duì)話框。這里選擇PhysicalDataModel,即物理數(shù)據(jù)模型。單擊“確定”按鈕,此時(shí)出現(xiàn)數(shù)據(jù)庫(kù)的選擇界面。因?yàn)槲锢頂?shù)據(jù)模型的設(shè)計(jì)與數(shù)據(jù)庫(kù)類型是密不可分的,所以此處一定不能忽略,本例選擇SQLServer2000,如圖5-2所示。圖5-2選擇數(shù)據(jù)庫(kù)(4)單擊“確定”按鈕,出現(xiàn)一個(gè)空的PowerDesigner工作界面。(5)在工作界面左側(cè)的工作空間中會(huì)多出一行內(nèi)容,默認(rèn)名為PhysicalDataModel_1。雙擊它將出現(xiàn)一個(gè)名為PhysicalDiagram_1的模型表,然后雙擊PhysicalDiagram_1。(6)返回工作界面,會(huì)發(fā)現(xiàn)右側(cè)數(shù)據(jù)庫(kù)展示區(qū)域成為空白,此時(shí)對(duì)于數(shù)據(jù)庫(kù)的構(gòu)建才真正開始。數(shù)據(jù)庫(kù)包括很多關(guān)鍵元素,如觸發(fā)器、存儲(chǔ)過程、表、視圖等。創(chuàng)建元素的模型工具欄如圖5-3所示。這里存放了數(shù)據(jù)庫(kù)的全部關(guān)鍵元素。將鼠標(biāo)指針移動(dòng)到工具欄中某一元素處,就會(huì)顯示元素名稱。圖5-3模型工具欄(7)單擊“表”元素,鼠標(biāo)指針的形狀發(fā)生了變化,然后在右側(cè)空白區(qū)域單擊一下,一個(gè)沒有任何字段的表就建立了。如圖5-4所示。表的圖形分為兩部分,上面是表名稱,下面是表字段。圖5-4表(8)雙擊“表”圖形,出現(xiàn)表的屬性設(shè)置窗口,如圖5-5所示。這里包含了所有的表屬性:列、索引、主鍵等。添加列和添加索引的操作比較簡(jiǎn)單,根據(jù)相關(guān)提示進(jìn)行相應(yīng)的設(shè)置即可。圖5-5表屬性5.4用PowerDesigner構(gòu)建設(shè)計(jì)好的數(shù)據(jù)表了解了每個(gè)表的結(jié)構(gòu)后,在PowerDesigner中就可以輕松地以圖形樣式展現(xiàn)出來,如圖所示。箭頭表示表與表之間的關(guān)聯(lián),箭頭中間的文字表示表與表相互依賴的關(guān)鍵字段。后面標(biāo)志有<PK>或<FK>的字段,表示此字段是主鍵或者外鍵。圖5-6所有表設(shè)計(jì)為了提高數(shù)據(jù)庫(kù)的查詢速度,每個(gè)表又會(huì)建立索引。PowerDesigner默認(rèn)設(shè)置為每個(gè)表必須有一個(gè)索引。因此,當(dāng)構(gòu)建完整個(gè)表結(jié)構(gòu)后,還要給每個(gè)表添加一個(gè)索引。添加索引的原則是唯一性。本例的索引都是加在每個(gè)表的主鍵上,索引名與主鍵名相同。注意:添加索引時(shí)注意將索引的聚集屬性(Cluster)去掉,否則生成數(shù)據(jù)庫(kù)時(shí)會(huì)與表中主鍵沖突。5.5生成數(shù)據(jù)庫(kù)設(shè)計(jì)好軟件所需要的全部數(shù)據(jù)表后,如何將設(shè)計(jì)好的這些圖形元素轉(zhuǎn)化成SQLServer中的數(shù)據(jù)庫(kù)呢?前面提到過,PowerDesigner的一個(gè)優(yōu)點(diǎn)就是對(duì)數(shù)據(jù)庫(kù)可逆。(1)打開PowerDesigner,出現(xiàn)工作界面。(2)單擊“數(shù)據(jù)庫(kù)|生成數(shù)據(jù)庫(kù)”菜單命令,彈出對(duì)話框。這里可以看到所有與生成數(shù)據(jù)庫(kù)有關(guān)的選擇,比如生成文件目的地、是否生成視圖、是否生成主鍵索引等。(3)修改SQl腳本的保存地址,單擊“確定”按鈕,如果不提示錯(cuò)誤,在所選的目的地就能發(fā)現(xiàn)一個(gè)crebas.sql腳本文件。所生成的腳本文件中并沒有關(guān)于數(shù)據(jù)庫(kù)的信息,因?yàn)樗鶆?chuàng)建的僅僅是數(shù)據(jù)庫(kù)中表的所有信息。下面就要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)庫(kù)。(4)打開SQLServer,出現(xiàn)其控制臺(tái)窗口。這里主要包含對(duì)象資源管理器和摘要2個(gè)區(qū)域。(5)在對(duì)象資源管理器中,右鍵單擊“數(shù)據(jù)庫(kù)”項(xiàng)目,在彈出的菜單中選擇“新建數(shù)據(jù)庫(kù)”,就出現(xiàn)了新建數(shù)據(jù)庫(kù)的窗口。(6)在“數(shù)據(jù)庫(kù)名稱”文本框內(nèi),填寫本項(xiàng)目數(shù)據(jù)庫(kù)的名稱:StudentManager。單擊“確定”按鈕,就生成了程序所需的數(shù)據(jù)庫(kù),并返回到數(shù)據(jù)庫(kù)界面。(7)單擊“常規(guī)工具欄|新建查詢”按鈕,系統(tǒng)自動(dòng)創(chuàng)建一個(gè)名為“SQLQuery1.sql”的文本窗口,并顯示在摘要區(qū)內(nèi)。(8)打開第3步生成的腳本文件,按Ctrl+A組合鍵,選擇文件里的所有內(nèi)容,復(fù)制到打開的查詢文件中。(9)檢查一下復(fù)制過來的代碼是否完整,然后在“常規(guī)工具欄|數(shù)據(jù)庫(kù)選擇”下拉框中選擇“StudentManager”。(10)單擊“常規(guī)工具欄|執(zhí)行”按鈕,執(zhí)行腳本。如果提示“命令成功執(zhí)行”,則生成了完整的數(shù)據(jù)庫(kù)文件。在完成對(duì)數(shù)據(jù)庫(kù)中自動(dòng)生成的表的檢查后,如果沒有問題,整個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)就完成了。為了避免日后的重復(fù)操作,在設(shè)計(jì)數(shù)據(jù)庫(kù)時(shí),一定要全面掌握每個(gè)表的信息內(nèi)容,因?yàn)楹笃谠偬砑幼侄螌?huì)帶來極高的維護(hù)成本。課題六開發(fā)前期項(xiàng)目準(zhǔn)備在正式開發(fā)前,為了統(tǒng)一開發(fā)的模式,除了要遵守公司指定的開發(fā)規(guī)范外,還要統(tǒng)一項(xiàng)目的命名、各層文件夾的名稱等。一般由資深程序員或項(xiàng)目管理人員先構(gòu)建一個(gè)新項(xiàng)目,將所需要統(tǒng)一的內(nèi)容填充好,并將整個(gè)項(xiàng)目部署到服務(wù)器的VSS中,再由程序員下載項(xiàng)目并進(jìn)行開發(fā)。6.1版本控制工具VSS在開發(fā)過程中,為了控制開發(fā)錯(cuò)誤以及不同時(shí)期代碼的管理,通常使用版本控制工具。本講主要介紹Microsoft提供的版本控制工具VSS(VisualSourceSafe)。VSS可以詳細(xì)記錄代碼從開發(fā)到發(fā)布期間所有的修改和版本信息,并使用簽入簽出控制一個(gè)代碼文件一次只能由一個(gè)程序員修改,這就保證了源代碼的安全性和準(zhǔn)確性。VSS的使用VSS2005安裝完畢后,在Windows的程序菜單中會(huì)生成兩項(xiàng):MicrosoftVisualSourceSafe和MicrosoftVisualSourceSafeAdministrator。第二項(xiàng)用于權(quán)限管理,控制登錄VSS的用戶數(shù)量和權(quán)限級(jí)別。1.VSS服務(wù)器端使用先在VSSAdministrator中添加項(xiàng)目組的開發(fā)人員名單,權(quán)限由管理員分配。(1)打開VSSAdministrator,出現(xiàn)登錄窗口,如圖所示。首先要?jiǎng)?chuàng)建一個(gè)新的VSS管理數(shù)據(jù)庫(kù)。(2)單擊“Browse”按鈕,打開VSS數(shù)據(jù)庫(kù)窗口,如圖所示。列表中顯示的是之前項(xiàng)目的VSS數(shù)據(jù)庫(kù)。右邊的一系列按鈕可實(shí)現(xiàn)對(duì)這些數(shù)據(jù)庫(kù)信息的操作。(3)單擊“Add”按鈕,此時(shí)會(huì)出現(xiàn)一個(gè)向?qū)?,幫助用戶選擇文件夾并創(chuàng)建數(shù)據(jù)庫(kù)文件。只需按照向?qū)У奶崾疽徊讲竭M(jìn)行即可。(4)完成VSS數(shù)據(jù)庫(kù)建設(shè)后,Dababase的文本框內(nèi)已經(jīng)有了剛創(chuàng)建的目錄。(5)初次登錄時(shí),帳戶“Admin”不需要密碼,單擊“OK”按鈕。打開VSSAdministrator的工作界面,如圖所示。在工作區(qū)的列表中有當(dāng)前Windows系統(tǒng)中的管理帳戶。(6)單擊“User|AddUser”菜單,彈出如圖所示對(duì)話框。在對(duì)話框內(nèi)填寫項(xiàng)目組成員名稱,并指定默認(rèn)密碼。在密碼下方的復(fù)選項(xiàng)“ReadOnly”,表示此成員是否具有只讀屬性。一般對(duì)于測(cè)試人員允許下載代碼,而不允許修改。2.VSS客戶端使用(1)打開MicrsoftVisualSourceSafe,如圖所示。其界面類似于“Windows資源管理器”的一個(gè)操作窗口,左側(cè)是文件夾,右側(cè)顯示文件夾的具體內(nèi)容。下面首先連接要開發(fā)項(xiàng)目的VSS數(shù)據(jù)庫(kù)。(2)單擊“SourceSafeDatabase”菜單,打開如圖所示的窗口。(3)在VSS數(shù)據(jù)庫(kù)對(duì)話框中選擇本項(xiàng)目管理者創(chuàng)建的數(shù)據(jù)庫(kù),在下面輸入登錄名稱。如果希望下次登錄時(shí)不再需要輸入用戶名,可以選中下面的“Openthisdatabasenexttime”復(fù)選框。(4)單擊“Open”按鈕,此時(shí)出現(xiàn)普通用戶的登錄窗口,如圖所示,只是用戶名不同,輸入項(xiàng)目管理者分配的用戶名和密碼。(5)單擊“OK”按鈕。如果此時(shí)有項(xiàng)目,則將登錄成功,并顯示此VSS數(shù)據(jù)庫(kù)中包含的項(xiàng)目。而本例目前沒有項(xiàng)目。(6)單擊“Project”菜單,打開如圖所示對(duì)話框。(7)在“Project”文本框內(nèi)輸入項(xiàng)目的名稱“StudentManager”;在“Comment”文本框內(nèi)輸入項(xiàng)目的描述信息。單擊“OK”按鈕,整個(gè)項(xiàng)目的VSS框架搭建完畢。如果項(xiàng)目還有很多相關(guān)資料和共享圖片,可以在此項(xiàng)目下建立新文件夾并存放資料。需要注意的問題VSS的操作需要注意以下4點(diǎn)。(1)每次開發(fā)前都要先下載最新版本,以免上傳時(shí)覆蓋別人對(duì)項(xiàng)目的修改。(2)如果只修改一個(gè)文件,那就只簽出這一個(gè),不要把整個(gè)文件夾乃至整個(gè)項(xiàng)目都簽出,以免浪費(fèi)時(shí)間。(3)如果需要將整個(gè)項(xiàng)目都簽出,一定要先下載項(xiàng)目的最新版本,修改完畢后立即簽入,以免耽誤別人的工作,因?yàn)檎麄€(gè)項(xiàng)目組都對(duì)這一個(gè)VSS工程進(jìn)行操作。(4)管理人員要控制好項(xiàng)目的版本,如果發(fā)生代碼被覆蓋的情況,可以及時(shí)恢復(fù)。課題七系統(tǒng)功能設(shè)計(jì)7.1系統(tǒng)功能框架作為一個(gè)學(xué)生管理系統(tǒng),本系統(tǒng)的設(shè)計(jì)主要包含:系統(tǒng)登錄、學(xué)生信息管理、班級(jí)管理、課程管理和用戶管理。學(xué)生管理系統(tǒng)主框架的主要結(jié)構(gòu)如下圖所示。圖7-1學(xué)生管理系統(tǒng)框架圖7.2數(shù)據(jù)庫(kù)連接7.2.Java數(shù)據(jù)庫(kù)互連(JDBC,JavaDatabaseConnectivity)API是SunMicrosystems提供的JavaAPI的一部分,它定義了一組API對(duì)象以及與數(shù)據(jù)庫(kù)進(jìn)行交互的方法。為了快速高效地訪問數(shù)據(jù)庫(kù)中的數(shù)據(jù),Java應(yīng)用程序使用了JDBC。雖然Java在其java.io包中提供了豐富的類和接口,但主要的缺陷是,通過這些類和接口訪問的數(shù)據(jù)是以流的形式表示的。因此,對(duì)于訪問存儲(chǔ)在外部數(shù)據(jù)提供的程序中的數(shù)據(jù)的所有Java應(yīng)用程序而言,JDBC是必需的。JDBC連接數(shù)據(jù)庫(kù)可以通過不同的驅(qū)動(dòng)來實(shí)現(xiàn)。JDBC有4種不同的驅(qū)動(dòng)類型,它們分別是:JDBC-ODBC橋驅(qū)動(dòng)程序本地API部分Java驅(qū)動(dòng)程序JDBC網(wǎng)絡(luò)純Java驅(qū)動(dòng)程序純Java驅(qū)動(dòng)程序在本項(xiàng)目中我們使用的是JDBC-ODBC橋驅(qū)動(dòng)程序,這種驅(qū)動(dòng)程序是Sun公司提供的作為JDBC一部分驅(qū)動(dòng)程序,用以從JDBC訪問ODBC數(shù)據(jù)源。它的特點(diǎn)是易于Windows操作系統(tǒng)下的數(shù)據(jù)庫(kù)操作,可移植性強(qiáng)。數(shù)據(jù)庫(kù)連接類詳細(xì)代碼dbConn.java類packagestudenmanager;importjava.sql.*;publicclassdbConn{publicdbConn(){try{jbInit();}catch(Exceptionex){ex.printStackTrace();privateStatementconn(){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Connectioncon=null;con=DriverManager.getConnection("jdbc:odbc:test");Statementstat=con.createStatement();returnstat;catch(ClassNotFoundExceptionex){returnnull;catch(SQLExceptionex1){returnnull;publicResultSetgetRs(Stringsql){try{Statementstat=conn();ResultSetrs=stat.executeQuery(sql);System.out.println(rs);//rs.next();returnrs;catch(SQLExceptionex){System.err.println(""+ex.getMessage());returnnull;publicintgetUpdate(Stringsql){tryStatementstat=conn();inti=stat.executeUpdate(sql);returni;catch(Exceptionex){System.out.println(">>>>>>>>"+ex.getMessage());return-1;privatevoidjbInit()throwsException{7.3學(xué)生管理系統(tǒng)登錄子系統(tǒng).學(xué)生管理系統(tǒng)登錄子系統(tǒng)功能描述根據(jù)用戶權(quán)限的不同,可以以不同的身份登錄學(xué)生管理系統(tǒng)。用戶的權(quán)限為:管理員、教師、學(xué)生。其中,管理員為完全權(quán)限,可以使用學(xué)生管理系統(tǒng)的所有功能;教師為部分權(quán)限,不具有使用“學(xué)生選課”、“課程修改”功能,并且只能修改本人的用戶名和密碼;學(xué)生為部分權(quán)限,具有“選課”和“課程查詢”功能,其他模塊只具有查詢功能,并且只能修改本人的用戶名和密碼。在用戶登錄時(shí),通過用戶所輸入的用戶名和密碼來驗(yàn)證用戶的登錄信息,并判斷用戶的權(quán)限,根據(jù)不同的權(quán)限打開不同的系統(tǒng)主頁(yè)面。圖7-2學(xué)生管理系統(tǒng)登錄頁(yè)面學(xué)生管理系統(tǒng)登錄子系統(tǒng)詳細(xì)代碼LoginFrame.java類packagestudenmanager;importjava.awt.BorderLayout;importjava.awt.Dimension;importjavax.swing.JFrame;importjavax.swing.JPanel;importjava.awt.*;importjavax.swing.JLabel;importjavax.swing.JTextField;importjavax.swing.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.DriverManager;importjava.sql.Statement;importjava.sql.ResultSet;importjava.sql.Connection;publicclassLoginFrameextendsJFrame{JPanelcontentPane;ImageIconsnow=newImageIcon("image/2.jpg");JLabeljLabel1=newJLabel();JLabeljLabel2=newJLabel();JLabeljLabel3=newJLabel();JLabeljLabel4=newJLabel();JLabeljLabel5=newJLabel();JTextFieldjTextField1=newJTextField();JButtonjButton1=newJButton();JButtonjButton2=newJButton();JLabeljLabel6=newJLabel();JLabeljLabel7=newJLabel();JOptionPanejOptionPane1=newJOptionPane();JPasswordFieldjPasswordField1=newJPasswordField();JPaneljPanel1=newJPanel();JLabeljLabel8=newJLabel();CardLayoutcardLayout1=newCardLayout();staticStringlevel,name;publicLoginFrame(){try{setDefaultCloseOperation(EXIT_ON_CLOSE);jbInit();}catch(Exceptionexception){exception.printStackTrace();privatevoidjbInit()throwsException{contentPane=(JPanel)getContentPane();contentPane.setLayout(null);setSize(newDimension(504,344));setTitle("歡迎登陸學(xué)生管理系統(tǒng)");jLabel1.setFont(newjava.awt.Font("Dialog",Font.BOLD,25));jLabel1.setToolTipText("");jLabel1.setText("歡迎登陸學(xué)生");jLabel1.setBounds(newRectangle(128,19,246,30));jLabel2.setFont(newjava.awt.Font("Dialog",Font.BOLD,25));jLabel2.setToolTipText("");jLabel2.setText("管理系統(tǒng)");jLabel2.setBounds(newRectangle(173,61,164,29));jLabel3.setFont(newjava.awt.Font("Dialog",Font.PLAIN,18));jLabel3.setText("用戶名:");jLabel3.setBounds(newRectangle(95,123,77,25));jLabel4.setFont(newjava.awt.Font("Dialog",Font.PLAIN,18));jLabel4.setText("密碼:");jLabel4.setBounds(newRectangle(95,172,74,21));jLabel5.setFont(newjava.awt.Font("Dialog",Font.PLAIN,12));jLabel5.setForeground(Color.red);jLabel5.setText("提示:如果您首次登陸用戶名為admin密碼為空!");jLabel5.setBounds(newRectangle(114,209,275,18));jTextField1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,13));jTextField1.setBorder(BorderFactory.createLoweredBevelBorder());jTextField1.setText("admin");jTextField1.setBounds(newRectangle(188,122,212,27));jButton1.setBounds(newRectangle(124,243,93,30));jButton1.setFont(newjava.awt.Font("Dialog",Font.PLAIN,13));jButton1.setBorder(BorderFactory.createRaisedBevelBorder());jButton1.setText("登陸");jButton1.addActionListener(newLoginFrame_jButton1_actionAdapter(this));jButton2.setBounds(newRectangle(286,243,93,30));jButton2.setFont(newjava.awt.Font("Dialog",Font.PLAIN,13));jButton2.setBorder(BorderFactory.createRaisedBevelBorder());jButton2.setText("退出");jButton2.addActionListener(newLoginFrame_jButton2_actionAdapter(this));jLabel6.setFont(newjava.awt.Font("Dialog",Font.BOLD,25));jLabel6.setForeground(Color.blue);jLabel6.setToolTipText("");jLabel6.setText("管理系統(tǒng)");jLabel6.setBounds(newRectangle(173,62,164,29));jLabel7.setFont(newjava.awt.Font("Dialog",Font.BOLD,25));jLabel7.setForeground(Color.blue);jLabel7.setToolTipText("");jLabel7.setText("歡迎登陸學(xué)生");jLabel7.setBounds(newRectangle(128,20,246,30));jOptionPane1.setBounds(newRectangle(28,263,262,90));jOptionPane1.setLayout(null);jPasswordField1.setBorder(BorderFactory.createLoweredBevelBorder());jPasswordField1.setBounds(newRectangle(187,168,213,26));jPanel1.setBounds(newRectangle(-15,0,529,375));jPanel1.setLayout(cardLayout1);jLabel8.setIcon(snow);contentPane.add(jTextField1);contentPane.add(jLabel3);contentPane.add(jLabel4);contentPane.add(jLabel5);contentPane.add(jButton1);contentPane.add(jButton2);contentPane.add(jLabel1);contentPane.add(jLabel2);contentPane.add(jLabel7);contentPane.add(jLabel6);contentPane.add(jPasswordField1);contentPane.add(jPanel1);jPanel1.add(jLabel8,"jLabel8");contentPane.add(jOptionPane1);publicvoidjButton2_actionPerformed(ActionEvente){System.exit(0);publicvoidjButton1_actionPerformed(ActionEvente){booleandeng=false;booleancheng=false;if(jTextField1.getText().length()==0)jOptionPane1.showMessageDialog(this,"用戶名不能為空!","提示",jOptionPane1.INFORMATION_MESSAGE);}else{deng=true;if(deng){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");}catch(Exceptionce){System.out.println(ce);try{Stringurl="jdbc:odbc:test";Connectioncon=DriverManager.getConnection(url);Statementsta=con.createStatement();ResultSetrs=sta.executeQuery("selectUserId,UserPwd,UserTypefromUser1");while(rs.next()){if(rs.getString(1).trim().equals(jTextField1.getText())&&rs.getString(2).trim().equals(this.jPasswordField1.getText())){jOptionPane1.showMessageDialog(this,"恭喜你登陸成功!","提示",jOptionPane1.INFORMATION_MESSAGE);level=rs.getString("UserType").trim();name=jTextField1.getText().trim();MainFramemain=newMainFrame(level,jTextField1.getText());main.setLocation(200,40);main.setSize(911,698);main.setVisible(true);main.setResizable(false);main.validate();this.dispose();cheng=false;break;}else{cheng=true;if(cheng){jOptionPane1.showMessageDialog(this,"用戶名或密碼錯(cuò)誤!","提示",jOptionPane1.INFORMATION_MESSAGE);rs.close();sta.close();con.close();}catch(Exceptionce){System.out.println(ce);classLoginFrame_jButton1_actionAdapterimplementsActionListener{privateLoginFrameadaptee;LoginFrame_jButton1_actionAdapter(LoginFrameadaptee){this.adaptee=adaptee;publicvoidactionPerformed(ActionEvente){adaptee.jButton1_actionPerformed(e);classLoginFrame_jButton2_actionAdapterimplementsActionListener{privateLoginFrameadaptee;LoginFrame_jButton2_actionAdapter(LoginFrameadaptee){this.adaptee=adaptee;publicvoidactionPerformed(ActionEvente){adaptee.jButton2_actionPerformed(e);LoginClass.java類packagestudenmanager;importjava.awt.Toolkit;importjavax.swing.SwingUtilities;importjavax.swing.UIManager;importjava.awt.Dimension;publicclassLoginClass{booleanpackFrame=false;publicLoginClass(){LoginFrameframe=newLoginFrame();if(packFrame){frame.pack()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智能教室建設(shè)教學(xué)器材采購(gòu)合同范本
- 2025年度文化旅游工程項(xiàng)目入股合同范本
- 2025年度建筑工程居間合同法律適用范本
- 鄂爾多斯2024年內(nèi)蒙古鄂爾多斯市東勝區(qū)衛(wèi)生健康系統(tǒng)事業(yè)單位招聘11人筆試歷年參考題庫(kù)附帶答案詳解
- 遼源2025年吉林遼源市事業(yè)單位碩博人才專項(xiàng)招聘228人筆試歷年參考題庫(kù)附帶答案詳解
- 綿陽(yáng)四川綿陽(yáng)平武縣鄉(xiāng)鎮(zhèn)事業(yè)單位從“大學(xué)生志愿服務(wù)西部”項(xiàng)目人員中招聘3人筆試歷年參考題庫(kù)附帶答案詳解
- 綿陽(yáng)四川綿陽(yáng)鹽亭縣招聘社區(qū)工作者25人筆試歷年參考題庫(kù)附帶答案詳解
- 綿陽(yáng)2025上半年四川綿陽(yáng)江油市考調(diào)教師10人筆試歷年參考題庫(kù)附帶答案詳解
- 濰坊山東濰坊壽光市營(yíng)里中心衛(wèi)生院招聘9人筆試歷年參考題庫(kù)附帶答案詳解
- ???025年海南??谑旋埲A區(qū)面向本科及以上學(xué)歷應(yīng)屆生招聘教師120人筆試歷年參考題庫(kù)附帶答案詳解
- 小學(xué)道德與法治課堂教學(xué)中提升學(xué)生核心素養(yǎng)策略
- 醫(yī)院感染及其危害
- 2025年三人合伙投資合作開店合同模板(三篇)
- 安徽省招生考試數(shù)學(xué)試卷
- 2024全國(guó)各省高考詩(shī)歌鑒賞真題及解析
- 高考日語(yǔ)閱讀理解練習(xí)2篇-高考日語(yǔ)復(fù)習(xí)
- 印刷基礎(chǔ)知識(shí)培訓(xùn)資料
- NB/T 11536-2024煤礦帶壓開采底板井下注漿加固改造技術(shù)規(guī)范
- 2024-2025學(xué)年人教版五年級(jí)(上)英語(yǔ)寒假作業(yè)(一)
- 出口食品生產(chǎn)企業(yè)備案自我評(píng)估表
- 鋼結(jié)構(gòu)廠房招標(biāo)文件
評(píng)論
0/150
提交評(píng)論