ssm欢欢宠物医院管理系统 毕业设计-附源码171734
springboot歡歡寵物醫(yī)院管理系統(tǒng)
摘?要
現(xiàn)如今生活質(zhì)量提高,人們追求精神健康,與家中寵物朝夕相處,感情深厚,寵物漸漸成了我們身邊的朋友。因而寵物生病了,需要去看病,自古醫(yī)院救死扶傷,生命無貴賤,無論人類還是動(dòng)物都需要合適而又方便的場(chǎng)所看病。同時(shí)智能化醫(yī)院的普及,以往獸醫(yī)站開始嘗試改善自我經(jīng)營(yíng)的診所,采用高效的新技術(shù)向正規(guī)化且辦公化管理的醫(yī)院轉(zhuǎn)型,這樣便可使管理高效,服務(wù)優(yōu)質(zhì),方便快捷地對(duì)運(yùn)營(yíng)的各個(gè)部門得到全方位的改善。因而基于寵物醫(yī)院的辦公管理系統(tǒng)是寵物醫(yī)院的重要工具,簡(jiǎn)單、實(shí)用、靈活,可以事半功倍。
本系統(tǒng)是基于瀏覽器與服務(wù)器架構(gòu)平臺(tái),完整的辦公信息處理的歡歡寵物醫(yī)院管理系統(tǒng)。采用跨平臺(tái)的JAVA語言開發(fā),利用WEB瀏覽器就可以使工作人員操作本應(yīng)用,實(shí)現(xiàn)對(duì)系統(tǒng)各方位信息的操作,無論大型寵物醫(yī)院還是小型寵物診所,均可自建局域網(wǎng)管理,方便辦公,減少不必要的成本消耗。該系統(tǒng)沿用MVC思想,利用springboot類的封裝進(jìn)行邏輯控制,利用Java技術(shù)完成訪問頁面的展示,利用MySQL數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù),最后Tomcat服務(wù)器完成網(wǎng)站發(fā)布,系統(tǒng)可在多個(gè)環(huán)境下運(yùn)行。
本課題在經(jīng)過了寵物醫(yī)院正常辦公流程下的需求分析后,完成實(shí)現(xiàn)了系統(tǒng)用戶、醫(yī)生介紹、預(yù)約掛號(hào)、病歷記錄、醫(yī)療器械、在線咨詢、維修上報(bào)等功能。
關(guān)鍵詞:寵物醫(yī)院管理系統(tǒng),Springboot框架,MySQL數(shù)據(jù)庫
Springboot Huanhuan pet hospital management system
Abstract
Nowadays, with the improvement of the quality of life, people pursue mental health, get along with their pets day and night, and have deep feelings. Pets have gradually become our friends. Therefore, pets are sick and need to see a doctor. Since ancient times, hospitals have saved the lives of the dead and healed the wounded. No matter human or animal, they need a suitable and convenient place to see a doctor. At the same time, with the popularization of intelligent hospitals, in the past, veterinary stations began to try to improve self operated clinics and adopt efficient new technologies to transform into a hospital with standardized and office management, so as to make management efficient, service high-quality and comprehensively improve all departments of operation conveniently and quickly. Therefore, the office management system based on pet hospital is an important tool of pet hospital. It is simple, practical and flexible, and can get twice the result with half the effort.
This system is a Huanhuan pet hospital management system based on browser and server architecture platform and complete office information processing. Using cross platform Java language development and web browser, the staff can operate this application and realize the operation of all directions of information in the system. Whether large pet hospitals or small pet clinics, they can build their own LAN management to facilitate office and reduce unnecessary cost consumption. The system follows the MVC idea, uses the encapsulation of springboot class for logic control, uses Java technology to complete the display of access pages, uses MySQL database to store data, and finally Tomcat server to complete website publishing. The system can run in multiple environments.
After the demand analysis under the normal office process of the pet hospital, this topic has completed the functions of system users, doctor introduction, appointment registration, medical record, medical devices, online consultation, maintenance and reporting.
Key words:?Pet hospital management system, springboot framework, MySQL database
目 ?錄
第1章 緒論 1
1.1?研究背景 1
1.2?研究現(xiàn)狀 1
1.3?本文的組織結(jié)構(gòu) 2
第2章 相關(guān)技術(shù)介紹 3
2.1?相關(guān)技術(shù)說明 3
2.2 B/S體系工作原理 4
2.3 Springboot框架介紹 4
2.4?MySQL簡(jiǎn)介 4
2.5?JavaScript運(yùn)行模式 5
第3章 系統(tǒng)分析 6
3.1?可行性分析 6
3.1.1?法律可行性分析 6
3.1.2?技術(shù)可行性分析 6
3.1.3?經(jīng)濟(jì)可行性分析 6
3.2?功能需求分析 6
3.3?非功能需求分析 7
3.4?用例分析 7
3.5?業(yè)務(wù)流程分析 9
3.6?數(shù)據(jù)流程分析 10
第4章 系統(tǒng)設(shè)計(jì) 12
4.1?系統(tǒng)架構(gòu)設(shè)計(jì) 12
4.2?系統(tǒng)功能結(jié)構(gòu) 12
4.3?功能模塊設(shè)計(jì) 13
4.4?數(shù)據(jù)庫設(shè)計(jì) 15
4.4.1 E-R圖 16
4.4.2?表結(jié)構(gòu)設(shè)計(jì) 16
第5章 系統(tǒng)實(shí)現(xiàn) 20
5.1?開發(fā)工具 20
5.2?注冊(cè)模塊 20
5.3?登錄/注銷模塊 23
5.4?用戶模塊 26
5.4.1?個(gè)人資料模塊 27
5.4.2寵物百科模塊 27
5.4.3醫(yī)生介紹模塊 27
5.5?管理員模塊 29
5.5.1?密碼修改模塊 29
5.5.2?醫(yī)生管理模塊 30
5.5.3?預(yù)約掛號(hào)管理模塊 30
5.5.4?病歷記錄管理模塊 31
第6章 系統(tǒng)測(cè)試 35
6.1?測(cè)試概述 35
6.2?測(cè)試過程 35
6.2.1?登錄測(cè)試 35
6.2.2?信息錄入測(cè)試 35
6.2.3?信息更新測(cè)試 36
6.2.4?信息刪除測(cè)試 36
6.3?測(cè)試結(jié)果 36
第7章 總結(jié)與展望 38
7.1?總結(jié) 38
7.2?展望 38
參考文獻(xiàn) 39
致謝 41
目前,很多國內(nèi)寵物醫(yī)院信息管理一般采用純手工管理。這種方法的弊端在于參與管理的人員文化水平不一,字跡不一,互相之間會(huì)導(dǎo)致信息傳達(dá)不便,而.且紙質(zhì)信息傳載媒體有著一個(gè)很大的弱點(diǎn)就是容易損壞,造成信息丟失。在當(dāng)前的信息化時(shí)代中,任何寵物醫(yī)院,都需要一個(gè)實(shí)用的寵物醫(yī)院信息管理系統(tǒng)來規(guī)范寵物醫(yī)院信息的管理,這將會(huì)大大提高寵物醫(yī)院的管理水平,優(yōu)化資源,實(shí)現(xiàn)效益的最大化。
現(xiàn)在國內(nèi)也有一些寵物醫(yī)院信息管理管理的軟件,采用的技術(shù)也是多種多樣,但大多數(shù)寵物醫(yī)院信息管理系統(tǒng)主要用于大型寵物醫(yī)院的關(guān)鍵部門。至于小型寵物醫(yī)院,利用寵物醫(yī)院信息管理系統(tǒng)管理日常業(yè)務(wù)的并不多。針對(duì)國內(nèi)對(duì)寵物醫(yī)院信息管理軟件的巨大需要和基本需要,一個(gè)好的寵物醫(yī)院信息管理軟件,必須功能齊全,操作簡(jiǎn)便,向用戶展示簡(jiǎn)單明了的操作界面。在完善功能的同時(shí)又必須兼顧系統(tǒng)的靈活性,安全性。
寵物醫(yī)院管理系統(tǒng)的優(yōu)勢(shì)主要表現(xiàn)在三個(gè)方面:
(1)寵物醫(yī)院信息管理無紙化,環(huán)保又方便。傳統(tǒng)的寵物醫(yī)院信息管理方式,都是經(jīng)由員工手工記錄存檔。這種傳統(tǒng)的紙質(zhì)寵物醫(yī)院信息管理管理,-是會(huì)有很大的體力消耗,二是在精力上也是不小的付出。而無紙化寵物醫(yī)院信息管理,只需在電腦前點(diǎn)點(diǎn)鼠標(biāo),在體力上幾乎沒有多大的消耗,而且在環(huán)保、效率、針對(duì)性日常業(yè)務(wù)方面做得要比傳統(tǒng)的寵物醫(yī)院信息管理管理科學(xué)得多。
(2)科學(xué)管理,安全可靠。傳統(tǒng)的寵物醫(yī)院信息管理管理方式,經(jīng)常會(huì)由于各種原因,產(chǎn)生信息的丟失或是污損,給寵物醫(yī)院信息管理和日常業(yè)務(wù)帶來很大的不便。而對(duì)于寵物醫(yī)院信息管理系統(tǒng),只需做好系統(tǒng)數(shù)據(jù)庫的保護(hù),以上問題可以迎刃而解了。
(3)簡(jiǎn)化工作,促進(jìn)其他方面的綜合發(fā)展。由于寵物醫(yī)院信息管理系統(tǒng)的介入運(yùn)行,可以使醫(yī)生騰出更多的時(shí)間,做更多針對(duì)性的個(gè)性化醫(yī)療服務(wù),從而使每個(gè)病人都有機(jī)會(huì)享受更多的服務(wù)。
隨著人們的生活水平的不斷提高、物質(zhì)生活不斷豐富、精神追求不斷提升,人們也越來親睞于飼養(yǎng)寵物。近年來寵物市場(chǎng)的急劇發(fā)展,也讓更多的人們關(guān)注飼養(yǎng)寵物的益處,特別是年輕人工作愈發(fā)繁重的背景下,留守家中的老年人變得越來越孤獨(dú),飼養(yǎng)寵物不失為排解孤獨(dú)的一種有效途徑。近幾年計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)已經(jīng)成了人們?nèi)粘I钪兄匾冶夭豢缮俚囊徊糠?#xff0c;很多人想要購買寵物卻不知道哪種寵物適合自己;想要了解哪些寵物的飼養(yǎng)習(xí)性卻無處咨詢;想弄清楚哪些寵物適合各年齡段的人卻因?qū)嶓w寵物醫(yī)院路途遙遠(yuǎn)等原因而作罷。于是,歡歡寵物醫(yī)院管理系統(tǒng)應(yīng)運(yùn)而生。由于其方便性、快捷性、可靠性,已成為眾多寵物愛好者經(jīng)常光顧的地方。國內(nèi)外的歡歡寵物醫(yī)院管理系統(tǒng)眾多,雖然這些系統(tǒng)運(yùn)用的技術(shù)有所不同,但是他們實(shí)現(xiàn)的功能和目的都有一個(gè)共同點(diǎn),對(duì)社會(huì)的影響、給人們帶來的方便是一樣的。他們都能滿足絕大多數(shù)人的需求,使得分散于各地的寵物飼養(yǎng)者們能找到這樣一個(gè)虛擬的寵物醫(yī)院,使得大家不用再為如何領(lǐng)養(yǎng)、掛號(hào)、愛護(hù)自己的愛寵而發(fā)愁。
現(xiàn)在國內(nèi)外也有很多寵物醫(yī)院信息管理的軟件,采用的技術(shù)也是多種多樣,如基于MySQL和Springboot模式,但大多數(shù)寵物醫(yī)院信息管理系統(tǒng)主要用于大型寵物醫(yī)院的關(guān)鍵部門。至于小型寵物醫(yī)院,利用寵物醫(yī)院信息管理系統(tǒng)組織管理的并不多。針對(duì)國內(nèi)外對(duì)寵物醫(yī)院信息管理的巨大需要和基本需要,一個(gè)好的寵物醫(yī)院信息管理系統(tǒng),必須功能齊全,操作簡(jiǎn)便,向用戶展示友善的操作界面。在完善功能的同時(shí)又必須兼顧系統(tǒng)的靈活性,安全性,健壯性。
各個(gè)歡歡寵物醫(yī)院管理系統(tǒng)在功能上會(huì)存在差異,但都在不斷完善,靜態(tài)網(wǎng)站的寵物醫(yī)院也在向動(dòng)態(tài)網(wǎng)站的寵物醫(yī)院過渡。隨著Internet的不斷快速發(fā)展,靜態(tài)Web站點(diǎn)的開發(fā)與維護(hù)越來越困難,一方面是信息不斷更新和增加,不得不讓站點(diǎn)維護(hù)人員經(jīng)常修改頁面內(nèi)容;另一方面靜態(tài)網(wǎng)頁不能及時(shí)的與瀏覽者進(jìn)行有效交互,使瀏覽者感覺到乏味。所以開發(fā)動(dòng)態(tài)網(wǎng)頁是很有必要的。動(dòng)態(tài)網(wǎng)頁具有交互性,它能根據(jù)用戶的要求和選擇而動(dòng)態(tài)改變和響應(yīng)。動(dòng)態(tài)數(shù)據(jù)訪問就是動(dòng)態(tài)網(wǎng)頁的特征,當(dāng)瀏覽器訪問服務(wù)器網(wǎng)頁時(shí),其Web應(yīng)用程序才訪問數(shù)據(jù)庫,實(shí)時(shí)檢索數(shù)據(jù)庫,響應(yīng)客戶要求。
六個(gè)章節(jié)共同組成了本文研究及設(shè)計(jì)內(nèi)容,包括:
第一章:緒論。本文章的開頭部分,對(duì)本題目的研究背景和研究意義等一些做文字性的描述。
第二章:相關(guān)技術(shù)介紹。主要介紹Springboot框架、Java嵌入式腳本語言、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ì)說明。
第五章:系統(tǒng)實(shí)現(xiàn)。將本系統(tǒng)分為前提的開發(fā)工具介紹和后期的功能代碼實(shí)現(xiàn)。
第六章:系統(tǒng)測(cè)試。系統(tǒng)完成后,根據(jù)各個(gè)模塊的測(cè)試用例才對(duì)各個(gè)模塊進(jìn)行功能測(cè)試。
本系統(tǒng)前端部分基于MVVM模式進(jìn)行開發(fā),采用B/S模式,后端部分基于Java的springboot框架進(jìn)行開發(fā)。
前端部分:前端框架采用了比較流行的漸進(jìn)式JavaScript框架Vue.js。使用Vue-Router和Vuex實(shí)現(xiàn)動(dòng)態(tài)路由和全局狀態(tài)管理,Ajax實(shí)現(xiàn)前后端通信,Element UI組件庫使頁面快速成型,項(xiàng)目前端通過柵格布局實(shí)現(xiàn)響應(yīng)式,可適應(yīng)PC端、平板端、手機(jī)端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用springboot作為開發(fā)框架,同時(shí)集成MyBatis、Redis等相關(guān)技術(shù)。
B/S架構(gòu)采取瀏覽器請(qǐng)求,服務(wù)器響應(yīng)的工作模式。
用戶可以通過瀏覽器去訪問Internet上由Web服務(wù)器產(chǎn)生的文本、數(shù)據(jù)、圖片、動(dòng)畫、視頻點(diǎn)播和聲音等信息;
而每一個(gè)Web服務(wù)器又可以通過各種方式與數(shù)據(jù)庫服務(wù)器連接,大量的數(shù)據(jù)實(shí)際存放在數(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)連接到一塊,形成一個(gè)巨大的網(wǎng),即全球網(wǎng)。而各個(gè)企業(yè)可以在此結(jié)構(gòu)的基礎(chǔ)上建立自己的Internet。
在 B/S 模式中,用戶是通過瀏覽器針對(duì)許多分布于網(wǎng)絡(luò)上的服務(wù)器進(jìn)行請(qǐng)求訪問的,瀏覽器的請(qǐng)求通過服務(wù)器進(jìn)行處理,并將處理結(jié)果以及相應(yīng)的信息返回給瀏覽器,其他的數(shù)據(jù)加工、請(qǐng)求全部都是由Web Server完成的。通過該框架結(jié)構(gòu)以及植入于操作系統(tǒng)內(nèi)部的瀏覽器,該結(jié)構(gòu)已經(jīng)成為了當(dāng)今軟件應(yīng)用的主流結(jié)構(gòu)模式。
?
Spring框架是Java平臺(tái)上的一種開源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對(duì)編程模型沒有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補(bǔ)充,甚至是替補(bǔ)。Spring框架為開發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)的核心特性,并通過依賴注入實(shí)現(xiàn)控制反轉(zhuǎn)來實(shí)現(xiàn)管理對(duì)象生命周期容器化,利用面向切面編程進(jìn)行聲明式的事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪問,提供大量?jī)?yōu)秀的Web框架方便開發(fā)等等。Spring框架具有控制反轉(zhuǎn)(IOC)特性,IOC旨在方便項(xiàng)目維護(hù)和測(cè)試,它提供了一種通過Java的反射機(jī)制對(duì)Java對(duì)象進(jìn)行統(tǒng)一的配置和管理的方法。Spring框架利用容器管理對(duì)象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對(duì)象,開發(fā)者可以通過依賴查找或依賴注入來獲得對(duì)象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時(shí)運(yùn)行時(shí)可配置;AOP框架主要針對(duì)模塊之間的交叉關(guān)注點(diǎn)進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務(wù)管理、遠(yuǎn)程訪問等功能均可以通過使用SpringAOP技術(shù)實(shí)現(xiàn)。Spring的事務(wù)管理框架為Java平臺(tái)帶來了一種抽象機(jī)制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點(diǎn)一起工作,并且?guī)缀蹩梢栽贘ava平臺(tái)的任何環(huán)境中工作。Spring集成多種事務(wù)模板,系統(tǒng)可以通過事務(wù)模板、XML或Java注解進(jìn)行事務(wù)配置,并且事務(wù)框架集成了消息傳遞和緩存等功能。Spring的數(shù)據(jù)訪問框架解決了開發(fā)人員在應(yīng)用程序中使用數(shù)據(jù)庫時(shí)遇到的常見困難。它不僅對(duì)Java:JDBC、iBATS/MyBATIs、Hibernate、Java數(shù)據(jù)對(duì)象(JDO)、ApacheOJB和ApacheCayne等所有流行的數(shù)據(jù)訪問框架中提供支持,同時(shí)還可以與Spring的事務(wù)管理一起使用,為數(shù)據(jù)訪問提供了靈活的抽象。Spring框架最初是沒有打算構(gòu)建一個(gè)自己的WebMVC框架,其開發(fā)人員在開發(fā)過程中認(rèn)為現(xiàn)有的StrutsWeb框架的呈現(xiàn)層和請(qǐng)求處理層之間以及請(qǐng)求處理層和模型之間的分離不夠,于是創(chuàng)建了SpringMVC。
MySQL是一個(gè)開放的、快速的、多線程的SQL關(guān)系型數(shù)據(jù)庫服務(wù)器。由于其體積小、免費(fèi)、運(yùn)行速度快以及可以通過相關(guān)免費(fèi)的軟件來對(duì)MySql數(shù)據(jù)庫中的相關(guān)數(shù)據(jù)結(jié)構(gòu)信息等等優(yōu)點(diǎn)。受廣大中等、小型企業(yè)所喜愛并占據(jù)了很大地位。本系統(tǒng)在數(shù)據(jù)庫方面選用MySQL,并通過Nacivat來進(jìn)行MySql數(shù)據(jù)庫的管理。在Mysql的安裝過程中,最需要注意的就是數(shù)據(jù)庫的編碼問題,所以在安裝數(shù)據(jù)庫時(shí)需要設(shè)置數(shù)據(jù)庫的編碼為Utf-8,與前臺(tái)頁面和服務(wù)器的編碼相一致。
JavaScript是一種屬于網(wǎng)絡(luò)的高級(jí)腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實(shí)現(xiàn)自身的功能的。
1.8.1是一種解釋性腳本語言(代碼不進(jìn)行預(yù)編譯)。
1.8.2主要用來向HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)頁面添加交互行為。
1.8.3可以直接嵌入HTML頁面,但寫成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。
1.8.4跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行(如Windows、Linux、Mac、Android、iOS等)。
1.8.5 JavaScript腳本語言同其他語言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運(yùn)算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
開發(fā)軟件有沒有觸犯法律,這涉及到軟件或者系統(tǒng)能不能發(fā)布的問題。如果觸犯了法律,就必將會(huì)受到法律的制裁。常見法律問題就是軟件抄襲問題,若是抄襲別人軟件,將會(huì)受到嚴(yán)厲懲罰。
軟件產(chǎn)業(yè)經(jīng)過多年的發(fā)展,現(xiàn)在已經(jīng)達(dá)到了很大的規(guī)模,從事軟件開發(fā)的專業(yè)人員不計(jì)其數(shù),軟件產(chǎn)業(yè)的重要性已經(jīng)上升到了影響和推動(dòng)國民經(jīng)濟(jì)發(fā)展的核心地位。本系統(tǒng)基于的架構(gòu),目前技術(shù)已經(jīng)非常的成熟,是不存在技術(shù)上面難以實(shí)現(xiàn)的麻煩。
開發(fā)軟件所需的時(shí)間、人力和物力成本,開發(fā)完成后的收益如何,從投資回報(bào)的角度軟件所需功能在現(xiàn)有經(jīng)濟(jì)條件能不能實(shí)現(xiàn)等進(jìn)行深入的考慮,都符合實(shí)際的要求。所以歡歡寵物醫(yī)院管理系統(tǒng)具有經(jīng)濟(jì)可行性和實(shí)用性,可以節(jié)約管理成本
歡歡寵物醫(yī)院管理系統(tǒng)主要是為了更加地完善寵物醫(yī)療的服務(wù)情況,對(duì)用戶的信息、寵物信息和用戶管理、寵物熱點(diǎn)管理、會(huì)員留言管理、疫苗藥物管理、訂單列表管理、遺棄寵物管理、寵物飼料情況、招聘員工、志愿者申請(qǐng)等提供了方便的機(jī)制。本系統(tǒng)有多類使用者,分別是管理員和用戶注冊(cè)。以下是從這兩種用戶的角度分別介紹本系統(tǒng)所要實(shí)現(xiàn)的功能。
用戶:
注冊(cè):首先檢查用戶名和郵箱是否存在,如不存在即可進(jìn)行注冊(cè),并將用戶輸入的密碼進(jìn)行MD5加密,注冊(cè)成功后提示注冊(cè)成功,并將用戶信息保存到數(shù)據(jù)庫中。
登錄:使用歡歡寵物醫(yī)院管理系統(tǒng)前是需要用戶登錄個(gè)人賬號(hào)。
醫(yī)生介紹:用戶登錄寵物醫(yī)院管理系統(tǒng)首頁時(shí),可以瀏覽醫(yī)生介紹信息,根據(jù)不同地醫(yī)生可以查看每個(gè)不同醫(yī)生介紹信息等。
寵物百科:用戶可以瀏覽寵物百科可以自行搜索某樣寵物列表相關(guān)評(píng)論詳情。遺棄
預(yù)約掛號(hào):用戶可以查看預(yù)約信息表的掛號(hào)狀態(tài),可以根據(jù)預(yù)約狀態(tài)發(fā)起掛號(hào)申請(qǐng):包括填寫訂單號(hào)、醫(yī)生工號(hào)、醫(yī)生姓名、科室、掛號(hào)費(fèi)、用戶名。
管理員:
用戶管理:對(duì)用戶進(jìn)行管理,用戶的注冊(cè),包括用戶昵稱、用戶名、用戶的寵物信息(寵物類別、寵物性別、年齡等)用戶的賬號(hào)信息:
醫(yī)生介紹信息管理:對(duì)醫(yī)生介紹信息進(jìn)行維護(hù),添加、刪除、修改信息。
預(yù)約掛號(hào)信息管理:對(duì)預(yù)約掛號(hào)信息進(jìn)行維護(hù),添加、刪除、修改信息。
病歷記錄信息管理:對(duì)病歷記錄信息進(jìn)行維護(hù),添加、刪除、修改信息。
醫(yī)療器械信息管理:對(duì)醫(yī)療器械信息進(jìn)行維護(hù),添加、刪除、修改信息。
維修上報(bào)信息管理:對(duì)維修上報(bào)信息進(jìn)行維護(hù),添加、刪除、修改信息。
系統(tǒng)非功能需求有非常多,比如性能需求、可承載最大用戶數(shù)、穩(wěn)定性、易用性需求等。本系統(tǒng)分析時(shí)考慮到易用性需求,因?yàn)橄到y(tǒng)是給人使用的,所以必須充分從用戶的角度出發(fā),考慮用戶體驗(yàn),使系統(tǒng)易理解易上手易操作。
1.普通用戶主要使用系統(tǒng)的寵物熱點(diǎn)和歡歡寵物醫(yī)院管理系統(tǒng),下圖所示為普通用戶的用例 ??????????????
?
圖3-1 普通用戶用例圖
2.管理員主要負(fù)責(zé)用戶管理、寵物醫(yī)療管理、商品管理、商品訂單管理、寵物領(lǐng)養(yǎng),下圖所示描述管理員的用例圖。
?????????????????
?
圖3-2 管理員用例圖
系統(tǒng)業(yè)務(wù)流程圖如下所示。
?????????????????????????????????????????
?
圖3-3 系統(tǒng)業(yè)務(wù)流程圖
業(yè)務(wù)流程圖(TFD)通過一些特定的符號(hào)描述業(yè)務(wù)的處理過程,它重點(diǎn)強(qiáng)調(diào)業(yè)務(wù)過程中每一項(xiàng)處理活動(dòng)和具體業(yè)務(wù)部門的關(guān)系,選擇部分模塊進(jìn)行具體描述。重點(diǎn)對(duì)本系統(tǒng)整體業(yè)務(wù)中最為主要的寵物交易及訂單業(yè)務(wù)進(jìn)行描述,用戶進(jìn)入歡歡寵物醫(yī)院管理系統(tǒng)后進(jìn)行各種模塊信息的瀏覽,選擇想要預(yù)約掛號(hào),對(duì)醫(yī)生介紹,另外,管理人員進(jìn)入后端管理,以執(zhí)行該訂單信息控制模塊的相關(guān)管理方法,并在解決后向客戶提供反饋機(jī)制。
如下為系統(tǒng)的頂層數(shù)據(jù)流圖,外部實(shí)體有用戶和管理員,分別對(duì)系統(tǒng)輸入數(shù)據(jù),從而得到要輸出的數(shù)據(jù)。
????
?
圖3-4系統(tǒng)頂層數(shù)據(jù)流圖
如下圖所示為系統(tǒng)底層數(shù)據(jù)流圖。
?
圖3-5系統(tǒng)底層數(shù)據(jù)流圖
歡歡寵物醫(yī)院管理系統(tǒng)底層數(shù)據(jù)流圖主要描述系統(tǒng)底層模塊的數(shù)據(jù)流、數(shù)據(jù)載體、數(shù)據(jù)處理、外部實(shí)體的具體交互。本系統(tǒng)就是管理員和普通用戶在用戶管理、預(yù)約掛號(hào)、病歷記錄、醫(yī)療器械、維修上報(bào)等模塊上的數(shù)據(jù)交互。
本系統(tǒng)架構(gòu)設(shè)計(jì)主要分為可以3層,主要有Web層,業(yè)務(wù)層,Model層。其中web層還包括View層和Controller層,Model層包括元數(shù)據(jù)擴(kuò)展層和數(shù)據(jù)訪問層。
?
圖4-1系統(tǒng)架構(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)圖
用戶管理針對(duì)所有用戶和管理員。未注冊(cè)用戶點(diǎn)擊注冊(cè),進(jìn)入注冊(cè)頁面填寫新用戶信息,得到自定義生成賬號(hào)后,注冊(cè)完成。未注冊(cè)用戶注冊(cè)的活動(dòng)圖如下圖所示。
?
圖4-3未注冊(cè)用戶注冊(cè)活動(dòng)圖
用戶可進(jìn)行登錄使用更多功能,首先進(jìn)入用戶登錄界面,輸入用戶賬號(hào)和密碼,后臺(tái)對(duì)賬號(hào)和密碼信息進(jìn)行核對(duì)驗(yàn)證,驗(yàn)證成功則頁面直接顯示登錄用戶昵稱代表登錄成功,否則返回用戶登錄界面。用戶登錄活動(dòng)圖如下圖。
圖4-4用戶登錄活動(dòng)圖
?
用戶登錄后,進(jìn)入功能頁面,可對(duì)自己的信息進(jìn)行管理,包括個(gè)人信息,預(yù)約掛號(hào)、病歷記錄、在線咨詢。用戶使用功能活動(dòng)圖如下圖所示。
?
圖4-5用戶使用功能活動(dòng)圖
用戶功能界面可對(duì)自己的密碼進(jìn)行修改。進(jìn)入修改密碼界面后核對(duì)當(dāng)前密碼,核對(duì)成功后填寫新密碼。修改密碼活動(dòng)圖如下圖所示。
?
圖4-6修改密碼活動(dòng)圖
歡歡寵物醫(yī)院管理系統(tǒng)采用的數(shù)據(jù)庫是MySQL,該部分將根據(jù)系統(tǒng)需求和設(shè)計(jì),設(shè)計(jì)合理的數(shù)據(jù)庫。本系統(tǒng)考慮到之后系統(tǒng)的擴(kuò)展集群,數(shù)據(jù)庫將不使用外鍵。此外,不用外鍵時(shí)數(shù)據(jù)管理也較為簡(jiǎn)單,操作更加方便,性能更高。
E-R圖,更加直觀的告訴開發(fā)人員系統(tǒng)的各個(gè)數(shù)據(jù)的屬性,各個(gè)數(shù)據(jù)之間的聯(lián)系,各個(gè)數(shù)據(jù)的類型。能通過該模型更直觀地了解數(shù)據(jù)庫的設(shè)計(jì),并根據(jù)對(duì)其逐漸改善。
本系統(tǒng)圖設(shè)計(jì),如下圖所示。
?
圖4-7系統(tǒng)E-R圖
本系統(tǒng)根據(jù)第三范式的思想設(shè)計(jì)數(shù)據(jù)庫,減少最大程度的冗余,總共建立有多個(gè)表,用戶注冊(cè)表、管理員表、招聘員工表、寵物信息表、遺棄寵物表、活動(dòng)中心表、會(huì)員信息表、疫苗藥物表、志愿者申請(qǐng)表等。
表結(jié)構(gòu)如下所示。
registered_user表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| registered_user_id | int | 11 | 是 | 是 | 注冊(cè)用戶ID |
| user_name | varchar | 64 | 是 | 否 | 用戶名 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
online_consultation表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| online_consultation_id | int | 11 | 是 | 是 | 在線咨詢ID |
| doctor_job_number | int | 11 | 否 | 否 | 醫(yī)生工號(hào) |
| name_of_doctor | varchar | 64 | 否 | 否 | 醫(yī)生姓名 |
| department | varchar | 64 | 否 | 否 | 科室 |
| user_name | int | 11 | 否 | 否 | 用戶名 |
| pet_variety | varchar | 64 | 否 | 否 | 寵物品種 |
| consulting_questions | text | 0 | 否 | 否 | 咨詢問題 |
| doctor_reply | text | 0 | 否 | 否 | 醫(yī)生回復(fù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
medical_record表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| medical_record__id | int | 11 | 是 | 是 | 病歷記錄ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號(hào) |
| doctor_job_number | int | 11 | 否 | 否 | 醫(yī)生工號(hào) |
| name_of_doctor | varchar | 64 | 否 | 否 | 醫(yī)生姓名 |
| department | varchar | 64 | 否 | 否 | 科室 |
| user_name | int | 11 | 否 | 否 | 用戶名 |
| pet_variety | varchar | 64 | 否 | 否 | 寵物品種 |
| pet_age | varchar | 64 | 否 | 否 | 寵物年齡 |
| symptom_description | text | 0 | 否 | 否 | 癥狀描述 |
| clinical_diagnosis | text | 0 | 否 | 否 | 臨床診斷 |
| drug_prescription | text | 0 | 否 | 否 | 藥物處方 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
medical_apparatus_and_instruments表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| medical_apparatus_and_instruments_id | int | 11 | 是 | 是 | 醫(yī)療器械ID |
| device_number | varchar | 64 | 否 | 否 | 器械編號(hào) |
| device_name | varchar | 64 | 否 | 否 | 器械名稱 |
| purchase_date | date | 0 | 否 | 否 | 購入日期 |
| manufactor | varchar | 64 | 否 | 否 | 廠家 |
| state | varchar | 64 | 否 | 否 | 狀態(tài) |
| maintenance_record | text | 0 | 否 | 否 | 維修記錄 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
maintenance_report表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| maintenance_report_id | int | 11 | 是 | 是 | 維修上報(bào)ID |
| device_number | varchar | 64 | 否 | 否 | 器械編號(hào) |
| device_name | varchar | 64 | 否 | 否 | 器械名稱 |
| related_pictures | varchar | 255 | 否 | 否 | 相關(guān)圖片 |
| doctor_job_number | int | 11 | 否 | 否 | 醫(yī)生工號(hào) |
| fault_description | text | 0 | 否 | 否 | 故障描述 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| examine_reply | varchar | 255 | 否 | 否 | 審核回復(fù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
abandoned_pets表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| have_an_appointment_with_a_doctor_id | int | 11 | 是 | 是 | 預(yù)約掛號(hào)ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號(hào) |
| doctor_job_number | int | 11 | 否 | 否 | 醫(yī)生工號(hào) |
| name_of_doctor | varchar | 64 | 否 | 否 | 醫(yī)生姓名 |
| department | varchar | 64 | 否 | 否 | 科室 |
| registration_fee | varchar | 64 | 否 | 否 | 掛號(hào)費(fèi) |
| user_name | int | 11 | 否 | 否 | 用戶名 |
| pet_variety | varchar | 64 | 否 | 否 | 寵物品種 |
| pet_age | varchar | 64 | 否 | 否 | 寵物年齡 |
| pet_sex | varchar | 64 | 否 | 否 | 寵物性別 |
| contact_number | varchar | 64 | 否 | 否 | 聯(lián)系電話 |
| pay_state | varchar | 16 | 是 | 否 | 支付狀態(tài) |
| pay_type | varchar | 16 | 否 | 否 | 支付類型 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
doctor_introduction表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| doctor_introduction_id | int | 11 | 是 | 是 | 醫(yī)生介紹ID |
| doctor_job_number | int | 11 | 否 | 否 | 醫(yī)生工號(hào) |
| name_of_doctor | varchar | 64 | 否 | 否 | 醫(yī)生姓名 |
| gender | varchar | 64 | 否 | 否 | 性別 |
| age | varchar | 64 | 否 | 否 | 年齡 |
| photo | varchar | 255 | 否 | 否 | 照片 |
| department | varchar | 64 | 否 | 否 | 科室 |
| registration_fee | int | 11 | 否 | 否 | 掛號(hào)費(fèi) |
| areas_of_expertise | text | 0 | 否 | 否 | 擅長(zhǎng)領(lǐng)域 |
| scheduling_time | text | 0 | 否 | 否 | 排班時(shí)間 |
| doctor_introduction | longtext | 0 | 否 | 否 | 醫(yī)生介紹 |
| hits | int | 11 | 是 | 否 | 點(diǎn)擊數(shù) |
| praise_len | int | 11 | 是 | 否 | 點(diǎn)贊數(shù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
doctor表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| doctor_id | int | 11 | 是 | 是 | 醫(yī)生ID |
| doctor_job_number | varchar | 64 | 是 | 否 | 醫(yī)生工號(hào) |
| name_of_doctor | varchar | 64 | 否 | 否 | 醫(yī)生姓名 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
系統(tǒng)中應(yīng)用的開發(fā)工具總結(jié)如下表所示。
表5-1開發(fā)工具
| 名稱 | 工具 | 版本 |
| 操作系統(tǒng) IDE(Integrated Development Environment) | Windows Eclipse | 7/8/10 2017 |
| 服務(wù)器 | Tomcat | 9.10.7 |
| JDK(Java Development Kit) | JDK | Java SE 8.0 (1.8.0) |
| 數(shù)據(jù)庫 瀏覽器 界面工具 | MySQL 谷歌 Photoshop | 5.7 6.0 2016 |
未注冊(cè)用戶在用戶注冊(cè)界面uerRegister.jsp,輸入新用戶信息,點(diǎn)擊注冊(cè)后,新用戶信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用addUser(user)方法,通過userDAOImp向數(shù)據(jù)庫用戶表插入用戶信息,由于用戶賬號(hào)是自動(dòng)生成的,若成功則反饋?zhàn)?cè)成功,并提示新用戶的用戶賬號(hào);若失敗則回到登錄界面,并顯示登錄失敗。
注冊(cè)界面如下所示。
?
圖5-1注冊(cè)界面
用戶注冊(cè)關(guān)鍵代碼如下所示。
/**
?????* 注冊(cè)
?????* @param user
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(@RequestBody User user) {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????query.put("username",user.getUsername());
????????List list = service.select(query, new HashMap<>()).getResultList();
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????user.setUserId(null);
????????user.setPassword(service.encryption(user.getPassword()));
????????service.save(user);
????????return success(1);
}
/**
?????* 用戶ID:[0,8388607]用戶獲取其他與用戶相關(guān)的數(shù)據(jù)
?????*/
????@Id
????@GeneratedValue(strategy = GenerationType.IDENTITY)
????@Column(name = "user_id")
????private Integer userId;
????/**
?????* 賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷)
?????*/
????@Basic
????@Column(name = "state")
????private Integer state;
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權(quán)限
?????*/
????@Basic
????@Column(name = "user_group")
????private String userGroup;
????/**
?????* 上次登錄時(shí)間:
?????*/
????@Basic
????@Column(name = "login_time")
????private Timestamp loginTime;
????/**
?????* 手機(jī)號(hào)碼:[0,11]用戶的手機(jī)號(hào)碼,用于找回密碼時(shí)或登錄時(shí)
?????*/
????@Basic
????@Column(name = "phone")
????private String phone;
????/**
?????* 手機(jī)認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
?????*/
????@Basic
????@Column(name = "phone_state")
????private Integer phoneState;
????/**
?????* 用戶名:[0,16]用戶登錄時(shí)所用的賬戶名稱
?????*/
????@Basic
????@Column(name = "username")
????private String username;
????/**
?????* 昵稱:[0,16]
?????*/
????@Basic
????@Column(name = "nickname")
????private String nickname;
????/**
?????* 密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成
?????*/
????@Basic
????@Column(name = "password")
????private String password;
????/**
?????* 郵箱:[0,64]用戶的郵箱,用于找回密碼時(shí)或登錄時(shí)
?????*/
????@Basic
????@Column(name = "email")
????private String email;
????/**
?????* 郵箱認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
?????*/
????@Basic
????@Column(name = "email_state")
????private Integer emailState;
????/**
?????* 頭像地址:[0,255]
?????*/
????@Basic
????@Column(name = "avatar")
????private String avatar;
????/**
?????* 創(chuàng)建時(shí)間:
?????*/
????@Basic
????@Column(name = "create_time")
????@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
????private Timestamp createTime;
????@Basic
????@Transient
????private String code;
}
用戶在首頁點(diǎn)擊登錄,進(jìn)入用戶登錄界面uerLogin.jsp,輸入用戶賬號(hào)和密碼,點(diǎn)擊登錄,用戶賬號(hào)和密碼信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用userLogin(user)方法,通過userDAOImp向數(shù)據(jù)庫用戶表搜索該用戶賬號(hào)與密碼,將最終結(jié)果反饋到前端。若成功則回到首頁;用戶成功登錄,若失敗則回到登錄界面,并顯示登錄失敗。
用戶點(diǎn)擊注銷,清空瀏覽器session值,然后返回登錄頁或者首頁。
登錄界面如下所示。
?
圖5-2登錄界面
登錄界面關(guān)鍵代碼如下所示。
/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執(zhí)行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}else{
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????//判斷是否有這個(gè)用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態(tài)
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
????????????String res = String.valueOf(service.runCountSql(sql).getSingleResult());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過")){
????????????????return error(30000,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態(tài)
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態(tài),不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲(chǔ)Token到數(shù)據(jù)庫
????????????AccessToken accessToken = new AccessToken();
????????????accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
????????????accessToken.setUser_id(byUsername.getUserId());
????????????tokenService.save(accessToken);
????????????// 返回用戶信息
????????????JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
????????????user.put("token", accessToken.getToken());
????????????JSONObject ret = new JSONObject();
????????????ret.put("obj",user);
????????????return success(ret);
????????} else {
????????????return error(30000, "賬號(hào)或密碼不正確");
????????}
}
登錄用戶在首頁點(diǎn)擊進(jìn)入用戶中心userCenter.jsp,再點(diǎn)擊修改個(gè)人信息按鈕進(jìn)入userChangeInfo.jsp界面,系統(tǒng)根據(jù)session中存儲(chǔ)的目前登錄的用戶的賬號(hào),向控制層userAction發(fā)送請(qǐng)求,搜索當(dāng)前用戶信息,userAction向userDAOImp調(diào)用queryByUserId(user),向數(shù)據(jù)庫的用戶表搜索當(dāng)前用戶信息并將用戶信息以對(duì)象的形式層層返回到userChangeInfo.jsp界面,顯示出當(dāng)前用戶的個(gè)人信息。
若用戶要對(duì)個(gè)人信息進(jìn)行修改,則通過修改當(dāng)前信息之后點(diǎn)擊確認(rèn),向控制層userAction發(fā)送更改后的用戶信息,調(diào)用changeUser(user)方法,通過userDAOImp向數(shù)據(jù)庫用戶表更新用戶信息,若成功則反饋?zhàn)?cè)成功,則返回的userChangeInfo.jsp界面被更改成功;若失敗則顯示修改失敗。
用戶在登錄狀態(tài)下瀏覽寵物百科時(shí)可將該寵物百科加入寵物百科,從session中取出該用戶的信息,點(diǎn)擊加入寵物百科后前臺(tái)發(fā)起請(qǐng)求,將對(duì)應(yīng)的寵物shuliang、id參數(shù)信息從前臺(tái)傳遞GoumaiController類里,匹配到add()方法,add()方法調(diào)用GoumaiServiceImpl類的add()方法。
寵物百科界面如下所示。
?
圖5-4寵物百科界面
用戶在登錄狀態(tài)下瀏覽醫(yī)生介紹信息時(shí)可將該醫(yī)生介紹信息加入收藏記錄,從session中取出該用戶的信息,點(diǎn)擊加入醫(yī)生介紹信息收藏前臺(tái)發(fā)起請(qǐng)求,將對(duì)應(yīng)的醫(yī)生介紹信息shichang、id參數(shù)信息從前臺(tái)傳遞XiadanController類里,匹配到add()方法,add()方法調(diào)用XiadanServiceImpl類的add()方法。
醫(yī)生介紹信息界面如下所示。
?
圖5-5醫(yī)生介紹界面
管理員選擇個(gè)人中心的修改本人密碼。通過密碼框輸入現(xiàn)密碼和2次新密碼,如果現(xiàn)密碼錯(cuò)誤,則提示修改失敗。如果2次新密碼不一致,則提示修改失敗。都沒問題的話,系統(tǒng)提示修改成功,并返回登錄界面。
個(gè)人信息界面圖如下所示。
?
圖5-5個(gè)人信息界面
密碼修改界面如下所示。
?
圖5-6密碼修改界面
密碼修改關(guān)鍵代碼如下所示。
??/**
?????* 修改密碼
?????* @param data
?????* @param request
?????* @return
?????*/
????@PostMapping("change_password")
????public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
????????// 根據(jù)Token獲取UserId
????????String token = request.getHeader("x-auth-token");
????????Integer userId = tokenGetUserId(token);
????????// 根據(jù)UserId和舊密碼獲取用戶
????????Map<String, String> query = new HashMap<>();
????????String o_password = data.get("o_password");
????????query.put("user_id" ,String.valueOf(userId));
????????query.put("password" ,service.encryption(o_password));
????????Query ret = service.count(query, service.readConfig(request));
????????List list = ret.getResultList();
????????Object s = list.get(0);
????????int count = Integer.parseInt(list.get(0).toString());
????????if(count > 0){
????????????// 修改密碼
????????????Map<String,Object> form = new HashMap<>();
????????????form.put("password",service.encryption(data.get("password")));
????????????service.update(query,service.readConfig(request),form);
????????????return success(1);
????????}
????????return error(10000,"密碼修改失敗!");
????}
根據(jù)需求,需要對(duì)醫(yī)生進(jìn)行添加、刪除或修改詳情信息。刪除或修改醫(yī)生時(shí),系統(tǒng)根據(jù)醫(yī)生的狀態(tài)判定為可刪除狀態(tài)下,才會(huì)給出刪除和修改鏈接,點(diǎn)擊刪除鏈接按鈕時(shí),請(qǐng)求到達(dá)后臺(tái),還會(huì)先查詢醫(yī)生狀態(tài)再次做出判定能否刪除。點(diǎn)擊修改鏈接按鈕時(shí),會(huì)跳轉(zhuǎn)到修改信息的頁面,重新填寫好數(shù)據(jù)后,數(shù)據(jù)提交到后臺(tái)會(huì)對(duì)數(shù)據(jù)庫中相應(yīng)的記錄做出修改。
添加醫(yī)生時(shí),會(huì)給出數(shù)據(jù)填寫的頁面,該頁面根據(jù)填寫好的醫(yī)生編號(hào)同樣會(huì)事先發(fā)送Ajax請(qǐng)求查詢編號(hào)是否已存在,數(shù)據(jù)填寫好之后提交到后臺(tái),會(huì)調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫中插入記錄。
醫(yī)生頁面設(shè)計(jì)效果如下圖所示。
?
圖5-7醫(yī)生管理界面
預(yù)約掛號(hào)功能需要考慮高并發(fā),防止出現(xiàn)疫苗重復(fù)預(yù)約、掛號(hào)狀態(tài)顯示出錯(cuò)等情況,特對(duì)掛號(hào)這一共享數(shù)據(jù)增加鎖機(jī)制。在樂觀鎖、悲觀鎖以及線程鎖中,綜合考慮性能效率和錯(cuò)誤的可接受性選擇了樂觀鎖機(jī)制。樂觀鎖的實(shí)現(xiàn)方式是使用版本標(biāo)識(shí)來確定讀到的數(shù)據(jù)與提交時(shí)的數(shù)據(jù)是否一致,提交后修改版本標(biāo)識(shí),不一致時(shí)可以采取丟棄和再次嘗試的策略。在數(shù)據(jù)庫疫苗表(對(duì)應(yīng)疫苗實(shí)體)設(shè)計(jì)中增加了version字段,每次數(shù)據(jù)提交時(shí)(更改疫苗狀態(tài))會(huì)判斷version是否匹配,若不匹配停止本次提交,若匹配則提交成功并增加version的值。
預(yù)約掛號(hào)功能整體流程:用戶瀏覽預(yù)約掛號(hào)信息時(shí),同時(shí)會(huì)顯示掛號(hào)的狀態(tài),系統(tǒng)會(huì)在其顯示詳細(xì)信息的頁面時(shí)便會(huì)判斷掛號(hào)的狀態(tài),若疫苗狀態(tài)為可預(yù)約,則會(huì)顯示預(yù)約的鏈接按鈕。在用戶點(diǎn)擊預(yù)約按鈕時(shí),會(huì)先通過攔截器判斷用戶是否登錄,若未登錄,會(huì)跳轉(zhuǎn)至登錄頁面,提示用戶先登錄,若為登錄用戶就會(huì)跳轉(zhuǎn)至填寫預(yù)約信息的頁面,填寫好預(yù)約信息之后,點(diǎn)擊提交按鈕,預(yù)約成功之后返回提示信息,告知用戶預(yù)約成功。
預(yù)約掛號(hào)流程圖如下圖所示。
?
圖5-8預(yù)約掛號(hào)流程圖
預(yù)約掛號(hào)界面如下圖所示。
?
圖5-9預(yù)約掛號(hào)管理界面
根據(jù)需求,需要對(duì)病歷記錄進(jìn)行添加、刪除或修改詳情信息。刪除或修改訂單時(shí),系統(tǒng)根據(jù)病歷記錄的狀態(tài)判定為可刪除狀態(tài)下,才會(huì)給出刪除和修改鏈接,點(diǎn)擊刪除鏈接按鈕時(shí),請(qǐng)求到達(dá)后臺(tái),還會(huì)先查詢病歷狀態(tài)再次做出判定能否刪除。點(diǎn)擊修改鏈接按鈕時(shí),會(huì)跳轉(zhuǎn)到修改信息的頁面,重新填寫好數(shù)據(jù)后,數(shù)據(jù)提交到后臺(tái)會(huì)對(duì)數(shù)據(jù)庫中相應(yīng)的記錄做出修改。
添加病歷記錄時(shí),會(huì)給出數(shù)據(jù)填寫的頁面,該頁面根據(jù)填寫好的病歷同樣會(huì)事先發(fā)送Ajax請(qǐng)求查詢病歷編號(hào)是否已存在,數(shù)據(jù)填寫好之后提交到后臺(tái),會(huì)調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫中插入記錄。
病歷記錄頁面設(shè)計(jì)效果如下圖所示。
?
圖5-10病歷記錄界面圖
病歷記錄管理的關(guān)鍵代碼如下。
??@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????service.insert(service.readBody(request.getReader()));
????????return success(1);
????}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
????public Map<String,Object> readBody(BufferedReader reader){
????????BufferedReader br = null;
????????StringBuilder sb = new StringBuilder("");
????????try{
????????????br = reader;
????????????String str;
????????????while ((str = br.readLine()) != null){
????????????????sb.append(str);
????????????}
????????????br.close();
????????????String json = sb.toString();
????????????return JSONObject.parseObject(json, Map.class);
????????}catch (IOException e){
????????????e.printStackTrace();
????????}finally{
????????????if (null != br){
????????????????try{
????????????????????br.close();
????????????????}catch (IOException e){
????????????????????e.printStackTrace();
????????????????}
????????????}
????????}
????????return null;
}
????public void insert(Map<String,Object> body){
????????StringBuffer sql = new StringBuffer("INSERT INTO ");
????????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()){
????????????Object value = entry.getValue();
????????????if (value instanceof String){
????????????????sql.append("'").append(entry.getValue()).append("'").append(",");
????????????}else {
????????????????sql.append(entry.getValue()).append(",");
????????????}
????????}
????????sql.deleteCharAt(sql.length() - 1);
????????sql.append(")");
????????log.info("[{}] - 插入操作:{}",table,sql);
????????Query query = runCountSql(sql.toString());
????????query.executeUpdate();
????}
軟件測(cè)試是軟件開發(fā)完成后必須經(jīng)過的一道程序,它在軟件開發(fā)過程中地位十分重要,需要由專業(yè)的測(cè)試工程師來對(duì)軟件進(jìn)行各方面的測(cè)試,大到功能模塊測(cè)試,小到代碼的單元測(cè)試,這對(duì)測(cè)試工程師來說需要有足夠的耐心和專業(yè)的測(cè)試方案,軟件測(cè)試歸根結(jié)底就是對(duì)軟件的結(jié)構(gòu)和功能的綜合測(cè)評(píng),需要做到結(jié)構(gòu)穩(wěn)定和功能正確,二者兼顧。軟件測(cè)試也叫尋找系統(tǒng)bug的過程,世界上沒有完美無缺、不存在bug的軟件,只能將軟件的bug降到最低最小,來追求極致。
登錄測(cè)試是系統(tǒng)最開始就要進(jìn)行,測(cè)試用戶能否登錄,才能完成后續(xù)的功能操作。
登錄測(cè)試用例表如下所示。
表6-1登錄測(cè)試
| 用例編號(hào) | YL001 | 程序版本 | 1.00 |
| 功能名稱 | 使用者登錄測(cè)試 | 編制人 | 李鐵蛋 |
| 功能描述 | 根據(jù)用戶的登錄情況測(cè)試 | ||
| 用例目的 | 測(cè)試用戶登錄情況是否正確 | ||
| 測(cè)試項(xiàng) | 測(cè)試數(shù)據(jù) | 測(cè)試結(jié)果 | 預(yù)期結(jié)果 |
| 用戶名 | 為空 | 請(qǐng)輸入用戶名 | 請(qǐng)輸入用戶名 |
| 密碼 | 為空 | 請(qǐng)輸入密碼 | 請(qǐng)輸入密碼 |
| 用戶密碼組合 | 用戶名:klouse?密碼 klouses | 用戶與密碼不匹配 | 用戶與密碼不匹配 |
| 用戶密碼組合 | 用戶名 :?klouse?密碼 klouse | 進(jìn)入系統(tǒng) | 正確的用戶名和密碼 登錄系統(tǒng) |
管理員在發(fā)布信息頁面,通過按照預(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 |
| 功能名稱 | 信息發(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ā)布成功 |
管理員在更新信息頁面,通過按照預(yù)先格式更新信息,如果因?yàn)檩斎霑r(shí)候缺少相關(guān)內(nèi)容或者更新的數(shù)據(jù)不符合當(dāng)前規(guī)范的話,就不能更新成功,且有相應(yīng)錯(cuò)誤提示
信息更新測(cè)試用例表如下所示。
表6-1信息更新測(cè)試
| 用例編號(hào) | YL003 | 程序版本 | 1.00 |
| 功能名稱 | 信息更新測(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 | 名稱:名稱1 | 名稱更新成功 | 名稱更新成功 |
| 屬性3 | 內(nèi)容:內(nèi)容1234內(nèi)容 | 內(nèi)容更新成功 | 內(nèi)容更新成功 |
| 全部輸入 | 數(shù)據(jù)均未更改 | 更新成功 | 更新成功 |
管理員在信息頁面,通過點(diǎn)擊數(shù)據(jù)刪除按鈕來刪除該條數(shù)據(jù),如果該數(shù)據(jù)和其他數(shù)據(jù)有關(guān)聯(lián),則提示是否確定刪除。
信息刪除測(cè)試用例表如下所示。
表6-1信息刪除測(cè)試
| 用例編號(hào) | YL004 | 程序版本 | 1.00 |
| 功能名稱 | 信息刪除測(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 | 無任何關(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)是否刪除 |
在經(jīng)過之前的所有的工作之后,通過對(duì)軟件的測(cè)試方法、測(cè)試原則還有典型的測(cè)試用例進(jìn)行全面的、深入的介紹。經(jīng)過對(duì)系統(tǒng)的全面測(cè)試,系統(tǒng)目前所具有的所有功能均成功的實(shí)現(xiàn)并且通過了測(cè)試,整個(gè)系統(tǒng)實(shí)現(xiàn)了基于 Java 開發(fā)的期望。
歡歡寵物醫(yī)院管理系統(tǒng)采用Springboot框架開發(fā),該系統(tǒng)非常完美的集優(yōu)點(diǎn)于一身,成熟、強(qiáng)大、易理解易使用,通過使用這個(gè)結(jié)構(gòu),降低了開發(fā)的難度。本系統(tǒng)實(shí)現(xiàn)了基于Springboot的寵物管理平臺(tái),將數(shù)據(jù)操作維護(hù)的過程轉(zhuǎn)化成電腦操作流程,具體實(shí)現(xiàn)了對(duì)系統(tǒng)人員管理、預(yù)約掛號(hào)數(shù)據(jù)維護(hù)、醫(yī)療器械數(shù)據(jù)維護(hù)、維修上報(bào)數(shù)據(jù)維護(hù)、病歷記錄管理數(shù)據(jù)維護(hù),并提供查詢統(tǒng)計(jì)功能來對(duì)歡歡寵物醫(yī)院管理系統(tǒng)的相關(guān)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,讓使用者能更清晰的掌握運(yùn)營(yíng)情況,幫助使用者進(jìn)行數(shù)據(jù)操作維護(hù),簡(jiǎn)化工作流程,提高工作效率和盈利。
目前完成的歡歡寵物醫(yī)院管理系統(tǒng),還有許多有待改進(jìn)的地方。一個(gè)是功能上的改進(jìn),用戶理應(yīng)可以修改自己的相關(guān)信息,故應(yīng)增設(shè)個(gè)人中心功能;另外,系統(tǒng)如果能提供更多的功能就會(huì)使得系統(tǒng)更加豐富和多樣化,比如數(shù)據(jù)當(dāng)前分析和未來預(yù)測(cè)等。第二個(gè)是技術(shù)上的改進(jìn),由于對(duì)開發(fā)框架不太熟悉,權(quán)限管理這部分,本系統(tǒng)采用一個(gè)Java頁面來規(guī)定好導(dǎo)航欄,即跳轉(zhuǎn)的頁面,這相對(duì)比較不靈活,如果將URL路徑記錄到數(shù)據(jù)庫并實(shí)現(xiàn)增刪查改會(huì)比較好;另外就是對(duì)EasyUI的使用還不夠熟練,視覺效果和界面觀感有待提升,希望日后能對(duì)這個(gè)系統(tǒng)有所改進(jìn)。
參考文獻(xiàn)
[1]王月紅,蔣冀萍.基于Java的煤礦風(fēng)險(xiǎn)預(yù)警與防控系統(tǒng)設(shè)計(jì)[J].煤炭技術(shù),2022,41(03):173-175.
[2]朱珍珠,段華斌,鄧永清,杜丹蕾.基于Java的增值平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].辦公自動(dòng)化,2022,27(05):55-58.
[3]曹凱,王嘉月.基于Java語言的單點(diǎn)登錄在數(shù)字資源整合中的應(yīng)用[J].中國信息化,2022(02):50-51.
[4]孟晶石. 一種查看java字節(jié)碼時(shí)顯示方法調(diào)用關(guān)系圖的方法[P]. 江蘇省:CN109901841B,2022-02-18.
[5]劉在英,楊磊. 一種基于SpringBoot框架的企業(yè)進(jìn)存銷系統(tǒng)的設(shè)計(jì)方法[P]. 山東省:CN114003204A,2022-02-01.
[6]彭永鶴. 一種基于大數(shù)據(jù)與物聯(lián)網(wǎng)的寵物醫(yī)院管理系統(tǒng)[P]. 廣東省:CN113972002A,2022-01-25.
[7]熊柏祥.基于Springboot和Vue框架的考試資源服務(wù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦(理論版),2022,34(01):97-99+103.
[8]霍福華,韓慧.基于SpringBoot微服務(wù)架構(gòu)下前后端分離的MVVM模型[J].電子技術(shù)與軟件工程,2022(01):73-76.
[9]王薩仁圖雅,薛愛蘭.動(dòng)物醫(yī)院管理系統(tǒng)軟件的應(yīng)用技巧[J].當(dāng)代畜禽養(yǎng)殖業(yè),2021(05):63-64.DOI:10.14070/j.cnki.15-1150.2021.05.022.
[10]單樹倩,任佳勛.基于SpringBoot和Vue框架的數(shù)據(jù)庫原理網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2021,17(30):40-41+50.
[11]蘇文強(qiáng),劉紫陽,苗玉恒.基于SpringBoot的缺陷管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].大眾科技,2021,23(10):4-6+10.
[12]He Xinbin,Bai Yongbin,Yue Lisen,Wang Haixiao,Liu Yi. Design and Implementation of Information System Based on Java Technology Platform[J]. Journal of Physics: Conference Series,2021,2033(1).
[13]劉欣,李亮亮,牛聰. 基于Vue和SpringBoot框架的流域監(jiān)管平臺(tái)的研究和應(yīng)用[C]//.第十一屆防汛抗旱信息化論壇論文集.,2021:118-122.
[14]Tian Ming Huang. Design and Implementation of App System for Legal Consulting Based on JAVA Technology[J]. Procedia Computer Science,2020,166(C).
[15]Lei Yu,Cheng Li,Lei Wei,Hu WenYa. Marine biological monitoring and managing system based on Java technology[J]. MIPPR 2019: REMOTE SENSING IMAGE PROCESSING, GEOGRAPHIC INFORMATION SYSTEMS, AND OTHER APPLICATIONS,2020,11432.
[16]SJ/T 11683-2017, Java語言源代碼缺陷控制與測(cè)試指南[S].
[17]張帆. 華陽社區(qū)寵物醫(yī)院管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].東北大學(xué),2016.
[18]ANSI/INCITS/ISO/IEC 19777-2-2008, 信息技術(shù).計(jì)算機(jī)制圖和圖像處理.可擴(kuò)展3D(X3D)語言匯編.第2部分:Java[S].
致謝
在老師的教導(dǎo)和幫助下,本人完成了本篇論文,老師對(duì)論文的內(nèi)容、格式都有非常嚴(yán)格的要求,在我寫畢業(yè)論文的過程中,他多次給出了建議,并定期檢查,對(duì)我們嚴(yán)格要求,幫助我們?cè)谖臋n的編寫上寫到極致和正確,他這種教學(xué)和工作態(tài)度,讓我對(duì)他產(chǎn)生無限的敬佩感和尊敬感。寫畢業(yè)論文的同時(shí),作為應(yīng)屆生,我也忙著找工作中,遇到了很多選擇,感到困惑迷茫的時(shí)候,老師給了我很多意見,感謝老師的耐心開導(dǎo),跟她的聊天我明白了許多。
我還要感謝我的父母,一直以來都非常支持和相信我,在精神和經(jīng)濟(jì)上給了我很多力量,如今我將畢業(yè)走上工作之路,終于能報(bào)答父母的養(yǎng)育教導(dǎo)之恩。還有我大學(xué)期間所有老師和全體同學(xué),遇到問題時(shí),這些老師同學(xué)總是無私地幫助我,真的非常感謝,我也會(huì)加油努力成長(zhǎng)為一個(gè)有用的人。
點(diǎn)贊+收藏+關(guān)注 → 私信領(lǐng)取本源代碼、數(shù)據(jù)庫
總結(jié)
以上是生活随笔為你收集整理的ssm欢欢宠物医院管理系统 毕业设计-附源码171734的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: echarts 柱状图添加排序图标/序号
- 下一篇: 爱的纪念