畢業設計(論文)-srpingboot流浪狗領養管理設計_第1頁
畢業設計(論文)-srpingboot流浪狗領養管理設計_第2頁
畢業設計(論文)-srpingboot流浪狗領養管理設計_第3頁
畢業設計(論文)-srpingboot流浪狗領養管理設計_第4頁
畢業設計(論文)-srpingboot流浪狗領養管理設計_第5頁
已閱讀5頁,還剩36頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

緒論研究的目的及意義隨著國內經濟的不斷發展,人民收入水平的提高以及對于情感需求的日益強,寵物飼養成為了一種流行趨勢。寵物的增多不可避免地造成了流浪寵物的泛濫,它們大多來自被主人遺棄的動物或這些動物繁衍的后代。它們沒有管束,游走在人類居住區的邊緣,給人們的生活帶來了不小的困擾。如今也存在由愛心人士組織的流浪動物救助站收養一些流浪狗,但有時救助站的寵物過多,難以應付以致很多寵物都只能被執行“安樂死”。為了解決當前的流浪寵物問題,傳統低效的線下登記領養逐漸被取代,隨之而來的是使用終端設備便可瀏覽訪問的流浪狗領養管理系統。通過設計基于springboot框架的流浪狗領養管理,效率比起傳統線下登記形式有了很大的提高。首先,管理員可對現有的流浪狗信息進行直觀地管理,避免了傳統模式下信息缺失遺漏的情況;其次它為需要領養寵物的用戶提供了一個便利的領養平臺。流浪狗領養管理使用B/S架構,因為客戶端(計算機)僅用作瀏覽器,所以維護人員只需要良好的服務器維護。無論客戶規模大小,都不會增加業務強度。使用B/S結構將大大減少不必要的人力和物力,從而提高工作效率。國內外研究現狀在前幾年國人的觀念中,國外的寵物飼養就主要是通過領養的方式了,國內一直都是用購買的方式進行。實從寵物的飼養數量上來看:國內飼養寵物的人數已經比世界上任何一個國家都要多,要因素是我國的人口基數大,也正因如此,棄養的寵物更是數不勝數。大部分人看來,寵物只是寵物,而寵物帶來的負面影響會導致棄養,比如說寵物生病帶來的費用難以承擔就直接棄養。而寵物的領養政策的完善不是一蹴而就的,涉及到經濟、政策、民生、不同地區對不同種類的動物的管理政策、接收程度。我國的寵物市場近幾年才發展起來,很多方面并不完善,動物收養所便是重要一環。寵物行業涉及的范圍較廣,國內主要包括兩大產業,一類是寵物產品,一類是寵物服務。其中,寵物產品包括寵物交易、寵物主糧、寵物零食、寵物清潔用品等;寵物服務則包括寵物醫療、寵物美容、寵物培訓等。在沒有了解這些內容的情況下,很多人還是一種沖動的領養。而隨著國內互聯網技術的發展和應用成熟度越來越高,人們獲取資訊以及了解信息的途徑大部分都是通過網絡進行。因此通過建立一個寵物領養系統能夠實現包括寵物領養.以及寵物信息、論壇、社交、在線服務、電子商、社區020、活動等功能,為寵物主人提供360度全方位服務,同時還可以為愛心創業者提供一個創業平臺。本文的組織結構六個章節共同組成了本文研究及設計內容,包括:第一章:緒論。本文章的開頭部分,對本題目的研究的目的及意義和研究現狀等一些做文字性的描述。第二章:相關技術介紹。主要介紹Springboot框架、Java嵌入式腳本語言、B/S模式等。第三章:系統分析。包括系統總體需求描述、功能性角度分析系統需求、非功能性等各個方面分析系統是否可以實現。第四章:系統設計。本文章的重要部分,提供了系統架構的詳細設計和一些主要功能模塊的設計說明。第五章:系統實現。將本系統分為前提的開發工具介紹和后期的功能代碼實現。第六章:系統測試。系統完成后,根據各個模塊的測試用例才對各個模塊進行功能測試。相關技術介紹開發技術說明本系統前端部分基于MVVM模式進行開發,采用B/S模式,后端部分基于Java的springboot框架進行開發。前端部分:前端框架采用了比較流行的漸進式JavaScript框架Vue.js。使用Vue-Router和Vuex實現動態路由和全局狀態管理,Ajax實現前后端通信,ElementUI組件庫使頁面快速成型,項目前端通過柵格布局實現響應式,可適應PC端、平板端、手機端等不同屏幕大小尺寸的完美布局展示。后端部分:采用springboot作為開發框架,同時集成MyBatis、Redis等相關技術。B/S體系工作原理B/S架構采取瀏覽器請求,服務器響應的工作模式。用戶可以通過瀏覽器去訪問Internet上由Web服務器產生的文本、數據、圖片、動畫、視頻點播和聲音等信息;而每一個Web服務器又可以通過各種方式與數據庫服務器連接,大量的數據實際存放在數據庫服務器中;從Web服務器上下載程序到本地來執行,在下載過程中若遇到與數據庫有關的指令,由Web服務器交給數據庫服務器來解釋執行,并返回給Web服務器,Web服務器又返回給用戶。在這種結構中,將許許多多的網連接到一塊,形成一個巨大的網,即全球網。而各個企業可以在此結構的基礎上建立自己的Internet。在B/S模式中,用戶是通過瀏覽器針對許多分布于網絡上的服務器進行請求訪問的,瀏覽器的請求通過服務器進行處理,并將處理結果以及相應的信息返回給瀏覽器,其他的數據加工、請求全部都是由WebServer完成的。通過該框架結構以及植入于操作系統內部的瀏覽器,該結構已經成為了當今軟件應用的主流結構模式。springboot框架介紹Spring框架是Java平臺上的一種開源應用框架,提供具有控制反轉特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補充,甚至是替補。Spring框架為開發提供了一系列的解決方案,比如利用控制反轉的核心特性,并通過依賴注入實現控制反轉來實現管理對象生命周期容器化,利用面向切面編程進行聲明式的事務管理,整合多種持久化技術管理數據訪問,提供大量優秀的Web框架方便開發等等。Spring框架具有控制反轉(IOC)特性,IOC旨在方便項目維護和測試,它提供了一種通過Java的反射機制對Java對象進行統一的配置和管理的方法。Spring框架利用容器管理對象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對象,開發者可以通過依賴查找或依賴注入來獲得對象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時運行時可配置;AOP框架主要針對模塊之間的交叉關注點進行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務管理、遠程訪問等功能均可以通過使用SpringAOP技術實現。Spring的事務管理框架為Java平臺帶來了一種抽象機制,使本地和全局事務以及嵌套事務能夠與保存點一起工作,并且幾乎可以在Java平臺的任何環境中工作。Spring集成多種事務模板,系統可以通過事務模板、XML或Java注解進行事務配置,并且事務框架集成了消息傳遞和緩存等功能。Spring的數據訪問框架解決了開發人員在應用程序中使用數據庫時遇到的常見困難。它不僅對Java:JDBC、iBATS/MyBATIs、Hibernate、Java數據對象(JDO)、ApacheOJB和ApacheCayne等所有流行的數據訪問框架中提供支持,同時還可以與Spring的事務管理一起使用,為數據訪問提供了靈活的抽象。Spring框架最初是沒有打算構建一個自己的WebMVC框架,其開發人員在開發過程中認為現有的StrutsWeb框架的呈現層和請求處理層之間以及請求處理層和模型之間的分離不夠,于是創建了SpringMVC。MySQL簡介MySQL是一個開放的、快速的、多線程的SQL關系型數據庫服務器。由于其體積小、免費、運行速度快以及可以通過相關免費的軟件來對MySql數據庫中的相關數據結構信息等等優點。受廣大中等、小型企業所喜愛并占據了很大地位。本系統在數據庫方面選用MySQL,并通過Nacivat來進行MySql數據庫的管理。在Mysql的安裝過程中,最需要注意的就是數據庫的編碼問題,所以在安裝數據庫時需要設置數據庫的編碼為Utf-8,與前臺頁面和服務器的編碼相一致。JavaScript運行模式JavaScript是一種屬于網絡的高級腳本語言,已經被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的。1.1是一種解釋性腳本語言(代碼不進行預編譯)。1.2主要用來向HTML(標準通用標記語言下的一個應用)頁面添加交互行為。1.3可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結構和行為的分離。1.4跨平臺特性,在絕大多數瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。1.5JavaScript腳本語言同其他語言一樣,有它自身的基本數據類型,表達式和算術運算符及程序的基本程序框架。JavaScript提供了四種基本的數據類型和兩種特殊數據類型用來處理數據和文字。而變量提供存放信息的地方,表達式則可以完成較復雜的信息處理。

