版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
緒論研究背景目前,很多國(guó)內(nèi)寵物醫(yī)院信息管理一般采用純手工管理。這種方法的弊端在于參與管理的人員文化水平不一,字跡不一,互相之間會(huì)導(dǎo)致信息傳達(dá)不便,而.且紙質(zhì)信息傳載媒體有著一個(gè)很大的弱點(diǎn)就是容易損壞,造成信息丟失。在當(dāng)前的信息化時(shí)代中,任何寵物醫(yī)院,都需要一個(gè)實(shí)用的寵物醫(yī)院信息管理系統(tǒng)來(lái)規(guī)范寵物醫(yī)院信息的管理,這將會(huì)大大提高寵物醫(yī)院的管理水平,優(yōu)化資源,實(shí)現(xiàn)效益的最大化。現(xiàn)在國(guó)內(nèi)也有一些寵物醫(yī)院信息管理管理的軟件,采用的技術(shù)也是多種多樣,但大多數(shù)寵物醫(yī)院信息管理系統(tǒng)主要用于大型寵物醫(yī)院的關(guān)鍵部門。至于小型寵物醫(yī)院,利用寵物醫(yī)院信息管理系統(tǒng)管理日常業(yè)務(wù)的并不多。針對(duì)國(guó)內(nèi)對(duì)寵物醫(yī)院信息管理軟件的巨大需要和基本需要,一個(gè)好的寵物醫(yī)院信息管理軟件,必須功能齊全,操作簡(jiǎn)便,向用戶展示簡(jiǎn)單明了的操作界面。在完善功能的同時(shí)又必須兼顧系統(tǒng)的靈活性,安全性。寵物醫(yī)院管理系統(tǒng)的優(yōu)勢(shì)主要表現(xiàn)在三個(gè)方面:(1)寵物醫(yī)院信息管理無(wú)紙化,環(huán)保又方便。傳統(tǒng)的寵物醫(yī)院信息管理方式,都是經(jīng)由員工手工記錄存檔。這種傳統(tǒng)的紙質(zhì)寵物醫(yī)院信息管理管理,-是會(huì)有很大的體力消耗,二是在精力上也是不小的付出。而無(wú)紙化寵物醫(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ù)帶來(lái)很大的不便。而對(duì)于寵物醫(yī)院信息管理系統(tǒng),只需做好系統(tǒng)數(shù)據(jù)庫(kù)的保護(hù),以上問題可以迎刃而解了。(3)簡(jiǎn)化工作,促進(jìn)其他方面的綜合發(fā)展。由于寵物醫(yī)院信息管理系統(tǒng)的介入運(yùn)行,可以使醫(yī)生騰出更多的時(shí)間,做更多針對(duì)性的個(gè)性化醫(yī)療服務(wù),從而使每個(gè)病人都有機(jī)會(huì)享受更多的服務(wù)。研究現(xiàn)狀隨著人們的生活水平的不斷提高、物質(zhì)生活不斷豐富、精神追求不斷提升,人們也越來(lái)親睞于飼養(yǎng)寵物。近年來(lái)寵物市場(chǎng)的急劇發(fā)展,也讓更多的人們關(guān)注飼養(yǎng)寵物的益處,特別是年輕人工作愈發(fā)繁重的背景下,留守家中的老年人變得越來(lái)越孤獨(dú),飼養(yǎng)寵物不失為排解孤獨(dú)的一種有效途徑。近幾年計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)的飛速發(fā)展,網(wǎng)絡(luò)已經(jīng)成了人們?nèi)粘I钪兄匾冶夭豢缮俚囊徊糠?,很多人想要?gòu)買寵物卻不知道哪種寵物適合自己;想要了解哪些寵物的飼養(yǎng)習(xí)性卻無(wú)處咨詢;想弄清楚哪些寵物適合各年齡段的人卻因?qū)嶓w寵物醫(yī)院路途遙遠(yuǎn)等原因而作罷。于是,歡歡寵物醫(yī)院管理系統(tǒng)應(yīng)運(yùn)而生。由于其方便性、快捷性、可靠性,已成為眾多寵物愛好者經(jīng)常光顧的地方。國(guó)內(nèi)外的歡歡寵物醫(yī)院管理系統(tǒng)眾多,雖然這些系統(tǒng)運(yùn)用的技術(shù)有所不同,但是他們實(shí)現(xiàn)的功能和目的都有一個(gè)共同點(diǎn),對(duì)社會(huì)的影響、給人們帶來(lái)的方便是一樣的。他們都能滿足絕大多數(shù)人的需求,使得分散于各地的寵物飼養(yǎng)者們能找到這樣一個(gè)虛擬的寵物醫(yī)院,使得大家不用再為如何領(lǐng)養(yǎng)、掛號(hào)、愛護(hù)自己的愛寵而發(fā)愁。現(xiàn)在國(guó)內(nèi)外也有很多寵物醫(yī)院信息管理的軟件,采用的技術(shù)也是多種多樣,如基于MySQL和Springboot模式,但大多數(shù)寵物醫(yī)院信息管理系統(tǒng)主要用于大型寵物醫(yī)院的關(guān)鍵部門。至于小型寵物醫(yī)院,利用寵物醫(yī)院信息管理系統(tǒng)組織管理的并不多。針對(duì)國(guó)內(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ù)越來(lái)越困難,一方面是信息不斷更新和增加,不得不讓站點(diǎn)維護(hù)人員經(jīng)常修改頁(yè)面內(nèi)容;另一方面靜態(tài)網(wǎng)頁(yè)不能及時(shí)的與瀏覽者進(jìn)行有效交互,使瀏覽者感覺到乏味。所以開發(fā)動(dòng)態(tài)網(wǎng)頁(yè)是很有必要的。動(dòng)態(tài)網(wǎng)頁(yè)具有交互性,它能根據(jù)用戶的要求和選擇而動(dòng)態(tài)改變和響應(yīng)。動(dòng)態(tài)數(shù)據(jù)訪問就是動(dòng)態(tài)網(wǎng)頁(yè)的特征,當(dāng)瀏覽器訪問服務(wù)器網(wǎng)頁(yè)時(shí),其Web應(yīng)用程序才訪問數(shù)據(jù)庫(kù),實(shí)時(shí)檢索數(shù)據(jù)庫(kù),響應(yīng)客戶要求。本文的組織結(jié)構(gòu)六個(gè)章節(jié)共同組成了本文研究及設(shè)計(jì)內(nèi)容,包括:第一章:緒論。本文章的開頭部分,對(duì)本題目的研究背景和研究意義等一些做文字性的描述。第二章:相關(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ì)說明。第五章:系統(tǒng)實(shí)現(xiàn)。將本系統(tǒng)分為前提的開發(fā)工具介紹和后期的功能代碼實(shí)現(xiàn)。第六章:系統(tǒng)測(cè)試。系統(tǒng)完成后,根據(jù)各個(gè)模塊的測(cè)試用例才對(duì)各個(gè)模塊進(jìn)行功能測(cè)試。相關(guān)技術(shù)介紹開發(fā)技術(shù)說明本系統(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)前后端通信,ElementUI組件庫(kù)使頁(yè)面快速成型,項(xiàng)目前端通過柵格布局實(shí)現(xiàn)響應(yīng)式,可適應(yīng)PC端、平板端、手機(jī)端等不同屏幕大小尺寸的完美布局展示。后端部分:采用springboot作為開發(fā)框架,同時(shí)集成MyBatis、Redis等相關(guān)技術(shù)。B/S體系工作原理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ù)庫(kù)服務(wù)器連接,大量的數(shù)據(jù)實(shí)際存放在數(shù)據(jù)庫(kù)服務(wù)器中;從Web服務(wù)器上下載程序到本地來(lái)執(zhí)行,在下載過程中若遇到與數(shù)據(jù)庫(kù)有關(guān)的指令,由Web服務(wù)器交給數(shù)據(jù)庫(kù)服務(wù)器來(lái)解釋執(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)求全部都是由WebServer完成的。通過該框架結(jié)構(gòu)以及植入于操作系統(tǒng)內(nèi)部的瀏覽器,該結(jié)構(gòu)已經(jīng)成為了當(dāng)今軟件應(yīng)用的主流結(jié)構(gòu)模式。springboot框架介紹Spring框架是Java平臺(tái)上的一種開源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對(duì)編程模型沒有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來(lái)讓它作為EJB(EnterpriseJavaBeans)模型的補(bǔ)充,甚至是替補(bǔ)。Spring框架為開發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)的核心特性,并通過依賴注入實(shí)現(xiàn)控制反轉(zhuǎn)來(lái)實(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注解來(lái)配置對(duì)象,開發(fā)者可以通過依賴查找或依賴注入來(lái)獲得對(duì)象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時(shí)運(yùn)行時(shí)可配置;AOP框架主要針對(duì)模塊之間的交叉關(guān)注點(diǎn)進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無(wú)法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務(wù)管理、遠(yuǎn)程訪問等功能均可以通過使用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)可以通過事務(wù)模板、XML或Java注解進(jìn)行事務(wù)配置,并且事務(wù)框架集成了消息傳遞和緩存等功能。Spring的數(shù)據(jù)訪問框架解決了開發(fā)人員在應(yīng)用程序中使用數(shù)據(jù)庫(kù)時(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簡(jiǎn)介MySQL是一個(gè)開放的、快速的、多線程的SQL關(guān)系型數(shù)據(jù)庫(kù)服務(wù)器。由于其體積小、免費(fèi)、運(yùn)行速度快以及可以通過相關(guān)免費(fèi)的軟件來(lái)對(duì)MySql數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù)結(jié)構(gòu)信息等等優(yōu)點(diǎn)。受廣大中等、小型企業(yè)所喜愛并占據(jù)了很大地位。本系統(tǒng)在數(shù)據(jù)庫(kù)方面選用MySQL,并通過Nacivat來(lái)進(jìn)行MySql數(shù)據(jù)庫(kù)的管理。在Mysql的安裝過程中,最需要注意的就是數(shù)據(jù)庫(kù)的編碼問題,所以在安裝數(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)用開發(fā),常用來(lái)為網(wǎng)頁(yè)添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來(lái)實(shí)現(xiàn)自身的功能的。1.8.1是一種解釋性腳本語(yǔ)言(代碼不進(jìn)行預(yù)編譯)。1.8.2主要用來(lái)向HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)頁(yè)面添加交互行為。1.8.3可以直接嵌入HTML頁(yè)面,但寫成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。1.8.4跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行(如Windows、Linux、Mac、Android、iOS等)。1.8.5JavaScript腳本語(yǔ)言同其他語(yǔ)言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運(yùn)算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來(lái)處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
系統(tǒng)分析可行性分析法律可行性分析開發(fā)軟件有沒有觸犯法律,這涉及到軟件或者系統(tǒng)能不能發(fā)布的問題。如果觸犯了法律,就必將會(huì)受到法律的制裁。常見法律問題就是軟件抄襲問題,若是抄襲別人軟件,將會(huì)受到嚴(yán)厲懲罰。技術(shù)可行性分析軟件產(chǎn)業(yè)經(jīng)過多年的發(fā)展,現(xiàn)在已經(jīng)達(dá)到了很大的規(guī)模,從事軟件開發(fā)的專業(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ì)可行性分析開發(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ù)庫(kù)中。登錄:使用歡歡寵物醫(yī)院管理系統(tǒng)前是需要用戶登錄個(gè)人賬號(hào)。醫(yī)生介紹:用戶登錄寵物醫(yī)院管理系統(tǒng)首頁(yè)時(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管理員用例圖業(yè)務(wù)流程分析系統(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ī)制。數(shù)據(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)設(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ù)訪問層。圖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ì)用戶管理針對(duì)所有用戶和管理員。未注冊(cè)用戶點(diǎn)擊注冊(cè),進(jìn)入注冊(cè)頁(yè)面填寫新用戶信息,得到自定義生成賬號(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)證成功則頁(yè)面直接顯示登錄用戶昵稱代表登錄成功,否則返回用戶登錄界面。用戶登錄活動(dòng)圖如下圖。圖4-4用戶登錄活動(dòng)圖用戶登錄后,進(jìn)入功能頁(yè)面,可對(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)圖數(shù)據(jù)庫(kù)設(shè)計(jì)歡歡寵物醫(yī)院管理系統(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圖,更加直觀的告訴開發(fā)人員系統(tǒng)的各個(gè)數(shù)據(jù)的屬性,各個(gè)數(shù)據(jù)之間的聯(lián)系,各個(gè)數(shù)據(jù)的類型。能通過該模型更直觀地了解數(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è)表,用戶注冊(cè)表、管理員表、招聘員工表、寵物信息表、遺棄寵物表、活動(dòng)中心表、會(huì)員信息表、疫苗藥物表、志愿者申請(qǐng)表等。表結(jié)構(gòu)如下所示。registered_user表:名稱類型長(zhǎng)度不是null主鍵注釋registered_user_idint11是是注冊(cè)用戶IDuser_namevarchar64是否用戶名examine_statevarchar16是否審核狀態(tài)recommendint11是否智能推薦user_idint11是否用戶IDcreate_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間online_consultation表:名稱類型長(zhǎng)度不是null主鍵注釋online_consultation_idint11是是在線咨詢IDdoctor_job_numberint11否否醫(yī)生工號(hào)name_of_doctorvarchar64否否醫(yī)生姓名departmentvarchar64否否科室user_nameint11否否用戶名pet_varietyvarchar64否否寵物品種consulting_questionstext0否否咨詢問題doctor_replytext0否否醫(yī)生回復(fù)recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間medical_record表:名稱類型長(zhǎng)度不是null主鍵注釋medical_record__idint11是是病歷記錄IDorder_numbervarchar64否否訂單號(hào)doctor_job_numberint11否否醫(yī)生工號(hào)name_of_doctorvarchar64否否醫(yī)生姓名departmentvarchar64否否科室user_nameint11否否用戶名pet_varietyvarchar64否否寵物品種pet_agevarchar64否否寵物年齡symptom_descriptiontext0否否癥狀描述clinical_diagnosistext0否否臨床診斷drug_prescriptiontext0否否藥物處方recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間medical_apparatus_and_instruments表:名稱類型長(zhǎng)度不是null主鍵注釋medical_apparatus_and_instruments_idint11是是醫(yī)療器械IDdevice_numbervarchar64否否器械編號(hào)device_namevarchar64否否器械名稱purchase_datedate0否否購(gòu)入日期manufactorvarchar64否否廠家statevarchar64否否狀態(tài)maintenance_recordtext0否否維修記錄recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間maintenance_report表:名稱類型長(zhǎng)度不是null主鍵注釋maintenance_report_idint11是是維修上報(bào)IDdevice_numbervarchar64否否器械編號(hào)device_namevarchar64否否器械名稱related_picturesvarchar255否否相關(guān)圖片doctor_job_numberint11否否醫(yī)生工號(hào)fault_descriptiontext0否否故障描述examine_statevarchar16是否審核狀態(tài)examine_replyvarchar255否否審核回復(fù)recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間abandoned_pets表:名稱類型長(zhǎng)度不是null主鍵注釋have_an_appointment_with_a_doctor_idint11是是預(yù)約掛號(hào)IDorder_numbervarchar64否否訂單號(hào)doctor_job_numberint11否否醫(yī)生工號(hào)name_of_doctorvarchar64否否醫(yī)生姓名departmentvarchar64否否科室registration_feevarchar64否否掛號(hào)費(fèi)user_nameint11否否用戶名pet_varietyvarchar64否否寵物品種pet_agevarchar64否否寵物年齡pet_sexvarchar64否否寵物性別contact_numbervarchar64否否聯(lián)系電話pay_statevarchar16是否支付狀態(tài)pay_typevarchar16否否支付類型recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間doctor_introduction表:名稱類型長(zhǎng)度不是null主鍵注釋doctor_introduction_idint11是是醫(yī)生介紹IDdoctor_job_numberint11否否醫(yī)生工號(hào)name_of_doctorvarchar64否否醫(yī)生姓名gendervarchar64否否性別agevarchar64否否年齡photovarchar255否否照片departmentvarchar64否否科室registration_feeint11否否掛號(hào)費(fèi)areas_of_expertisetext0否否擅長(zhǎng)領(lǐng)域scheduling_timetext0否否排班時(shí)間doctor_introductionlongtext0否否醫(yī)生介紹hitsint11是否點(diǎn)擊數(shù)praise_lenint11是否點(diǎn)贊數(shù)recommendint11是否智能推薦create_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間doctor表:名稱類型長(zhǎng)度不是null主鍵注釋doctor_idint11是是醫(yī)生IDdoctor_job_numbervarchar64是否醫(yī)生工號(hào)name_of_doctorvarchar64否否醫(yī)生姓名examine_statevarchar16是否審核狀態(tài)recommendint11是否智能推薦user_idint11是否用戶IDcreate_timedatetime0是否創(chuàng)建時(shí)間update_timetimestamp0是否更新時(shí)間系統(tǒng)實(shí)現(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ù)庫(kù)瀏覽器界面工具M(jìn)ySQL谷歌Photoshop5.76.02016注冊(cè)模塊未注冊(cè)用戶在用戶注冊(cè)界面uerRegister.jsp,輸入新用戶信息,點(diǎn)擊注冊(cè)后,新用戶信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用addUser(user)方法,通過userDAOImp向數(shù)據(jù)庫(kù)用戶表插入用戶信息,由于用戶賬號(hào)是自動(dòng)生成的,若成功則反饋?zhàn)?cè)成功,并提示新用戶的用戶賬號(hào);若失敗則回到登錄界面,并顯示登錄失敗。注冊(cè)界面如下所示。圖5-1注冊(cè)界面用戶注冊(cè)關(guān)鍵代碼如下所示。/***注冊(cè)*@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;/***上次登錄時(shí)間:*/@Basic@Column(name="login_time")privateTimestamploginTime;/***手機(jī)號(hào)碼:[0,11]用戶的手機(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;/***用戶名:[0,16]用戶登錄時(shí)所用的賬戶名稱*/@Basic@Column(name="username")privateStringusername;/***昵稱:[0,16]*/@Basic@Column(name="nickname")privateStringnickname;/***密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成*/@Basic@Column(name="password")privateStringpassword;/***郵箱:[0,64]用戶的郵箱,用于找回密碼時(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;}登錄/注銷模塊用戶在首頁(yè)點(diǎn)擊登錄,進(jìn)入用戶登錄界面uerLogin.jsp,輸入用戶賬號(hào)和密碼,點(diǎn)擊登錄,用戶賬號(hào)和密碼信息由界面?zhèn)魅肟刂茖觰serAction,調(diào)用userLogin(user)方法,通過userDAOImp向數(shù)據(jù)庫(kù)用戶表搜索該用戶賬號(hào)與密碼,將最終結(jié)果反饋到前端。若成功則回到首頁(yè);用戶成功登錄,若失敗則回到登錄界面,并顯示登錄失敗。用戶點(diǎn)擊注銷,清空瀏覽器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è)用戶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)){//存儲(chǔ)Token到數(shù)據(jù)庫(kù)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,"賬號(hào)或密碼不正確");}}用戶模塊個(gè)人資料模塊登錄用戶在首頁(yè)點(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ù)庫(kù)的用戶表搜索當(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ù)庫(kù)用戶表更新用戶信息,若成功則反饋?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寵物百科界面醫(yī)生介紹模塊用戶在登錄狀態(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)鍵代碼如下所示。/***修改密碼*@paramdata*@paramrequest*@return*/@PostMapping("change_password")publicMap<String,Object>change_password(@RequestBodyMap<String,String>data,HttpServletRequestrequest){//根據(jù)Token獲取UserIdStringtoken=request.getHeader("x-auth-token");IntegeruserId=tokenGetUserId(token);//根據(jù)UserId和舊密碼獲取用戶Map<String,String>query=newHashMap<>();Stringo_password=data.get("o_password");query.put("user_id",String.valueOf(userId));query.put("password",service.encryption(o_password));Queryret=service.count(query,service.readConfig(request));Listlist=ret.getResultList();Objects=list.get(0);intcount=Integer.parseInt(list.get(0).toString());if(count>0){//修改密碼Map<String,Object>form=newHashMap<>();form.put("password",service.encryption(data.get("password")));service.update(query,service.readConfig(request),form);returnsuccess(1);}returnerror(10000,"密碼修改失敗!");}醫(yī)生管理模塊根據(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)到修改信息的頁(yè)面,重新填寫好數(shù)據(jù)后,數(shù)據(jù)提交到后臺(tái)會(huì)對(duì)數(shù)據(jù)庫(kù)中相應(yīng)的記錄做出修改。添加醫(yī)生時(shí),會(huì)給出數(shù)據(jù)填寫的頁(yè)面,該頁(yè)面根據(jù)填寫好的醫(yī)生編號(hào)同樣會(huì)事先發(fā)送Ajax請(qǐng)求查詢編號(hào)是否已存在,數(shù)據(jù)填寫好之后提交到后臺(tái),會(huì)調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫(kù)中插入記錄。醫(yī)生頁(yè)面設(shè)計(jì)效果如下圖所示。圖5-7醫(yī)生管理界面預(yù)約掛號(hào)管理模塊預(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í)來(lái)確定讀到的數(shù)據(jù)與提交時(shí)的數(shù)據(jù)是否一致,提交后修改版本標(biāo)識(shí),不一致時(shí)可以采取丟棄和再次嘗試的策略。在數(shù)據(jù)庫(kù)疫苗表(對(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ì)信息的頁(yè)面時(shí)便會(huì)判斷掛號(hào)的狀態(tài),若疫苗狀態(tài)為可預(yù)約,則會(huì)顯示預(yù)約的鏈接按鈕。在用戶點(diǎn)擊預(yù)約按鈕時(shí),會(huì)先通過攔截器判斷用戶是否登錄,若未登錄,會(huì)跳轉(zhuǎn)至登錄頁(yè)面,提示用戶先登錄,若為登錄用戶就會(huì)跳轉(zhuǎn)至填寫預(yù)約信息的頁(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)到修改信息的頁(yè)面,重新填寫好數(shù)據(jù)后,數(shù)據(jù)提交到后臺(tái)會(huì)對(duì)數(shù)據(jù)庫(kù)中相應(yīng)的記錄做出修改。添加病歷記錄時(shí),會(huì)給出數(shù)據(jù)填寫的頁(yè)面,該頁(yè)面根據(jù)填寫好的病歷同樣會(huì)事先發(fā)送Ajax請(qǐng)求查詢病歷編號(hào)是否已存在,數(shù)據(jù)填寫好之后提交到后臺(tái),會(huì)調(diào)用相關(guān)服務(wù)在數(shù)據(jù)庫(kù)中插入記錄。病歷記錄頁(yè)面設(shè)計(jì)效果如下圖所示。圖5-10病歷記錄界面圖病歷記錄管理的關(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è)試是軟件開發(fā)完成后必須經(jīng)過的一道程序,它在軟件開發(fā)過程中地位十分重要,需要由專業(yè)的測(cè)試工程師來(lái)對(duì)軟件進(jìn)行各方面的測(cè)試,大到功能模塊測(cè)試,小到代碼的單元測(cè)試,這對(duì)測(cè)試工程師來(lái)說需要有足夠的耐心和專業(yè)的測(cè)試方案,軟件測(cè)試歸根結(jié)底就是對(duì)軟件的結(jié)構(gòu)和功能的綜合測(cè)評(píng),需要做到結(jié)構(gòu)穩(wěn)定和功能正確,二者兼顧。軟件測(cè)試也叫尋找系統(tǒng)bug的過程,世界上沒有完美無(wú)缺、不存在bug的軟件,只能將軟件的bug降到最低最小,來(lái)追求極致。測(cè)試過程登錄測(cè)試登錄測(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)信息錄入測(cè)試管理員在發(fā)布信息頁(yè)面,通過按照預(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ā)布成功信息更新測(cè)試管理員在更新信息頁(yè)面,通過按照預(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ù)均未更改更新成功更新成功信息刪除測(cè)試管理員在信息頁(yè)面,通過點(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功能名稱信息刪除測(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)過之前的所有的工作之后,通過對(duì)軟件的測(cè)試方法、測(cè)試原則還有典型的測(cè)試用例進(jìn)行全面的、深入的介紹。經(jīng)過對(duì)系統(tǒng)的全面測(cè)試,系統(tǒng)目前所具有的所有功能均成功的實(shí)現(xiàn)并且通過了測(cè)試,整個(gè)系統(tǒng)實(shí)現(xiàn)了基于
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度森林資源可持續(xù)開發(fā)與木材購(gòu)銷合作協(xié)議4篇
- 2025版學(xué)校宿管員招聘、培訓(xùn)及考核合同2篇
- 二零二五年版在線教育平臺(tái)合同欺詐風(fēng)險(xiǎn)控制與賠償協(xié)議3篇
- 基于2025年度預(yù)算的科技創(chuàng)新平臺(tái)建設(shè)合同
- 2025個(gè)人勞動(dòng)合同示范文本及勞動(dòng)法解讀4篇
- 二零二五年度健康養(yǎng)老產(chǎn)業(yè)合作框架協(xié)議4篇
- 2025年陜西勞動(dòng)合同解除與終止操作規(guī)范及案例分析3篇
- 二零二五年度國(guó)際美食餐廳經(jīng)理聘用合同范本3篇
- 2025年度魚塘承包與農(nóng)業(yè)科技推廣合同4篇
- 2025版文化創(chuàng)意產(chǎn)業(yè)貸款擔(dān)保協(xié)議范本9篇
- 開展課外讀物負(fù)面清單管理的具體實(shí)施舉措方案
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025-2030年中國(guó)洗衣液市場(chǎng)未來(lái)發(fā)展趨勢(shì)及前景調(diào)研分析報(bào)告
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(解析版)
- 北京市房屋租賃合同自行成交版北京市房屋租賃合同自行成交版
- 《AM聚丙烯酰胺》課件
- 系統(tǒng)動(dòng)力學(xué)課件與案例分析
- 《智能網(wǎng)聯(lián)汽車智能傳感器測(cè)試與裝調(diào)》電子教案
- 客戶分級(jí)管理(標(biāo)準(zhǔn)版)課件
- GB/T 32399-2024信息技術(shù)云計(jì)算參考架構(gòu)
- 人教版數(shù)學(xué)七年級(jí)下冊(cè)數(shù)據(jù)的收集整理與描述小結(jié)
評(píng)論
0/150
提交評(píng)論