APP+spring boot校园购物网站 毕业设计-附源码041037
springboot校園購(gòu)物網(wǎng)站APP
摘 要
21世紀(jì)的今天,隨著社會(huì)的不斷發(fā)展與進(jìn)步,人們對(duì)于信息科學(xué)化的認(rèn)識(shí),已由低層次向高層次發(fā)展,由原來(lái)的感性認(rèn)識(shí)向理性認(rèn)識(shí)提高,管理工作的重要性已逐漸被人們所認(rèn)識(shí),科學(xué)化的管理,使信息存儲(chǔ)達(dá)到準(zhǔn)確、快速、完善,并能提高工作管理效率,促進(jìn)其發(fā)展。
論文主要是對(duì)校園購(gòu)物網(wǎng)站APP進(jìn)行了介紹,包括研究的現(xiàn)狀,還有涉及的開(kāi)發(fā)背景,然后還對(duì)系統(tǒng)的設(shè)計(jì)目標(biāo)進(jìn)行了論述,還有系統(tǒng)的需求,以及整個(gè)的設(shè)計(jì)方案,對(duì)系統(tǒng)的設(shè)計(jì)以及實(shí)現(xiàn),也都論述的比較細(xì)致,最后對(duì)校園購(gòu)物網(wǎng)站APP 進(jìn)行了一些具體測(cè)試。
本文以springboot為開(kāi)發(fā)技術(shù),實(shí)現(xiàn)了一個(gè)校園購(gòu)物網(wǎng)站APP。校園購(gòu)物網(wǎng)站APP的主要使用者分為用戶、管理員;管理員功能包括有:購(gòu)物資訊、用戶管理、商品管理、分類列表、訂單列表、售后服務(wù);前臺(tái)首頁(yè)功能包括有:首頁(yè)、訂單、購(gòu)物車、購(gòu)物資訊、我的等功能。通過(guò)這些功能模塊的設(shè)計(jì),基本上實(shí)現(xiàn)了整個(gè)校園購(gòu)物網(wǎng)站APP 的過(guò)程。
具體在系統(tǒng)設(shè)計(jì)上,采用了springboot的結(jié)構(gòu),后臺(tái)上采用Mysql數(shù)據(jù)庫(kù),是一個(gè)非常優(yōu)秀的校園購(gòu)物網(wǎng)站APP 。
關(guān)鍵詞:校園購(gòu)物網(wǎng)站;Spring boot框架;
Springboot campus shopping website app
Abstract
Today in the 21st century, with the continuous development and progress of society, people's scientific understanding of information has developed from low-level to high-level, and from the original perceptual understanding to rational understanding. The importance of management has been gradually recognized by people. Scientific management can make information storage accurate, fast and perfect, improve work management efficiency and promote its development.
This paper mainly introduces the campus shopping website app, including the research status and the development background involved, then discusses the design objectives of the system, the requirements of the system and the whole design scheme, and discusses the design and implementation of the system in detail. Finally, it makes some specific tests on the campus shopping website app.
Taking springboot as the development technology, this paper realizes a campus shopping website app. The main users of campus shopping website app are divided into users and administrators; Administrator functions include: shopping information, user management, commodity management, classification list, order list and after-sales service; The front page functions include: home page, order, shopping cart, shopping information, my, etc. Through the design of these functional modules, the whole process of campus shopping website app is basically realized.
Specifically, in the system design, it adopts the structure of springboot and MySQL database in the background. It is a very excellent campus shopping website app.
Key words:Campus shopping website; Spring boot framework;
目 ?錄
第1章 緒論 1
1.1?研究意義 1
1.2?國(guó)內(nèi)外研究現(xiàn)狀 1
1.3?論文組成結(jié)構(gòu) 2
第2章 開(kāi)發(fā)工具及相關(guān)技術(shù)介紹 3
2.1開(kāi)發(fā)技術(shù) 3
2.2?Android技術(shù)介紹 3
2.3 B/S結(jié)構(gòu) 3
2.4?Spring Boot框架 4
2.5?Mysql數(shù)據(jù)庫(kù) 5
第3章 系統(tǒng)分析 6
3.1?可行性分析 6
3.1.1?經(jīng)濟(jì)可行性 6
3.1.2?技術(shù)可行性 6
3.1.3?操作可行性 6
3.2?性能分析 ? 6
3.3?系統(tǒng)操作流程 9
3.3.1用戶登錄流程 9
3.3.2信息添加流程 10
3.3.3信息刪除流程 10
第4章 系統(tǒng)設(shè)計(jì) 11
4.1系統(tǒng)架構(gòu)設(shè)計(jì) 11
4.2開(kāi)發(fā)流程設(shè)計(jì) 11
4.3數(shù)據(jù)庫(kù)設(shè)計(jì) 12
4.3.1實(shí)體ER圖 13
4.3.2數(shù)據(jù)表 13
第5章 系統(tǒng)實(shí)現(xiàn) 17
5.1用戶前臺(tái)功能模塊 17
5.2管理員功能模塊 27
第6章 系統(tǒng)測(cè)試 35
6.1??測(cè)試目的 35
6.2?測(cè)試方案設(shè)計(jì) 35
6.2.1 測(cè)試策略 35
6.2.2 測(cè)試分析 35
6.3 測(cè)試結(jié)果 36
第7章 總結(jié)與展望 37
參考文獻(xiàn) 38
致謝 40
1.1研究意義
校園購(gòu)物網(wǎng)站是指在校園范圍內(nèi)利用基礎(chǔ)網(wǎng)絡(luò)、計(jì)算機(jī)硬件、軟件和電子通訊手段構(gòu)建,為校園內(nèi)師生提供網(wǎng)絡(luò)購(gòu)物的站點(diǎn)。校園購(gòu)物網(wǎng)站的建立有其深遠(yuǎn)的實(shí)踐意義:
?(1)校園購(gòu)物網(wǎng)站能為電子商務(wù)、物流及相關(guān)專業(yè)的特長(zhǎng)生提供實(shí)踐的機(jī)會(huì)。校園購(gòu)物網(wǎng)站為學(xué)生提供電子商務(wù)的實(shí)踐環(huán)境,?為電子商務(wù)理論教學(xué)提供了實(shí)習(xí)基地,為培養(yǎng)電子商務(wù)合格人才創(chuàng)造了條件,為新世紀(jì)電子商務(wù)的全面開(kāi)展打下基礎(chǔ),同時(shí)也可以增加學(xué)生勤工助學(xué)的機(jī)會(huì)。
?(2)校園購(gòu)物網(wǎng)站解決電子商務(wù)中物流配送、信用與安全支付等關(guān)鍵問(wèn)題。校園購(gòu)物網(wǎng)站的物流可以采取買賣雙方通過(guò)E-mail或電話聯(lián)系,共同商討供貨方式。而支付除了現(xiàn)金支付外,還可通過(guò)校園網(wǎng)利用校園卡轉(zhuǎn)賬功能進(jìn)行安全、快捷的資金網(wǎng)上支付。
?(3)校園購(gòu)物網(wǎng)站培養(yǎng)學(xué)生的創(chuàng)業(yè)理念。校園購(gòu)物網(wǎng)站是一個(gè)開(kāi)放的網(wǎng)站,任何人都可以成為買者或者賣者,無(wú)需任何費(fèi)用,可以在網(wǎng)上開(kāi)-一個(gè)店鋪,這些都是大學(xué)生的就業(yè)實(shí)踐,對(duì)于大學(xué)生將來(lái)走上工作崗位是一個(gè)很好的鍛煉機(jī)會(huì)?。
?(4)校園購(gòu)物網(wǎng)站提供二手市場(chǎng)流通學(xué)生的閑置物品,避免資源的浪費(fèi)。每年畢業(yè)生離校時(shí)都要進(jìn)行舊物交易,并且在日常學(xué)習(xí)生活中學(xué)生們也常出現(xiàn)一些閑置物品待交易,這些都能在網(wǎng)上二手交易市場(chǎng)中實(shí)現(xiàn)。在校園購(gòu)物網(wǎng)站中,通過(guò)發(fā)布供求信息,就可以很好地解決二手市場(chǎng)的供求關(guān)系。
1.2國(guó)內(nèi)外研究現(xiàn)狀
隨著計(jì)算機(jī)網(wǎng)絡(luò)的不斷滲透,人們的生活與工作、學(xué)習(xí)的方式也在慢慢發(fā)生變化。傳統(tǒng)的用戶相關(guān)信息管理方式一般都采取人工的方式,信息的獲取、整理、修改、存儲(chǔ)等工作還停留在人工階段。這種方式一方面需要花費(fèi)大量的人力、物力和金錢,交互起來(lái)比較困難,而且會(huì)浪費(fèi)時(shí)間;另一方面對(duì)用戶等信息的管理,特別是隨著用戶數(shù)量的遞增,查詢、修改起來(lái)特別困難;最后由于用戶等其他信息的不斷增加,信息的存儲(chǔ)也成為了難題。
一些發(fā)達(dá)國(guó)家,網(wǎng)絡(luò)發(fā)展比較快,已經(jīng)很大程度上完成了從人工到計(jì)算機(jī)管理的轉(zhuǎn)變。我國(guó)計(jì)算機(jī)應(yīng)用起步比較晚,而且發(fā)展區(qū)域不平衡,還有很多地區(qū)或單位使用傳統(tǒng)的方式進(jìn)行管理,但是目前計(jì)算機(jī)發(fā)展較快,包括網(wǎng)絡(luò)也已經(jīng)普及,很多單位和用戶也開(kāi)始慢慢接觸網(wǎng)絡(luò)管理系統(tǒng)。縱觀這些系統(tǒng)主要有以下幾個(gè)特點(diǎn):
(1)先進(jìn)性:實(shí)現(xiàn)網(wǎng)絡(luò)化管理。
(2)通用性:同一行業(yè)基本都能使用。
(3)方便性:通過(guò)網(wǎng)絡(luò)就能完成管理工作。
(4)及時(shí)性:信息更新及時(shí)。
(5)可擴(kuò)展性:可根據(jù)需要進(jìn)行模塊的增加。
(6)安全性:對(duì)單位、用戶等信息進(jìn)行加密。
截至如今,互聯(lián)網(wǎng)已經(jīng)深入人們的生活,智能手機(jī)、筆記本電腦等已經(jīng)是人們獲取信息的主要工具,這是一個(gè)溝通無(wú)限的時(shí)代,因此,利用網(wǎng)絡(luò)來(lái)進(jìn)行校園購(gòu)物網(wǎng)站APP的管理也成為大勢(shì)所趨,所以,開(kāi)發(fā)一個(gè)校園購(gòu)物網(wǎng)站APP是必須的。
1.3論文組成結(jié)構(gòu)
根據(jù)市場(chǎng)調(diào)研得到的信息數(shù)據(jù),結(jié)合國(guó)內(nèi)外前沿研究,利用相關(guān)系統(tǒng)開(kāi)發(fā)和設(shè)計(jì)方法,最終設(shè)計(jì)出校園購(gòu)物網(wǎng)站APP系統(tǒng) 。
本文共有七章,如下所示。
第一章概述了校園購(gòu)物網(wǎng)站APP系統(tǒng)的研究目的和意義;精煉地總結(jié)了國(guó)內(nèi)外在內(nèi)的領(lǐng)域研究情況和未來(lái)的研究趨勢(shì),最后給出了論文的組成結(jié)構(gòu)。
第二章簡(jiǎn)要概述了本文所用的開(kāi)發(fā)技術(shù)和工具。
第三章簡(jiǎn)要對(duì)系統(tǒng)各業(yè)務(wù)流程進(jìn)行需求分析、可行性分析。
第四章對(duì)校園購(gòu)物網(wǎng)站APP進(jìn)行設(shè)計(jì)。
第五章對(duì)校園購(gòu)物網(wǎng)站APP進(jìn)行實(shí)現(xiàn),并貼出相關(guān)頁(yè)面截圖,語(yǔ)言描述出具體功能實(shí)現(xiàn)的操作方法。
第六章對(duì)校園購(gòu)物網(wǎng)站APP采用測(cè)試用例的方式來(lái)對(duì)一些主要功能模塊測(cè)試,最后得出測(cè)試結(jié)果。
第七章總結(jié)全文并對(duì)未來(lái)的研究做出展望。
2.1開(kāi)發(fā)技術(shù)
本系統(tǒng)前端框架采用了比較流行的漸進(jìn)式JavaScript框架Vue.js。使用Vue-Router和Vuex實(shí)現(xiàn)動(dòng)態(tài)路由和全局狀態(tài)管理,Ajax實(shí)現(xiàn)前后端通信,Element UI組件庫(kù)使頁(yè)面快速成型。后端部分:采用springboot作為開(kāi)發(fā)框架,同時(shí)集成MyBatis、Redis等相關(guān)技術(shù)。
Android是基于Linux內(nèi)核的操作系統(tǒng),早期由Google開(kāi)發(fā),后由開(kāi)放手機(jī)聯(lián)盟開(kāi)發(fā)。它采用了軟件堆的架構(gòu),主要分為三部分。底層以Linux內(nèi)核工作為基礎(chǔ),只提供基本功能;其他的應(yīng)用軟件則由各公司自行開(kāi)發(fā),以Java作為編寫(xiě)程序的一部分。另外,為了推廣此技術(shù),Google和其它幾十個(gè)手機(jī)公司建立了開(kāi)放手機(jī)聯(lián)盟。Android在未公開(kāi)之前常被傳聞為GPhone。
它采用了軟件堆層(software stack,又名軟件疊層)的架構(gòu),主要分為三部分:底層以Linux核心為基礎(chǔ),由c語(yǔ)言開(kāi)發(fā),只提供基本功能。中間層包括函數(shù)庫(kù)Library和虛擬機(jī)Virtual Machine,由C++開(kāi)發(fā)。最上層是各種應(yīng)用軟件,包括通話程序,短信程序等,應(yīng)用軟件則由各公司自行開(kāi)發(fā),以Java編寫(xiě)。
2.3B/S結(jié)構(gòu)
B/S(瀏覽器/服務(wù)器)結(jié)構(gòu)是目前主流的網(wǎng)絡(luò)化的結(jié)構(gòu)模式,它能夠把系統(tǒng)核心功能集中在服務(wù)器上面,可以幫助系統(tǒng)開(kāi)發(fā)人員簡(jiǎn)化操作,便于維護(hù)和使用。只需要用戶在客戶端安裝360瀏覽器、谷歌瀏覽器、QQ瀏覽器等當(dāng)前大眾瀏覽器,在電腦里面安裝sqlserver、mysql數(shù)據(jù)庫(kù)等數(shù)據(jù)庫(kù)。安裝好的瀏覽器與服務(wù)器端的數(shù)據(jù)庫(kù)進(jìn)行信息數(shù)據(jù)的交互。很多專門軟件能夠做到的事情,采用B/S結(jié)構(gòu)模式也能實(shí)現(xiàn),它能夠結(jié)合Web瀏覽器技術(shù),ActiveX技術(shù)以及多種腳本語(yǔ)言等技術(shù)。幫助程序開(kāi)發(fā)者節(jié)約了不少開(kāi)發(fā)成本。目前B/S結(jié)構(gòu)成為程序開(kāi)發(fā)主流結(jié)構(gòu),它最好的地方就是沒(méi)有地點(diǎn)限制還不用專門安裝軟件,筆記本或者電腦能夠上網(wǎng)就能訪問(wèn)系統(tǒng)。系統(tǒng)使用B/S進(jìn)行開(kāi)發(fā)在后期系統(tǒng)維護(hù)上面就會(huì)很省事,不用什么問(wèn)題都在服務(wù)器上面操作,簡(jiǎn)單的客戶端處理就解決部分問(wèn)題,開(kāi)發(fā)出來(lái)的程序跟用戶交互性上面也會(huì)增強(qiáng),還可以實(shí)時(shí)刷新瀏覽器進(jìn)行程序局部的數(shù)據(jù)信息更新。
?
圖1-1 B/S模式三層結(jié)構(gòu)圖
2.4Spring Boot框架
Spring框架是Java系統(tǒng)上的一種開(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ǒng)帶來(lái)了一種抽象機(jī)制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點(diǎn)一起工作,并且?guī)缀蹩梢栽贘ava系統(tǒng)的任何環(huán)境中工作。
2.5Mysql數(shù)據(jù)庫(kù)
數(shù)據(jù)庫(kù)是系統(tǒng)開(kāi)發(fā)過(guò)程中不可或缺的一部分。 在WEB應(yīng)用方面,MySQL AB開(kāi)發(fā)了一個(gè)具有很大優(yōu)勢(shì)的MySQL關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)。 MySQL可以將數(shù)據(jù)存儲(chǔ)在不同的表中,這非常靈活,并且還可以提高系統(tǒng)在實(shí)際應(yīng)用中的速度。 數(shù)據(jù)庫(kù)訪問(wèn)最常用于標(biāo)準(zhǔn)SQL語(yǔ)言,MySQL用于SQL語(yǔ)言,因此它具有高度兼容性。數(shù)據(jù)庫(kù)的操作是必不可少的,包括對(duì)數(shù)據(jù)庫(kù)表的增加、刪除、修改、查詢等功能。現(xiàn)如今,數(shù)據(jù)庫(kù)可以分為關(guān)系型數(shù)據(jù)庫(kù)和非關(guān)系型數(shù)據(jù)庫(kù),Mysql屬于關(guān)系性數(shù)據(jù)庫(kù),Mysql數(shù)據(jù)庫(kù)是一款小型的關(guān)系型數(shù)據(jù)庫(kù),它以其自身特點(diǎn):體積小、速度快、成本低等,Mysql數(shù)據(jù)庫(kù)是目前最受歡迎的開(kāi)源數(shù)據(jù)庫(kù)。
在WEB應(yīng)用技術(shù)中, Mysql數(shù)據(jù)庫(kù)支持不同的操作系統(tǒng)系統(tǒng),雖然在不同系統(tǒng)下的安裝和配置都不相同,但是差別也不是很大,Mysql在Windows系統(tǒng)下兩種安裝方式,二進(jìn)制版和免安裝版。安裝完Mysql數(shù)據(jù)庫(kù)之后,需要啟動(dòng)服務(wù)進(jìn)程,相應(yīng)的客戶端就可以連接數(shù)據(jù)庫(kù),客戶端可通過(guò)命令行或者圖形界面工具登錄數(shù)據(jù)庫(kù)。
3.1可行性分析
本系統(tǒng)將在經(jīng)濟(jì)、技術(shù)、操作這三個(gè)角度上進(jìn)行可行性分析。
整個(gè)系統(tǒng)從設(shè)計(jì)到開(kāi)發(fā)以及測(cè)試過(guò)程嚴(yán)謹(jǐn)步驟齊全,所有工作任務(wù)全部由本人完成,并未獲取外部技術(shù)支持,節(jié)約了一切服務(wù)成本開(kāi)銷以及人工成本,在硬件方面,為節(jié)約成本使用一臺(tái)二手移動(dòng)工作站作為項(xiàng)目部署服務(wù)器以及數(shù)據(jù)庫(kù)服務(wù)器,成本在一萬(wàn)元一下,真?zhèn)€網(wǎng)絡(luò)部署也是由本人獨(dú)立完成不涉及到其他人工費(fèi)用,整個(gè)開(kāi)發(fā)過(guò)程本著低成本,低消耗的原則。
技術(shù)可行性分析的目的是確認(rèn)該系統(tǒng)能否利用現(xiàn)有技術(shù)實(shí)現(xiàn),并評(píng)估開(kāi)發(fā)效率和完成情況。技術(shù)的可行性是指在當(dāng)前的技術(shù)條件下,計(jì)算機(jī)軟件和硬件的開(kāi)發(fā)是否能夠滿足發(fā)展的要求。因?yàn)樵撓到y(tǒng)的開(kāi)發(fā)基于springboot語(yǔ)言,所以開(kāi)發(fā)該系統(tǒng)所需的軟件和硬件條件可以在普通計(jì)算機(jī)上滿足。因?yàn)樗加玫膬?nèi)存相對(duì)較少,所以用Mysql數(shù)據(jù)庫(kù)開(kāi)發(fā)和設(shè)計(jì)軟件理論上沒(méi)有問(wèn)題,因?yàn)樗加玫膬?nèi)存太少。上述技術(shù)可以有效地保證系統(tǒng)的成功和高效開(kāi)發(fā)。
校園購(gòu)物網(wǎng)站APP的使用界面簡(jiǎn)單易于操作,采用常見(jiàn)的界面窗口來(lái)登錄界面,通過(guò)電腦進(jìn)行訪問(wèn)操作,用戶只要平時(shí)使用過(guò)電腦都能進(jìn)行訪問(wèn)操作。此系統(tǒng)的開(kāi)發(fā)采用springboot技術(shù)開(kāi)發(fā),人性化和完善化是B/S結(jié)構(gòu)開(kāi)發(fā)比較顯要的特點(diǎn)使得用戶操作相比較其他更加簡(jiǎn)潔方便。易操作、易管理、交互性好在本系統(tǒng)操作上體現(xiàn)得淋漓盡致。
3.2性能分析
對(duì)于性能分析,與傳統(tǒng)的管理方式相比,傳統(tǒng)的管理方式是使用人工通過(guò)用紙和筆進(jìn)行數(shù)據(jù)信息的統(tǒng)計(jì)和管理,并且這種方式對(duì)于存儲(chǔ)和查找某一數(shù)據(jù)信息都比較麻煩,隨著計(jì)算機(jī)網(wǎng)絡(luò)的到來(lái),這種傳統(tǒng)的方法很難適應(yīng)當(dāng)下社會(huì)的發(fā)展,不僅降低人們的辦事效率,而且還需要很多的人力和物力,對(duì)于使用的時(shí)間和所要花費(fèi)的費(fèi)用都是比較高的,為了降低成本費(fèi)用,提高用戶的工作效率,進(jìn)行開(kāi)發(fā)一套基于計(jì)算機(jī)和網(wǎng)絡(luò)技術(shù)的校園購(gòu)物網(wǎng)站APP。
校園購(gòu)物網(wǎng)站APP系統(tǒng)的開(kāi)發(fā)設(shè)計(jì)時(shí)一個(gè)獨(dú)立的系統(tǒng),以流行數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)的存儲(chǔ)開(kāi)發(fā),主要是為了實(shí)現(xiàn)校園購(gòu)物網(wǎng)站APP的用戶角色及相對(duì)應(yīng)的功能模塊,讓校園購(gòu)物網(wǎng)站APP的管理不會(huì)存在管理差異、低效率,而是跟傳統(tǒng)的管理信息恰好相反,校園購(gòu)物網(wǎng)站APP的實(shí)現(xiàn)可以節(jié)約資源,并且對(duì)于業(yè)務(wù)的處理速度也提高,速度快、效率高,功能性強(qiáng)大。
3.3系統(tǒng)操作流程
3.3.1用戶登錄流程
對(duì)于系統(tǒng)的安全性的第一關(guān),就是用戶想要進(jìn)入系統(tǒng),必須通過(guò)登錄窗口,輸入自己的登錄信息才可以進(jìn)行登錄,用戶輸入的信息準(zhǔn)確無(wú)誤后才可以進(jìn)入到操作系統(tǒng)界面,進(jìn)行功能模塊的相對(duì)應(yīng)操作,如果用戶輸入的信息不正確,則窗口出現(xiàn)提示框,用戶登錄失敗,返回到第一步進(jìn)行重新輸入,如圖3-1所示。
???????????????????????????????圖3-1登錄操作流程圖
?
3.3.2信息添加流程
對(duì)于校園購(gòu)物網(wǎng)站APP,需要隨時(shí)添加所需要的數(shù)據(jù)信息,對(duì)于用戶添加信息,需要根據(jù)添加界面,根據(jù)選框的內(nèi)容進(jìn)行填寫(xiě)所要添加的數(shù)據(jù)信息,信息輸入完成后判斷數(shù)據(jù)信息是否符合要求,符合要求則添加完成,用戶所添加的信息不符合要求,則需要返回到第一步,重新輸入數(shù)據(jù)信息,再進(jìn)行判斷操作,如圖3-2所示。
?
圖3-2 信息添加流程圖
3.3.3信息刪除流程
不管是哪個(gè)用戶角色進(jìn)入到不通的系統(tǒng)操作界面,都可以進(jìn)行不同的信息內(nèi)容的操作功能,對(duì)用系統(tǒng)數(shù)據(jù)信息的刪除,用戶一旦將信息刪除,那么該刪除的數(shù)據(jù)信息將無(wú)法恢復(fù),所以用戶在對(duì)數(shù)據(jù)刪除事,一定判斷刪除的內(nèi)容是否是確定要?jiǎng)h除的,確定無(wú)誤后選擇確定刪除操作,如圖3-3所示。
?
圖3-3?信息刪除流程圖
系統(tǒng)設(shè)計(jì)
4.1系統(tǒng)架構(gòu)設(shè)計(jì)
校園購(gòu)物網(wǎng)站APP的系統(tǒng)項(xiàng)目的概述設(shè)計(jì)分析,主要內(nèi)容流浪寵物救助系統(tǒng)信息的具體分析,進(jìn)行數(shù)據(jù)庫(kù)的是設(shè)計(jì),數(shù)據(jù)采用mysql數(shù)據(jù)庫(kù),并且對(duì)于系統(tǒng)的設(shè)計(jì)采用比較人性化的操作設(shè)計(jì),對(duì)于系統(tǒng)出現(xiàn)的錯(cuò)誤信息可以及時(shí)做出處理及反饋。
校園購(gòu)物網(wǎng)站APP的設(shè)計(jì)基于現(xiàn)有的手機(jī),可以實(shí)現(xiàn)管理員:后臺(tái)首頁(yè)、用戶管理、購(gòu)物資訊、資訊分類列表、商品管理、分類列表、訂單列表、售后服務(wù)等詳細(xì)的了解及統(tǒng)計(jì)分析。根據(jù)系統(tǒng)功能需求建立的模塊關(guān)系圖如下圖:
?????????????????圖4-1管理員功能模塊圖
?
4.2開(kāi)發(fā)流程設(shè)計(jì)
校園購(gòu)物網(wǎng)站APP的開(kāi)發(fā)對(duì)管理模塊和系統(tǒng)使用的數(shù)據(jù)庫(kù)進(jìn)行分析,編寫(xiě)代開(kāi)發(fā),規(guī)劃和操作是構(gòu)建信息管理應(yīng)用程序的必要三步曲,它決定了系統(tǒng)是否能夠真正實(shí)現(xiàn)預(yù)設(shè)功能以及是否可以在成功設(shè)計(jì)后實(shí)施。在開(kāi)發(fā)過(guò)程中,每個(gè)階段必須嚴(yán)格按照線性順序進(jìn)行開(kāi)發(fā),并且在相應(yīng)階段生成的每個(gè)工作都可以通過(guò)技術(shù)進(jìn)行驗(yàn)證和檢查。確保一個(gè)階段完成后是正確的,不會(huì)造成下一階段拖拽現(xiàn)象,使系統(tǒng)完成設(shè)計(jì)功能后得到保證。
從校園購(gòu)物網(wǎng)站APP系統(tǒng)的成功開(kāi)發(fā)經(jīng)驗(yàn)來(lái)看,上述方法效果最為明顯,最大程度地降低了系統(tǒng)開(kāi)發(fā)的復(fù)雜性。如圖4-2所示。
?
圖4-2開(kāi)發(fā)系統(tǒng)流程圖
4.3數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)是信息系統(tǒng)的基礎(chǔ)和核心。數(shù)據(jù)庫(kù)設(shè)計(jì)的好壞直接影響到信息系統(tǒng)開(kāi)發(fā)的成敗。創(chuàng)建數(shù)據(jù)庫(kù)表首先確定實(shí)體的屬性和實(shí)體之間的關(guān)系。根據(jù)關(guān)系創(chuàng)建一個(gè)數(shù)據(jù)表。4.3.1實(shí)體ER圖
數(shù)據(jù)庫(kù)是整個(gè)軟件編程中最重要的一個(gè)步驟,對(duì)于數(shù)據(jù)庫(kù)問(wèn)題主要是判定數(shù)據(jù)庫(kù)的數(shù)量和結(jié)構(gòu)公式的創(chuàng)建。展示系統(tǒng)使用的是Mysql進(jìn)行對(duì)數(shù)據(jù)庫(kù)進(jìn)行管理,進(jìn)行保證數(shù)據(jù)的安全性、穩(wěn)定性等。
概念模型的設(shè)計(jì)是為了抽象真實(shí)世界的信息,并對(duì)信息世界進(jìn)行建模。它是數(shù)據(jù)庫(kù)設(shè)計(jì)的強(qiáng)大工具。數(shù)據(jù)庫(kù)概念模型設(shè)計(jì)可以通過(guò)E-R圖描述現(xiàn)實(shí)世界的概念模型。系統(tǒng)的E-R圖顯示了系統(tǒng)中實(shí)體之間的鏈接。而且Mysql數(shù)據(jù)庫(kù)是自我保護(hù)能力比較強(qiáng)的數(shù)據(jù)庫(kù),下圖主要是對(duì)數(shù)據(jù)庫(kù)實(shí)體的E-R圖:
(1) 評(píng)論管理E-R圖,如圖4-3所示:
?
??????????圖4-3 評(píng)論體屬性圖
?(2)?售后服務(wù)信息E-R圖如圖4-4所示:
?
圖4-4售后服務(wù)信息實(shí)體圖
(3)購(gòu)物車E-R圖如圖4-5所示:
?
圖4-5購(gòu)物車實(shí)體圖
這些功能可以充分滿足校園購(gòu)物網(wǎng)站APP系統(tǒng)的需求。此系統(tǒng)功能較為全面如下圖系統(tǒng)功能結(jié)構(gòu)如圖4-5所示。
????????????????????????????????????????????????圖4-5系統(tǒng)功能結(jié)構(gòu)圖
?
4.3.2數(shù)據(jù)表
我們可以根據(jù)數(shù)據(jù)結(jié)構(gòu)的詳細(xì)分析要求,我們根據(jù)輸入和輸出數(shù)據(jù)量的要求進(jìn)行分析,確定什么表表,結(jié)構(gòu)之間的關(guān)系,我們可以驗(yàn)證,調(diào)整和完善,查詢和瀏覽過(guò)程,可以實(shí)現(xiàn)數(shù)據(jù)庫(kù),以使用戶對(duì)數(shù)據(jù)和功能有更多要求。
基于系統(tǒng)使用的數(shù)據(jù)庫(kù)管理系統(tǒng)的特點(diǎn),對(duì)數(shù)據(jù)庫(kù)的概念模型進(jìn)行了轉(zhuǎn)換和構(gòu)建。但是,這個(gè)系統(tǒng)只需要充分考慮校園購(gòu)物網(wǎng)站APP系統(tǒng)的功能,而且組織比較清晰。
member_user表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| member_user_id | int | 11 | 是 | 是 | 會(huì)員用戶ID |
| user_name | varchar | 64 | 是 | 否 | 用戶名 |
| full_name | varchar | 64 | 否 | 否 | 姓名 |
| gender | varchar | 64 | 否 | 否 | 性別 |
| personal_introduction | varchar | 64 | 否 | 否 | 個(gè)人介紹 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
commodity_management表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| commodity_management_id | int | 11 | 是 | 是 | 商品管理ID |
| remarks | text | 0 | 否 | 否 | 備注 |
| hits | int | 11 | 是 | 否 | 點(diǎn)擊數(shù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| cart_title | varchar | 125 | 否 | 否 | 標(biāo)題 |
| cart_img | text | 0 | 否 | 否 | 封面圖 |
| cart_description | varchar | 255 | 否 | 否 | 描述 |
| cart_price_ago | double | 8 | 是 | 否 | 原價(jià) |
| cart_price | double | 8 | 是 | 否 | 賣價(jià) |
| cart_inventory | int | 11 | 是 | 否 | 商品庫(kù)存 |
| cart_type | varchar | 64 | 是 | 否 | 商品分類: |
| cart_content | longtext | 0 | 否 | 否 | 正文 |
| cart_img_1 | text | 0 | 否 | 否 | 主圖1 |
| cart_img_2 | text | 0 | 否 | 否 | 主圖2 |
| cart_img_3 | text | 0 | 否 | 否 | 主圖3 |
| cart_img_4 | text | 0 | 否 | 否 | 主圖4 |
| cart_img_5 | text | 0 | 否 | 否 | 主圖5 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
comment表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| comment_id | int | 11 | 是 | 是 | 評(píng)論ID |
| user_id | int | 11 | 是 | 否 | 評(píng)論人ID |
| reply_to_id | int | 11 | 是 | 否 | 回復(fù)評(píng)論ID |
| content | longtext | 0 | 否 | 否 | 內(nèi)容 |
| nickname | varchar | 255 | 否 | 否 | 昵稱 |
| avatar | varchar | 255 | 否 | 否 | 頭像地址 |
| create_time | timestamp | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| source_table | varchar | 255 | 否 | 否 | 來(lái)源表 |
| source_field | varchar | 255 | 否 | 否 | 來(lái)源字段 |
| source_id | int | 10 | 是 | 否 | 來(lái)源ID |
after_sale_service表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| after_sale_service_id | int | 11 | 是 | 是 | 售后服務(wù)ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號(hào) |
| trade_name | varchar | 64 | 否 | 否 | 商品名稱 |
| number | varchar | 64 | 否 | 否 | 數(shù)量 |
| after_sales_type | varchar | 64 | 否 | 否 | 售后類型 |
| applicant | int | 11 | 否 | 否 | 申請(qǐng)人 |
| full_name | varchar | 64 | 否 | 否 | 姓名 |
| commodity_certificate | varchar | 255 | 否 | 否 | 商品憑證 |
| after_sales_status | varchar | 64 | 否 | 否 | 售后狀態(tài) |
| describe_the_reason | text | 0 | 否 | 否 | 描述原因 |
| after_sales_reply | text | 0 | 否 | 否 | 售后回復(fù) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
order表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| order_id | int | 11 | 是 | 是 | 訂單ID |
| order_number | varchar | 64 | 否 | 否 | 訂單號(hào) |
| goods_id | mediumint | 8 | 是 | 否 | 商品id |
| title | varchar | 32 | 否 | 否 | 商品標(biāo)題 |
| img | varchar | 255 | 否 | 否 | 商品圖片 |
| price | double | 10 | 是 | 否 | 價(jià)格 |
| price_ago | double | 10 | 是 | 否 | 原價(jià) |
| num | int | 8 | 是 | 否 | 數(shù)量 |
| price_count | double | 8 | 是 | 否 | 總價(jià) |
| norms | varchar | 255 | 否 | 否 | 規(guī)格 |
| type | varchar | 64 | 是 | 否 | 商品分類 |
| contact_name | varchar | 32 | 否 | 否 | 聯(lián)系人姓名 |
| contact_email | varchar | 125 | 否 | 否 | 聯(lián)系人郵箱 |
| contact_phone | varchar | 11 | 否 | 否 | 聯(lián)系人手機(jī) |
| contact_address | varchar | 255 | 否 | 否 | 收件地址 |
| postal_code | varchar | 9 | 否 | 否 | 郵政編碼 |
| user_id | int | 10 | 是 | 否 | 買家ID |
| merchant_id | mediumint | 8 | 是 | 否 | 商家ID |
| create_time | timestamp | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間: |
| description | varchar | 255 | 否 | 否 | 描述 |
| state | varchar | 16 | 是 | 否 | 訂單狀態(tài) |
cart表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| cart_id | int | 11 | 是 | 是 | 購(gòu)物車ID |
| title | varchar | 64 | 否 | 否 | 標(biāo)題 |
| img | varchar | 255 | 是 | 否 | 圖片 |
| user_id | int | 10 | 是 | 否 | 用戶ID |
| create_time | timestamp | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| state | int | 1 | 是 | 否 | 狀態(tài) |
| price | double | 8 | 是 | 否 | 單價(jià) |
| price_ago | double | 8 | 是 | 否 | 原價(jià) |
| price_count | double | 10 | 是 | 否 | 總價(jià) |
| num | int | 8 | 是 | 否 | 數(shù)量 |
| goods_id | mediumint | 8 | 是 | 否 | 商品id |
| type | varchar | 64 | 是 | 否 | 商品分類 |
| description | varchar | 255 | 否 | 否 | 描述 |
5.1用戶前臺(tái)功能模塊
校園購(gòu)物網(wǎng)站APP,在系統(tǒng)首頁(yè)可以查看首頁(yè)、交流論壇、公告欄、學(xué)習(xí)計(jì)劃、課程信息等內(nèi)容,如圖5-1所示。
?
圖5-1首頁(yè)界面圖
登錄,在登錄頁(yè)面通過(guò)填寫(xiě)賬號(hào)、密碼等信息完成登錄,如圖5-3所示。
?
圖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,"用戶不存在");
????????}
????????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("已通過(guò)")){
????????????????return error(30000,"該用戶審核未通過(guò)");
????????????}
????????}
????????//查詢用戶狀態(tài)
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態(tài),不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲(chǔ)Token到數(shù)據(jù)庫(kù)
????????????AccessToken accessToken = new AccessToken();
????????????accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
????????????accessToken.setUser_id(byUsername.getUserId());
????????????tokenService.save(accessToken);
????????????// 返回用戶信息
????????????JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
????????????user.put("token", accessToken.getToken());
????????????JSONObject ret = new JSONObject();
????????????ret.put("obj",user);
????????????return success(ret);
????????} else {
????????????return error(30000, "賬號(hào)或密碼不正確");
????????}
}
用戶注冊(cè),在用戶注冊(cè)頁(yè)面可以填寫(xiě)賬號(hào)、密碼、昵稱、郵箱、手機(jī)號(hào)碼、身份、性別、身份證號(hào)碼等詳細(xì)內(nèi)容進(jìn)行注冊(cè),如圖5-3所示。
?
圖5-3用戶注冊(cè)界面
用戶注冊(cè)關(guān)鍵代碼如下所示。
/**
?????* 注冊(cè)
?????* @param user
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(@RequestBody User user) {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????query.put("username",user.getUsername());
????????List list = service.select(query, new HashMap<>()).getResultList();
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????user.setUserId(null);
????????user.setPassword(service.encryption(user.getPassword()));
????????service.save(user);
????????return success(1);
}
/**
?????* 用戶ID:[0,8388607]用戶獲取其他與用戶相關(guān)的數(shù)據(jù)
?????*/
????@Id
????@GeneratedValue(strategy = GenerationType.IDENTITY)
????@Column(name = "user_id")
????private Integer userId;
????/**
?????* 賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷)
?????*/
????@Basic
????@Column(name = "state")
????private Integer state;
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權(quán)限
?????*/
????@Basic
????@Column(name = "user_group")
????private String userGroup;
????/**
?????* 上次登錄時(shí)間:
?????*/
????@Basic
????@Column(name = "login_time")
????private Timestamp loginTime;
????/**
?????* 手機(jī)號(hào)碼:[0,11]用戶的手機(jī)號(hào)碼,用于找回密碼時(shí)或登錄時(shí)
?????*/
????@Basic
????@Column(name = "phone")
????private String phone;
????/**
?????* 手機(jī)認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
?????*/
????@Basic
????@Column(name = "phone_state")
????private Integer phoneState;
????/**
?????* 用戶名:[0,16]用戶登錄時(shí)所用的賬戶名稱
?????*/
????@Basic
????@Column(name = "username")
????private String username;
????/**
?????* 昵稱:[0,16]
?????*/
????@Basic
????@Column(name = "nickname")
????private String nickname;
????/**
?????* 密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成
?????*/
????@Basic
????@Column(name = "password")
????private String password;
????/**
?????* 郵箱:[0,64]用戶的郵箱,用于找回密碼時(shí)或登錄時(shí)
?????*/
????@Basic
????@Column(name = "email")
????private String email;
????/**
?????* 郵箱認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)
?????*/
????@Basic
????@Column(name = "email_state")
????private Integer emailState;
????/**
?????* 頭像地址:[0,255]
?????*/
????@Basic
????@Column(name = "avatar")
????private String avatar;
????/**
?????* 創(chuàng)建時(shí)間:
?????*/
????@Basic
????@Column(name = "create_time")
????@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
????private Timestamp createTime;
????@Basic
????@Transient
????private String code;
}
我的頁(yè)面通過(guò)填寫(xiě)基本信息、頭像、昵稱、修改頭像、修改昵稱、修改密碼等信息,并可以進(jìn)行修改信息,如圖5-4所示。
?
圖5-4我的界面圖
收貨地址管理,在收貨地址頁(yè)面通過(guò)填寫(xiě)收貨人、手機(jī)號(hào)、詳細(xì)地址等信息進(jìn)行填寫(xiě),如圖5-5所示。 ???????
?
?
圖5-5收貨地址界面圖
管理員登錄,通過(guò)填寫(xiě)注冊(cè)時(shí)輸入的用戶名、密碼、進(jìn)行登錄,如圖5-6所示。
?
圖5-6管理員登錄界面圖
管理員登錄進(jìn)入校園購(gòu)物網(wǎng)站APP后的主要功能是:后臺(tái)首頁(yè)、站點(diǎn)管理(公告欄、輪播圖)用戶管理(管理員、會(huì)員用戶)內(nèi)容管理(購(gòu)物資訊、資訊分類列表)商城管理(商品管理、分類列表、訂單列表)更多管理(售后服務(wù))等信息。還可以對(duì)校園購(gòu)物網(wǎng)站等進(jìn)行管理操作,如圖5-7所示。
?
圖5-7校園購(gòu)物網(wǎng)站首頁(yè)界面圖
購(gòu)物資訊管理,在購(gòu)物資訊管理頁(yè)面中可以查看標(biāo)題、封面圖、文章分類、標(biāo)簽等信息,并可根據(jù)需要對(duì)已有購(gòu)物資訊管理進(jìn)行查看評(píng)論、修改或刪除等詳細(xì)操作,如圖5-8所示。
?
圖5-8購(gòu)物資訊界面圖
購(gòu)物資訊關(guān)鍵代碼如下所示。
@RequestMapping(value = "/del")
????@Transactional
????public Map<String, Object> del(HttpServletRequest request) {
????????service.delete(service.readQuery(request), service.readConfig(request));
????????return success(1);
}
????@Transactional
????public void delete(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
????????sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
????????log.info("[{}] - 刪除操作:{}",table,sql);
????????Query query1 = runCountSql(sql.toString());
????????query1.executeUpdate();
????}
商品管理,在商品信息頁(yè)面中可以查看標(biāo)題、封面圖、賣價(jià)、原價(jià)、商品庫(kù)存、產(chǎn)品分類、描述、備注等內(nèi)容,并且可以對(duì)商品信息進(jìn)行編輯,修改或刪除等詳細(xì)操作,如圖5-9所示。
?
圖5-9商品管理界面圖
商品管理關(guān)鍵代碼如下所示。
@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 "";
????}
訂單列表管理,在訂單列表管理頁(yè)面中可以查看商品名稱、訂單號(hào)、商品圖片、價(jià)格、原價(jià)、購(gòu)買數(shù)量、總價(jià)、聯(lián)系人名稱、聯(lián)系人地址、訂單狀態(tài)、買家等內(nèi)容,并且根據(jù)需要對(duì)已有訂單列表管理進(jìn)行詳情,修改或刪除等詳細(xì)操作,如圖5-10所示。
?
圖5-10訂單列表管理界面圖
訂單列表管理關(guān)鍵代碼如下所示。
??@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????service.insert(service.readBody(request.getReader()));
????????return success(1);
????}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
????public Map<String,Object> readBody(BufferedReader reader){
????????BufferedReader br = null;
????????StringBuilder sb = new StringBuilder("");
????????try{
????????????br = reader;
????????????String str;
????????????while ((str = br.readLine()) != null){
????????????????sb.append(str);
????????????}
????????????br.close();
????????????String json = sb.toString();
????????????return JSONObject.parseObject(json, Map.class);
????????}catch (IOException e){
????????????e.printStackTrace();
????????}finally{
????????????if (null != br){
????????????????try{
????????????????????br.close();
????????????????}catch (IOException e){
????????????????????e.printStackTrace();
????????????????}
????????????}
????????}
????????return null;
}
????public void insert(Map<String,Object> body){
????????StringBuffer sql = new StringBuffer("INSERT INTO ");
????????sql.append("`").append(table).append("`").append(" (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????sql.append("`"+humpToLine(entry.getKey())+"`").append(",");
????????}
????????sql.deleteCharAt(sql.length()-1);
????????sql.append(") VALUES (");
????????for (Map.Entry<String,Object> entry:body.entrySet()){
????????????Object value = entry.getValue();
????????????if (value instanceof String){
????????????????sql.append("'").append(entry.getValue()).append("'").append(",");
????????????}else {
????????????????sql.append(entry.getValue()).append(",");
????????????}
????????}
????????sql.deleteCharAt(sql.length() - 1);
????????sql.append(")");
????????log.info("[{}] - 插入操作:{}",table,sql);
????????Query query = runCountSql(sql.toString());
????????query.executeUpdate();
????}
售后服務(wù),在售后服務(wù)頁(yè)面中可以查看訂單號(hào)、商品名稱、數(shù)量、售后類型、申請(qǐng)人、姓名、商品憑證、售后狀態(tài)等內(nèi)容,并且根據(jù)需要對(duì)已有售后服務(wù)進(jìn)行詳情,修改或刪除等詳細(xì)操作,如圖5-11所示。
?
圖5-11售后服務(wù)界面
售后服務(wù)管理關(guān)鍵代碼如下所示。
@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);
}
6.1測(cè)試目的
程序設(shè)計(jì)不能保證沒(méi)有錯(cuò)誤,這是一個(gè)開(kāi)發(fā)過(guò)程,在錯(cuò)誤或錯(cuò)誤的過(guò)程中難以避免,這是不可避免的,但我們不能使這些錯(cuò)誤始終存在于系統(tǒng)中,錯(cuò)誤可能會(huì)造成無(wú)法估量的后果 如系統(tǒng)崩潰,安全信息,系統(tǒng)無(wú)法正常啟動(dòng),導(dǎo)致安裝用戶手機(jī)屏幕等,為了避免這些問(wèn)題,我們需要測(cè)試程序,并發(fā)現(xiàn)這些問(wèn)題,并糾正它們 ,并使系統(tǒng)更長(zhǎng)時(shí)間穩(wěn)定成熟,本章的作用是發(fā)現(xiàn)這些問(wèn)題,并對(duì)其進(jìn)行修改,雖然耗時(shí)費(fèi)力,但長(zhǎng)期非常重要和必要系統(tǒng)的開(kāi)發(fā)。
軟件測(cè)試與開(kāi)發(fā)過(guò)程是一樣的,都必須按照軟件工程的正規(guī)原理進(jìn)行,遵守管理學(xué)理論。不過(guò),目前國(guó)內(nèi)的軟件測(cè)試已經(jīng)積累了大量經(jīng)驗(yàn)和方法,步驟相對(duì)成熟,軟件測(cè)試的效率也越來(lái)越高。
校園購(gòu)物網(wǎng)站APP系統(tǒng)的實(shí)現(xiàn),對(duì)于系統(tǒng)中功能模塊的實(shí)現(xiàn)及操作都必須通過(guò)測(cè)試進(jìn)行來(lái)評(píng)判系統(tǒng)是否可以準(zhǔn)確的實(shí)現(xiàn)。在校園購(gòu)物網(wǎng)站APP系統(tǒng)正式上傳使用之前必須做的一步就是系統(tǒng)測(cè)試,對(duì)于測(cè)試發(fā)現(xiàn)的錯(cuò)誤及時(shí)修改處理,保證系統(tǒng)準(zhǔn)確無(wú)誤的供給用戶使用。
6.2測(cè)試方案設(shè)計(jì)
6.2.1 測(cè)試策略
1、功能測(cè)試
從用戶的角度來(lái)看,測(cè)試時(shí)不了解新開(kāi)發(fā)軟件的內(nèi)部結(jié)構(gòu),因此可以將系統(tǒng)與黑匣子進(jìn)行比較,盲目輸入后可以查看系統(tǒng)給出的反饋。這種測(cè)試屬于黑盒測(cè)試,在測(cè)試中如果輸入錯(cuò)誤信息系統(tǒng)會(huì)報(bào)錯(cuò)。
2、性能測(cè)試
測(cè)試軟件程序的整體狀況(稱為性能測(cè)試)通常使用自動(dòng)化測(cè)試工具來(lái)檢測(cè)系統(tǒng)的整體功能,在負(fù)載測(cè)試和壓力測(cè)試之間進(jìn)行分配,在某些情況下,將這兩種情況結(jié)合起來(lái)。雖然壓力測(cè)試可以檢測(cè)到系統(tǒng)可以提供的最高級(jí)別的服務(wù),但負(fù)載測(cè)試可以測(cè)試系統(tǒng)如何響應(yīng)增加的負(fù)載。
6.2.2 測(cè)試分析
測(cè)試評(píng)估系統(tǒng)質(zhì)量的方法不局限于系統(tǒng)編碼和過(guò)程,應(yīng)該與軟件設(shè)計(jì)工作和歷史需求分析密切相關(guān)。
軟件測(cè)試應(yīng)遵循以下原則:
(1)軟件測(cè)試應(yīng)盡快進(jìn)行,整個(gè)測(cè)試部分應(yīng)在軟件開(kāi)發(fā)和設(shè)計(jì)的整個(gè)過(guò)程中進(jìn)行。如發(fā)現(xiàn)錯(cuò)誤,立即處理,將大大減少軟件開(kāi)發(fā)的時(shí)間,并提高軟件的質(zhì)量。
(2)在軟件的各種測(cè)試中,測(cè)試過(guò)程中使用的計(jì)劃、報(bào)告等應(yīng)妥善處理和存儲(chǔ)。其主要目的是為了便于以后系統(tǒng)的維護(hù)。
(3)軟件測(cè)試整個(gè)過(guò)程中的聚類現(xiàn)象應(yīng)優(yōu)先考慮。
(4)對(duì)于軟件測(cè)試,我們應(yīng)該盡量不去和自己設(shè)計(jì)的系統(tǒng)進(jìn)行參考,而是要測(cè)試對(duì)方的程序,以確保軟件測(cè)試結(jié)果的客觀性和公平性。
(5)整個(gè)測(cè)試計(jì)劃嚴(yán)格按照軟件測(cè)試的具體實(shí)施細(xì)則進(jìn)行。
(6)對(duì)整個(gè)測(cè)試結(jié)果進(jìn)行綜合檢查,盡量避免重復(fù)錯(cuò)誤。
本校園購(gòu)物網(wǎng)站APP系統(tǒng)滿足用戶的要求和需求,本校園購(gòu)物網(wǎng)站APP系統(tǒng)的使用能夠有效的提高用戶的使用率。
6.3?測(cè)試結(jié)果
測(cè)試后得到的性能和用例,系統(tǒng)具有足夠的正確性、可靠性、穩(wěn)定性,并且可以對(duì)輸入數(shù)據(jù)進(jìn)行準(zhǔn)確的點(diǎn)擊操作處理和響應(yīng)測(cè)試用戶的體驗(yàn)也得到了很好的反饋和響應(yīng)時(shí)間。合理的范圍,可以兼容所有主流瀏覽器,設(shè)計(jì)所需的效果。
通過(guò)校園購(gòu)物網(wǎng)站APP系統(tǒng)的開(kāi)發(fā),本人鞏固了之前學(xué)過(guò)的知識(shí),如今將平時(shí)所學(xué)到的知識(shí)融合在設(shè)計(jì)中,在設(shè)計(jì)過(guò)程中,做了很多的準(zhǔn)備,首先,在數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)過(guò)程中,尤其是在數(shù)據(jù)庫(kù)的工作原理、工作特點(diǎn),對(duì)其深刻的討論,與此同時(shí),對(duì)于小型站點(diǎn)來(lái)說(shuō),最好服務(wù)器的選擇,其次,利用所學(xué)的知識(shí)點(diǎn)分析所做的系統(tǒng),并在此基礎(chǔ)上設(shè)計(jì)。
目前本系統(tǒng)已經(jīng)上線,正在試運(yùn)行階段,用戶反饋良好,基本完成用戶所需,試運(yùn)行過(guò)程中沒(méi)有出現(xiàn)阻斷性問(wèn)題,有一些不足和小問(wèn)題也及時(shí)予以修正,系統(tǒng)上線后,為了保證數(shù)據(jù)的安全性,對(duì)系統(tǒng)進(jìn)行了備份操作,系統(tǒng)備份是每?jī)蓚€(gè)月備份一次,數(shù)據(jù)庫(kù)備份為每周備份一次,系統(tǒng)部署在租賃的云系統(tǒng)服務(wù)器中。
本次系統(tǒng)上線成功后,得到了用戶的高度認(rèn)可,但是在功能上和性能上還需做進(jìn)一步的研究處理,使其有更高的性能和更好的用戶體驗(yàn)。
系統(tǒng)在以后的升級(jí)過(guò)程中,需要解決一系列用戶所提出的問(wèn)題,例如打印過(guò)程中如何避免瀏覽器的兼容性問(wèn)題,大量用戶訪問(wèn)時(shí),如何保持較高的響應(yīng)速度,在系統(tǒng)今后的升級(jí)過(guò)程中將著重解決這些安全性問(wèn)題。
參考文獻(xiàn)
[1]劉在英,楊磊. 一種基于SpringBoot框架的企業(yè)進(jìn)存銷系統(tǒng)的設(shè)計(jì)方法[P]. 山東省:CN114003204A,2022-02-01.
[2]陳碧勇,方敏,申志奎. 基于springboot actuator的監(jiān)控組件擴(kuò)展方法[P]. 福建省:CN113961417A,2022-01-21.
[3]熊柏祥.基于Springboot和Vue框架的考試資源服務(wù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦(理論版),2022,34(01):97-99+103.
[4]霍福華,韓慧.基于SpringBoot微服務(wù)架構(gòu)下前后端分離的MVVM模型[J].電子技術(shù)與軟件工程,2022(01):73-76.
[5]陳曉華. 一種基于springboot框架校友信息管理系統(tǒng)[P]. 重慶市:CN113641510A,2021-11-12.
[6]蘇文強(qiáng),劉紫陽(yáng),苗玉恒.基于SpringBoot的缺陷管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].大眾科技,2021,23(10):4-6+10.
[7]王萍.SpringBoot項(xiàng)目中EhCache緩存技術(shù)的實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2021,17(29):79-81.
[8]吳思瑩,張坤濤,王世華.基于Android的校園購(gòu)物系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2021(14):45-47.
[9]Fuyuan Cheng. Talent Recruitment Management System for Small and Micro Enterprises Based on Springboot Framework[J]. Advances in Educational Technology and Psychology,2021,5(2).
[10]劉欣,李亮亮,牛聰. 基于Vue和SpringBoot框架的流域監(jiān)管平臺(tái)的研究和應(yīng)用[C]//.第十一屆防汛抗旱信息化論壇論文集.,2021:118-122.
[11]Guanhong Chen,Jiangming Xu. Design and implementation of efficient Learning platform based on SpringBoot Framework[J]. Journal of Electronics and Information Science,2020,6(1).
[12]Jian Chen,Chen Jian,Pan Hailan. Design of Man Hour Management Information System on SpringBoot Framework[J]. Journal of Physics: Conference Series,2020,1646(1).
[13]羅業(yè)丁,楊振南,賀英健.基于WEB前端技術(shù)的校園購(gòu)物網(wǎng)站的設(shè)計(jì)與實(shí)現(xiàn)[J].信息記錄材料,2020,21(08):209-210.
[14]不公告發(fā)明人. 一種基于校園的網(wǎng)絡(luò)超市購(gòu)物系統(tǒng)[P]. 湖南:CN108280665A,2018-07-13.
[15]郭峰,麻強(qiáng).基于敏捷方法的校園拼單購(gòu)物系統(tǒng)分析與設(shè)計(jì)[J].中國(guó)新技術(shù)新產(chǎn)品,2018(02):28-30.
[16]賈峰.校園電商平臺(tái)中購(gòu)物車的設(shè)計(jì)與實(shí)現(xiàn)[J].河北軟件職業(yè)技術(shù)學(xué)院學(xué)報(bào),2017,19(02):63-64.
[17]劉利琴.校園購(gòu)物網(wǎng)站下用戶體驗(yàn)?zāi)P驮O(shè)計(jì)與實(shí)現(xiàn)[J].赤峰學(xué)院學(xué)報(bào)(自然科學(xué)版),2017,33(06):20-21.
致謝
時(shí)光飛逝,轉(zhuǎn)眼間我在學(xué)校的這些年生活即將結(jié)束,回顧這幾年的學(xué)習(xí)生活,收獲良多,既有幸福也有難過(guò),學(xué)校生活的結(jié)束對(duì)于我來(lái)說(shuō)也是一個(gè)新的開(kāi)始。論文即將完成,在此,我心中有許多想要感謝的人。首先感謝我的導(dǎo)師,不僅在學(xué)習(xí)研究方面加以指導(dǎo),也在生活和為人處世上給予幫助。還要感謝授課老師,你們嚴(yán)謹(jǐn)?shù)膶W(xué)術(shù)精神和積極向上的工作態(tài)度都在激勵(lì)我的成長(zhǎng)和進(jìn)步。感謝多年來(lái)一直生活在一起的室友,謝謝你們多年來(lái)的陪伴和照顧。最后,要感謝各位論文評(píng)審老師,感謝您們?cè)诎倜χ谐榭赵u(píng)閱本論文并給出寶貴的意見(jiàn)和建議
點(diǎn)贊+收藏+關(guān)注 → 私信領(lǐng)取本源代碼、數(shù)據(jù)庫(kù)
總結(jié)
以上是生活随笔為你收集整理的APP+spring boot校园购物网站 毕业设计-附源码041037的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 联合主键批量查询
- 下一篇: 如何安装redis和给wordpres加