摘?要
科技進步的飛速發(fā)展引起人們日常生活的巨大變化,電子信息技術的飛速發(fā)展使得電子信息技術的各個領域的應用水平得到普及和應用。信息時代的到來已成為不可阻擋的時尚潮流,人類發(fā)展的歷史正進入一個新時代。在現(xiàn)實運用中,應用軟件的工作規(guī)則和開發(fā)步驟,采用Java技術建設智能停車場管理系統(tǒng)。
本設計主要實現(xiàn)集人性化、高效率、便捷等優(yōu)點于一身的智能停車場管理系統(tǒng),完成首頁、網(wǎng)站管理(輪播圖、系統(tǒng)公告)人員管理(管理員、系統(tǒng)用戶)內容管理(交流論壇、論壇分類、新聞資訊、資訊分類)模塊管理(車位分類、車位信息、車位預約)個人管理等功能模塊。系統(tǒng)通過瀏覽器與服務器進行通信,實現(xiàn)數(shù)據(jù)的交互與變更。本系統(tǒng)通過科學的管理方式、便捷的服務提高了工作效率,減少了數(shù)據(jù)存儲上的錯誤和遺漏。智能停車場管理系統(tǒng)使用Java語言,采用基于 MVC模式的SSM框架、微信小程序進行開發(fā),使用 Eclipse ?2017 CI 10 編譯器編寫,數(shù)據(jù)方面主要采用的是微軟的MySQL關系型數(shù)據(jù)庫來作為數(shù)據(jù)存儲媒介,配合前臺HTML+CSS 技術完成系統(tǒng)的開發(fā)。
關鍵詞:智能停車場管理;Java語言;關系型數(shù)據(jù)庫;SSM框架
Ssm intelligent parking system applet
Abstract
The rapid development of science and technology has caused tremendous changes in people's daily lives. The rapid development of electronic information technology has made the application level of electronic information technology in various fields popular and applied. The arrival of the information age has become an irresistible fashion trend, and the history of human development is entering a new era. In practical applications, Java technology is used to build an intelligent parking lot management system based on the working rules and development steps of the application software.
This design mainly implements an intelligent parking lot management system that integrates the advantages of humanization, efficiency, and convenience, and completes functional modules such as homepage, website management (rotation map, system announcement), personnel management (administrator, system user), content management (communication forum, forum classification, news information, information classification), module management (parking space classification, parking space information, parking space reservation), and personal management. The system communicates with the server through a browser to achieve data interaction and change. This system improves work efficiency and reduces errors and omissions in data storage through scientific management methods and convenient services. The intelligent parking lot management system uses the Java language, uses the SSM framework based on the MVC mode, and WeChat applets for development. It is written using the Eclipse 2017 CI 10 compiler. In terms of data, it mainly uses Microsoft's MySQL relational database as the data storage medium, and cooperates with the front-end HTML+CSS technology to complete the system development.
Key words: intelligent parking lot management; Java language; Relational database; SSM Framework
目??錄
第1章 緒論
1.1 研究背景與意義
1.2 開發(fā)現(xiàn)狀
1.3 本文的組織結構
第2章 相關技術介紹
2.1 微信開發(fā)者工具
2.2 小程序框架以及目錄結構介紹
2.3 MySQL數(shù)據(jù)庫
2.4 B/S結構
2.5 SSM框架
第3章 系統(tǒng)分析
3.1 可行性分析
3.1.1 技術可行性分析
3.1.2 經(jīng)濟可行性分析
3.1.3 操作可行性分析
3.2 功能需求分析
3.3 非功能需求分析
3.4 數(shù)據(jù)流程分析
第4章 系統(tǒng)設計
4.1 系統(tǒng)架構設計
4.2 系統(tǒng)功能結構
4.3 功能模塊設計
4.4 數(shù)據(jù)庫設計
4.4.1 概念模型
4.4.2 關系模型
4.4.3 數(shù)據(jù)表
第5章 系統(tǒng)實現(xiàn)
5.1 登錄模塊的實現(xiàn)
5.2 用戶子系統(tǒng)模塊的實現(xiàn)
5.2.1 用戶首頁模塊
5.2.2 注冊模塊
5.2.3 停車位預約模塊
5.3 管理員子系統(tǒng)模塊的實現(xiàn)
5.3.1 用戶管理模塊
5.3.2 個人資料管理模塊
5.3.3 停車位管理模塊
第6章 系統(tǒng)測試
6.1 測試目的
6.2 測試過程
6.3 測試結果
第7章 總結與展望
參考文獻
致謝
-
緒論
- 研究背景與意義
隨著社會的進步和發(fā)展以及人們生活水平的提高,汽車市場的繁榮帶來了停車問題。據(jù)統(tǒng)計,“全國機動車與停車位的比例約為3: 1?!俺鞘薪煌ǖ脑黾釉斐傻慕煌〒矶律踔粱靵y給人們的生活帶來了極大的不便。這種不便迫使人們尋找有效的高科技手段來解決這種不便。在經(jīng)濟發(fā)達的大中型城市,這一比例甚至更高,停車場建設已成為城市發(fā)展面臨的一個重大問題。根據(jù)我國機動車與停車位的比例以及國外發(fā)達國家停車行業(yè)的發(fā)展,停車難的問題催生了智能停車管理系統(tǒng)管理設備的巨大市場。
這不僅能有效解決隨機停車造成的交通混亂,還能促進交通設施的標準化建設,同時盡可能減少車主對丟車被盜的擔憂。此外,在技術上,其高技術與其他現(xiàn)有智能系統(tǒng)相匹配,具有良好的開放性,易于與其他智能系統(tǒng)結合成更強大的集成系統(tǒng),符合各種集成模式的先進管理。停車場信息化設計包括停車場管理、停車場管理和停車信息管理的信息化內容。做好信息化工作有利于提高停車場管理效率,增強停車場服務競爭力。
-
- 開發(fā)現(xiàn)狀
目前,國外停車場管理系統(tǒng)經(jīng)過多年的發(fā)展,已基本進入智能無人收費階段,其使用的收費介質已由傳統(tǒng)的閱讀型轉變?yōu)榉墙佑|型的新型收費介質。國外停車場收費系統(tǒng)一般采用高度智能化的專用設備,可以實現(xiàn)收費系統(tǒng)的無人化操作。設備制造工藝精良,系統(tǒng)穩(wěn)定性和產(chǎn)品技術水平達到較高水平。停車場管理系統(tǒng)的顯著特點是停車場車位引導系統(tǒng)、停車車位查詢系統(tǒng)等智能化設備,使停車場管理系統(tǒng)的功能更加豐富。一些國外停車場設備廠商正在研究能夠實現(xiàn)“網(wǎng)絡化存車”的停車場管理系統(tǒng)。這種收費系統(tǒng)依靠于Internet連接,能夠實現(xiàn)在一個相對廣闊的地域內的多個停車場隨意停車。管理系統(tǒng)統(tǒng)一調度車位資源,統(tǒng)一進行交易結算。停車場用戶在家中通過網(wǎng)絡就可以預定停車車位,繳納停車費用,查詢出行目的地的各類停車信息。這種新型停車場管理方式適應了Internet在人們日常生活中越來越重要的現(xiàn)狀,使停車場管理系統(tǒng)的作用范圍和功能得到極大的擴展和延伸。值得注意的是,國外停車場管理系統(tǒng)在采用大量先進技術的同時,帶來的負面影響是系統(tǒng)的造價非常昂貴,技術實現(xiàn)難度大,維護成本高。
國內停車場管理系統(tǒng)是伴隨著國內公用停車場的大量出現(xiàn)而出現(xiàn)的。最初的國內停車場管理系統(tǒng)是在引進和消化國外同類系統(tǒng)的基礎上研發(fā)成功的。由于有許多關鍵設備國內沒有生產(chǎn),采用了較多的國外產(chǎn)品,因此這一階段的國內停車場管理系統(tǒng)帶來了許多“集成”的意味。 近年來,隨著國內停車場的發(fā)展壯大,國內停車場管理系統(tǒng)廠商的技術實力也在增加。一些國際先進的停車場管理技術和理念都可以在新型管理系統(tǒng)中得到迅速應用。許多停車場系統(tǒng)關鍵設備可以在國內研發(fā)生產(chǎn)。國內停車場管理系統(tǒng)目前正面臨著老式管理系統(tǒng)向新型管理系統(tǒng)升級換代的高峰時期,落后的以傳統(tǒng)接觸閱讀收費介質為特征的管理系統(tǒng)正在被逐漸淘汰。新型的以非接觸式IC卡、遠距離射頻電子標志、車牌圖像識別技術等非接觸類型收費介質為特征的新型停車場管理系統(tǒng)正在走向成熟,也在逐步為人們所接受。
-
- 本文的組織結構
第一章是緒論,本文章的開頭部分,對本題目的研究背景和研究意義等一些做文字性的描述。
第二章研究了智能停車場管理系統(tǒng)的所采用的開發(fā)技術和開發(fā)工具。
第三章是系統(tǒng)分析部分,包括系統(tǒng)總體需求描述、功能性角度分析系統(tǒng)需求、非功能性等各個方面分析系統(tǒng)是否可以實現(xiàn)。
第四章是系統(tǒng)設計部分,本文章的重要部分,提供了系統(tǒng)架構的詳細設計和一些主要功能模塊的設計說明。
第五章是系統(tǒng)的具體實現(xiàn),介紹系統(tǒng)的各個模塊的具體實現(xiàn)。
第六章在前幾章的基礎上對系統(tǒng)進行測試和運行。
最后對系統(tǒng)進行了認真的總結,以此對未來有一個新的展望。
-
相關技術介紹
- 微信開發(fā)者工具
微信開發(fā)者工具現(xiàn)在已經(jīng)被小程序開發(fā)團隊開發(fā)運行,目前微信開發(fā)者工具任然在不斷的完善中,在開發(fā)小程序時經(jīng)常要不斷的更新??梢允褂梦⑿艗叽a登陸開發(fā)者工具,開發(fā)者工具將使用這個微信帳號的信息進行小程序的開發(fā)和調試。
機型選擇:小程序以智能手機的屏幕尺寸為設計標準,進行切圖。
預覽界面:寫好視圖布局后點擊編譯,用來刷新視圖界面。
控制臺:方便調試打印輸出信息。
上傳代碼:上傳到騰訊服務器,提交審核必經(jīng)步驟。上傳代碼時可以填寫版本號和備注信息。
資源文件:一般可以在資源文件進行對應項目的文件目錄的斷點調試。
顯示遠程調試:手機端和PC端開發(fā)工具聯(lián)調對用戶而言是非常實用的。
本地數(shù)據(jù)存儲:顯示的是本地存儲的數(shù)據(jù)。
視圖調試:標組件以子父層級結構呈現(xiàn),方便調試。
微信限制在2M 以內的代碼體積;開發(fā)中一般不校驗合法域名信息;小程序后臺要做配置服務器域名。
以上就是在開發(fā)過程中微信開發(fā)者工具常用到的功能,微信開發(fā)者工具也在不斷的完善。
-
- 小程序框架以及目錄結構介紹
整個小程序框架系統(tǒng)分為兩部分:邏輯層和視圖層。小程序開發(fā)框架的目標是通過盡可能簡單、高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生 小程序 體驗的服務。小程序在視圖層與邏輯層間提供了數(shù)據(jù)傳輸和事件系統(tǒng),提供了自己的視圖層以及邏輯層框架,讓開發(fā)者能夠專注于數(shù)據(jù)與邏輯??蚣艿暮诵氖且粋€響應的數(shù)據(jù)綁定系統(tǒng),可以讓數(shù)據(jù)與視圖非常簡單地保持同步。在邏輯層做數(shù)據(jù)修改,在視圖層就會做相應的更新??蚣芴峁┝艘惶谆A的組件,這些組件自帶微信風格的樣式以及特殊的邏輯,開發(fā)者可以通過組合基礎組件,創(chuàng)建出強大的微信小程序。
-
- MySQL數(shù)據(jù)庫
科技的進步,給日常帶來許多便利:教室的投影器用到了虛擬成像技術,數(shù)碼相機用到了光電檢測技術,比如超市貨物進出庫的記錄需要一個信息倉庫。這個信息倉庫就是數(shù)據(jù)庫,而這次的智能停車場管理系統(tǒng)也需要這項技術的支持。
用MySQL這個軟件,是因為它能接受多個使用者訪問,而且里面存在Archive等。它會先把數(shù)據(jù)進行分類,然后分別保存在表里,這樣的特別操作就會提高數(shù)據(jù)管理系統(tǒng)自身的速度,讓數(shù)據(jù)庫能被靈活運用。MySQL的代碼是公開的,而且允許別人二次編譯升級。這個特點能夠降低使用者的成本,再搭配合適的軟件后形成一個良好的網(wǎng)站系統(tǒng)。雖然它有缺點,但是綜合各方面來說,它是使用者的主流運用的對象。
-
- B/S結構
B/S(Browser/Server)比前身架構更為省事的架構。它借助Web server完成數(shù)據(jù)的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果, 不需要考慮不停裝軟件的問題。
-
- SSM框架
SSM即SpringMVC+Spring+Mybatis,這三個框架有各自最獨有的優(yōu)勢,那么將它們組合在一起能夠碰撞出很強的火花。設計者在不需消耗大量功夫,能做出Web應用程序,而且這個程序還具有層次清晰、升級更新操作不影響正常使用的、允許多次使用的特點。這個復合框架形成一個有著結構完整、功能強大和結構良好的體系:SpringMVC使各板塊分離,Spring使開發(fā)更靈活方便,使用Mybatis讓開發(fā)者直接對對象進行操縱,各層次分工明細,并實現(xiàn)各個層次間的解耦,讓代碼更加的靈活精簡。這個框架使程序員能夠規(guī)避在開發(fā)時期避免個別錯誤導致整體被破壞,也能在后期應對客戶對產(chǎn)品提出的新需求。
-
系統(tǒng)分析
- 可行性分析
本次設計基于B/S 模式下,運用Java、JSP技術采用的是MySQL數(shù)據(jù)庫和Eclipse 實現(xiàn),總體的可行性共分為以下三個方面。
-
-
- 技術可行性分析
-
所謂的技術可行性就是在限定時間,前期擬定的功能能否被滿足。在開發(fā)設計上是否會遇上解決不了的問題。做完的項目能否被很好地應用,如果存在缺點在后期的維護上是否存在很大的難度。在對這個系統(tǒng)評估后,認定已存在的技術能達成目標。用JSP技術來實現(xiàn)動態(tài)的頁面,嵌入低依賴性的設計模式,靈活的數(shù)據(jù)庫,配合穩(wěn)定的服務器,整個系統(tǒng)的運行效率大大提升。由此可見,在技術層面達成目標不是非非之想。
-
-
- 經(jīng)濟可行性分析
-
在項目上使用的工具大部分都是是當下流行開源免費的,所以在開發(fā)前期,開發(fā)時用于項目的經(jīng)費將會大大降低,不會讓開發(fā)該軟件在項目啟動期受到經(jīng)費的影響,所以經(jīng)濟上還是可行的。盡量用最少的花費去滿足用戶的需求。省下經(jīng)費用于人工費,以及設備費用。將在無紙化,高效率的道路上越走越遠。
-
-
- 操作可行性分析
-
本系統(tǒng)實現(xiàn)功能的操作很簡單,普通電腦的常見配置就可以運行本軟件,并且只要粗通電腦使用的基本常識就可以流暢的使用本軟件。電腦具備連接互聯(lián)網(wǎng)的能力,并且可以正常訪問系統(tǒng),并不需要操作者有什么高超的能力,只需了解業(yè)務流程,并且按照專業(yè)知識進行正確操作即可,所以智能停車場管理系統(tǒng)具備操作可行性。
-
- 功能需求分析
在系統(tǒng)開發(fā)設計前,應該對功能做初步設想,清楚這個管理系統(tǒng)有什么板塊,每個板塊有什么功能,整體的設計是否滿足使用者的需求,接著對所開發(fā)的系統(tǒng)功能進行的詳細分析總結,從而設計出完整的系統(tǒng)并將其實現(xiàn)。用戶和開發(fā)人員的交流分析,使其達到最佳理解程度,使系統(tǒng)功能達到最佳。
用戶用例圖如下所示。

