SSM+家装管理系统 毕业设计-附源码191452
???基于 SSM的家裝管理系統(tǒng)
摘 要
隨著信息技術在管理上越來越深入而廣泛的應用,管理信息系統(tǒng)的實施在技術上已逐步成熟。管理信息系統(tǒng)是一個不斷發(fā)展的新型學科,家裝公司要生存要發(fā)展,要高效率地把裝修活動有機地組織起來,就必須加強裝修資源管理,即加強對公司內(nèi)部的各種資源(人、財、物等)的有效管理,建立與自身特點相適應的管理信息系統(tǒng)。
本文主要通過對家裝管理系統(tǒng)的功能性需求分析,對系統(tǒng)的安全性和可擴展性進行了非功能性需求分析。在詳細的需求分析的基礎上,根據(jù)系統(tǒng)的功能設計確定了數(shù)據(jù)庫結構,實現(xiàn)完整的代碼編寫。家裝管理系統(tǒng)完成了主要模塊的頁面設計和功能實現(xiàn)。本文展示了首頁頁面的實現(xiàn)效果圖,并通過代碼和頁面介紹了用戶注冊功能、方案設計、設計溝通、單品訂單管理的實現(xiàn)過程。
關鍵詞:家裝管理;SSM框架;方案設計
Home decoration management system based on SSM
Abstract
With the more and more in-depth and extensive application of information technology in management, the implementation of management information system has gradually matured in technology. In order to adapt to the development of the company's internal information system, it is necessary to establish an efficient management system for various decoration activities, that is, to strengthen the management of the company's internal resources.
This paper mainly analyzes the functional requirements of the home decoration management system, and analyzes the non functional requirements of the security and scalability of the system. Based on the detailed demand analysis, the database structure is determined according to the functional design of the system to realize the complete coding. The home decoration management system has completed the page design and function realization of the main modules. This paper shows the implementation effect of the home page, and introduces the implementation process of user registration function, scheme design, design communication and single product order management through code and page.
Key words:?Home decoration management; SSM framework; conceptual design
目 ?錄
一、 緒論
(一) 研究背景與意義
(二) 研究內(nèi)容
二、 開發(fā)工具及相關技術介紹
(一)?開發(fā)技術
(二)?ssm框架介紹
(三)?Mysql數(shù)據(jù)庫
(四)?B/S結構
(五)?B/S體系工作原理
(六)?ssm框架各層關系
三、 系統(tǒng)分析
(一) 可行性分析
1.?經(jīng)濟可行性
2.?技術可行性
3.?操作可行性
(二) 功能性需求分析
(三) 非功能性需求分析
(四) 業(yè)務流程分析
四、 系統(tǒng)設計
(一) 功能模塊設計
(二) 數(shù)據(jù)庫設計
1.?概念模型設計
2.?數(shù)據(jù)庫邏輯設計
3.?數(shù)據(jù)庫表設計
五、 系統(tǒng)實現(xiàn)
(一) 用戶登錄的實現(xiàn)
(二) 系統(tǒng)前臺主要功能實現(xiàn)
1.?首頁的實現(xiàn)
2.?用戶注冊的實現(xiàn)
3.?家裝單品的實現(xiàn)
4.?家裝資訊的實現(xiàn)
5.?成品訂單的實現(xiàn)
(三) 系統(tǒng)后臺主要功能實現(xiàn)
1.?用戶管理的實現(xiàn)
2.?方案設計管理的實現(xiàn)
3.?成品訂單管理的實現(xiàn)
六、 系統(tǒng)測試
(一) 系統(tǒng)可靠性測試
(二) 系統(tǒng)功能性測試
(三) 系統(tǒng)合格性測試
(四) 測試結果
七、 總結與展望
參考文獻
致謝
- 緒論
- 研究背景與意義
近年來隨著電腦的普及和計算機技術在各個領域的廣泛應用,當今社會正快速向信息化社會前進,辦公信息化,管理信息化成為了趨勢,信息自動化的作用也越來越大,它可以使我們從繁雜的事務中解放出來,提高了工作效率,家庭裝修作為一個獨立的行業(yè),裝修方案管理的電子化也就成了時代的必然。
隨著裝修方案數(shù)量的不斷增多,有關裝修方案的各種信息量也成倍增加,面對著龐大的信息量,傳統(tǒng)的人工方式管理會導致家裝公司管理上的混亂,人力與物力過多浪費,家裝公司管理費用的增加,從而使公司的負擔過重,影響整個家裝公司的運作和控制管理,因此,必須制定一套合理、有效,規(guī)范和實用的裝修信息管理系統(tǒng),對裝修信息進行集中統(tǒng)一的管理。
另一方面,IT產(chǎn)業(yè)和 Internet獲得了飛速發(fā)展,計算機應用已滲透到了各個領域,引起信息管理的革命,實現(xiàn)了信息的自動化處理,提高了處理的及時性和正確性。
裝修信息管理工作面對大量的可模塊化處理的信息,是當今信息革命的一個重要陣地。我們小組開發(fā)裝修信息管理信息系統(tǒng)就是采用現(xiàn)代化的信息管理方式代替手工管理方式,提高裝修信息管理工作效率,作到信息的規(guī)范管理,科學統(tǒng)計和快速查詢,讓家裝公司更好的為社會服務。
從以前的手工管理的記錄中我們可以發(fā)現(xiàn)這樣的問題:
因為家裝公司的建材種類多、數(shù)量多,很難將材料準確地分門別類,快速檢索,手工進行非常困難往往是終于查到了建材或家具的信息,倉庫中沒有此材料或已用完。家裝公司的規(guī)模越大,這個問題越突出。
(2)引進、管理建材工作量大
引進新建材頻率越大,說明家裝公司的作用越大,然而隨之而來的大量的引進、管理登記、實存材料的更新以及借出材料超期、遺失等的處理,其工作量之大,往往是人工操作所難以勝任的。而且經(jīng)常會出現(xiàn)這樣那樣的差錯。
(3)材料統(tǒng)計工作難、材料更新不能及時完成。
家裝公司的材料應根據(jù)科學技術的發(fā)展和教學工作的需要及時添加和更新。
然而由于材料數(shù)量及材料種類越來越多,加上自然損耗,人為破壞,使材料的統(tǒng)計工作難以及時完成,材料的更新也就很難有針對性地進行,材料的知識結構得不到良好地控制。
- 研究內(nèi)容
基于SSM的家裝管理系統(tǒng)的開發(fā)及實現(xiàn),所需要的工作內(nèi)容:
(1)首先是確定選題,確定好所要做的系統(tǒng),并對系統(tǒng)的背景及現(xiàn)在面臨的一些問題等進行系統(tǒng)的初步確認。
(2)系統(tǒng)確認完成后,結合系統(tǒng)開發(fā)的需求進行確認系統(tǒng)開發(fā)所使用的技術家裝管理系統(tǒng)的開發(fā)使用SSM框架,數(shù)據(jù)庫進行系統(tǒng)的搭建開發(fā),確認好使用的技術進行技術分析,所使用的技術是否可以完成系統(tǒng)的實現(xiàn)。
(3)確定好系統(tǒng)使用的技術,進行在線確認系統(tǒng)所劃分的用戶角色,并且根據(jù)用戶角色劃分確定所要設計的功能模塊,對于家裝管理系統(tǒng)的設計主要劃分別為管理員和用戶角色,并所使用的功能模塊也相應不同,但是系統(tǒng)的數(shù)據(jù)庫實現(xiàn)的內(nèi)容是交互的,用戶可以隨時根據(jù)自己的需求進行信息搜索,對于系統(tǒng)工作人員可以根據(jù)自己的分管內(nèi)容進行在線信息的處理及操作,管理員獲取到所有用戶的詳細數(shù)據(jù)信息,并根據(jù)需求進行第一時間處理解決。
(4)系統(tǒng)的功能模塊確認完成后進行程序及界面的設計,設計完成后,并且通過測試來判斷程序是否完善,對于系統(tǒng)測試,需要不同的用戶進行不同的內(nèi)容編輯及提交,及使用不同的測試方式找出程序中存在的漏洞,并對程序出現(xiàn)的漏洞問題進行在線解決處理,如果測試系統(tǒng)沒有任何問題時,可以將系統(tǒng)上傳進行正式操作使用。
- 開發(fā)工具及相關技術介紹
- 開發(fā)技術
本系統(tǒng)前端部分基于MVVM模式進行開發(fā),采用B/S模式,后端部分基于Java的ssm框架進行開發(fā)。
前端部分:前端框架采用了比較流行的漸進式JavaScript框架Vue.js。使用Vue-Router和Vuex實現(xiàn)動態(tài)路由和全局狀態(tài)管理,Ajax實現(xiàn)前后端通信,Element UI組件庫使頁面快速成型,項目前端通過柵格布局實現(xiàn)響應式,可適應PC端、平板端、手機端等不同屏幕大小尺寸的完美布局展示。
后端部分:采用ssm作為開發(fā)框架,同時集成MyBatis、Redis等相關技術。
- ssm框架介紹
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部分內(nèi)容)。常作為數(shù)據(jù)源較簡單的web項目的框架。
1.1Spring
Spring就像是整個項目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數(shù)去調(diào)用實體類的構造方法來實例化對象。也可以稱之為項目中的粘合劑。
Spring的核心思想是IoC(控制反轉),即不再需要程序員去顯式地`new`一個對象,而是讓Spring框架幫你來完成這一切。
1.2 SpringMVC
SpringMVC在項目中攔截用戶請求,它的核心Servlet即DispatcherServlet承擔中介或是前臺這樣的職責,將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執(zhí)行的操作。SpringMVC相當于SSH框架中struts。
1.3 mybatis
mybatis是對jdbc的封裝,它讓數(shù)據(jù)庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關聯(lián)到各實體類的Mapper文件,Mapper文件中配置了每個類對數(shù)據(jù)庫所需進行的sql語句映射。在每次與數(shù)據(jù)庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執(zhí)行sql命令。
頁面發(fā)送請求給控制器,控制器調(diào)用業(yè)務層處理邏輯,邏輯層向持久層發(fā)送請求,持久層與數(shù)據(jù)庫交互,后將結果返回給業(yè)務層,業(yè)務層將處理邏輯發(fā)送給控制器,控制器再調(diào)用視圖展現(xiàn)數(shù)據(jù)。
??
?
- ?Mysql數(shù)據(jù)庫
Mysql數(shù)據(jù)庫邏輯結構包含表空間(tablespace)、段(segment)、范圍(extend)、數(shù)據(jù)塊(datablock)、和模式對象(schemaobject)?。每一個數(shù)據(jù)庫都可以邏輯劃分為一個或多個表空間,每一個表空間都是由一個或多個數(shù)據(jù)文件來組成。Mysql數(shù)據(jù)庫分為系統(tǒng)表空間和非系統(tǒng)表空間,每一個Mysql數(shù)據(jù)庫都包含一個稱作SYSTEM的系統(tǒng)表空間。???????????
Mysql的語言是非結構化的,用戶可以在數(shù)據(jù)上進行工作。MySQL因為其速度、可靠性和適應性而備受關注。大多數(shù)人都認為在不需要事務化處理的情況下,MySQL是管理內(nèi)容最好的選擇。并且因為Mysql的語言和結構比較簡單,但是功能和存儲信息量很強大,所以得到了普遍的應用。
Mysql數(shù)據(jù)庫在編程過程中的作用是很廣泛的,為用戶進行數(shù)據(jù)查詢帶來了方便。Mysql數(shù)據(jù)庫的應用因其靈活性強,功能強大,所以在實現(xiàn)某功能時只需要一小段代碼,而不像其他程序需要編寫大段代碼??傮w來說,Mysql數(shù)據(jù)庫的語言相對要簡潔很多。
數(shù)據(jù)流程分析主要就是數(shù)據(jù)存儲的儲藏室,它是在計算機上進行的,而不是現(xiàn)實中的儲藏室。數(shù)據(jù)的存放是按固定格式,而不是無序的,其定義就是:長期有固定格式,可以共享的存儲在計算機存儲器上。數(shù)據(jù)庫管理主要是數(shù)據(jù)存儲、修改和增加以及數(shù)據(jù)表的建立。為了保證系統(tǒng)數(shù)據(jù)的正常運行,一些有能力的處理者可以進行管理而不需要專業(yè)的人來處理。數(shù)據(jù)表的建立,可以對數(shù)據(jù)表中的數(shù)據(jù)進行調(diào)整,數(shù)據(jù)的重新組合及重新構造,保證數(shù)據(jù)的安全性。介于數(shù)據(jù)庫的功能強大等特點,本系統(tǒng)的開發(fā)主要應用了Mysql進行對數(shù)據(jù)的管理。
- B/S結構
B/S(Browser/Server)比前身架構更為省事的架構。它借助Web server完成數(shù)據(jù)的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果, 不需要考慮不停裝軟件的問題。???????????
- B/S體系工作原理
B/S架構采取瀏覽器請求,服務器響應的工作模式。
用戶可以通過瀏覽器去訪問Internet上由Web服務器產(chǎn)生的文本、數(shù)據(jù)、圖片、動畫、視頻點播和聲音等信息;
而每一個Web服務器又可以通過各種方式與數(shù)據(jù)庫服務器連接,大量的數(shù)據(jù)實際存放在數(shù)據(jù)庫服務器中;
從Web服務器上下載程序到本地來執(zhí)行,在下載過程中若遇到與數(shù)據(jù)庫有關的指令,由Web服務器交給數(shù)據(jù)庫服務器來解釋執(zhí)行,并返回給Web服務器,Web服務器又返回給用戶。在這種結構中,將許許多多的網(wǎng)連接到一塊,形成一個巨大的網(wǎng),即全球網(wǎng)。而各個企業(yè)可以在此結構的基礎上建立自己的Internet。
在 B/S 模式中,用戶是通過瀏覽器針對許多分布于網(wǎng)絡上的服務器進行請求訪問的,瀏覽器的請求通過服務器進行處理,并將處理結果以及相應的信息返回給瀏覽器,其他的數(shù)據(jù)加工、請求全部都是由Web Server完成的。通過該框架結構以及植入于操作系統(tǒng)內(nèi)部的瀏覽器,該結構已經(jīng)成為了當今軟件應用的主流結構模式。
???(六)ssm框架各層關系
DAO層、Service層這兩個層次都可以單獨開發(fā),互相的耦合度很低,完全可以獨立進行,這樣的一種模式在開發(fā)大項目的過程中尤其有優(yōu)勢。
Controller,View層因為耦合度比較高,因而要結合在一起開發(fā),但是也可以看作一個整體獨立于前兩個層進行開發(fā)。這樣,在層與層之前只需要知道接口的定義,調(diào)用接口即可完成所需要的邏輯單元應用,一切顯得非常清晰簡單。?
??????????
? ??
- 系統(tǒng)分析
- 可行性分析
本系統(tǒng)將在經(jīng)濟、技術、操作這三個角度上進行可行性分析。
整個系統(tǒng)從設計到開發(fā)以及測試過程嚴謹步驟齊全,所有工作任務全部由本人完成,并未獲取外部技術支持,節(jié)約了一切服務成本開銷以及人工成本,在硬件方面,為節(jié)約成本使用一臺二手移動工作站作為項目部署服務器以及數(shù)據(jù)庫服務器,成本在一萬元一下,真?zhèn)€網(wǎng)絡部署也是由本人獨立完成不涉及到其他人工費用,整個開發(fā)過程本著低成本,低消耗的原則。
技術可行性分析的目的是確認該系統(tǒng)能否利用現(xiàn)有技術實現(xiàn),并評估開發(fā)效率和完成情況。技術的可行性是指在當前的技術條件下,計算機軟件和硬件的開發(fā)是否能夠滿足發(fā)展的要求。因為該系統(tǒng)的開發(fā)基于Java語言,所以開發(fā)該系統(tǒng)所需的軟件和硬件條件可以在普通計算機上滿足。因為它占用的內(nèi)存相對較少,所以用Mysql數(shù)據(jù)庫開發(fā)和設計軟件理論上沒有問題,因為它占用的內(nèi)存太少。上述技術可以有效地保證系統(tǒng)的成功和高效開發(fā)。
家裝管理系統(tǒng)的使用界面簡單易于操作,采用常見的界面窗口來登錄界面,通過電腦進行訪問操作,用戶只要平時使用過電腦都能進行訪問操作。此系統(tǒng)的開發(fā)采用Java技術開發(fā),人性化和完善化是B/S結構開發(fā)比較顯要的特點使得用戶操作相比較其他更加簡潔方便。易操作、易管理、交互性好在本系統(tǒng)操作上體現(xiàn)得淋漓盡致。
- 功能性需求分析
前臺需求:
(1)用戶模塊:主要包括用戶的注冊和登陸、用戶個人信息管理等功能。
(2)家裝資訊模塊:主要包括家裝信息瀏覽、家裝信息展示、搜索等功能。
(3)方案設計模塊:主要包括方案設計詳細信息、查看方案和刪除方案等功能。
(4)成品訂單模塊:主要包括生成的成品訂單、包括方案類型、方案名稱、方案價格、設計師編號等功能。
后臺需求:
(1)用戶管理:主要包括用戶列表、用戶等級管理等功能。
(2)設計溝通管理:主要包括設計師與客戶溝通信息的管理,客戶問題,設計師回復等。
(3)成品訂單管理:主要包括訂單確認等功能。
用戶用例圖如下所示。
?
圖1 用戶用例圖
管理員用例圖如下所示。
?
圖2 管理員用例圖
家裝單品添加用例描述如下表所示。
表1家裝單品添加用例描述
| 用例名稱 | 添加新家裝單品 | |
| 參與者 | 管理員 | |
| 用例概述 | 本用例用于管理員進行添加新家裝單品操作 | |
| 前置條件 | 管理員添加新家裝單品前必須登錄系統(tǒng) | |
| 后置條件 | 系統(tǒng)中添加一個新家裝單品 | |
| 基本事件流 | 參與者動作 | 系統(tǒng)響應 |
| 4、管理員填寫新家裝單品信息,點擊“添加”按鈕。 | 2、系統(tǒng)打開添加新家裝單品界面。 3、系統(tǒng)檢查管理員輸入的家裝單品信息是正確有效的。 5、系統(tǒng)將家裝單品添加到數(shù)據(jù)庫中。 6、系統(tǒng)提示“操作成功”。 7、系統(tǒng)跳轉到家裝單品管理界面。 | |
| 其他事件流 | 1、系統(tǒng)驗證管理員輸入的家裝單品名為空,則提示“*請?zhí)顚懠已b單品名稱!”。 2、系統(tǒng)驗證管理員輸入的價格不是數(shù)字格式,則提示“*價格必須是數(shù)字格式!” | |
家裝單品刪除用例描述如下表所示。
表2家裝單品刪除用例描述
| 用例名稱 | 刪除家裝單品 | |
| 參與者 | 管理員 | |
| 用例概述 | 本用例用于管理員進行刪除家裝單品操作 | |
| 前置條件 | 管理員刪除家裝單品前必須登錄系統(tǒng) | |
| 后置條件 | 系統(tǒng)中刪除一個家裝單品 | |
| 基本事件流 | 參與者動作 | 系統(tǒng)響應 |
| 1、管理員在后臺主界面選擇“家裝單品管理”。 4、管理員選擇一個家裝單品,點擊“刪除”按鈕。 6、管理員點擊“確定”按鈕。 | 2、系統(tǒng)從數(shù)據(jù)庫中獲取家裝單品信息列表 3、系統(tǒng)打開家裝單品列表界面。 5、系統(tǒng)提示“你確定要刪除嗎?”。 7、系統(tǒng)將家裝單品從數(shù)據(jù)庫中刪除。 8、系統(tǒng)提示“刪除成功”。 9、系統(tǒng)跳轉到家裝單品管理界面。 | |
| 其他事件流 | 無 | |
用戶編輯用例描述如下表所示。
表3用戶編輯用例描述
| 用例名稱 | 修改用戶 | |
| 參與者 | 管理員 | |
| 用例概述 | 本用例用于管理員進行修改用戶信息操作 | |
| 前置條件 | 管理員已經(jīng)登錄系統(tǒng) | |
| 后置條件 | 系統(tǒng)中更新一條用戶記錄 | |
| 基本事件流 | 參與者動作 | 系統(tǒng)響應 |
| 1、管理員在后臺主界面選擇“用戶管理”。 4、管理員在用戶列表中選擇一個用戶,點擊“編輯”按鈕。 6、管理員填寫用戶信息,點擊“保存修改”按鈕。 | 2、系統(tǒng)從數(shù)據(jù)庫中獲取用戶信息。 3、系統(tǒng)打開用戶列表界面。 5、系統(tǒng)打開修改用戶信息界面。 7、系統(tǒng)將更改后的添加到數(shù)據(jù)庫中。 8、系統(tǒng)提示“操作成功”。 9、系統(tǒng)跳轉到用戶管理界面。 | |
| 其他事件流 | 無 | |
單品購買用例描述如下表所示。
表4單品購買用例描述
| 用例名稱 | 單品購買 | |
| 參與者 | 用戶 | |
| 用例概述 | 本用例用于用戶進行對單品購買操作 | |
| 前置條件 | 用戶已經(jīng)登錄系統(tǒng) | |
| 后置條件 | 系統(tǒng)中增加一條用戶購買記錄 | |
| 基本事件流 | 參與者動作 | 系統(tǒng)響應 |
| 1、用戶在前臺首頁選擇任意一個單品分類。 4、管理員在用戶列表中選擇一個單品。 7、用戶填寫購買訂單,點擊“購買”按鈕。 | 2、系統(tǒng)從數(shù)據(jù)庫中獲取單品列表信息。 3、系統(tǒng)打開單品列表界面。 5、系統(tǒng)從數(shù)據(jù)庫中獲取單品信息。 6、系統(tǒng)打開單品信息及購買界面。 8、系統(tǒng)檢查用戶輸入的信息是正確有效的。 9、系統(tǒng)將購買記錄添加到數(shù)據(jù)庫中。 | |
| 其他事件流 | 1、系統(tǒng)驗證用戶輸入的字段為空,則提示“*購買數(shù)量不能為空!”。 | |
- 非功能性需求分析?
隨著用戶量的增加,系統(tǒng)可能會需要同時服務上千、上萬個頁面,服務器需要同時響應大量用戶的操作,這就要求系統(tǒng)需要有良好的可擴展性,否則系統(tǒng)會出現(xiàn)延遲,卡頓甚至服務器崩潰的問題。高擴展性可以使軟件保持旺盛的生命力,同時也能夠使系統(tǒng)更好的適應用戶增加、提高性能需求、增加應用功能等改變。
系統(tǒng)中保存了大量用戶和管理員的個人信息,因此,保證系統(tǒng)服務器和數(shù)據(jù)安全是在開發(fā)過程中需要考慮的重要問題。安全性包括服務器安全、操作系統(tǒng)安全、數(shù)據(jù)庫安全、程序代碼安全以及用戶個人信息和支付安全等,系統(tǒng)可以通過采用防火墻技術、加密技術、認證技術等來增強其安全性,只有一個健壯安全的系統(tǒng)才能具有長久的生命力。
- 業(yè)務流程分析
家裝管理系統(tǒng)的前臺中,用戶模塊和家裝單品模塊進行數(shù)據(jù)交互,實現(xiàn)單品下單的功能。前臺的功能主要包括用戶模塊、家裝單品模塊、家裝資訊模塊和單品訂單模塊。
成品訂單管理系統(tǒng)的后臺中,管理員對用戶在前臺提交申請產(chǎn)生的數(shù)據(jù)進行處理,以滿足用戶的需求。前臺系統(tǒng)和后臺系統(tǒng)有數(shù)據(jù)交互,整個系統(tǒng)各個部分相互獨立又密不可分。后臺的功能主要包括用戶管理、成品訂單管理、方案設計管理。
- 系統(tǒng)設計
- 功能模塊設計
通過軟件的需求分析已經(jīng)獲得了系統(tǒng)的基本功能需求。根據(jù)各大功能模塊的不同,將系統(tǒng)分為各種功能大塊。系統(tǒng)功能結構如下圖所示。
?
圖4系統(tǒng)功能結構圖
注冊/登錄
游客(未進行注冊或登陸的用戶)可以瀏覽家裝資訊,但不能進行收藏和購買。用戶注冊首先需要進行表單驗證,來驗證賬號和密碼是否合法,然后驗證賬號是否已經(jīng)存在,驗證通過即可注冊。
注冊成功后,用戶可以通過輸入用戶名來登錄系統(tǒng),輸入密碼后進行驗證。登錄成功后,用戶可以使用家裝單品購買、查看我的訂單、家裝資訊瀏覽、個人信息管理等功能。
個人信息管理
用戶登錄系統(tǒng)后,在賬戶設置中,可以修改昵稱、頭像、登陸密碼、收貨地址等個人基本信息。
家裝單品搜索
系統(tǒng)首頁展示了家裝單品搜索輸入框,用戶在輸入框內(nèi)輸入與家裝單品類型相關的關鍵字,系統(tǒng)通過模糊查詢搜索到用戶需要的家裝單品并展示。
菜品信息
用戶在瀏覽菜品時,點擊某一個菜品,跳轉到該菜品的信息展示頁。在菜品信息頁面展示了菜品的詳情信息,比如菜品介紹,菜品詳情等,用戶通過瀏覽信息了解菜品的具體信息,最終決定是否購買。
單品下單
在單品信息頁面,用戶可以通過點擊“購買”進行購買單品,點擊后跳轉到訂單生成頁面。訂單生成頁面會展示單品信息,收貨地址,聯(lián)系人等,用戶確認后信息無誤點擊“提交”生成訂單,訂單生成后跳轉到支付頁面,支付完成則購買成功。
查看訂單詳情
用戶在查看我的訂單列表時,可以點擊某一個訂單來查看該訂單的詳細信息,主要包括訂單編號、訂單狀態(tài)、訂單日期、單品信息、交易金額等。
成品訂單
首先需要輸入成品訂單基本信息,如方案名稱、方案類型、設計師編號等;然后需要編輯成品訂單詳情,管理員也可以刪除成品訂單。
- 數(shù)據(jù)庫設計
概念設計包括實體和聯(lián)系兩部分,如該系統(tǒng)中,用戶是一個實體,其屬性包括用戶 ID 標識、用戶名、密碼、電話、地址等屬性。聯(lián)系是指實體之間有意義的關聯(lián),包括一對一、一對多、多對多三種類型。
系統(tǒng)E-R圖如下所示。
?
圖5系統(tǒng)E-R圖
在圖中,用戶購買家裝單品,關系為1:N,管理員管理單品訂單信息,關系為1:N,用戶和訂單的關系為1:N。
連接數(shù)據(jù)庫的文件在Resources?文件夾下的application.yml文件,代碼如下:
server:
??port: 5000
??servlet:
????context-path: /api
spring:
??datasource:
????url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8
????username: root
????password: root
????driver-class-name: com.mysql.cj.jdbc.Driver
??jackson:
????property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES
????default-property-inclusion: ALWAYS
????time-zone: GMT+8
????date-format: yyyy-MM-dd HH:mm:ss
??servlet:
????multipart:
??????max-file-size: 100MB
??????max-request-size: 100MB
針對系統(tǒng)的實體和屬性,結合數(shù)據(jù)設計思想,對系統(tǒng)的邏輯設計的內(nèi)容進行如下描述。
家裝單品(家裝單品編號、單品名稱、圖片、價格、類目、介紹)。
單品訂單(單品訂單編號、單品編號、單品名稱、價格、購買人、購買時間)。
成品訂單(成品訂單編號、成品編號、成品名稱、方案價格、購買人)。
設計師溝通(溝通編號、客戶問題、設計師回復、內(nèi)容)。
家裝資訊(家裝資訊編號、標題、資訊內(nèi)容、資訊列表)。
數(shù)據(jù)庫表是設計和實現(xiàn)系統(tǒng)的一個重要基礎。以下列出了家裝管理系統(tǒng)幾個重要的數(shù)據(jù)庫表。
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| ordinary_users_id | int | 11 | 是 | 是 | 普通用戶ID |
| full_name | varchar | 64 | 否 | 否 | 姓名 |
| gender | varchar | 64 | 否 | 否 | 性別 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| single_product_order_id | int | 11 | 是 | 是 | 單品訂單ID |
| item_no | varchar | 64 | 否 | 否 | 單品編號 |
| item_name | varchar | 64 | 否 | 否 | 單品名稱 |
| item_type | varchar | 64 | 否 | 否 | 單品類型 |
| unit_price | varchar | 64 | 否 | 否 | 單品價格 |
| designer_number | int | 11 | 否 | 否 | 設計師編號 |
| designer_name | varchar | 64 | 否 | 否 | 設計師姓名 |
| number_of_purchases | varchar | 64 | 否 | 否 | 購買數(shù) |
| total | varchar | 64 | 否 | 否 | 總計 |
| purchaser | int | 11 | 否 | 否 | 購買人 |
| contact_number | varchar | 64 | 否 | 否 | 聯(lián)系電話 |
| contact_address | varchar | 64 | 否 | 否 | 聯(lián)系地址 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| pay_state | varchar | 16 | 是 | 否 | 支付狀態(tài) |
| pay_type | varchar | 16 | 否 | 否 | 支付類型: |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| item_classification_id | int | 11 | 是 | 是 | 單品分類ID |
| item_type | varchar | 64 | 是 | 否 | 單品類型 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| home_decoration_piece_id | int | 11 | 是 | 是 | 家裝單品ID |
| item_no | varchar | 64 | 是 | 否 | 單品編號 |
| item_name | varchar | 64 | 否 | 否 | 單品名稱 |
| item_type | varchar | 64 | 否 | 否 | 單品類型 |
| item_cover | varchar | 255 | 否 | 否 | 單品封面 |
| unit_price | varchar | 64 | 否 | 否 | 單品價格 |
| designer_number | int | 11 | 否 | 否 | 設計師編號 |
| designer_name | varchar | 64 | 否 | 否 | 設計師姓名 |
| item_details | longtext | 0 | 否 | 否 | 單品詳情 |
| hits | int | 11 | 是 | 否 | 點擊數(shù) |
| praise_len | int | 11 | 是 | 否 | 點贊數(shù) |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| finished_product_scheme_id | int | 11 | 是 | 是 | 成品方案ID |
| scheme_name | varchar | 64 | 否 | 否 | 方案名稱 |
| scheme_type | varchar | 64 | 否 | 否 | 方案類型 |
| scheme_cover | varchar | 255 | 否 | 否 | 方案封面 |
| designer_number | int | 11 | 否 | 否 | 設計師編號 |
| designer_name | varchar | 64 | 否 | 否 | 設計師姓名 |
| scheme_price | varchar | 64 | 否 | 否 | 方案價格 |
| scheme_details | longtext | 0 | 否 | 否 | 方案詳情 |
| hits | int | 11 | 是 | 否 | 點擊數(shù) |
| praise_len | int | 11 | 是 | 否 | 點贊數(shù) |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| finished_product_order_id | int | 11 | 是 | 是 | 成品訂單ID |
| scheme_name | varchar | 64 | 否 | 否 | 方案名稱 |
| scheme_type | varchar | 64 | 否 | 否 | 方案類型 |
| designer_number | int | 11 | 否 | 否 | 設計師編號 |
| designer_name | varchar | 64 | 否 | 否 | 設計師姓名 |
| scheme_price | varchar | 64 | 否 | 否 | 方案價格 |
| next_person | int | 11 | 否 | 否 | 下單人 |
| scheduled_time | date | 0 | 否 | 否 | 預定時間 |
| contact_number | varchar | 64 | 否 | 否 | 聯(lián)系電話 |
| contact_address | varchar | 64 | 否 | 否 | 聯(lián)系地址 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| pay_state | varchar | 16 | 是 | 否 | 支付狀態(tài) |
| pay_type | varchar | 16 | 否 | 否 | 支付類型: |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| design_communication_id | int | 11 | 是 | 是 | 設計溝通ID |
| scheme_name | varchar | 64 | 否 | 否 | 方案名稱 |
| scheme_type | varchar | 64 | 否 | 否 | 方案類型 |
| designer_number | int | 11 | 否 | 否 | 設計師編號 |
| designer_name | varchar | 64 | 否 | 否 | 設計師姓名 |
| user | int | 11 | 否 | 否 | 用戶 |
| guest_book_ | text | 0 | 否 | 否 | 用戶留言 |
| designer_reply | text | 0 | 否 | 否 | 設計師回復 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| conceptual_design_id | int | 11 | 是 | 是 | 方案設計ID |
| designer_number | int | 11 | 否 | 否 | 設計師編號 |
| designer_name | varchar | 64 | 否 | 否 | 設計師姓名 |
| user | int | 11 | 否 | 否 | 用戶 |
| scheme_price | varchar | 64 | 否 | 否 | 方案價格 |
| production_time | date | 0 | 否 | 否 | 出品時間 |
| scheme_details | longtext | 0 | 否 | 否 | 方案詳情 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| pay_state | varchar | 16 | 是 | 否 | 支付狀態(tài) |
| pay_type | varchar | 16 | 否 | 否 | 支付類型: |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
- 系統(tǒng)實現(xiàn)
- 用戶登錄的實現(xiàn)
用戶注冊完成后,點擊“登陸”進入到登陸頁面,輸入用戶名和密碼,點擊“登陸”按鈕,對用戶名和密碼進行驗證,根據(jù)傳入的用戶名和密碼在數(shù)據(jù)庫中是否能查詢到一條用戶信息,若不能返回用戶信息則登陸失敗,頁面提示用戶名或密碼錯誤。
登陸攔截管理器,在config文件夾下的WebAppConfig.java文件,代碼如下:
@Configuration
@Slf4j
public class WebAppConfig implements WebMvcConfigurer {
????@Override
????public void addInterceptors(InterceptorRegistry registry) {
????????//登錄攔截的管理器
????????InterceptorRegistration registration = registry.addInterceptor(loginInterceptor());
????????//攔截的地址
????????registration.addPathPatterns("/**");
????????//方行的地址
//registration.excludePathPatterns("/**");
????????//根據(jù)需要攔截,一般設置所有地址攔截,放行公共連接
????}
????@Bean
????public LoginInterceptor loginInterceptor(){
????????return new LoginInterceptor();
????}
}
登錄界面如下圖所示。
?
圖5-1登錄界面
用戶登錄的關鍵代碼如下。
/**
?????* 登錄
?????* @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, "賬號或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????//判斷是否有這個用戶
????????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)) {
????????????// 存儲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, "賬號或密碼不正確");
????????}
}
- 系統(tǒng)前臺主要功能實現(xiàn)?
用戶界面要盡量簡潔大方,使用戶能夠方便找到需要的功能入口,瀏覽、購買菜品,且要易于修改和維護,同時還要保證用戶合法和系統(tǒng)安全。
首頁界面如下圖所示。
?
圖5-2首頁界面
用戶進入系統(tǒng)首頁后,點擊“注冊”鏈接進入到注冊頁面,按照頁面提示輸入用戶名密碼和手機號,頁面進行表單驗證,驗證輸入的用戶名和賬號是否合法,表單驗證通過后,點擊“立即注冊”按鈕,利用 Ajax 技術,對用戶名和賬號實現(xiàn)頁面無刷新驗證,檢測數(shù)據(jù)庫中是否已經(jīng)存在該用戶名,若數(shù)據(jù)庫中不存在,則注冊成功,注冊成功后,自動跳轉到登錄頁面。
用戶注冊界面如下所示。
????????????
?
圖5-3用戶注冊界面
用戶注冊邏輯代碼如下:
/**
?????* 注冊
?????* @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]用戶獲取其他與用戶相關的數(shù)據(jù)
?????*/
????@Id
????@GeneratedValue(strategy = GenerationType.IDENTITY)
????@Column(name = "user_id")
????private Integer userId;
????/**
?????* 賬戶狀態(tài):[0,10](1可用|2異常|3已凍結|4已注銷)
?????*/
????@Basic
????@Column(name = "state")
????private Integer state;
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權限
?????*/
????@Basic
????@Column(name = "user_group")
????private String userGroup;
????/**
?????* 上次登錄時間:
?????*/
????@Basic
????@Column(name = "login_time")
????private Timestamp loginTime;
????/**
?????* 手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "phone")
????private String phone;
????/**
?????* 手機認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "phone_state")
????private Integer phoneState;
????/**
?????* 用戶名:[0,16]用戶登錄時所用的賬戶名稱
?????*/
????@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]用戶的郵箱,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "email")
????private String email;
????/**
?????* 郵箱認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "email_state")
????private Integer emailState;
????/**
?????* 頭像地址:[0,255]
?????*/
????@Basic
????@Column(name = "avatar")
????private String avatar;
????/**
?????* 創(chuàng)建時間:
?????*/
????@Basic
????@Column(name = "create_time")
????@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
????private Timestamp createTime;
????@Basic
????@Transient
????private String code;
}
家裝單品列表頁面,如下圖所示。
?
?
圖5-4家裝單品列表頁面
家裝單品列表的關鍵代碼如下。
?@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)首頁提供了搜索家裝資訊的輸入框,用戶在輸入框內(nèi)輸入想要查找資訊的關鍵字,點擊搜索按鈕,系統(tǒng)將用戶輸入的關鍵字傳遞到后臺。首先創(chuàng)建一個實體類 PageBean,該實體類的屬性包括頁碼 pageCode、每頁記錄數(shù) pageSize、總記錄數(shù) totalRecord 和一個 List 集合 beanList,用循環(huán)將搜索到的結果分頁展示。
家裝資訊界面如下圖所示。
?
圖5-5家裝資訊界面
家裝資訊的關鍵代碼如下。
?@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());
}
用戶在瀏覽成品方案時,對于確認的成品方案,可以將方案添加購買,點擊“購買”按鈕,頁面將該成品方案的數(shù)據(jù)傳遞到后臺,首先查詢數(shù)據(jù)庫購買訂單表中是否已經(jīng)存在該成品訂單,若存在直接將數(shù)量加一,若不存在則創(chuàng)建一個新的購買訂單對象,添加購買訂單成功,數(shù)據(jù)庫中的購買訂單表添加一條信息。用戶還可以點擊“我的訂單”查看添加到訂單的成品,系統(tǒng)通過讀取 session獲取到用戶 ID,將用戶 ID 傳遞到后臺,在訂單表中查詢該用戶的所有訂單信息,返回數(shù)據(jù)到我的訂單頁面。
訂單添加界面如下圖所示。
?
圖5-6訂單添加界面
支付界面如下圖所示。
?
圖5-7支付界面
成品訂單的關鍵代碼:
??@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);
}
- 系統(tǒng)后臺主要功能實現(xiàn)?
管理員對系統(tǒng)用戶的管理,在管理員管理實現(xiàn)管理員用戶的管理,包括錄入、刪除、修改,修改密碼通過SESSION獲取用戶名,然后輸入新密碼,使用sql命令更新密碼。
用戶管理界面如下圖所示。
?
圖5-8用戶管理界面
管理員可以獲取系統(tǒng)中所有設計師的設計方案列表并對其進行編輯。管理員在添加方案信息時,需要輸入方案的設計師編號、設計師姓名、方案價格、出品時間等,還需要輸入方案詳情描述。
方案設計管理界面如下圖所示。
?
圖5-9方案設計管理界面
方案設計管理關鍵代碼:
?@RestController
@RequestMapping("auth")
public class AuthController extends BaseController<Auth, AuthService> {
????/**
?????* 服務對象
?????*/
????@Autowired
????public AuthController(AuthService service) {
????????setService(service);
管理員在后臺管理界面點擊到所有成品訂單界面列表,可以搜索當前所有成品訂單信息,調(diào)用搜索全部成品訂單的請求,向數(shù)據(jù)庫搜索當前所有成品訂單并將訂單信息以對象的形式層層返回到訂單列表界面,顯示出當前所有成品訂單信息。同時可以刪除過期成品訂單,確認已有成品訂單。
成品訂單管理界面如下圖所示。
?
圖5-10成品訂單管理界面
設計咨詢界面如下圖所示。
?
圖5-11設計咨詢管理界面
成品訂單管理的關鍵代碼如下。
?public Map<String, Object> success(Object o) {
????????Map<String, Object> map = new HashMap<>();
????????if (o == null) {
????????????map.put("result", null);
????????????return map;
????????}
????????if (o instanceof List) {
????????????if (((List) o).size() == 1) {
???????????????o = ?((List) o).get(0);
????????????????map.put("result", o);
????????????}else {
????????????????String jsonString = JSONObject.toJSONString(o);
????????????????JSONArray objects = service.covertArray(JSONObject.parseArray(jsonString));
????????????????map.put("result", objects);
????????????}
????????} else if (o instanceof Integer || o instanceof String) {
????????????map.put("result", o);
????????} else {
????????????String jsonString = JSONObject.toJSONString(o);
????????????JSONObject jsonObject = JSONObject.parseObject(jsonString);
????????????JSONObject j = service.covertObject(jsonObject);
????????????map.put("result", j);
????????}
????????return map;
}
- 系統(tǒng)測試
- 系統(tǒng)可靠性測試
以進入系統(tǒng)首頁的訪問速度為例展示系統(tǒng)的性能測試;系統(tǒng)的主要用戶群體是購物理念較為先進的消費者,系統(tǒng)要在3秒鐘內(nèi)響應;需要完成頁面的菜單欄、首頁輪播圖片、類目及菜品列表、菜品評價以及各功能模塊入口等元素的顯示。
- 系統(tǒng)功能性測試
功能性測試是指執(zhí)行指定的工作流程,通過對一個系統(tǒng)的所有特性和功能都進行測試確保符合需求和規(guī)范。
系統(tǒng)功能性測試表如下表所示。
表11系統(tǒng)功能性測試表
| 編號 | 測試功能 | 測試內(nèi)容 | 測試結果 |
| 1 | 用戶登錄 | 1.驗證用戶名與密碼的正確性。 2.驗證密碼是否可見。 | 通過 |
| 2 | 首頁展示 | 1.首頁數(shù)據(jù)是否成功加載。 2.驗證搜索功能的準確性。 3.驗證是否可以異步加載。 4.驗證導航欄按鈕。 | 通過 |
| 3 | 個人信息修改 | 1.驗證登錄名是否可以正常更改。 2.驗證聯(lián)系方式是否可以更改。 3.驗證收貨地址可以正常修改。 4.驗證密碼是否可以修改。 | 通過 |
| 4 | 成品訂單管理 | 1.購買訂單清單是否可以生成。 2.驗證消費信息是否準確。 | 通過 |
| 7 | 家裝資訊管理 | 1.驗證資訊新增是否可以成功。 2.驗證資訊刪除是否可以成功。 | 通過 |
| 8 | 成品訂單管理 | 1.成品信息是否與上傳一致。 2.是否能完成價格修改。 3.驗證庫存信息修改。 | 通過 |
| 9 | 單品訂單處理 | 1.能否正常上傳單號完成發(fā)貨。 2.驗證數(shù)據(jù)準確性。 | 通過 |
| 10 | 添加家裝單品 | 1.上傳家裝單品是否添加驗證。 2.圖片是否成功上傳。 3.驗證表單是否提交成功。 | 通過 |
| 11 | 用戶管理 | 1.驗證用戶錄入功能。 2.驗證用戶違規(guī)清理功能。 | 通過 |
- 系統(tǒng)合格性測試
集成測試后,所有的模塊已經(jīng)全部連接完畢,形成了一個完整的系統(tǒng)。合格性測試是在集成測試完畢后,進一步對系統(tǒng)進行綜合性的檢測。經(jīng)過合格性測試,可以檢查出系統(tǒng)是否符合系統(tǒng)的設計,能夠完成需求的所有功能。本系統(tǒng)經(jīng)過最后的測試,所有模塊功能都能按預定要求工作。
- 測試結果
在實際測試中,經(jīng)過一系列系統(tǒng)性的測試,使我們能夠及時發(fā)現(xiàn)一些系統(tǒng)在設計中出現(xiàn)的疏忽和漏洞。經(jīng)過嚴密的測試,不僅發(fā)現(xiàn)了模塊內(nèi)部的錯誤,也查找到模塊連接后產(chǎn)生的錯誤。經(jīng)過測試,對系統(tǒng)產(chǎn)生錯誤的地方進行優(yōu)化、修改和完善,使得系統(tǒng)能夠實現(xiàn)最初設計的基本功能。
- 總結與展望
本文針對家裝管理系統(tǒng)的特點和用戶需求,利用 Java相關技術、SSM框架和等技術,通過詳細的需求分析、頁面設計和功能設計,系統(tǒng)利用JQuery 技術和 CSS 技術進行了頁面設計,實現(xiàn)了包括用戶模塊、家裝單品模塊、家裝資訊模塊。成品訂單模塊和方案設計模塊的前臺系統(tǒng)以及包括用戶管理模塊、資訊管理模塊、訂單管理模塊的后臺系統(tǒng)。另外,系統(tǒng)還進行了數(shù)據(jù)安全設計和家裝單品模塊設計,并添加了用戶的訪問控制,建立了一個完整、健壯、安全穩(wěn)定的家裝管理系統(tǒng)。
由于時間限制和本人能力條件有限,還存在一些不足,今后也會出現(xiàn)許多新的開發(fā)技術,未來還可以對程序做出如下改進:
(1)優(yōu)化程序頁面,使頁面更加美觀且方便操作;
(2)優(yōu)化單品搜索功能,提供多條件選擇查詢搜索;
(3)優(yōu)化分類功能,提高分類的精準度;
(4)優(yōu)化在線支付功能,提供更多支付接口,使用戶付款更加方便;
(5)進一步提高使用程序的安全性,使其更加健壯;
(6)優(yōu)化數(shù)據(jù)和代碼,提升軟件效率,方便維護和擴展
參考文獻
[1]陸文嫻.家裝設計中的新中式風格的應用研究[J].流行色,2021(01):80-81.
[2]李洋.現(xiàn)代北歐風格設計色彩和材料的運用[J].西部皮革,2020,42(10):24.
[3]張昱悅.視覺傳達設計元素在家裝設計中的基礎分析[J].建筑與文化,2020(02):190-191.
[4]石嘉佳.現(xiàn)代和式風格在設計中的研究與應用[J].西部皮革,2020,42(02):19-20.
[5]趙坤.設計風格在家裝市場中的應用模式研究[J].家具與室內(nèi)裝飾,2018(04):24-25.
[6]黃雪峰.家裝設計風格調(diào)查與客戶溝通方案模式的分析研究[J].藝術科技,2018,30(11):323.
[7]覃敏. 墻繪藝術在現(xiàn)代室內(nèi)裝飾空間設計中的應用研究[D].湖南科技大學,2018.
[8]劉曉星. 家居裝修設計的快速生成[D].遼寧石油化工大學,2018.
[9]趙坤. 家裝設計風格研究[D].青島大學,2018.
[10]李丹丹.室內(nèi)家裝設計之簡歐風格探究[J].現(xiàn)代裝飾(理論),2018(04):31.
[11]馬曉聰. 基于家裝企業(yè)“一站式”服務體系的構建研究[D].浙江農(nóng)林大學,2018.
[12]侯鵬程. 定制家裝的交互設計模式研究[D].中南林業(yè)科技大學,2018.
[13]莫莫.“有機整體家裝”——現(xiàn)代家裝最“潮”理念[J].21世紀建筑材料居業(yè),2018(03):56-57.
[14]達人.家裝最新流行趨勢[J].時代青年(月讀),2018(01):67.
[15].未來十年家裝流行趨勢預測[J].廣東建材,2018(11):61.
致謝
時光飛逝,轉眼間我在學校的這些年生活即將結束,回顧這幾年的學習生活,收獲良多,既有幸福也有難過,學校生活的結束對于我來說也是一個新的開始。論文即將完成,在此,我心中有許多想要感謝的人。首先感謝我的導師,不僅在學習研究方面加以指導,也在生活和為人處世上給予幫助。還要感謝授課老師,你們嚴謹?shù)膶W術精神和積極向上的工作態(tài)度都在激勵我的成長和進步。感謝多年來一直生活在一起的室友,謝謝你們多年來的陪伴和照顧。最后,要感謝各位論文評審老師,感謝您們在百忙之中抽空評閱本論文并給出寶貴的意見和建議。
點贊+收藏+關注 ?→ ?私信領取本源代碼、數(shù)據(jù)庫
總結
以上是生活随笔為你收集整理的SSM+家装管理系统 毕业设计-附源码191452的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谁“杀死”了杀毒软件
- 下一篇: 数据结构1800题-错题集-第三章