版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
緒論研究的目的及意義隨著國(guó)內(nèi)經(jīng)濟(jì)的不斷發(fā)展,人民收入水平的提高以及對(duì)于情感需求的日益強(qiáng),寵物飼養(yǎng)成為了一種流行趨勢(shì)。寵物的增多不可避免地造成了流浪寵物的泛濫,它們大多來(lái)自被主人遺棄的動(dòng)物或這些動(dòng)物繁衍的后代。它們沒(méi)有管束,游走在人類(lèi)居住區(qū)的邊緣,給人們的生活帶來(lái)了不小的困擾。如今也存在由愛(ài)心人士組織的流浪動(dòng)物救助站收養(yǎng)一些流浪狗,但有時(shí)救助站的寵物過(guò)多,難以應(yīng)付以致很多寵物都只能被執(zhí)行“安樂(lè)死”。為了解決當(dāng)前的流浪寵物問(wèn)題,傳統(tǒng)低效的線(xiàn)下登記領(lǐng)養(yǎng)逐漸被取代,隨之而來(lái)的是使用終端設(shè)備便可瀏覽訪(fǎng)問(wèn)的流浪狗領(lǐng)養(yǎng)管理系統(tǒng)。通過(guò)設(shè)計(jì)基于springboot框架的流浪狗領(lǐng)養(yǎng)管理,效率比起傳統(tǒng)線(xiàn)下登記形式有了很大的提高。首先,管理員可對(duì)現(xiàn)有的流浪狗信息進(jìn)行直觀(guān)地管理,避免了傳統(tǒng)模式下信息缺失遺漏的情況;其次它為需要領(lǐng)養(yǎng)寵物的用戶(hù)提供了一個(gè)便利的領(lǐng)養(yǎng)平臺(tái)。流浪狗領(lǐng)養(yǎng)管理使用B/S架構(gòu),因?yàn)榭蛻?hù)端(計(jì)算機(jī))僅用作瀏覽器,所以維護(hù)人員只需要良好的服務(wù)器維護(hù)。無(wú)論客戶(hù)規(guī)模大小,都不會(huì)增加業(yè)務(wù)強(qiáng)度。使用B/S結(jié)構(gòu)將大大減少不必要的人力和物力,從而提高工作效率。國(guó)內(nèi)外研究現(xiàn)狀在前幾年國(guó)人的觀(guān)念中,國(guó)外的寵物飼養(yǎng)就主要是通過(guò)領(lǐng)養(yǎng)的方式了,國(guó)內(nèi)一直都是用購(gòu)買(mǎi)的方式進(jìn)行。實(shí)從寵物的飼養(yǎng)數(shù)量上來(lái)看:國(guó)內(nèi)飼養(yǎng)寵物的人數(shù)已經(jīng)比世界上任何一個(gè)國(guó)家都要多,要因素是我國(guó)的人口基數(shù)大,也正因如此,棄養(yǎng)的寵物更是數(shù)不勝數(shù)。大部分人看來(lái),寵物只是寵物,而寵物帶來(lái)的負(fù)面影響會(huì)導(dǎo)致棄養(yǎng),比如說(shuō)寵物生病帶來(lái)的費(fèi)用難以承擔(dān)就直接棄養(yǎng)。而寵物的領(lǐng)養(yǎng)政策的完善不是一蹴而就的,涉及到經(jīng)濟(jì)、政策、民生、不同地區(qū)對(duì)不同種類(lèi)的動(dòng)物的管理政策、接收程度。我國(guó)的寵物市場(chǎng)近幾年才發(fā)展起來(lái),很多方面并不完善,動(dòng)物收養(yǎng)所便是重要一環(huán)。寵物行業(yè)涉及的范圍較廣,國(guó)內(nèi)主要包括兩大產(chǎn)業(yè),一類(lèi)是寵物產(chǎn)品,一類(lèi)是寵物服務(wù)。其中,寵物產(chǎn)品包括寵物交易、寵物主糧、寵物零食、寵物清潔用品等;寵物服務(wù)則包括寵物醫(yī)療、寵物美容、寵物培訓(xùn)等。在沒(méi)有了解這些內(nèi)容的情況下,很多人還是一種沖動(dòng)的領(lǐng)養(yǎng)。而隨著國(guó)內(nèi)互聯(lián)網(wǎng)技術(shù)的發(fā)展和應(yīng)用成熟度越來(lái)越高,人們獲取資訊以及了解信息的途徑大部分都是通過(guò)網(wǎng)絡(luò)進(jìn)行。因此通過(guò)建立一個(gè)寵物領(lǐng)養(yǎng)系統(tǒng)能夠?qū)崿F(xiàn)包括寵物領(lǐng)養(yǎng).以及寵物信息、論壇、社交、在線(xiàn)服務(wù)、電子商、社區(qū)020、活動(dòng)等功能,為寵物主人提供360度全方位服務(wù),同時(shí)還可以為愛(ài)心創(chuàng)業(yè)者提供一個(gè)創(chuàng)業(yè)平臺(tái)。本文的組織結(jié)構(gòu)六個(gè)章節(jié)共同組成了本文研究及設(shè)計(jì)內(nèi)容,包括:第一章:緒論。本文章的開(kāi)頭部分,對(duì)本題目的研究的目的及意義和研究現(xiàn)狀等一些做文字性的描述。第二章:相關(guān)技術(shù)介紹。主要介紹Springboot框架、Java嵌入式腳本語(yǔ)言、B/S模式等。第三章:系統(tǒng)分析。包括系統(tǒng)總體需求描述、功能性角度分析系統(tǒng)需求、非功能性等各個(gè)方面分析系統(tǒng)是否可以實(shí)現(xiàn)。第四章:系統(tǒng)設(shè)計(jì)。本文章的重要部分,提供了系統(tǒng)架構(gòu)的詳細(xì)設(shè)計(jì)和一些主要功能模塊的設(shè)計(jì)說(shuō)明。第五章:系統(tǒng)實(shí)現(xiàn)。將本系統(tǒng)分為前提的開(kāi)發(fā)工具介紹和后期的功能代碼實(shí)現(xiàn)。第六章:系統(tǒng)測(cè)試。系統(tǒng)完成后,根據(jù)各個(gè)模塊的測(cè)試用例才對(duì)各個(gè)模塊進(jìn)行功能測(cè)試。相關(guān)技術(shù)介紹開(kāi)發(fā)技術(shù)說(shuō)明本系統(tǒng)前端部分基于MVVM模式進(jìn)行開(kāi)發(fā),采用B/S模式,后端部分基于Java的springboot框架進(jìn)行開(kāi)發(fā)。前端部分:前端框架采用了比較流行的漸進(jìn)式JavaScript框架Vue.js。使用Vue-Router和Vuex實(shí)現(xiàn)動(dòng)態(tài)路由和全局狀態(tài)管理,Ajax實(shí)現(xiàn)前后端通信,ElementUI組件庫(kù)使頁(yè)面快速成型,項(xiàng)目前端通過(guò)柵格布局實(shí)現(xiàn)響應(yīng)式,可適應(yīng)PC端、平板端、手機(jī)端等不同屏幕大小尺寸的完美布局展示。后端部分:采用springboot作為開(kāi)發(fā)框架,同時(shí)集成MyBatis、Redis等相關(guān)技術(shù)。B/S體系工作原理B/S架構(gòu)采取瀏覽器請(qǐng)求,服務(wù)器響應(yīng)的工作模式。用戶(hù)可以通過(guò)瀏覽器去訪(fǎng)問(wèn)Internet上由Web服務(wù)器產(chǎn)生的文本、數(shù)據(jù)、圖片、動(dòng)畫(huà)、視頻點(diǎn)播和聲音等信息;而每一個(gè)Web服務(wù)器又可以通過(guò)各種方式與數(shù)據(jù)庫(kù)服務(wù)器連接,大量的數(shù)據(jù)實(shí)際存放在數(shù)據(jù)庫(kù)服務(wù)器中;從Web服務(wù)器上下載程序到本地來(lái)執(zhí)行,在下載過(guò)程中若遇到與數(shù)據(jù)庫(kù)有關(guān)的指令,由Web服務(wù)器交給數(shù)據(jù)庫(kù)服務(wù)器來(lái)解釋執(zhí)行,并返回給Web服務(wù)器,Web服務(wù)器又返回給用戶(hù)。在這種結(jié)構(gòu)中,將許許多多的網(wǎng)連接到一塊,形成一個(gè)巨大的網(wǎng),即全球網(wǎng)。而各個(gè)企業(yè)可以在此結(jié)構(gòu)的基礎(chǔ)上建立自己的Internet。在B/S模式中,用戶(hù)是通過(guò)瀏覽器針對(duì)許多分布于網(wǎng)絡(luò)上的服務(wù)器進(jìn)行請(qǐng)求訪(fǎng)問(wèn)的,瀏覽器的請(qǐng)求通過(guò)服務(wù)器進(jìn)行處理,并將處理結(jié)果以及相應(yīng)的信息返回給瀏覽器,其他的數(shù)據(jù)加工、請(qǐng)求全部都是由WebServer完成的。通過(guò)該框架結(jié)構(gòu)以及植入于操作系統(tǒng)內(nèi)部的瀏覽器,該結(jié)構(gòu)已經(jīng)成為了當(dāng)今軟件應(yīng)用的主流結(jié)構(gòu)模式。springboot框架介紹Spring框架是Java平臺(tái)上的一種開(kāi)源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對(duì)編程模型沒(méi)有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來(lái)讓它作為EJB(EnterpriseJavaBeans)模型的補(bǔ)充,甚至是替補(bǔ)。Spring框架為開(kāi)發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)的核心特性,并通過(guò)依賴(lài)注入實(shí)現(xiàn)控制反轉(zhuǎn)來(lái)實(shí)現(xiàn)管理對(duì)象生命周期容器化,利用面向切面編程進(jìn)行聲明式的事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪(fǎng)問(wèn),提供大量?jī)?yōu)秀的Web框架方便開(kāi)發(fā)等等。Spring框架具有控制反轉(zhuǎn)(IOC)特性,IOC旨在方便項(xiàng)目維護(hù)和測(cè)試,它提供了一種通過(guò)Java的反射機(jī)制對(duì)Java對(duì)象進(jìn)行統(tǒng)一的配置和管理的方法。Spring框架利用容器管理對(duì)象的生命周期,容器可以通過(guò)掃描XML文件或類(lèi)上特定Java注解來(lái)配置對(duì)象,開(kāi)發(fā)者可以通過(guò)依賴(lài)查找或依賴(lài)注入來(lái)獲得對(duì)象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時(shí)運(yùn)行時(shí)可配置;AOP框架主要針對(duì)模塊之間的交叉關(guān)注點(diǎn)進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無(wú)法與AspectJ框架相比,但通過(guò)與AspectJ的集成,也可以滿(mǎn)足基本需求。Spring框架下的事務(wù)管理、遠(yuǎn)程訪(fǎng)問(wèn)等功能均可以通過(guò)使用SpringAOP技術(shù)實(shí)現(xiàn)。Spring的事務(wù)管理框架為Java平臺(tái)帶來(lái)了一種抽象機(jī)制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點(diǎn)一起工作,并且?guī)缀蹩梢栽贘ava平臺(tái)的任何環(huán)境中工作。Spring集成多種事務(wù)模板,系統(tǒng)可以通過(guò)事務(wù)模板、XML或Java注解進(jìn)行事務(wù)配置,并且事務(wù)框架集成了消息傳遞和緩存等功能。Spring的數(shù)據(jù)訪(fǎng)問(wèn)框架解決了開(kāi)發(fā)人員在應(yīng)用程序中使用數(shù)據(jù)庫(kù)時(shí)遇到的常見(jiàn)困難。它不僅對(duì)Java:JDBC、iBATS/MyBATIs、Hibernate、Java數(shù)據(jù)對(duì)象(JDO)、ApacheOJB和ApacheCayne等所有流行的數(shù)據(jù)訪(fǎng)問(wèn)框架中提供支持,同時(shí)還可以與Spring的事務(wù)管理一起使用,為數(shù)據(jù)訪(fǎng)問(wèn)提供了靈活的抽象。Spring框架最初是沒(méi)有打算構(gòu)建一個(gè)自己的WebMVC框架,其開(kāi)發(fā)人員在開(kāi)發(fā)過(guò)程中認(rèn)為現(xiàn)有的StrutsWeb框架的呈現(xiàn)層和請(qǐng)求處理層之間以及請(qǐng)求處理層和模型之間的分離不夠,于是創(chuàng)建了SpringMVC。MySQL簡(jiǎn)介MySQL是一個(gè)開(kāi)放的、快速的、多線(xiàn)程的SQL關(guān)系型數(shù)據(jù)庫(kù)服務(wù)器。由于其體積小、免費(fèi)、運(yùn)行速度快以及可以通過(guò)相關(guān)免費(fèi)的軟件來(lái)對(duì)MySql數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù)結(jié)構(gòu)信息等等優(yōu)點(diǎn)。受廣大中等、小型企業(yè)所喜愛(ài)并占據(jù)了很大地位。本系統(tǒng)在數(shù)據(jù)庫(kù)方面選用MySQL,并通過(guò)Nacivat來(lái)進(jìn)行MySql數(shù)據(jù)庫(kù)的管理。在Mysql的安裝過(guò)程中,最需要注意的就是數(shù)據(jù)庫(kù)的編碼問(wèn)題,所以在安裝數(shù)據(jù)庫(kù)時(shí)需要設(shè)置數(shù)據(jù)庫(kù)的編碼為Utf-8,與前臺(tái)頁(yè)面和服務(wù)器的編碼相一致。JavaScript運(yùn)行模式JavaScript是一種屬于網(wǎng)絡(luò)的高級(jí)腳本語(yǔ)言,已經(jīng)被廣泛用于Web應(yīng)用開(kāi)發(fā),常用來(lái)為網(wǎng)頁(yè)添加各式各樣的動(dòng)態(tài)功能,為用戶(hù)提供更流暢美觀(guān)的瀏覽效果。通常JavaScript腳本是通過(guò)嵌入在HTML中來(lái)實(shí)現(xiàn)自身的功能的。1.1是一種解釋性腳本語(yǔ)言(代碼不進(jìn)行預(yù)編譯)。1.2主要用來(lái)向HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)頁(yè)面添加交互行為。1.3可以直接嵌入HTML頁(yè)面,但寫(xiě)成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。1.4跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行(如Windows、Linux、Mac、Android、iOS等)。1.5JavaScript腳本語(yǔ)言同其他語(yǔ)言一樣,有它自身的基本數(shù)據(jù)類(lèi)型,表達(dá)式和算術(shù)運(yùn)算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類(lèi)型和兩種特殊數(shù)據(jù)類(lèi)型用來(lái)處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
系統(tǒng)分析可行性分析法律可行性分析開(kāi)發(fā)軟件有沒(méi)有觸犯法律,這涉及到軟件或者系統(tǒng)能不能發(fā)布的問(wèn)題。如果觸犯了法律,就必將會(huì)受到法律的制裁。常見(jiàn)法律問(wèn)題就是軟件抄襲問(wèn)題,若是抄襲別人軟件,將會(huì)受到嚴(yán)厲懲罰。技術(shù)可行性分析軟件產(chǎn)業(yè)經(jīng)過(guò)多年的發(fā)展,現(xiàn)在已經(jīng)達(dá)到了很大的規(guī)模,從事軟件開(kāi)發(fā)的專(zhuān)業(yè)人員不計(jì)其數(shù),軟件產(chǎn)業(yè)的重要性已經(jīng)上升到了影響和推動(dòng)國(guó)民經(jīng)濟(jì)發(fā)展的核心地位。本系統(tǒng)基于的架構(gòu),目前技術(shù)已經(jīng)非常的成熟,是不存在技術(shù)上面難以實(shí)現(xiàn)的麻煩。經(jīng)濟(jì)可行性分析開(kāi)發(fā)軟件所需的時(shí)間、人力和物力成本,開(kāi)發(fā)完成后的收益如何,從投資回報(bào)的角度軟件所需功能在現(xiàn)有經(jīng)濟(jì)條件能不能實(shí)現(xiàn)等進(jìn)行深入的考慮,都符合實(shí)際的要求。所以流浪狗領(lǐng)養(yǎng)管理系統(tǒng)具有經(jīng)濟(jì)可行性和實(shí)用性,可以節(jié)約管理成本功能需求分析流浪狗領(lǐng)養(yǎng)管理系統(tǒng)主要是為了更加地完善流浪狗領(lǐng)養(yǎng)情況,對(duì)用戶(hù)的信息、領(lǐng)養(yǎng)信息、領(lǐng)養(yǎng)記錄、回訪(fǎng)記錄、分類(lèi)管理等提供了方便的機(jī)制。本系統(tǒng)有多類(lèi)使用者,分別是管理員和普通用戶(hù)。以下是從這兩種用戶(hù)的角度分別介紹本系統(tǒng)所要實(shí)現(xiàn)的功能。用戶(hù):注冊(cè):首先檢查用戶(hù)名和郵箱是否存在,如不存在即可進(jìn)行注冊(cè),并將用戶(hù)輸入的密碼進(jìn)行MD5加密,注冊(cè)成功后提示注冊(cè)成功,并將用戶(hù)信息保存到數(shù)據(jù)庫(kù)中。登錄:使用流浪狗領(lǐng)養(yǎng)管理系統(tǒng)前是需要用戶(hù)登錄個(gè)人賬號(hào)。寵物知識(shí):用戶(hù)進(jìn)行寵物知識(shí)的閱覽,查看管理員發(fā)布的寵物知識(shí)信息。交流中心:用戶(hù)在交流論壇這一菜單下對(duì)用戶(hù)在線(xiàn)交流的查看、同時(shí)也可以發(fā)布、評(píng)論。領(lǐng)養(yǎng)信息:用戶(hù)對(duì)寵物信息的查詢(xún),包括標(biāo)題名稱(chēng)、寵物狀態(tài)、寵物名稱(chēng)、寵物性別。管理員:用戶(hù)管理:對(duì)用戶(hù)進(jìn)行管理,用戶(hù)的注冊(cè),包括用戶(hù)昵稱(chēng)、用戶(hù)名、用戶(hù)的寵物信息(寵物狀態(tài)、寵物名稱(chēng)、寵物性別等)用戶(hù)的賬號(hào)信息:領(lǐng)養(yǎng)記錄管理:對(duì)領(lǐng)養(yǎng)記錄進(jìn)行維護(hù)管理。寵物信息管理:對(duì)寵物信息進(jìn)行維護(hù)管理?;卦L(fǎng)記錄管理:對(duì)寵物的回訪(fǎng)記錄信息進(jìn)行維護(hù)管理。非功能需求分析系統(tǒng)非功能需求有非常多,比如性能需求、可承載最大用戶(hù)數(shù)、穩(wěn)定性、易用性需求等。本系統(tǒng)分析時(shí)考慮到易用性需求,因?yàn)橄到y(tǒng)是給人使用的,所以必須充分從用戶(hù)的角度出發(fā),考慮用戶(hù)體驗(yàn),使系統(tǒng)易理解易上手易操作。用例分析普通用戶(hù)主要使用系統(tǒng)的寵物熱點(diǎn)和流浪狗領(lǐng)養(yǎng)管理系統(tǒng),下圖所示為普通用戶(hù)的用例圖3-1普通用戶(hù)用例圖2.管理員主要負(fù)責(zé)用戶(hù)管理、領(lǐng)養(yǎng)記錄、寵物信息、回訪(fǎng)記錄、分類(lèi)管理,下圖所示描述管理員的用例圖。圖3-2管理員用例圖業(yè)務(wù)流程分析系統(tǒng)業(yè)務(wù)流程圖如下所示。圖3-3系統(tǒng)業(yè)務(wù)流程圖業(yè)務(wù)流程圖(TFD)通過(guò)一些特定的符號(hào)描述業(yè)務(wù)的處理過(guò)程,它重點(diǎn)強(qiáng)調(diào)業(yè)務(wù)過(guò)程中每一項(xiàng)處理活動(dòng)和具體業(yè)務(wù)部門(mén)的關(guān)系,選擇部分模塊進(jìn)行具體描述。重點(diǎn)對(duì)本系統(tǒng)整體業(yè)務(wù)中最為主要的寵物狗領(lǐng)養(yǎng)信息以及領(lǐng)養(yǎng)記錄進(jìn)行描述,用戶(hù)進(jìn)入流浪狗領(lǐng)養(yǎng)管理系統(tǒng)后進(jìn)行各種模塊信息的瀏覽,選擇想要領(lǐng)養(yǎng)信息、領(lǐng)養(yǎng)記錄,另外,管理人員進(jìn)入后端管理,以執(zhí)行該領(lǐng)養(yǎng)信息控制模塊的相關(guān)管理方法,并在解決后向客戶(hù)提供反饋機(jī)制。數(shù)據(jù)流程分析如下為系統(tǒng)的頂層數(shù)據(jù)流圖,外部實(shí)體有用戶(hù)和管理員,分別對(duì)系統(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ù)處理、外部實(shí)體的具體交互。本系統(tǒng)就是管理員和普通用戶(hù)在用戶(hù)管理、領(lǐng)養(yǎng)信息、領(lǐng)養(yǎng)記錄、回訪(fǎng)記錄等模塊上的數(shù)據(jù)交互。系統(tǒng)設(shè)計(jì)系統(tǒng)架構(gòu)設(shè)計(jì)本系統(tǒng)架構(gòu)設(shè)計(jì)主要分為可以3層,主要有Web層,業(yè)務(wù)層,Model層。其中web層還包括View層和Controller層,Model層包括元數(shù)據(jù)擴(kuò)展層和數(shù)據(jù)訪(fǎng)問(wèn)層。圖4-1系統(tǒng)架構(gòu)圖系統(tǒng)功能結(jié)構(gòu)為了將系統(tǒng)從“做什么”落實(shí)到“怎么做”,基于系統(tǒng)設(shè)計(jì)原則,對(duì)系統(tǒng)功能進(jìn)行更適合編碼實(shí)現(xiàn)的功能劃分。根據(jù)上圖的系統(tǒng)架構(gòu)設(shè)計(jì),整理出規(guī)范的系統(tǒng)功能結(jié)構(gòu)圖,為系統(tǒng)的實(shí)現(xiàn)編碼做好準(zhǔn)備。如下圖所示為系統(tǒng)功能結(jié)構(gòu)圖。圖4-2系統(tǒng)功能結(jié)構(gòu)圖功能模塊設(shè)計(jì)用戶(hù)管理針對(duì)所有用戶(hù)和管理員。未注冊(cè)用戶(hù)點(diǎn)擊注冊(cè),進(jìn)入注冊(cè)頁(yè)面填寫(xiě)新用戶(hù)信息,得到自定義生成賬號(hào)后,注冊(cè)完成。未注冊(cè)用戶(hù)注冊(cè)的活動(dòng)圖如下圖所示。圖4-3未注冊(cè)用戶(hù)注冊(cè)活動(dòng)圖用戶(hù)可進(jìn)行登錄使用更多功能,首先進(jìn)入用戶(hù)登錄界面,輸入用戶(hù)賬號(hào)和密碼,后臺(tái)對(duì)賬號(hào)和密碼信息進(jìn)行核對(duì)驗(yàn)證,驗(yàn)證成功則頁(yè)面直接顯示登錄用戶(hù)昵稱(chēng)代表登錄成功,否則返回用戶(hù)登錄界面。用戶(hù)登錄活動(dòng)圖如下圖。圖4-4用戶(hù)登錄活動(dòng)圖用戶(hù)登錄后,進(jìn)入功能頁(yè)面,可對(duì)自己的信息進(jìn)行管理,包括個(gè)人信息,預(yù)約掛號(hào)、病歷記錄、在線(xiàn)咨詢(xún)。用戶(hù)使用功能活動(dòng)圖如下圖所示。圖4-5用戶(hù)使用功能活動(dòng)圖用戶(hù)功能界面可對(duì)自己的密碼進(jìn)行修改。進(jìn)入修改密碼界面后核對(duì)當(dāng)前密碼,核對(duì)成功后填寫(xiě)新密碼。修改密碼活動(dòng)圖如下圖所示。圖4-6修改密碼活動(dòng)圖數(shù)據(jù)庫(kù)設(shè)計(jì)流浪狗領(lǐng)養(yǎng)管理系統(tǒng)采用的數(shù)據(jù)庫(kù)是MySQL,該部分將根據(jù)系統(tǒng)需求和設(shè)計(jì),設(shè)計(jì)合理的數(shù)據(jù)庫(kù)。本系統(tǒng)考慮到之后系統(tǒng)的擴(kuò)展集群,數(shù)據(jù)庫(kù)將不使用外鍵。此外,不用外鍵時(shí)數(shù)據(jù)管理也較為簡(jiǎn)單,操作更加方便,性能更高。E-R圖E-R圖,更加直觀(guān)的告訴開(kāi)發(fā)人員系統(tǒng)的各個(gè)數(shù)據(jù)的屬性,各個(gè)數(shù)據(jù)之間的聯(lián)系,各個(gè)數(shù)據(jù)的類(lèi)型。能通過(guò)該模型更直觀(guān)地了解數(shù)據(jù)庫(kù)的設(shè)計(jì),并根據(jù)對(duì)其逐漸改善。本系統(tǒng)圖設(shè)計(jì),如下圖所示。圖4-7系統(tǒng)E-R圖表結(jié)構(gòu)設(shè)計(jì)本系統(tǒng)根據(jù)第三范式的思想設(shè)計(jì)數(shù)據(jù)庫(kù),減少最大程度的冗余,總共建立有多個(gè)表,用戶(hù)注冊(cè)表、管理員表、寵物信息表、評(píng)論表、領(lǐng)養(yǎng)記錄表、回訪(fǎng)記錄表、等。return_visit_record表:名稱(chēng)類(lèi)型長(zhǎng)度不是null主鍵注釋return_visit_record_idint11是是回訪(fǎng)記錄IDpet_namevarchar64否否寵物名稱(chēng)pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡adopterint11否否領(lǐng)養(yǎng)人return_visit_photosvarchar255否否回訪(fǎng)照片return_visit_descriptiontext0否否回訪(fǎng)描述recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間ordinary_users表:名稱(chēng)類(lèi)型長(zhǎng)度不是null主鍵注釋ordinary_users_idint11是是普通用戶(hù)IDfull_namevarchar64否否姓名gendervarchar64否否性別examine_statevarchar16是否審核狀態(tài)recommendint11是否智能推薦user_idint11是否用戶(hù)IDcreate_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間classification_management表名稱(chēng)類(lèi)型長(zhǎng)度不是null主鍵注釋classification_management_idint11是是分類(lèi)管理IDpet_speciesvarchar64否否寵物種類(lèi)recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間adoption_record表:名稱(chēng)類(lèi)型長(zhǎng)度不是null主鍵注釋adoption_record_idint11是是領(lǐng)養(yǎng)記錄IDpet_namevarchar64否否寵物名稱(chēng)pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡adopterint11否否領(lǐng)養(yǎng)人contact_numbervarchar16否否聯(lián)系電話(huà)adoption_statusvarchar64否否領(lǐng)養(yǎng)狀態(tài)return_visit_statusvarchar64否否回訪(fǎng)狀態(tài)reasons_for_adoptiontext0否否領(lǐng)養(yǎng)原由reply_messagetext0否否回復(fù)信息recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間adoption_information表:名稱(chēng)類(lèi)型長(zhǎng)度不是null主鍵注釋adoption_information_idint11是是領(lǐng)養(yǎng)信息IDtitle_namevarchar64否否標(biāo)題名稱(chēng)release_timedate0否否發(fā)布時(shí)間pet_statusvarchar64否否寵物狀態(tài)pet_namevarchar64否否寵物名稱(chēng)pet_speciesvarchar64否否寵物種類(lèi)pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡pet_picturesvarchar255否否寵物圖片detailed_informationtext0否否詳細(xì)信息remark_informationtext0否否備注信息hitsint11是否點(diǎn)擊數(shù)recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間Comment表:名稱(chēng)類(lèi)型長(zhǎng)度不是null主鍵注釋comment_idint11是是評(píng)論IDuser_idint11是否評(píng)論人IDreply_to_idint11是否回復(fù)評(píng)論IDcontentlongtext0否否內(nèi)容nicknamevarchar255否否昵稱(chēng)avatarvarchar255否否頭像地址create_timetimestamp0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間source_tablevarchar255否否來(lái)源表source_fieldvarchar255否否來(lái)源字段source_idint10是否來(lái)源ID系統(tǒng)實(shí)現(xiàn)開(kāi)發(fā)工具系統(tǒng)中應(yīng)用的開(kāi)發(fā)工具總結(jié)如下表所示。表5-1開(kāi)發(fā)工具名稱(chēng)工具版本操作系統(tǒng)IDE(IntegratedDevelopmentEnvironment)WindowsEclipse7/8/102017服務(wù)器Tomcat9.10.7JDK(JavaDevelopmentKit)JDKJavaSE8.0(1.8.0)數(shù)據(jù)庫(kù)瀏覽器界面工具M(jìn)ySQL谷歌Photoshop5.76.02016注冊(cè)模塊未注冊(cè)用戶(hù)在用戶(hù)注冊(cè)界面uerRegister.Java,輸入新用戶(hù)信息,點(diǎn)擊注冊(cè)后,新用戶(hù)信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用addUser(user)方法,通過(guò)userDAOImp向數(shù)據(jù)庫(kù)用戶(hù)表插入用戶(hù)信息,由于用戶(hù)賬號(hào)是自動(dòng)生成的,若成功則反饋?zhàn)?cè)成功,并提示新用戶(hù)的用戶(hù)賬號(hào);若失敗則回到登錄界面,并顯示登錄失敗。注冊(cè)界面如下所示。圖5-1注冊(cè)界面用戶(hù)注冊(cè)關(guān)鍵代碼如下所示。/***注冊(cè)*@paramuser*@return*/@PostMapping("register")publicMap<String,Object>signUp(@RequestBodyUseruser){//查詢(xún)用戶(hù)Map<String,String>query=newHashMap<>();query.put("username",user.getUsername());Listlist=service.select(query,newHashMap<>()).getResultList();if(list.size()>0){returnerror(30000,"用戶(hù)已存在");}user.setUserId(null);user.setPassword(service.encryption(user.getPassword()));service.save(user);returnsuccess(1);}/***用戶(hù)ID:[0,8388607]用戶(hù)獲取其他與用戶(hù)相關(guān)的數(shù)據(jù)*/@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="user_id")privateIntegeruserId;/***賬戶(hù)狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷(xiāo))*/@Basic@Column(name="state")privateIntegerstate;/***所在用戶(hù)組:[0,32767]決定用戶(hù)身份和權(quán)限*/@Basic@Column(name="user_group")privateStringuserGroup;/***上次登錄時(shí)間:*/@Basic@Column(name="login_time")privateTimestamploginTime;/***手機(jī)號(hào)碼:[0,11]用戶(hù)的手機(jī)號(hào)碼,用于找回密碼時(shí)或登錄時(shí)*/@Basic@Column(name="phone")privateStringphone;/***手機(jī)認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)*/@Basic@Column(name="phone_state")privateIntegerphoneState;/***用戶(hù)名:[0,16]用戶(hù)登錄時(shí)所用的賬戶(hù)名稱(chēng)*/@Basic@Column(name="username")privateStringusername;/***昵稱(chēng):[0,16]*/@Basic@Column(name="nickname")privateStringnickname;/***密碼:[0,32]用戶(hù)登錄所需的密碼,由6-16位數(shù)字或英文組成*/@Basic@Column(name="password")privateStringpassword;/***郵箱:[0,64]用戶(hù)的郵箱,用于找回密碼時(shí)或登錄時(shí)*/@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)建時(shí)間:*/@Basic@Column(name="create_time")@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss")privateTimestampcreateTime;@Basic@TransientprivateStringcode;}登錄/注銷(xiāo)模塊用戶(hù)在首頁(yè)點(diǎn)擊登錄,進(jìn)入用戶(hù)登錄界面uerLogin.jsp,輸入用戶(hù)賬號(hào)和密碼,點(diǎn)擊登錄,用戶(hù)賬號(hào)和密碼信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用userLogin(user)方法,通過(guò)userDAOImp向數(shù)據(jù)庫(kù)用戶(hù)表搜索該用戶(hù)賬號(hào)與密碼,將最終結(jié)果反饋到前端。若成功則回到首頁(yè);用戶(hù)成功登錄,若失敗則回到登錄界面,并顯示登錄失敗。用戶(hù)點(diǎn)擊注銷(xiāo),清空瀏覽器session值,然后返回登錄頁(yè)或者首頁(yè)。登錄界面如下所示。圖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,"賬號(hào)或密碼不能為空");}if(resultList==null||password==null){returnerror(30000,"賬號(hào)或密碼不能為空");}//判斷是否有這個(gè)用戶(hù)if(resultList.size()<=0){returnerror(30000,"用戶(hù)不存在");}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,"用戶(hù)組不存在");}UserGroupuserGroup=(UserGroup)groupList.get(0);//查詢(xún)用戶(hù)審核狀態(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,"用戶(hù)不存在");}if(!res.equals("已通過(guò)")){returnerror(30000,"該用戶(hù)審核未通過(guò)");}}//查詢(xún)用戶(hù)狀態(tài)if(byUsername.getState()!=1){returnerror(30000,"用戶(hù)非可用狀態(tài),不能登錄");}Stringmd5password=service.encryption(password);if(byUsername.getPassword().equals(md5password)){//存儲(chǔ)Token到數(shù)據(jù)庫(kù)AccessTokenaccessToken=newAccessToken();accessToken.setToken(UUID.randomUUID().toString().replaceAll("-",""));accessToken.setUser_id(byUsername.getUserId());tokenService.save(accessToken);//返回用戶(hù)信息JSONObjectuser=JSONObject.parseObject(JSONObject.toJSONString(byUsername));user.put("token",accessToken.getToken());JSONObjectret=newJSONObject();ret.put("obj",user);returnsuccess(ret);}else{returnerror(30000,"賬號(hào)或密碼不正確");}}寵物知識(shí)模塊用戶(hù)在登錄狀態(tài)下瀏覽寵物知識(shí)時(shí)可將該寵物知識(shí)加入寵物信息,從session中取出該用戶(hù)的信息,點(diǎn)擊加入寵物知識(shí)后前臺(tái)發(fā)起請(qǐng)求,將對(duì)應(yīng)的寵物shuliang、id參數(shù)信息從前臺(tái)傳遞GoumaiController類(lèi)里,匹配到add()方法,add()方法調(diào)用GoumaiServiceImpl類(lèi)的add()方法。寵物知識(shí)界面如下所示。圖5-4寵物知識(shí)界面用戶(hù)管理模塊根據(jù)需求,需要對(duì)用戶(hù)進(jìn)行添加、刪除或修改詳情信息。刪除或修改用戶(hù)時(shí),系統(tǒng)根據(jù)用戶(hù)的狀態(tài)判定為可刪除狀態(tài)下,才會(huì)給出刪除和修改鏈接,點(diǎn)擊刪除鏈接按鈕時(shí),請(qǐng)求到達(dá)后臺(tái),還會(huì)先查詢(xún)用戶(hù)狀態(tài)再次做出判定能否刪除。點(diǎn)擊修改鏈接按鈕時(shí),會(huì)跳轉(zhuǎn)到修改信息的頁(yè)面,重新填寫(xiě)好數(shù)據(jù)后,數(shù)據(jù)提交到后臺(tái)會(huì)對(duì)數(shù)據(jù)庫(kù)中相應(yīng)的記錄做出修改。添加用戶(hù)時(shí),會(huì)給出數(shù)據(jù)填寫(xiě)的頁(yè)面,該頁(yè)面根據(jù)填寫(xiě)好的用戶(hù)編號(hào)同樣會(huì)事先發(fā)送Ajax請(qǐng)求查詢(xún)編號(hào)是否已存在,數(shù)據(jù)填寫(xiě)好之后提交到后臺(tái),會(huì)調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫(kù)中插入記錄。用戶(hù)頁(yè)面設(shè)計(jì)效果如下圖所示。圖5-5用戶(hù)管理界面領(lǐng)養(yǎng)信息管理模塊領(lǐng)養(yǎng)信息功能需要考慮高并發(fā),防止出現(xiàn)領(lǐng)養(yǎng)重復(fù)信息、領(lǐng)養(yǎng)狀態(tài)顯示出錯(cuò)等情況,特對(duì)領(lǐng)養(yǎng)這一共享數(shù)據(jù)增加鎖機(jī)制。在樂(lè)觀(guān)鎖、悲觀(guān)鎖以及線(xiàn)程鎖中,綜合考慮性能效率和錯(cuò)誤的可接受性選擇了樂(lè)觀(guān)鎖機(jī)制。樂(lè)觀(guān)鎖的實(shí)現(xiàn)方式是使用版本標(biāo)識(shí)來(lái)確定讀到的數(shù)據(jù)與提交時(shí)的數(shù)據(jù)是否一致,提交后修改版本標(biāo)識(shí),不一致時(shí)可以采取丟棄和再次嘗試的策略。在數(shù)據(jù)庫(kù)領(lǐng)養(yǎng)表(對(duì)應(yīng)領(lǐng)養(yǎng)信息實(shí)體)設(shè)計(jì)中增加了version字段,每次數(shù)據(jù)提交時(shí)(更改疫苗狀態(tài))會(huì)判斷version是否匹配,若不匹配停止本次提交,若匹配則提交成功并增加version的值。領(lǐng)養(yǎng)信息功能整體流程:用戶(hù)瀏覽領(lǐng)養(yǎng)信息時(shí),同時(shí)會(huì)顯示領(lǐng)養(yǎng)的狀態(tài),系統(tǒng)會(huì)在其顯示詳細(xì)信息的頁(yè)面時(shí)便會(huì)判斷領(lǐng)養(yǎng)的狀態(tài),若寵物狀態(tài)為可領(lǐng)養(yǎng),則會(huì)顯示領(lǐng)養(yǎng)的鏈接按鈕。在用戶(hù)點(diǎn)擊領(lǐng)養(yǎng)按鈕時(shí),會(huì)先通過(guò)攔截器判斷用戶(hù)是否登錄,若未登錄,會(huì)跳轉(zhuǎn)至登錄頁(yè)面,提示用戶(hù)先登錄,若為登錄用戶(hù)就會(huì)跳轉(zhuǎn)至填寫(xiě)領(lǐng)養(yǎng)信息的頁(yè)面,填寫(xiě)好領(lǐng)養(yǎng)信息之后,點(diǎn)擊提交按鈕,領(lǐng)養(yǎng)成功之后返回提示信息,告知用戶(hù)領(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ù)需求,需要對(duì)領(lǐng)養(yǎng)記錄進(jìn)行添加、刪除或修改詳情信息。刪除或修改訂單時(shí),系統(tǒng)根據(jù)領(lǐng)養(yǎng)記錄的狀態(tài)判定為可刪除狀態(tài)下,才會(huì)給出刪除和修改鏈接,點(diǎn)擊刪除鏈接按鈕時(shí),請(qǐng)求到達(dá)后臺(tái),還會(huì)先查詢(xún)領(lǐng)養(yǎng)狀態(tài)再次做出判定能否刪除。點(diǎn)擊修改鏈接按鈕時(shí),會(huì)跳轉(zhuǎn)到修改信息的頁(yè)面,重新填寫(xiě)好數(shù)據(jù)后,數(shù)據(jù)提交到后臺(tái)會(huì)對(duì)數(shù)據(jù)庫(kù)中相應(yīng)的記錄做出修改。添加領(lǐng)養(yǎng)記錄時(shí),會(huì)給出數(shù)據(jù)填寫(xiě)的頁(yè)面,該頁(yè)面根據(jù)填寫(xiě)好的領(lǐng)養(yǎng)同樣會(huì)事先發(fā)送Ajax請(qǐng)求查詢(xún)領(lǐng)養(yǎng)編號(hào)是否已存在,數(shù)據(jù)填寫(xiě)好之后提交到后臺(tái),會(huì)調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫(kù)中插入記錄。領(lǐng)養(yǎng)記錄頁(yè)面設(shè)計(jì)效果如下圖所示。圖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)測(cè)試測(cè)試概述軟件測(cè)試是軟件開(kāi)發(fā)完成后必須經(jīng)過(guò)的一道程序,它在軟件開(kāi)發(fā)過(guò)程中地位十分重要,需要由專(zhuān)業(yè)的測(cè)試工程師來(lái)對(duì)軟件進(jìn)行各方面的測(cè)試,大到功能模塊測(cè)試,小到代碼的單元測(cè)試,這對(duì)測(cè)試工程師來(lái)說(shuō)需要有足夠的耐心和專(zhuān)業(yè)的測(cè)試方案,軟件測(cè)試歸根結(jié)底就是對(duì)軟件的結(jié)構(gòu)和功能的綜合測(cè)評(píng),需要做到結(jié)構(gòu)穩(wěn)定和功能正確,二者兼顧。軟件測(cè)試也叫尋找系統(tǒng)bug的過(guò)程,世界上沒(méi)有完美無(wú)缺、不存在bug的軟件,只能將軟件的bug降到最低最小,來(lái)追求極致。測(cè)試過(guò)程登錄測(cè)試登錄測(cè)試是系統(tǒng)最開(kāi)始就要進(jìn)行,測(cè)試用戶(hù)能否登錄,才能完成后續(xù)的功能操作。登錄測(cè)試用例表如下所示。表6-1登錄測(cè)試用例編號(hào)YL001程序版本1.00功能名稱(chēng)使用者登錄測(cè)試編制人李鐵蛋功能描述根據(jù)用戶(hù)的登錄情況測(cè)試用例目的測(cè)試用戶(hù)登錄情況是否正確測(cè)試項(xiàng)測(cè)試數(shù)據(jù)測(cè)試結(jié)果預(yù)期結(jié)果用戶(hù)名為空請(qǐng)輸入用戶(hù)名請(qǐng)輸入用戶(hù)名密碼為空請(qǐng)輸入密碼請(qǐng)輸入密碼用戶(hù)密碼組合用戶(hù)名:klouse密碼klouses用戶(hù)與密碼不匹配用戶(hù)與密碼不匹配用戶(hù)密碼組合用戶(hù)名:klouse密碼klouse進(jìn)入系統(tǒng)正確的用戶(hù)名和密碼登錄系統(tǒng)信息錄入測(cè)試管理員在發(fā)布信息頁(yè)面,通過(guò)按照預(yù)先格式發(fā)布信息,如果因?yàn)檩斎霑r(shí)候缺少相關(guān)內(nèi)容,就不能發(fā)布成功,且有相應(yīng)錯(cuò)誤提示信息錄入發(fā)布測(cè)試用例表如下所示。表6-1信息錄入發(fā)布測(cè)試用例編號(hào)YL002程序版本1.00功能名稱(chēng)信息發(fā)布測(cè)試編制人李鐵蛋功能描述對(duì)使用者發(fā)布或者錄入信息進(jìn)行測(cè)試,判斷其功能是否達(dá)到預(yù)期的要求用例目的對(duì)系統(tǒng)使用者錄入發(fā)布信息進(jìn)行原型測(cè)試。測(cè)試項(xiàng)測(cè)試數(shù)據(jù)測(cè)試結(jié)果預(yù)期結(jié)果屬性1為空請(qǐng)輸入屬性1對(duì)應(yīng)的數(shù)據(jù)請(qǐng)輸入屬性1對(duì)應(yīng)的數(shù)據(jù)屬性2為空請(qǐng)輸入屬性2對(duì)應(yīng)的數(shù)據(jù)請(qǐng)輸入屬性2對(duì)應(yīng)的數(shù)據(jù)屬性3為空請(qǐng)輸入屬性3對(duì)應(yīng)的數(shù)據(jù)請(qǐng)輸入屬性3對(duì)應(yīng)的數(shù)據(jù)全部輸入數(shù)據(jù)均填入錄入發(fā)布成功錄入發(fā)布成功信息更新測(cè)試管理員在更新信息頁(yè)面,通過(guò)按照預(yù)先格式更新信息,如果因?yàn)檩斎霑r(shí)候缺少相關(guān)內(nèi)容或者更新的數(shù)據(jù)不符合當(dāng)前規(guī)范的話(huà),就不能更新成功,且有相應(yīng)錯(cuò)誤提示信息更新測(cè)試用例表如下所示。表6-1信息更新測(cè)試用例編號(hào)YL003程序版本1.00功能名稱(chēng)信息更新測(cè)試編制人李鐵蛋功能描述對(duì)使用者更新信息進(jìn)行測(cè)試,判斷其功能是否達(dá)到預(yù)期的要求用例目的對(duì)系統(tǒng)使用者更新信息進(jìn)行原型測(cè)試。測(cè)試項(xiàng)測(cè)試數(shù)據(jù)測(cè)試結(jié)果預(yù)期結(jié)果屬性1編號(hào):321編號(hào)更新成功編號(hào)更新成功屬性2名稱(chēng):名稱(chēng)1名稱(chēng)更新成功名稱(chēng)更新成功屬性3內(nèi)容:內(nèi)容1234內(nèi)容內(nèi)容更新成功內(nèi)容更新成功全部輸入數(shù)據(jù)均未更改更新成功更新成功信息刪除測(cè)試管理員在信息頁(yè)面,通過(guò)點(diǎn)擊數(shù)據(jù)刪除按鈕來(lái)刪除該條數(shù)據(jù),如果該數(shù)據(jù)和其他數(shù)據(jù)有關(guān)聯(lián),則提示是否確定刪除。信息刪除測(cè)試用例表如下所示。表6-1信息刪除測(cè)試用例編號(hào)YL004程序版本1.00功能名稱(chēng)信息刪除測(cè)試編制人李鐵蛋功能描述對(duì)使用者刪除信息進(jìn)行測(cè)試,判斷其功能是否達(dá)到預(yù)期的要求用例目的對(duì)系統(tǒng)使用者刪除信息進(jìn)行原型測(cè)試。測(cè)試項(xiàng)測(cè)試數(shù)據(jù)測(cè)試結(jié)果預(yù)期結(jié)果數(shù)據(jù)1無(wú)任何關(guān)聯(lián)的數(shù)據(jù)1數(shù)據(jù)刪除成功數(shù)據(jù)刪除成功數(shù)據(jù)2和其他數(shù)據(jù)有關(guān)聯(lián)的數(shù)據(jù)2請(qǐng)確認(rèn)是否刪除請(qǐng)確認(rèn)是否刪除測(cè)試結(jié)果在經(jīng)過(guò)之前的所有的工作之后,通過(guò)對(duì)軟件的測(cè)試方法、測(cè)試原則還有典型的測(cè)試用例進(jìn)行全面的、深入的介紹。經(jīng)過(guò)對(duì)系統(tǒng)的全面測(cè)試,系統(tǒng)目前所具有的所有功能均成功的實(shí)現(xiàn)并且通過(guò)了測(cè)試,整個(gè)系統(tǒng)實(shí)現(xiàn)了基于Java開(kāi)發(fā)的期望。總結(jié)與展望總結(jié)流浪狗領(lǐng)養(yǎng)管理系統(tǒng)采用Springboot框架開(kāi)發(fā),該系統(tǒng)非常完美的集優(yōu)點(diǎn)于一身,成熟、強(qiáng)大、易理解易使用,通過(guò)使用這個(gè)結(jié)構(gòu),降低了開(kāi)發(fā)的難度。本系統(tǒng)實(shí)現(xiàn)了基于Springboot的流浪狗領(lǐng)養(yǎng)管理,將數(shù)據(jù)操作維護(hù)的過(guò)程轉(zhuǎn)化成電腦操作流程,具體實(shí)現(xiàn)了對(duì)系統(tǒng)人員管理、領(lǐng)養(yǎng)信息數(shù)據(jù)維護(hù)、用戶(hù)信息數(shù)據(jù)維護(hù)、回訪(fǎng)記錄數(shù)據(jù)維護(hù)、領(lǐng)養(yǎng)記錄管理數(shù)據(jù)維護(hù),并提供查詢(xún)統(tǒng)計(jì)功能來(lái)對(duì)流浪狗領(lǐng)養(yǎng)管理系統(tǒng)的相關(guān)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,讓使用者能更清晰的掌握運(yùn)營(yíng)情況,幫助使用者進(jìn)行數(shù)據(jù)操作維護(hù),簡(jiǎn)化工作流程,提高工作效率和盈利。展望目前完成的流浪狗領(lǐng)養(yǎng)管理系統(tǒng),還有許多有待改進(jìn)的地方。一個(gè)是功能上的改進(jìn),用戶(hù)理應(yīng)可以修改自己的相關(guān)信息,故應(yīng)增設(shè)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 現(xiàn)代物流信息系統(tǒng)建設(shè)中的標(biāo)準(zhǔn)化問(wèn)題
- 掛繩高空作業(yè)施工方案
- 拆除臨時(shí)用電施工方案
- 生態(tài)文明教育在校園的實(shí)踐與推廣
- 現(xiàn)代企業(yè)綜合管理能力提升及領(lǐng)導(dǎo)力培訓(xùn)方案研究報(bào)告
- 國(guó)慶節(jié)營(yíng)銷(xiāo)活動(dòng)方案模板
- 2023三年級(jí)語(yǔ)文上冊(cè) 第一單元 習(xí)作:猜猜他是誰(shuí)說(shuō)課稿 新人教版
- Unit 2 AnimaIs Lesson 1 Enjoy the story(說(shuō)課稿)-2024-2025學(xué)年北師大版(三起)英語(yǔ)五年級(jí)上冊(cè)
- 2024秋八年級(jí)物理上冊(cè) 第1章 機(jī)械運(yùn)動(dòng) 第2節(jié) 運(yùn)動(dòng)的描述說(shuō)課稿2(新版)新人教版
- 2025仿石漆施工合同
- 數(shù)學(xué)-河南省三門(mén)峽市2024-2025學(xué)年高二上學(xué)期1月期末調(diào)研考試試題和答案
- 二零二五版電力設(shè)施維修保養(yǎng)合同協(xié)議3篇
- 運(yùn)動(dòng)技能學(xué)習(xí)與控制課件第一章運(yùn)動(dòng)技能學(xué)習(xí)與控制概述
- 固體廢棄物檢查記錄
- 工程設(shè)計(jì)費(fèi)取費(fèi)標(biāo)準(zhǔn)
- 2023年遼寧鐵道職業(yè)技術(shù)學(xué)院高職單招(數(shù)學(xué))試題庫(kù)含答案解析
- CAPP教學(xué)講解課件
- 自然環(huán)境的服務(wù)功能課件 高中地理人教版(2019)選擇性必修3
- 小耳畸形課件
- 精美唯美淡雅個(gè)人求職簡(jiǎn)歷模板 (7)
- 環(huán)保鐵1215物質(zhì)安全資料表MSDS
評(píng)論
0/150
提交評(píng)論