圖3-1 用戶用例圖
管理員用例圖如下所示。

圖3-2 管理員用例圖
智能停車場管理系統(tǒng)在對需求做解析后,整個系統(tǒng)主要分為兩個部分:管理員和普通用戶,每個模塊下的分支功能不一樣。對功能做出如下說明:
普通用戶模塊:
賬號注冊。
賬號登錄認證。
管理個人資料信息,修改可修改的信息項。
車位預約,同時查看歷史已預約的記錄。
車位信息管理,可以查看某個車位信息。
車輛入場查詢,同時查看歷史已入場的記錄。
車輛離場查詢,同時查看歷史已離場的記錄。
管理員模塊:
維護普通用戶,審核普通用戶的賬號,可以凍結普通用戶的登錄權限,或者刪除普通用戶賬號。
發(fā)布車位,并可以銷毀某個車位,更新車位數(shù)據(jù),模糊搜索車位數(shù)據(jù)等。
-
- 非功能需求分析
系統(tǒng)非功能需求有非常多,比如性能需求、可承載最大用戶數(shù)、穩(wěn)定性、易用性需求等。本系統(tǒng)分析時考慮到易用性需求,因為系統(tǒng)是給人使用的,所以必須充分從用戶的角度出發(fā),考慮用戶體驗,使系統(tǒng)易理解易上手易操作。
-
- 數(shù)據(jù)流程分析
一層數(shù)據(jù)流程圖包括了登錄注冊、用戶功能和檢索維護等模塊,在登錄注冊模塊使用到的數(shù)據(jù)存儲有用戶賬戶文檔,用戶功能模塊需要的存儲是用戶各功能模塊數(shù)據(jù)文檔,檢索維護是使用以上這些數(shù)據(jù)文檔通過關鍵詞進行檢索。
系統(tǒng)的一層數(shù)據(jù)流圖如下圖所示。

