版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
PAGE目錄TOC\o”1-3”\h\z\uHYPERLINK\l”_Toc325965338"摘要 IIIHYPERLINK\l”_Toc325965339”Abstract IVHYPERLINK\l”_Toc325965340"第一章緒論 1HYPERLINK\l”_Toc325965341”1.1課題背景 11。3系統(tǒng)開發(fā)環(huán)境 2_Toc325965345”1。5相關(guān)技術(shù)簡介 3HYPERLINK\l”_Toc325965346”1.5.1JSP開發(fā)技術(shù)簡介 3HYPERLINK\l”_Toc325965347”1。5.2SQLServer2005數(shù)據(jù)庫簡介 3第二章可行性研究 5HYPERLINK\l”_Toc325965349"2。1技術(shù)可行性 52。2經(jīng)濟可行性 5HYPERLINK\l”_Toc325965351"2。3法律可行性 62。4運行可行性 6HYPERLINK\l”_Toc325965353”第三章需求分析 7HYPERLINK\l”_Toc325965354"3。1前臺業(yè)務(wù)流程分析 7HYPERLINK\l”_Toc325965355"3。2后臺業(yè)務(wù)流程分析 73.3數(shù)據(jù)流程分析 8HYPERLINK\l”_Toc325965357"第四章系統(tǒng)總體設(shè)計 10HYPERLINK\l”_Toc325965358”4。1系統(tǒng)結(jié)構(gòu)分析 104。2功能模塊設(shè)計 114.2.2后臺模塊的功能模塊設(shè)計 12HYPERLINK\l”_Toc325965362”4。3數(shù)據(jù)庫設(shè)計 13HYPERLINK\l”_Toc325965363”4。3.1E—R圖 14HYPERLINK\l”_Toc325965364”4。3.2基本表設(shè)計 18HYPERLINK\l”_Toc325965365"第五章系統(tǒng)詳細設(shè)計 225。2系統(tǒng)前臺各主要模塊的功能設(shè)計 235。2.1用戶登陸模塊的實現(xiàn) 23HYPERLINK\l”_Toc325965369”5.2。2新會員注冊模塊的實現(xiàn) 245。2。3購物車模塊的實現(xiàn) 26_Toc325965372"5。3后臺管理模塊的實現(xiàn) 30HYPERLINK\l”_Toc325965373"第六章系統(tǒng)測試及性能分析 34HYPERLINK\l”_Toc325965374"6。1測試的基本概念 346。3系統(tǒng)測試 35HYPERLINK\l”_Toc325965377”6.4系統(tǒng)的性能分析 37HYPERLINK\l”_Toc325965378"6。5系統(tǒng)中所存在的問題及解決方案 38_Toc325965380”6。5.2開發(fā)功能模塊所遇到的難點 39HYPERLINK\l”_Toc325965381”6.5。3系統(tǒng)中存在的問題及擬定的解決方法 39HYPERLINK\l”_Toc325965382”總結(jié) 41HYPERLINK\l”_Toc325965383”參考文獻 42HYPERLINK\l”_Toc325965384”致謝 43\t"_blank”程序所需的可靠性和伸縮性。其中,用以提高可靠性的特性包括日志傳送、在線備份和故障切換群集。在伸縮性方面的改進包括對多達32顆CPU和64GBRAM的支持.通過自動優(yōu)化和改進后的管理特性——諸如數(shù)據(jù)文件尺寸的自動管理、基于向?qū)У臄?shù)據(jù)庫拷貝、自動內(nèi)存管理和簡化的故障切換群集安裝與管理,在線商務(wù)應(yīng)用程序能夠被迅速部署并有效管理。
第二章可行性研究可行性分析是在全面調(diào)查基礎(chǔ)上,針對新系統(tǒng)的開發(fā)是否具備必要性的可能性,對新系統(tǒng)的開發(fā)從技術(shù)、經(jīng)濟、運行的方面進行分析和研究,以避免投資失誤,保證新系統(tǒng)開發(fā)成功,可行性研究的目的就是用最小的代價在盡可能短的時間內(nèi)確定問題是否能夠解決.這部分將從以下幾個方面進行研究:技術(shù)可行性、經(jīng)濟可行性、法律可行性和運行可行性.2。1技術(shù)可行性技術(shù)可行性是對現(xiàn)有技術(shù)進行評價,分析系統(tǒng)是否可以用現(xiàn)有技術(shù)來實施以及技術(shù)發(fā)展對系統(tǒng)建設(shè)有什么影響。新系統(tǒng)可以用現(xiàn)有的技術(shù)來實現(xiàn),針對目前的開發(fā)工具而言,新系統(tǒng)比較適合采用流行的WEB開發(fā)工具J2EE.這種開發(fā)工具非常適合于B/S結(jié)構(gòu)的應(yīng)用系統(tǒng),提供了強大的軟件生成器.與其他開發(fā)工具相比,J2EE能夠支持跨平臺客戶端應(yīng)用程序開發(fā)的工具,除WINDOWS外,它還支持MACINTOSH和UNIX平臺,可提供優(yōu)秀的報表生成方法和完整的在線幫助以及豐富的INTERNET訪問功能和組件特征.J2EE安全可靠,對于開發(fā)人員而言開發(fā)方便,對于使用人員而言界面友好,開發(fā)出來的軟件簡單易用,掌握方便。開發(fā)出的軟件易學易用,即便原來沒有什么計算機操作基礎(chǔ)也會很容易學會使用.2.2經(jīng)濟可行性系統(tǒng)的經(jīng)濟可行性指的是對組織的經(jīng)濟狀況和投資能力進行分析,對系統(tǒng)建設(shè)、運行和維護費用進行估算,對系統(tǒng)建成后可能取得的社會及經(jīng)濟效益進行估計.但該平臺設(shè)計只是作為本人的畢業(yè)設(shè)計,又因為本人的設(shè)計能力有限,其功能還不能完善,所以沒有什么經(jīng)濟效益可談.2。3法律可行性該電子商務(wù)系統(tǒng)是本人自主開發(fā)的網(wǎng)上購物系統(tǒng),還是個比較粗糙、功能還不完善的系統(tǒng),開發(fā)這個系統(tǒng)不同于開發(fā)普通的系統(tǒng)軟件,即該系統(tǒng)不同于原來已有的現(xiàn)代化的系統(tǒng),不存在侵權(quán)等問題,本系統(tǒng)開發(fā)不會侵犯他人、集體或國家利益,不違反國家法律,因此具有法律可行性.2。4運行可行性操作可行性是指系統(tǒng)對組織機構(gòu)的影響,現(xiàn)有人員和機構(gòu)、設(shè)施、環(huán)境等對系統(tǒng)的適應(yīng)性以及進行人員培訓的補充計劃可行性。該系統(tǒng)需要搭建JVM即JAVA虛擬機和Tomcat環(huán)境,在此環(huán)境下系統(tǒng),并且在正確連接數(shù)據(jù)庫后可以正常運行.而且從新系統(tǒng)使用難易程度上來看,新系統(tǒng)使用起來并不復雜,界面設(shè)計親切,容易上手,使用起來還是比較方便的。
第三章需求分析軟件需求分析工作是軟件生存周期中重要的一步.只有通過需求分析才能把軟件功能和性能的總體概念描述為具體上的軟件需求規(guī)格說明,從而奠定軟件開發(fā)的基礎(chǔ).軟件需求分析工作也是一個不斷認識和逐步細化的過程。該過程將軟件調(diào)研階段的需求資料進行分析和設(shè)計,使軟件范圍逐步細化到詳細定義的程度,并分析出各種不同的軟件元素,然后為這些元素找到可行的解決辦法。本章將從不同角度的需求分析問題,講述軟件需求類型,分析過程,并部分給出了數(shù)據(jù)字典和數(shù)據(jù)流圖。3.1前臺業(yè)務(wù)流程分析前臺業(yè)務(wù)主要面向客戶。用戶可以瀏覽網(wǎng)站主頁、商品的介紹和一些新聞信息。前臺業(yè)務(wù)流程如圖3。1所示。商品信息瀏覽商品信息瀏覽瀏覽商品清單訂購訂單用戶購物車瀏覽商品清單訂購訂單用戶購物車查看訂單查看訂單修改資料修改資料修改資料修改資料圖3。1前臺業(yè)務(wù)流程3。2后臺業(yè)務(wù)流程分析在網(wǎng)站設(shè)計中,管理員完成對網(wǎng)站的維護與管理的工作.使用數(shù)據(jù)庫中權(quán)限的功能對管理員設(shè)置權(quán)限,管理員可以對管理及商品分類的信息進行新增,修改、刪除,也可以對訂單信息進行查看、撤銷、編輯狀態(tài)等處理,同時管理員也可以對用戶信息進行管理。后臺業(yè)務(wù)流程如圖3。2所示。管理員管理員維護網(wǎng)站取出訂單維護網(wǎng)站取出訂單受理訂單受理訂單網(wǎng)站信息網(wǎng)站信息訂單提交訂單提交網(wǎng)站信息網(wǎng)站信息圖3。2后臺業(yè)務(wù)流程3。3數(shù)據(jù)流程分析在分析了系統(tǒng)的業(yè)務(wù)流程之后,就要分析系統(tǒng)的數(shù)據(jù)流,為后面設(shè)計網(wǎng)站的數(shù)據(jù)庫做好準備.這里主要利用數(shù)據(jù)流程圖來說明數(shù)據(jù)流程。數(shù)據(jù)流程圖是一個圖示工具,容易理解,容易在開發(fā)和用戶之間進行交流,以及在開發(fā)組織內(nèi)部交流。因此數(shù)據(jù)流圖作為一種模型工具已經(jīng)廣泛使用在軟件工程的事件中。根據(jù)前臺業(yè)務(wù)流程,可以將用戶的活動分為兩類.用戶瀏覽所使用到的數(shù)據(jù)歸納為站內(nèi)信息,如商品信息等。而用戶提交的訂單則作為網(wǎng)站的訂單數(shù)據(jù)。相應(yīng)的,根據(jù)后臺業(yè)務(wù)流程,管理員對網(wǎng)站內(nèi)容的添加、更新和刪除等所操作的數(shù)據(jù)定義為商城信息.網(wǎng)站數(shù)據(jù)流的總體圖如圖3。3所示。商城信息0網(wǎng)站系統(tǒng)商城信息0網(wǎng)站系統(tǒng)管理員站內(nèi)信息用戶站內(nèi)信息用戶訂單數(shù)據(jù)用戶訂單數(shù)據(jù)用戶圖3。3網(wǎng)站數(shù)據(jù)流的總體圖進一步分析網(wǎng)站的數(shù)據(jù)流程,得到網(wǎng)站數(shù)據(jù)流程的零級圖,如圖3。4所示.圖3.4網(wǎng)站數(shù)據(jù)流的零級圖第四章系統(tǒng)總體設(shè)計 本階段設(shè)計的基本目標是解決系統(tǒng)如何實現(xiàn)問題,也叫做概要設(shè)計,本階段主要任務(wù)是劃分出系統(tǒng)的物理元素及設(shè)計軟件的結(jié)構(gòu),完成軟件定義時期的任務(wù)之后就應(yīng)該對系統(tǒng)進行總體設(shè)計,即根據(jù)系統(tǒng)分析產(chǎn)生的分析結(jié)果來確定這個系統(tǒng)由哪些系統(tǒng)和模塊組成,這些系統(tǒng)和模塊又如何有機的結(jié)合在一起,每個模塊的功能如何實現(xiàn)。系統(tǒng)設(shè)計的目標是使系統(tǒng)實現(xiàn)擁有所要求的功能,同時,力爭達到高效率、高可靠性、可修改性,并且容易掌握和使用??傮w設(shè)計過程通常有兩個主要階段組成:系統(tǒng)設(shè)計和結(jié)構(gòu)設(shè)計,其中系統(tǒng)設(shè)計確定系統(tǒng)的具體實現(xiàn)方案,結(jié)構(gòu)設(shè)計確定軟件結(jié)構(gòu).結(jié)構(gòu)化設(shè)計技術(shù)的核心是模塊分解設(shè)計,模塊上系統(tǒng)結(jié)構(gòu)圖的主要元素.其設(shè)計思想是,采用自頂向下、逐層分解的方法,先給出總的模塊功能,再逐層分解,使其分為多個大小適當,功能明確,具有一定獨立性且容易實現(xiàn)的模塊,從而把一個復雜的系統(tǒng)設(shè)計轉(zhuǎn)變成為多個簡單模塊的設(shè)計.4.1系統(tǒng)結(jié)構(gòu)分析根據(jù)業(yè)務(wù)流程,需要將網(wǎng)站劃分為前臺、后臺和數(shù)據(jù)庫。前臺中,客戶在登錄網(wǎng)站主頁后即可鏈接查看網(wǎng)站等信息,還可以做訂購商品等活動。為了方便客戶搜索感興趣的商品信息,將商品搜索嵌入到主頁面中。數(shù)據(jù)庫將要作為網(wǎng)站后臺重要的組成部分,管理員的主要操作幾乎圍繞數(shù)據(jù)庫,最后將更新的數(shù)據(jù)顯示給前臺.前臺是一個比較大的功能群,它所包含的信息不僅數(shù)量多,而且種類不同.將它設(shè)計成比較優(yōu)化的結(jié)構(gòu)形式能組織好網(wǎng)站的信息內(nèi)容并將其歸類,方便用戶獲得所需要的信息.其中每一部分都以盡量少內(nèi)容顯示,以免瀏覽者看的眼花繚亂而失去耐心。除了這些作用外,設(shè)計好前臺的結(jié)構(gòu)形式,也是為后面程序的編寫做出了框架.在為系統(tǒng)劃分功能模塊,并以模塊為單位來實現(xiàn)設(shè)計時也是以這個結(jié)構(gòu)為基礎(chǔ)的。系統(tǒng)的后臺要對整個網(wǎng)站的信息和數(shù)據(jù)進行維護。網(wǎng)站前臺所顯示的信息在后臺都應(yīng)該有對應(yīng)的維護。這樣,除了設(shè)計后臺的各個管理界面外,為了方便管理員的工作,可以將各個管理的界面結(jié)合到一個頁面中.因此,各個管理的界面會作為主管理的分支。在設(shè)計好網(wǎng)站前臺和后臺的結(jié)構(gòu)后,就將數(shù)據(jù)庫加入到結(jié)構(gòu)中。后臺將更新的數(shù)據(jù)寫入到數(shù)據(jù)庫中,前臺再將數(shù)據(jù)庫中的信息取出來并顯示。4.2功能模塊設(shè)計層次模塊結(jié)構(gòu)是將系統(tǒng)劃分為若干子系統(tǒng),子系統(tǒng)下在劃分為若干的模塊。而模塊是指具備輸入輸出、邏輯功能、運行程序和內(nèi)部數(shù)據(jù)四種屬性的一組程序。在結(jié)構(gòu)化設(shè)計中,模塊一般都是按功能劃分的,通常稱為功能模塊。合理的功能模塊的劃分能夠極大限度地減少重復勞動、提高開發(fā)工作的效率并增大系統(tǒng)的可維護性.以前面的系統(tǒng)分析為基礎(chǔ),將系統(tǒng)分為兩大模塊,即前臺模塊和后臺模塊。網(wǎng)上購物系統(tǒng)的功能結(jié)構(gòu)如圖4。1所示。網(wǎng)上購物平臺網(wǎng)上購物平臺index.jsp。商品修改用戶管理管理者進入新聞管理用戶注冊商品管理商品添加會員管理新聞修改新聞添加商品名稱用戶修改會員刪除商品搜索網(wǎng)站布局圖4.1網(wǎng)上購物系統(tǒng)的功能結(jié)構(gòu)4.2.1前臺模塊的功能模塊設(shè)計前臺模塊主要為登陸網(wǎng)站的用戶提供商品和服務(wù)的信息,填寫并提交訂單的服務(wù).這樣,將前臺模塊再細分為用戶管理模塊、商品查詢模塊、購物車模塊、修改個人資料模塊。顧名思義,這些模塊的名稱基本概況了它們的功能。下面詳細說明一下這些功能模塊的設(shè)計:(1)用戶管理模塊:為了方便于網(wǎng)站的管理,必須由一套完整的用戶管理體系.該網(wǎng)站用戶管理模塊主要實現(xiàn)用戶的注冊、登陸、修改密碼等功能。(2)購物車模塊:在超市購物,可以根據(jù)自己的需要將很多商品挑選至購物車或購物籃中,然后到收銀臺結(jié)賬。而在網(wǎng)上虛擬的商城中,當然沒有辦法使用真正的購物工具,因此,通常都會采用一種被稱為“購物車"的技術(shù)來模擬現(xiàn)實生活。在網(wǎng)上商城中,所選商品須通過購物車進行暫存,然后生成訂單.這種技術(shù)使用起來十分方便,不但可以隨時添加、查看、修改、清空購物車中的內(nèi)容,還可以隨時去收銀臺結(jié)賬。(3)商品搜索模塊:用戶根據(jù)商品的名稱可以搜索到所需要的商品信息。(4)個人資料管理模塊:用戶資料修改是為更改個人信息所提供的窗口,為了保護用戶信息不受非法侵入,用戶只有登錄后才有權(quán)限修改自己的個人資料.這樣,子模塊各自的內(nèi)容基本設(shè)計好。下面可以設(shè)計如何將這些模塊組織在一起,構(gòu)成一個結(jié)構(gòu)比較合理的前臺了.除了在主頁中建立面向其他模塊的鏈接外,也要在其他模塊中建立返回主頁面的鏈接。另外各個模塊間也應(yīng)該互相鏈接起來。4。2。2后臺模塊的功能模塊設(shè)計后臺管理模塊的功能是對站內(nèi)的資源進行管理和維護.以后臺的業(yè)務(wù)流程分析和前臺各個模塊的設(shè)計為基礎(chǔ),根據(jù)用戶的需求分析來確定后臺管理模塊應(yīng)具有的功能.后臺管理模塊的各個子功能模塊如下:(1)管理員身份驗證模塊:為合法用戶提供一個后臺入口。該模塊的功能是對管理員身份進行驗證.用戶輸入登陸ID和密碼的有效性,如果通過驗證則跳轉(zhuǎn)后臺主頁,否則提示錯誤。(2)商品管理模塊:向商品表插入前臺首頁展示的商品信息,也就是添加商品信息的功能。(3)處理訂單模塊:網(wǎng)站管理者對用戶訂單的執(zhí)行和編輯狀態(tài)。(4)用戶信息管理模塊:查詢所有注冊用戶,對一些非法或失信用戶進行刪除操作。(5)新聞管理模塊:新聞管理即對網(wǎng)站信息的管理,新聞管理是一個商務(wù)網(wǎng)站中不可缺少的組成部分,它可以增進用戶與網(wǎng)站之間的交流。4。3數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫是數(shù)據(jù)庫應(yīng)用程序的重要組成部分。一個設(shè)計結(jié)構(gòu)合理的數(shù)據(jù)庫對于應(yīng)用程序的開發(fā)效率和程序的性能都是非常重要的。數(shù)據(jù)庫的設(shè)計過程大致如下:(1)根據(jù)用戶需求,確定數(shù)據(jù)庫要保存的信息。對用戶需求進行分析時數(shù)據(jù)庫設(shè)計的第一個階段。對用戶需求進行分析是數(shù)據(jù)庫設(shè)計的第一個階段.(2)設(shè)計數(shù)據(jù)庫的概念模型。概念模型是按用戶的觀點來對數(shù)據(jù)建模,使用與進行信息世界建模的工具。它對整個數(shù)據(jù)庫的設(shè)計具有深刻的影響。(3)邏輯結(jié)構(gòu)設(shè)計。邏輯結(jié)構(gòu)是把概念結(jié)構(gòu)轉(zhuǎn)化為與所采用的數(shù)據(jù)庫管理系統(tǒng)所支持系統(tǒng)的數(shù)據(jù)模型相符合的過程。(4)數(shù)據(jù)庫的實施與維護。在設(shè)計好前臺與后天的功能模塊后,就開始進行數(shù)據(jù)庫的設(shè)計了。根據(jù)網(wǎng)站系統(tǒng)的分析,數(shù)據(jù)庫是整個網(wǎng)站的核心。從前臺顯示的信息到后臺操作的對象,都是圍繞數(shù)據(jù)庫展開的.4.3。1E—R圖E—R圖是一種概念模型.概念模型實際上是現(xiàn)實世界到機器世界的一個中間層次。概念模型用于信息世界的建模,是顯示世界到信息世界的第一層抽象,使數(shù)據(jù)庫設(shè)計人員進行設(shè)計的有利工具,也是數(shù)據(jù)庫設(shè)計人員和用戶之間進行交流的語言,因此概念模型一方面應(yīng)該具有較強的語義表達能力,能夠方便直接的表達受眾的各種語義知識,另一方面它還應(yīng)該簡單、清晰并且易于用戶理解。以下是各個數(shù)據(jù)表的實體圖。(1)商品信息表hw的實體圖商品編號商品名稱圖片路徑商品類別編商品編號商品名稱圖片路徑商品類別編號商品描述商品數(shù)量會員價格正常價格是否推薦發(fā)布時間是否特價商品信息會員信息表member的實體圖會員信息會員信息會員密碼會員電話會員編號會員帳號注冊時間會員地址圖4.3用戶信息表tb_User的實體圖訂單表saleorder的實體圖訂單信息訂單信息訂單編號購物時間箱是否已經(jīng)處理稱用戶編號用戶地址圖4。4訂單表saleorder的實體圖
管理員表admin的實體圖管理員信息管理員信息編號管理員名稱稱箱密碼用戶地址圖4。5管理員admin的實體圖(5)新聞列表news的實體圖新聞編號新聞標題新聞類別編號新聞內(nèi)容新聞列表圖4。新聞編號新聞標題新聞類別編號新聞內(nèi)容新聞列表(6)新聞類別列表news_category的實體圖類別名稱類別名稱類別編號類別描述商品信息父節(jié)點id類別排序等級圖4。7新聞類別列表news_category的實體圖(7)訂單產(chǎn)品表saleproduct的實體圖訂單產(chǎn)品信息訂單產(chǎn)品信息編號產(chǎn)品編號箱產(chǎn)品數(shù)量所屬訂單編號產(chǎn)品價格圖4.8訂單產(chǎn)品表的實體圖(8)總體E-R圖
生成生成訂單修改會員信息111nn1會員購買商品圖4。9總體E—R圖4。3。2基本表設(shè)計表的設(shè)計是這次設(shè)計的一個核心內(nèi)容.根據(jù)前面對網(wǎng)站前臺與后臺功能模塊的分析和對數(shù)據(jù)庫中實體關(guān)系的設(shè)計,可以看到網(wǎng)站中所用到的數(shù)據(jù)信息基本包括:會員信息表、訂單表、商品信息表、新聞列表、新聞類別列表、管理員表和訂單產(chǎn)品表.下面是為數(shù)據(jù)庫設(shè)計的表:表4.1商品信息表hw字段字段名類型寬度小數(shù)位索引可否為空Id商品編號Int是否Pname商品名稱Varchar255否Descr商品描述Varchar255是Normalprice正常價格Money是Memberprice會員價格Money是Count商品數(shù)量Long是Categoryid商品類別編號Int是Spcialprice是否是特價產(chǎn)品Int是Commend是否是推薦產(chǎn)品Int是Img圖片路徑Text是Pdate發(fā)布日期Date是對于商品信息表,因為經(jīng)驗不足,我將其關(guān)鍵字段id商品編號采用的是數(shù)據(jù)庫中的自動編號,雖然也確定了商品信息的唯一性,但不具備直觀的特點,在實際應(yīng)用中最好是將其設(shè)置一個命名規(guī)則,管理人員在添加商品的時候能夠自動產(chǎn)生一個有一定規(guī)則和一定意義的命名規(guī)則,方便管理人員對其進行管理和維護,例如對于手機類商品可將其編號設(shè)置為mobile+型號+添加日期,這樣更容易對商品進行管理。Img字段代表圖片,但在這里存放的只是它的路徑所以應(yīng)該使用文本類型。表4.2會員信息表member字段字段名類型寬度小數(shù)位索引可否為空id會員編號自動編號是是Username會員帳號Varchar50否Password會員密碼Varchar50否Addr會員地址Varchar255是Rdate會員添加日期文本型50是Phone會員電話Varchar40是對于會員信息表需要注意的是用戶密碼,由于數(shù)據(jù)庫本身不提供特殊字段的加密,用戶注冊以后注冊密碼是以明碼形式存放在數(shù)據(jù)庫中,這對系統(tǒng)來說是極不安全的,因此需要我們用一些特殊工具來對其進行加密.表4。3訂單表saleorder字段字段名類型寬度小數(shù)位索引可否為空id訂單編號Int否odate購物時間Date是Status是否已經(jīng)處理Int是Userid用戶編號Int182是Addr用戶地址Varchar255是訂單表則是系統(tǒng)中與其他幾個表關(guān)系最多的一個表了,它包含了商品表,會員表中的幾個重要字段,是我們進行最后購物統(tǒng)計的主要依據(jù).表4。4管理員表admin字段字段名類型寬度小數(shù)位索引可否為空id編號自動編號是Admin_name管理員名稱nVarchar50是Password密碼Nvchar50否Level級別Int是該表和會員表一樣存在字段的命名規(guī)則的要求,出于安全考慮對于管理員帳號發(fā)放應(yīng)該謹慎,管理人員數(shù)量一定要控制,越少越安全,在實際應(yīng)用中,我們還要對整個數(shù)據(jù)庫進行加密,以防止系統(tǒng)重要數(shù)據(jù)泄漏。表4.5新聞列表news字段字段名類型寬度小數(shù)位索引可否為空id新聞編號自動編號否title新聞標題Varchar50是content新聞內(nèi)容Text是Categoryid新聞類別編號Date是存儲網(wǎng)站新聞級別信息,和新聞表關(guān)聯(lián)和產(chǎn)品類別結(jié)構(gòu)相同。表4。6新聞類別列表news_category字段字段名類型寬度小數(shù)位索引可否為空id類別編號自動編號是cname類別名稱Varchar50是Cdescr類別描述text否Pid父節(jié)點idInt是Grade等級Int是Cno類別排序Int是存儲網(wǎng)站新聞信息,與其他表沒有關(guān)聯(lián)。表4。7訂單產(chǎn)品表saleproduct字段字段名類型寬度小數(shù)位索引可否為空id編號自動編號是Productid產(chǎn)品編號Int是Uniprice產(chǎn)品價格Money否Pcount產(chǎn)品數(shù)量Int是Orderid所屬訂單編號Int是
第五章系統(tǒng)詳細設(shè)計詳細設(shè)計的根本目標是確定應(yīng)該具體地實現(xiàn)所要求的系統(tǒng),也就是說,經(jīng)過這個階段的設(shè)計工作,應(yīng)該得出對目標系統(tǒng)的精確描述,從而在編碼階段可以把這個描述直接翻譯成用某種程序設(shè)計語言書寫的程序。在項目開發(fā)時,使用一種穩(wěn)定成熟的框架是項目成功的重要因素。MVC的基本思想就是邏輯與顯示的分離,Model是應(yīng)用程序的主體部分,它表示業(yè)務(wù)數(shù)據(jù)或者業(yè)務(wù)邏輯,View是應(yīng)用程序中與用戶界面相關(guān)的部分,也就是用戶看到并與之交互的界面,Controller根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)的顯示和更新Model對象的狀態(tài),MVC不僅實現(xiàn)了功能模塊和顯示模塊的分離,同時也提供了應(yīng)用系統(tǒng)的可維護性、可擴展性、可移植性和組件的可重用性。模型、視圖與控制器的分離,使得一個模型可以具有多個顯示視圖。如果用戶通過某個視圖的控制器改變了模型的數(shù)據(jù),所有其它依賴于這些數(shù)據(jù)的視圖都應(yīng)反映到這些變化。因此,無論何時發(fā)生了何種數(shù)據(jù)變化,控制器都會將變化通知所有的視圖,導致顯示的更新。5.1系統(tǒng)主界面設(shè)計本網(wǎng)站的主界面整體結(jié)構(gòu)還算簡潔、清晰,上面部分為商品搜索條,,左面部分為商品類別框,右面部分為資訊區(qū),中間部分為商品展示區(qū)。本網(wǎng)上購物系統(tǒng)主界面如圖5。1所示。圖5。1系統(tǒng)登陸界面5。2系統(tǒng)前臺各主要模塊的功能設(shè)計5。2.1用戶登陸模塊的實現(xiàn)用戶登陸模塊是防止非法用戶登陸的第一道防線,通過它可以保護后臺數(shù)據(jù)庫的安全性,當用戶要進行定購時,首先要進入的就是身份驗證界面,只有在密碼正確的情況下才能進行以后的購物,如果輸入的密碼不正確,則不能進行定購.如果用戶以瀏覽者的身份進入網(wǎng)站,則只能進行一般的商品瀏覽和搜索,而不能進行選購,在點擊添加購物車后,系統(tǒng)會判斷該用戶是否是登陸用戶,如果不是則彈出提示頁面,提示用戶必須先登陸才能定購商品,如果是第一次登陸,必須先注冊.登陸的具體實現(xiàn)要通過一個全程變量,即Session變量來實現(xiàn)用戶登錄的界面UserLogin。jsp,從shopuser表查得用戶提交的帳戶名和密碼正確后,用一個全局變量,即Session變量保存這一消息(該變量名稱為Session(“user”))。具體的判斷過程為:若session中user為空即session.getAttribute(”user”)==null,表明沒有經(jīng)過登陸與否的驗證,則立即跳轉(zhuǎn)到UserLogin.jsp,請用戶登錄;并將用戶登陸的帳號和密碼通過通過UserService的check方法,先判斷是否存在這個用戶如果不存在這個用戶則拋出自己定義的一個異常UserNotFoundException,如果存在這個用戶再和輸入的密碼做對比,如果密碼不正確則拋出自己定義的PasswordWrongException異常。對應(yīng)Action中分別截獲這兩種不同的異常來判斷對應(yīng)的錯誤信息.具體代碼實現(xiàn)如下:Stringusername=request。getParameter(”username");Stringpassword=request。getParameter(”password”);try{ Useru=User.check(username,password); session。setAttribute("user”,u);}catch(UserNotFoundExceptione){ out。println(e。getMessage()); return;}catch(PasswordNotCorrectExceptione){ out.println(e.getMessage()); return;}5。2。2新會員注冊模塊的實現(xiàn)如果用戶還不是會員則提示用戶進行注冊,用戶提交信息之后,系統(tǒng)開始判斷用戶的注冊信息是否有效,首先是用戶名是否為空,(該處存在用戶名命名規(guī)則的問題,后面問題中會詳細解決)用戶輸入的兩次密碼是否一致,然后依次往后判斷用戶所填寫的各項信息是否符合要求,直到所有信息均正確無誤,系統(tǒng)將該用戶注冊信息寫入會員表即member并提示用戶注冊成功,用戶登陸后,就可以進行有效的購物了。注冊頁面的效果圖如下:圖5。2注冊頁面界面系統(tǒng)對用戶的注冊信息的驗證實現(xiàn)如下:用戶輸入的各項信息分別對應(yīng)字段username,password,phone,addr,再添加用戶之前要有一個前臺校驗:functioncheck{varusername=document.register。username.value;varpassword=document。register。password。value;varpassword2=document.register.password2。value;varaddr=document.register.addr.value;if(username。length==0){alert(“用戶名不能為空”);ruturnfalse;}elseif(username。length<6){ Document。register。username.value=’'; alert(“用戶名長度不能小于6位”); returnfalse;}elseif(password。length<6){ alert(“用戶名長度不能小于6位"); returnfalse;}elseif(password!=password2){ alert(“兩次輸入的密碼不一樣,請返回重新輸入!”); ruturnfalse;}elseif(addr.length==0){ alert(“地址不能為空”); returnfalse;}returntrue;}5.2。3購物車模塊的實現(xiàn)當用戶登陸成功以后,如果找到了希望定購的物品,在點擊物品下方的定購以后,系統(tǒng)會彈出一個新的頁面,顯示該物品已經(jīng)添加進購物車,然后用戶需要選擇定購的數(shù)量.頁面效果如下:圖5。3購物車界面在點擊確認以后,該物品信息被后臺添加到購物車中,如果用戶需要繼續(xù)購物,可以繼續(xù)選擇,不斷添加,買的物品列表,及合計價格.購物車類:publicclassCart{ List〈CartItem〉items=newArrayList〈CartItem>(); publicList<CartItem>getItems(){ returnitems; } publicvoidsetItems(List〈CartItem〉items){ this。items=items; } publicvoidadd(CartItemci){ for(Iterator〈CartItem〉iter=items.iterator();iter。hasNext();){ CartItemitem=iter。next(); if(item。getProduct()。getId()==ci。getProduct()。getId()){ item。setCount(item。getCount()+1); return; } } items。add(ci); } publicdoublegetTotalMemberPrice(){ doubled=0。0; for(Iterator〈CartItem>it=items。iterator();it。hasNext();){ CartItemcurrent=it。next(); d+=current.getProduct()。getMemberPrice()*current。getCount(); } returnd; } publicvoiddeleteItemById(intproductId){ for(Iterator〈CartItem〉iter=items.iterator();iter.hasNext();){ CartItemitem=iter.next(); if(item.getProduct()。getId()==productId){ iter.remove(); } } }}CartItem是購物車里的每一個購物項。里面含有商品的信息及其數(shù)量。購物車類的add方法是添加一類商品的信息,getTotalMemberPrice()方法算取所有商品的總價格.deleteItemById()從購物車中刪除某一類商品。當用戶選購完所有的商品時,可以點擊下單就會顯示所訂購的物品的詳細信息如圖:圖5.4收銀臺結(jié)帳界面用戶再一次確認后,系統(tǒng)會顯示購物成功并返回給用戶一個定購單號。該頁面也就是將用戶提交的訂單信息返回,并產(chǎn)生了一個唯一訂單號,以方便用戶查詢.訂貨的具體實現(xiàn)需要填入兩張表:一張是訂單表saleorder另一張是訂單貨物表saleitem表。其中訂單貨物加入的時用到批處理加入:具體實現(xiàn)如下:publicintadd(SalesOrderso){ returndao。add(so); } publicintuserBuy(Cartc,Useru){ returnu.buy(c); } publicintgetOrders(List〈SalesOrder〉list,intpageNo,intpageSize){ returndao。getOrders(list,pageNo,pageSize); } publicSalesOrderloadById(intid){ returndao。loadById(id); } publicList〈SalesItem〉getSalesItems(SalesOrderorder){ returndao。getSalesItems(order。getId()); } publicvoidupdateStatus(SalesOrderorder){ dao.updateStatus(order); }}5。2。4商品搜索模塊的實現(xiàn)網(wǎng)上購物作為一個在網(wǎng)上展示自己商品的銷售系統(tǒng),如何能讓用戶以最快的速度找到自己希望買到的物品,也是需要非常重視的一個問題,此時搜索引擎也就必不可少了.本購物系統(tǒng)也做了一個小模塊,以供用戶進行一些模糊查找,用戶不必輸入全部名稱,只需輸入一些關(guān)鍵詞,系統(tǒng)就可以將符合該查詢條件的所有商品信息以網(wǎng)頁形式返回給用戶.該搜索功能中實現(xiàn)的關(guān)鍵代碼為:publicintfind(List<Product〉products,intpageNo,intpageSize,Stringkeyword){ StringqueryStr=”wherelike'%"+keyword+”%’orp。descrlike'%"+keyword+”%'"; returndao.find(products,pageNo,pageSize,queryStr); }5。3后臺管理模塊的實現(xiàn)網(wǎng)上購物系統(tǒng)除了能夠讓用戶實現(xiàn)前臺的瀏覽和購物等操作之外,還必須能夠使管理人員能夠?qū)ο到y(tǒng)的各種信息進行維護,比如商品的增加、刪除、修改,會員的審查,網(wǎng)站新聞的更新等等.管理功能是網(wǎng)上購物系統(tǒng)相當重要的一部分功能。管理員可以通過主頁面的“管理進入”進入系統(tǒng)后臺進行維護,點擊之后,首要的就是進行身份驗證,輸入正確的帳號,密碼之后,方能進入。由于涉及到交易,出于安全性考慮,管理員帳號應(yīng)盡量少分配,密碼也要盡量復雜,經(jīng)常更換.進入之后系統(tǒng)管理的主頁面采用了框架結(jié)構(gòu),左邊是一個樹型菜單,右邊顯示具體信息。管理的主要功能有商品信息的更新,會員信息維護,產(chǎn)品種類,新聞模塊,訂單管理設(shè)置等五大模塊,商品信息管理,主要就是添加新的商品,刪除和修改已經(jīng)添加的商品.如下圖所示:圖5.7商品管理界面這一部分的實現(xiàn)也沒有新的方法,只是從添加商品的頁面獲取數(shù)據(jù)然后實例化一個product對象,利用其成員函數(shù)進行初始化,最后寫入數(shù)據(jù)庫中。Stringaction=request。getParameter(”action");if(action!=null&&action.trim().equals(”add”)){ Stringname=request.getParameter(”name"); doublenormalPrice=Double.parseDouble(request。getParameter("normalPrice”)); doublememberPrice=Double。parseDouble(request.getParameter("memberPrice")); Stringdescr=request。getParameter("descr"); Productp=newProduct(); p。setName(name); p。setNormalPrice(normalPrice); p。setMemberPrice(memberPrice); p.setDescr(descr); p。setCategoryId(categoryId); p。setPdate(newDate()); ProductMgr.getInstance()。add(p);修改則使用update語句。會員信息管理,則主要是對一些惡意注冊用戶進行刪除,該功能設(shè)計存在一定問題,具體在后面會有一定說明。圖5。8會員信息管理界面網(wǎng)站信息管理,進行網(wǎng)上新聞的發(fā)布,修改刪除,以及系統(tǒng)公告等信息的設(shè)置,這些功能雖然無關(guān)緊要,但在實際中卻能方便用戶,提高網(wǎng)站效益.圖5。9新聞信息管理界面在完成系統(tǒng)的更新之后,作為管理人員,應(yīng)該及時注銷自己的帳戶,樹型菜單的上方提供了注銷登陸的選項,點擊之后,注銷用戶,并返回到前臺頁面,防止他人惡意修改網(wǎng)站信息,造成不必要的損失。以上兩個部分都是比較簡單的功能實現(xiàn),具體實現(xiàn)過程與前幾個類似。
第六章系統(tǒng)測試及性能分析經(jīng)過需求分析、設(shè)計和編碼等階段的開發(fā)后,得到了源程序,開始進入到軟件測試階段.然而,在測試之前的各階段中都可能在軟件產(chǎn)品中遺留下許多錯誤和缺陷,如果不及時找出這些錯誤和缺陷,并將其改正,這個軟件產(chǎn)品就不能正常使用,甚至會導致巨大的損失。目前,程序的正確性證明尚未得到根本的解決,因此軟件測試仍是發(fā)現(xiàn)軟件中錯誤和缺陷的主要手段。6.1測試的基本概念(1)測試的目的軟件測試的目的是盡可能多地發(fā)現(xiàn)軟件產(chǎn)品(主要是指程序)中的錯誤和缺陷.明確測試的目的是一件非常重要的事,因為在現(xiàn)實世界中對測試工作存在著許多模糊或者錯誤的看法,這些看法嚴重影響著測試工作的順利進行。有人認為測試是為了證明程序是正確的,也就是說程序不再有錯誤,事實證明這是不現(xiàn)實的。因為要通過測試來發(fā)現(xiàn)程序中的所有錯誤就要窮舉所有可能的輸入數(shù)據(jù),檢查它們是否產(chǎn)生正確的結(jié)果.例如,一個需要3個16位字長的整型輸入數(shù)據(jù)的程序,輸入數(shù)據(jù)的所有組合情況大約有3×1014種,若每組數(shù)據(jù)的測試時間為1ms,那么即使一年365天,每天24小時地測試,也大約需要1萬年的時間。(2)測試用例要進行測試,除了要有測試數(shù)據(jù)(或稱輸入數(shù)據(jù))外,還應(yīng)同時給出該組測試數(shù)據(jù)應(yīng)該得到怎樣的輸出結(jié)果,我們稱它為預期結(jié)果.在測試時將實際的輸出結(jié)果與預期結(jié)果比較,若不同則表示發(fā)現(xiàn)了錯誤。因此測試用例是由測試數(shù)據(jù)和預期結(jié)果構(gòu)成的。為了發(fā)現(xiàn)程序中的錯誤,應(yīng)竭力設(shè)計能暴露錯誤的測試.一個好的測試用例是極有可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試用例。一次成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試。(3)白盒測試和黑盒測試測試的關(guān)鍵是測試用例,其方法可分成兩類:白盒測試和黑盒測試。白盒測試是把程序看成裝在一只透明的白盒子里,測試者完全了解程序的結(jié)構(gòu)和處理過程。它根據(jù)程序的內(nèi)部邏輯來設(shè)計測試用例,檢查程序中的邏輯通路是否都按預定的要求正確地工作.黑盒測試是把程序看成一只黑盒子,測試者完全不了解(或不考慮)程序的結(jié)構(gòu)和處理過程。它根據(jù)規(guī)格說明書規(guī)定的功能來設(shè)計測試用例,檢查程序的功能是否符合規(guī)格說明的要求。6。2測試步驟軟件測試的主要步驟有單元測試、集成測試和確認測試。(1)單元測試(UnitTesting)單元測試也稱模塊測試。通常單元測試可放在編碼階段,程序員在編寫好一個模塊后,總會對自己編寫的模塊進行測試,檢查它是否實現(xiàn)了詳細設(shè)計說明書中規(guī)定的模塊功能和算法。單元測試主要發(fā)現(xiàn)編碼和詳細設(shè)計中產(chǎn)生的錯誤,通常采用白盒測試。(2)集成測試(IntegrationTesting)集成測試也稱組裝測試,它是對由各模塊組裝而成的程序進行測試,主要檢查模塊間的接口和通信。集成測試主要發(fā)現(xiàn)設(shè)計階段產(chǎn)生的錯誤,通常采用黑盒測試。(3)確認測試(ValidationTesting)確認測試的任務(wù)是檢查軟件的功能、性能及其他特征與用戶的需求一致,它是以需求規(guī)格說明書(即需求規(guī)約)作為依據(jù)的測試.確認測試通常采用黑盒測試。確認測試產(chǎn)生測試程序是否滿足需求規(guī)格說明書所列的各項要求,然后要進行軟件配置復查,特別是文檔是否齊全,各方面的質(zhì)量是否符合要求等.6。3系統(tǒng)測試軟件測試方法從測試人員角度看,可分為人工測試和機器測試。人工測試又稱為代碼復審.主要有三種方法:個人復查、走查、會審。機器測試分為黑盒測試(又稱功能測試)和白盒測試(又稱結(jié)構(gòu)測試)兩種。下面對本網(wǎng)上購物系統(tǒng)進行測試,以檢查系統(tǒng)能否正確完成各種操作,是否能夠?qū)崿F(xiàn)預期具有的功能。(1)系統(tǒng)后臺登陸模塊此模塊是進入本系統(tǒng)操作的一個入口,用于維護系統(tǒng)的安全.只有將正確的用戶名和密碼輸入系統(tǒng),才能繼續(xù)進行操作現(xiàn)在輸入用戶名和錯誤的密碼,測試是否能夠登錄。測試結(jié)果是系統(tǒng)提示“用戶名與密碼不相符!",如圖6—1所示。圖6.1提示用戶名或密碼錯誤消息窗口(2)用戶購物模塊用戶瀏覽商品,點擊購買商品按鈕,系統(tǒng)檢查該用戶是否已登陸,如果沒登陸給出提示信息,用戶進入購物車頁面后,可修改商品數(shù)量,對于非數(shù)字的將不能輸入,在用戶下單界面,對各個表單進行了驗證,不符合要求的將給予提示信息,如圖6。3所示。圖6。2用戶購物測試(3)購物車模塊經(jīng)過上面部分的分析,我們可以得知,購物車模塊是我們需要特別注意的地方,因為它涉及到了我們數(shù)據(jù)庫中的大部分數(shù)據(jù),并且是進行網(wǎng)上交易的最關(guān)鍵部分,絕對不能出現(xiàn)任何的差錯,下面我們就針對這一模塊進行用例測試:我們以用戶12的身份登入系統(tǒng),用戶名是:12,密碼是:12然后點擊定購商品:諾基亞6100,單價為1222元彈出購物車清單:選擇商品數(shù)量3,確認。如圖6.3所示。圖6.3物車模塊測試出現(xiàn)清單:顯示商品名稱諾基亞6100,數(shù)量3,合計3666元。與我們估算的數(shù)據(jù)相符。在測試過程中,我經(jīng)過模塊測試和組裝測試,排除了系統(tǒng)的大部分錯誤。當然排除所有錯誤是不太可能的,我想應(yīng)該還有些不易檢測到的錯誤還沒有被發(fā)現(xiàn),需要在使用的過程中進一步的完善,數(shù)據(jù)庫的加密是一個重要的概念,在實際的應(yīng)用過程中是一個尚待解決的問題,應(yīng)該做好數(shù)據(jù)庫的完善工作,特別是備份和安全工作;另一方面本系統(tǒng)沒有制作相關(guān)的打印,由于時間倉促難免有錯誤和不完善的地方,希望老師能夠幫我指點和糾正。6.4系統(tǒng)的性能分析網(wǎng)上購物系統(tǒng)的性質(zhì)決定了它的服務(wù)端工作負荷比較大,這就要求服務(wù)端的硬件配置要盡可能的高,主要是內(nèi)存,而且操作系統(tǒng)也要盡可能的穩(wěn)定?;趈ava的系統(tǒng)一般來說網(wǎng)絡(luò)安全性比較好,但并不能說就一定安全,尤其在windows操作系統(tǒng)下,由于windows的漏洞比較多,系統(tǒng)裝配在windows下并不是最佳的選擇,如果有條件,建議可將系統(tǒng)裝配在unix操作系統(tǒng)下,提高系統(tǒng)的抗侵入能力.系統(tǒng)的核心數(shù)據(jù)庫,隨著數(shù)據(jù)的不斷增多,必然會產(chǎn)生冗余,導致系統(tǒng)運行效率降低,建議管理員定期備份和清理冗余數(shù)據(jù),以保證系統(tǒng)的正常高效運行。6。5系統(tǒng)中所存在的問題及解決方案6。5.1系統(tǒng)的整體設(shè)計和規(guī)劃中的問題由于是基于B/S的系統(tǒng),網(wǎng)頁在其中就承擔著非常大的工作,包括向服務(wù)端后臺寫入和修改數(shù)據(jù),以及服務(wù)端響應(yīng)客戶端的請求,向客戶端頁面返回數(shù)據(jù),這些工作不可能只由幾個網(wǎng)頁來完成,但網(wǎng)頁數(shù)量一多又必然結(jié)構(gòu)混亂,造成開發(fā)過程難以控制。為解決這個問題,我采用了現(xiàn)代軟件開發(fā)過程的模塊化思想,先將系統(tǒng)功能進行分解,大致可分為兩部分,即前臺和后臺,前臺又包括主頁面及產(chǎn)品信息展示頁面、搜索功能頁面、新聞頁面、購物車及訂單頁面等幾個大的部分,后臺包括會員信息管理、商品信息管理、新聞信息管理、等幾個部分,各個部分又由許多小的頁面組成,這樣一來雖然網(wǎng)頁數(shù)量沒有減少,但結(jié)構(gòu)清晰了很多,在開發(fā)過程中可以逐步,逐個模塊的實現(xiàn),提高了開發(fā)效率。該系統(tǒng)的可維護性和可擴展性不夠好.雖然系統(tǒng)基于MVC模式來分析設(shè)計。但是Service(業(yè)務(wù)邏輯類),DAO(持久化類)沒有基于接口編程,這樣如果以后如果有業(yè)務(wù)邏輯有什么需求變化需要深入代碼內(nèi)部直接修改,而且修改的復雜度加重了,也增加了許多重復性的勞動。改系統(tǒng)控制器是主要是基于Servlet這樣每一個請求都要寫一個Servlet帶來了很多重復性勞動,而且也不利于以后代碼的維護。建議用Struts統(tǒng)一對所有請求,和響應(yīng)進行統(tǒng)一管理.改系統(tǒng)的健壯性和安全性做的不夠好,想多個人對同一種物品進行操作時沒有做數(shù)據(jù)同步操作.尤其是再對數(shù)據(jù)庫操作時建議用線程同步機制.對于有惡意行為的用戶記錄其ip地址然后禁止改用戶的所有權(quán)限.6.5.2開發(fā)功能模塊所遇到的難點因為是第一次做這么完整的系統(tǒng),所以碰到的問題也很多,除了一些基本的語法之外,感覺還是一些考慮問題的思維方式不太得當,比如我的這個網(wǎng)上購物系統(tǒng),我感覺難度比較大的還是購物車這個模塊比較的難設(shè)計,因為過程比較復雜,他的一些邏輯處理就比較的難以用代碼實現(xiàn)。當用戶完成選購,點擊去收銀臺結(jié)算時,系統(tǒng)開始判斷商品庫中的這些商品數(shù)量是否大于用戶所選數(shù)量,如果大于提示用戶選擇一個小于該物品數(shù)量的數(shù)量,否則直接加入該購物車中這樣就基本上實現(xiàn)了購物車的功能.6。5。3系統(tǒng)中存在的問題及擬定的解決方法(1)第一個問題是用戶在注冊過程中,一些關(guān)鍵字段的命名規(guī)則存在著比較大的缺陷,比如用戶名的選擇上,一般的習慣是規(guī)定只能從a~z和數(shù)字0~9的隨機組合,不能有特殊字符,而且只能以字母開頭,不能以數(shù)字開頭,用戶名的長度也有限制,我在系統(tǒng)中只考慮了為空的情況,這是不夠的,我們可以在jsp頁面添加一段javascript驗證代碼,主要是使用正則表達式對用戶名進行限制,具體的代碼如下:if(form.username.value.length〈5||form。username.value.length〉20){alert("\您的用戶名長度應(yīng)該在5-20個字符之間!");長度判斷if(fIsNumber(form。username。value.charAt(0),"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”)!=1){alert(”\您的用戶名只能以字母開頭!");開頭判斷if(fIsNumber(form.username.value,特殊字符判斷”1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_”)!=1){alert("\您的用戶名應(yīng)該是數(shù)字、字母、下劃線,不允許出現(xiàn)漢字等其他字符!”);(2)第二個問題就是用戶登陸以后,如果需要修改資料,系統(tǒng)會先將數(shù)據(jù)庫中該用戶的所有信息以列表形式顯示出來,問題就是此時出現(xiàn)的用戶密碼信息是以明碼形式出現(xiàn)的,這對用戶來說就存在這很大的風險,容易被他人看到,最好是以一些特殊符號來代替從而防止信息泄漏,在參考了其他網(wǎng)站的登陸模塊之后,我對代碼進行了簡單修改,即可實現(xiàn),問題是由密碼的輸入框?qū)傩砸鸬?,原始的代碼為:<inputtype=”text"name=”user_pass”size=”36”class=inputvalue=”〈%=rs。getString(”user_pass”)%〉"〉此時密碼輸入框的屬性為text也就是文本框,它會直接將數(shù)據(jù)以明碼形式原封不動的輸出,我們只需將其改為password屬性即可,它以默認的黑色圓點代替真實數(shù)據(jù),這樣一個簡單的修改,就保證了該部分的安全性.(3)第三個問題是管理人員對用戶的管理部分,一個是用戶信息,尤其是密碼的加密,處于對系統(tǒng)安全性的考慮,數(shù)據(jù)庫中的用戶密碼應(yīng)該對于所有人都是加密狀態(tài),包括管理人員,但因本人水平有限對這個方面也不是很了解,所以準備采用現(xiàn)有的加密軟件對相關(guān)數(shù)據(jù)進行加密,如或“備注”,因此對于需要加密的關(guān)鍵字段,我們必須事先將其設(shè)置為文本類型。如果需要我們可以也可將整個數(shù)據(jù)庫進行加密,增加系統(tǒng)的安全性.還有一個漏洞就是對會員的管理功能做的不夠,沒有考慮到用戶密碼丟失的問題,解決方法有兩個,一個就是采取通常的做法,讓用戶在注冊過程中,設(shè)置一些問題,通過回答問題的方式來取回密碼,還有一個方法就是讓管理員通過后臺,初始化用戶的密碼,然后用戶登陸對密碼進行修改,這兩個方法都可以達到目的,具體的實現(xiàn)過程不再一一說明。對于網(wǎng)上購物系統(tǒng)來說安全性無疑是最重要的,層層驗證雖然保證了系統(tǒng)的安全性,但對于用戶來說又是極不人性化的,如何在最簡單的驗證流程下,保證用戶數(shù)據(jù)的安全,是在做網(wǎng)上購物系統(tǒng)中需要考慮的一個問題。
總結(jié)我的畢業(yè)設(shè)計論文具體論述了網(wǎng)上購物系統(tǒng)的主要功能及體系結(jié)構(gòu),重點討論了系統(tǒng)數(shù)據(jù)準備、數(shù)據(jù)庫的邏輯結(jié)構(gòu)分析、各模塊系統(tǒng)流程各功能模塊的關(guān)聯(lián)和響應(yīng),JSP與后臺數(shù)據(jù)庫鏈接等關(guān)鍵技術(shù)。這些技術(shù)的實現(xiàn),滿足了系統(tǒng)的需要,優(yōu)化了系統(tǒng)的性能。目前基于該模型的系統(tǒng)處于實驗室階段,還存在許多問題與不足,如安全性能還不完善,缺少必要的數(shù)據(jù)加密系統(tǒng)等,,這些功能與技術(shù)還需要加以提高和實現(xiàn)。
網(wǎng)上購物系統(tǒng)無論是在開發(fā)過程中,還是建成后的日常維護過程中,都需要進行嚴格的檢測,以保證購物系統(tǒng)的服務(wù)質(zhì)量.隨著網(wǎng)上購物系統(tǒng)技術(shù)的日趨成熟、網(wǎng)上購物的優(yōu)勢日趨明顯,會有更多的人參與到網(wǎng)上購物的浪潮中來,人類最終將迎接電子商務(wù)時代的來臨。
參考文獻[1]張思亮,王曉峰,靳瑞勇。網(wǎng)上購物系統(tǒng)的研發(fā)[J]。商場現(xiàn)代化。2008(13):67-67。
[2]李順云,郭勁夫,楊月輝.網(wǎng)上購物系統(tǒng)的建設(shè)[J]。商場現(xiàn)代化.2008(12):145—146.
[3]陳巧蓉,陳剛,熊恩成。網(wǎng)上購物系統(tǒng)htm1版開發(fā)研究[J]。西南民族大學學報:自然科學版。2007,33(4):961—963。
[4]袁愛香.基于MDA的網(wǎng)上購物系統(tǒng)代碼自動生成開發(fā)研究[J]。北京聯(lián)合大學學報:自然科學版.2008,22(1):41—45。
[5]李賢華.基于JSP技術(shù)的大型網(wǎng)上購物系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機與現(xiàn)代化。2008(8):82—84,89。
[6]何靜,譚新民?;贘2EE的網(wǎng)上購物系統(tǒng)的設(shè)計[J]。山西電子技術(shù).2008(1):66—68。
[7]張健。XML技術(shù)在網(wǎng)上購物系統(tǒng)中的應(yīng)用與安全分析[J]。科技創(chuàng)新導報。2008(14):2-3。[8]武延軍,黃飛躍。精通JSP編程技術(shù)[M]。北京:人民郵電出版社,2001。8[9]柏亞軍。JSP編程基礎(chǔ)及應(yīng)用實例集錦[M]。北京:人民郵電出版社,2001。7[10]清宏計算機工作室.JSP編程技巧[M]。北京:機械工業(yè)出版社,2000。1[11]周影。網(wǎng)絡(luò)編程語言JSP實例教程[M]。北京:電子工業(yè)出版社,2003.6[12]陳海山.深入JavaServlet網(wǎng)絡(luò)編程[M]。北京:清華大學出版社,2002.2
致謝在這次畢業(yè)設(shè)計中,指導老師劉老師從課題的研究動態(tài)、當今優(yōu)秀的開發(fā)工具以及課題的功能需求到具體的實現(xiàn)上,都給予了我很大的幫助.同時,我還從劉老師身上學到了很多東西,劉老師認真負責的工作態(tài)度,嚴謹?shù)闹螌W精神和深厚的理論水平都使我收益匪淺,這對于我以后的學習和工作都將是一種先導作用.在這課題設(shè)計、論文完成之際,我衷心的向劉老師表示感謝。其次,我要特別感謝我的父母,感謝我的家人,感謝他們這幾年為我負出的辛苦,在我求學的道路上給予了極大的關(guān)心與鼓舞,也正是有了他們的支持,使我能夠順利地完成我的學業(yè)。最后,我還要感謝四年以來辛勤培育我的系部領(lǐng)導、老師以及幫助我的同學們和同事,是你們幫助我一步一步成長,成長成為一個有理想、有道德、有文化、有紀律的四有青年。在畢業(yè)以后的學習工作中,我會繼續(xù)努力,不斷的深化自己的專業(yè)知識,好好工作,更好的為祖國為人民貢獻出自己的力量.
附錄部分代碼:************************web。xml*********************************<?xmlversion="1。0"encoding="UTF-8"?〉<web—appversion=”2。4”xmlns=”http:///xml/ns/j2ee” xmlns:xsi=”http:///2001/XMLSchema—instance” xsi:schemaLocation=”/xml/ns/j2ee http:///xml/ns/j2ee/web—app_2_4.xsd”〉 <servlet〉 〈description〉uploadafiletoserver〈/description〉 〈display—name〉FileUpload</display-name> 〈servlet—name〉FileUpload〈/servlet-name> 〈servlet—class〉 com。bjsxt。shopping。util。servlet。FileUpload </servlet—class〉 <init-param〉 <param—name〉uploadPath〈/param-name〉 〈param—value> D:\\share\\JavaProjects\\Shopping\\WebRoot\\images\\product\\ 〈/param—value〉 </init-param> </servlet〉 <servlet〉 <description〉countthesales</description〉 <display—name>SalesCountSatistics〈/display—name> 〈servlet—name>SalesCountServlet〈/servlet-name〉 <servlet—class〉 com。bjsxt。shopping。stat.SalesCountServlet </servlet—class〉 〈/servlet> 〈servlet〉 〈description〉ContextParameterTest〈/description> 〈display—name>ContextParameterTest〈/display—name〉 <servlet—name〉TestContextParamServlet〈/servlet—name> 〈servlet-class〉TestContextParamServlet</servlet-class〉 </servlet> 〈servlet-mapping> <servlet—name>FileUpload</servlet—name> <url—pattern〉/servlet/FileUpload〈/url—pattern〉 〈/servlet—mapping〉 〈servlet—mapping〉 〈servlet-name>SalesCountServlet</servlet—name> <url—pattern>/servlet/SalesCountServlet</url—pattern〉 </servlet—mapping〉 〈servlet—mapping〉 〈servlet-name〉TestContextParamServlet〈/servlet-name> 〈url-pattern〉/servlet/TestContextParamServlet〈/url—pattern〉 〈/servlet—mapping〉 〈context—param〉 <param—name〉a</param—name〉 〈param—value〉b</param—value〉 〈/context-param〉 <filter〉 <filter-name〉A(chǔ)uthFilter〈/filter—name> <filter-class〉 com。bjsxt。shopping。util。filter.AuthFilter 〈/filter—class〉 〈/filter> <filter—mapping〉 <filter—name〉A(chǔ)uthFilter〈/filter—name> 〈url—pattern〉/admin/*〈/url—pattern〉 〈/filter—mapping〉 〈filter〉 〈filter—name>IPFilter</filter—name〉 〈filter—class〉 com。bjsxt.shopping。util.filter.IPFilter </filter—class> 〈init-param> 〈param—name〉IPBlackList〈/param—name> <param-value>192.168。0。16,192。168。0。165〈/param-value〉 </init—param> 〈/filter〉 〈filter—mapping> <filter—name〉IPFilter〈/filter-name〉 〈url—pattern〉/*〈/url—pattern〉 〈/filter-mapping〉 〈listener〉 〈listener—class〉com。bjsxt.shopping.util。listener。LoggedUserCounter〈/listener—class> 〈/listener> 〈welcome—file-list〉 〈welcome-file〉Index。jsp</welcome-file〉 〈welcome—file>index。html〈/welcome-file〉 </welcome-file—list></web-app>********************************user.java**********************************packagecom.bjsxt。shopping.user;importjava。sql.Connection;importjava。sql。PreparedStatement;importjava。sql。ResultSet;importjava.sql.SQLException;importjava。sql。Statement;importjava.sql。Timestamp;importjava。util。ArrayList;importjava。util。Date;importjava。util。List;importcom。bjsxt.shopping.client.Cart;importcom.bjsxt.shopping。client.CartItem;importcom。bjsxt.shopping.order。OrderMgr;importcom。bjsxt。shopping。order。SalesItem;importcom.bjsxt。shopping。order.SalesOrder;importcom。bjsxt。shopping。util.DB;publicclassUser{ privateintid; privateStringusername; privateStringpassword; privateStringphone; privateStringaddr; privateDaterdate; publicStringgetAddr(){ returnaddr; } publicvoidsetAddr(Stringaddr){ this。addr=addr; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this。id=id; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } publicStringgetPhone(){ returnphone; } publicvoidsetPhone(Stringphone){ this.phone=phone; } publicDategetRdate(){ returnrdate; } publicvoidsetRdate(Daterdate){ this。rdate=rdate; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this。username=username; } publicvoidsave(){ Connectionconn=DB。getConn(); Stringsql="insertintouservalues(null,?,?,?,?,?)”; PreparedStatementpstmt=DB.prepare(conn,sql); try{ pstmt.setString(1,username); pstmt。setString(2,password); pstmt。setString(3,phone); pstmt.setString(4,addr); pstmt。setTimestamp(5,newTimestamp(rdate.getTime())); pstmt。executeUpdate(); }catch(SQLExceptione){ e。printStackTrace(); }finally{ DB.close(pstmt); DB。close(conn); } } publicstaticList<User〉getUsers(){ List〈User〉users=newArrayList<User>(); Connectionconn=DB。getConn(); Stringsql=”select*fromuser”; Statementstmt=DB。getStatement(conn); ResultSetrs=DB.getResultSet(stmt,sql); try{ while(rs。next()){ Useru=newUser(); u.setId(rs.getInt(”id”)); u。setUsername(rs。getString(”username”)); u。setPassword(rs。getString(”password”)); u。setPhone(rs.getString(”phone”)); u。setAddr(rs。getString(”addr")); u。setRdate(rs.getTimestamp(”rdate")); users。add(u); } }catch(SQLExceptione){ e。printStackTrace(); }finally{ DB。close(rs); DB。close(stmt); DB。close(conn); } returnusers; } publicstaticintgetUsers(List<User〉users,intpageNo,intpageSize){ inttotalRecords=—1; Connectionconn=DB.getConn(); Stringsql=”select*fromuserlimit”+(pageNo—1)*pageSize +",”+pageSize; Statementstmt=DB.getStatement(conn); ResultSetrs=DB。getResultSet(stmt,sql); StatementstmtCount=DB。getStatement(conn); ResultSetrsCount=DB。getResultSet(stmtCount, ”selectcount(*)fromuser”); try{ rsCount。next(); totalRecords=rsCount。getInt(1); while(rs.next()){ Useru=newUser(); u。setId(rs。getInt(”id”)); u.setUsername(rs。getString("username”)); u。setPassword(rs。getString(”pa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026浙江省海運集團股份有限公司招聘7人筆試參考題庫及答案解析
- 2026年馬鞍山市花山區(qū)事業(yè)單位公開招聘工作人員7名筆試備考題庫及答案解析
- 2026年甘肅省平?jīng)鍪谐缧趴h機關(guān)事業(yè)單位選調(diào)工作人員選調(diào)計劃調(diào)整考試參考題庫及答案解析
- 2026上半年貴州事業(yè)單位聯(lián)考桐梓縣招聘122人考試參考題庫及答案解析
- 2026浙江嘉興市海寧市青少年宮公益性崗位招聘2人考試備考試題及答案解析
- 2026年池州市市直事業(yè)單位公開招聘工作人員63名筆試參考題庫及答案解析
- 2026年案例分析施工現(xiàn)場的安全事件
- 2026年地質(zhì)勘察報告編制的國際標準對比
- 2025年安徽事業(yè)編往年考試題庫及答案
- 2026年工程地質(zhì)環(huán)境評價在風險評估中的應(yīng)用
- 檢驗項目管理培訓
- 《醫(yī)學影像檢查技術(shù)學》課件-膝關(guān)節(jié)、髖關(guān)節(jié)X線攝影
- 我的阿勒泰我的阿勒泰
- 廣東省佛山市南海區(qū)2023-2024學年七年級上學期期末數(shù)學試卷(含答案)
- 全套教學課件《工程倫理學》
- 固定式壓力容器年度檢查表
- 裝配式建筑可行性研究報告
- 新人教部編版一年級下冊生字表全冊描紅字帖可打印
- 脫碳塔CO2脫氣塔設(shè)計計算
- 產(chǎn)品報價單貨物報價表(通用版)
- 中學保安工作管理制度
評論
0/150
提交評論