




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
緒論研究的目的及意義隨著國內(nèi)經(jīng)濟的不斷發(fā)展,人民收入水平的提高以及對于情感需求的日益強,寵物飼養(yǎng)成為了一種流行趨勢。寵物的增多不可避免地造成了流浪寵物的泛濫,它們大多來自被主人遺棄的動物或這些動物繁衍的后代。它們沒有管束,游走在人類居住區(qū)的邊緣,給人們的生活帶來了不小的困擾。如今也存在由愛心人士組織的流浪動物救助站收養(yǎng)一些流浪狗,但有時救助站的寵物過多,難以應(yīng)付以致很多寵物都只能被執(zhí)行“安樂死”。為了解決當(dāng)前的流浪寵物問題,傳統(tǒng)低效的線下登記領(lǐng)養(yǎng)逐漸被取代,隨之而來的是使用終端設(shè)備便可瀏覽訪問的流浪狗領(lǐng)養(yǎng)管理系統(tǒng)。通過設(shè)計基于springboot框架的流浪狗領(lǐng)養(yǎng)管理,效率比起傳統(tǒng)線下登記形式有了很大的提高。首先,管理員可對現(xiàn)有的流浪狗信息進行直觀地管理,避免了傳統(tǒng)模式下信息缺失遺漏的情況;其次它為需要領(lǐng)養(yǎng)寵物的用戶提供了一個便利的領(lǐng)養(yǎng)平臺。流浪狗領(lǐng)養(yǎng)管理使用B/S架構(gòu),因為客戶端(計算機)僅用作瀏覽器,所以維護人員只需要良好的服務(wù)器維護。無論客戶規(guī)模大小,都不會增加業(yè)務(wù)強度。使用B/S結(jié)構(gòu)將大大減少不必要的人力和物力,從而提高工作效率。國內(nèi)外研究現(xiàn)狀在前幾年國人的觀念中,國外的寵物飼養(yǎng)就主要是通過領(lǐng)養(yǎng)的方式了,國內(nèi)一直都是用購買的方式進行。實從寵物的飼養(yǎng)數(shù)量上來看:國內(nèi)飼養(yǎng)寵物的人數(shù)已經(jīng)比世界上任何一個國家都要多,要因素是我國的人口基數(shù)大,也正因如此,棄養(yǎng)的寵物更是數(shù)不勝數(shù)。大部分人看來,寵物只是寵物,而寵物帶來的負(fù)面影響會導(dǎo)致棄養(yǎng),比如說寵物生病帶來的費用難以承擔(dān)就直接棄養(yǎng)。而寵物的領(lǐng)養(yǎng)政策的完善不是一蹴而就的,涉及到經(jīng)濟、政策、民生、不同地區(qū)對不同種類的動物的管理政策、接收程度。我國的寵物市場近幾年才發(fā)展起來,很多方面并不完善,動物收養(yǎng)所便是重要一環(huán)。寵物行業(yè)涉及的范圍較廣,國內(nèi)主要包括兩大產(chǎn)業(yè),一類是寵物產(chǎn)品,一類是寵物服務(wù)。其中,寵物產(chǎn)品包括寵物交易、寵物主糧、寵物零食、寵物清潔用品等;寵物服務(wù)則包括寵物醫(yī)療、寵物美容、寵物培訓(xùn)等。在沒有了解這些內(nèi)容的情況下,很多人還是一種沖動的領(lǐng)養(yǎng)。而隨著國內(nèi)互聯(lián)網(wǎng)技術(shù)的發(fā)展和應(yīng)用成熟度越來越高,人們獲取資訊以及了解信息的途徑大部分都是通過網(wǎng)絡(luò)進行。因此通過建立一個寵物領(lǐng)養(yǎng)系統(tǒng)能夠?qū)崿F(xiàn)包括寵物領(lǐng)養(yǎng).以及寵物信息、論壇、社交、在線服務(wù)、電子商、社區(qū)020、活動等功能,為寵物主人提供360度全方位服務(wù),同時還可以為愛心創(chuàng)業(yè)者提供一個創(chuàng)業(yè)平臺。本文的組織結(jié)構(gòu)六個章節(jié)共同組成了本文研究及設(shè)計內(nèi)容,包括:第一章:緒論。本文章的開頭部分,對本題目的研究的目的及意義和研究現(xiàn)狀等一些做文字性的描述。第二章:相關(guān)技術(shù)介紹。主要介紹Springboot框架、Java嵌入式腳本語言、B/S模式等。第三章:系統(tǒng)分析。包括系統(tǒng)總體需求描述、功能性角度分析系統(tǒng)需求、非功能性等各個方面分析系統(tǒng)是否可以實現(xiàn)。第四章:系統(tǒng)設(shè)計。本文章的重要部分,提供了系統(tǒng)架構(gòu)的詳細(xì)設(shè)計和一些主要功能模塊的設(shè)計說明。第五章:系統(tǒng)實現(xiàn)。將本系統(tǒng)分為前提的開發(fā)工具介紹和后期的功能代碼實現(xiàn)。第六章:系統(tǒng)測試。系統(tǒng)完成后,根據(jù)各個模塊的測試用例才對各個模塊進行功能測試。相關(guān)技術(shù)介紹開發(fā)技術(shù)說明本系統(tǒng)前端部分基于MVVM模式進行開發(fā),采用B/S模式,后端部分基于Java的springboot框架進行開發(fā)。前端部分:前端框架采用了比較流行的漸進式JavaScript框架Vue.js。使用Vue-Router和Vuex實現(xiàn)動態(tài)路由和全局狀態(tài)管理,Ajax實現(xiàn)前后端通信,ElementUI組件庫使頁面快速成型,項目前端通過柵格布局實現(xiàn)響應(yīng)式,可適應(yīng)PC端、平板端、手機端等不同屏幕大小尺寸的完美布局展示。后端部分:采用springboot作為開發(fā)框架,同時集成MyBatis、Redis等相關(guān)技術(shù)。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)模式。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ù)管理、遠(yuǎn)程訪問等功能均可以通過使用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。MySQL簡介MySQL是一個開放的、快速的、多線程的SQL關(guān)系型數(shù)據(jù)庫服務(wù)器。由于其體積小、免費、運行速度快以及可以通過相關(guān)免費的軟件來對MySql數(shù)據(jù)庫中的相關(guān)數(shù)據(jù)結(jié)構(gòu)信息等等優(yōu)點。受廣大中等、小型企業(yè)所喜愛并占據(jù)了很大地位。本系統(tǒng)在數(shù)據(jù)庫方面選用MySQL,并通過Nacivat來進行MySql數(shù)據(jù)庫的管理。在Mysql的安裝過程中,最需要注意的就是數(shù)據(jù)庫的編碼問題,所以在安裝數(shù)據(jù)庫時需要設(shè)置數(shù)據(jù)庫的編碼為Utf-8,與前臺頁面和服務(wù)器的編碼相一致。JavaScript運行模式JavaScript是一種屬于網(wǎng)絡(luò)的高級腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現(xiàn)自身的功能的。1.1是一種解釋性腳本語言(代碼不進行預(yù)編譯)。1.2主要用來向HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個應(yīng)用)頁面添加交互行為。1.3可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結(jié)構(gòu)和行為的分離。1.4跨平臺特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。1.5JavaScript腳本語言同其他語言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
系統(tǒng)分析可行性分析法律可行性分析開發(fā)軟件有沒有觸犯法律,這涉及到軟件或者系統(tǒng)能不能發(fā)布的問題。如果觸犯了法律,就必將會受到法律的制裁。常見法律問題就是軟件抄襲問題,若是抄襲別人軟件,將會受到嚴(yán)厲懲罰。技術(shù)可行性分析軟件產(chǎn)業(yè)經(jīng)過多年的發(fā)展,現(xiàn)在已經(jīng)達(dá)到了很大的規(guī)模,從事軟件開發(fā)的專業(yè)人員不計其數(shù),軟件產(chǎn)業(yè)的重要性已經(jīng)上升到了影響和推動國民經(jīng)濟發(fā)展的核心地位。本系統(tǒng)基于的架構(gòu),目前技術(shù)已經(jīng)非常的成熟,是不存在技術(shù)上面難以實現(xiàn)的麻煩。經(jīng)濟可行性分析開發(fā)軟件所需的時間、人力和物力成本,開發(fā)完成后的收益如何,從投資回報的角度軟件所需功能在現(xiàn)有經(jīng)濟條件能不能實現(xiàn)等進行深入的考慮,都符合實際的要求。所以流浪狗領(lǐng)養(yǎng)管理系統(tǒng)具有經(jīng)濟可行性和實用性,可以節(jié)約管理成本功能需求分析流浪狗領(lǐng)養(yǎng)管理系統(tǒng)主要是為了更加地完善流浪狗領(lǐng)養(yǎng)情況,對用戶的信息、領(lǐng)養(yǎng)信息、領(lǐng)養(yǎng)記錄、回訪記錄、分類管理等提供了方便的機制。本系統(tǒng)有多類使用者,分別是管理員和普通用戶。以下是從這兩種用戶的角度分別介紹本系統(tǒng)所要實現(xiàn)的功能。用戶:注冊:首先檢查用戶名和郵箱是否存在,如不存在即可進行注冊,并將用戶輸入的密碼進行MD5加密,注冊成功后提示注冊成功,并將用戶信息保存到數(shù)據(jù)庫中。登錄:使用流浪狗領(lǐng)養(yǎng)管理系統(tǒng)前是需要用戶登錄個人賬號。寵物知識:用戶進行寵物知識的閱覽,查看管理員發(fā)布的寵物知識信息。交流中心:用戶在交流論壇這一菜單下對用戶在線交流的查看、同時也可以發(fā)布、評論。領(lǐng)養(yǎng)信息:用戶對寵物信息的查詢,包括標(biāo)題名稱、寵物狀態(tài)、寵物名稱、寵物性別。管理員:用戶管理:對用戶進行管理,用戶的注冊,包括用戶昵稱、用戶名、用戶的寵物信息(寵物狀態(tài)、寵物名稱、寵物性別等)用戶的賬號信息:領(lǐng)養(yǎng)記錄管理:對領(lǐng)養(yǎng)記錄進行維護管理。寵物信息管理:對寵物信息進行維護管理?;卦L記錄管理:對寵物的回訪記錄信息進行維護管理。非功能需求分析系統(tǒng)非功能需求有非常多,比如性能需求、可承載最大用戶數(shù)、穩(wěn)定性、易用性需求等。本系統(tǒng)分析時考慮到易用性需求,因為系統(tǒng)是給人使用的,所以必須充分從用戶的角度出發(fā),考慮用戶體驗,使系統(tǒng)易理解易上手易操作。用例分析普通用戶主要使用系統(tǒng)的寵物熱點和流浪狗領(lǐng)養(yǎng)管理系統(tǒng),下圖所示為普通用戶的用例圖3-1普通用戶用例圖2.管理員主要負(fù)責(zé)用戶管理、領(lǐng)養(yǎng)記錄、寵物信息、回訪記錄、分類管理,下圖所示描述管理員的用例圖。圖3-2管理員用例圖業(yè)務(wù)流程分析系統(tǒng)業(yè)務(wù)流程圖如下所示。圖3-3系統(tǒng)業(yè)務(wù)流程圖業(yè)務(wù)流程圖(TFD)通過一些特定的符號描述業(yè)務(wù)的處理過程,它重點強調(diào)業(yè)務(wù)過程中每一項處理活動和具體業(yè)務(wù)部門的關(guān)系,選擇部分模塊進行具體描述。重點對本系統(tǒng)整體業(yè)務(wù)中最為主要的寵物狗領(lǐng)養(yǎng)信息以及領(lǐng)養(yǎng)記錄進行描述,用戶進入流浪狗領(lǐng)養(yǎng)管理系統(tǒng)后進行各種模塊信息的瀏覽,選擇想要領(lǐng)養(yǎng)信息、領(lǐng)養(yǎng)記錄,另外,管理人員進入后端管理,以執(zhí)行該領(lǐng)養(yǎng)信息控制模塊的相關(guān)管理方法,并在解決后向客戶提供反饋機制。數(shù)據(jù)流程分析如下為系統(tǒng)的頂層數(shù)據(jù)流圖,外部實體有用戶和管理員,分別對系統(tǒng)輸入數(shù)據(jù),從而得到要輸出的數(shù)據(jù)。圖3-4系統(tǒng)頂層數(shù)據(jù)流圖如下圖所示為系統(tǒng)底層數(shù)據(jù)流圖。圖3-5系統(tǒng)底層數(shù)據(jù)流圖流浪狗領(lǐng)養(yǎng)管理系統(tǒng)底層數(shù)據(jù)流圖主要描述系統(tǒng)底層模塊的數(shù)據(jù)流、數(shù)據(jù)載體、數(shù)據(jù)處理、外部實體的具體交互。本系統(tǒng)就是管理員和普通用戶在用戶管理、領(lǐng)養(yǎng)信息、領(lǐng)養(yǎng)記錄、回訪記錄等模塊上的數(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ù)訪問層。圖4-1系統(tǒng)架構(gòu)圖系統(tǒng)功能結(jié)構(gòu)為了將系統(tǒng)從“做什么”落實到“怎么做”,基于系統(tǒng)設(shè)計原則,對系統(tǒng)功能進行更適合編碼實現(xiàn)的功能劃分。根據(jù)上圖的系統(tǒng)架構(gòu)設(shè)計,整理出規(guī)范的系統(tǒng)功能結(jié)構(gòu)圖,為系統(tǒng)的實現(xiàn)編碼做好準(zhǔn)備。如下圖所示為系統(tǒng)功能結(jié)構(gòu)圖。圖4-2系統(tǒng)功能結(jié)構(gòu)圖功能模塊設(shè)計用戶管理針對所有用戶和管理員。未注冊用戶點擊注冊,進入注冊頁面填寫新用戶信息,得到自定義生成賬號后,注冊完成。未注冊用戶注冊的活動圖如下圖所示。圖4-3未注冊用戶注冊活動圖用戶可進行登錄使用更多功能,首先進入用戶登錄界面,輸入用戶賬號和密碼,后臺對賬號和密碼信息進行核對驗證,驗證成功則頁面直接顯示登錄用戶昵稱代表登錄成功,否則返回用戶登錄界面。用戶登錄活動圖如下圖。圖4-4用戶登錄活動圖用戶登錄后,進入功能頁面,可對自己的信息進行管理,包括個人信息,預(yù)約掛號、病歷記錄、在線咨詢。用戶使用功能活動圖如下圖所示。圖4-5用戶使用功能活動圖用戶功能界面可對自己的密碼進行修改。進入修改密碼界面后核對當(dāng)前密碼,核對成功后填寫新密碼。修改密碼活動圖如下圖所示。圖4-6修改密碼活動圖數(shù)據(jù)庫設(shè)計流浪狗領(lǐng)養(yǎng)管理系統(tǒng)采用的數(shù)據(jù)庫是MySQL,該部分將根據(jù)系統(tǒng)需求和設(shè)計,設(shè)計合理的數(shù)據(jù)庫。本系統(tǒng)考慮到之后系統(tǒng)的擴展集群,數(shù)據(jù)庫將不使用外鍵。此外,不用外鍵時數(shù)據(jù)管理也較為簡單,操作更加方便,性能更高。E-R圖E-R圖,更加直觀的告訴開發(fā)人員系統(tǒng)的各個數(shù)據(jù)的屬性,各個數(shù)據(jù)之間的聯(lián)系,各個數(shù)據(jù)的類型。能通過該模型更直觀地了解數(shù)據(jù)庫的設(shè)計,并根據(jù)對其逐漸改善。本系統(tǒng)圖設(shè)計,如下圖所示。圖4-7系統(tǒng)E-R圖表結(jié)構(gòu)設(shè)計本系統(tǒng)根據(jù)第三范式的思想設(shè)計數(shù)據(jù)庫,減少最大程度的冗余,總共建立有多個表,用戶注冊表、管理員表、寵物信息表、評論表、領(lǐng)養(yǎng)記錄表、回訪記錄表、等。return_visit_record表:名稱類型長度不是null主鍵注釋return_visit_record_idint11是是回訪記錄IDpet_namevarchar64否否寵物名稱pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡adopterint11否否領(lǐng)養(yǎng)人return_visit_photosvarchar255否否回訪照片return_visit_descriptiontext0否否回訪描述recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間ordinary_users表:名稱類型長度不是null主鍵注釋ordinary_users_idint11是是普通用戶IDfull_namevarchar64否否姓名gendervarchar64否否性別examine_statevarchar16是否審核狀態(tài)recommendint11是否智能推薦user_idint11是否用戶IDcreate_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間classification_management表名稱類型長度不是null主鍵注釋classification_management_idint11是是分類管理IDpet_speciesvarchar64否否寵物種類recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間adoption_record表:名稱類型長度不是null主鍵注釋adoption_record_idint11是是領(lǐng)養(yǎng)記錄IDpet_namevarchar64否否寵物名稱pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡adopterint11否否領(lǐng)養(yǎng)人contact_numbervarchar16否否聯(lián)系電話adoption_statusvarchar64否否領(lǐng)養(yǎng)狀態(tài)return_visit_statusvarchar64否否回訪狀態(tài)reasons_for_adoptiontext0否否領(lǐng)養(yǎng)原由reply_messagetext0否否回復(fù)信息recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時間update_timetimestamp0是否更新時間adoption_information表:名稱類型長度不是null主鍵注釋adoption_information_idint11是是領(lǐng)養(yǎng)信息IDtitle_namevarchar64否否標(biāo)題名稱release_timedate0否否發(fā)布時間pet_statusvarchar64否否寵物狀態(tài)pet_namevarchar64否否寵物名稱pet_speciesvarchar64否否寵物種類pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡pet_picturesvarchar255否否寵物圖片detailed_informationtext0否否詳細(xì)信息remark_informationtext0否否備注信息hitsint11是否點擊數(shù)recommendint11是否智能推薦create_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是否來源ID系統(tǒng)實現(xiàn)開發(fā)工具系統(tǒng)中應(yīng)用的開發(fā)工具總結(jié)如下表所示。表5-1開發(fā)工具名稱工具版本操作系統(tǒng)IDE(IntegratedDevelopmentEnvironment)WindowsEclipse7/8/102017服務(wù)器Tomcat9.10.7JDK(JavaDevelopmentKit)JDKJavaSE8.0(1.8.0)數(shù)據(jù)庫瀏覽器界面工具MySQL谷歌Photoshop5.76.02016注冊模塊未注冊用戶在用戶注冊界面uerRegister.Java,輸入新用戶信息,點擊注冊后,新用戶信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用addUser(user)方法,通過userDAOImp向數(shù)據(jù)庫用戶表插入用戶信息,由于用戶賬號是自動生成的,若成功則反饋注冊成功,并提示新用戶的用戶賬號;若失敗則回到登錄界面,并顯示登錄失敗。注冊界面如下所示。圖5-1注冊界面用戶注冊關(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;}登錄/注銷模塊用戶在首頁點擊登錄,進入用戶登錄界面uerLogin.jsp,輸入用戶賬號和密碼,點擊登錄,用戶賬號和密碼信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用userLogin(user)方法,通過userDAOImp向數(shù)據(jù)庫用戶表搜索該用戶賬號與密碼,將最終結(jié)果反饋到前端。若成功則回到首頁;用戶成功登錄,若失敗則回到登錄界面,并顯示登錄失敗。用戶點擊注銷,清空瀏覽器session值,然后返回登錄頁或者首頁。登錄界面如下所示。圖5-2登錄界面登錄界面關(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,"用戶不存在");}UserbyUsername=(User)resultList.get(0);Map<String,String>groupMap=newHashMap<>();groupMap.put("name",byUsername.getUserGroup());ListgroupList=userGroupService.select(groupMap,newHashMap<>()).getResultList();if(groupList.size()<1){returnerror(30000,"用戶組不存在");}UserGroupuserGroup=(UserGroup)groupList.get(0);//查詢用戶審核狀態(tài)if(!StringUtils.isEmpty(userGroup.getSourceTable())){Stringsql="selectexamine_statefrom"+userGroup.getSourceTable()+"WHEREuser_id="+byUsername.getUserId();Stringres=String.valueOf(service.runCountSql(sql).getSingleResult());if(res==null){returnerror(30000,"用戶不存在");}if(!res.equals("已通過")){returnerror(30000,"該用戶審核未通過");}}//查詢用戶狀態(tài)if(byUsername.getState()!=1){returnerror(30000,"用戶非可用狀態(tài),不能登錄");}Stringmd5password=service.encryption(password);if(byUsername.getPassword().equals(md5password)){//存儲Token到數(shù)據(jù)庫AccessTokenaccessToken=newAccessToken();accessToken.setToken(UUID.randomUUID().toString().replaceAll("-",""));accessToken.setUser_id(byUsername.getUserId());tokenService.save(accessToken);//返回用戶信息JSONObjectuser=JSONObject.parseObject(JSONObject.toJSONString(byUsername));user.put("token",accessToken.getToken());JSONObjectret=newJSONObject();ret.put("obj",user);returnsuccess(ret);}else{returnerror(30000,"賬號或密碼不正確");}}寵物知識模塊用戶在登錄狀態(tài)下瀏覽寵物知識時可將該寵物知識加入寵物信息,從session中取出該用戶的信息,點擊加入寵物知識后前臺發(fā)起請求,將對應(yīng)的寵物shuliang、id參數(shù)信息從前臺傳遞GoumaiController類里,匹配到add()方法,add()方法調(diào)用GoumaiServiceImpl類的add()方法。寵物知識界面如下所示。圖5-4寵物知識界面用戶管理模塊根據(jù)需求,需要對用戶進行添加、刪除或修改詳情信息。刪除或修改用戶時,系統(tǒng)根據(jù)用戶的狀態(tài)判定為可刪除狀態(tài)下,才會給出刪除和修改鏈接,點擊刪除鏈接按鈕時,請求到達(dá)后臺,還會先查詢用戶狀態(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ù)庫中插入記錄。用戶頁面設(shè)計效果如下圖所示。圖5-5用戶管理界面領(lǐng)養(yǎng)信息管理模塊領(lǐng)養(yǎng)信息功能需要考慮高并發(fā),防止出現(xiàn)領(lǐng)養(yǎng)重復(fù)信息、領(lǐng)養(yǎng)狀態(tài)顯示出錯等情況,特對領(lǐng)養(yǎng)這一共享數(shù)據(jù)增加鎖機制。在樂觀鎖、悲觀鎖以及線程鎖中,綜合考慮性能效率和錯誤的可接受性選擇了樂觀鎖機制。樂觀鎖的實現(xiàn)方式是使用版本標(biāo)識來確定讀到的數(shù)據(jù)與提交時的數(shù)據(jù)是否一致,提交后修改版本標(biāo)識,不一致時可以采取丟棄和再次嘗試的策略。在數(shù)據(jù)庫領(lǐng)養(yǎng)表(對應(yīng)領(lǐng)養(yǎng)信息實體)設(shè)計中增加了version字段,每次數(shù)據(jù)提交時(更改疫苗狀態(tài))會判斷version是否匹配,若不匹配停止本次提交,若匹配則提交成功并增加version的值。領(lǐng)養(yǎng)信息功能整體流程:用戶瀏覽領(lǐng)養(yǎng)信息時,同時會顯示領(lǐng)養(yǎng)的狀態(tài),系統(tǒng)會在其顯示詳細(xì)信息的頁面時便會判斷領(lǐng)養(yǎng)的狀態(tài),若寵物狀態(tài)為可領(lǐng)養(yǎng),則會顯示領(lǐng)養(yǎng)的鏈接按鈕。在用戶點擊領(lǐng)養(yǎng)按鈕時,會先通過攔截器判斷用戶是否登錄,若未登錄,會跳轉(zhuǎn)至登錄頁面,提示用戶先登錄,若為登錄用戶就會跳轉(zhuǎn)至填寫領(lǐng)養(yǎng)信息的頁面,填寫好領(lǐng)養(yǎng)信息之后,點擊提交按鈕,領(lǐng)養(yǎng)成功之后返回提示信息,告知用戶領(lǐng)養(yǎng)成功。領(lǐng)養(yǎng)信息流程圖如下圖所示。圖5-6領(lǐng)養(yǎng)信息流程圖領(lǐng)養(yǎng)信息界面如下圖所示。圖5-7領(lǐng)養(yǎng)信息管理界面領(lǐng)養(yǎng)記錄管理模塊根據(jù)需求,需要對領(lǐng)養(yǎng)記錄進行添加、刪除或修改詳情信息。刪除或修改訂單時,系統(tǒng)根據(jù)領(lǐng)養(yǎng)記錄的狀態(tài)判定為可刪除狀態(tài)下,才會給出刪除和修改鏈接,點擊刪除鏈接按鈕時,請求到達(dá)后臺,還會先查詢領(lǐng)養(yǎng)狀態(tài)再次做出判定能否刪除。點擊修改鏈接按鈕時,會跳轉(zhuǎn)到修改信息的頁面,重新填寫好數(shù)據(jù)后,數(shù)據(jù)提交到后臺會對數(shù)據(jù)庫中相應(yīng)的記錄做出修改。添加領(lǐng)養(yǎng)記錄時,會給出數(shù)據(jù)填寫的頁面,該頁面根據(jù)填寫好的領(lǐng)養(yǎng)同樣會事先發(fā)送Ajax請求查詢領(lǐng)養(yǎng)編號是否已存在,數(shù)據(jù)填寫好之后提交到后臺,會調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫中插入記錄。領(lǐng)養(yǎng)記錄頁面設(shè)計效果如下圖所示。圖5-8領(lǐng)養(yǎng)記錄界面圖領(lǐng)養(yǎng)記錄管理的關(guān)鍵代碼如下。@PostMapping("/add")@TransactionalpublicMap<String,Object>add(HttpServletRequestrequest)throwsIOException{service.insert(service.readBody(request.getReader()));returnsuccess(1);}@TransactionalpublicMap<String,Object>addMap(Map<String,Object>map){service.insert(map);returnsuccess(1);}publicMap<String,Object>readBody(BufferedReaderreader){BufferedReaderbr=null;StringBuildersb=newStringBuilder("");try{br=reader;Stringstr;while((str=br.readLine())!=null){sb.append(str);}br.close();Stringjson=sb.toString();returnJSONObject.parseObject(json,Map.class);}catch(IOExceptione){e.printStackTrace();}finally{if(null!=br){try{br.close();}catch(IOExceptione){e.printStackTrace();}}}returnnull;}publicvoidinsert(Map<String,Object>body){StringBuffersql=newStringBuffer("INSERTINTO");sql.append("`").append(table).append("`").append("(");for(Map.Entry<String,Object>entry:body.entrySet()){sql.append("`"+humpToLine(entry.getKey())+"`").append(",");}sql.deleteCharAt(sql.length()-1);sql.append(")VALUES(");for(Map.Entry<String,Object>entry:body.entrySet()){Objectvalue=entry.getValue();if(valueinstanceofString){sql.append("'").append(entry.getValue()).append("'").append(",");}else{sql.append(entry.getValue()).append(",");}}sql.deleteCharAt(sql.length()-1);sql.append(")");("[{}]-插入操作:{}",table,sql);Queryquery=runCountSql(sql.toString());query.executeUpdate();}系統(tǒng)測試測試概述軟件測試是軟件開發(fā)完成后必須經(jīng)過的一道程序,它在軟件開發(fā)過程中地位十分重要,需要由專業(yè)的測試工程師來對軟件進行各方面的測試,大到功能模塊測試,小到代碼的單元測試,這對測試工程師來說需要有足夠的耐心和專業(yè)的測試方案,軟件測試歸根結(jié)底就是對軟件的結(jié)構(gòu)和功能的綜合測評,需要做到結(jié)構(gòu)穩(wěn)定和功能正確,二者兼顧。軟件測試也叫尋找系統(tǒng)bug的過程,世界上沒有完美無缺、不存在bug的軟件,只能將軟件的bug降到最低最小,來追求極致。測試過程登錄測試登錄測試是系統(tǒng)最開始就要進行,測試用戶能否登錄,才能完成后續(xù)的功能操作。登錄測試用例表如下所示。表6-1登錄測試用例編號YL001程序版本1.00功能名稱使用者登錄測試編制人李鐵蛋功能描述根據(jù)用戶的登錄情況測試用例目的測試用戶登錄情況是否正確測試項測試數(shù)據(jù)測試結(jié)果預(yù)期結(jié)果用戶名為空請輸入用戶名請輸入用戶名密碼為空請輸入密碼請輸入密碼用戶密碼組合用戶名:klouse密碼klouses用戶與密碼不匹配用戶與密碼不匹配用戶密碼組合用戶名:klouse密碼klouse進入系統(tǒng)正確的用戶名和密碼登錄系統(tǒng)信息錄入測試管理員在發(fā)布信息頁面,通過按照預(yù)先格式發(fā)布信息,如果因為輸入時候缺少相關(guān)內(nèi)容,就不能發(fā)布成功,且有相應(yīng)錯誤提示信息錄入發(fā)布測試用例表如下所示。表6-1信息錄入發(fā)布測試用例編號YL002程序版本1.00功能名稱信息發(fā)布測試編制人李鐵蛋功能描述對使用者發(fā)布或者錄入信息進行測試,判斷其功能是否達(dá)到預(yù)期的要求用例目的對系統(tǒng)使用者錄入發(fā)布信息進行原型測試。測試項測試數(shù)據(jù)測試結(jié)果預(yù)期結(jié)果屬性1為空請輸入屬性1對應(yīng)的數(shù)據(jù)請輸入屬性1對應(yīng)的數(shù)據(jù)屬性2為空請輸入屬性2對應(yīng)的數(shù)據(jù)請輸入屬性2對應(yīng)的數(shù)據(jù)屬性3為空請輸入屬性3對應(yīng)的數(shù)據(jù)請輸入屬性3對應(yīng)的數(shù)據(jù)全部輸入數(shù)據(jù)均填入錄入發(fā)布成功錄入發(fā)布成功信息更新測試管理員在更新信息頁面,通過按照預(yù)先格式更新信息,如果因為輸入時候缺少相關(guān)內(nèi)容或者更新的數(shù)據(jù)不符合當(dāng)前規(guī)范的話,就不能更新成功,且有相應(yīng)錯誤提示信息更新測試用例表如下所示。表6-1信息更新測試用例編號YL003程序版本1.00功能名稱信息更新測試編制人李鐵蛋功能描述對使用者更新信息進行測試,判斷其功能是否達(dá)到預(yù)期的要求用例目的對系統(tǒng)使用者更新信息進行原型測試。測試項測試數(shù)據(jù)測試結(jié)果預(yù)期結(jié)果屬性1編號:321編號更新成功編號更新成功屬性2名稱:名稱1名稱更新成功名稱更新成功屬性3內(nèi)容:內(nèi)容1234內(nèi)容內(nèi)容更新成功內(nèi)容更新成功全部輸入數(shù)據(jù)均未更改更新成功更新成功信息刪除測試管理員在信息頁面,通過點擊數(shù)據(jù)刪除按鈕來刪除該條數(shù)據(jù),如果該數(shù)據(jù)和其他數(shù)據(jù)有關(guān)聯(lián),則提示是否確定刪除。信息刪除測試用例表如下所示。表6-1信息刪除測試用例編號YL004程序版本1.00功能名稱信息刪除測試編制人李鐵蛋功能描述對使用者刪除信息進行測試,判斷其功能是否達(dá)到預(yù)期的要求用例目的對系統(tǒng)使用者刪除信息進行原型測試。測試項測試數(shù)據(jù)測試結(jié)果預(yù)期結(jié)果數(shù)據(jù)1無任何關(guān)聯(lián)的數(shù)據(jù)1數(shù)據(jù)刪除成功數(shù)據(jù)刪除成功數(shù)據(jù)2和其他數(shù)據(jù)有關(guān)聯(lián)的數(shù)據(jù)2請確認(rèn)是否刪除請確認(rèn)是否刪除測試結(jié)果在經(jīng)過之前的所有的工作之后,通過對軟件的測試方法、測試原則還有典型的測試用例進行全面的、深入的介紹。經(jīng)過對系統(tǒng)的全面測試,系統(tǒng)目前所具有的所有功能均成功的實現(xiàn)并且通過了測試,整個系統(tǒng)實現(xiàn)了基于Java開發(fā)的期望。總結(jié)與展望總結(jié)流浪狗領(lǐng)養(yǎng)管理系統(tǒng)采用Springboot框架開發(fā),該系統(tǒng)非常完美的集優(yōu)點于一身,成熟、強大、易理解易使用,通過使用這個結(jié)構(gòu),降低了開發(fā)的難度。本系統(tǒng)實現(xiàn)了基于Springboot的流浪狗領(lǐng)養(yǎng)管理,將數(shù)據(jù)操作維護的過程轉(zhuǎn)化成電腦操作流程,具體實現(xiàn)了對系統(tǒng)人員管理、領(lǐng)養(yǎng)信息數(shù)據(jù)維護、用戶信息數(shù)據(jù)維護、回訪記錄數(shù)據(jù)維護、領(lǐng)養(yǎng)記錄管理數(shù)據(jù)維護,并提供查詢統(tǒng)計功能來對流浪狗領(lǐng)養(yǎng)管理系統(tǒng)的相關(guān)數(shù)據(jù)進行統(tǒng)計分析,讓使用者能更清晰的掌握運營情況,幫助使用者進行數(shù)據(jù)操作維護,簡化工作流程,提高工作效率和盈利。展望目前完成的流浪狗領(lǐng)養(yǎng)管理系統(tǒng),還有許多有待改進的地方。一個是功能上的改進,用戶理應(yīng)可以修改自己的相關(guān)信息,故應(yīng)增設(shè)
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 興安供熱合同范本
- 企業(yè)職聘用合同范本
- 生產(chǎn)加工制作合同范本
- 土地房屋租憑合同范本
- 裝修委托用工合同范本
- 裝飾公司合同范本模板
- 安裝燈飾的合同范本
- 新疆石河子職業(yè)技術(shù)學(xué)院《中國文學(xué)批評史研究型》2023-2024學(xué)年第一學(xué)期期末試卷
- 武漢輕工大學(xué)《慢性疾病運動康復(fù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 南通大學(xué)《制藥工程專業(yè)實訓(xùn)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年浙江省初中名校發(fā)展共同體中考語文一模試卷附參考答案
- 2025年食安食品考試題及答案
- 2025年租賃料場協(xié)議
- 2025年北森題庫測試題及答案
- 2025年必考保安證試題及答案
- 中國大唐集團有限公司陸上風(fēng)電工程標(biāo)桿造價指標(biāo)(2023年)
- 茶館里的政治:揭秘《茶館》背后的歷史
- 醫(yī)院保安服務(wù)方案投標(biāo)文件(技術(shù)方案)
- 危機公關(guān)服務(wù)合同范本
- 拆除臨時用電施工方案
- 小學(xué)數(shù)學(xué)教學(xué)中小組合作學(xué)習(xí)課件
評論
0/150
提交評論