圖3-2系統(tǒng)數(shù)據(jù)流圖(一層)
二層數(shù)據(jù)流程是對一層數(shù)據(jù)流層圖中填寫登錄注冊信息、用戶功能的細化。即:填寫登錄注冊信息細化為填制信息、后臺審核,用戶功能細化為首頁、交流論壇、新聞資訊、我的(個人中心、收藏、車位信息、車位預約)等操作。
系統(tǒng)的二層數(shù)據(jù)流圖如下圖所示。

圖3-4系統(tǒng)數(shù)據(jù)流圖(二層)
-
系統(tǒng)設計
- 系統(tǒng)架構設計
目前B/S體系的系統(tǒng)主要的數(shù)據(jù)訪問方式是:通過瀏覽器頁面用戶可以進入系統(tǒng),系統(tǒng)可以自動對用戶向服務器發(fā)送的請求進行處理,處理請求是在系統(tǒng)后臺中進行的,用戶在瀏覽器頁面上進行相應操作,就能夠看到服務端傳遞的處理結果。智能停車場管理系統(tǒng)主要分為視圖-模型-控制三層架構設計。在視圖層中,主要是操作在服務器端向客戶端反饋并顯示的數(shù)據(jù),在模型層中,主要處理相關的業(yè)務邏輯、數(shù)據(jù)整合等,最后的控制層它介于視圖和模型之間,主要是調整兩層之間的關系,最終落實數(shù)據(jù)的傳遞。
系統(tǒng)架構圖如下圖所示。

圖4-1系統(tǒng)架構圖
-
- 系統(tǒng)功能結構
系統(tǒng)設計的目的是分析系統(tǒng)包括的所有功能結構,為開發(fā)人員設計開發(fā)和實現(xiàn)系統(tǒng)做好準備工作。經(jīng)過前期的需求調查、分析和整理之后,確定的總體需求主要包括多個模塊,分別是:首頁、網(wǎng)站管理(輪播圖、系統(tǒng)公告)人員管理(管理員、系統(tǒng)用戶)內容管理(交流論壇、論壇分類、新聞資訊、資訊分類)模塊管理(車位分類、車位信息、車位預約)個人管理。系統(tǒng)整體角色分為二個部分,一是普通用戶、二是管理員。權限分布也是很明顯,普通用戶是在除去瀏覽信息之外還具有查詢和管理自己賬戶信息、首頁、交流論壇、新聞資訊、我的(個人中心、收藏、車位信息、車位預約)等權限;管理員是最高權限擁有者。
系統(tǒng)功能結構圖如下圖所示。

圖4-2系統(tǒng)功能結構圖
-
- 功能模塊設計
用戶管理模塊
該模塊是為所有用戶登錄設計的,如注冊用戶這種普通用戶登錄后只能進行自己的普通功能操作(如個人信息修改),管理員和超級管理員登錄后有不同的權限,管理員不能超越權限。超級管理員能對整個系統(tǒng)的數(shù)據(jù)進行管理,主要是用戶的登錄權限以及用戶登錄后在系統(tǒng)里的操作權限。
停車位預約模塊
普通用戶和停車位存在預約關系,關系為一對多,根據(jù)停車位編號來將停車位數(shù)據(jù)傳入到預約數(shù)據(jù)中,操作人為普通用戶,然后生成預約列表,普通用戶查看個人歷史預約列表,可以進行數(shù)據(jù)銷毀。
停車位維護模塊
操作人來錄入停車位數(shù)據(jù),點擊停車位錄入按鈕,依次填寫要錄入的停車位數(shù)據(jù),點擊提交按鈕,將數(shù)據(jù)提交至數(shù)據(jù)庫,然后刷新停車位數(shù)據(jù)頁面,每條數(shù)據(jù)右邊有刪除和編輯按鈕,來完成相應的刪除和更新功能。
-
-
數(shù)據(jù)庫設計
- 概念模型
-
數(shù)據(jù)庫設計
對于一個要開發(fā)的系統(tǒng)來說,E-R圖可以讓別人能更快更輕松的了解此系統(tǒng)的事務及它們之間的關系。根據(jù)系統(tǒng)分析階段所得出的結論確定了在智能停車場管理系統(tǒng)中存在著多個實體分別是用普通用戶、管理員、停車位、預約、論壇。
系統(tǒng)總體ER圖如下圖所示。

