




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
緒論研究背景與意義隨著我國經(jīng)濟的高速發(fā)展,我國的交通運輸能力不斷提高,越來越多的國民開始走出家門來到異地進行商務(wù)或者旅游等活動。在這一條件下,客流量不斷增大?;疖囀燮钡墓芾韺τ诮煌ㄟ\輸?shù)恼_\行起著至關(guān)重要的作用,而隨著信息量的逐步增加,繁雜的數(shù)據(jù)處理費時費力,單純以人力進行的火車售票已經(jīng)不適合現(xiàn)狀了?,F(xiàn)今的社會發(fā)展迅速,火車成為了人們在交通方面不可缺少的交通工具,乘坐火車出行的人越來越多,所以火車的客運量也在迅速的增長著。為了給人們帶來方便快捷的交通環(huán)境,火車站系統(tǒng)采取提高列車的速度,增加火車站列車等措施來滿足大量的旅客的乘車需求。但是,現(xiàn)在人多車多的情況下,如果再像從前一樣,在一個單一的地點售票,必然滿足不了現(xiàn)在的形勢。所以就需要售票能夠在不同的地點進行。如此的情況之下,售票系統(tǒng)自然是相當(dāng)必要的。售票系統(tǒng)的出現(xiàn)能夠在很大的程度上解決單一地點售票所帶來的種種不便,并且能夠使想要出行的旅客方便的買到自己需要的車票。對于售票處的地點也從原來的單一地點(火車站)變成了多個地點,可以在市內(nèi)的多個地點(賓館、酒店、娛樂場所等等)。這樣給將要出行的旅客帶來了更進一步的方便。使旅客無論是在金錢還是在時間方面都能夠得到充分的節(jié)省。為了方便旅客,火車售票系統(tǒng)不僅僅只能售票,還能改簽,退票在線操作。也就是說系統(tǒng)的用戶應(yīng)該不只是售票員,還應(yīng)該有管理員。管理員能夠通過售票系統(tǒng)及時的更新乘車信息。這樣才能夠使乘客避免不必要的麻煩,真正的解決以前老式售票的種種不便,才能夠真正的成為現(xiàn)在網(wǎng)絡(luò)社會的真正適應(yīng)者?,F(xiàn)在的時代是一個信息產(chǎn)業(yè)的時代,國家把信息產(chǎn)業(yè)作為了增長國民經(jīng)濟重要的一環(huán)。在這樣的環(huán)境下,以先進的信息技術(shù)進行汽車售票的管理成為了時代發(fā)展的必然。綜上所述,開發(fā)這樣一個火車聯(lián)網(wǎng)售票系統(tǒng)是相當(dāng)有必要的。開發(fā)現(xiàn)狀1、國內(nèi)研究現(xiàn)狀:我國火車站很早就利用計算機管理系統(tǒng)來加強管理、提高服務(wù)水平。我國火車站的IT的發(fā)展階段主要是以電腦系統(tǒng)的運用為標(biāo)志的,電話通訊系統(tǒng)實際上也是從程控交換技術(shù)出現(xiàn)才獲得質(zhì)的飛躍。隨著計算機的普及應(yīng)用,計算機技術(shù)的不斷發(fā)展,同時也使火車站管理系統(tǒng)發(fā)展到了一個新的時期,趨于更加完善?;疖囌竟芾硐到y(tǒng)實現(xiàn)了火車票預(yù)定、出行、退票流程的智能化、自動化,節(jié)約了車站的人工成本,較少了乘客的等候時間,具有簡單、便捷、私密的特點。2、國外研究現(xiàn)狀:國外的火車站發(fā)展較為國內(nèi)早了好多年,同時在多年的發(fā)展探索中,火車站的功能發(fā)展更加全面和多樣化?;疖囌居梢婚_始的單一出行站點到現(xiàn)在的休閑商務(wù)旅游多方面出行,向著更復(fù)雜功能更齊全的方向發(fā)展。隨著這些火車站的全面發(fā)展,其對火車站的管理要求也隨著提高,為了更方便地訂票,在計算機迅速發(fā)展的背景下,產(chǎn)生了火車訂票系統(tǒng)軟件,在很大成程度上減少了人力物力和財力,也同時使車站的經(jīng)營更加規(guī)范化,提高了服務(wù)的標(biāo)準(zhǔn)。相關(guān)技術(shù)介紹J2EE技術(shù)人可以掌握多門外語,而一個計算機科學(xué)家精通的大多是編程語言,它不是人類的自然語言,比如C語言、Java、Perl等等。由于不同的公司開發(fā)出的“中間件”不夠規(guī)范,所以Sun公司推出J2EE,用這個標(biāo)準(zhǔn)來解決弊病。它提供了良好的機制,讓每個層次允許與之相對的服務(wù)器、組件運行,使得系統(tǒng)的搭建穩(wěn)定可用、開發(fā)高效、維護方便。MySQL描述現(xiàn)在MySQL數(shù)據(jù)庫在網(wǎng)絡(luò)上它可以支撐許多個用戶,而且也可以適應(yīng)客服機和服務(wù)器的部署或者配置等,我們這里的服務(wù)器和客戶機其實就是一種軟件上的概念,并且我們使用的計算機硬件也與他們不存在一一對應(yīng)的關(guān)系。MySQL是一款非常流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它的出現(xiàn)一直都是佼佼者,它不僅功能非常強大,而且使用起來非常方便,并且MySQL的跨平臺能力也很好,軟件開發(fā)人員非常喜歡它的這些強大的優(yōu)點。不同于其他關(guān)系型數(shù)據(jù)庫,對于數(shù)據(jù)庫的管理它有著自己的一套方案,通過對用戶設(shè)定相應(yīng)的權(quán)限和角色來達到對數(shù)據(jù)庫的管理。由此可見,MySQL是一個能夠適用于吞吐量高,可靠性高,效率高的一款數(shù)據(jù)庫管理軟件。優(yōu)點一:MySQL中對于不同身份的用戶都設(shè)定其不同的權(quán)限來完成不同的業(yè)務(wù)邏輯,這使得MySQL在安全和完整性遠遠超出了其他關(guān)系型數(shù)據(jù)庫。優(yōu)點二:對于那些動畫、圖形和聲音的數(shù)據(jù)類型MySQL也可以支持,這說明多數(shù)據(jù)類型MySQL也是可以支持的。優(yōu)點三:MySQL還可以做到多個平臺的開發(fā),軟件開發(fā)的多種編程語言都可以實現(xiàn)對MySQL數(shù)據(jù)庫的操作。Springboot框架Spring框架是Java平臺上的一種開源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補充,甚至是替補。Spring框架為開發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)的核心特性,并通過依賴注入實現(xiàn)控制反轉(zhuǎn)來實現(xiàn)管理對象生命周期容器化,利用面向切面編程進行聲明式的事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪問,提供大量優(yōu)秀的Web框架方便開發(fā)等等。Spring框架具有控制反轉(zhuǎn)(IOC)特性,IOC旨在方便項目維護和測試,它提供了一種通過Java的反射機制對Java對象進行統(tǒng)一的配置和管理的方法。Spring框架利用容器管理對象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對象,開發(fā)者可以通過依賴查找或依賴注入來獲得對象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時運行時可配置;AOP框架主要針對模塊之間的交叉關(guān)注點進行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務(wù)管理、遠程訪問等功能均可以通過使用SpringAOP技術(shù)實現(xiàn)。Spring的事務(wù)管理框架為Java平臺帶來了一種抽象機制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點一起工作,并且?guī)缀蹩梢栽贘ava平臺的任何環(huán)境中工作。Spring集成多種事務(wù)模板,系統(tǒng)可以通過事務(wù)模板、XML或Java注解進行事務(wù)配置,并且事務(wù)框架集成了消息傳遞和緩存等功能。Spring的數(shù)據(jù)訪問框架解決了開發(fā)人員在應(yīng)用程序中使用數(shù)據(jù)庫時遇到的常見困難。它不僅對Java:JDBC、iBATS/MyBATIs、Hibernate、Java數(shù)據(jù)對象(JDO)、ApacheOJB和ApacheCayne等所有流行的數(shù)據(jù)訪問框架中提供支持,同時還可以與Spring的事務(wù)管理一起使用,為數(shù)據(jù)訪問提供了靈活的抽象。Spring框架最初是沒有打算構(gòu)建一個自己的WebMVC框架,其開發(fā)人員在開發(fā)過程中認(rèn)為現(xiàn)有的StrutsWeb框架的呈現(xiàn)層和請求處理層之間以及請求處理層和模型之間的分離不夠,于是創(chuàng)建了SpringMVC。MVVM模式MVVM模式是常用的開發(fā)模式,主要是在代碼實現(xiàn)上將其分為M層、V層和C層。視圖(View)代表用戶交互界面,一個Web應(yīng)用就可能有很多的界面,在MVVM模式中,視圖僅僅處理的只有數(shù)據(jù)采集、處理,還有用戶的請求,并不包括業(yè)務(wù)流程的處理,業(yè)務(wù)流程由模型(Model)來處理。模型(Model)就是業(yè)務(wù)流程/狀態(tài)的處理及業(yè)務(wù)規(guī)則的制定。模型處理業(yè)務(wù)流程的過程其它層是無法看見了的,它就像黑箱子,在接受視圖請求的數(shù)據(jù)之后,然后返回最終的處理結(jié)果。MVVM最主要的核心就是業(yè)務(wù)模型的設(shè)計,一個典型的應(yīng)用例子就是目前流行的EJB模型,它從應(yīng)用技術(shù)實現(xiàn)的角度對模型做了進一步的劃分,以便充分利用現(xiàn)有的組件,但是它不能作為應(yīng)用設(shè)計模型的框架??刂破鳎–ontroller)可以理解為接收用戶的請求,然后視圖和模型匹配在一起,一起再完成用戶請求。它有非常明顯的作用在劃分控制層上,可以很清晰地告訴你,它就是一個分發(fā)器,選擇什么樣的模型、視圖,可以完成用戶的什么樣的請求。控制層不做所有的數(shù)據(jù)處理,比如說:用戶點擊一個連接,控制層接受到請求之后,并不處理業(yè)務(wù)信息,它只是向模型傳遞用戶的信息,同時告訴模型做什么,然后選擇符合需求的視圖返回給用戶。B/S結(jié)構(gòu)B/S(Browser/Server)比前身架構(gòu)更為省事的架構(gòu)。它借助Webserver完成數(shù)據(jù)的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果,不需要考慮不停裝軟件的問題。B/S體系工作原理B/S架構(gòu)采取瀏覽器請求,服務(wù)器響應(yīng)的工作模式。用戶可以通過瀏覽器去訪問Internet上由Web服務(wù)器產(chǎn)生的文本、數(shù)據(jù)、圖片、動畫、視頻點播和聲音等信息;而每一個Web服務(wù)器又可以通過各種方式與數(shù)據(jù)庫服務(wù)器連接,大量的數(shù)據(jù)實際存放在數(shù)據(jù)庫服務(wù)器中;從Web服務(wù)器上下載程序到本地來執(zhí)行,在下載過程中若遇到與數(shù)據(jù)庫有關(guān)的指令,由Web服務(wù)器交給數(shù)據(jù)庫服務(wù)器來解釋執(zhí)行,并返回給Web服務(wù)器,Web服務(wù)器又返回給用戶。在這種結(jié)構(gòu)中,將許許多多的網(wǎng)連接到一塊,形成一個巨大的網(wǎng),即全球網(wǎng)。而各個企業(yè)可以在此結(jié)構(gòu)的基礎(chǔ)上建立自己的Internet。在B/S模式中,用戶是通過瀏覽器針對許多分布于網(wǎng)絡(luò)上的服務(wù)器進行請求訪問的,瀏覽器的請求通過服務(wù)器進行處理,并將處理結(jié)果以及相應(yīng)的信息返回給瀏覽器,其他的數(shù)據(jù)加工、請求全部都是由WebServer完成的。通過該框架結(jié)構(gòu)以及植入于操作系統(tǒng)內(nèi)部的瀏覽器,該結(jié)構(gòu)已經(jīng)成為了當(dāng)今軟件應(yīng)用的主流結(jié)構(gòu)模式。系統(tǒng)分析可行性分析技術(shù)性方面,采用當(dāng)前主流的Springboot框架進行系統(tǒng)主體框架的搭建,實現(xiàn)前臺頁面的設(shè)計與美觀調(diào)整,以上技術(shù),均由本人經(jīng)過系統(tǒng)學(xué)習(xí),并且都是在課程設(shè)計中實踐過的,可以使得開發(fā)更加便捷和系統(tǒng)。從技術(shù)角度看,這個系統(tǒng)是完全可以實現(xiàn)的。實用性方面,本次設(shè)計的主要任務(wù)是在火車訂票系統(tǒng)內(nèi)火車票預(yù)訂、車票中心、購票訂單、退票紀(jì)錄等,符合當(dāng)前潮流的發(fā)展。從用戶角度出發(fā),同時也考慮系統(tǒng)運營成本和人力資源,采用網(wǎng)絡(luò)上的便捷方式,實現(xiàn)線上業(yè)務(wù),使得業(yè)務(wù)流程更系統(tǒng),也更方便用戶的體驗,比較實用。經(jīng)濟性方面,由于本課題中設(shè)計的火車訂票系統(tǒng)的主要目的是為了能夠更加方便及快捷的進行信息的查詢管理及檢索服務(wù),也就是能夠可以直接投入使用的信息化軟件。系統(tǒng)的主要成本主要是集中在對使用數(shù)據(jù)后期繼續(xù)維護及其管理更新這個操作上。但是一旦系統(tǒng)投入到實際的運行及使用之后就能夠很好的提高信息查詢檢索的效率,同時也需要有效的保證查詢者的信息方面的安全性,同時這個火車訂票系統(tǒng)所帶來的實際應(yīng)用方面的價值是遠遠的超過了實際系統(tǒng)進行開發(fā)與維護方面的成本,因此,從經(jīng)濟上來說開發(fā)這個軟件是可行的。功能需求分析火車訂票系統(tǒng)的功能主要分為前臺用戶根據(jù)自己的需求進行注冊登錄,瀏覽火車車次信息并對需要的火車票進行預(yù)訂,改簽,退票等操作。后臺系統(tǒng)管理員因職責(zé)的不同,分為普通管理員和超級管理員,管理員主要對注冊用戶,退票紀(jì)錄、購票訂單、車票中心進行處理。用戶用例圖如下所示。圖3-1用戶用例圖管理員用例圖如下所示。圖3-2管理員用例圖前臺用戶功能用戶管理模塊:(1)用戶注冊登錄:用戶注冊為會員并登錄火車訂票系統(tǒng);用戶對個人信息的增刪改查,比如個人資料,密碼修改。(2)貨車資訊:用戶進行資訊的閱覽,查看管理者發(fā)布的貨車資訊信息。(3)公告消息:用戶在公告欄這一菜單下對用戶提交的查看、同時也可以發(fā)布、評論。(4)車票中心:用戶根據(jù)自己的需求選中班次車票進行預(yù)訂操作。后臺管理員功能管理員管理模塊:(1)用戶管理:管理員可以對前臺上注冊過的用戶信息進行管控,也可以對管理員信息進行管控。(2)內(nèi)容管理:管理員在后臺可以對火車訂票系統(tǒng)中顯示的內(nèi)容管理信息進行增刪改查。(3)新聞列表管理:管理員可以對火車訂票系統(tǒng)中用戶提交的新聞以及新聞的分類進行增刪改查。(4)分類管理:管理員對火車訂票系統(tǒng)中商品的分類進行管控。(5)商城管理:管理員對賣家提交的商品訂單進行管控。(6)更多管理:在“更多管理”這一菜單下,可以對管理員操作的車票中心、購票訂單、退票紀(jì)錄以及在前臺用戶提交的貨車資訊、車票中心進行管控。非功能需求分析首先主要考慮的是系統(tǒng)功能軟件,在具體設(shè)計的環(huán)節(jié)上,是不是能夠較好的滿足各類用戶的基本功能需求,如果不能較好的滿足用戶需求,那么這個系統(tǒng)的存在是沒有價值的。軟件系統(tǒng)的非功能性求分析,從7個方面展開,一個是性能分析,針對系統(tǒng);一個是安全分析,針對系統(tǒng),一個是完整度分析,針對系統(tǒng),一個是可維護分析,針對系統(tǒng),一個是可擴展性分析,針對系統(tǒng),一個是適應(yīng)業(yè)務(wù)的性能分析。面對汽車訂票系統(tǒng)存在的性能、安全、擴展、完整度等7個方面性能綜合比對分析后發(fā)現(xiàn),需要相應(yīng)的非功能性需求分析。安全性需求分析系統(tǒng)的安全性安全性對每一個系統(tǒng)來說都是非常重要的。安全性很好的系統(tǒng)可以保護企業(yè)的信息和用戶的信息不被竊取。提高系統(tǒng)的安全性不僅是對用戶的負(fù)責(zé),更是對企業(yè)的負(fù)責(zé)。尤其針對于汽車訂票系統(tǒng)來說,必須要有很好的安全性來保障整個系統(tǒng)。系統(tǒng)具有對使用者有權(quán)限控制,針對角色的不通限制使用者的權(quán)限,以此來確保系統(tǒng)的安全性。數(shù)據(jù)的安全性數(shù)據(jù)庫中的數(shù)據(jù)是從外界輸入的,當(dāng)數(shù)據(jù)的輸入時,由于種種原因,輸入的數(shù)據(jù)會無效,或者是臟數(shù)據(jù)。因此,怎樣保證輸入的數(shù)據(jù)符合規(guī)定,成為了數(shù)據(jù)庫系統(tǒng),尤其是多用戶的關(guān)系數(shù)據(jù)庫系統(tǒng)首要關(guān)注的問題。因此,在寫入數(shù)據(jù)庫時,要保證數(shù)據(jù)完整性、正確性和一致性。數(shù)據(jù)流程分析對系統(tǒng)的數(shù)據(jù)流進行分析,系統(tǒng)的使用者分為二類,一般用戶,管理員。系統(tǒng)主要對界面信息傳送,登錄信息的驗證,注冊信息的接收,用戶各種操作的響應(yīng)做處理。系統(tǒng)頂層數(shù)據(jù)流圖如下圖所示。圖3-2頂層數(shù)據(jù)流圖要判斷用戶是是什么身份,是根據(jù)登錄的數(shù)據(jù)來判斷后,跳轉(zhuǎn)到對應(yīng)的功能界面。在系統(tǒng)的內(nèi)部用戶就可以對數(shù)據(jù)進行操作,數(shù)據(jù)庫中心就可以接收到系統(tǒng)傳輸?shù)挠行?shù)據(jù)流來對數(shù)據(jù)sql語句進行對應(yīng)操作。系統(tǒng)底層數(shù)據(jù)流圖如下圖所示。圖3-3底層數(shù)據(jù)流圖系統(tǒng)可以分為前臺和后臺兩部分,每一種操作后系統(tǒng)都返回操作結(jié)果。前臺和后臺的數(shù)據(jù)連接主要通過數(shù)據(jù)庫,既分別對數(shù)據(jù)庫做不同的操作。系統(tǒng)設(shè)計系統(tǒng)架構(gòu)設(shè)計本火車訂票系統(tǒng)的架構(gòu)設(shè)計主要分為可以3層,主要有Web層,業(yè)務(wù)層,Model層。其中web層還包括View層和Controller層,Model層包括元數(shù)據(jù)擴展層和數(shù)據(jù)訪問層。系統(tǒng)架構(gòu)如下圖所示。圖4-1系統(tǒng)架構(gòu)系統(tǒng)總體設(shè)計火車訂票系統(tǒng)總體分為前臺用戶模塊和后臺管理員模塊。兩個模塊表現(xiàn)上是分別獨立存在,但是訪問的數(shù)據(jù)庫是一樣的。每一個模塊的功能都是根據(jù)先前完成的需求分析,并查閱相關(guān)資料后整理制作的。綜上所述,系統(tǒng)功能結(jié)構(gòu)圖如下圖所示。圖4-2系統(tǒng)功能結(jié)構(gòu)圖系統(tǒng)功能設(shè)計登錄模塊:登錄模塊是進入系統(tǒng)的入口,所有用戶必須登錄后才能訪問系統(tǒng)。登錄需要輸入用戶名和密碼,如果多次嘗試登錄需要輸入驗證碼。登錄時需要選擇用戶的角色,是一般用戶還是管理員登錄等。登錄成功后,會通過數(shù)據(jù)庫獲取用戶的權(quán)限,并跳轉(zhuǎn)至用戶的主頁面。管理員用戶管理模塊:管理員管理包括:管理員的添加,修改和刪除操作。添加管理員時,先判斷用戶添加的管理員是否是admin(超級管理員),如果不是則添加成功。修改時候,如果是超級管理員,可以修改所有管理員的信息,如果是普通管理員,那么只能修改自己的信息。超級管理員可以刪除自己以外的所有其他管理員,普通管理員不能執(zhí)行刪除管理員的操作。購票訂單模塊:可分為購票訂單瀏覽、購票訂單檢索、購票訂單維護三個模塊,管理員對購票訂單有維護的權(quán)限,發(fā)布新的購票訂單、更新已有的購票訂單等。車票中心管理模塊:車票管理分為車票添加、修改和車票預(yù)訂,車票退票。車票信息由管理員進行修改、添加、刪除操作;車票預(yù)訂,退票由普通用戶來執(zhí)行。數(shù)據(jù)庫設(shè)計數(shù)據(jù)需求分析從前面可以分析到數(shù)據(jù)庫中最重要的是車票信息,預(yù)訂信息,評價信息。分析可以得到如下數(shù)據(jù)描述:平臺用戶:用于記錄用戶的各種信息,包括用戶姓名、用戶性別、用戶年齡等數(shù)據(jù)項。管理員:記錄管理員的登錄信息。包括用戶名,密碼,權(quán)限等數(shù)據(jù)項。退票紀(jì)錄:存儲各種退票紀(jì)錄信息。包括火車編號、出發(fā)站、沿途站、終點站、發(fā)車時間、座位類型、座位價格、車票編號、購買用戶、購買票數(shù)、支付金額、購票須知等數(shù)據(jù)項。購票訂單。存儲用戶的購票訂單信息。包括購票訂單的火車編號、出發(fā)站、沿途站、終點站、發(fā)車時間、座位類型、座位價格、車票編號、購買用戶、購票時間、購買票數(shù)、支付金額、購票須知、支付狀態(tài)、支付類型等數(shù)據(jù)項。車票中心:存儲用戶的車票中心。包括火車編號、出發(fā)站、沿途站、終點站、發(fā)車時間、座位類型、座位價格、剩余座位、封面圖、購票須知、點擊數(shù)等數(shù)據(jù)項。數(shù)據(jù)庫概念設(shè)計根據(jù)前面的數(shù)據(jù)流程圖,結(jié)合系統(tǒng)的功能模塊設(shè)計,設(shè)計出符合系統(tǒng)的各信息實體。系統(tǒng)ER圖如下圖所示。圖4-3系統(tǒng)ER圖數(shù)據(jù)庫表設(shè)計火車訂票系統(tǒng)所擁有的數(shù)據(jù)表有以下:用戶信息表,評論信息表,車票信息表,車票預(yù)訂表,留言表。由于數(shù)據(jù)表較多,只展示系統(tǒng)主要數(shù)據(jù)表,如下表所示。ticket_refund_record表:名稱類型長度不是null主鍵注釋ticket_refund_record_idint11是是退票記錄IDtrain_numbervarchar64否否火車編號departure_stationvarchar64否否出發(fā)站station_along_the_wayvarchar64否否沿途站terminusvarchar64否否終點站departure_timevarchar64否否發(fā)車時間seat_typevarchar64否否座位類型seat_pricevarchar64否否座位價格ticket_novarchar64否否車票編號purchase_userint11否否購買用戶number_of_votes_purchasedvarchar64否否購買票數(shù)payment_amountvarchar64否否支付金額ticket_purchase_instructionstext0否否購票須知recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間ticket_purchase_order表:名稱類型長度不是null主鍵注釋ticket_purchase_order_idint11是是購票訂單IDtrain_numbervarchar64否否火車編號departure_stationvarchar64否否出發(fā)站station_along_the_wayvarchar64否否沿途站terminusvarchar64否否終點站departure_timevarchar64否否發(fā)車時間seat_typevarchar64否否座位類型seat_pricevarchar64否否座位價格ticket_novarchar64否否車票編號purchase_userint11否否購買用戶ticket_purchase_timetime0否否購票時間number_of_votes_purchasedint11否否購買票數(shù)payment_amountvarchar64否否支付金額ticket_purchase_instructionstext0否否購票須知pay_statevarchar16是否支付狀態(tài)pay_typevarchar16否否支付類型:微信、支付寶、網(wǎng)銀recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間ticket_center表:名稱類型長度不是null主鍵注釋ticket_center_idint11是是車票中心IDtrain_numbervarchar64否否火車編號departure_stationvarchar64否否出發(fā)站station_along_the_wayvarchar64否否沿途站terminusvarchar64否否終點站departure_timedatetime0否否發(fā)車時間seat_typevarchar64否否座位類型seat_priceint11否否座位價格remaining_seatsvarchar64否否剩余座位cover_picturevarchar255否否封面圖ticket_purchase_instructionstext0否否購票須知hitsint11是否點擊數(shù)recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間ordinary_users表:名稱類型長度不是null主鍵注釋ordinary_users_idint11是是普通用戶IDuser_namevarchar64是否用戶姓名user_gendervarchar64否否用戶性別user_agevarchar64否否用戶年齡examine_statevarchar16是否審核狀態(tài)recommendint11是否智能推薦user_idint11是否用戶IDcreate_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間Comment表:名稱類型長度不是null主鍵注釋comment_idint11是是評論IDuser_idint11是否評論人IDreply_to_idint11是否回復(fù)評論IDcontentlongtext0否否內(nèi)容nicknamevarchar255否否昵稱avatarvarchar255否否頭像地址create_timetimestamp0是否創(chuàng)建時間update_timetimestamp0是否更新時間source_tablevarchar255否否來源表source_fieldvarchar255否否來源字段source_idint10是否來源IDSlides表:名稱類型長度不是null主鍵注釋slides_idint10是是輪播圖IDtitlevarchar64否否標(biāo)題contentvarchar255否否內(nèi)容urlvarchar255否否鏈接imgvarchar255否否輪播圖hitsint10是否點擊量create_timetimestamp0是否創(chuàng)建時間update_timetimestamp0是否更新時間Praise表:名稱類型長度不是null主鍵注釋praise_idint10是是點贊IDuser_idint11是否點贊人create_timetimestamp0是否創(chuàng)建時間update_timetimestamp0是否更新時間source_tablevarchar255否否來源表source_fieldvarchar255否否來源字段source_idint10是否來源IDstatustinyint1是否點贊狀態(tài)系統(tǒng)實現(xiàn)數(shù)據(jù)庫訪問層的實現(xiàn)該系統(tǒng)是通過jdbc和MySQL達成連接的,新建一個perties文件來填寫與數(shù)據(jù)庫連接所需要的驅(qū)動和參數(shù)。jdbc.driverClass=com.MySQL.jdbc.Driverjdbc.url=jdbc:MySQL://localhost:3306/tsijdbc.username=rootjdbc.password=123第一個參數(shù)代表MySQL數(shù)據(jù)庫的驅(qū)動,第二個參數(shù)代表要連接的數(shù)據(jù)庫,第三個和第四個參數(shù)代表數(shù)據(jù)庫連接名和密碼。后臺與數(shù)據(jù)庫訪問主要是通過HQL語句來進行查詢的,查詢語句中的表名是表格的實體類名,在這種查詢語句中*是不允許使用的,除非適合聚合函數(shù)一起使用才可以。注冊模塊的實現(xiàn)用戶在填寫數(shù)據(jù)的時候必須與注冊頁面上的驗證相匹配否則會注冊失敗,注冊頁面的表單驗證是通過JavaScript進行驗證的,用戶名的長度必須在6到18之間,郵箱必須帶有@符號,密碼和密碼確認(rèn)必須相同,你輸入的密碼,系統(tǒng)會根據(jù)你輸入密碼的強度給出指定的值,電話號碼和身份證號碼必須要求輸入格式與生活相符合,當(dāng)你前臺驗證通過的時候你點擊注冊,表單會將你輸入的值通過name值傳遞給后臺并保存到數(shù)據(jù)庫中。用戶注冊流程圖如下圖所示。圖5-1用戶注冊流程圖用戶注冊界面如下圖所示。圖5-2用戶注冊界面用戶注冊的關(guān)鍵代碼如下。/***注冊*@paramuser*@return*/@PostMapping("register")publicMap<String,Object>signUp(@RequestBodyUseruser){//查詢用戶Map<String,String>query=newHashMap<>();query.put("username",user.getUsername());Listlist=service.select(query,newHashMap<>()).getResultList();if(list.size()>0){returnerror(30000,"用戶已存在");}user.setUserId(null);user.setPassword(service.encryption(user.getPassword()));service.save(user);returnsuccess(1);}/***用戶ID:[0,8388607]用戶獲取其他與用戶相關(guān)的數(shù)據(jù)*/@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="user_id")privateIntegeruserId;/***賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷)*/@Basic@Column(name="state")privateIntegerstate;/***所在用戶組:[0,32767]決定用戶身份和權(quán)限*/@Basic@Column(name="user_group")privateStringuserGroup;/***上次登錄時間:*/@Basic@Column(name="login_time")privateTimestamploginTime;/***手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時*/@Basic@Column(name="phone")privateStringphone;/***手機認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)*/@Basic@Column(name="phone_state")privateIntegerphoneState;/***用戶名:[0,16]用戶登錄時所用的賬戶名稱*/@Basic@Column(name="username")privateStringusername;/***昵稱:[0,16]*/@Basic@Column(name="nickname")privateStringnickname;/***密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成*/@Basic@Column(name="password")privateStringpassword;/***郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時*/@Basic@Column(name="email")privateStringemail;/***郵箱認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)*/@Basic@Column(name="email_state")privateIntegeremailState;/***頭像地址:[0,255]*/@Basic@Column(name="avatar")privateStringavatar;/***創(chuàng)建時間:*/@Basic@Column(name="create_time")@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss")privateTimestampcreateTime;@Basic@TransientprivateStringcode;}登錄模塊的實現(xiàn)主要由兩部分組成,登錄前的登錄界面以及登錄后的用戶功能界面。登錄界面,要求用戶輸入用戶名和密碼,當(dāng)用戶名和密碼其中一個輸入為空時,給出提示“用戶名,密碼不能為空”。獲取用戶名和密碼后到數(shù)據(jù)庫中查找,如果用戶名存在,以及對應(yīng)的密碼正確,則登錄成功,否則登錄失敗。登錄失敗后給出提示,并把焦點停在文本框中。登錄成功后將該次會話的全局變量username設(shè)置為用戶名。登錄成功后進入會員的功能模塊,主要有會員基本信息修改,已經(jīng)發(fā)布商品信息管理,發(fā)布信息,和退出功能。退出功能是清除全局變量username的值,并跳回到首頁。登錄流程圖如下圖所示。圖5-3登錄流程圖用戶登錄界面如下圖所示。圖5-4用戶登錄界面用戶登錄的關(guān)鍵代碼如下。/***登錄*@paramdata*@paramhttpServletRequest*@return*/@PostMapping("login")publicMap<String,Object>login(@RequestBodyMap<String,String>data,HttpServletRequesthttpServletRequest){("[執(zhí)行登錄接口]");Stringusername=data.get("username");Stringemail=data.get("email");Stringphone=data.get("phone");Stringpassword=data.get("password");ListresultList=null;Map<String,String>map=newHashMap<>();if(username!=null&&"".equals(username)==false){map.put("username",username);resultList=service.select(map,newHashMap<>()).getResultList();}elseif(email!=null&&"".equals(email)==false){map.put("email",email);resultList=service.select(map,newHashMap<>()).getResultList();}elseif(phone!=null&&"".equals(phone)==false){map.put("phone",phone);resultList=service.select(map,newHashMap<>()).getResultList();}else{returnerror(30000,"賬號或密碼不能為空");}if(resultList==null||password==null){returnerror(30000,"賬號或密碼不能為空");}//判斷是否有這個用戶if(resultList.size()<=0){returnerror(30000,"用戶不存在");}用戶資料修改模塊的實現(xiàn)用戶登錄/注冊成功之后可以修改自己的基本信息。修改頁面的表單中每一個input的name值都要與實體類中的參數(shù)相匹配,在用戶點擊修改頁面的時候,如果改后用戶名與數(shù)據(jù)庫里面重復(fù)了,頁面會提示該用戶名已經(jīng)存在了,否則通過Id來查詢用戶,并將用戶的信息修改為表單提交的數(shù)據(jù)。貨車資訊模塊的實現(xiàn)如果貨車資訊的信息需要修改,管理員可以通過查詢貨車資訊的基本信息來查詢貨車資訊,查詢貨車資訊是通過ajax技術(shù)來進行查詢的,需要傳遞貨車資訊的標(biāo)題、編號等參數(shù)然后在返回到該頁面中,可以選中要修改或刪除的那條信息,如果選中了超過一條數(shù)據(jù),頁面會挑一個窗口提醒只能選擇一條數(shù),如果沒有選中數(shù)據(jù)會挑一個窗口題型必須選擇一條數(shù)據(jù)。當(dāng)選擇確認(rèn)修改的時候,后臺會根據(jù)傳過來的id到數(shù)據(jù)庫查詢,并將結(jié)果返回到修改頁面中,可以在修改頁面中修改剛剛選中的信息當(dāng)點擊確認(rèn)的時候from表單會將修改的數(shù)據(jù)提交到后臺并保存到數(shù)據(jù)庫中,就是說如果提交的數(shù)據(jù)數(shù)據(jù)庫中存在就修改,否則就保存。貨車資訊展示界面如下圖所示。圖5-5貨車資訊展示界面貨車資訊展示的關(guān)鍵代碼如下。@RequestMapping(value={"/avg_group","/avg"}) publicMap<String,Object>avg(HttpServletRequestrequest){Querycount=service.avg(service.readQuery(request),service.readConfig(request));returnsuccess(count.getResultList());}車票中心列表模塊的實現(xiàn)火車訂票功能整體流程:用戶瀏覽車票信息時,同時會顯示車票的狀態(tài),系統(tǒng)會在其顯示詳細(xì)信息的頁面時便會判斷車票的狀態(tài),若車票狀態(tài)為可預(yù)訂,則會顯示預(yù)訂的鏈接按鈕。在用戶點擊預(yù)訂按鈕時,會先通過攔截器判斷用戶是否登錄,若未登錄,會跳轉(zhuǎn)至登錄頁面,提示用戶先登錄,若為登錄用戶就會跳轉(zhuǎn)至填寫預(yù)訂信息的頁面,填寫好預(yù)訂信息之后,點擊提交按鈕,預(yù)訂成功之后返回提示信息,告知用戶預(yù)訂成功。車票中心界面如下圖所示。圖5-1車票中心界面車票中心管理展示的關(guān)鍵代碼如下。@RestController@RequestMapping("auth")publicclassAuthControllerextendsBaseController<Auth,AuthService>{/***服務(wù)對象*/@AutowiredpublicAuthController(AuthServiceservice){setService(service);}退票紀(jì)錄管理模塊的實現(xiàn)根據(jù)需求,需要對退票進行添加、刪除或修改詳情信息。刪除或修改退票時,系統(tǒng)根據(jù)退票的狀態(tài)判定為可刪除狀態(tài)下,才會給出刪除和修改鏈接,點擊刪除鏈接按鈕時,請求到達后臺,還會先查詢退票狀態(tài)再次做出判定能否刪除。點擊修改鏈接按鈕時,會跳轉(zhuǎn)到修改信息的頁面,重新填寫好數(shù)據(jù)后,數(shù)據(jù)提交到后臺會對數(shù)據(jù)庫中相應(yīng)的記錄做出修改。添加退票時,會給出數(shù)據(jù)填寫的頁面,該頁面根據(jù)填寫好的退票編號同樣會事先發(fā)送Ajax請求查詢編號是否已存在,數(shù)據(jù)填寫好之后提交到后臺,會調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫中插入記錄。退票紀(jì)錄管理流程圖如下圖所示。圖5-8退票紀(jì)錄管理流程圖退票紀(jì)錄管理頁面設(shè)計效果如下圖所示。圖5-9退票紀(jì)錄管理添加界面退票紀(jì)錄管理的關(guān)鍵代碼如下。@RequestMapping("/get_obj")publicMap<String,Object>obj(HttpServletRequestrequest){Queryselect=service.select(service.readQuery(request),service.readConfig(request));ListresultList=select.getResultList();if(resultList.size()>0){JSONObjectjsonObject=newJSONObject();jsonObject.put("obj",resultList.get(0));returnsuccess(jsonObject);}else{returnsuccess(null);}}publicQueryselect(Map<String,String>query,Map<String,String>config){StringBuffersql=newStringBuffer("select");sql.append(config.get(FindConfig.FIELD)==null||"".equals(config.get(FindConfig.FIELD))?"*":config.get(FindConfig.FIELD)).append("");sql.append("from").append("`").append(table).append("`").append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));if(config.get(FindConfig.GROUP_BY)!=null&&!"".equals(config.get(FindConfig.GROUP_BY))){sql.append("groupby").append(config.get(FindConfig.GROUP_BY)).append("");}if(config.get(FindConfig.ORDER_BY)!=null&&!"".equals(config.get(FindConfig.ORDER_BY))){sql.append("orderby").append(config.get(FindConfig.ORDER_BY)).append("");}if(config.get(FindConfig.PAGE)!=null&&!"".equals(config.get(FindConfig.PAGE))){intpage=config.get(FindConfig.PAGE)!=null&&!"".equals(config.get(FindConfig.PAGE))?Integer.parseInt(config.get(FindConfig.PAGE)):1;intlimit=config.get(FindConfig.SIZE)!=null&&!"".equals(config.get(FindConfig.SIZE))?Integer.parseInt(config.get(FindConfig.SIZE)):10;sql.append("limit").append((1)*limit).append(",").append(limit);}("[{}]-查詢操作,sql:{}",table,sql);returnrunEntitySql(sql.toString());}開發(fā)與設(shè)計系統(tǒng)測試測試目的對任何系統(tǒng)而言,測試都是必不可少的環(huán)節(jié),測試可以發(fā)現(xiàn)系統(tǒng)存在的很多問題,所有的軟件上線之前,都應(yīng)該進行充足的測試之后才能保證上線后不會Bug頻發(fā),或者是功能不滿足需求等問題的發(fā)生。下面分別從單元測試,功能測試和用例測試來對系統(tǒng)進行測試以保證系統(tǒng)的穩(wěn)定性和可靠性。功能測試下表是車次推薦功能的測試用例,檢測了退票紀(jì)錄中對退票信息的增加,刪除,修改,查詢操作是否成功運行。觀察系統(tǒng)的響應(yīng)情況,得出該功能也達到了設(shè)計目標(biāo),系統(tǒng)運行正確。前置條件;用戶登錄系統(tǒng)。表6-1退票紀(jì)錄的測試用例功能描述用于退票紀(jì)錄測試目的檢測退票紀(jì)錄時的各種操作的運行情況測試數(shù)據(jù)以及操作預(yù)期結(jié)果實際結(jié)果點擊添加退票,必填項合法輸入,點擊保存提示添加成功與預(yù)期結(jié)果一致點擊添加退票,必填項輸入不合法,點擊保存提示必填項不能為空與預(yù)期結(jié)果一致點擊修改退票,必填項修改為空,點擊保存提示必填項不能為空與預(yù)期結(jié)果一致點擊修改退票,必填項輸入不合法,點擊保存提示必填項不能為空與預(yù)期結(jié)果一致點擊刪除退票,選擇退票刪除提示刪除成功與預(yù)期結(jié)果一致點擊搜索退票,輸入存在的退票名查找出退票與預(yù)期結(jié)果一致點擊搜索退票,輸入不存在的退票名不顯示退票與預(yù)期結(jié)果一致下表是購票訂單管理功能的測試用例,檢測了購票訂單管理中購票訂單單的操作是否成功運行。觀察系統(tǒng)的響應(yīng)情況,得出該功能也達到了設(shè)計目標(biāo),系統(tǒng)運行正確。前置條件;用戶登錄系統(tǒng)。表6-2購票訂單管理的測試用例功能描述用于購票訂單管理測試目的檢測購票訂單管理時各種操作的情況測試數(shù)據(jù)以及操作預(yù)期結(jié)果實際結(jié)果未選擇車票,點擊提交提示請選擇車票與預(yù)期結(jié)果一致未輸入數(shù)量,點擊提交提示請輸入數(shù)量與預(yù)期結(jié)果一致未輸入時間,點擊提交提示請輸入時間與預(yù)期結(jié)果一致性能測試使用阿里云PTS(PerformanceTestingService)性能測試服務(wù)對線上系統(tǒng)進行壓力測試。線上服務(wù)器環(huán)境為:1核心CPU,1G內(nèi)存,1Mbps公網(wǎng)帶寬,Centos7.0操作系統(tǒng)。壓測過程中使用了2臺并發(fā)機器,每臺機器20個用戶并發(fā),對系統(tǒng)主頁,登錄,數(shù)據(jù)查詢和數(shù)據(jù)維護等模塊進行并發(fā)訪問,測試結(jié)果是有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)習(xí)英語心得體會
- 婚禮電子版邀請函
- 急性腎損傷的臨床護理
- 門店營銷管理培訓(xùn)課程
- 急救培訓(xùn)與演練效果評估總結(jié)計劃
- 新質(zhì)生產(chǎn)力產(chǎn)業(yè)介紹
- 馬尾損傷的臨床護理
- 整形外科個人工作計劃
- 合力前行社團成就自我超越計劃
- 情感教育在班級活動中的實踐計劃
- 四年級四年級下冊閱讀理解100篇及答案經(jīng)典
- 中職對口升學(xué)復(fù)習(xí)資料:《汽車機械基礎(chǔ)》試題庫+答案
- 部編版語文五年級下冊第六單元整體教學(xué)設(shè)計教案
- 平面變壓器設(shè)計與仿真
- DB13-T1725-2013高粱抗蚜性評價技術(shù)規(guī)程
- 合作取得更大的成功辯論稿范文六篇
- 相關(guān)方需求和期望識別評價表
- 西南科技大學(xué)井巷工程課程設(shè)計樣本
- 某化妝品牌案例分析
- 循環(huán)水管道施工組織設(shè)計
- 防腐涂料涂層體系油漆用量與費用計算表
評論
0/150
提交評論