spring boot校园二手销售网站 毕业设计源码161417
目 ?錄
摘要 1
1 緒論 1
1.1 研究背景 1
1.2國(guó)內(nèi)外研究現(xiàn)狀 1
1.3論文結(jié)構(gòu)與章節(jié)安排 1
2開(kāi)發(fā)工具及相關(guān)技術(shù)介紹 ?技術(shù)介紹 3
2.1 MVVM模式介紹 3
2.2?B/S體系工作原理 4
2.3?spring boot框架介紹 4
2.4?JavaScript 運(yùn)行模式 5
2.5?Ajax 應(yīng)用 5
2.6?Vue.js 主要功能 6
3?校園二手銷售網(wǎng)站 ?系統(tǒng)分析 7
3.1 可行性分析 7
3.2 系統(tǒng)流程分析 8
3.2.1 數(shù)據(jù)流程 8
3.3.2 業(yè)務(wù)流程 9
3.3 系統(tǒng)功能分析 9
3.3.1 功能性分析 10
3.3.2 非功能性分析 10
3.4 系統(tǒng)用例分析 11
3.5本章小結(jié) 11
4?校園二手銷售網(wǎng)站 ?總體設(shè)計(jì) 12
4.1 系統(tǒng)架構(gòu)設(shè)計(jì) 13
4.2 系統(tǒng)功能模塊設(shè)計(jì) 14
4.2.1整體功能模塊設(shè)計(jì) 15
4.2.2用戶模塊設(shè)計(jì) 16
4.2.3商城管理模塊設(shè)計(jì) 17
4.2.4訂單管理模塊設(shè)計(jì) 17
4.3 數(shù)據(jù)庫(kù)設(shè)計(jì) 18
4.3.1 數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì) 18
4.3.2 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì) 19
4.4本章小結(jié) 23
5?校園二手銷售網(wǎng)站 ?詳細(xì)設(shè)計(jì)與實(shí)現(xiàn) 23
5.1用戶功能模塊 24
5.1.1 前臺(tái)首頁(yè)界面 25
5.1.2 用戶注冊(cè)界面 27
5.1.3 用戶登錄界面 28
5.1.4在線留言界面 30
5.1.5 收貨地址界面 31
5.1.6 商品詳情界面 33
5.1.7 我的訂單界面 33
5.2管理員功能模塊 34
5.2.1 用戶管理界面 35
5.2.2 在線留言管理界面 36
5.2.3 二手商城管理界面 37
5.2.4 二手資訊界面 38
5.2.5?訂單列表管理界面 39
5.2.6?訂單發(fā)貨界面 40
6系統(tǒng)測(cè)試 41
6.1系統(tǒng)測(cè)試的目的 41
6.2 系統(tǒng)測(cè)試用例 41
6.3 系統(tǒng)測(cè)試結(jié)果 42
結(jié)論 43
參考文獻(xiàn) 44
致??謝 45
摘要
隨著互聯(lián)網(wǎng)的普及以及發(fā)展,在網(wǎng)上出售、購(gòu)買(mǎi)東西變得越來(lái)越日常,出于對(duì)校園發(fā)展的考慮,在很多校園里都實(shí)現(xiàn)了各式各樣的校園二手銷售網(wǎng)站 ,提高了校園資源的利用效率。然而,搭建大部分的網(wǎng)站所需要花費(fèi)的人力和財(cái)力普遍較高,部署高能硬件也是一道坎,使得大部分中校園二手銷售網(wǎng)站都沒(méi)有成型,平臺(tái)的后期維護(hù)費(fèi)用也拖垮了不少用戶。怎樣解決這個(gè)問(wèn)題?我們需要找到一個(gè)更優(yōu)的技術(shù)和方法,來(lái)降低網(wǎng)站的響應(yīng)時(shí)間和做到提高系統(tǒng)高并發(fā)性性能,提升用戶的使用體驗(yàn),降低硬件需求度,能夠使用更便宜的硬件進(jìn)行部署,從而降低網(wǎng)站建設(shè)的成本。此校園二手銷售網(wǎng)站 的開(kāi)發(fā)項(xiàng)目采用springboot技術(shù)+MYSQL數(shù)據(jù)庫(kù),就論題的各類需求分析說(shuō)明做出解釋,然后再就網(wǎng)站的總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)做出論述,給出了網(wǎng)站總體結(jié)構(gòu)的搭建方法。從而滿足大部分中校園二手銷售網(wǎng)站 的需求。
關(guān)鍵詞:springboot技術(shù);MYSQL;校園二手銷售網(wǎng)站 ?
Abstract
With the popularity and development of the Internet, selling and buying things on the Internet has become more and more daily. For the consideration of campus development, a variety of campus second-hand sales websites have been realized in many campuses, which improves the utilization efficiency of campus resources. However, the human and financial resources required to build most websites are generally high, and the deployment of high-energy hardware is also a barrier, which makes most of the secondary sales websites on campus not formed, and the later maintenance cost of the platform also brings down many users. How to solve this problem? We need to find a better technology and method to reduce the response time of the website, improve the high concurrency performance of the system, improve the user experience, reduce the hardware demand, and be able to deploy with cheaper hardware, so as to reduce the cost of website construction. The development project of this campus second-hand sales website adopts springboot technology + MySQL database to explain various needs analysis and instructions of the topic, then discusses the overall design and detailed design of the website, and gives the construction method of the overall structure of the website. So as to meet the needs of most secondary sales websites on campus.
Keywords:?Springboot technology; MYSQL; Campus second-hand sales website
1 緒論
1.1 研究背景
隨著時(shí)代不斷進(jìn)步,社會(huì)不斷發(fā)展.電子商務(wù)得到了不斷地發(fā)展.電子商務(wù)成為了人們?nèi)粘I畹囊徊糠?如今,網(wǎng)上買(mǎi)東西,足不出戶便可以買(mǎi)到想要的東西物美價(jià)廉更是成為了年輕人的主流消費(fèi)方式而電子商務(wù)也正在逐步的走向校園,學(xué)生可以在網(wǎng)上更方便的找工作、購(gòu)物、以及買(mǎi)賣(mài)交易二手物品.綜上所述,校園二手銷售網(wǎng)站系統(tǒng)是有發(fā)展?jié)摿Φ摹?/p>
二手物品在校園中是有市場(chǎng)的.將要畢業(yè)的學(xué)生,可以將二手物品,如書(shū),自行車(chē),暖壺,以及一些不方便攜帶的東西,可以賣(mài)給學(xué)弟學(xué)妹們.這樣可以很大程度上避免浪費(fèi),符合本人國(guó)的可持續(xù)發(fā)展的國(guó)策學(xué)弟學(xué)妹,可以用低廉的價(jià)格,買(mǎi)到自己想要而實(shí)用的物品,符合國(guó)家倡導(dǎo)的勤儉節(jié)約的政策.校園二手商品網(wǎng)上銷售系統(tǒng)無(wú)論是對(duì)丁買(mǎi)方還是賣(mài)方,可以達(dá)到雙贏互助的。
每個(gè)學(xué)校雖然在每年6月份都有跳蚤市場(chǎng),來(lái)頭賣(mài)二手物品但是局限性很大同學(xué)們往往在跳蚤市場(chǎng)逛了天,卻還是無(wú)所獲沒(méi)要買(mǎi)到自己想要的東西.而且魚(yú)龍混雜,經(jīng)常無(wú)法保證售后,以及二手物品的質(zhì)量.而學(xué)生們?nèi)绻谛@二手商品網(wǎng)上銷售系統(tǒng)上交易二手物品.不僅可以讓買(mǎi)賣(mài)變得方便,系統(tǒng)分類簡(jiǎn)單明了,賣(mài)賣(mài)雙方都有學(xué)籍和學(xué)號(hào),很大的程度減少學(xué)生受騙的情況。
綜上三點(diǎn),校園二手商品網(wǎng)上銷售系統(tǒng)既方便,又便捷,還方便管理.符合開(kāi)發(fā)的目的。
1.2國(guó)內(nèi)外研究現(xiàn)狀
由于這幾年來(lái),計(jì)算機(jī)技術(shù)的逐日發(fā)展,在現(xiàn)代化的生活中,我們所需要的各種信息的處理操作都是通過(guò)使用計(jì)算機(jī)來(lái)完成的,有了計(jì)算機(jī)就可以方便的對(duì)各種信息進(jìn)行查詢和維護(hù)了。因此需要實(shí)現(xiàn)對(duì)校園二手交易管理的電子化,提高校園二手交易的管理效能和銷售效能。
因?yàn)閲?guó)內(nèi)外傳統(tǒng)的二手的交易的方式是基于手工的,而人的精力和工作準(zhǔn)確度是有限的,所以傳統(tǒng)的二手交易的數(shù)據(jù)管理方式難免會(huì)存在效率低下、準(zhǔn)確率低等缺點(diǎn),還伴隨著人力資源的大量浪費(fèi)。在管理的工作中,所涉及到的工作電腦機(jī)器比人類更為擅長(zhǎng),能夠達(dá)到快速、準(zhǔn)確、耗費(fèi)資源小等要求。基于這些顯著的優(yōu)點(diǎn),如果能設(shè)計(jì)一套完整且貼合具體校園用戶需求的校園二手銷售網(wǎng)站,那么將大大地提高二手交易的服務(wù)質(zhì)量。在具備這樣的校園二手銷售網(wǎng)站之下,買(mǎi)家只要登錄到系統(tǒng)中就能看到所有的二手商品,進(jìn)行購(gòu)買(mǎi),賣(mài)家只要登錄到系統(tǒng)中就能夠出售二手商品管理人員只需配備少量的專業(yè)人員對(duì)數(shù)據(jù)庫(kù)進(jìn)行日常數(shù)據(jù)審核、管理以及定期維護(hù)。整個(gè)過(guò)程中,使用者只需提供少量的必要信息,大部分?jǐn)?shù)據(jù)處理工作皆由數(shù)據(jù)庫(kù)和相關(guān)程序來(lái)完成,節(jié)省了大量時(shí)間。如果數(shù)據(jù)庫(kù)中的某部分信息存在錯(cuò)誤,那么使用者可以通過(guò)批量修改等方式來(lái)降低排錯(cuò)過(guò)程中所要花費(fèi)的時(shí)間和精力。因此,為校園開(kāi)發(fā)一個(gè)稱職的校園二手銷售網(wǎng)站是十分有必要的。
1.3論文結(jié)構(gòu)與章節(jié)安排
論文將分層次經(jīng)行編排,除去論文摘要致謝文獻(xiàn)參考部分,正文部分還會(huì)對(duì)網(wǎng)站需求做出分析,以及闡述大體的設(shè)計(jì)和實(shí)現(xiàn)的功能,最后羅列部分調(diào)測(cè)記錄,論文主要架構(gòu)如下:
第一章:引言。第一章主要介紹了課題研究的背景,系統(tǒng)開(kāi)發(fā)的現(xiàn)狀和本文的研究?jī)?nèi)容與主要工作。
第二章:系統(tǒng)需求分析。第二章主要從系統(tǒng)的用戶、功能等方面進(jìn)行需求分析。
第三章:系統(tǒng)設(shè)計(jì)。第三章主要對(duì)系統(tǒng)框架、系統(tǒng)功能模塊、數(shù)據(jù)庫(kù)進(jìn)行功能設(shè)計(jì)。
第四章:系統(tǒng)實(shí)現(xiàn)。第四章主要介紹了系統(tǒng)框架搭建、系統(tǒng)界面的實(shí)現(xiàn)。
第五章:系統(tǒng)測(cè)試。第五章主要對(duì)系統(tǒng)的部分界面進(jìn)行測(cè)試并對(duì)主要功能進(jìn)行測(cè)試
2開(kāi)發(fā)工具及相關(guān)技術(shù)介紹???技術(shù)介紹
2.1.MVVM模式介紹:
MVVM是Model-View-ViewModel的簡(jiǎn)寫(xiě)。它本質(zhì)上就是MVC 的改進(jìn)版。MVVM 就是將其中的View 的狀態(tài)和行為抽象化,讓我們將視圖 UI 和業(yè)務(wù)邏輯分開(kāi)。當(dāng)然這些事 ViewModel 已經(jīng)幫我們做了,它可以取出 Model 的數(shù)據(jù)同時(shí)幫忙處理 View 中由于需要展示內(nèi)容而涉及的業(yè)務(wù)邏輯。微軟的WPF帶來(lái)了新的技術(shù)體驗(yàn),如Silverlight、音頻、視頻、3D、動(dòng)畫(huà)……,這導(dǎo)致了軟件UI層更加細(xì)節(jié)化、可定制化。同時(shí),在技術(shù)層面,WPF也帶來(lái)了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來(lái)便是MVP(Model-View-Presenter)模式與WPF結(jié)合的應(yīng)用方式時(shí)發(fā)展演變過(guò)來(lái)的一種新型架構(gòu)框架。它立足于原有MVP框架并且把WPF的新特性糅合進(jìn)去,以應(yīng)對(duì)客戶日益復(fù)雜的需求變化。
2.2 B/S體系工作原理
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)模式。
?
2.3 spring boot框架介紹
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。
2.4 JavaScript 運(yùn)行模式
JavaScript是一種屬于網(wǎng)絡(luò)的高級(jí)腳本語(yǔ)言,已經(jīng)被廣泛用于Web應(yīng)用開(kāi)發(fā),常用來(lái)為網(wǎng)頁(yè)添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過(guò)嵌入在HTML中來(lái)實(shí)現(xiàn)自身的功能的。
1.8.1是一種解釋性腳本語(yǔ)言(代碼不進(jìn)行預(yù)編譯)。
1.8.2主要用來(lái)向HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)頁(yè)面添加交互行為。
1.8.3可以直接嵌入HTML頁(yè)面,但寫(xiě)成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。
1.8.4跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行(如Windows、Linux、Mac、Android、iOS等)。
1.8.5 JavaScript腳本語(yǔ)言同其他語(yǔ)言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運(yùn)算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來(lái)處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。
2.5Ajax 應(yīng)用
該技術(shù)在 1998 年前后得到了應(yīng)用。允許客戶端腳本發(fā)送HTTP請(qǐng)求(XMLHTTP)的第一個(gè)組件由Outlook Web Access小組寫(xiě)成。該組件原屬于微軟 Exchange Server,并且迅速地成為了 Internet Explorer 4.0 的一部分。部分觀察家認(rèn)為,Outlook Web Access 是第一個(gè)應(yīng)用了 Ajax 技術(shù)的成功的商業(yè)應(yīng)用程序,并成為包括Oddpost 的網(wǎng)絡(luò)郵件產(chǎn)品在內(nèi)的許多產(chǎn)品的領(lǐng)頭羊。但是,2005 年初,許多事件使得 Ajax 被大眾所接受。Google 在它著名的交互應(yīng)用程序中使用了異步通訊,如Google、Google 地圖、Google 搜索建議、Gmail等。Ajax 這個(gè)詞由《Ajax: A New Approach to Web Applications》一文所創(chuàng),該文的迅速傳播加強(qiáng)了人們使用該項(xiàng)技術(shù)的意識(shí)。另外,對(duì)Mozilla/Gecko 的支持使得該技術(shù)走向成熟,變得更為易用。
Ajax 前景非常樂(lè)觀,可以提高系統(tǒng)性能,優(yōu)化用戶界面。Ajax 現(xiàn)有直接框架 AjaxPro,可以引入 AjaxPro.2.dll 文件,可以直接在前臺(tái)頁(yè)面 JavaScript 調(diào)用后臺(tái)頁(yè)面的方法。但此框架與表單驗(yàn)證有沖突。另外微軟也引入了 Ajax 組件,需要添加AjaxControlToolkit.dll 文件,可以在控件列表中出現(xiàn)相關(guān)控件。
?
2.6 Vue.js 主要功能
Vue.js是一套構(gòu)建用戶界面的漸進(jìn)式框架。與其他重量級(jí)框架不同的是,Vue采用自底向上增量開(kāi)發(fā)的設(shè)計(jì)。Vue 的核心庫(kù)只關(guān)注視圖層,并且非常容易學(xué)習(xí),非常容易與其它庫(kù)或已有項(xiàng)目整合。另一方面,Vue 完全有能力驅(qū)動(dòng)采用單文件組件和Vue生態(tài)系統(tǒng)支持的庫(kù)開(kāi)發(fā)的復(fù)雜單頁(yè)應(yīng)用。
Vue.js 的目標(biāo)是通過(guò)盡可能簡(jiǎn)單的 API 實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件。
Vue.js 自身不是一個(gè)全能框架——它只聚焦于視圖層。因此它非常容易學(xué)習(xí),非常容易與其它庫(kù)或已有項(xiàng)目整合。另一方面,在與相關(guān)工具和支持庫(kù)一起使用時(shí),Vue.js 也能驅(qū)動(dòng)復(fù)雜的單頁(yè)應(yīng)用。
3?校園二手銷售網(wǎng)站 ?系統(tǒng)分析
系統(tǒng)分析是開(kāi)發(fā)一個(gè)項(xiàng)目的先決條件,通過(guò)系統(tǒng)分析可以很好的了解系統(tǒng)的主體用戶的基本需求情況,同時(shí)這也是項(xiàng)目的開(kāi)發(fā)的原因。進(jìn)而對(duì)系統(tǒng)開(kāi)發(fā)進(jìn)行可行性分析,通常包括技術(shù)可行性、經(jīng)濟(jì)可行性等,可行性分析同時(shí)也是從項(xiàng)目整體角度進(jìn)行的分析。然后就是對(duì)項(xiàng)目的具體需求進(jìn)行分析,分析的手段一般都是通過(guò)用戶的用例圖來(lái)實(shí)現(xiàn)。下面是詳細(xì)的介紹。
本系統(tǒng)將在經(jīng)濟(jì)、技術(shù)、操作這三個(gè)角度上進(jìn)行可行性分析。
3.1?可行性分析
(1)經(jīng)濟(jì)可行性
整個(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ò)程本著低成本,低消耗的原則。
綜上所述經(jīng)濟(jì)可行性也沒(méi)有問(wèn)題。
(2)技術(shù)可行性
技術(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ā)基于Java語(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ā)。
綜上所述技術(shù)可行性也沒(méi)有問(wèn)題。
(3)法律可行性:
從開(kāi)發(fā)者角度來(lái)看,springboot和MYSQL是網(wǎng)上開(kāi)源且免費(fèi)的,在知識(shí)產(chǎn)權(quán)方面不會(huì)產(chǎn)生任何法律糾紛。
從用戶使用角度來(lái)看,只要不再系統(tǒng)上販賣(mài)違禁品,對(duì)系統(tǒng)做出條約協(xié)議,杜絕非法支付即可。
綜上所述法律可行性也沒(méi)有問(wèn)題。
3.2 系統(tǒng)流程分析
3.2.1?數(shù)據(jù)流程
校園二手銷售網(wǎng)站主要的目的就是實(shí)現(xiàn)對(duì)二手商品的在線選購(gòu),圖2-1就是系統(tǒng)的數(shù)據(jù)流圖。
?
圖2-1商品購(gòu)買(mǎi)操作展開(kāi)圖
3.3.2?業(yè)務(wù)流程
分析完系統(tǒng)的數(shù)據(jù)流,接下來(lái)我們來(lái)看系統(tǒng)的業(yè)務(wù)流程,圖2-2就是業(yè)務(wù)流程圖:
?
圖3-2業(yè)務(wù)流程圖
3.3?系統(tǒng)功能分析
3.3.1 功能性分析
按照校園二手銷售網(wǎng)站的角色,我劃分為了用戶管理模塊、管理員管理模塊這兩大部分。
用戶管理模塊:
(1)用戶注冊(cè)登錄:用戶注冊(cè)為會(huì)員并登錄校園二手銷售網(wǎng)站;用戶對(duì)個(gè)人信息的增刪改查,比如個(gè)人資料,密碼修改。
(2)用戶查看商品:用戶進(jìn)行商品信息的閱覽,通過(guò)發(fā)現(xiàn)喜歡的商品后可以購(gòu)買(mǎi)+評(píng)論+收藏。
(3)二手資訊:用戶進(jìn)行資訊的閱覽,查看管理者發(fā)布的二手資訊信息。
(4)在線留言:用戶在留言這一菜單下對(duì)用戶提交的查看、同時(shí)也可以發(fā)布留言、評(píng)論。
(5)我的訂單:用戶在提交訂單后,可以對(duì)提交的訂單進(jìn)行管理。
管理員管理模塊:
(1)用戶管理:管理員可以對(duì)前臺(tái)上注冊(cè)過(guò)的用戶信息進(jìn)行管控,也可以對(duì)管理員信息進(jìn)行管控。
(2)二手資訊管理:管理員在后臺(tái)可以對(duì)校園二手銷售網(wǎng)站中顯示的二手資訊信息進(jìn)行增刪改查。
(3)分類列表管理:管理員對(duì)校園二手銷售網(wǎng)站中商品的分類進(jìn)行管控。
(4)二手商城管理:管理員對(duì)賣(mài)家提交的商品訂單進(jìn)行管控。
(5)留言管理:管理員可以對(duì)校園二手銷售網(wǎng)站中用戶提交的留言以及留言的分類進(jìn)行增刪改查。
(6)站點(diǎn)管理:管理員可以對(duì)校園二手銷售網(wǎng)站中首頁(yè)顯示的輪播圖以及系統(tǒng)中的一些公告發(fā)布到系統(tǒng)當(dāng)中,讓用戶及時(shí)的查看到系統(tǒng)信息,進(jìn)行合理安排。
3.3.2 非功能性分析
1.系統(tǒng)處理的準(zhǔn)確性和機(jī)密性
系統(tǒng)軟件應(yīng)確保公司內(nèi)部信息內(nèi)容的機(jī)密性,以確保用戶利益。系統(tǒng)軟件應(yīng)選擇管理權(quán)限,操縱不同客戶的應(yīng)用程序管理權(quán)限,并且客戶不得濫用該權(quán)限進(jìn)行實(shí)際操作。系統(tǒng)軟件應(yīng)確保數(shù)據(jù)信息的安全性。另外,客戶指定系統(tǒng)軟件具有縱橫比的可信度,數(shù)據(jù)信息的準(zhǔn)確性,并且系統(tǒng)軟件是可恢復(fù)的。
2.系統(tǒng)軟件的開(kāi)發(fā)和可擴(kuò)展性
客戶會(huì)在系統(tǒng)使用過(guò)程中不斷對(duì)系統(tǒng)提出新要求,擴(kuò)展系統(tǒng)功能,這就要求系統(tǒng)軟件必須具有出色的可伸縮性,以考慮到客戶的長(zhǎng)期和易于使用的法規(guī),客戶會(huì)在系統(tǒng)使用過(guò)程中不斷對(duì)系統(tǒng)提出新要求,擴(kuò)展系統(tǒng)功能。
3.系統(tǒng)軟件的便利性和可執(zhí)行性
控制系統(tǒng)設(shè)計(jì)應(yīng)個(gè)性化,用戶界面應(yīng)該做到清晰簡(jiǎn)單一目了然,操作簡(jiǎn)單方便,達(dá)到人機(jī) 友好的目的。
4.系統(tǒng)軟件的響應(yīng)時(shí)間
系統(tǒng)軟件響應(yīng)速度是考慮系統(tǒng)軟件特性的優(yōu)缺點(diǎn)的關(guān)鍵參考。該系統(tǒng)要求響應(yīng)速度短,升級(jí)解決方案快,數(shù)據(jù)交換和傳輸時(shí)間短以及后臺(tái)管理網(wǎng)絡(luò)服務(wù)器的響應(yīng)速度快。由于系統(tǒng)軟件用戶的唯一性,系統(tǒng)軟件必須立即有效地做出響應(yīng)。并且,請(qǐng)務(wù)必在安全前提下確保高效的響應(yīng)能力。
校園二手銷售網(wǎng)站的非功能性需求比如校園二手銷售網(wǎng)站的安全性怎么樣,可靠性怎么樣,性能怎么樣,可拓展性怎么樣等。具體可以表示在如下3-1表格中:
表3-1校園二手銷售網(wǎng)站非功能需求表
| 安全性 | 主要指校園二手銷售網(wǎng)站數(shù)據(jù)庫(kù)的安裝,數(shù)據(jù)庫(kù)的使用和密碼的設(shè)定必須合乎規(guī)范。 |
| 可靠性 | 可靠性是指校園二手銷售網(wǎng)站能夠安裝用戶的指示進(jìn)行操作,經(jīng)過(guò)測(cè)試,可靠性90%以上。 |
| 性能 | 性能是影響校園二手銷售網(wǎng)站占據(jù)市場(chǎng)的必要條件,所以性能最好要佳才好。 |
| 可擴(kuò)展性 | 比如數(shù)據(jù)庫(kù)預(yù)留多個(gè)屬性,比如接口的使用等確保了系統(tǒng)的非功能性需求。 |
| 易用性 | 用戶只要跟著校園二手銷售網(wǎng)站的頁(yè)面展示內(nèi)容進(jìn)行操作,就可以了。 |
| 可維護(hù)性 | 校園二手銷售網(wǎng)站開(kāi)發(fā)的可維護(hù)性是非常重要的,經(jīng)過(guò)測(cè)試,可維護(hù)性沒(méi)有問(wèn)題 |
3.4?系統(tǒng)用例分析
通過(guò)2.3功能的分析,得出了本校園二手銷售網(wǎng)站的用例圖:
用戶角色用例如圖2-3所示。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
?
圖2-3?校園二手銷售網(wǎng)站 ?用戶角色用例圖
web后臺(tái)管理上的管理員是維護(hù)整個(gè)校園二手銷售網(wǎng)站中所有數(shù)據(jù)信息的管理員角色用例如圖2-5所示。
?
?
圖2-5?校園二手銷售網(wǎng)站管理員角色用例圖
3.6本章小結(jié)
本章主要通過(guò)對(duì)校園二手銷售網(wǎng)站的可行性分析、流程分析、功能需求分析、系統(tǒng)用例分析,確定整個(gè)校園二手銷售網(wǎng)站要實(shí)現(xiàn)的功能。同時(shí)也為校園二手銷售網(wǎng)站的代碼實(shí)現(xiàn)和測(cè)試提供了標(biāo)準(zhǔn)。
4 校園二手銷售網(wǎng)站 ?總體設(shè)計(jì)
本章主要討論的內(nèi)容包括校園二手銷售網(wǎng)站 ?的功能模塊設(shè)計(jì)、數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)。
4.1 系統(tǒng)架構(gòu)設(shè)計(jì)
本校園二手銷售網(wǎng)站從架構(gòu)上分為三層:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)以及數(shù)據(jù)層(DL)。
圖3-1校園二手銷售網(wǎng)站 ?系統(tǒng)架構(gòu)設(shè)計(jì)圖
?
表現(xiàn)層(UI):又稱UI層,主要完成本校園二手銷售網(wǎng)站的UI交互功能,一個(gè)良好的UI可以打打提高用戶的用戶體驗(yàn),增強(qiáng)用戶使用本校園二手銷售網(wǎng)站時(shí)的舒適度。UI的界面設(shè)計(jì)也要適應(yīng)不同版本的校園二手銷售網(wǎng)站以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用戶進(jìn)行交互操作時(shí)必須要得到與之相符的交互結(jié)果,這就要求表現(xiàn)層要與業(yè)務(wù)邏輯層進(jìn)行良好的對(duì)接。
業(yè)務(wù)邏輯層(BLL):主要完成本校園二手銷售網(wǎng)站的數(shù)據(jù)處理功能。用戶從表現(xiàn)層傳輸過(guò)來(lái)的數(shù)據(jù)經(jīng)過(guò)業(yè)務(wù)邏輯層進(jìn)行處理交付給數(shù)據(jù)層,系統(tǒng)從數(shù)據(jù)層讀取的數(shù)據(jù)經(jīng)過(guò)業(yè)務(wù)邏輯層進(jìn)行處理交付給表現(xiàn)層。
數(shù)據(jù)層(DL):由于本校園二手銷售網(wǎng)站的數(shù)據(jù)是放在服務(wù)端的mysql數(shù)據(jù)庫(kù)中,因此本屬于服務(wù)層的部分可以直接整合在業(yè)務(wù)邏輯層中,所以數(shù)據(jù)層中只有數(shù)據(jù)庫(kù),其主要完成本校園二手銷售網(wǎng)站的數(shù)據(jù)存儲(chǔ)和管理功能。
4.2?系統(tǒng)功能模塊設(shè)計(jì)
4.2.1整體功能模塊設(shè)計(jì)
在上一章節(jié)中主要對(duì)系統(tǒng)的功能性需求和非功能性需求進(jìn)行分析,并且根據(jù)需求分析了本校園二手銷售網(wǎng)站中的用例。那么接下來(lái)就要開(kāi)始對(duì)本校園二手銷售網(wǎng)站的架構(gòu)、主要功能和數(shù)據(jù)庫(kù)開(kāi)始進(jìn)行設(shè)計(jì)。校園二手銷售網(wǎng)站根據(jù)前面章節(jié)的需求分析得出,其總體設(shè)計(jì)模塊圖如圖3-2所示。
?
圖3-2?校園二手銷售網(wǎng)站功能模塊圖
前臺(tái)適用用于用戶的登錄、注冊(cè)、二手商品的展示和檢索、商品的購(gòu)買(mǎi)和查看自己的訂單等。
后臺(tái)包括管理員登錄、增加商品、查看和修改商品信息、訂單管理、用戶管理。
4.2.2用戶模塊設(shè)計(jì)
后臺(tái)管理者能夠?qū)崿F(xiàn)對(duì)前臺(tái)注冊(cè)的用戶增刪改查操作,用戶模塊結(jié)構(gòu)圖如下圖:
?
圖3-3會(huì)員用戶模塊結(jié)構(gòu)圖
4.2.3商城管理模塊設(shè)計(jì)
校園二手銷售網(wǎng)站是中需要存儲(chǔ)不少商品信息,其模塊功能結(jié)構(gòu),具體的結(jié)構(gòu)圖如下:
?
圖3-4商城模塊結(jié)構(gòu)圖
4.2.4訂單管理模塊設(shè)計(jì)
校園二手銷售網(wǎng)站最重要的一個(gè)功能就是購(gòu)買(mǎi),其模塊功能結(jié)構(gòu),具體的結(jié)構(gòu)圖如下:
?
圖3-5訂單模塊結(jié)構(gòu)圖
4.3 數(shù)據(jù)庫(kù)設(shè)計(jì)
數(shù)據(jù)庫(kù)設(shè)計(jì)一般包括需求分析、概念模型設(shè)計(jì)、數(shù)據(jù)庫(kù)表建立三大過(guò)程,其中需求分析前面章節(jié)已經(jīng)闡述,概念模型設(shè)計(jì)有概念模型和邏輯結(jié)構(gòu)設(shè)計(jì)兩部分。
4.3.1 數(shù)據(jù)庫(kù)概念結(jié)構(gòu)設(shè)計(jì)
下面是整個(gè)校園二手銷售網(wǎng)站 ?中主要的數(shù)據(jù)庫(kù)表總E-R實(shí)體關(guān)系圖。
圖3-6?校園二手銷售網(wǎng)站總E-R關(guān)系圖
?
下面根據(jù)校園二手銷售網(wǎng)站的數(shù)據(jù)庫(kù)總E-R關(guān)系圖可以得出校園二手銷售網(wǎng)站需要很多E-R圖,在此羅列出來(lái)一些主要的數(shù)據(jù)庫(kù)E-R模型圖。
?
圖3-7訂單發(fā)貨E-R關(guān)系圖
?
圖3-8?二手商城信息E-R關(guān)系圖
?
圖3-9?地址信息E-R關(guān)系圖
?
圖3-10?評(píng)論E-R關(guān)系圖
4.3.2 數(shù)據(jù)庫(kù)邏輯結(jié)構(gòu)設(shè)計(jì)
通過(guò)上一小節(jié)中校園二手銷售網(wǎng)站中總E-R關(guān)系圖上得出一共需要?jiǎng)?chuàng)建很多個(gè)數(shù)據(jù)表。在此我主要羅列幾個(gè)主要的數(shù)據(jù)庫(kù)表結(jié)構(gòu)設(shè)計(jì)。
表3-1?user_registration用戶注冊(cè)表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| user_registration_id | int | 11 | 是 | 是 | 用戶注冊(cè)ID |
| gender | varchar | 64 | 否 | 否 | 性別 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態(tài) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
表3-2?second_hand_mall二手商城表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| second_hand_mall_id | int | 11 | 是 | 是 | 二手商城ID |
| condition | varchar | 64 | 否 | 否 | 成色 |
| 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 | 是 | 否 | 賣(mài)價(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í)間 |
表3-3 praise點(diǎn)贊表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| praise_id | int | 10 | 是 | 是 | 點(diǎn)贊ID |
| user_id | int | 11 | 是 | 否 | 點(diǎn)贊人 |
| 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 |
| status | tinyint | 1 | 是 | 否 | 點(diǎn)贊狀態(tài) |
表3-4?address收貨地址表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| address_id | int | 11 | 是 | 是 | 收貨地址 |
| name | varchar | 32 | 否 | 否 | 姓名 |
| phone | varchar | 13 | 否 | 否 | 手機(jī) |
| postcode | varchar | 8 | 否 | 否 | 郵編 |
| address | varchar | 255 | 是 | 否 | 地址: |
| user_id | mediumint | 8 | 是 | 否 | 用戶ID |
| create_time | timestamp | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
| default | tinyint | 1 | 是 | 否 | 默認(rèn)判斷 |
表3-5 comment評(píng)論信息表
| 名稱 | 類型 | 長(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 |
表3-6?order_shipment訂單發(fā)貨表
| 名稱 | 類型 | 長(zhǎng)度 | 不是null | 主鍵 | 注釋 |
| order_shipment_id | int | 11 | 是 | 是 | 訂單發(fā)貨ID |
| order_number | varchar | 64 | 否 | 否 | 訂單編號(hào) |
| trade_name | varchar | 64 | 否 | 否 | 商品名稱 |
| shipment_quantity | int | 11 | 否 | 否 | 發(fā)貨數(shù)量 |
| delivery_time | date | 0 | 否 | 否 | 發(fā)貨時(shí)間 |
| delivery_logistics | varchar | 64 | 否 | 否 | 發(fā)貨物流 |
| shipment_no | varchar | 64 | 否 | 否 | 發(fā)貨單號(hào) |
| user_account | int | 11 | 否 | 否 | 用戶賬號(hào) |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創(chuàng)建時(shí)間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時(shí)間 |
4.4本章小結(jié)
整個(gè)校園二手銷售網(wǎng)站的需求分析主要對(duì)系統(tǒng)總體架構(gòu)以及功能模塊的設(shè)計(jì),通過(guò)建立E-R模型和數(shù)據(jù)庫(kù)邏輯系統(tǒng)設(shè)計(jì)完成了數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)。
5?校園二手銷售網(wǎng)站 ?詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
校園二手銷售網(wǎng)站的詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)主要是根據(jù)前面的校園二手銷售網(wǎng)站的需求分析和校園二手銷售網(wǎng)站的總體設(shè)計(jì)來(lái)設(shè)計(jì)頁(yè)面并實(shí)現(xiàn)業(yè)務(wù)邏輯。主要從校園二手銷售網(wǎng)站界面實(shí)現(xiàn)、業(yè)務(wù)邏輯實(shí)現(xiàn)這兩部分進(jìn)行介紹。
5.1用戶功能模塊
5.1.1 前臺(tái)首頁(yè)界面
用戶界面要盡量簡(jiǎn)潔大方,使用戶能夠方便找到需要的功能入口,瀏覽、購(gòu)買(mǎi)商品,且要易于修改和維護(hù),同時(shí)還要保證用戶合法和系統(tǒng)安全。其主界面展示如下圖5-1所示。
?
圖5-1?前臺(tái)首頁(yè)界面圖
系統(tǒng)首頁(yè)關(guān)鍵代碼如下所示。
public class FindConfig {
????public static String PAGE = "page";
????public static String SIZE = "size";
????public static String LIKE = "like";
????public static String ORDER_BY = "orderby";
????public static String FIELD = "field";
????public static String GROUP_BY = "groupby";
????public static String MIN_ = "_min";
????public static String MAX_ = "_max";
}
5.1.2 用戶注冊(cè)界面
不是校園二手銷售網(wǎng)站中正式用戶的是可以在線進(jìn)行注冊(cè)的,如果你沒(méi)有本校園二手銷售網(wǎng)站的賬號(hào)的話,添加“注冊(cè)”,當(dāng)填寫(xiě)上自己的賬號(hào)+密碼+確認(rèn)密碼+昵稱+郵箱+手機(jī)號(hào)等后再點(diǎn)擊“注冊(cè)”按鈕后將會(huì)先驗(yàn)證輸入的有沒(méi)有空數(shù)據(jù),再次驗(yàn)證密碼和確認(rèn)密碼是否是一樣的,最后驗(yàn)證輸入的賬戶名和數(shù)據(jù)庫(kù)表中已經(jīng)注冊(cè)的賬戶名是否重復(fù),只有都驗(yàn)證沒(méi)問(wèn)題后即可用戶注冊(cè)成功。其用用戶注冊(cè)界面展示如下圖5-2所示。
?
圖5-2?前臺(tái)用戶注冊(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;
}
5.1.3 用戶登錄界面
校園二手銷售網(wǎng)站中的前臺(tái)上注冊(cè)后的用戶是可以通過(guò)自己的賬戶名和密碼進(jìn)行登錄的,當(dāng)用戶輸入完整的自己的賬戶名和密碼信息并點(diǎn)擊“登錄”按鈕后,將會(huì)首先驗(yàn)證輸入的有沒(méi)有空數(shù)據(jù),再次驗(yàn)證輸入的賬戶名+密碼和數(shù)據(jù)庫(kù)中當(dāng)前保存的用戶信息是否一致,只有在一致后將會(huì)登錄成功并自動(dòng)跳轉(zhuǎn)到校園二手銷售網(wǎng)站 ?的首頁(yè)中;否則將會(huì)提示相應(yīng)錯(cuò)誤信息,用戶登錄界面如下圖5-3所示。
?
圖5-3用戶登錄界面圖
登錄關(guān)鍵代碼如下所示。
/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執(zhí)行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}else{
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號(hào)或密碼不能為空");
????????}
????????//判斷是否有這個(gè)用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態(tài)
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
????????????String res = String.valueOf(service.runCountSql(sql).getSingleResult());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過(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)或密碼不正確");
????????}
}
5.1.4在線留言界面
用戶在點(diǎn)擊導(dǎo)航欄上面的留言板后,就可以搜索查看留言信息,用戶根據(jù)自己的喜好可以進(jìn)行交流,留言板界面如下圖4-4所示。
?
圖4-4在線留言界面圖
在線留言關(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();
????}
5.1.5?收貨地址界面
當(dāng)用戶點(diǎn)擊“收貨地址”右后,就回去顯示出目前現(xiàn)有的地址,也可以添加新的地址,界面如下圖4-5所示。
?
圖5-5收貨地址界面圖
5.1.6?商品詳情界面
當(dāng)訪客點(diǎn)擊了任意商品后將會(huì)進(jìn)入該款商品的詳情界面,可以了解到該商品的圖片信息、商品信息、價(jià)錢(qián)信息等,同時(shí)可以對(duì)該商品進(jìn)行加購(gòu)+立即購(gòu)買(mǎi)+收藏+點(diǎn)贊+評(píng)論,商品詳情展示頁(yè)面如圖4-6所示。
?
圖5-6?商品詳情界面圖
5.1.7?我的訂單界面
當(dāng)用戶點(diǎn)擊“我的訂單”鏈接后就進(jìn)入自己購(gòu)買(mǎi)的訂單的界面展示,界面如下圖4-7所示。
?
圖5-7?我的訂單界面圖
5.2管理員功能模塊
5.2.1 用戶管理界面
校園二手銷售網(wǎng)站中的管理人員是可以對(duì)前臺(tái)注冊(cè)的用戶進(jìn)行管理的,也可以對(duì)管理員進(jìn)行管控。界面如下圖4-9所示。
?
圖4-9用戶管理界面圖
用戶管理關(guān)鍵代碼如下所示。
public String encryption(String plainText) {
????????String re_md5 = new String();
????????try {
????????????MessageDigest md = MessageDigest.getInstance("MD5");
????????????md.update(plainText.getBytes());
????????????byte b[] = md.digest();
????????????int i;
????????????StringBuffer buf = new StringBuffer("");
????????????for (int offset = 0; offset < b.length; offset++) {
????????????????i = b[offset];
????????????????if (i < 0)
????????????????????i += 256;
????????????????if (i < 16)
????????????????????buf.append("0");
????????????????buf.append(Integer.toHexString(i));
????????????}
????????????re_md5 = buf.toString();
????????} catch (Exception e) {
????????????e.printStackTrace();
????????}
????????return re_md5;
????}
5.2.2?在線留言管理界面
校園二手銷售網(wǎng)站中的管理人員是可以對(duì)前臺(tái)用戶發(fā)布的留言進(jìn)行管控的,界面如下圖4-11所示。
?
圖4-10在線留言界面圖
5.2.3二手商城管理界面
校園二手銷售網(wǎng)站中的管理人員是可以對(duì)校園二手銷售網(wǎng)站內(nèi)的賣(mài)家發(fā)布的商品進(jìn)行維護(hù)和管理的,支持增刪改查操作。界面如下圖4-11所示。
?
圖4-11二手商城管理界面圖
二手商城管理關(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();
????}
5.2.4 二手資訊界面
校園二手銷售網(wǎng)站中的管理人員是可以對(duì)校園二手銷售網(wǎng)站內(nèi)的資訊信息進(jìn)行維護(hù)和管理的。校園資訊列表界面如下圖5-12所示。
?
圖5-12二手資訊界面圖
二手資訊管理關(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();
????}
5.2.5訂單列表管理的實(shí)現(xiàn)
管理員在后臺(tái)管理界面點(diǎn)擊到所有訂單界面dingdan_list.html,向控制層dingdanAction發(fā)送請(qǐng)求,搜索當(dāng)前所有訂單信息,dingdanAction向dingdanDAOImp調(diào)用搜索全部訂單的請(qǐng)求,向數(shù)據(jù)庫(kù)的訂單表搜索當(dāng)前所有訂單并將訂單信息以對(duì)象的形式層層返回到dingdan_list.html界面,顯示出當(dāng)前所有訂單信息。同時(shí)可以刪除過(guò)期訂單,確認(rèn)已有訂單,進(jìn)行發(fā)貨處理。
訂單管理界面如下圖所示。
?
圖5-13訂單列表管理界面
訂單列表管理關(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 "";
????}
5.2.6訂單發(fā)貨界面
管理員在后臺(tái)管理界面點(diǎn)擊到所有訂單發(fā)貨界面dingdan_list.html,向控制層dingdanAction發(fā)送請(qǐng)求,搜索當(dāng)前所有訂單發(fā)貨信息,dingdanAction向dingdanDAOImp調(diào)用搜索全部訂單發(fā)貨的請(qǐng)求,向數(shù)據(jù)庫(kù)的訂單表搜索當(dāng)前所有訂單發(fā)貨并將訂單信息以對(duì)象的形式層層返回到dingdan_list.html界面,顯示出當(dāng)前所有訂單發(fā)貨信息。同時(shí)可以刪除過(guò)期訂單,確認(rèn)已有訂單,進(jìn)行發(fā)貨處理。
訂單發(fā)貨管理界面如下圖所示。
?
圖5-14訂單發(fā)貨界面圖
訂單發(fā)貨管理關(guān)鍵代碼如下所示。
@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());
????}
6系統(tǒng)測(cè)試
6.1系統(tǒng)測(cè)試的目的
系統(tǒng)開(kāi)發(fā)到了最后一個(gè)階段那就是系統(tǒng)測(cè)試,系統(tǒng)測(cè)試對(duì)軟件的開(kāi)發(fā)其實(shí)是非常有必要的。因?yàn)闆](méi)什么系統(tǒng)一經(jīng)開(kāi)發(fā)出來(lái)就可能會(huì)盡善盡美,再厲害的系統(tǒng)開(kāi)發(fā)工程師也會(huì)在系統(tǒng)開(kāi)發(fā)的時(shí)候出現(xiàn)紕漏,系統(tǒng)測(cè)試能夠較好的改正一些bug,為后期系統(tǒng)的維護(hù)性提供很好的支持。通過(guò)系統(tǒng)測(cè)試,開(kāi)發(fā)人員也可以建立自己對(duì)系統(tǒng)的信心,為后期的系統(tǒng)版本的跟新提供支持。
6.2?系統(tǒng)測(cè)試用例
系統(tǒng)測(cè)試包括:用戶登錄功能測(cè)試、商品展示功能測(cè)試、商品添加、商品搜索、密碼修改功能測(cè)試,如表6-1、6-2、6-3、6-4、6-5所示:
用戶登錄功能測(cè)試:
表6-1?用戶登錄功能測(cè)試表
| 用例名稱 | 用戶登錄系統(tǒng) |
| 目的 | 測(cè)試用戶通過(guò)正確的用戶名和密碼可否登錄功能 |
| 前提 | 未登錄的情況下 |
| 測(cè)試流程 | 1) 進(jìn)入登錄頁(yè)面 2) 輸入正確的用戶名和密碼 |
| 預(yù)期結(jié)果 | 用戶名和密碼正確的時(shí)候,跳轉(zhuǎn)到登錄成功界面,反之則顯示錯(cuò)誤信息,提示重新輸入 |
| 實(shí)際結(jié)果 | 實(shí)際結(jié)果與預(yù)期結(jié)果一致 |
商品查看功能測(cè)試:
表6-2?商品查看功能測(cè)試表
| 用例名稱 | 商品查看 |
| 目的 | 測(cè)試商品查看功能 |
| 前提 | 用戶登錄 |
| 測(cè)試流程 | 點(diǎn)擊商品列表 |
| 預(yù)期結(jié)果 | 可以查看到所有商品信息 |
| 實(shí)際結(jié)果 | 實(shí)際結(jié)果與預(yù)期結(jié)果一致 |
管理員添加商品界面測(cè)試:
表6-3?管理員添加商品界面測(cè)試表
| 用例名稱 | 商品發(fā)布測(cè)試用例 |
| 目的 | 測(cè)試商品發(fā)布功能 |
| 前提 | 用戶正常登錄情況下 |
| 測(cè)試流程 | 1)點(diǎn)擊商品信息管理就,然后點(diǎn)擊添加后并填寫(xiě)信息。 2)點(diǎn)擊進(jìn)行提交。 |
| 預(yù)期結(jié)果 | 提交以后,頁(yè)面首頁(yè)會(huì)顯示新的商品信息? |
| 實(shí)際結(jié)果 | 實(shí)際結(jié)果與預(yù)期結(jié)果一致 |
商品搜索功能測(cè)試:
表6-4商品搜索功能測(cè)試表
| 用例名稱 | 商品搜索測(cè)試 |
| 目的 | 測(cè)試商品搜索功能 |
| 前提 | 無(wú) |
| 測(cè)試流程 | 1)在搜索框填入搜索關(guān)鍵字。 2)點(diǎn)擊搜索按鈕。 |
| 預(yù)期結(jié)果 | 頁(yè)面顯示包含有搜索關(guān)鍵字的商品 |
| 實(shí)際結(jié)果 | 實(shí)際結(jié)果與預(yù)期結(jié)果一致 |
密碼修改功能測(cè)試:
表6-5 密碼修改功能測(cè)試表
| 用例名稱 | 密碼修改測(cè)試用例 |
| 目的 | 測(cè)試管理員密碼修改功能 |
| 前提 | 管理員用戶正常登錄情況下 |
| 測(cè)試流程 | 1)管理員密碼修改并完成填寫(xiě)。 2)點(diǎn)擊進(jìn)行提交。 |
| 預(yù)期結(jié)果 | 使用新的密碼可以登錄 |
| 實(shí)際結(jié)果 | 實(shí)際結(jié)果與預(yù)期結(jié)果一致 |
6.3?系統(tǒng)測(cè)試結(jié)果
通過(guò)編寫(xiě)校園二手銷售網(wǎng)站的測(cè)試用例,已經(jīng)檢測(cè)完畢用戶登錄模塊、商品查看模塊、商品添加模塊、商品搜索模塊、密碼修改功能測(cè)試,通過(guò)這5大模塊為校園二手銷售網(wǎng)站的后期推廣運(yùn)營(yíng)提供了強(qiáng)力的技術(shù)支撐。
結(jié)論
至此,校園二手銷售網(wǎng)站已經(jīng)結(jié)束,在開(kāi)發(fā)前做了許多的準(zhǔn)備,在本系統(tǒng)的設(shè)計(jì)和開(kāi)發(fā)過(guò)程中閱覽和學(xué)習(xí)了許多文獻(xiàn)資料,從中我也收獲了很多寶貴的方法和設(shè)計(jì)思路,對(duì)系統(tǒng)的開(kāi)發(fā)也起到了很重要的作用,系統(tǒng)的開(kāi)發(fā)技術(shù)選用的都是自己比較熟悉的,比如Web、springboot技術(shù)、MYSQL,這些技術(shù)都是在以前的學(xué)習(xí)中學(xué)到了,其中許多的設(shè)計(jì)思路和方法都是在以前不斷地學(xué)習(xí)中摸索出來(lái)的經(jīng)驗(yàn),其實(shí)對(duì)于我們來(lái)說(shuō)工作量還是比較大的,但是正是由于之前的積累與準(zhǔn)備,才能順利的完成這個(gè)項(xiàng)目,由此看來(lái),積累經(jīng)驗(yàn)跟做好準(zhǔn)備是十分重要的事情。
當(dāng)然在該系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)的過(guò)程中也離不開(kāi)老師以及同學(xué)們的幫助,正是因?yàn)樗麄兊闹笇?dǎo)與幫助,我才能夠成功的在預(yù)期內(nèi)完成了這個(gè)系統(tǒng)。同時(shí)在這個(gè)過(guò)程當(dāng)中我也收獲了很多東西,此系統(tǒng)也有需要改進(jìn)的地方,但是由于專業(yè)知識(shí)的淺薄,并不能做到十分完美,希望以后有機(jī)會(huì)可以讓其真正的投入到使用之中。
參考文獻(xiàn)
[1]朱珍珠,段華斌,鄧永清,杜丹蕾.基于Java的增值平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].辦公自動(dòng)化,2022,27(05):55-58.
[2]魏瑾.Java多線程技術(shù)在網(wǎng)絡(luò)通信系統(tǒng)中的應(yīng)用[J].山西電子技術(shù),2022(01):66-68.
[3]鎮(zhèn)鑫羽,景琴琴.Java語(yǔ)言程序設(shè)計(jì)的教學(xué)實(shí)踐[J].集成電路應(yīng)用,2022,39(02):256-257.
[4]董衛(wèi),王婷婷,徐劍.基于Java Web的畢業(yè)設(shè)計(jì)選題系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].科技資訊,2022,20(03):1-3.
[5]王春山,孫欣.基于Java的金融消費(fèi)者投訴審計(jì)小助手的設(shè)計(jì)和實(shí)現(xiàn)[J].金融科技時(shí)代,2022,30(02):68-73.
[6]熊柏祥.基于Springboot和Vue框架的考試資源服務(wù)平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦(理論版),2022,34(01):97-99+103.
[7]霍福華,韓慧.基于SpringBoot微服務(wù)架構(gòu)下前后端分離的MVVM模型[J].電子技術(shù)與軟件工程,2022(01):73-76.
[8]曹明昊. 基于SpringBoot和Vue框架的邯鄲市現(xiàn)代農(nóng)業(yè)園區(qū)信息管理系統(tǒng)的研發(fā)[D].河北工程大學(xué),2021.
[9]單樹(shù)倩,任佳勛.基于SpringBoot和Vue框架的數(shù)據(jù)庫(kù)原理網(wǎng)站設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2021,17(30):40-41+50.
[10]蘇文強(qiáng),劉紫陽(yáng),苗玉恒.基于SpringBoot的缺陷管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].大眾科技,2021,23(10):4-6+10.
[11]王萍.SpringBoot項(xiàng)目中EhCache緩存技術(shù)的實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2021,17(29):79-81.
[12]He Xinbin,Bai Yongbin,Yue Lisen,Wang Haixiao,Liu Yi. Design and Implementation of Information System Based on Java Technology Platform[J]. Journal of Physics: Conference Series,2021,2033(1).
[13]陳曉華,劉加成.寧國(guó)市旅游景點(diǎn)空間特征及整體開(kāi)發(fā)策略——基于大數(shù)據(jù)挖掘及地理信息技術(shù)應(yīng)用[J].合肥學(xué)院學(xué)報(bào)(綜合版),2021,38(04):33-39.
[14]田青海. 面向Java應(yīng)用的性能監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].浙江大學(xué),2021.
[15]Qu Xiaona. Application of Java Technology in Dynamic Web Database Technology[J]. Journal of Physics: Conference Series,2021,1744(4).
[16]嚴(yán)宇,王嘯楠.基于大數(shù)據(jù)分析的旅游景點(diǎn)信息平臺(tái)的模型設(shè)計(jì)[J].計(jì)算機(jī)產(chǎn)品與流通,2020(10):154.
[17]Tian Ming Huang. Design and Implementation of App System for Legal Consulting Based on JAVA Technology[J]. Procedia Computer Science,2020,166(C).
致 ?謝
逝者如斯夫,不舍晝夜。轉(zhuǎn)眼間,大學(xué)生會(huì)員活便已經(jīng)接近尾聲,人面對(duì)著離別與結(jié)束,總是充滿著不舍與茫然,我亦如此,仍記得那年秋天,我迫不及待的提前一天到了學(xué)校,面對(duì)學(xué)校巍峨的大門(mén),我心里充滿了期待:這里,就是我新生活的起點(diǎn)嗎?那天,陽(yáng)光明媚,學(xué)校的歡迎儀式很熱烈,我面對(duì)著一個(gè)個(gè)對(duì)著我微笑的同學(xué),仿佛一縷縷陽(yáng)光透過(guò)胸口照進(jìn)了我心里,同時(shí),在那天我認(rèn)識(shí)可愛(ài)的室友,我們攜手共同度過(guò)了這難忘的兩年。如今,我望著這篇論文的致謝,不禁又要問(wèn)自己:現(xiàn)在,我們就要說(shuō)再見(jiàn)了嗎?
感慨莫名,不知所言。遙想當(dāng)初剛來(lái)學(xué)校的時(shí)候,心里總是想著工科學(xué)校會(huì)過(guò)于板正,會(huì)缺乏一些柔情,當(dāng)時(shí)心里甚至有一點(diǎn)點(diǎn)排斥,但是隨著我對(duì)學(xué)校的慢慢認(rèn)識(shí)與了解,我才認(rèn)識(shí)到了她的美麗,她的柔情,并且慢慢的喜歡上了這個(gè)校園,但是時(shí)間太快了,快到我還沒(méi)有好好體會(huì)她的美麗便要離開(kāi)了,但是她帶給我的回憶,永遠(yuǎn)不會(huì)離開(kāi)我,也許真正離開(kāi)那天我的眼里會(huì)滿含淚水,我不是因?yàn)殡y過(guò),我只是想將她的樣子映在我的淚水里,刻在我的心里。最后,感謝我的老師們,是你們教授了我們知識(shí)與做人的道理;感謝我的室友們,是你們陪伴了我如此之久;感謝每位關(guān)心與支持我的人。
少年,追風(fēng)趕月莫停留,平荒盡處是春山。
點(diǎn)贊+收藏+關(guān)注 → 私信領(lǐng)取本源代碼、數(shù)據(jù)庫(kù)
總結(jié)
以上是生活随笔為你收集整理的spring boot校园二手销售网站 毕业设计源码161417的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Lunix磁盘与文件系统管理
- 下一篇: 花菁染料Cy3.5 炔烃,Cy3.5 a