系統分析可行性分析法律可行性分析開發軟件有沒有觸犯法律,這涉及到軟件或者系統能不能發布的問題。如果觸犯了法律,就必將會受到法律的制裁。常見法律問題就是軟件抄襲問題,若是抄襲別人軟件,將會受到嚴厲懲罰。技術可行性分析軟件產業經過多年的發展,現在已經達到了很大的規模,從事軟件開發的專業人員不計其數,軟件產業的重要性已經上升到了影響和推動國民經濟發展的核心地位。本系統基于的架構,目前技術已經非常的成熟,是不存在技術上面難以實現的麻煩。經濟可行性分析開發軟件所需的時間、人力和物力成本,開發完成后的收益如何,從投資回報的角度軟件所需功能在現有經濟條件能不能實現等進行深入的考慮,都符合實際的要求。所以流浪狗領養管理系統具有經濟可行性和實用性,可以節約管理成本功能需求分析流浪狗領養管理系統主要是為了更加地完善流浪狗領養情況,對用戶的信息、領養信息、領養記錄、回訪記錄、分類管理等提供了方便的機制。本系統有多類使用者,分別是管理員和普通用戶。以下是從這兩種用戶的角度分別介紹本系統所要實現的功能。用戶:注冊:首先檢查用戶名和郵箱是否存在,如不存在即可進行注冊,并將用戶輸入的密碼進行MD5加密,注冊成功后提示注冊成功,并將用戶信息保存到數據庫中。登錄:使用流浪狗領養管理系統前是需要用戶登錄個人賬號。寵物知識:用戶進行寵物知識的閱覽,查看管理員發布的寵物知識信息。交流中心:用戶在交流論壇這一菜單下對用戶在線交流的查看、同時也可以發布、評論。領養信息:用戶對寵物信息的查詢,包括標題名稱、寵物狀態、寵物名稱、寵物性別。管理員:用戶管理:對用戶進行管理,用戶的注冊,包括用戶昵稱、用戶名、用戶的寵物信息(寵物狀態、寵物名稱、寵物性別等)用戶的賬號信息:領養記錄管理:對領養記錄進行維護管理。寵物信息管理:對寵物信息進行維護管理。回訪記錄管理:對寵物的回訪記錄信息進行維護管理。非功能需求分析系統非功能需求有非常多,比如性能需求、可承載最大用戶數、穩定性、易用性需求等。本系統分析時考慮到易用性需求,因為系統是給人使用的,所以必須充分從用戶的角度出發,考慮用戶體驗,使系統易理解易上手易操作。用例分析普通用戶主要使用系統的寵物熱點和流浪狗領養管理系統,下圖所示為普通用戶的用例圖3-1普通用戶用例圖2.管理員主要負責用戶管理、領養記錄、寵物信息、回訪記錄、分類管理,下圖所示描述管理員的用例圖。圖3-2管理員用例圖業務流程分析系統業務流程圖如下所示。圖3-3系統業務流程圖業務流程圖(TFD)通過一些特定的符號描述業務的處理過程,它重點強調業務過程中每一項處理活動和具體業務部門的關系,選擇部分模塊進行具體描述。重點對本系統整體業務中最為主要的寵物狗領養信息以及領養記錄進行描述,用戶進入流浪狗領養管理系統后進行各種模塊信息的瀏覽,選擇想要領養信息、領養記錄,另外,管理人員進入后端管理,以執行該領養信息控制模塊的相關管理方法,并在解決后向客戶提供反饋機制。數據流程分析如下為系統的頂層數據流圖,外部實體有用戶和管理員,分別對系統輸入數據,從而得到要輸出的數據。圖3-4系統頂層數據流圖如下圖所示為系統底層數據流圖。圖3-5系統底層數據流圖流浪狗領養管理系統底層數據流圖主要描述系統底層模塊的數據流、數據載體、數據處理、外部實體的具體交互。本系統就是管理員和普通用戶在用戶管理、領養信息、領養記錄、回訪記錄等模塊上的數據交互。系統設計系統架構設計本系統架構設計主要分為可以3層,主要有Web層,業務層,Model層。其中web層還包括View層和Controller層,Model層包括元數據擴展層和數據訪問層。圖4-1系統架構圖系統功能結構為了將系統從“做什么”落實到“怎么做”,基于系統設計原則,對系統功能進行更適合編碼實現的功能劃分。根據上圖的系統架構設計,整理出規范的系統功能結構圖,為系統的實現編碼做好準備。如下圖所示為系統功能結構圖。圖4-2系統功能結構圖功能模塊設計用戶管理針對所有用戶和管理員。未注冊用戶點擊注冊,進入注冊頁面填寫新用戶信息,得到自定義生成賬號后,注冊完成。未注冊用戶注冊的活動圖如下圖所示。圖4-3未注冊用戶注冊活動圖用戶可進行登錄使用更多功能,首先進入用戶登錄界面,輸入用戶賬號和密碼,后臺對賬號和密碼信息進行核對驗證,驗證成功則頁面直接顯示登錄用戶昵稱代表登錄成功,否則返回用戶登錄界面。用戶登錄活動圖如下圖。圖4-4用戶登錄活動圖用戶登錄后,進入功能頁面,可對自己的信息進行管理,包括個人信息,預約掛號、病歷記錄、在線咨詢。用戶使用功能活動圖如下圖所示。圖4-5用戶使用功能活動圖用戶功能界面可對自己的密碼進行修改。進入修改密碼界面后核對當前密碼,核對成功后填寫新密碼。修改密碼活動圖如下圖所示。圖4-6修改密碼活動圖數據庫設計流浪狗領養管理系統采用的數據庫是MySQL,該部分將根據系統需求和設計,設計合理的數據庫。本系統考慮到之后系統的擴展集群,數據庫將不使用外鍵。此外,不用外鍵時數據管理也較為簡單,操作更加方便,性能更高。E-R圖E-R圖,更加直觀的告訴開發人員系統的各個數據的屬性,各個數據之間的聯系,各個數據的類型。能通過該模型更直觀地了解數據庫的設計,并根據對其逐漸改善。本系統圖設計,如下圖所示。圖4-7系統E-R圖表結構設計本系統根據第三范式的思想設計數據庫,減少最大程度的冗余,總共建立有多個表,用戶注冊表、管理員表、寵物信息表、評論表、領養記錄表、回訪記錄表、等。return_visit_record表:名稱類型長度不是null主鍵注釋return_visit_record_idint11是是回訪記錄IDpet_namevarchar64否否寵物名稱pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡adopterint11否否領養人return_visit_photosvarchar255否否回訪照片return_visit_descriptiontext0否否回訪描述recommendint11是否智能推薦create_timedatetime0是否創建時間update_timetimestamp0是否更新時間ordinary_users表:名稱類型長度不是null主鍵注釋ordinary_users_idint11是是普通用戶IDfull_namevarchar64否否姓名gendervarchar64否否性別examine_statevarchar16是否審核狀態recommendint11是否智能推薦user_idint11是否用戶IDcreate_timedatetime0是否創建時間update_timetimestamp0是否更新時間classification_management表名稱類型長度不是null主鍵注釋classification_management_idint11是是分類管理IDpet_speciesvarchar64否否寵物種類recommendint11是否智能推薦create_timedatetime0是否創建時間update_timetimestamp0是否更新時間adoption_record表:名稱類型長度不是null主鍵注釋adoption_record_idint11是是領養記錄IDpet_namevarchar64否否寵物名稱pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡adopterint11否否領養人contact_numbervarchar16否否聯系電話adoption_statusvarchar64否否領養狀態return_visit_statusvarchar64否否回訪狀態reasons_for_adoptiontext0否否領養原由reply_messagetext0否否回復信息recommendint11是否智能推薦create_timedatetime0是否創建時間update_timetimestamp0是否更新時間adoption_information表:名稱類型長度不是null主鍵注釋adoption_information_idint11是是領養信息IDtitle_namevarchar64否否標題名稱release_timedate0否否發布時間pet_statusvarchar64否否寵物狀態pet_namevarchar64否否寵物名稱pet_speciesvarchar64否否寵物種類pet_sexvarchar64否否寵物性別pet_agevarchar64否否寵物年齡pet_picturesvarchar255否否寵物圖片detailed_informationtext0否否詳細信息remark_informationtext0否否備注信息hitsint11是否點擊數recommendint11是否智能推薦create_timedatetime0是否創建時間update_timetimestamp0是否更新時間Comment表:名稱類型長度不是null主鍵注釋comment_idint11是是評論IDuser_idint11是否評論人IDreply_to_idint11是否回復評論IDcontentlongtext0否否內容nicknamevarchar255否否昵稱avatarvarchar255否否頭像地址create_timetimestamp0是否創建時間update_timetimestamp0是否更新時間source_tablevarchar255否否來源表source_fieldvarchar255否否來源字段source_idint10是否來源ID系統實現開發工具系統中應用的開發工具總結如下表所示。表5-1開發工具名稱工具版本操作系統IDE(IntegratedDevelopmentEnvironment)WindowsEclipse7/8/102017服務器Tomcat9.10.7JDK(JavaDevelopmentKit)JDKJavaSE8.0(1.8.0)數據庫瀏覽器界面工具MySQL谷歌Photoshop5.76.02016注冊模塊未注冊用戶在用戶注冊界面uerRegister.Java,輸入新用戶信息,點擊注冊后,新用戶信息由界面傳入控制層userAction,調用addUser(user)方法,通過userDAOImp向數據庫用戶表插入用戶信息,由于用戶賬號是自動生成的,若成功則反饋注冊成功,并提示新用戶的用戶賬號;若失敗則回到登錄界面,并顯示登錄失敗。注冊界面如下所示。圖5-1注冊界面用戶注冊關鍵代碼如下所示。/***注冊*@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]用戶獲取其他與用戶相關的數據*/@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="user_id")privateIntegeruserId;/***賬戶狀態:[0,10](1可用|2異常|3已凍結|4已注銷)*/@Basic@Column(name="state")privateIntegerstate;/***所在用戶組:[0,32767]決定用戶身份和權限*/@Basic@Column(name="user_group")privateStringuserGroup;/***上次登錄時間:*/@Basic@Column(name="login_time")privateTimestamploginTime;/***手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時*/@Basic@Column(name="phone")privateStringphone;/***手機認證:[0,1](0未認證|1審核中|2已認證)*/@Basic@Column(name="phone_state")privateIntegerphoneState;/***用戶名:[0,16]用戶登錄時所用的賬戶名稱*/@Basic@Column(name="username")privateStringusername;/***昵稱:[0,16]*/@Basic@Column(name="nickname")privateStringnickname;/***密碼:[0,32]用戶登錄所需的密碼,由6-16位數字或英文組成*/@Basic@Column(name="password")privateStringpassword;/***郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時*/@Basic@Column(name="email")privateStringemail;/***郵箱認證:[0,1](0未認證|1審核中|2已認證)*/@Basic@Column(name="email_state")privateIntegeremailState;/***頭像地址:[0,255]*/@Basic@Column(name="avatar")privateStringavatar;/***創建時間:*/@Basic@Column(name="create_time")@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss")privateTimestampcreateTime;@Basic@TransientprivateStringcode;}登錄/注銷模塊用戶在首頁點擊登錄,進入用戶登錄界面uerLogin.jsp,輸入用戶賬號和密碼,點擊登錄,用戶賬號和密碼信息由界面傳入控制層userAction,調用userLogin(user)方法,通過userDAOImp向數據庫用戶表搜索該用戶賬號與密碼,將最終結果反饋到前端。若成功則回到首頁;用戶成功登錄,若失敗則回到登錄界面,并顯示登錄失敗。用戶點擊注銷,清空瀏覽器session值,然后返回登錄頁或者首頁。登錄界面如下所示。圖5-2登錄界面登錄界面關鍵代碼如下所示。/***登錄*@paramdata*@paramhttpServletRequest*@return*/@PostMapping("login")publicMap<String,Object>login(@RequestBodyMap<String,String>data,HttpServletRequesthttpServletRequest){("[執行登錄接口]");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);//查詢用戶審核狀態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,"該用戶審核未通過");}}//查詢用戶狀態if(byUsername.getState()!=1){returnerror(30000,"用戶非可用狀態,不能登錄");}Stringmd5password=service.encryption(password);if(byUsername.getPassword().equals(md5password)){//存儲Token到數據庫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,"賬號或密碼不正確");}}寵物知識模塊用戶在登錄狀態下瀏覽寵物知識時可將該寵物知識加入寵物信息,從session中取出該用戶的信息,點擊加入寵物知識后前臺發起請求,將對應的寵物shuliang、id參數信息從前臺傳遞GoumaiController類里,匹配到add()方法,add()方法調用GoumaiServiceImpl類的add()方法。寵物知識界面如下所示。圖5-4寵物知識界面用戶管理模塊根據需求,需要對用戶進行添加、刪除或修改詳情信息。刪除或修改用戶時,系統根據用戶的狀態判定為可刪除狀態下,才會給出刪除和修改鏈接,點擊刪除鏈接按鈕時,請求到達后臺,還會先查詢用戶狀態再次做出判定能否刪除。點擊修改鏈接按鈕時,會跳轉到修改信息的頁面,重新填寫好數據后,數據提交到后臺會對數據庫中相應的記錄做出修改。添加用戶時,會給出數據填寫的頁面,該頁面根據填寫好的用戶編號同樣會事先發送Ajax請求查詢編號是否已存在,數據填寫好之后提交到后臺,會調用相關服務在數據庫中插入記錄。用戶頁面設計效果如下圖所示。圖5-5用戶管理界面領養信息管理模塊領養信息功能需要考慮高并發,防止出現領養重復信息、領養狀態顯示出錯等情況,特對領養這一共享數據增加鎖機制。在樂觀鎖、悲觀鎖以及線程鎖中,綜合考慮性能效率和錯誤的可接受性選擇了樂觀鎖機制。樂觀鎖的實現方式是使用版本標識來確定讀到的數據與提交時的數據是否一致,提交后修改版本標識,不一致時可以采取丟棄和再次嘗試的策略。在數據庫領養表(對應領養信息實體)設計中增加了version字段,每次數據提交時(更改疫苗狀態)會判斷version是否匹配,若不匹配停止本次提交,若匹配則提交成功并增加version的值。領養信息功能整體流程:用戶瀏覽領養信息時,同時會顯示領養的狀態,系統會在其顯示詳細信息的頁面時便會判斷領養的狀態,若寵物狀態為可領養,則會顯示領養的鏈接按鈕。在用戶點擊領養按鈕時,會先通過攔截器判斷用戶是否登錄,若未登錄,會跳轉至登錄頁面,提示用戶先登錄,若為登錄用戶就會跳轉至填寫領養信息的頁面,填寫好領養信息之后,點擊提交按鈕,領養成功之后返回提示信息,告知用戶領養成功。領養信息流程圖如下圖所示。圖5-6領養信息流程圖領養信息界面如下圖所示。圖5-7領養信息管理界面領養記錄管理模塊根據需求,需要對領養記錄進行添加、刪除或修改詳情信息。刪除或修改訂單時,系統根據領養記錄的狀態判定為可刪除狀態下,才會給出刪除和修改鏈接,點擊刪除鏈接按鈕時,請求到達后臺,還會先查詢領養狀態再次做出判定能否刪除。點擊修改鏈接按鈕時,會跳轉到修改信息的頁面,重新填寫好數據后,數據提交到后臺會對數據庫中相應的記錄做出修改。添加領養記錄時,會給出數據填寫的頁面,該頁面根據填寫好的領養同樣會事先發送Ajax請求查詢領養編號是否已存在,數據填寫好之后提交到后臺,會調用相關服務在數據庫中插入記錄。領養記錄頁面設計效果如下圖所示。圖5-8領養記錄界面圖領養記錄管理的關鍵代碼如下。@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();}系統測試測試概述軟件測試是軟件開發完成后必須經過的一道程序,它在軟件開發過程中地位十分重要,需要由專業的測試工程師來對軟件進行各方面的測試,大到功能模塊測試,小到代碼的單元測試,這對測試工程師來說需要有足夠的耐心和專業的測試方案,軟件測試歸根結底就是對軟件的結構和功能的綜合測評,需要做到結構穩定和功能正確,二者兼顧。軟件測試也叫尋找系統bug的過程,世界上沒有完美無缺、不存在bug的軟件,只能將軟件的bug降到最低最小,來追求極致。測試過程登錄測試登錄測試是系統最開始就要進行,測試用戶能否登錄,才能完成后續的功能操作。登錄測試用例表如下所示。表6-1登錄測試用例編號YL001程序版本1.00功能名稱使用者登錄測試編制人李鐵蛋功能描述根據用戶的登錄情況測試用例目的測試用戶登錄情況是否正確測試項測試數據測試結果預期結果用戶名為空請輸入用戶名請輸入用戶名密碼為空請輸入密碼請輸入密碼用戶密碼組合用戶名:klouse密碼klouses用戶與密碼不匹配用戶與密碼不匹配用戶密碼組合用戶名:klouse密碼klouse進入系統正確的用戶名和密碼登錄系統信息錄入測試管理員在發布信息頁面,通過按照預先格式發布信息,如果因為輸入時候缺少相關內容,就不能發布成功,且有相應錯誤提示信息錄入發布測試用例表如下所示。表6-1信息錄入發布測試用例編號YL002程序版本1.00功能名稱信息發布測試編制人李鐵蛋功能描述對使用者發布或者錄入信息進行測試,判斷其功能是否達到預期的要求用例目的對系統使用者錄入發布信息進行原型測試。測試項測試數據測試結果預期結果屬性1為空請輸入屬性1對應的數據請輸入屬性1對應的數據屬性2為空請輸入屬性2對應的數據請輸入屬性2對應的數據屬性3為空請輸入屬性3對應的數據請輸入屬性3對應的數據全部輸入數據均填入錄入發布成功錄入發布成功信息更新測試管理員在更新信息頁面,通過按照預先格式更新信息,如果因為輸入時候缺少相關內容或者更新的數據不符合當前規范的話,就不能更新成功,且有相應錯誤提示信息更新測試用例表如下所示。表6-1信息更新測試用例編號YL003程序版本1.00功能名稱信息更新測試編制人李鐵蛋功能描述對使用者更新信息進行測試,判斷其功能是否達到預期的要求用例目的對系統使用者更新信息進行原型測試。測試項測試數據測試結果預期結果屬性1編號:321編號更新成功編號更新成功屬性2名稱:名稱1名稱更新成功名稱更新成功屬性3內容:內容1234內容內容更新成功內容更新成功全部輸入數據均未更改更新成功更新成功信息刪除測試管理員在信息頁面,通過點擊數據刪除按鈕來刪除該條數據,如果該數據和其他數據有關聯,則提示是否確定刪除。信息刪除測試用例表如下所示。表6-1信息刪除測試用例編號YL004程序版本1.00功能名稱信息刪除測試編制人李鐵蛋功能描述對使用者刪除信息進行測試,判斷其功能是否達到預期的要求用例目的對系統使用者刪除信息進行原型測試。測試項測試數據測試結果預期結果數據1無任何關聯的數據1數據刪除成功數據刪除成功數據2和其他數據有關聯的數據2請確認是否刪除請確認是否刪除測試結果在經過之前的所有的工作之后,通過對軟件的測試方法、測試原則還有典型的測試用例進行全面的、深入的介紹。經過對系統的全面測試,系統目前所具有的所有功能均成功的實現并且通過了測試,整個系統實現了基于Java開發的期望。總結與展望總結流浪狗領養管理系統采用Springboot框架開發,該系統非常完美的集優點于一身,成熟、強大、易理解易使用,通過使用這個結構,降低了開發的難度。本系統實現了基于Springboot的流浪狗領養管理,將數據操作維護的過程轉化成電腦操作流程,具體實現了對系統人員管理、領養信息數據維護、用戶信息數據維護、回訪記錄數據維護、領養記錄管理數據維護,并提供查詢統計功能來對流浪狗領養管理系統的相關數據進行統計分析,讓使用者能更清晰的掌握運營情況,幫助使用者進行數據操作維護,簡化工作流程,提高工作效率和盈利。展望目前完成的流浪狗領養管理系統,還有許多有待改進的地方。一個是功能上的改進,用戶理應可以修改自己的相關信息,故應增設

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論