Springboot停车管理系统 计算机毕设源码65522
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?摘 ?要
21世紀時信息化的時代,幾乎任何一個行業都離不開計算機,將計算機運用于停車場管理也是十分常見的。過去使用手工的管理方式對停車進行管理,造成了管理繁瑣、難以維護等問題,如今使用計算機對停車場停車的各項基本信息進行管理,比起手工管理來說既方便又簡單,而且具有易于管理、搜索速度快、存儲量大等多個優點。將其使用在停車場管理中,不僅能夠提高停車管理中管理員的工作效率,而且可以使停車場管理更加科學與規范。在信息化時代的不斷沖擊下,停車場管理與計算機技術的結合,將會是一條提高停車場停車管理水平的捷徑。
本文研究課題為“停車管理系統”該系統采取面對對象的開發模式進行軟件的開發和硬體的架設,能很好的滿足實際使用的需求,完善了對應的軟體架設以及程序編碼的工作系統采取Mysql作為后臺數據的主要存儲單元,運用軟件工程原理和開發方法,采用Java的springboot框架構建的一個管理系統,實現了本系統的全部功能。并對數據庫中各個表的增刪查改、表與表之間的約束關系進行分析與設計,最終實現符合用戶需求功能的商業級應用。
關鍵詞:springboot框架; 數據庫;停車管理;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Java?parking management system
Abstract
? ? ? ? ? ??In the era of information in the 21st century, almost any industry can not do without computers. It is also very common to apply computers to parking lot management. In the past, using manual management method to manage parking has caused problems such as cumbersome management and difficult maintenance. Now, using computer to manage the basic information of parking lot parking is not only convenient and simple compared with manual management, but also has many advantages such as easy management, fast search speed, large storage, etc. Using it in parking lot management can not only improve the work efficiency of the administrator in parking management, but also make parking lot management more scientific and standardized. Under the constant impact of the information age, the combination of parking lot management and computer technology will be a shortcut to improve the parking management level of the parking lot.
The research topic of this paper is "parking management system". The system adopts the object-oriented development mode to develop software and hardware, which can well meet the needs of actual use, improve the corresponding software installation and program coding work system, take MySQL as the main storage unit of the back-end data, use software engineering principles and development methods, and use Java's springboot framework to build a management system, All functions of the system are realized. It also analyzes and designs the addition, deletion, query and modification of each table in the database, and the constraint relationship between tables, and finally realizes the commercial application that meets the user's needs.
Keywords:Spring boot framework; database Parking management;
Springboot停車管理系統
目錄
1 緒論
1.1 研究背景
1.2?開發現狀
1.3?springboot框架介紹
1.4 相關技術介紹
2 停車管理系統分析
2.1 可行性分析
2.1.1 技術可行性分析
2.1.2 經濟可行性分析
2.2 系統需求分析
2.2.1 功能性需求分析
2.2.2 非功能性分析
2.3 系統用例分析
3 停車管理系統總體設計
3.1 系統模塊設計
3.2 數據庫設計
3.3.1 數據庫概念結構設計
3.2.2 數據庫邏輯結構設計
4 停車管理系統設計與實現
4.1 系統首頁頁面
4.2 注冊頁面
4.3 登錄頁面
4.4 公告欄頁面
4.5車位信息頁面
4.6 密碼修改頁面
4.7 車位預約頁面
4.8 停車信息頁面
4.9 系統用戶管理頁面
4.10 資源管理頁面
4.11?模塊管理頁面
5停車管理系統測試
5.1 調試部分問題
5.2 系統測試用例
5.3 系統測試結果
結論
參考文獻
致??謝
1 緒論
1.1 研究背景
這些年隨著社會不斷進度還有發展,車輛也在迅速增加,汽車量大使得道路、高速路上越來越擁擠,也使得在傳統的停車場管理中出現管理的效率低下,還有停車場的安全性跟社會的需求也不相符合。減低了人們的生活便利程度。目前,我國的現代化進度在加速,汽車的數量自然是不斷增加中的,面對這種據劇增,停車場的車輛流量也必然隨著增多。對汽車的保管也就成為了當下社會很受關注的焦點了。所以研究適合當下發展的停車管路系統是非常有必要的。
緊隨汽車行業的發展,我國的汽車擁有量也在增加。停車場是交通設施的重要部分,跟隨著運輸業的繁忙跟發展,大家對其管理的要方面也在提高,也都希望停車場管理都能夠方便與快捷。因為停車場的規模大小不同,所以對其的管理規模也是不盡相同的,管理人員需根據本身條件,考慮經濟、穩定的管理程序,避免選擇高成本的管理系統。
當前,在停車場的信息化過程中,需要管理跟處理很多信息。如今,很多停車信息都還是處在開始使用的階段,甚至還沒有使用計算機處理。根據調查得知,以前的管理大部分都是停留在文本、表格、還是屬于紙介質的手工方式處理,然而在管理過程中很多信息的處理都還是人工計算還有手工操作。由于數據量大,處理工作繁重,也很容易出現錯誤,信息容易丟失,也不方便查找。總體而言,還是缺乏了一個完善的管理系統。
停車管理系統本著安全性、可靠性、實用性以及智能化的指導思想和分布式結構進行設計,規劃好系統硬件和軟件功能模塊的分工和協調。新型停車場中將信息技術以及是生活理念還有電子科技等完美的結合了,主要是給人們提供了一種方便、先進功能,操作方便的人性化系統。它依靠高科技和以人為本,采用人機圖形化操作界面,提供給人們更加方便安全、快捷舒適以及信息化的生活空間,很大程度的促進了人文環境的健康發展。
1.2開發現狀
停車管理系統說到底也就是對停車信息的數據化并進行統一系統化的管理,離不開數據庫的操作與前臺web頁面的顯示,我此次用到的就是這樣的技術。
停車管理系統是現代化停車場車輛收費及設備自動化管理的統稱,是將停車場完全臵于計算機管理下的高科技機電一體化產品。站在技術角度審視,我國的停車場并非不是毫無缺點的。據深圳市捷順科技實業股份有限公司產品市場部副經理郭曉強介紹,現金我國的停車場相關產品還是不夠成熟的,技術方面和可靠性上還是不能滿足人們的需求,也沒有主流的設備品牌,能夠提供完整成套設備的程家更是少之又少,用戶在設備選型時存在困難。一般的廠商生產規模不夠大、技術方面也比較弱,品質的管理和生成的成本控制上都相對有難度。當然,停車管理系統也并未因為而阻礙了其發展,相反是更加的加速了。
1.3spring boot框架介紹:
Spring框架是Java平臺上的一種開源應用框架,提供具有控制反轉特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補充,甚至是替補。Spring框架為開發提供了一系列的解決方案,比如利用控制反轉的核心特性,并通過依賴注入實現控制反轉來實現管理對象生命周期容器化,利用面向切面編程進行聲明式的事務管理,整合多種持久化技術管理數據訪問,提供大量優秀的Web框架方便開發等等。Spring框架具有控制反轉(IOC)特性,IOC旨在方便項目維護和測試,它提供了一種通過Java的反射機制對Java對象進行統一的配置和管理的方法。Spring框架利用容器管理對象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對象,開發者可以通過依賴查找或依賴注入來獲得對象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時運行時可配置;AOP框架主要針對模塊之間的交叉關注點進行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務管理、遠程訪問等功能均可以通過使用SpringAOP技術實現。Spring的事務管理框架為Java平臺帶來了一種抽象機制,使本地和全局事務以及嵌套事務能夠與保存點一起工作,并且幾乎可以在Java平臺的任何環境中工作。Spring集成多種事務模板,系統可以通過事務模板、XML或Java注解進行事務配置,并且事務框架集成了消息傳遞和緩存等功能。Spring的數據訪問框架解決了開發人員在應用程序中使用數據庫時遇到的常見困難。它不僅對Java:JDBC、iBATS/MyBATIs、Hibernate、Java數據對象(JDO)、ApacheOJB和ApacheCayne等所有流行的數據訪問框架中提供支持,同時還可以與Spring的事務管理一起使用,為數據訪問提供了靈活的抽象。Spring框架最初是沒有打算構建一個自己的WebMVC框架,其開發人員在開發過程中認為現有的StrutsWeb框架的呈現層和請求處理層之間以及請求處理層和模型之間的分離不夠,于是創建了SpringMVC。
1.4相關技術介紹
(1)停車管理系統中的web后臺管理中的后端不再使用古老的jsp+javabean+servlet技術,而是使用當前主流的springboot框架,它減少java配置代碼,簡化編程代碼,目前springboot框架也是很多值班員選擇的框架之一。
(2)停車管理系統中的web后臺管理中的前端使用的是bootstrap框架,它配合ajax和jquery可以美化頁面設計。
(3)流行vue框架結合jQuery技術,在jQuery基礎上擴展一些插件,通過自己定義插件更好的實現前端的設計。
(4)停車管理系統中數據庫用的mysql5.7,它執行效率高。
2 停車管理系統分析
2.1 可行性分析
2.1.1 技術可行性分析
通過了解對停車管理系統的真實需求后,將停車管理系統所需要的角色劃分整理成了下圖2-1,圖2-2和圖2-3。
從開發工具來看,由于停車管理系統是基于JAVA的,因此有很多開發工具都可以進行開發,這些功能強大的開發工具可以給我來設計停車管理系統帶來非常大的方便。
從停車管理系統的本身技術來說,對于我來開發一個停車管理系統這個畢設是不費事的。停車管理系統的開發可以簡單的分為前臺端、后臺端開發以及數據庫開發。其中的大部分技術難點在我上學時已經使用過了,同時網絡上很多技術點可以讓我來借鑒。Web后臺管理使用JAVA[9]的springboot架構開發,數據庫使用mysql,頁面上使用javascript[10]腳本,因此為我在開發停車管理系統這個畢設上省去了很多多余代碼,這給我的畢設項目編寫帶來了極大的便利。綜上所述,從技術層面來看開發停車管理系統是可行的。
從用戶體驗來看,市面上很多被廣泛使用的系統案例可以讓我來參考,因此我可以綜合它們的頁面交互設計的優點,基于我的畢設項目特點來進行改版,最后達到令用戶滿意的頁面交互體驗。綜上所述,從技術層面來看開發停車管理系統是可行的。
2.1.2?經濟可行性分析
從停車管理系統的開發成本來看,停車管理系統的設計和開發都是我自己完成的,沒有其他成本上的開銷。
從停車管理系統的維護成本來看,停車管理系統的開發遵循一套完整的代碼編寫規范,并且停車管理系統的結構設計非常靈活,遵循高內聚低耦合的原則,因此易于維護和迭代開發。
在停車管理系統上線之后,上線前期我會根據真實需求來調查,對使用我開發的停車管理系統來制定一套符合的使用費。系統運行穩定后我會將推廣范圍到其他的校園當中,其他校園可以使用我的停車管理系統,只需要繳納一點點的定金,我會給他們引入廣告投資和自營業務。
綜合以上的分析,停車管理系統所帶來的經濟效益將會帶來極大的收益。并且隨著我的推廣,來使用我開發的停車管理系統的市場將越來越大,停車管理系統帶來的利潤也就越來越多。因此,從經濟層面來看開發停車管理系統的是可行的。
2.2 系統需求分析
2.2.1?功能性需求分析
停車管理系統從角色上劃分為了駕駛員、值班員、管理員三種角色。
管理員用戶角色:
(1)登錄:管理員的賬號是在數據表表中直接設置生成的,不需要進行注冊;
(2)系統用戶:當點擊“系統用戶”這一菜單的時候,會出現管理員+駕駛員+值班員這三個子菜單,可以對這三個模塊進行增刪改查操作;
(3)資源管理:當點擊“資源管理”這一菜單的時候,會出現汽車資訊+資訊分類列表這兩個子菜單,可以對這兩個模塊進行增刪改查操作;
(4)模塊管理:當點擊“模塊”這一菜單的時候,會出現會員信息+停車場分類+車位信息+車位預約+清潔人員+停車信息+出場記錄+停車收費+打分評價+空閑車位這十個子菜單,能夠對這十個模塊進行增刪改查操作;
(5)輪播圖/公告管理:當點擊“輪播圖/公告管理”這一菜單的時候,會出公告欄+輪播圖這兩個子菜單,可以對這兩模塊進行增刪改查操作;
駕駛員角色:
(1)注冊登錄模塊:當用戶想要進入本停車管理系統中對資訊進行查看評論以及了解車位信息等操作的時候,就必須要登錄到系統當中,要是新的用戶沒有停車管理系統的賬號的話,點擊“注冊”按鈕,就會進入到新用戶注冊這個界面上,用戶輸入對應的賬號(必須填寫)+密碼(必須填寫)+確認密碼(必須填寫,而且要與密碼一直)+昵稱+郵箱+手機號+選擇用戶身份等等,然后點擊“注冊”,系統在用戶這一數據庫中會查詢賬號是不是存在,兩次密碼是不是一樣,都填寫正確就會注冊成功,然后再進行登錄,如果是之前已經注冊過的用戶很長時間沒有使用,忘記密碼,也可以點擊“忘記密碼”進行找回;
(2)公告欄:在首頁導航欄上我們會看到“公告欄”這一菜單,我們點擊進入進去以后,會看到所有管理員在后臺發布的公告信息;
(3)我的收藏:在“我的”下可以查看管理“我的收藏”信息,可以查看收藏,也可以對不喜歡的信息進行刪除收藏;
(4)我的賬戶:當用戶點擊右上角“我的”這個按鈕,會出現子菜單,點擊“我的賬戶”可以對個人的資料以及登錄系統的密碼進行設置;
(5)個人中心:當用戶點擊右上角“我的”這個按鈕,就會進入到對應的后臺進行信息的管理了;
(6)車位信息:在首頁導航欄上點擊“車位信息”彈跳出的是車位信息列表,可以點擊隨意一款車位信息進行了解其具體信息。包括車位編號、所在停車場、車位區域、車位狀態等;
(7)汽車資訊:用戶可以查看汽車資訊信息,在查詢到自己想要了解的汽車資訊的時候,可以進入查看詳細的介紹進行評論、點贊、收藏操作。
值班員角色:
(1)車位預約管理;值班員對車位預約信息進行重置、查詢、添加、刪除管理等;
(2)停車信息管理:值班員對停車信息進行重置、查詢、添加、刪除管理等;
(3)出場記錄管理:值班員對出場紀錄信息進行重置、查詢、添加、刪除管理等;
2.2.2 非功能性分析
停車管理系統的非功能性需求比如停車管理系統的安全性怎么樣,可靠性怎么樣,性能怎么樣,可拓展性怎么樣等。具體可以表示在如下2-1表格中:
表2-1停車管理系統非功能需求表
| 安全性 | 主要指停車管理系統數據庫的安裝,數據庫的使用和密碼的設定必須合乎規范。 |
| 可靠性 | 可靠性是指停車管理系統能夠安裝用戶的指示進行操作,經過測試,可靠性90%以上。 |
| 性能 | 性能是影響停車管理系統占據市場的必要條件,所以性能最好要佳才好。 |
| 可擴展性 | 比如數據庫預留多個屬性,比如接口的使用等確保了系統的非功能性需求。 |
| 易用性 | 用戶只要跟著停車管理系統的頁面展示內容進行操作,就可以了。 |
| 可維護性 | 停車管理系統開發的可維護性是非常重要的,經過測試,可維護性沒有問題 |
2.3?系統用例分析
根據上一節功能分析,可以得出系統的用例,駕駛員角色用例如圖2.1所示。
?
圖2.1?停車管理系統中駕駛員角色用例圖
管理員角色用例如圖2.2所示。
?
圖2.2?停車管理系統管理員角色用例圖
值班員角色用例如圖2.3所示。
?
圖2.3?停車管理系統中值班員角色用例圖
3?停車管理系統總體設計
3.1 系統模塊設計
根據第二章中停車管理系統的功能分析可知,停車管理系統中整體功能模塊圖如圖3.1所示,?
?
圖3.1?停車管理系統功能模塊圖
3.2 數據庫設計
3.3.1 數據庫概念結構設計
下面是整個停車管理系統中主要的數據庫表總E-R實體關系圖。
圖3.2?停車管理系統總E-R關系圖
?
3.2.2 數據庫邏輯結構設計
通過上一小節中停車管理系統中總E-R關系圖上得出一共需要創建很多個數據表。在此我主要羅列幾個主要的數據庫表結構設計。
表be_on_duty (值班員)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | be_on_duty_id | int | 10 | 0 | N | Y | 值班員ID | |
| 2 | attendant_no | varchar | 64 | 0 | N | N | 值班員編號 | |
| 3 | name_of_attendant | varchar | 64 | 0 | Y | N | 值班員姓名 | |
| 4 | gender | varchar | 64 | 0 | Y | N | 性別 | |
| 5 | examine_state | varchar | 16 | 0 | N | N | 已通過 | 審核狀態 |
| 6 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 7 | user_id | int | 10 | 0 | N | N | 0 | 用戶ID |
| 8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表classification_of_parking_lot (停車場分類)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | classification_of_parking_lot_id | int | 10 | 0 | N | Y | 停車場分類ID | |
| 2 | name_of_parking_lot | varchar | 64 | 0 | Y | N | 停車場名稱 | |
| 3 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 4 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表cleaning_personnel (清潔人員)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 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 | 創建時間: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間: |
表comment (評論)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | demobilization_record_id | int | 10 | 0 | N | Y | 出場記錄ID | |
| 2 | attendant_no | int | 10 | 0 | Y | N | 0 | 值班員編號 |
| 3 | name_of_attendant | varchar | 64 | 0 | Y | N | 值班員姓名 | |
| 4 | parking_space_no | varchar | 64 | 0 | Y | N | 車位編號 | |
| 5 | picture | varchar | 255 | 0 | Y | N | 圖片 | |
| 6 | parking_lot | varchar | 64 | 0 | Y | N | 所在停車場 | |
| 7 | parking_area | varchar | 64 | 0 | Y | N | 車位區域 | |
| 8 | driver_number | int | 10 | 0 | Y | N | 0 | 駕駛員編號 |
| 9 | full_name | varchar | 64 | 0 | Y | N | 姓名 | |
| 10 | model | varchar | 64 | 0 | Y | N | 車型 | |
| 11 | license_plate | varchar | 64 | 0 | Y | N | 車牌號碼 | |
| 12 | contact_number | varchar | 64 | 0 | Y | N | 聯系電話 | |
| 13 | admission_time | varchar | 64 | 0 | Y | N | 入場時間 | |
| 14 | exit_time | datetime | 19 | 0 | Y | N | 出場時間 | |
| 15 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表driver (駕駛員)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | driver_id | int | 10 | 0 | N | Y | 駕駛員ID | |
| 2 | driver_number | varchar | 64 | 0 | N | N | 駕駛員編號 | |
| 3 | full_name | varchar | 64 | 0 | Y | N | 姓名 | |
| 4 | gender | varchar | 64 | 0 | Y | N | 性別 | |
| 5 | examine_state | varchar | 16 | 0 | N | N | 已通過 | 審核狀態 |
| 6 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 7 | user_id | int | 10 | 0 | N | N | 0 | 用戶ID |
| 8 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表member_information (會員信息)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | member_information_id | int | 10 | 0 | N | Y | 會員信息ID | |
| 2 | driver_number | int | 10 | 0 | Y | N | 0 | 駕駛員編號 |
| 3 | full_name | varchar | 64 | 0 | Y | N | 姓名 | |
| 4 | gender | varchar | 64 | 0 | Y | N | 性別 | |
| 5 | model | varchar | 64 | 0 | Y | N | 車型 | |
| 6 | license_plate | varchar | 64 | 0 | Y | N | 車牌號碼 | |
| 7 | contact_number | varchar | 64 | 0 | Y | N | 聯系電話 | |
| 8 | member_no | varchar | 64 | 0 | Y | N | 會員編號 | |
| 9 | membership_time | date | 10 | 0 | Y | N | 入會時間 | |
| 10 | remarks | varchar | 64 | 0 | Y | N | 備注 | |
| 11 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表parking_charge (停車收費)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | parking_charge_id | int | 10 | 0 | N | Y | 停車收費ID | |
| 2 | parking_space_no | varchar | 64 | 0 | Y | N | 車位編號 | |
| 3 | picture | varchar | 255 | 0 | Y | N | 圖片 | |
| 4 | parking_lot | varchar | 64 | 0 | Y | N | 所在停車場 | |
| 5 | parking_area | varchar | 64 | 0 | Y | N | 車位區域 | |
| 6 | driver_number | int | 10 | 0 | Y | N | 0 | 駕駛員編號 |
| 7 | full_name | varchar | 64 | 0 | Y | N | 姓名 | |
| 8 | model | varchar | 64 | 0 | Y | N | 車型 | |
| 9 | license_plate | varchar | 64 | 0 | Y | N | 車牌號碼 | |
| 10 | contact_number | varchar | 64 | 0 | Y | N | 聯系電話 | |
| 11 | admission_time | varchar | 64 | 0 | Y | N | 入場時間 | |
| 12 | exit_time | varchar | 64 | 0 | Y | N | 出場時間 | |
| 13 | parking_time | varchar | 64 | 0 | Y | N | 停車時長 | |
| 14 | customer_type | varchar | 64 | 0 | Y | N | 顧客類型 | |
| 15 | charging_standard | varchar | 64 | 0 | Y | N | 收費標準 | |
| 16 | charge_amount | varchar | 64 | 0 | Y | N | 應收金額 | |
| 17 | remarks | varchar | 64 | 0 | Y | N | 備注 | |
| 18 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 19 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表parking_information (停車信息)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | parking_information_id | int | 10 | 0 | N | Y | 停車信息ID | |
| 2 | attendant_no | int | 10 | 0 | Y | N | 0 | 值班員編號 |
| 3 | name_of_attendant | varchar | 64 | 0 | Y | N | 值班員姓名 | |
| 4 | parking_space_no | varchar | 64 | 0 | Y | N | 車位編號 | |
| 5 | picture | varchar | 255 | 0 | Y | N | 圖片 | |
| 6 | parking_lot | varchar | 64 | 0 | Y | N | 所在停車場 | |
| 7 | parking_area | varchar | 64 | 0 | Y | N | 車位區域 | |
| 8 | driver_number | int | 10 | 0 | Y | N | 0 | 駕駛員編號 |
| 9 | full_name | varchar | 64 | 0 | Y | N | 姓名 | |
| 10 | model | varchar | 64 | 0 | Y | N | 車型 | |
| 11 | license_plate | varchar | 64 | 0 | Y | N | 車牌號碼 | |
| 12 | contact_number | varchar | 64 | 0 | Y | N | 聯系電話 | |
| 13 | time_of_appointment | varchar | 64 | 0 | Y | N | 預約時間 | |
| 14 | admission_time | datetime | 19 | 0 | Y | N | 入場時間 | |
| 15 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 16 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 17 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表parking_space_information (車位信息)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | parking_space_information_id | int | 10 | 0 | N | Y | 車位信息ID | |
| 2 | parking_space_no | varchar | 64 | 0 | Y | N | 車位編號 | |
| 3 | picture | varchar | 255 | 0 | Y | N | 圖片 | |
| 4 | parking_lot | varchar | 64 | 0 | Y | N | 所在停車場 | |
| 5 | parking_area | varchar | 64 | 0 | Y | N | 車位區域 | |
| 6 | normal_price | varchar | 64 | 0 | Y | N | 普通價格 | |
| 7 | member_price | varchar | 64 | 0 | Y | N | 會員價格 | |
| 8 | parking_space_status | varchar | 64 | 0 | Y | N | 車位狀態 | |
| 9 | parking_space_remarks | varchar | 64 | 0 | Y | N | 車位備注 | |
| 10 | detailed_description | longtext | 2147483647 | 0 | Y | N | 詳情描述 | |
| 11 | hits | int | 10 | 0 | N | N | 0 | 點擊數 |
| 12 | praise_len | int | 10 | 0 | N | N | 0 | 點贊數 |
| 13 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 14 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 15 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表parking_space_reservation (車位預約)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | parking_space_reservation_id | int | 10 | 0 | N | Y | 車位預約ID | |
| 2 | parking_space_no | varchar | 64 | 0 | Y | N | 車位編號 | |
| 3 | picture | varchar | 255 | 0 | Y | N | 圖片 | |
| 4 | parking_lot | varchar | 64 | 0 | Y | N | 所在停車場 | |
| 5 | parking_area | varchar | 64 | 0 | Y | N | 車位區域 | |
| 6 | normal_price | varchar | 64 | 0 | Y | N | 普通價格 | |
| 7 | member_price | varchar | 64 | 0 | Y | N | 會員價格 | |
| 8 | driver_number | int | 10 | 0 | Y | N | 0 | 駕駛員編號 |
| 9 | full_name | varchar | 64 | 0 | Y | N | 姓名 | |
| 10 | model | varchar | 64 | 0 | Y | N | 車型 | |
| 11 | license_plate | varchar | 64 | 0 | Y | N | 車牌號碼 | |
| 12 | contact_number | varchar | 64 | 0 | Y | N | 聯系電話 | |
| 13 | time_of_appointment | datetime | 19 | 0 | Y | N | 預約時間 | |
| 14 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 15 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 16 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
表scoring_and_evaluation (打分評價)
| 編號 | 名稱 | 數據類型 | 長度 | 小數位 | 允許空值 | 主鍵 | 默認值 | 說明 |
| 1 | scoring_and_evaluation_id | int | 10 | 0 | N | Y | 打分評價ID | |
| 2 | parking_lot | varchar | 64 | 0 | Y | N | 所在停車場 | |
| 3 | parking_area | varchar | 64 | 0 | Y | N | 車位區域 | |
| 4 | driver_number | int | 10 | 0 | Y | N | 0 | 駕駛員編號 |
| 5 | full_name | varchar | 64 | 0 | Y | N | 姓名 | |
| 6 | license_plate | varchar | 64 | 0 | Y | N | 車牌號碼 | |
| 7 | contact_number | varchar | 64 | 0 | Y | N | 聯系電話 | |
| 8 | service_score | int | 10 | 0 | Y | N | 0 | 服務打分 |
| 9 | environment_scoring | int | 10 | 0 | Y | N | 0 | 環境打分 |
| 10 | service_evaluation | varchar | 64 | 0 | Y | N | 服務評價 | |
| 11 | environmental_assessment | varchar | 64 | 0 | Y | N | 環境評價 | |
| 12 | recommend | int | 10 | 0 | N | N | 0 | 智能推薦 |
| 13 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 創建時間 |
| 14 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新時間 |
4 停車管理系統設計與實現
停車管理系統的詳細設計與實現主要是根據前面的停車管理系統的需求分析和停車管理系統的總體設計來設計頁面并實現業務邏輯。主要從停車管理系統界面實現、業務邏輯實現這兩部分進行介紹。
4.1?系統首頁頁面
當進入停車管理系統的時候,首先映入眼簾的是系統的導航欄,下面是輪播圖以及系統內容,其主界面展示如下圖4.1所示。
?
圖4.1 用戶界面圖
4.2 注冊頁面
不是停車管理系統中正式用戶的是可以在線進行注冊的,如果你沒有本停車管理系統的賬號的話,添加“注冊”,當填寫上自己的賬號+密碼+確認密碼+昵稱+郵箱+手機號等后再點擊“注冊”按鈕后將會先驗證輸入的有沒有空數據,再次驗證密碼和確認密碼是否是一樣的,最后驗證輸入的賬戶名和數據庫表中已經注冊的賬戶名是否重復,只有都驗證沒問題后即可用戶注冊成功。注冊界面實現了用戶用戶的注冊,其注冊界面展示如下圖4。2所示。
?
圖4.2 注冊界面圖
用戶注冊邏輯代碼如下:
/**
?????* 注冊
?????* @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]用戶獲取其他與用戶相關的數據
?????*/
????@Id
????@GeneratedValue(strategy = GenerationType.IDENTITY)
????@Column(name = "user_id")
????private Integer userId;
????/**
?????* 賬戶狀態:[0,10](1可用|2異常|3已凍結|4已注銷)
?????*/
????@Basic
????@Column(name = "state")
????private Integer state;
????/**
?????* 所在用戶組:[0,32767]決定用戶身份和權限
?????*/
????@Basic
????@Column(name = "user_group")
????private String userGroup;
????/**
?????* 上次登錄時間:
?????*/
????@Basic
????@Column(name = "login_time")
????private Timestamp loginTime;
????/**
?????* 手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "phone")
????private String phone;
????/**
?????* 手機認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "phone_state")
????private Integer phoneState;
????/**
?????* 用戶名:[0,16]用戶登錄時所用的賬戶名稱
?????*/
????@Basic
????@Column(name = "username")
????private String username;
????/**
?????* 昵稱:[0,16]
?????*/
????@Basic
????@Column(name = "nickname")
????private String nickname;
????/**
?????* 密碼:[0,32]用戶登錄所需的密碼,由6-16位數字或英文組成
?????*/
????@Basic
????@Column(name = "password")
????private String password;
????/**
?????* 郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時
?????*/
????@Basic
????@Column(name = "email")
????private String email;
????/**
?????* 郵箱認證:[0,1](0未認證|1審核中|2已認證)
?????*/
????@Basic
????@Column(name = "email_state")
????private Integer emailState;
????/**
?????* 頭像地址:[0,255]
?????*/
????@Basic
????@Column(name = "avatar")
????private String avatar;
????/**
?????* 創建時間:
?????*/
????@Basic
????@Column(name = "create_time")
????@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
????private Timestamp createTime;
????@Basic
????@Transient
????private String code;
}
4.3 登錄頁面
停車管理系統中的前臺上注冊后的用戶是可以通過自己的賬戶名和密碼進行登錄的,當用戶輸入完整的自己的賬戶名和密碼信息并點擊“登錄”按鈕后,將會首先驗證輸入的有沒有空數據,再次驗證輸入的賬戶名+密碼和數據庫中當前保存的用戶信息是否一致,只有在一致后將會登錄成功并自動跳轉到停車管理系統的首頁中;否則將會提示相應錯誤信息,用戶登錄界面如下圖4.3所示。
?
圖4.3 登錄界面圖
用戶登錄的邏輯代碼如下所示。
/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.select(map, new HashMap<>()).getResultList();
????????}else{
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????//判斷是否有這個用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
????????????String res = String.valueOf(service.runCountSql(sql).getSingleResult());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過")){
????????????????return error(30000,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態,不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲Token到數據庫
????????????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, "賬號或密碼不正確");
????????}
}
4.4 公告欄頁面
當點擊導航欄上的“公告欄”的時候,就會進入對應的界面查看公告信息,公告欄界面如下圖4.4所示。
?
圖4.4 公告欄界面圖
4.5車位信息頁面
當用戶點擊“車位信息”以后就會給我們展示車位信息的列表,選擇一個車位信息進入到圖4.5界面中,用戶可以對車位信息進行預約,點擊預約按鈕,進入到4.6界面中,輸入所在停車場、普通價格、駕駛員編號、車型、聯系電話、車位區域、會員價格、姓名、車牌號碼、預約時間等,點擊“提交”按鈕,就會顯示預約成功。
?
圖4.5車位信息界面圖
?
圖4.6 車位信息詳情界面圖
車位信息的邏輯代碼如下:
?@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();
????}
4.6 密碼修改頁面
用戶使用該停車管理系統注冊完成后,用戶對登錄密碼有修改需求時,系統也可以提供用戶修改密碼權限。系統中所有的操作者能夠變更自己的密碼信息,執行該功能首先必須要登入系統,然后選擇密碼變更選項以后在給定的文本框中填寫初始密碼和新密碼來完成修改密碼的操作。在填寫的時候,假如兩次密碼填寫存在差異,那么此次密碼變更操作失敗,下面的圖片展示的就是該板塊對應的工作面。界面如下圖4.7所示。
?
圖4.7 留言板界面圖
4.7 車位預約頁面
點擊“車位預約”這個菜單,可以查看到系統中所有添加的車位預約,支持通過姓名或者車牌號碼對車位預約進行查詢,如果想要了解某一車位預約的詳細信息,點擊后面的“詳情”會進入詳情界面,值班員和管理員如果想要選擇某一車位預約,點擊“入場”按鈕,根據提示填寫對應的信息,點擊“提交”按鈕,信息沒有錯誤在數據庫就會提交成功,入場成功。界面如下圖4.8所示。
?
圖4.8 車位預約界面圖
車位預約界面邏輯代碼如下:
@RequestMapping(value = {"/avg_group", "/avg"})
public Map<String, Object> avg(HttpServletRequest request) {
????????Query count = service.avg(service.readQuery(request), service.readConfig(request));
????????return success(count.getResultList());
}
4.8 停車信息頁面
點擊“停車信息”這個菜單,可以查看到系統中所有添加的停車信息,支持通過車牌號碼對停車信息進行查詢,如果想要了解某一停車的詳細信息,點擊后面的“詳情”會進入詳情界面,值班員和管理員如果想要選擇某一停車,點擊“出場”按鈕,根據提示填寫對應的信息,點擊“提交”按鈕,信息沒有錯誤在數據庫就會提交成功,出場成功。界面如下圖4.9所示。
?
圖4.9?停車信息界面圖
停車信息管理界面邏輯代碼如下:
?@RequestMapping(value = {"/count_group", "/count"})
????public Map<String, Object> count(HttpServletRequest request) {
????????Query count = service.count(service.readQuery(request), service.readConfig(request));
????????return success(count.getResultList());
}
4.9 系統用戶管理頁面
此功能為管理員的功能,管理員點擊“系統用戶管理”菜單后,會展示出管理員+駕駛員+值班員三個子菜單,任何可以對其進行增刪改查操作;其界面展示如下圖4.10所示。
?
圖4.10系統用戶管理界面圖
4.10 資源管理頁面
此功能為管理員的功能,管理員點擊“資源管理”菜單后,會展示出汽車資訊+資訊分類列表兩個子菜單,任何可以對其進行增刪改查操作;其界面展示如下圖4.11所示。
?
圖4.11資源管理界面圖
資源管理界面邏輯代碼如下:
@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 "";
????}
4.11?模塊管理頁面
此功能為管理員的功能,管理員點擊“模塊管理”菜單后,會展示出會員信息+停車場分類+車位信息+車位預約+清潔人員+停車信息+出場記錄+停車收費+打分評價+空閑車位這十個子菜單,任何可以對其進行增刪改查操作;其界面展示如下圖4.12所示。
?
圖4.12?模塊管理界面圖
模塊管理界面關鍵代碼如下:
@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);
5停車管理系統測試
停車管理系統測試是為了檢驗軟件是否達到設計要求,是否存在錯誤,通過測試的方法來檢查停車管理系統,以便發現停車管理系統中的錯誤。測試工作是保證停車管理系統質量的關鍵。
5.1 調試部分問題
問題1:數據庫無法添加中文。
解決過程:重新創建數據庫,將庫的編碼格式改為utf8。
效果:能在新庫的表中添加中文。
問題2:控制臺報錯前臺與后臺參數不一致
解決過程:檢查代碼,找到報錯參數完成修改,繼續報錯,服務器移除項目重新運行。
效果:重啟項目不再報錯。
問題3:報錯No bean named 'sysLogServiceImpl' available找不到名為sysLogServiceImpl的bean的對象。
解決過程:詢問導師報錯原因,發現錯誤原因是未添加注解@Service,需要在在impl實現類的外面添加@Service注解。
效果:重新debug項目無報錯。
問題4:啟動項目時報錯:Mapped Statements collection does not contain value for
解決過程:網上搜索解決辦法,出錯可能的原因有多個,經過努力排查,錯誤原因是mapper映射地址有誤。在mybatis-config里重新配置地址。
效果:項目啟動正常
5.2?系統測試用例
系統測試包括:車位信息添加功能測試、打分評價功能測試、車位預約添加功能測試、停車信息功能測試這四大功能測試,如表5.1到5.4所示:
表5.1車位信息添加功能測試表
| 測試名稱 | 測試功能 | 操作過程 | 預期結果 | 測試結果 |
| 車位信息添加功能模塊測試 | 管理員添加車位信息功能是否正常 | 管理員登錄成功后點擊“添加車位信息”菜單 | 管理員根據提示并依次輸入車位編號+圖片等,后點擊“提交”按鈕 | 車位信息添加信息功能正常 |
表5.2?打分評價功能測試表
| 測試名稱 | 測試功能 | 操作過程 | 預期結果 | 測試結果 |
| 打分評價添加功能模塊測試 | 用戶添加打分評價功能是否正常 | 用戶登錄成功后點擊“添加打分評價”菜單 | 用戶根據提示并依次輸入車位區域+姓名+車牌號等,后點擊“提交”按鈕 | 打分評價添加信息功能正常 |
表5.3車位預約添加功能測試表
| 測試名稱 | 測試功能 | 操作過程 | 預期結果 | 測試結果 |
| 車位預約添加功能模塊測試 | 值班員添加車位預約功能是否正常 | 值班員登錄成功后點擊“添加車位預約”菜單 | 值班員根據提示并依次輸入車位編號+圖片+車位區域+普通價格等,后點擊“提交”按鈕 | 車位預約添加信息功能正常 |
表5.4停車信息功能測試表
| 測試名稱 | 測試功能 | 操作過程 | 預期結果 | 測試結果 |
| 停車信息功能模塊測試 | 停車信息功能是否正常 | 用戶登錄成功后點擊車位信息中的“停車信息”按鈕 | 用戶根據提示填寫停車信息信息點擊“提交”按鈕 | 停車信息功能正常 |
5.3?系統測試結果
通過上面章節編寫停車管理系統的測試用例,已經測試完畢了車位信息添加功能測試、打分評價測試、車位預約添加功能測試、停車信息功能測試,通過這4大模塊為停車管理系統的后期推廣運營提供了強力的技術支撐。
結論
至此,停車管理系統已經結束,在開發前做了許多的準備,在本系統的設計和開發過程中閱覽和學習了許多文獻資料,從中我也收獲了很多寶貴的方法和設計思路,對系統的開發也起到了很重要的作用,系統的開發技術選用的都是自己比較熟悉的,比如springboot、JAVA技術、MYSQL,這些技術都是在以前的學習中學到了,其中許多的設計思路和方法都是在以前不斷地學習中摸索出來的經驗,其實對于我們來說工作量還是比較大的,但是正是由于之前的積累與準備,才能順利的完成這個項目,由此看來,積累經驗跟做好準備是十分重要的事情。
當然在該系統的設計與實現的過程中也離不開老師以及同學們的幫助,正是因為他們的指導與幫助,我才能夠成功的在預期內完成了這個系統。同時在這個過程當中我也收獲了很多東西,此系統也有需要改進的地方,但是由于專業知識的淺薄,并不能做到十分完美,希望以后有機會可以讓其真正的投入到使用之中。
參考文獻
[1]崔佑榮,黃珍皓,車東垠,李尚憲. 停車管理系統及方法[P]. 韓國:CN115705775A,2023-02-17.
[2]吳亮.基于NB-IoT技術的智慧停車管理系統設計[J].現代信息科技,2022,6(22):149-153.DOI:10.19850/j.cnki.2096-4706.2022.22.037.
[3]GB/T 41976-2022, 停車設備 智能控制與管理系統[S].
[4], 建設銀行 “停車秩序管理系統平臺”便捷市民服務. 趙長行 主編,漯河年鑒,中原出版傳媒集團中原傳媒股份公司中州古籍出版社,2021,368,年鑒.DOI:10.40521/y.cnki.ylhnj.2022.001269.
[5]韓木土,施正舟.基于廣電網絡的智慧停車管理系統應用[J].中國有線電視,2022(09):29-32.
[6]Khamis Norazlina,Rosli Sarah Nafisa,Tahir Asni. JumPark Bah!?: Utilizing Smart City Infrastructure in Parking Management System for Kota Kinabalu Smart City[J]. Journal of Physics: Conference Series,2022,2319(1).
[7]李愷翌.智慧停車管理系統的發展歷程回顧[J].上海建設科技,2022(02):29-32+46.
[8]王曼維,楊荻,李巖,及松潔.基于SpringBoot框架的智慧醫療問診系統設計與實現[J].中國醫學裝備,2022,19(03):133-136.
[9]. 東莞市村(社區)停車規范管理指導意見[N]. 東莞日報,2022-02-28(A08).DOI:10.28181/n.cnki.ndgrb.2022.000568.
[10]Mondal Md Ashifuddin,Rehena Zeenat,Janssen Marijn. Smart parking management system with dynamic pricing[J]. Journal of Ambient Intelligence and Smart Environments,2021,13(6).
[11]張妍君.智慧園區智能停車管理系統研究[J].鐵道通信信號,2021,57(10):51-55.DOI:10.13879/j.issn.1000-7458.2021-10.21164.
[12]惠鵬飛,鄒立穎,李琪林.基于NB-IOT技術的地下停車管理系統設計[J].齊齊哈爾大學學報(自然科學版),2021,37(06):65-69.
[13]喻佳,吳丹新.基于SpringBoot的Web快速開發框架[J].電腦編程技巧與維護,2021(09):31-33.DOI:10.16184/j.cnki.comprg.2021.09.013.
[14]王超,張琪立,田廣強,李晶晶.基于Springboot框架的學校機房計費管理系統的設計與實現[J].電子技術與軟件工程,2020(23):159-160.
[15]楊迪. 基于Hyperledger Fabric區塊鏈的路邊停車管理系統關鍵技術研究[D].國防科技大學,2020.DOI:10.27052/d.cnki.gzjgu.2020.000561.
[16]王林祥, 停車信息的互通管理方法、系統、商戶終端及存儲介質. 陜西省,西安艾潤物聯網技術服務有限責任公司,2020-01-01.
[17]李容容, 城市路側智慧停車管理系統V1.0. 湖北省,湖北創爾雅科技有限公司,2019-06-28.
[18]卞巍皓,陽若淼,康子良,韓佳芮. 基于藍牙技術的共享單車規范化停車管理系統[C]//.2019世界交通運輸大會論文集(上).,2019:1392-1398.
致 ?謝
時間過的很快,不知不覺,在中北大學的學習生活即將結束。畢業之際,我真誠地向幫助過我的老師、家人、同學、朋友們表達感謝。首先要感謝的是我的母校。感謝母校給了我美好的生活和優越的學習環境,使我能學到了很多知識,也不斷的變得優秀;感謝家人在這四年期間一直給與我的愛和無條件的支持,讓我沒有后顧之憂地完成學業;感謝軟件學院的任課老師們給我鼓勵和認可,讓我有信心去做好每一件事情;感謝同學們的幫助,讓我的大學生活更有意義。在此次畢業設計的實現過程中, 我得到了老師們的耐心指導讓我順利完成了該設計。從最初的選題和開題開始,老師就給予我很多幫助,他們認真負責的態度、豐富的教學經驗讓我學到了很多。
同時也要感謝我敬愛的班主任和實訓停車的老師,他們在各個方面都教給了我豐富的經驗,在面對各種困難時如何處理。因為今年的特殊性,老師們不僅在學習中給我以精心的指導,同時還在其它方面給予我觀關懷,指導老師不辭辛苦的為大家錄制視頻和一遍遍講解讓我心懷感激之情。在此,我真誠的感恩、感謝我的指導教師們。
還要感謝實習期間不厭其煩教導我鼓勵我的技術師傅,他指導了我各個方面的技巧,尤其是編程方面,迄今我的很多技巧和編寫規范都有賴于他的指導、糾正。
最后還要特別感謝身邊的各位同學們,一直支持鼓勵我,無論何時何種境況。我很榮幸獲得同學們的幫助,也很開心能夠和大家共度大學四年的時光。
最后的最后,再次發自肺腑的感謝所有幫助過我的人。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 免費領取源碼,請點贊關注私信博主
總結
以上是生活随笔為你收集整理的Springboot停车管理系统 计算机毕设源码65522的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php分享朋友圈的代码
- 下一篇: npm Node 升级工具n换源