圖4-4系統(tǒng)總體ER圖
-
-
- 關系模型
-
管理員(管理員id、用戶名、密碼、權限)
普通用戶(普通用戶id、用戶名、姓名、車牌號、車型、品牌)
通知公告數(shù)據(jù)(通知公告id、標題、類別、首頁圖片、點擊率、發(fā)布人)
停車位(停車位id、車位號、位置、狀態(tài)、車位類型)
預約(預約id、車位號、位置、車位類型、車牌號、預約停放時間、時長、預約人、是否審核)
-
-
- 數(shù)據(jù)表
-
數(shù)據(jù)庫邏輯結構就是將E-R圖在數(shù)據(jù)庫中用具體的字段進行描述。用字段和數(shù)據(jù)類型描述來使對象特征實體化,最后形成具有一定邏輯關系的數(shù)據(jù)庫表結構。智能停車場管理系統(tǒng)所需要的部分數(shù)據(jù)結構表如下表所示。
表access_token (登陸訪問時長)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
token_id |
int |
10 |
0 |
N |
Y |
臨時訪問牌ID |
|
2 |
token |
varchar |
64 |
0 |
Y |
N |
臨時訪問牌 |
|
3 |
info |
text |
65535 |
0 |
Y |
N |
||
4 |
maxage |
int |
10 |
0 |
N |
N |
2 |
最大壽命:默認2小時 |
5 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
6 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
7 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用戶編號: |
表article (文章:用于內容管理系統(tǒng)的文章)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
article_id |
mediumint |
8 |
0 |
N |
Y |
文章id:[0,8388607] |
|
2 |
title |
varchar |
125 |
0 |
N |
Y |
標題:[0,125]用于文章和html的title標簽中 |
|
3 |
type |
varchar |
64 |
0 |
N |
N |
0 |
文章分類:[0,1000]用來搜索指定類型的文章 |
4 |
hits |
int |
10 |
0 |
N |
N |
0 |
點擊數(shù):[0,1000000000]訪問這篇文章的人次 |
5 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
點贊數(shù) |
6 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
7 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
8 |
source |
varchar |
255 |
0 |
Y |
N |
來源:[0,255]文章的出處 |
|
9 |
url |
varchar |
255 |
0 |
Y |
N |
來源地址:[0,255]用于跳轉到發(fā)布該文章的網(wǎng)站 |
|
10 |
tag |
varchar |
255 |
0 |
Y |
N |
標簽:[0,255]用于標注文章所屬相關內容,多個標簽用空格隔開 |
|
11 |
content |
longtext |
2147483647 |
0 |
Y |
N |
正文:文章的主體內容 |
|
12 |
img |
varchar |
255 |
0 |
Y |
N |
封面圖 |
|
13 |
description |
text |
65535 |
0 |
Y |
N |
文章描述 |
表article_type (文章分類)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
type_id |
smallint |
5 |
0 |
N |
Y |
分類ID:[0,10000] |
|
2 |
display |
smallint |
5 |
0 |
N |
N |
100 |
顯示順序:[0,1000]決定分類顯示的先后順序 |
3 |
name |
varchar |
16 |
0 |
N |
N |
分類名稱:[2,16] |
|
4 |
father_id |
smallint |
5 |
0 |
N |
N |
0 |
上級分類ID:[0,32767] |
5 |
description |
varchar |
255 |
0 |
Y |
N |
描述:[0,255]描述該分類的作用 |
|
6 |
icon |
text |
65535 |
0 |
Y |
N |
分類圖標: |
|
7 |
url |
varchar |
255 |
0 |
Y |
N |
外鏈地址:[0,255]如果該分類是跳轉到其他網(wǎng)站的情況下,就在該URL上設置 |
|
8 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
9 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表auth (用戶權限管理)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
auth_id |
int |
10 |
0 |
N |
Y |
授權ID: |
|
2 |
user_group |
varchar |
64 |
0 |
Y |
N |
用戶組: |
|
3 |
mod_name |
varchar |
64 |
0 |
Y |
N |
模塊名: |
|
4 |
table_name |
varchar |
64 |
0 |
Y |
N |
表名: |
|
5 |
page_title |
varchar |
255 |
0 |
Y |
N |
頁面標題: |
|
6 |
path |
varchar |
255 |
0 |
Y |
N |
路由路徑: |
|
7 |
position |
varchar |
32 |
0 |
Y |
N |
位置: |
|
8 |
mode |
varchar |
32 |
0 |
N |
N |
_blank |
跳轉方式: |
9 |
add |
tinyint |
3 |
0 |
N |
N |
1 |
是否可增加: |
10 |
del |
tinyint |
3 |
0 |
N |
N |
1 |
是否可刪除: |
11 |
set |
tinyint |
3 |
0 |
N |
N |
1 |
是否可修改: |
12 |
get |
tinyint |
3 |
0 |
N |
N |
1 |
是否可查看: |
13 |
field_add |
text |
65535 |
0 |
Y |
N |
添加字段: |
|
14 |
field_set |
text |
65535 |
0 |
Y |
N |
修改字段: |
|
15 |
field_get |
text |
65535 |
0 |
Y |
N |
查詢字段: |
|
16 |
table_nav_name |
varchar |
500 |
0 |
Y |
N |
跨表導航名稱: |
|
17 |
table_nav |
varchar |
500 |
0 |
Y |
N |
跨表導航: |
|
18 |
option |
text |
65535 |
0 |
Y |
N |
配置: |
|
19 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
20 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表collect (收藏)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
collect_id |
int |
10 |
0 |
N |
Y |
收藏ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
收藏人ID: |
3 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
4 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
5 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
6 |
title |
varchar |
255 |
0 |
Y |
N |
標題: |
|
7 |
img |
varchar |
255 |
0 |
Y |
N |
封面: |
|
8 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
9 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表comment (評論)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
comment_id |
int |
10 |
0 |
N |
Y |
評論ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
評論人ID: |
3 |
reply_to_id |
int |
10 |
0 |
N |
N |
0 |
回復評論ID:空為0 |
4 |
content |
longtext |
2147483647 |
0 |
Y |
N |
內容: |
|
5 |
nickname |
varchar |
255 |
0 |
Y |
N |
昵稱: |
|
6 |
avatar |
varchar |
255 |
0 |
Y |
N |
頭像地址:[0,255] |
|
7 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
9 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
10 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
11 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
表forum (論壇)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
forum_id |
mediumint |
8 |
0 |
N |
Y |
論壇id |
|
2 |
display |
smallint |
5 |
0 |
N |
N |
100 |
排序 |
3 |
user_id |
mediumint |
8 |
0 |
N |
N |
0 |
用戶ID |
4 |
nickname |
varchar |
16 |
0 |
Y |
N |
昵稱:[0,16] |
|
5 |
praise_len |
int |
10 |
0 |
Y |
N |
0 |
點贊數(shù) |
6 |
hits |
int |
10 |
0 |
N |
N |
0 |
訪問數(shù) |
7 |
title |
varchar |
125 |
0 |
N |
N |
標題 |
|
8 |
keywords |
varchar |
125 |
0 |
Y |
N |
關鍵詞 |
|
9 |
description |
varchar |
255 |
0 |
Y |
N |
描述 |
|
10 |
url |
varchar |
255 |
0 |
Y |
N |
來源地址 |
|
11 |
tag |
varchar |
255 |
0 |
Y |
N |
標簽 |
|
12 |
img |
text |
65535 |
0 |
Y |
N |
封面圖 |
|
13 |
content |
longtext |
2147483647 |
0 |
Y |
N |
正文 |
|
14 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
15 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
16 |
avatar |
varchar |
255 |
0 |
Y |
N |
發(fā)帖人頭像: |
|
17 |
type |
varchar |
64 |
0 |
N |
N |
0 |
論壇分類:[0,1000]用來搜索指定類型的論壇帖 |
表forum_type (論壇分類)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
type_id |
smallint |
5 |
0 |
N |
Y |
分類ID:[0,10000] |
|
2 |
name |
varchar |
16 |
0 |
N |
N |
分類名稱:[2,16] |
|
3 |
description |
varchar |
255 |
0 |
Y |
N |
描述:[0,255]描述該分類的作用 |
|
4 |
url |
varchar |
255 |
0 |
Y |
N |
外鏈地址:[0,255]如果該分類是跳轉到其他網(wǎng)站的情況下,就在該URL上設置 |
|
5 |
father_id |
smallint |
5 |
0 |
N |
N |
0 |
上級分類ID:[0,32767] |
6 |
icon |
varchar |
255 |
0 |
Y |
N |
分類圖標: |
|
7 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表hits (用戶點擊)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
hits_id |
int |
10 |
0 |
N |
Y |
點贊ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
點贊人: |
3 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
4 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
表notice (公告)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
notice_id |
mediumint |
8 |
0 |
N |
Y |
公告id: |
|
2 |
title |
varchar |
125 |
0 |
N |
N |
標題: |
|
3 |
content |
longtext |
2147483647 |
0 |
Y |
N |
正文: |
|
4 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表parking_space_classification (車位分類)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
parking_space_classification_id |
int |
10 |
0 |
N |
Y |
車位分類ID |
|
2 |
parking_space_type |
varchar |
64 |
0 |
Y |
N |
車位類型 |
|
3 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
4 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表parking_space_information (車位信息)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
parking_space_information_id |
int |
10 |
0 |
N |
Y |
車位信息ID |
|
2 |
parking_space_number |
varchar |
64 |
0 |
Y |
N |
車位編號 |
|
3 |
parking_space_type |
varchar |
64 |
0 |
Y |
N |
車位類型 |
|
4 |
the_measure_of_area |
varchar |
64 |
0 |
Y |
N |
面積 |
|
5 |
position |
varchar |
64 |
0 |
Y |
N |
位置 |
|
6 |
state |
varchar |
64 |
0 |
Y |
N |
狀態(tài) |
|
7 |
charging_standard |
text |
65535 |
0 |
Y |
N |
收費標準 |
|
8 |
hits |
int |
10 |
0 |
N |
N |
0 |
點擊數(shù) |
9 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表parking_space_reservation (車位預約)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
parking_space_reservation_id |
int |
10 |
0 |
N |
Y |
車位預約ID |
|
2 |
appointment_number |
varchar |
64 |
0 |
Y |
N |
預約編號 |
|
3 |
parking_space_number |
varchar |
64 |
0 |
Y |
N |
車位編號 |
|
4 |
parking_space_type |
varchar |
64 |
0 |
Y |
N |
車位類型 |
|
5 |
position |
varchar |
64 |
0 |
Y |
N |
位置 |
|
6 |
user |
int |
10 |
0 |
Y |
N |
0 |
用戶 |
7 |
contact_number |
varchar |
64 |
0 |
Y |
N |
聯(lián)系電話 |
|
8 |
license_plate_information |
varchar |
64 |
0 |
Y |
N |
車牌信息 |
|
9 |
time_of_appointment |
datetime |
19 |
0 |
Y |
N |
預約時間 |
|
10 |
appointment_remarks |
longtext |
2147483647 |
0 |
Y |
N |
預約備注 |
|
11 |
examine_state |
varchar |
16 |
0 |
N |
N |
未審核 |
審核狀態(tài) |
12 |
examine_reply |
varchar |
16 |
0 |
Y |
N |
審核回復 |
|
13 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
14 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
15 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表praise (點贊)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
praise_id |
int |
10 |
0 |
N |
Y |
點贊ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
點贊人: |
3 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
4 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
8 |
status |
bit |
1 |
0 |
N |
N |
1 |
點贊狀態(tài):1為點贊,0已取消 |
表registered_users (注冊用戶)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
registered_users_id |
int |
10 |
0 |
N |
Y |
注冊用戶ID |
|
2 |
gender |
varchar |
64 |
0 |
Y |
N |
性別 |
|
3 |
age |
varchar |
64 |
0 |
Y |
N |
年齡 |
|
4 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通過 |
審核狀態(tài) |
5 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
6 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用戶ID |
7 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表slides (輪播圖)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
slides_id |
int |
10 |
0 |
N |
Y |
輪播圖ID: |
|
2 |
title |
varchar |
64 |
0 |
Y |
N |
標題: |
|
3 |
content |
varchar |
255 |
0 |
Y |
N |
內容: |
|
4 |
url |
varchar |
255 |
0 |
Y |
N |
鏈接: |
|
5 |
img |
varchar |
255 |
0 |
Y |
N |
輪播圖: |
|
6 |
hits |
int |
10 |
0 |
N |
N |
0 |
點擊量: |
7 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表upload (文件上傳)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
upload_id |
int |
10 |
0 |
N |
Y |
上傳ID |
|
2 |
name |
varchar |
64 |
0 |
Y |
N |
文件名 |
|
3 |
path |
varchar |
255 |
0 |
Y |
N |
訪問路徑 |
|
4 |
file |
varchar |
255 |
0 |
Y |
N |
文件路徑 |
|
5 |
display |
varchar |
255 |
0 |
Y |
N |
顯示順序 |
|
6 |
father_id |
int |
10 |
0 |
Y |
N |
0 |
父級ID |
7 |
dir |
varchar |
255 |
0 |
Y |
N |
文件夾 |
|
8 |
type |
varchar |
32 |
0 |
Y |
N |
文件類型 |
表user (用戶賬戶:用于保存用戶登錄信息)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
user_id |
mediumint |
8 |
0 |
N |
Y |
用戶ID:[0,8388607]用戶獲取其他與用戶相關的數(shù)據(jù) |
|
2 |
state |
smallint |
5 |
0 |
N |
N |
1 |
賬戶狀態(tài):[0,10](1可用|2異常|3已凍結|4已注銷) |
3 |
user_group |
varchar |
32 |
0 |
Y |
N |
所在用戶組:[0,32767]決定用戶身份和權限 |
|
4 |
login_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
上次登錄時間: |
5 |
phone |
varchar |
11 |
0 |
Y |
N |
手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時 |
|
6 |
phone_state |
smallint |
5 |
0 |
N |
N |
0 |
手機認證:[0,1](0未認證|1審核中|2已認證) |
7 |
username |
varchar |
16 |
0 |
N |
N |
用戶名:[0,16]用戶登錄時所用的賬戶名稱 |
|
8 |
nickname |
varchar |
16 |
0 |
Y |
N |
昵稱:[0,16] |
|
9 |
password |
varchar |
64 |
0 |
N |
N |
密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成 |
|
10 |
|
varchar |
64 |
0 |
Y |
N |
郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時 |
|
11 |
email_state |
smallint |
5 |
0 |
N |
N |
0 |
郵箱認證:[0,1](0未認證|1審核中|2已認證) |
12 |
avatar |
varchar |
255 |
0 |
Y |
N |
頭像地址:[0,255] |
|
13 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
表user_group (用戶組:用于用戶前端身份和鑒權)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
group_id |
mediumint |
8 |
0 |
N |
Y |
用戶組ID:[0,8388607] |
|
2 |
display |
smallint |
5 |
0 |
N |
N |
100 |
顯示順序:[0,1000] |
3 |
name |
varchar |
16 |
0 |
N |
N |
名稱:[0,16] |
|
4 |
description |
varchar |
255 |
0 |
Y |
N |
描述:[0,255]描述該用戶組的特點或權限范圍 |
|
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
8 |
register |
smallint |
5 |
0 |
Y |
N |
0 |
注冊位置: |
9 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
10 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
-
系統(tǒng)實現(xiàn)
- 登錄模塊的實現(xiàn)
系統(tǒng)的登錄窗口是用戶的入口,用戶只有在登錄成功后才可以進入訪問。通過在登錄提交表單,后臺處理判斷是否為合法用戶,進行頁面跳轉,進入系統(tǒng)中去。
登錄合法性判斷過程:用戶輸入賬號和密碼后,系統(tǒng)首先確定輸入輸入數(shù)據(jù)合法性,然后在login.jsp頁面發(fā)送登錄請求,調用src下的mainctrl類的dopost方法來驗證。
用戶登錄模塊的IPO如下所示:
輸入:用戶名和密碼。
處理:
1)檢測用戶輸入的賬號、密碼是否正確及在數(shù)據(jù)庫已對應存在。
2)從數(shù)據(jù)庫中提取記錄,并儲存在本地的session中(timeout默認=30min)。
3)根據(jù)用戶名,將其顯示在系統(tǒng)首頁上。
輸出:是否成功的信息。
登錄流程圖如下所示。

