(附源码)springboot自律健身房会员管理系统 毕业设计456466
自律健身房會(huì)員管理系統(tǒng)
摘?要
大數(shù)據(jù)時(shí)代下,數(shù)據(jù)呈爆炸式地增長(zhǎng)。為了迎合信息化時(shí)代的潮流和信息化安全的要求,利用互聯(lián)網(wǎng)服務(wù)于其他行業(yè),促進(jìn)生產(chǎn),已經(jīng)是成為一種勢(shì)不可擋的趨勢(shì)。在健身房會(huì)員管理的要求下,開(kāi)發(fā)一款整體式結(jié)構(gòu)的健身房會(huì)員管理系統(tǒng),將復(fù)雜的系統(tǒng)進(jìn)行拆分,能夠?qū)崿F(xiàn)對(duì)需求的變化快速響應(yīng)、系統(tǒng)穩(wěn)定性的保障,能保證平臺(tái)可持續(xù)、規(guī)模化發(fā)展的要求。
本系統(tǒng)采取面對(duì)對(duì)象的開(kāi)發(fā)模式進(jìn)行軟件的開(kāi)發(fā)和硬體的架設(shè),能很好的滿足實(shí)際使用的需求,完善了對(duì)應(yīng)的軟體架設(shè)以及程序編碼的工作,采取MySQL作為后臺(tái)數(shù)據(jù)的主要存儲(chǔ)單元,采用Spring boot框架、JSP技術(shù)、Ajax技術(shù)進(jìn)行業(yè)務(wù)系統(tǒng)的編碼及其開(kāi)發(fā),實(shí)現(xiàn)了本系統(tǒng)的全部功能。自律健身房會(huì)員管理系統(tǒng)解決了傳統(tǒng)管理方式所帶來(lái)的人力、物力和時(shí)間上的虛耗和交流深度的限定,同時(shí)完成自律健身房會(huì)員管理系統(tǒng)的基本功能:用戶管理、員工管理、倉(cāng)庫(kù)管理,器械管理、健身卡、教練招聘,收支統(tǒng)計(jì)管理。
關(guān)鍵詞:健身房管理;整體式結(jié)構(gòu);Springboot框架;MySQL數(shù)據(jù)庫(kù)
Self discipline gym member management system
Abstract
In the era of big data, data is growing explosively. In order to meet the trend of the information age and the requirements of information security, using the Internet to serve other industries and promote production has become an irresistible trend. Under the requirements of gym management, a gym management system with integral structure is developed to split the complex system, which can realize rapid response to demand changes, guarantee system stability, and ensure the sustainable and large-scale development of the platform.
The system adopts the object-oriented development mode for software development and hardware erection, which can well meet the needs of actual use, improve the corresponding software erection and program coding, take MySQL as the main storage unit of background data, and use spring boot framework, JSP technology and Ajax technology for business system coding and development, All the functions of the system are realized. The self-discipline gym member management system solves the waste of human, material and time and the limitation of communication depth brought by the traditional management mode. At the same time, it completes the basic functions of the self-discipline gym member management system: user management, employee management, warehouse management, equipment management, fitness card, coach recruitment, revenue and expenditure statistics management.
Key words: gym management; Integral structure; Springboot framework; The MySQL database
目 ?錄
第1章 緒論
1.1?研究背景與意義
1.2?開(kāi)發(fā)現(xiàn)狀
1.3?論文組成結(jié)構(gòu)
第2章 相關(guān)技術(shù)介紹
2.1 J2EE技術(shù)
2.2 MySQL描述
2.3 Springboot框架
2.4 MVVM模式
2.5 B/S結(jié)構(gòu)
2.6?B/S體系工作原理
第3章 系統(tǒng)分析
3.1?可行性分析
3.1.1?經(jīng)濟(jì)可行性
3.1.2?操作可行性
3.1.3?需求可行性
3.2?需求分析
3.3?系統(tǒng)業(yè)務(wù)流程分析
3.4?系統(tǒng)數(shù)據(jù)流程分析
第4章 系統(tǒng)設(shè)計(jì)
4.1?系統(tǒng)架構(gòu)設(shè)計(jì)
4.2?系統(tǒng)功能結(jié)構(gòu)
4.3?功能模塊設(shè)計(jì)
4.4?數(shù)據(jù)庫(kù)設(shè)計(jì)
4.4.1?概念模型設(shè)計(jì)
4.4.2?邏輯結(jié)構(gòu)設(shè)計(jì)
4.4.3?數(shù)據(jù)庫(kù)連接設(shè)計(jì)
第5章 系統(tǒng)實(shí)現(xiàn)
5.1?登錄模塊的實(shí)現(xiàn)
5.2?用戶首頁(yè)模塊的實(shí)現(xiàn)
5.3?倉(cāng)庫(kù)管理模塊的實(shí)現(xiàn)
5.4?會(huì)員管理模塊的實(shí)現(xiàn) 21
5.5?員工管理模塊的實(shí)現(xiàn) 24
5.6?健身卡管理模塊的實(shí)現(xiàn) 26
5.7?運(yùn)動(dòng)器材管理模塊的實(shí)現(xiàn) 29
5.8教練招聘管理模塊的實(shí)現(xiàn) 32
5.9收支統(tǒng)計(jì)管理模塊的實(shí)現(xiàn) 35
第6章 系統(tǒng)測(cè)試
6.1?測(cè)試目的
6.2?測(cè)試用例
6.2.1?登錄測(cè)試
6.2.2?注冊(cè)測(cè)試
6.2.3?留言測(cè)試
6.2.4?新聞資訊管理測(cè)試
6.2.5?課程管理測(cè)試
6.2.6?課程選課測(cè)試
6.3?測(cè)試結(jié)果
第7章 總結(jié)與展望
參考文獻(xiàn)
致謝
健身房會(huì)員管理如果采用純?nèi)斯さ墓ぷ髁鞒?#xff0c;會(huì)帶來(lái)很大的不便和不必要的成本投入。如果其中的一步出現(xiàn)差錯(cuò),就會(huì)帶來(lái)很大的麻煩,從而增加了會(huì)員管理費(fèi)用。另一方面,健身房的健身器材和工具繁多,其間事物定會(huì)大力耗費(fèi)人力物力,導(dǎo)致資源的浪費(fèi),公司的利潤(rùn)達(dá)不到最大的優(yōu)化。如果沒(méi)有一套完善的會(huì)員管理系統(tǒng),很難有發(fā)展成大型的健身房。由此,鑒于以上種種情況,本系統(tǒng)應(yīng)運(yùn)而生。本系統(tǒng)針對(duì)健身房會(huì)員業(yè)務(wù)設(shè)計(jì)而成,操作人員只需輸入一些簡(jiǎn)單的漢字、數(shù)字,即可完成操作,達(dá)到自己的目標(biāo)。可以實(shí)現(xiàn)健身的自動(dòng)化與智能化,方便快捷,節(jié)省時(shí)間,大大提高了健身房的效率,方便了客戶,也給企業(yè)帶來(lái)了效益的最大化實(shí)現(xiàn)。所以,健身房急需這樣一個(gè)會(huì)員管理信息系統(tǒng)。
經(jīng)調(diào)查,我國(guó)當(dāng)前健身房擁有超過(guò)數(shù)萬(wàn)家,規(guī)模有大也有小,相對(duì)比較出名有中體倍力,青鳥(niǎo)等健身房,他們擁有學(xué)習(xí)國(guó)外的先進(jìn)健身房管理經(jīng)驗(yàn)以及利用Inter網(wǎng)等先進(jìn)計(jì)算機(jī)技術(shù),使得自己的業(yè)務(wù)由單一的通過(guò)健身房平臺(tái)面向廣大客戶上升到了客戶足不出戶就可以享受到專業(yè)新聞的指導(dǎo)和科學(xué)健身知識(shí),方便了了客戶的利益也在同行業(yè)中成為了佼佼者,他們的成功不僅歸功于科學(xué)管理還要?dú)w功于計(jì)算機(jī)網(wǎng)絡(luò)帶來(lái)的便利,這是利用計(jì)算機(jī)軟件及網(wǎng)絡(luò)技術(shù)擴(kuò)大其業(yè)務(wù)成功的典范,但是國(guó)內(nèi)健身房應(yīng)用這種模式的運(yùn)營(yíng)的又有多少呢?其實(shí)并不多,大多健身房的會(huì)員管理模式和業(yè)務(wù)交流還停留在傳統(tǒng)的,低效率的用人管理的階段,人工管理模式已經(jīng)越來(lái)越不能適應(yīng)現(xiàn)代管理的需求,一方面由于每天的客戶量特別大,手工方式難免會(huì)在業(yè)務(wù)及財(cái)務(wù)上出現(xiàn)漏洞,給客戶帶來(lái)了不必要的麻煩,同時(shí)也給健身房的經(jīng)營(yíng)帶來(lái)了種種弊端;另一方面管理者也經(jīng)常因?yàn)闀?huì)員管理和財(cái)務(wù)管理而“頭痛”,隨著健身房的規(guī)模不斷擴(kuò)大,以上問(wèn)題會(huì)越來(lái)越突出,必將會(huì)成為健身房發(fā)展的絆腳石。無(wú)論規(guī)模大小,各個(gè)健身房為了更好的生存和發(fā)展就必須在會(huì)員管理模式上引進(jìn)先進(jìn)的管理軟件系統(tǒng),從而在會(huì)員管理,健身管理等方面提高和改善了手工方式所不能達(dá)到的效果和價(jià)值。
將計(jì)算機(jī)管理應(yīng)用在健身房的會(huì)員管理中也是近年來(lái)隨著計(jì)算機(jī)被廣泛的應(yīng)用于各行各業(yè)之中的一個(gè)典范。健身房會(huì)員管理不僅集成了公司發(fā)展和管理的各主要部分(會(huì)員、器材、健身卡、收支統(tǒng)計(jì)),更代表了先進(jìn)的管理思想和管理方式作為健身房會(huì)員現(xiàn)代化管理的重要工具,它在我國(guó)健身房將得到越來(lái)越廣泛的應(yīng)用。
根據(jù)市場(chǎng)調(diào)研得到的信息數(shù)據(jù),結(jié)合國(guó)內(nèi)外前沿研究,利用相關(guān)系統(tǒng)開(kāi)發(fā)和設(shè)計(jì)方法,最終設(shè)計(jì)出自律健身房會(huì)員管理系統(tǒng)。
本文共有七章,如下所示。
第一章概述了自律健身房會(huì)員管理系統(tǒng)的研究目的和意義;精煉地總結(jié)了國(guó)內(nèi)外在倉(cāng)儲(chǔ)領(lǐng)域的研究情況和未來(lái)的研究趨勢(shì),最后給出了論文的組成結(jié)構(gòu)。
第二章簡(jiǎn)要概述了本文所用的開(kāi)發(fā)技術(shù)和工具。
第三章簡(jiǎn)要對(duì)系統(tǒng)各業(yè)務(wù)流程進(jìn)行需求分析、可行性分析。
第四章對(duì)自律健身房會(huì)員管理系統(tǒng)進(jìn)行設(shè)計(jì)。
第五章對(duì)自律健身房會(huì)員管理系統(tǒng)進(jìn)行實(shí)現(xiàn),并貼出相關(guān)頁(yè)面截圖,語(yǔ)言描述出具體功能實(shí)現(xiàn)的操作方法。
第六章對(duì)自律健身房會(huì)員管理系統(tǒng)采用測(cè)試用例的方式來(lái)對(duì)一些主要功能模塊測(cè)試,最后得出測(cè)試結(jié)果。
第七章總結(jié)全文并對(duì)未來(lái)的研究做出展望。
人可以掌握多門(mén)外語(yǔ),而一個(gè)計(jì)算機(jī)科學(xué)家精通的大多是編程語(yǔ)言,它不是人類的自然語(yǔ)言,比如C語(yǔ)言、Java、Perl等等。由于不同的公司開(kāi)發(fā)出的“中間件”不夠規(guī)范,所以Sun公司推出J2EE,用這個(gè)標(biāo)準(zhǔn)來(lái)解決弊病。它提供了良好的機(jī)制,讓每個(gè)層次允許與之相對(duì)的服務(wù)器、組件運(yùn)行,使得系統(tǒng)的搭建穩(wěn)定可用、開(kāi)發(fā)高效、維護(hù)方便。
現(xiàn)在MySQL數(shù)據(jù)庫(kù)在網(wǎng)絡(luò)上它可以支撐許多個(gè)用戶,而且也可以適應(yīng)客服機(jī)和服務(wù)器的部署或者配置等,我們這里的服務(wù)器和客戶機(jī)其實(shí)就是一種軟件上的概念,并且我們使用的計(jì)算機(jī)硬件也與他們不存在一一對(duì)應(yīng)的關(guān)系[3]。
MySQL是一款非常流行的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它的出現(xiàn)一直都是佼佼者,它不僅功能非常強(qiáng)大,而且使用起來(lái)非常方便,并且MySQL的跨平臺(tái)能力也很好,軟件開(kāi)發(fā)人員非常喜歡它的這些強(qiáng)大的優(yōu)點(diǎn)。不同于其他關(guān)系型數(shù)據(jù)庫(kù),對(duì)于數(shù)據(jù)庫(kù)的管理它有著自己的一套方案,通過(guò)對(duì)用戶設(shè)定相應(yīng)的權(quán)限和角色來(lái)達(dá)到對(duì)數(shù)據(jù)庫(kù)的管理。由此可見(jiàn),MySQL是一個(gè)能夠適用于吞吐量高,可靠性高,效率高的一款數(shù)據(jù)庫(kù)管理軟件[4]。
優(yōu)點(diǎn)一:MySQL中對(duì)于不同身份的用戶都設(shè)定其不同的權(quán)限來(lái)完成不同的業(yè)務(wù)邏輯,這使得MySQL在安全和完整性遠(yuǎn)遠(yuǎn)超出了其他關(guān)系型數(shù)據(jù)庫(kù)。
優(yōu)點(diǎn)二:對(duì)于那些動(dòng)畫(huà)、圖形和聲音的數(shù)據(jù)類型MySQL也可以支持,這說(shuō)明多數(shù)據(jù)類型MySQL也是可以支持的。
優(yōu)點(diǎn)三:MySQL還可以做到多個(gè)平臺(tái)的開(kāi)發(fā),軟件開(kāi)發(fā)的多種編程語(yǔ)言都可以實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫(kù)的操作[5] [6]。
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ò)依賴注入實(shí)現(xiàn)控制反轉(zhuǎn)來(lái)實(shí)現(xiàn)管理對(duì)象生命周期容器化,利用面向切面編程進(jìn)行聲明式的事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪問(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文件或類上特定Java注解來(lái)配置對(duì)象,開(kāi)發(fā)者可以通過(guò)依賴查找或依賴注入來(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的集成,也可以滿足基本需求。Spring框架下的事務(wù)管理、遠(yuǎn)程訪問(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ù)訪問(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ù)訪問(wèn)框架中提供支持,同時(shí)還可以與Spring的事務(wù)管理一起使用,為數(shù)據(jù)訪問(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。
MVVM模式是常用的開(kāi)發(fā)模式,主要是在代碼實(shí)現(xiàn)上將其分為M層、V層和C層。
視圖(View)代表用戶交互界面,一個(gè) Web 應(yīng)用就可能有很多的界面,在 MVVM?模式中,視圖僅僅處理的只有數(shù)據(jù)采集、處理,還有用戶的請(qǐng)求, 并不包括業(yè)務(wù)流程的處理,業(yè)務(wù)流程由模型(Model)來(lái)處理。
模型(Model)就是業(yè)務(wù)流程/狀態(tài)的處理及業(yè)務(wù)規(guī)則的制定。模型處理業(yè)務(wù)流程的過(guò)程其它層是無(wú)法看見(jiàn)了的,它就像黑箱子,在接受視圖請(qǐng)求的數(shù)據(jù)之后,然后返回最終的處理結(jié)果。MVVM?最主要的核心就是業(yè)務(wù)模型的設(shè)計(jì),一個(gè)典型的應(yīng)用例子就是目前流行的 EJB 模型,它從應(yīng)用技術(shù)實(shí)現(xiàn)的角度對(duì)模型做了進(jìn)一步的劃分,以便充分利用現(xiàn)有的組件,但是它不能作為應(yīng)用設(shè)計(jì)模型的框架。
控制器(Controller)可以理解為接收用戶的請(qǐng)求,然后視圖和模型匹配在一起,一起再完成用戶請(qǐng)求。它有非常明顯的作用在劃分控制層上,可以很清晰地告訴你,它就是一個(gè)分發(fā)器,選擇什么樣的模型、視圖,可以完成用戶的什么樣的請(qǐng)求。控制層不做所有的數(shù)據(jù)處理,比如說(shuō):用戶點(diǎn)擊一個(gè)連接,控制層接受到請(qǐng)求之后,并不處理業(yè)務(wù)信息,它只是向模型傳遞用戶的信息,同時(shí)告訴模型做什么,然后選擇符合需求的視圖返回給用戶。
B/S(Browser/Server)比前身架構(gòu)更為省事的架構(gòu)。它借助Web server完成數(shù)據(jù)的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達(dá)到“瘦身”效果, 不需要考慮不停裝軟件的問(wèn)題。
B/S架構(gòu)采取瀏覽器請(qǐng)求,服務(wù)器響應(yīng)的工作模式。
用戶可以通過(guò)瀏覽器去訪問(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ù)器又返回給用戶。在這種結(jié)構(gòu)中,將許許多多的網(wǎng)連接到一塊,形成一個(gè)巨大的網(wǎng),即全球網(wǎng)。而各個(gè)企業(yè)可以在此結(jié)構(gòu)的基礎(chǔ)上建立自己的Internet。
在 B/S 模式中,用戶是通過(guò)瀏覽器針對(duì)許多分布于網(wǎng)絡(luò)上的服務(wù)器進(jìn)行請(qǐng)求訪問(wèn)的,瀏覽器的請(qǐng)求通過(guò)服務(wù)器進(jìn)行處理,并將處理結(jié)果以及相應(yīng)的信息返回給瀏覽器,其他的數(shù)據(jù)加工、請(qǐng)求全部都是由Web Server完成的。通過(guò)該框架結(jié)構(gòu)以及植入于操作系統(tǒng)內(nèi)部的瀏覽器,該結(jié)構(gòu)已經(jīng)成為了當(dāng)今軟件應(yīng)用的主流結(jié)構(gòu)模式。
?
在軟件開(kāi)發(fā)的過(guò)程中系統(tǒng)的可行性分析是必不可少的,可行性的研究就是評(píng)估問(wèn)題是否能得到解決并且是要以最少的時(shí)間和最少的代價(jià)來(lái)解決。為實(shí)現(xiàn)上面的目標(biāo)還要必須考慮到解決這些問(wèn)題的方法的優(yōu)點(diǎn)和缺點(diǎn),還要考慮到實(shí)現(xiàn)了這些系統(tǒng)規(guī)模的開(kāi)發(fā)帶來(lái)的經(jīng)濟(jì)效益。這里可以用技術(shù)的可行性,操作的可行性,經(jīng)濟(jì)的可行性對(duì)我們的系統(tǒng)進(jìn)行可行性的研究。自律健身房會(huì)員管理系統(tǒng)的可行性分析如下所示:
自律健身房會(huì)員管理系統(tǒng)是在Springboot和MySQL的環(huán)境中運(yùn)行的,而系統(tǒng)的成本也只是主要分布在軟件的開(kāi)發(fā)和維護(hù)上。但如果系統(tǒng)上線投入使用之后,不僅可以方便人們,還節(jié)省了用戶的時(shí)間和精力,而且還極大限度的方便了運(yùn)營(yíng)者,減少了運(yùn)營(yíng)者的工作強(qiáng)度。自律健身房會(huì)員管理系統(tǒng)其實(shí)也不太復(fù)雜,在開(kāi)發(fā)的時(shí)候經(jīng)濟(jì)支出也不大,在開(kāi)發(fā)系統(tǒng)時(shí)時(shí)間用的也不多,從時(shí)間的優(yōu)勢(shì)和對(duì)經(jīng)濟(jì)利益方面產(chǎn)生的好處遠(yuǎn)超過(guò)維護(hù)和管理的成本,所以開(kāi)發(fā)此系統(tǒng)是可行合適的。
本系統(tǒng)是基于瀏覽器和服務(wù)器的自律健身房會(huì)員管理系統(tǒng),系統(tǒng)開(kāi)發(fā)完成之后用戶只需要在瀏覽器中輸入正確的URL地址即可進(jìn)行訪問(wèn)。本系統(tǒng)的頁(yè)面簡(jiǎn)單明了,在沒(méi)有操作指導(dǎo)的情況下也可以進(jìn)行操作,用戶在頁(yè)面中所有的操作都是在瀏覽器中完成的,因此只要電腦在有網(wǎng)絡(luò)的情況下,打開(kāi)瀏覽器都能操作。而且在使用之前也不用進(jìn)行相關(guān)的環(huán)境配置,因此本系統(tǒng)方便、簡(jiǎn)單、易于使用,所以該系統(tǒng)是容易并且可操作的。
根據(jù)用戶對(duì)系統(tǒng)的需求,要求系統(tǒng)簡(jiǎn)單操作,能夠準(zhǔn)確,完整的對(duì)信息進(jìn)行管理。自律健身房會(huì)員管理系統(tǒng)在對(duì)需求做解析后,整個(gè)系統(tǒng)主要是針對(duì)健身房管理員:管理員模塊下的分支功能不一樣。對(duì)功能做出如下說(shuō)明:
管理模塊:用戶管理、運(yùn)動(dòng)器械管理、倉(cāng)庫(kù)管理、健身卡管理、教練招聘,收支統(tǒng)計(jì)管理等。
管理用例圖如下所示。
?
圖3-2 管理員用例圖
根據(jù)用例圖,對(duì)一些重要的用例進(jìn)行描述。
注冊(cè)用例描述如下表所示。
表3-1 注冊(cè)用例描述
| 用例名稱 | 注冊(cè) |
| 參與者 | 用戶 |
| 描述 | 用戶填寫(xiě)相關(guān)注冊(cè)數(shù)據(jù)完成注冊(cè)成為系統(tǒng)的用戶 |
| 前置條件 | 無(wú) |
| 后置條件 | 用戶填寫(xiě)相關(guān)注冊(cè)數(shù)據(jù)并且要注冊(cè)的賬號(hào)不存在與系統(tǒng)中 |
| 事件流 | |
| 補(bǔ)充說(shuō)明 | |
登錄用例描述如下表所示。
表3-1 登錄用例描述
| 用例名稱 | 登錄 |
| 參與者 | 用戶 |
| 描述 | 用戶填寫(xiě)用戶名和密碼登錄系統(tǒng) |
| 前置條件 | 用戶擁有賬號(hào)和密碼 |
| 后置條件 | 用戶名和密碼都正確 |
| 事件流 | (1)用戶在登錄頁(yè)面輸入用戶名和密碼 (2)系統(tǒng)檢測(cè)用戶輸入的用戶名和密碼是否正確 (3)用戶名和密碼正確的話,顯示登錄成功并返回主頁(yè)面 |
| 補(bǔ)充說(shuō)明 | (a)系統(tǒng)檢查除密碼不正確,返回登錄頁(yè)面 |
個(gè)人信息管理用例描述如下表所示。
表3-1 個(gè)人信息管理用例描述
| 用例名稱 | 修改個(gè)人信息 |
| 參與者 | 用戶 |
| 描述 | 用戶查看、修改個(gè)人信息 |
| 前置條件 | 用戶已登錄到系統(tǒng)中 |
| 后置條件 | 無(wú) |
| 事件流 | (1)用戶查看個(gè)人信息 (2)用戶修改個(gè)人信息 |
| 補(bǔ)充說(shuō)明 | (a)用戶可修改密碼 (b)用戶可修改個(gè)人資料,例如姓名,頭像等 |
員工管理用例描述如下表所示。
表3-1 員工管理用例描述
| 用例名稱 | 員工管理 |
| 參與者 | 用戶 |
| 描述 | 用戶執(zhí)行員工管理操作 |
| 前置條件 | 用戶已登錄 |
| 后置條件 | 該課程存在,并且能被預(yù)約 |
| 事件流 | (1)在課程頁(yè)點(diǎn)擊要預(yù)約的課程 (2)填寫(xiě)員工管理表單 |
| 補(bǔ)充說(shuō)明 | (a)員工管理表單數(shù)據(jù)不能為空 |
倉(cāng)庫(kù)管理描述如下表所示。
表3-1 倉(cāng)庫(kù)管理描述
| 用例名稱 | 倉(cāng)庫(kù)管理 |
| 參與者 | 用戶 |
| 描述 | 用戶提供新增、修改、刪除等功能 |
| 前置條件 | |
| 后置條件 | 無(wú) |
| 事件流 | (1)用戶查看倉(cāng)庫(kù) (2)用戶添加信息 (3)用戶刪除信息 |
| 補(bǔ)充說(shuō)明 | (a)新添加的信息不符合要求時(shí)會(huì)添加失敗 (b)修改的信息不符合要求時(shí)會(huì)修改失敗 |
自律健身房會(huì)員管理系統(tǒng)的業(yè)務(wù)流程如下圖所示。
????????????????????????
?
圖3-3 系統(tǒng)業(yè)務(wù)流程圖
管理員擁有的權(quán)限,可以對(duì)各項(xiàng)信息進(jìn)行增加、刪除、修改后會(huì)更新后臺(tái)數(shù)據(jù)庫(kù)的內(nèi)容。
與強(qiáng)調(diào)控制邏輯的程序流程圖不同,它更關(guān)心的是整個(gè)系統(tǒng)中數(shù)據(jù)的具體流動(dòng)以及數(shù)據(jù)的加工處理的整個(gè)客觀過(guò)程,是對(duì)數(shù)據(jù)規(guī)格的說(shuō)明。也正因如此,系統(tǒng)數(shù)據(jù)流圖作為系統(tǒng)結(jié)構(gòu)化分析方法中極為重要的一種描述工具備受青睞。
自律健身房會(huì)員管理系統(tǒng)的頂層數(shù)據(jù)流如下圖所示。
?
圖3-4系統(tǒng)頂層數(shù)據(jù)流圖
系統(tǒng)頂層數(shù)據(jù)流:外部實(shí)體為用戶,第一個(gè)流程為登錄驗(yàn)證,用戶信息表返回密碼驗(yàn)證,是否正確,正確則登錄系統(tǒng),錯(cuò)誤則反饋信息,登錄系統(tǒng)后,根據(jù)不同用戶的功能選擇,來(lái)讀寫(xiě)數(shù)據(jù)庫(kù)。
系統(tǒng)底層數(shù)據(jù)流如下圖所示。
?
圖3-5系統(tǒng)底層數(shù)據(jù)流圖
系統(tǒng)底層數(shù)據(jù)流:外部實(shí)體為管理員和普通用戶,數(shù)據(jù)流分別有管理員和普通用戶流向系統(tǒng)數(shù)據(jù)流程,數(shù)據(jù)表提供數(shù)據(jù)支持,來(lái)完成邏輯操作。
由于本系統(tǒng)在邏輯事務(wù)處理方面對(duì)數(shù)據(jù)庫(kù)的操作比較頻繁所以系統(tǒng)在底層連接數(shù)據(jù)庫(kù)時(shí)并沒(méi)有使用原生的JDBC,而是把JDBC進(jìn)行了封裝,封裝之后相當(dāng)于一個(gè)連接數(shù)據(jù)庫(kù)的工具DB UTIL,這樣使用起來(lái)會(huì)更加方便而且這樣進(jìn)行封裝還可以降低系統(tǒng)中代碼的冗余,當(dāng)我們需要連接和使用數(shù)據(jù)庫(kù)時(shí)只需要調(diào)用這個(gè)工具里面的一個(gè)方法就可以了。而且通過(guò)封裝可以把對(duì)數(shù)據(jù)庫(kù)的操作獨(dú)立起來(lái),當(dāng)需要連接不同種類的數(shù)據(jù)庫(kù)時(shí)只需要加以修改就可以達(dá)到目的。
系統(tǒng)架構(gòu)如下圖所示。
?
圖4-1系統(tǒng)架構(gòu)圖
進(jìn)入系統(tǒng)后首先要進(jìn)行登錄,驗(yàn)證你的身份。當(dāng)你成功登錄后,頁(yè)面會(huì)有多個(gè)板塊,分別是會(huì)員管理、員工管理、倉(cāng)庫(kù)管理、器械管理、健身卡管理、教練招聘,收支統(tǒng)計(jì)管理。里面界面簡(jiǎn)單易懂,根據(jù)標(biāo)示可以直接進(jìn)行方便快捷的操作。
系統(tǒng)功能結(jié)構(gòu)圖如下所示。
?
圖4-2系統(tǒng)功能結(jié)構(gòu)圖
管理員賬戶的基本信息管理:主要提供管理員賬戶的基本信息錄入、刪除、維護(hù)和查詢等功能,包括:錄入管理員賬戶基本信息,更新、增加及刪除管理員賬戶基本信息,更改個(gè)人密碼。
會(huì)員管理:主要是健身房會(huì)員的基本信息錄入、維護(hù)和查詢功能,包括:會(huì)員名稱、年齡、卡號(hào)、身份證、性別、電話、會(huì)員級(jí)別等。
員工管理。主要對(duì)健身房員工的基本信息錄入、刪除、維護(hù)和查詢功能,包括:員工姓名、崗位、基礎(chǔ)工資、提成、合計(jì)新資、績(jī)效、考核詳情等。
倉(cāng)庫(kù)管理:主要對(duì)健身房倉(cāng)庫(kù)物品等進(jìn)行管理維護(hù),包括:物品名稱、物品種類、入庫(kù)時(shí)間、出庫(kù)時(shí)間、物品詳情等。
器械管理:對(duì)健身房的鍛煉器材進(jìn)行管理維護(hù),包括:器械名稱、種類、維修詳情、維護(hù)提醒、器械詳情等。
健身卡管理:對(duì)會(huì)員健身卡進(jìn)行管理維護(hù),包括健身卡名稱、有效期、費(fèi)用等。
教練招聘:對(duì)健身房教練招聘信息進(jìn)行管理維護(hù),包括:年齡限制、性別限制、專業(yè)級(jí)別等
收支管理:統(tǒng)計(jì)健身房各項(xiàng)的收入跟支出,房租、水電費(fèi)、維護(hù)費(fèi)用、總支出比如員工工資等。
一個(gè)好的系統(tǒng)它的后臺(tái)數(shù)據(jù)庫(kù)一定要考慮的全面,這和我們建造房子一個(gè)概念,房子不是隨心所欲建起來(lái)的,一切都是在合理設(shè)計(jì)的基礎(chǔ)是實(shí)現(xiàn)的,地基打牢固了房子才能建的更高。數(shù)據(jù)庫(kù)如果設(shè)計(jì)的很合理,而且每個(gè)方面都能考慮到了那么這個(gè)系統(tǒng)才能不會(huì)出現(xiàn)大的問(wèn)題。
本系統(tǒng)在數(shù)據(jù)庫(kù)中存放了多張表,分別是會(huì)員表、員工表、器械表、倉(cāng)庫(kù)表、健身卡表、收支統(tǒng)計(jì)表。
系統(tǒng)的主要實(shí)體間關(guān)系E-R圖如下圖所示。
?
圖4-7系統(tǒng)E-R圖
此環(huán)節(jié)把概念轉(zhuǎn)變成數(shù)據(jù)。由于整個(gè)數(shù)據(jù)庫(kù)所處理的信息過(guò)多,就只展示幾個(gè)表。
member_user表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| member_user_id | int | 11 | 是 | 是 | 會(huì)員用戶ID |
| age | varchar | 64 | 否 | 否 | 年齡 |
| card_number | varchar | 64 | 是 | 否 | 卡號(hào) |
| id | varchar | 255 | 是 | 否 | 身份證 |
| full_name | varchar | 64 | 否 | 否 | 姓名 |
| gender | varchar | 64 | 否 | 否 | 性別 |
| telephone | varchar | 16 | 否 | 否 | 電話 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
employee_management表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| employee_management_id | int | 11 | 是 | 是 | 員工管理ID |
| employee_name | varchar | 64 | 否 | 否 | 員工姓名 |
| post | varchar | 64 | 否 | 否 | 崗位 |
| basic_salary | int | 11 | 否 | 否 | 基礎(chǔ)工資 |
| commission | int | 11 | 否 | 否 | 提成 |
| total_salary | varchar | 64 | 否 | 否 | 合計(jì)薪資 |
| achievements | int | 11 | 否 | 否 | 績(jī)效 |
| assessment_details | text | 0 | 否 | 否 | 考核詳情 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
warehouse_management表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| warehouse_management_id | int | 11 | 是 | 是 | 倉(cāng)庫(kù)管理ID |
| item_name | varchar | 64 | 否 | 否 | 物品名稱 |
| item_type | varchar | 64 | 否 | 否 | 物品種類 |
| warehousing_time | date | 0 | 否 | 否 | 入庫(kù)時(shí)間 |
| delivery_date | date | 0 | 否 | 否 | 出庫(kù)日期 |
| item_details | text | 0 | 否 | 否 | 物品詳情 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
gym_card表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| gym_card_id | int | 11 | 是 | 是 | 健身卡ID |
| name_of_fitness_card | varchar | 64 | 否 | 否 | 健身卡名稱 |
| term_of_validity | varchar | 64 | 否 | 否 | 有效期 |
| cost | varchar | 64 | 否 | 否 | 費(fèi)用 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
device_management表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| device_management_id | int | 11 | 是 | 是 | 器械管理ID |
| device_name | varchar | 64 | 否 | 否 | 器械名稱 |
| device_type | varchar | 64 | 否 | 否 | 器械種類 |
| maintenance_details | text | 0 | 否 | 否 | 維修詳情 |
| maintenance_reminder | varchar | 64 | 否 | 否 | 維護(hù)提醒 |
| device_details | text | 0 | 否 | 否 | 器械詳情 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
coach_recruitment表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| coach_recruitment_id | int | 11 | 是 | 是 | 教練招聘ID |
| age_limit | varchar | 64 | 否 | 否 | 年齡限制 |
| gender_restriction | varchar | 64 | 否 | 否 | 性別限制 |
| professional_level | varchar | 64 | 否 | 否 | 專業(yè)級(jí)別 |
| price | varchar | 64 | 否 | 否 | 價(jià)格 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
revenue_and_expenditure_management表:
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| revenue_and_expenditure_management_id | int | 11 | 是 | 是 | 收支管理ID |
| statistical_name | varchar | 64 | 否 | 否 | 統(tǒng)計(jì)名稱 |
| total_revenue | int | 11 | 否 | 否 | 總收入 |
| rent | int | 11 | 否 | 否 | 房租 |
| water_and_electricity | int | 11 | 否 | 否 | 水電費(fèi) |
| maintenance_cost_ | int | 11 | 否 | 否 | 維護(hù)費(fèi)用 |
| total_expenditure | varchar | 64 | 否 | 否 | 總支出 |
| employee_salary | int | 11 | 否 | 否 | 員工工資 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
該登錄模塊利用js進(jìn)行設(shè)計(jì),JavaScript函數(shù)CheckSubmit()對(duì)輸入框是否為空進(jìn)行驗(yàn)證,使用js的技術(shù)結(jié)合MySQL 2012數(shù)據(jù)庫(kù)的查詢語(yǔ)句進(jìn)行登錄信息的驗(yàn)證。首先從文本框中分別獲得賬號(hào)user_name和密碼user_pw,使用Sql語(yǔ)句“select * from t_user where user_name=‘”+user_name+“’ and user_pw=‘”+user_pw+“’”將查詢結(jié)果賦給rs結(jié)果集,若rs.next()返回值為空,表示數(shù)據(jù)庫(kù)找不到該用戶數(shù)據(jù),若rs.next()返回值不為空,則顯示登錄成功,進(jìn)入主界面。
用戶登錄流程圖如下所示。
?
圖5-1用戶登錄流程
用戶登錄流程:用戶只有輸入正確的用戶名和密碼才會(huì)成功進(jìn)入系統(tǒng),用戶輸入用戶名密碼后點(diǎn)擊登錄按鈕,系統(tǒng)會(huì)進(jìn)行校驗(yàn)該用戶名是否存在,如果用戶名與密碼不匹配或者用戶名不存在,則返回主界面。
系統(tǒng)登錄界面如下圖所示。
?
圖5-2系統(tǒng)登錄界面
登錄功能的邏輯代碼如下所示。
/**
?????* 登錄
?????* @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,"用戶不存在");
????????}
在瀏覽器的地址欄里輸入http://localhost:8080/index.jsp 地址,就可以跳轉(zhuǎn)到瑜伽健身房管理系統(tǒng)的首頁(yè),首頁(yè)是由4個(gè)頁(yè)面組成的,包括top、left、down和center等頁(yè)面,這里也是瀏覽者訪問(wèn)系統(tǒng)的入口,通過(guò)@ include引入。
首頁(yè)載入流程圖如下所示。
?
圖5-3首頁(yè)載入流程
首頁(yè)載入流程:系統(tǒng)先連接數(shù)據(jù)庫(kù),顯示界面參數(shù)初始化,讀取數(shù)據(jù)庫(kù)的數(shù)據(jù)表,讀取html顯示模板,對(duì)數(shù)據(jù)按添加時(shí)間排序,按照模板設(shè)計(jì)位置顯示數(shù)據(jù),刷新顯示界面,斷開(kāi)數(shù)據(jù)庫(kù)連接。
首頁(yè)如下圖所示。
?
圖5-4首頁(yè)界面
其中載入首頁(yè)的主要代碼如下。
?@RequestMapping("/get_obj")
????public Map<String, Object> obj(HttpServletRequest request) {
????????Query select = service.select(service.readQuery(request), service.readConfig(request));
????????List resultList = select.getResultList();
????????if (resultList.size() > 0) {
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("obj",resultList.get(0));
????????????return success(jsonObject);
????????} else {
????????????return success(null);
????????}
}
?public Query select(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("select ");
????????sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
????????sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
????????if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
????????????sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
????????}
????????if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
????????????sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
????????}
????????if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
????????????int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
????????????int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
????????????sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
????????}
????????log.info("[{}] - 查詢操作,sql: {}",table,sql);
????????return runEntitySql(sql.toString());
????}
管理員發(fā)布倉(cāng)庫(kù)管理信息后,倉(cāng)庫(kù)管理信息在系統(tǒng)前臺(tái)顯示,用戶瀏覽私倉(cāng)庫(kù)管理信息,包括倉(cāng)庫(kù)管理卡號(hào)、倉(cāng)庫(kù)管理身份證、姓名、年齡、電話、倉(cāng)庫(kù)管理級(jí)別等,選擇相應(yīng)的倉(cāng)庫(kù)管理,通過(guò)id傳參,找到該倉(cāng)庫(kù)管理,在add.jsp提交信息查詢單,生成查詢記錄。
倉(cāng)庫(kù)管理管理流程如下圖所示。
?
圖5-5倉(cāng)庫(kù)管理管理流程
倉(cāng)庫(kù)管理管理界面如下圖所示。
?
圖5-6倉(cāng)庫(kù)管理管理界面
倉(cāng)庫(kù)管理管理的主要邏輯代碼:
?@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
????????Query count = service.avg(service.readQuery(request), service.readConfig(request));
????????return success(count.getResultList());
}
管理員對(duì)會(huì)員的管理,在yhzhgl.jsp實(shí)現(xiàn)管理員用戶的管理,包括錄入、刪除、修改,修改密碼通過(guò)SESSION獲取會(huì)員名,然后輸入新密碼,提交到mod.jsp中,使用sql命令更新密碼。
會(huì)員管理的界面如下圖所示。
?
圖5-7會(huì)員管理界面
??會(huì)員管理主要邏輯代碼如下所示。
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
????/**
?????* 服務(wù)對(duì)象
?????*/
????@Autowired
????public AuthController(AuthService service) {
????????setService(service);
????}
用戶在系統(tǒng)前臺(tái)后,數(shù)據(jù)庫(kù)的員工表生成運(yùn)功信息表,管理員在xuankejilu_list.jsp錄入,進(jìn)行管理。
員工管理如下圖所示。
?
圖5-8員工管理界面
員工主要邏輯代碼如下所示。
@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
????/**
?????* 服務(wù)對(duì)象
?????*/
????@Autowired
????public AuthController(AuthService service) {
????????setService(service);
????}
}
管理員在kechengxinxi_add.jsp發(fā)布健身卡,跳轉(zhuǎn)至健身卡添加表單,提交健身卡管理,包括健身卡編號(hào)、健身卡名稱、辦卡時(shí)間、費(fèi)用等,健身卡提交后,數(shù)據(jù)庫(kù)的健身卡信息表刷新數(shù)據(jù),系統(tǒng)將會(huì)員的健身卡信息展示出來(lái)。
健身卡管理的界面如所示。
?
圖5-9健身卡預(yù)約界面
健身卡管理的邏輯代碼如下。
?@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();
????}
運(yùn)動(dòng)器材管理包括新增運(yùn)動(dòng)器材、刪除運(yùn)動(dòng)器材、運(yùn)動(dòng)器材查詢新聞等,以運(yùn)動(dòng)器材新增為例,在視圖層請(qǐng)求器材新增,反饋后,調(diào)用業(yè)務(wù)邏輯層,通過(guò)業(yè)務(wù)邏輯層的接口調(diào)用底層的數(shù)據(jù)邏輯層完成數(shù)據(jù)庫(kù)聯(lián)動(dòng)操作。
運(yùn)動(dòng)器材管理的流程如所示。
?
圖5-10運(yùn)動(dòng)器材管理流程
運(yùn)動(dòng)器材添加的界面如所示。
?
圖5-11運(yùn)動(dòng)器材添加界面
運(yùn)動(dòng)器材管理的界面如所示。
?
圖5-12運(yùn)動(dòng)器材管理界面
運(yùn)動(dòng)器材添加的邏輯代碼如下。
?@RequestMapping("/get_list")
????public Map<String, Object> getList(HttpServletRequest request) {
????????Map<String, Object> map = service.selectToPage(service.readQuery(request), service.readConfig(request));
????????return success(map);
}
教練招聘管理包括新增教練招聘、刪除教練招聘、教練招聘查詢數(shù)據(jù)等,以教練招聘新增為例,在視圖層請(qǐng)求器材新增,反饋后,調(diào)用業(yè)務(wù)邏輯層,通過(guò)業(yè)務(wù)邏輯層的接口調(diào)用底層的數(shù)據(jù)邏輯層完成數(shù)據(jù)庫(kù)聯(lián)動(dòng)操作。
教練招聘管理的流程如所示。
?
圖5-13教練招聘管理流程
教練招聘添加的界面如下所示。
?
??圖5-14運(yùn)動(dòng)器材管理界面
???教練招聘管理的界面如下所示。
?
???圖5-15運(yùn)動(dòng)器材管理界面
教練招聘管理的邏輯代碼如下。
???@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();
????}
管理員在統(tǒng)計(jì)健身房收入支出明細(xì)是,跳轉(zhuǎn)至費(fèi)用明細(xì)單,提交收支統(tǒng)計(jì)管理,包括統(tǒng)計(jì)名稱、總收入、房租、水電費(fèi)、員工工資等,統(tǒng)計(jì)信息后,數(shù)據(jù)庫(kù)的收支統(tǒng)計(jì)信息表刷新數(shù)據(jù),系統(tǒng)將收支明細(xì)信息展示出來(lái)。
收支統(tǒng)計(jì)管理的界面如所示。
?
??圖5-16收入統(tǒng)計(jì)管理界面
收入統(tǒng)計(jì)管理的邏輯代碼如下。
?@PostMapping("/set")
@Transactional
????public Map<String, Object> set(HttpServletRequest request) throws IOException {
????????service.update(service.readQuery(request), service.readConfig(request), service.readBody(request.getReader()));
????????return success(1);
}
????public Map<String,String> readConfig(HttpServletRequest request){
????????Map<String,String> map = new HashMap<>();
????????map.put(FindConfig.PAGE,request.getParameter(FindConfig.PAGE));
????????map.put(FindConfig.SIZE,request.getParameter(FindConfig.SIZE));
????????map.put(FindConfig.LIKE,request.getParameter(FindConfig.LIKE));
????????map.put(FindConfig.ORDER_BY,request.getParameter(FindConfig.ORDER_BY));
????????map.put(FindConfig.FIELD,request.getParameter(FindConfig.FIELD));
????????map.put(FindConfig.GROUP_BY,request.getParameter(FindConfig.GROUP_BY));
????????map.put(FindConfig.MAX_,request.getParameter(FindConfig.MAX_));
????????map.put(FindConfig.MIN_,request.getParameter(FindConfig.MIN_));
????????return map;
}
????public Map<String,String> readQuery(HttpServletRequest request){
????????String queryString = request.getQueryString();
????????if (queryString != null && !"".equals(queryString)) {
????????????String[] querys = queryString.split("&");
????????????Map<String, String> map = new HashMap<>();
????????????for (String query : querys) {
????????????????String[] q = query.split("=");
????????????????map.put(q[0], q[1]);
????????????}
????????????map.remove(FindConfig.PAGE);
????????????map.remove(FindConfig.SIZE);
????????????map.remove(FindConfig.LIKE);
????????????map.remove(FindConfig.ORDER_BY);
????????????map.remove(FindConfig.FIELD);
????????????map.remove(FindConfig.GROUP_BY);
????????????map.remove(FindConfig.MAX_);
????????????map.remove(FindConfig.MIN_);
????????????return map;
????????}else {
????????????return new HashMap<>();
????????}
}
????@Transactional
????public void update(Map<String,String> query,Map<String,String> config,Map<String,Object> body){
????????StringBuffer sql = new StringBuffer("UPDATE ").append("`").append(table).append("`").append(" SET ");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????Object value = entry.getValue();
????????????if (value instanceof String){
????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append("'").append(value).append("'").append(",");
????????????}else {
????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append("=").append(value).append(",");
????????????}
????????}
????????sql.deleteCharAt(sql.length()-1);
????????sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.LIKE))));
????????log.info("[{}] - 更新操作:{}",table,sql);
????????Query query1 = runCountSql(sql.toString());
????????query1.executeUpdate();
}
????public String toWhereSql(Map<String,String> query, Boolean like) {
????????if (query.size() > 0) {
????????????try {
????????????????StringBuilder sql = new StringBuilder(" WHERE ");
????????????????for (Map.Entry<String, String> entry : query.entrySet()) {
????????????????????if (entry.getKey().contains(FindConfig.MIN_)) {
????????????????????????String min = humpToLine(entry.getKey()).replace("_min", "");
????????????????????????sql.append("`"+min+"`").append(" >= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
????????????????????????continue;
????????????????????}
????????????????????if (entry.getKey().contains(FindConfig.MAX_)) {
????????????????????????String max = humpToLine(entry.getKey()).replace("_max", "");
????????????????????????sql.append("`"+max+"`").append(" <= '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("' and ");
????????????????????????continue;
????????????????????}
????????????????????if (like == true) {
????????????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(" LIKE '%").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("%'").append(" and ");
????????????????????} else {
????????????????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(" = '").append(URLDecoder.decode(entry.getValue(), "UTF-8")).append("'").append(" and ");
????????????????????}
????????????????}
????????????????sql.delete(sql.length() - 4, sql.length());
????????????????sql.append(" ");
????????????????return sql.toString();
????????????} catch (UnsupportedEncodingException e) {
????????????????log.info("拼接sql 失敗:{}", e.getMessage());
????????????}
????????}
????????return "";
????}
在這個(gè)產(chǎn)品被投入使用前,首先需要進(jìn)行試用,這是重要的環(huán)節(jié)。考慮到某個(gè)部分的開(kāi)發(fā)沒(méi)有缺陷情況下,把各種模塊拼接,也有一定概率就存在矛盾。這就好比每個(gè)人都很獨(dú)特,但聚在一起就顯得雜亂無(wú)章,需要保證有默契的配合。對(duì)于測(cè)試,要看它的各項(xiàng)內(nèi)容是否契合的原則。若與最初定下的標(biāo)準(zhǔn)有一定程度上的出入,那么就需要做出一些調(diào)整,讓最終的大方向朝著目標(biāo)前進(jìn)。
登錄測(cè)試用例如下表所示。
表6-1登錄測(cè)試用例
| 輸入 | 輸出 | |
| 用戶名 | 密碼 | |
| 空 | 空 | 用戶名或密碼不能為空 |
| 蔡徐坤 | 123 | 用戶名不能為漢字,請(qǐng)重新輸入 |
| 789 | 789 | 用戶名或密碼錯(cuò)誤 |
| 678 | 123456 | 登錄成功 |
注冊(cè)測(cè)試用例如下表所示。
表6-2注冊(cè)測(cè)試用例
| 輸入 | 輸出 | |||
| 用戶名 | 密碼 | 確認(rèn)密碼 | 郵箱 | |
| 空 | 空 | 空 | 空 | 請(qǐng)輸入完整 |
| 001 | 001 | 001 | 001@qq.com | 注冊(cè)成功 |
| 002 | 002 | 003 | 002@qq.com | 注冊(cè)失敗,兩次密碼不一致 |
| 003 | 003 | 003 | 003.com | 注冊(cè)失敗,郵箱格式不正確 |
會(huì)員管理測(cè)試用例如下表所示。
表6-3會(huì)員管理測(cè)試用例
| 功能 | 測(cè)試數(shù)據(jù) | 預(yù)期結(jié)果 | 測(cè)試結(jié)果 |
| 會(huì)員管理 | 會(huì)員基本信息 | 跳出會(huì)員各種基本信息 | 和預(yù)期一致 |
| 增加會(huì)員 | 編輯增加會(huì)員 | 編輯會(huì)員信息添加保存? | 和預(yù)期一致 |
| 刪除會(huì)員 | 刪除會(huì)員基本信息” | 成功刪除 | 和預(yù)期一致 |
員工管理測(cè)試用例如下表所示。
表6-4添加員工管理測(cè)試用例
| 輸入 | 輸出 | |||
| 標(biāo)題 | 類別 | 內(nèi)容 | 備注 | |
| 空 | 空 | 空 | 空 | 添加失敗 |
| 員工管理1 | A | 1 | 添加成功 | |
| 空 | A | 1 | 添加失敗,標(biāo)題不能為空 | |
| 員工管理2 | 空 | 1 | 添加失敗,請(qǐng)選擇類別 | |
倉(cāng)庫(kù)管理測(cè)試用例如下表所示。
表6-4添加倉(cāng)庫(kù)管理測(cè)試用例
| 輸入 | 輸出 | |||
| 名稱 | 類別 | 價(jià)格 | 備注 | |
| 空 | 空 | 空 | 空 | 添加失敗 |
| 倉(cāng)庫(kù)管理1 | A | 100 | 添加成功 | |
| 空 | A | 100 | 添加失敗,名稱不能為空 | |
| 倉(cāng)庫(kù)管理2 | 空 | 100 | 添加失敗,請(qǐng)選擇類別 | |
器械管理測(cè)試用例如下表所示。
表6-5器械管理測(cè)試用例
| 輸入 | 輸出 | |||
| 名稱 | 類別 | 價(jià)格 | 選課人 | |
| 空 | 空 | 空 | 空 | 添加失敗 |
| 器械1 | A | 100 | 001 | 添加成功 |
| 空 | A | 100 | 001 | 添加失敗,名稱不能為空 |
| 器械2 | 空 | 100 | 001 | 添加失敗,請(qǐng)選擇類別 |
經(jīng)過(guò)測(cè)試,得到測(cè)試結(jié)果如下表所示。
表6-6測(cè)試結(jié)果
| 測(cè)試項(xiàng)目 | 內(nèi)容和目的 | 測(cè)試結(jié)果 |
| 用戶登錄 | 輸入正確用戶名與密碼 | 可以登錄 |
| 輸入錯(cuò)誤用戶名與密碼 | 提示錯(cuò)誤的信息 | |
| 會(huì)員管理(添加,修改,刪除) | 輸入正確信息 | 成功完成 |
| 輸入錯(cuò)誤信息 | 操作失敗 | |
| 修改登錄密碼 | 修改新的密碼 | 成功完成 |
| 員工管理(添加,修改,刪除) | 輸入正確信息 | 成功完成 |
| 輸入錯(cuò)誤信息 | 操作失敗 | |
| 倉(cāng)庫(kù)管理(添加,修改,刪除) | 輸入正確信息 | 成功完成 |
| 輸入錯(cuò)誤信息 | 操作失敗 | |
| 器械管理(添加,修改,刪除) | 輸入正確信息 | 成功完成 |
| 輸入錯(cuò)誤信息 | 操作失敗 |
本次畢業(yè)論文的主要是開(kāi)發(fā)一個(gè)安全可靠,操作簡(jiǎn)易,同時(shí)具備業(yè)務(wù)可擴(kuò)展的自律健身房會(huì)員管理系統(tǒng)。本文詳細(xì)的論述了健身房會(huì)員管理系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā),本系統(tǒng)的所有事務(wù)邏輯都是按照系統(tǒng)的需求分析進(jìn)行設(shè)計(jì)的,系統(tǒng)大大增加了用戶的體驗(yàn)程度,由于是對(duì)局部進(jìn)行操作那么就減少了一些繁瑣而又不必要的操作,減輕了服務(wù)器對(duì)頁(yè)面解析的負(fù)擔(dān)。
與其他系統(tǒng)相比,本系統(tǒng)有自身的優(yōu)點(diǎn),
例如:
(1)創(chuàng)新性強(qiáng);
(2)業(yè)務(wù)邏輯性強(qiáng),安全性高,在一些重要的功能模塊需要通過(guò)審查之后才可使用;
(3)移植性高,在所有Window平臺(tái)都可使用。
當(dāng)然也還有很多需要進(jìn)一步改進(jìn)的地方:
(1)系統(tǒng)大多數(shù)頁(yè)面都是全局刷新,缺乏局部刷新,這將增加服務(wù)器的壓力,如果有大量用戶在同一時(shí)間段操作同一個(gè)功能模塊,可能會(huì)導(dǎo)致查詢緩慢;
(2)頁(yè)面沒(méi)有經(jīng)過(guò)專業(yè)的UI設(shè)計(jì),美觀程度不及其他市場(chǎng)其他網(wǎng)站系統(tǒng),有待改善。
參考文獻(xiàn)
[1]單樹(shù)倩,任佳勛.基于SpringBoot和Vue框架的數(shù)據(jù)庫(kù)原理網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2021,17(30):40-41+50.
[2]李祥光.南京市24小時(shí)自助式健身房會(huì)員滿意度調(diào)查與對(duì)策研究——以浦口區(qū)樂(lè)刻健身房為例[J].當(dāng)代體育科技,2021,11(30):124-131+135.
[3]薛寰.我國(guó)健身房行業(yè)發(fā)展的影響因素和趨勢(shì)分析[J].財(cái)富生活,2021(18):23-24.
[4]劉嘉榮. 新零售背景下傳統(tǒng)健身房的轉(zhuǎn)型升級(jí)研究[D].湖北大學(xué),2021.
[5]Gofaone Mongwa. Employee's Information Security (InfoSec) Behavior Management in Multinational Companies: A Case Study[D].東南大學(xué),2021.
[6]何昕宇,付明萍,崔浩強(qiáng).“互聯(lián)網(wǎng)+”時(shí)代下共享健身房發(fā)展研究[J].投資與合作,2021(03):185-186.
[7]葛麗萍. 基于移動(dòng)互聯(lián)網(wǎng)的健身房綜合管理系統(tǒng)的研究與實(shí)現(xiàn)[D].南京郵電大學(xué),2020.
[8]Stefan Sammito,Annika Claus,Dirk-Matthias Rose.Smoking prevalence in the area of responsibility of the German Ministry of Defense——results of the employee survey in the context of occupational health management[J].Military Medical Research,2020,7(03):343-349.
[9]白志剛. “互聯(lián)網(wǎng)+”背景下堅(jiān)蛋運(yùn)動(dòng)智能健身房的發(fā)展戰(zhàn)略研究[D].天津大學(xué),2020.
[10]甄莉. “互聯(lián)網(wǎng)+”時(shí)代智能健身房商業(yè)模式研究[D].北京體育大學(xué),2019.
[11]彭宇秋. 全民健身背景下武漢市健身房現(xiàn)狀調(diào)查及對(duì)策研究[D].武漢體育學(xué)院,2020.
[12]羅超.基于java的健身房管理系統(tǒng)關(guān)鍵技術(shù)研究[J].信息記錄材料,2019,20(08):159-160.
[13]朱文輝,田若松,喬云,張瑋琳.會(huì)員服務(wù)的信息化[J].學(xué)會(huì),2019(07):11-20.
[14]馬村. 服務(wù)設(shè)計(jì)視域下健身房系統(tǒng)設(shè)計(jì)研究[D].中南林業(yè)科技大學(xué),2019.
[15]劉海粟,黃靖怡.健身房新老會(huì)員的營(yíng)銷模式分析[J].體育風(fēng)尚,2019(06):229.
[16]劉學(xué)冬,王晶.健身房以共享經(jīng)濟(jì)模式經(jīng)營(yíng)的可行性分析[J].當(dāng)代體育科技,2018,8(29):171-172.
[17]李緒彪,高中玲,張生開(kāi).臨沂大學(xué)健身俱樂(lè)部會(huì)員狀況與分析[J].運(yùn)動(dòng),2018(16):48-49.
致謝
經(jīng)過(guò)幾個(gè)月時(shí)間的努力終于完成了這篇文章,在文章的寫(xiě)作與研究的過(guò)程中遇到了很多困難,都在同學(xué)和老師的幫助下解決了。尤其非常感謝我最敬愛(ài)的老師,他對(duì)我進(jìn)行了無(wú)私的指導(dǎo)和幫助,不厭其煩的幫助進(jìn)行文章的修改。老師嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度、淵博的學(xué)術(shù)知識(shí)、誨人不倦的敬業(yè)精神以及寬容的待人風(fēng)范使我獲益頗豐。此外,在校圖書(shū)館查找資料的時(shí)候,圖書(shū)館的老師也給我提供了很多方面的支持與幫助。在此,向幫助和指導(dǎo)過(guò)我的老師表示最衷心的感謝!感謝這篇文章所涉及到的各位學(xué)者。本文引用了數(shù)位學(xué)者的文獻(xiàn),如果沒(méi)有各位學(xué)者的研究成果的幫助和啟發(fā),我將很難完成本篇文章的寫(xiě)作。感謝我的同學(xué)、朋友以及所在單位的同事,在我寫(xiě)文章的過(guò)程中給與了我很多素材和幫助,還在文章的撰寫(xiě)和排版過(guò)程中提供熱情的幫助。同時(shí),感謝我的室友對(duì)我的熱心指導(dǎo)和幫助,經(jīng)常有不懂之處都是大家在幫助我,才使得我比較順利的完成了這篇文章。由于我水平有限,所寫(xiě)文章難免有不足之處,懇請(qǐng)各位老師和學(xué)友批評(píng)和指正!
免費(fèi)領(lǐng)取本源代碼,請(qǐng)關(guān)注點(diǎn)贊+私聊
總結(jié)
以上是生活随笔為你收集整理的(附源码)springboot自律健身房会员管理系统 毕业设计456466的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win10系统怎么改奇摩输入法_Yaho
- 下一篇: amtemu.v0.9.2-painte