圖5-1登錄流程圖
系統(tǒng)登錄界面如下所示。

圖5-2系統(tǒng)登錄界面
用戶登錄的邏輯代碼如下。
???/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執(zhí)行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????QueryWrapper wrapper = new QueryWrapper<User>();
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}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.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態(tài)
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
????????????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, "賬號或密碼不正確");
????????}
}
????public String 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 sql.toString();
}
????public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
-
-
用戶子系統(tǒng)模塊的實現(xiàn)
- 用戶首頁模塊
-
用戶子系統(tǒng)模塊的實現(xiàn)
系統(tǒng)呈現(xiàn)出一種簡潔大方的首頁:界面簡約、鱗次櫛比,用戶能輕車熟路的使用。出于對系統(tǒng)使用群體廣泛的顧慮,應有良好性能的后臺。
如下圖所示為系統(tǒng)的首頁界面。

圖5-3系統(tǒng)首頁界面
其中載入前臺頁面的主要代碼如下。
?<!--post亂碼過濾器-->
??<filter>
????<filter-name>CharacterEncodingFilter</filter-name>
????<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
????<init-param>
??????<param-name>encoding</param-name>
??????<param-value>UTF-8</param-value>
????</init-param>
??</filter>
??<filter-mapping>
????<filter-name>CharacterEncodingFilter</filter-name>
????<url-pattern>/*</url-pattern>
??</filter-mapping>
-
-
- 注冊模塊
-
此頁面實現(xiàn)普通用戶的注冊,必須注冊登錄后才能使用系統(tǒng)大部分功能,用戶名不允許重復如果重復將會注冊失敗,并彈出相應的提示,通過js實現(xiàn)對輸入的驗證。
用戶注冊流程圖如下所示。

圖5-4用戶注冊流程圖
用戶注冊界面如下圖所示。

圖5-5用戶注冊界面
用戶注冊關鍵代碼如下所示。
??/**
?????* 注冊
?????* @return
?????*/
????@PostMapping("register")
????public Map<String, Object> signUp(HttpServletRequest request) throws IOException {
????????// 查詢用戶
????????Map<String, String> query = new HashMap<>();
????????Map<String,Object> map = service.readBody(request.getReader());
????????query.put("username",String.valueOf(map.get("username")));
????????List list = service.selectBaseList(service.select(query, new HashMap<>()));
????????if (list.size()>0){
????????????return error(30000, "用戶已存在");
????????}
????????map.put("password",service.encryption(String.valueOf(map.get("password"))));
????????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){
????????E entity = JSON.parseObject(JSON.toJSONString(body),eClass);
????????baseMapper.insert(entity);
????????log.info("[{}] - 插入操作:{}",entity);
}
-
-
- 停車位預約模塊
-
停車位預約過程中,首先使用getmap(id,"xinxi"),通過停車位ID得到停車位數(shù)據(jù),將停車位數(shù)據(jù)賦值給停車位預約,調用CommDAO的insert方法將預約數(shù)據(jù)插入預約表中,最后查看個人歷史停車位預約記錄,可以銷毀歷史預約數(shù)據(jù)。
停車位預約流程圖如下所示。

圖5-6停車位預約流程圖
停車位預約界面如圖所示。

圖5-7停車位預約界面
預約管理界面如圖所示。

圖5-8預約管理界面
停車位預約關鍵代碼如下所示。
??????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
-
-
管理員子系統(tǒng)模塊的實現(xiàn)
- 用戶管理模塊
-
管理員子系統(tǒng)模塊的實現(xiàn)
用戶在yhzhgl查看用戶信息,先使用sql語句查詢出所有用戶表的數(shù)據(jù),然后調用PageManager.getPages(url,4,sql, request ),返回一個ArrayList的對象,在for循環(huán)里,使用jsp得到每個ArrayList對象的數(shù)據(jù),在jsp頁面中解析ArrayList對象,得到其各個鍵值對的值。
用戶管理界面如下圖所示。

圖5-9用戶管理界面
系統(tǒng)用戶管理關鍵代碼如下所示。
/**
?* 用戶組:用于用戶前端身份和鑒權(UserGroup)表實體類
?*
?* @author xxx
?*@since 202X-XX-XX
?*/
@TableName("user_group")
@Data
@EqualsAndHashCode(callSuper = false)
public class UserGroup implements Serializable {
????private static final long serialVersionUID = 968356951391304707L;
????/**
?????* 用戶組ID:[0,8388607]
?????*/
????@TableId(value = "group_id", type = IdType.AUTO)
????private Integer groupId;
????/**
?????* 顯示順序:[0,1000]
?????*/
????@TableField(value = "display")
????private Integer display;
????/**
?????* 名稱:[0,16]
?????*/
????@TableField(value = "name")
????private String name;
????/**
?????* 描述:[0,255]描述該用戶組的特點或權限范圍
?????*/
????@TableField(value = "description")
????private String description;
????/**
?????* 來源表:
?????*/
????@TableField(value = "source_table")
????private String sourceTable;
????/**
?????* 來源字段:
?????*/
????@TableField(value = "source_field")
????private String sourceField;
????/**
?????* 注冊位置:
?????*/
????@TableField(value = "register")
????private String register;
????/**
?????* 創(chuàng)建時間:
?????*/
????@TableField(value = "create_time")
????private Timestamp createTime;
????/**
?????* 更新時間:
?????*/
????@TableField(value = "update_time")
????private Timestamp updateTime;
}
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權限
?????*/
????@TableField(value = "user_group")
private String userGroup;
/**
?* 用戶組:用于用戶前端身份和鑒權(UserGroup)表控制層
?*
?*/
@RestController
@RequestMapping("user_group")
public class UserGroupController extends BaseController<UserGroup, UserGroupService> {
????/**
?????* 服務對象
?????*/
????@Autowired
????public UserGroupController(UserGroupService service) {
????????setService(service);
????}
}
-
-
- 個人資料管理模塊
-
用戶點擊登錄填寫賬號信息登錄后,會切換內容為“某某用戶歡迎您”和歷史訂單,并給出注銷鏈接。當用戶登錄成功后會將個人信息保存在session作用域中,點擊自己的用戶名時,會跳轉到個人詳細信息頁面,由后臺通過Freemarker取出session作用域中的用戶信息進行動態(tài)渲染,例如,郵箱、電話號碼、用戶名等等。同時頁面上會顯示修改個人信息和修改密碼的按鈕,這時客戶可以修改自己的登錄密碼以保障賬號的安全性,防止被人竊取賬號,通過UserController.java的updatePassword()實現(xiàn),同時也可以根據(jù)自己的個人信息是否變動做出相應的修改,通過updateUserInfo()實現(xiàn)。
密碼修改流程圖如下所示。

圖5-10密碼修改流程圖
密碼修改關鍵代碼如下所示。
?@PostMapping("/add")
????@Transactional
????public Map<String, Object> add(HttpServletRequest request) throws IOException {
????????Map<String,Object> paramMap = service.readBody(request.getReader());
????????this.addMap(paramMap);
????????return success(1);
}
????@Transactional
????public Map<String, Object> addMap(Map<String,Object> map){
????????service.insert(map);
????????return success(1);
}
-
-
- 停車位管理模塊
-
添加停車位信息時,輸入必填字段后,表現(xiàn)層的TingcheweiController接受傳過來的停車位信息參數(shù),再調用TingcheweiController類的addTingchewei方法,經(jīng)過TingcheweiService業(yè)務層到TingcheweiMapper持久層的處理,完成對整個添加停車位信息的操作。addTingchewei方法也和用戶管理中的addUser方法類似,同時做添加和修改工作。
修改停車位信息時,選擇需要修改的停車位進行修改,調用TingcheweiController控制器的editTingchewei方法,拿到該停車位原本的信息并顯示到頁面,管理員再對需要修改的停車位信息字段進行修改,完成后調用addTingchewei方法,調用業(yè)務層的updateByKey方法,更新數(shù)據(jù)庫的停車位信息表的數(shù)據(jù)。
停車位管理流程圖如下所示。

圖5-11停車位管理流程圖
停車位添加界面如下圖所示。

圖5-12停車位添加界面
停車位查詢界面如下圖所示。

圖5-13停車位查詢界面
停車位信息添加關鍵代碼如下所示。
?@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);
}
-
系統(tǒng)測試
- 測試目的
在對該系統(tǒng)進行完詳細設計和編碼之后,就要對智能停車場管理系統(tǒng)的程序進行測試,檢測程序是否運行無誤,反復進行測試和修改,使之最后成為完整的軟件,滿足用戶的需求,實現(xiàn)預期的功能。
-
- 測試過程
在軟件的測試過程中,通常測試人員需要針對不同的功能模塊設計多種測試用例。通過測試用例能夠及時發(fā)現(xiàn)代碼業(yè)務邏輯上是否與真實的業(yè)務邏輯相對應,及時發(fā)現(xiàn)代碼上或邏輯上的缺陷,以此來來完善系統(tǒng),提高軟件產(chǎn)品的質量,使軟件具有良好的用戶體驗。
注冊測試用例表如下所示。
表6-1注冊測試用例
測試性能 |
新用戶注冊 |
||
用例目的 |
測試系統(tǒng)新用戶個人信息注冊功能的功能和安全性 |
||
前提條件 |
進入注冊頁面填寫個人信息 |
||
輸入條件 |
預期輸出 |
實際情況 |
|
各項基本信息輸入不完整 |
不允許注冊,無法點擊注冊按鈕 |
一致 |
|
填寫已存在的用戶名 |
系統(tǒng)顯示出提示信息,要求重新填寫 |
一致 |
|
兩次密碼輸入不一致 |
系統(tǒng)顯示出提示信息,要求重新填寫 |
一致 |
|
填寫的各項信息沒有符合提示的長度和字符要求 |
系統(tǒng)顯示出提示信息,要求重新填寫 |
一致 |
|
胡亂填寫電話號碼 |
收不到驗證碼 |
一致 |
|
填寫驗證碼與收到的不一致 |
系統(tǒng)顯示提示信息告知用戶驗證碼錯誤,不予注冊 |
一致 |
登錄測試用例表如下所示。
表6-2登錄測試用例
測試性能 |
用戶或操作員登錄系統(tǒng) |
||
用例目的 |
測試用戶或操作員登錄系統(tǒng)時功能是否正常 |
||
前提條件 |
進入用戶登錄頁面或操作員登錄頁面 |
||
輸入條件 |
預期輸出 |
實際情況 |
|
各項信息不予填寫,直接點擊登陸按鈕 |
不允許登錄,提示填寫賬號相關信息 |
一致 |
|
填寫錯誤的登錄名或密碼后點擊登錄系統(tǒng) |
提示用戶名或密碼錯誤,要求重新填寫進行登錄 |
一致 |
|
填寫與驗證碼信息不一致的信息 |
系統(tǒng)顯示出提示信息,表明驗證碼錯誤,要求重新填寫 |
一致 |
停車位預約測試用例表如下所示。
表6-3停車位預約測試用例
測試性能 |
用戶進行停車位預約的操作 |
||
用例目的 |
測試用戶進行停車位預約操作時,該功能是否正常 |
||
前提條件 |
用戶進入停車位詳情頁,該停車位能夠被預約 |
||
輸入條件 |
預期輸出 |
實際情況 |
|
對著某停車位點擊“預約”按鈕 |
界面跳轉至預約界面 |
一致 |
|
在預約界面,輸入必填項,點擊“提交”按鈕 |
提示“預約成功”,并返回上一級界面 |
一致 |
|
在預約界面,填寫預約表單的時候未輸入完整,點擊“提交”按鈕 |
提示“預約失敗” |
一致 |
停車位管理測試用例表如下所示。
表6-4停車位管理測試用例
測試性能 |
停車位相關信息管理功能 |
||
用例目的 |
測試系統(tǒng)操作者對停車位相關信息進行管理的功能是否正常 |
||
前提條件 |
登錄系統(tǒng)進入相關管理頁面 |
||
輸入條件 |
預期輸出 |
實際情況 |
|
進入停車位管理界面,點擊“錄入”按鈕,填寫所有必填項,點擊提交 |
提示“錄入成功”,并返回查詢界面 |
一致 |
|
進入停車位管理界面,點擊“錄入”按鈕,未填寫一個或者多個必填項,點擊提交 |
提示“錄入失敗”,請?zhí)顚懕靥铐?/p> |
一致 |
|
進入停車位管理界面,選擇要修改的一條數(shù)據(jù),點擊該條數(shù)據(jù)后面的“修改”按鈕? |
節(jié)目跳轉至修改界面 |
一致 |
|
在修改界面,修改可修改項后,點擊“提交”按鈕 |
提示“修改成功”,并返回查詢界面 |
一致 |
|
進入停車位管理界面,點擊某條數(shù)據(jù)后面的刪除按鈕 |
提示“是否要刪除該數(shù)據(jù)”,如果用戶點擊“確定”按鈕,則成功刪除該條數(shù)據(jù),并提示“刪除成功”,之后返回查詢界面 |
一致 |
-
- 測試結果
經(jīng)過對此系統(tǒng)的測試,得出該系統(tǒng)足以滿足用戶日常需求,在功能項目和操作等方面也能滿足操作員對于其他用戶的管理。但是,還有很多功能有待添加,這個系統(tǒng)僅能滿足大部分的需求,還需要對此系統(tǒng)的功能更進一步的完善,這樣使用起來才能更加的完美。
- 總結與展望
通過智能停車場管理系統(tǒng)的開發(fā),本人鞏固了之前學過的知識,如今將平時所學到的知識融合在設計中,在設計過程中,做了很多的準備,首先,在數(shù)據(jù)庫系統(tǒng)的設計過程中,尤其是在數(shù)據(jù)庫的工作原理、工作特點,對其深刻的討論,與此同時,對于小型站點來說,最好服務器的選擇,其次,利用所學的知識點分析所做的系統(tǒng),并在此基礎上設計。
目前本系統(tǒng)已經(jīng)上線,正在試運行階段,用戶反饋良好,基本完成用戶所需,試運行過程中沒有出現(xiàn)阻斷性問題,有一些不足和小問題也及時予以修正,系統(tǒng)上線后,為了保證數(shù)據(jù)的安全性,對系統(tǒng)進行了備份操作,系統(tǒng)備份是每兩個月備份一次,數(shù)據(jù)庫備份為每周備份一次,系統(tǒng)部署在租賃的云平臺服務器中。
本次系統(tǒng)上線成功后,得到了用戶的高度認可,但是在功能上和性能上還需做進一步的研究處理,使其有更高的性能和更好的用戶體驗。
系統(tǒng)在以后的升級過程中,需要解決一系列用戶所提出的問題,例如打印過程中如何避免瀏覽器的兼容性問題,大量用戶訪問時,如何保持較高的響應速度,在系統(tǒng)今后的升級過程中將著重解決這些安全性問題。
參考文獻
[1]徐佩.新時期計算機軟件開發(fā)技術的應用及發(fā)展趨勢[J].農(nóng)家參謀,2019(08):167.
[2]張帥,崔婀娜,魏立波.互聯(lián)網(wǎng)+健康在線服務平臺的設計與實現(xiàn)[J].科技創(chuàng)新與應用,2019(10):91-92.
[3]谷利國,陳存田,張甲瑞.基于B/S模式的人事教育信息管理系統(tǒng)的分析與設計[J].電腦知識與技術,2019,15(10):58-59.
[4]胥新政,強毅.基于JSP的常用金屬材料標準檢索平臺開發(fā)設計[J].制造業(yè)自動化,2019,41(03):41-43+69.
[5]王祖維,南淮耀,張英.“互聯(lián)網(wǎng)+”視域下的高校學生公寓管理系統(tǒng)設計與實現(xiàn)——以沈陽師范大學為例[J].現(xiàn)代商貿工業(yè),2019,40(08):187-188.
[6]廖明華,齊攀.學生職業(yè)能力測評管理系統(tǒng)的設計與實現(xiàn)[J].廣東交通職業(yè)技術學院學報,2019,18(01):48-52.
[7]李冬冬,劉華明,畢學慧,王秀友.舊衣申領系統(tǒng)的設計與實現(xiàn)[J].電腦知識與技術,2019,15(08):47-50.
[8]李慶年.“互聯(lián)網(wǎng)+”視域下的人才招聘管理系統(tǒng)設計與實現(xiàn)[J].國際公關,2019(03):164-165.
[9]劉婷,彭煥峰,邵淑婷.基于云平臺的高校監(jiān)考管理系統(tǒng)[J].電腦知識與技術,2019,15(07):91-92.
[10]趙丙秀.基于百度AI平臺的Web人臉注冊和登錄系統(tǒng)的實現(xiàn)[J].電腦知識與技術,2019,15(07):114-115.
[11]戴昭穎,尹濤.鋼鐵行業(yè)成本預算系統(tǒng)開發(fā)應用實踐[J].電子技術與軟件工程,2019(04):29-30.
[12]曹燦,劉志剛.基于SSH和Layui的工程科學前沿與實踐系統(tǒng)[J].工業(yè)控制計算機,2019,32(02):91-92+96.
[13]謝路.基于Web的考務管理系統(tǒng)設計與實現(xiàn)[J].福建電腦,2019,35(01):136-137.
[14]張繼東.MySQL數(shù)據(jù)庫基于JSP的訪問技術[J/OL].電子技術與軟件工程,2017,(15):169(2017-08-03).
[15]韓思凡.Web開發(fā)中的JSP與HTML的基礎應用[J].科學技術創(chuàng)新,2020(14):71-72.
[16]NastitiAndini,DaehaKim,JongAhnChun.Operationalsoilmoisturemodelingusingamulti-stageapproachbasedonthegeneralizedcomplementaryprinciple[J].AgriculturalWaterManagement,2020,231.
[17]A.D.Titisari,D.Phillips,I.W.Warmada,Hartono,A.Idrus.40Ar/39ArgeochronologyofthePongkorlowsulfidationepithermalgoldmineralisation,WestJava,Indonesia[J].OreGeologyReviews,2020,119.
[18]FranciscoOrtin,OscarRodriguez-Prieto,NicolasPascual,MiguelGarcia.HeterogeneoustreestructureclassificationtolabelJavaprogrammersaccordingtotheirexpertiselevel[J].FutureGenerationComputerSystems,2020,105.
[19]SatyaKrismatama,IndahRiyantini,IwangGumilar,LantunParadhitaDewanti.SelectivityofFishingGearforScomberomorusguttatus(Bloch&Schneider,1801)CommoditiesinPangandaranFishingGround,WestJava[J].AsianJournalofFisheriesandAquaticResearch,2020.
[20]ZhongXiangfu,PlaAlbert,RaynerSimon.Jasmine:aJavapipelineforisomiRcharacterizationinmiRNA-Seqdata[J].Bioinformatics,2020,36(6).
致謝
伴隨著設計的完成,大學生涯也隨之即將結束。大學期間是我最珍惜的時光,大學時光中學會了很多,也成長了很多,這段時光中每一段回憶都刻在腦海中。感謝一起學習,一起成長同學們,和成長過程悉心教導的老師們,非常感激有你們的陪伴。
首先感謝我的指導老師,設計的完成離不開老師的一系列指導。在畢業(yè)設計的完成過程中,老師給出了很多中肯的建議,正是由于老師一絲不茍的工作態(tài)度,我的設計才能順利的完成。文章來源:http://www.zghlxwxcb.cn/news/detail-850284.html
最后,感謝在大學生涯中每一位教導我的老師,是你們教給了我豐富的知識,更教會了我遇到問題時,如何去應對并解決。謝謝你們的幫助與支持。文章來源地址http://www.zghlxwxcb.cn/news/detail-850284.html
免費領取項目源碼,請關注?點贊收藏并私信博主,謝謝-
到了這里,關于基于微信小程序的智能停車場系統(tǒng)-計算機畢業(yè)設計源碼67860的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!