spring boot车辆管理系统毕业设计源码031034
車輛管理系統的設計與實現
摘?要
科技進步的飛速發展引起人們日常生活的巨大變化,電子信息技術的飛速發展使得電子信息技術的各個領域的應用水平得到普及和應用。信息時代的到來已成為不可阻擋的時尚潮流,人類發展的歷史正進入一個新時代。在現實運用中,應用軟件的工作規則和開發步驟,采用Java技術建設車輛管理系統。
本設計主要實現集人性化、高效率、便捷等優點于一身的車輛管理系統,完成用戶管理、車輛管理、車輛分類、品牌分類出車記錄、還車記錄等功能模塊。系統通過瀏覽器與服務器進行通信,實現數據的交互與變更。本系統通過科學的管理方式、便捷的服務提高了工作效率,減少了數據存儲上的錯誤和遺漏。車輛管理系統使用Java語言,采用基于 MVC模式的JavaEE技術進行開發,使用 MyEclipse 2017 CI 10 編譯器編寫,數據方面主要采用的是微軟的MySQL關系型數據庫來作為數據存儲媒介,配合前臺HTML+CSS 技術完成系統的開發。
關鍵詞:車輛管理;Java語言;關系型數據庫;數據存儲
Design and implementation of vehicle management system
Abstract
The rapid development of scientific and technological progress has caused great changes in people's daily life. The rapid development of electronic information technology has popularized and applied the application level of electronic information technology in various fields. The advent of the information age has become an irresistible fashion trend, and the history of human development is entering a new era. In practical application, according to the working rules and development steps of the application software, Java technology is used to build the vehicle management system.
This design mainly realizes the vehicle management system with the advantages of humanization, high efficiency and convenience, and completes the functional modules of user management, vehicle management, vehicle classification, brand classification, departure record, return record and so on. The system communicates with the server through the browser to realize the interaction and change of data. Through scientific management and convenient service, the system improves work efficiency and reduces errors and omissions in data storage. The vehicle management system is developed using java language, Java EE technology based on MVC mode and MyEclipse 2017 CI 10 compiler. In terms of data, Microsoft's MySQL relational database is mainly used as the data storage medium, and the system development is completed with the foreground HTML + CSS technology.
Key words:Vehicle management; The Java language. Relational database; Data is stored
目 ?錄
第1章 緒論
1.1?研究背景與意義
1.2?開發意義
1.3?本文的組織結構
第2章 相關技術介紹
2.1 J2EE技術
2.2Myeclipse描述
2.3 MySQL數據庫
2.4 B/S結構
2.5 Tomcat描述
2.6springboot框架介紹
第3章 系統分析
3.1?可行性分析
3.1.1?技術可行性分析
3.1.2?經濟可行性分析
3.1.3?操作可行性分析
3.2?功能需求分析
3.3?非功能需求分析
3.4?數據流程分析
第4章 系統設計
4.1?系統架構設計
4.2?系統功能結構
4.3?功能模塊設計
4.4?數據庫設計
4.4.1?概念模型
4.4.2?關系模型
4.4.3?數據表
第5章 系統實現
5.1?登錄模塊的實現
5.2?駕駛員系統模塊的實現
5.2.1?用戶首頁模塊
5.2.2?出車記錄模塊
5.2.3?車輛信息模塊
5.3?管理員子系統模塊的實現
5.3.1?用戶管理模塊
5.3.2?個人資料管理模塊
5.3.3?車輛管理模塊
5.3.4 還車記錄管理模塊
5.4?分頁模塊的實現
第6章 系統測試
6.1?測試目的
6.2?測試過程
6.3?測試結果
第7章 總結與展望
參考文獻
致謝
車輛管理是對所涉及到的人、財、物等資源的管理和調配,隨著交通運輸業的飛速發展為人們的生活帶來了極大的便利,與此同時,各種交通運輸工具特別是汽車數量的劇增也給社會各方面帶來了日趨嚴重的巨大壓力。對于各事業或企業單位內部的車輛管理,傳統手工操作手段由于工作量大、強度高,而導致的效率低下、出錯率高已逐漸不能滿足目前車輛管理的需求。依據項目需求特點,圍繞提高車輛使用和管理工作,結合車輛自身的特點,完成對通行車輛調度的管理,對車輛使用調度、車輛信息和相關人員的信息管理、使用記錄、事故等信息統一管理,進一步提高車輛管理、使用效率和安全保障,做到車輛狀態有案可查、有據可依,實現車輛的科學化、自動化管理。
在智能化的管理當中,企業的車輛管理成為了急需解決的問題之一。經濟高速發展時代的到來給企業的發展帶來了機遇,但同時越來越多的工作量需要使用更多的車輛來方便工作,這樣就給企業的車輛管理帶來了巨大的壓力,企業必須合理安排好下屬各個部門的車輛使用情況,提供即時的車輛信息,只有做到這一點,才能使企業更好的運轉起來,最大化的提高企業的整體工作效率。
車輛管理系統是信息管理系統,是一個小型的數據庫系統。車輛管理系統綜合了車輛運營領域,車輛管理領域,數據庫領域等方面的知識。
由于車輛信息的復雜繁多,管理制度的程序繁多,過去采用人工的文件管理已不能適應。文件管理方式存在許多缺點:資料的繁多容易丟失,忽略,遺忘;信息的冗余量極大;安全性極差;查找起來困難;工作量大,工作人員累。
車輛管理軟件代替人工的文件管理,可以避免或大大的緩解上述問題。而且計算機管理還有一些不可替代的優點:過去需要記憶的一些資料,比如車輛保險的期限,或者是車輛使用年限,現在就可以利用計算機軟件來查詢和管理;隨著計算機的普及,還可以隨時隨地的進行工作,公司領導也可以在家或者其他地方查找所需要的資料,檢查工作;存儲量大;保密性好;壽命長等等。企業的工作效率提高了,管理也方便了,也將逐步走向正規化。
第一章是緒論,本文章的開頭部分,對本題目的研究背景和研究意義等一些做文字性的描述。
第二章研究了車輛管理系統的所采用的開發技術和開發工具。
第三章是系統分析部分,包括系統總體需求描述、功能性角度分析系統需求、非功能性等各個方面分析系統是否可以實現。
第四章是系統設計部分,本文章的重要部分,提供了系統架構的詳細設計和一些主要功能模塊的設計說明。
第五章是系統的具體實現,介紹系統的各個模塊的具體實現。
第六章在前幾章的基礎上對系統進行測試和運行。
最后對系統進行了認真的總結,以此對未來有一個新的展望。
人可以掌握多門外語,而一個計算機科學家精通的大多是編程語言,它不是人類的自然語言,比如C語言、Java、Perl等等。由于不同的公司開發出的“中間件”不夠規范,所以Sun公司推出J2EE,用這個標準來解決弊病。它提供了良好的機制,讓每個層次允許與之相對的服務器、組件運行,使得系統的搭建穩定可用、開發高效、維護方便。
我們在利用Java來開發系統時通常采用的軟件就是Myeclipse,它是用來設計Java, JavaEE的Eclipse插件的調集,采取了 Myeclipse大部分可以實現對Mysql的數據庫和Javaee的研究和開發。用了Myeclipse很大的便利了開發人員,系統開發的進度也會得到一些提高。
科技的進步,給日常帶來許多便利:教室的投影器用到了虛擬成像技術,數碼相機用到了光電檢測技術,比如超市貨物進出庫的記錄需要一個信息倉庫。這個信息倉庫就是數據庫,而這次的車輛管理系統也需要這項技術的支持。
用MySQL這個軟件,是因為它能接受多個使用者訪問,而且里面存在Archive等。它會先把數據進行分類,然后分別保存在表里,這樣的特別操作就會提高數據管理系統自身的速度,讓數據庫能被靈活運用。MySQL的代碼是公開的,而且允許別人二次編譯升級。這個特點能夠降低使用者的成本,再搭配合適的軟件后形成一個良好的網站系統。雖然它有缺點,但是綜合各方面來說,它是使用者的主流運用的對象。
B/S(Browser/Server)比前身架構更為省事的架構。它借助Web server完成數據的傳遞交流。只需要下載瀏覽器作為客戶端,那么工作就達到“瘦身”效果, 不需要考慮不停裝軟件的問題。
Tomcat是一個不收費的服務器。使用場景比較適合訪問量比較少的情況下。意思就是,將Tomcat安裝到電腦上的時候,前端HTML頁面的訪問請求可以通過它進行解析。實際上,Tomcat是對Apache的擴展,但它相對于Apache卻是相對獨立作業的,由此可以看作它與Apache 是相對獨立進程運行的。
Tomcat最開始是sun公司的戴維森進行開發應用的,經過他的努力,不斷地將其變為開源的服務器。還由sun公司將其交給了Apache軟件基金會。不斷發展的tomcat服務器在最近的一個版本中進行了大量的重構和梳理,使其使用起來更加的方便。基于Tomcat負載均衡算法是一種開源的軟件,實現方式。不需要增加額外的硬件投入,實現起來也很方便,特別適用于一般的小企業網站服務器在現在和將來一段時間的擴展。從目前的實踐來看,可作為需要進行類似應用的一個參考借鑒。
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。
本次設計基于B/S 模式下,運用Java技術采用的是MySQL數據庫和Myeclipse實現,總體的可行性共分為以下三個方面。
所謂的技術可行性就是在限定時間,前期擬定的功能能否被滿足。在開發設計上是否會遇上解決不了的問題。做完的項目能否被很好地應用,如果存在缺點在后期的維護上是否存在很大的難度。在對這個系統評估后,認定已存在的技術能達成目標。用JSP技術來實現動態的頁面,嵌入低依賴性的設計模式,靈活的數據庫,配合穩定的服務器,整個系統的運行效率大大提升。由此可見,在技術層面達成目標不是非非之想。
在項目上使用的工具大部分都是是當下流行開源免費的,所以在開發前期,開發時用于項目的經費將會大大降低,不會讓開發該軟件在項目啟動期受到經費的影響,所以經濟上還是可行的。盡量用最少的花費去滿足用戶的需求。省下經費用于人工費,以及設備費用。將在無紙化,高效率的道路上越走越遠。
本系統實現功能的操作很簡單,普通電腦的常見配置就可以運行本軟件,并且只要粗通電腦使用的基本常識就可以流暢的使用本軟件。電腦具備連接互聯網的能力,并且可以正常訪問系統,并不需要操作者有什么高超的能力,只需了解業務流程,并且按照專業知識進行正確操作即可,所以車輛管理系統具備操作可行性。
在系統開發設計前,應該對功能做初步設想,清楚這個管理系統有什么板塊,每個板塊有什么功能,整體的設計是否滿足使用者的需求,接著對所開發的系統功能進行的詳細分析總結,從而設計出完整的系統并將其實現。用戶和開發人員的交流分析,使其達到最佳理解程度,使系統功能達到最佳。
駕駛員用例圖如下所示。
?
圖3-1 駕駛員用例圖
管理員用例圖如下所示。
?
圖3-2 管理員用例圖
車輛管理系統在對需求做解析后,整個系統主要分為兩個部分:管理員和普通用戶,每個模塊下的分支功能不一樣。對功能做出如下說明:
駕駛員用戶模塊:
賬號登錄認證。
管理個人資料信息,修改可修改的信息項。
車輛出入記錄查詢,同時查看歷史已出入的記錄。
還車記錄查詢,同時查看歷史已有還車的記錄。
管理員模塊:
維護普通用戶,審核普通用戶的賬號,可以凍結普通用戶的登錄權限,或者刪除普通用戶賬號。
發布車輛管理,并可以銷毀某個車輛信息,更新車輛數據,模糊搜索車輛數據等。
發布出車記錄,并可以銷毀某個出車記錄數據,更新出車記錄數據,模糊搜索出車記錄數據等。
管理車輛還車記錄數據。
系統非功能需求有非常多,比如性能需求、可承載最大用戶數、穩定性、易用性需求等。本系統分析時考慮到易用性需求,因為系統是給人使用的,所以必須充分從用戶的角度出發,考慮用戶體驗,使系統易理解易上手易操作。
一層數據流程圖包括了登錄、用戶功能和檢索維護等模塊,在登錄模塊使用到的數據存儲有用戶賬戶文檔,用戶功能模塊需要的存儲是用戶各功能模塊數據文檔,檢索維護是使用以上這些數據文檔通過關鍵詞進行檢索。
系統的一層數據流圖如下圖所示。
?
圖3-2系統數據流圖(一層)
二層數據流程是對一層數據流層圖中填寫登錄信息、用戶功能的細化。即:填寫登錄信息細化為填制信息、后臺審核,用戶功能細化為車輛管理查詢、車輛分類查詢、品牌分類、出車記錄、用戶查詢等操作。
系統的二層數據流圖如下圖所示。
?
圖3-4系統數據流圖(二層)
目前B/S體系的系統主要的數據訪問方式是:通過瀏覽器頁面用戶可以進入系統,系統可以自動對用戶向服務器發送的請求進行處理,處理請求是在系統后臺中進行的,用戶在瀏覽器頁面上進行相應操作,就能夠看到服務端傳遞的處理結果。車輛管理系統主要分為視圖-模型-控制三層架構設計。在視圖層中,主要是操作在服務器端向客戶端反饋并顯示的數據,在模型層中,主要處理相關的業務邏輯、數據整合等,最后的控制層它介于視圖和模型之間,主要是調整兩層之間的關系,最終落實數據的傳遞。
系統架構圖如下圖所示。
?
圖4-1系統架構圖
系統設計的目的是分析系統包括的所有功能結構,為開發人員設計開發和實現系統做好準備工作。經過前期的需求調查、分析和整理之后,確定的總體需求主要包括多個模塊,分別是:用戶管理、車輛管理、出車記錄管理、還車記錄管理、車輛分類管理、品牌分類管理。系統整體角色分為二個部分,一是駕駛員戶、二是管理員。權限分布也是很明顯,駕駛員是在除去瀏覽信息之外還具有查詢和管理自己賬戶信息、車輛信息查詢、還車記錄查詢、出車記錄查詢等權限;管理員是最高權限擁有者。
系統功能結構圖如下圖所示。
?
圖4-2系統功能結構圖
用戶管理模塊
該模塊是為所有用戶登錄設計的,如普通用戶登錄后只能進行自己的普通功能操作(如個人信息修改),管理員和超級管理員登錄后有不同的權限,管理員不能超越權限。超級管理員能對整個系統的數據進行管理,主要是用戶的登錄權限以及用戶登錄后在系統里的操作權限。
出車記錄模塊
駕駛員和車輛存在出車記錄關系,關系為一對多,根據車輛信息編號來將車輛數據傳入到出車記錄數據中,操作人為駕駛員,然后生成記錄列表,駕駛員查看個人歷史出入出車記錄列表,可以進行數據銷毀。
車輛信息維護模塊
操作人來錄入車輛數據,點擊車輛錄入按鈕,依次填寫要錄入的車輛數據,點擊提交按鈕,將數據提交至數據庫,然后刷新車輛數據頁面,每條數據右邊有刪除和編輯按鈕,來完成相應的刪除和更新功能。
品牌維護模塊
操作人來錄入品牌分類數據,點擊品牌分類錄入按鈕,依次填寫要錄入的品牌數據,點擊提交按鈕,將數據提交至數據庫,然后刷新品牌分類數據頁面,每條數據右邊有刪除和編輯按鈕,來完成相應的刪除和更新功能。
還車記錄模塊
操作人來錄入還車記錄數據,點擊還車錄入按鈕,依次填寫要錄入的還車記錄數據,點擊提交按鈕,將數據提交至數據庫,然后刷新收費設置數據頁面,每條數據右邊有刪除和編輯按鈕,來完成相應的刪除和更新功能。
對于一個要開發的系統來說,E-R圖可以讓別人能更快更輕松的了解此系統的事務及它們之間的關系。根據系統分析階段所得出的結論確定了在車輛管理系統中存在著多個實體分別是用駕駛員、管理員、車輛、出車記錄、還車記錄、品牌分類、車輛分類。
系統總體ER圖如下圖所示。
?
圖4-4系統總體ER圖
管理員(管理員id、用戶名、密碼、權限)
駕駛員(駕駛員id、性別、身份證號、駕駛證、審核狀態、用戶id)
車輛分類(車輛分類id、車輛類型)
車輛(車輛id、車牌號、車輛類型、車輛品牌、購買日期、車輛狀態、車輛數)
還車記錄(還車記錄id、車牌號、車輛類型、車輛品牌、駕駛員、出車數、歸還時間)
出車記錄(出車記錄id、車牌號、車輛類型、車輛品牌、駕駛員、出車時間、出車數、出車情況)
品牌分類(品牌分類id、車輛品牌)
數據庫邏輯結構就是將E-R圖在數據庫中用具體的字段進行描述。用字段和數據類型描述來使對象特征實體化,最后形成具有一定邏輯關系的數據庫表結構。車輛管理系統所需要的部分數據結構表如下表所示。
vehicle_classification表:
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| vehicle_classification_id | int | 11 | 是 | 是 | 車輛分類ID |
| vehicle_type | varchar | 64 | 否 | 否 | 車輛類型 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| vehicle表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| vehicle_id | int | 11 | 是 | 是 | 車輛ID |
| license_plate_number | varchar | 64 | 是 | 否 | 車牌號 |
| vehicle_type | varchar | 64 | 否 | 否 | 車輛類型 |
| vehicle_brand | varchar | 64 | 否 | 否 | 車輛品牌 |
| purchase_date | date | 0 | 否 | 否 | 購買日期 |
| vehicle_status | varchar | 64 | 否 | 否 | 車輛狀態 |
| number_of_vehicles | varchar | 64 | 否 | 否 | 車輛數 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| return_record_id | int | 11 | 是 | 是 | 還車記錄ID |
| license_plate_number | varchar | 64 | 否 | 否 | 車牌號 |
| vehicle_type | varchar | 64 | 否 | 否 | 車輛類型 |
| vehicle_brand | varchar | 64 | 否 | 否 | 車輛品牌 |
| driver | int | 11 | 否 | 否 | 駕駛員 |
| number_of_trips | varchar | 64 | 否 | 否 | 出車數 |
| return_time | date | 0 | 否 | 否 | 歸還時間 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| departure_record表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| departure_record_id | int | 11 | 是 | 是 | 出車記錄ID |
| license_plate_number | varchar | 64 | 否 | 否 | 車牌號 |
| vehicle_type | varchar | 64 | 否 | 否 | 車輛類型 |
| vehicle_brand | varchar | 64 | 否 | 否 | 車輛品牌 |
| driver | int | 11 | 否 | 否 | 駕駛員 |
| departure_time | date | 0 | 否 | 否 | 出車時間 |
| number_of_trips | varchar | 64 | 否 | 否 | 出車數 |
| driving_situation | text | 0 | 否 | 否 | 出車情況 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| brand_classification表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| brand_classification_id | int | 11 | 是 | 是 | 品牌分類ID |
| vehicle_brand | varchar | 64 | 否 | 否 | 車輛品牌 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
| driver表: | |||||
| 名稱 | 類型 | 長度 | 不是null | 主鍵 | 注釋 |
| driver_id | int | 11 | 是 | 是 | 駕駛員ID |
| gender | varchar | 64 | 否 | 否 | 性別 |
| id_number | varchar | 255 | 是 | 否 | 身份證號 |
| driver_license | varchar | 255 | 否 | 否 | 駕駛證 |
| examine_state | varchar | 16 | 是 | 否 | 審核狀態 |
| recommend | int | 11 | 是 | 否 | 智能推薦 |
| user_id | int | 11 | 是 | 否 | 用戶ID |
| create_time | datetime | 0 | 是 | 否 | 創建時間 |
| update_time | timestamp | 0 | 是 | 否 | 更新時間 |
系統的登錄窗口是用戶的入口,用戶只有在登錄成功后才可以進入訪問。通過在登錄提交表單,后臺處理判斷是否為合法用戶,進行頁面跳轉,進入系統中去。
登錄合法性判斷過程:用戶輸入賬號和密碼后,系統首先確定輸入輸入數據合法性,然后在login.jsp頁面發送登錄請求,調用src下的mainctrl類的dopost方法來驗證。
用戶登錄模塊的IPO如下所示:
輸入:用戶名和密碼。
處理:
1)檢測用戶輸入的賬號、密碼是否正確及在數據庫已對應存在。
2)從數據庫中提取記錄,并儲存在本地的session中(timeout默認=30min)。
3)根據用戶名,將其顯示在系統首頁上。
輸出:是否成功的信息。
登錄流程圖如下所示。
?
圖5-1登錄流程圖
系統登錄界面如下所示。
?
圖5-2系統登錄界面
登錄關鍵代碼如下。
/**
?????* 登錄
?????* @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, "賬號或密碼不正確");
????????}
}
系統呈現出一種簡潔大方的首頁:界面簡約、鱗次櫛比,用戶能輕車熟路的使用。出于對系統使用群體廣泛的顧慮,應有良好性能的后臺。
如下圖所示為系統的首頁界面。
?
圖5-3系統首頁界面
出車記錄過程中,首先使用getmap(id,"xinxi"),通過車輛ID得到車輛數據,將車輛數據賦值給出車記錄,調用CommDAO的insert方法將出入收費數據插入出車記錄表中,最后查看個人歷史出車記錄,可以銷毀歷史出車記錄數據。
出車記錄流程圖如下所示。
?
圖5-4出車記錄流程圖
出車記錄界面如圖所示。
?
圖5-5出車記錄界面
駕駛員提交車輛信息,可以進行新增、查看、修改以及刪除等相應的車輛信息管理操作。當點擊"新增車輛信息"的按鈕時,在車輛信息添加界面進行詳細信息的添加操作。當點擊"查看車輛信息"超級鏈接時,會顯示所選的車輛信息的信息,然后點擊"返回"再返回到其主頁面。
車輛信息界面如圖所示。
?
圖5-5車輛信息界面
車輛信息管理界面如圖所示。
?
圖5-6車輛信息管理界面
車輛信息添加關鍵代碼如下所示。
@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();
????}
用戶在yhzhgl查看用戶信息,先使用sql語句查詢出所有用戶表的數據,然后調用PageManager.getPages(url,4,sql, request ),返回一個ArrayList的對象,在for循環里,使用jsp得到每個ArrayList對象的數據,在jsp頁面中解析ArrayList對象,得到其各個鍵值對的值。
用戶管理界面如下圖所示。
?
圖5-7用戶管理界面
系統用戶管理關鍵代碼如下所示。
@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();
????}
用戶點擊登錄填寫賬號信息登錄后,會切換內容為“某某用戶歡迎您”和歷史訂單,并給出注銷鏈接。當用戶登錄成功后會將個人信息保存在session作用域中,點擊自己的用戶名時,會跳轉到個人詳細信息頁面,由后臺通過Freemarker取出session作用域中的用戶信息進行動態渲染,例如,郵箱、電話號碼、用戶名等等。同時頁面上會顯示修改個人信息和修改密碼的按鈕,這時客戶可以修改自己的登錄密碼以保障賬號的安全性,防止被人竊取賬號,通過UserController.java的updatePassword()實現,同時也可以根據自己的個人信息是否變動做出相應的修改,通過updateUserInfo()實現。
密碼修改流程圖如下所示。
?
圖5-8密碼修改流程圖
密碼修改關鍵代碼如下所示。
?/**
?????* 修改密碼
?????* @param data
?????* @param request
?????* @return
?????*/
????@PostMapping("change_password")
????public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){
????????// 根據Token獲取UserId
????????String token = request.getHeader("x-auth-token");
????????Integer userId = tokenGetUserId(token);
????????// 根據UserId和舊密碼獲取用戶
????????Map<String, String> query = new HashMap<>();
????????String o_password = data.get("o_password");
????????query.put("user_id" ,String.valueOf(userId));
????????query.put("password" ,service.encryption(o_password));
????????Query ret = service.count(query, service.readConfig(request));
????????List list = ret.getResultList();
????????Object s = list.get(0);
????????int count = Integer.parseInt(list.get(0).toString());
????????if(count > 0){
????????????// 修改密碼
????????????Map<String,Object> form = new HashMap<>();
????????????form.put("password",service.encryption(data.get("password")));
????????????service.update(query,service.readConfig(request),form);
????????????return success(1);
????????}
????????return error(10000,"密碼修改失敗!");
????}
添加車輛信息時,輸入必填字段后,表現層的CheliangController接受傳過來的車輛信息參數,再調用CheliangController類的addCheliang方法,經過CheliangService業務層到CheliangMapper持久層的處理,完成對整個添加車輛信息的操作。addCheliang方法也和用戶管理中的addUser方法類似,同時做添加和修改工作。
修改車輛信息時,選擇需要修改的車輛進行修改,調用CheliangController控制器的editCheliang方法,拿到該車輛原本的信息并顯示到頁面,管理員再對需要修改的車輛信息字段進行修改,完成后調用addCheliang方法,調用業務層的updateByKey方法,更新數據庫的車輛信息表的數據。
車輛管理流程圖如下所示。
?
圖5-9車輛管理流程圖
車輛添加界面如下圖所示。
?
圖5-10車輛添加界面
車輛查詢界面如下圖所示。
?
?
圖5-11車輛查詢界面
車輛信息添加關鍵代碼如下所示。
@PostMapping("/upload")
????public Map<String, Object> upload(@RequestParam("file") MultipartFile file) {
????????log.info("進入方法");
????????if (file.isEmpty()) {
????????????return error(30000, "沒有選擇文件");
????????}
????????try {
????????????//判斷有沒路徑,沒有則創建
????????????String filePath = System.getProperty("user.dir") + "\\target\\classes\\static\\upload\\";
????????????File targetDir = new File(filePath);
????????????if (!targetDir.exists() && !targetDir.isDirectory()) {
????????????????if (targetDir.mkdirs()) {
????????????????????log.info("創建目錄成功");
????????????????} else {
????????????????????log.error("創建目錄失敗");
????????????????}
????????????}
????????????String fileName = file.getOriginalFilename();
????????????File dest = new File(filePath + fileName);
????????????log.info("文件路徑:{}", dest.getPath());
????????????log.info("文件名:{}", dest.getName());
????????????file.transferTo(dest);
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("url", "/api/upload/" + fileName);
????????????return success(jsonObject);
????????} catch (IOException e) {
????????????log.info("上傳失敗:{}", e.getMessage());
????????}
????????return error(30000, "上傳失敗");
}
刪除還車記錄時,選擇需要刪除的還車記錄進行刪除,把主鍵的uId傳到RfiddanganController控制器,再調用控制器的deleteRfiddangan方法,數據經過RfiddanganService業務層解析和處理,請求RfiddanganMapper持久層調用deleteByPrimaryKey方法操作數據庫將還車記錄數據從數據庫中刪除。
查找還車記錄時,輸入需要查找的還車記錄名,調用getData方法獲取所有數據并且進行分頁,把獲取到的所有數據顯示到視圖上,這時候只需要用腳本方法便能快速查找,不涉及對數據庫操作。
還車記錄管理流程圖如下所示。
?
圖5-12還車記錄管理流程圖
還車記錄添加界面如下圖所示。
?
圖5-135還車記錄添加界面
本系統單獨編寫一個Pager類用于分頁技術的實現,在該類中確定每一個頁面顯示記錄的總數pageSize,同時定義總記錄數totalSize、當前頁currentPage和總頁數totalPage這幾個屬性,聲明一個帶兩個參數的構造函數,獲取數據庫記錄的時候傳入記錄總數給pageSize,通過記錄總數和pageSize這兩個變量計算出總頁數,在查詢數據的時候需要通過Pager類的pageSize設置每次取出數據的最大記錄數和設置起始取出記錄的位置。該類中還定義了幾個boolean類型的變量,用于判斷是否有上一頁、下一頁、最后一頁等等,在Java頁面顯示數據的時候通過標簽顯示記錄是否有上一頁或者下一頁。
在對該系統進行完詳細設計和編碼之后,就要對車輛管理系統的程序進行測試,檢測程序是否運行無誤,反復進行測試和修改,使之最后成為完整的軟件,滿足用戶的需求,實現預期的功能。
在軟件的測試過程中,通常測試人員需要針對不同的功能模塊設計多種測試用例。通過測試用例能夠及時發現代碼業務邏輯上是否與真實的業務邏輯相對應,及時發現代碼上或邏輯上的缺陷,以此來來完善系統,提高軟件產品的質量,使軟件具有良好的用戶體驗。
登錄測試用例表如下所示。
表6-1登錄測試用例
| 測試性能 | 用戶或操作員登錄系統 | ||
| 用例目的 | 測試用戶或操作員登錄系統時功能是否正常 | ||
| 前提條件 | 進入用戶登錄頁面或操作員登錄頁面 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 各項信息不予填寫,直接點擊登陸按鈕 | 不允許登錄,提示填寫賬號相關信息 | 一致 | |
| 填寫錯誤的登錄名或密碼后點擊登錄系統 | 提示用戶名或密碼錯誤,要求重新填寫進行登錄 | 一致 | |
| 填寫與驗證碼信息不一致的信息 | 系統顯示出提示信息,表明驗證碼錯誤,要求重新填寫 | 一致 | |
還車記錄測試用例表如下所示。
表6-2還車記錄測試用例
| 測試性能 | 用戶進行還車記錄的操作 | ||
| 用例目的 | 測試用戶進行還車記錄操作時,該功能是否正常 | ||
| 前提條件 | 用戶進入還車詳情頁,該車輛能夠被記錄 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 對著某車輛點擊“還車記錄”按鈕 | 界面跳轉至還車記錄界面 | 一致 | |
| 在還車記錄界面,輸入必填項,點擊“提交”按鈕 | 提示“還車記錄成功”,并返回上一級界面 | 一致 | |
| 在還車記錄界面,填寫還車記錄表單的時候未輸入完整,點擊“提交”按鈕 | 提示“還車記錄失敗” | 一致 | |
車輛管理測試用例表如下所示。
表6-3車輛管理測試用例
| 測試性能 | 車輛相關信息管理功能 | ||
| 用例目的 | 測試系統操作者對車輛相關信息進行管理的功能是否正常 | ||
| 前提條件 | 登錄系統進入相關管理頁面 | ||
| 輸入條件 | 預期輸出 | 實際情況 | |
| 進入車輛管理界面,點擊“錄入”按鈕,填寫所有必填項,點擊提交 | 提示“錄入成功”,并返回查詢界面 | 一致 | |
| 進入車輛管理界面,點擊“錄入”按鈕,未填寫一個或者多個必填項,點擊提交 | 提示“錄入失敗”,請填寫必填項 | 一致 | |
| 進入車輛管理界面,選擇要修改的一條數據,點擊該條數據后面的“修改”按鈕? | 節目跳轉至修改界面 | 一致 | |
| 在修改界面,修改可修改項后,點擊“提交”按鈕 | 提示“修改成功”,并返回查詢界面 | 一致 | |
| 進入車輛管理界面,點擊某條數據后面的刪除按鈕 | 提示“是否要刪除該數據”,如果用戶點擊“確定”按鈕,則成功刪除該條數據,并提示“刪除成功”,之后返回查詢界面 | 一致 | |
經過對此系統的測試,得出該系統足以滿足用戶日常需求,在功能項目和操作等方面也能滿足操作員對于其他用戶的管理。但是,還有很多功能有待添加,這個系統僅能滿足大部分的需求,還需要對此系統的功能更進一步的完善,這樣使用起來才能更加的完美。
通過車輛管理系統的開發,本人鞏固了之前學過的知識,如今將平時所學到的知識融合在設計中,在設計過程中,做了很多的準備,首先,在數據庫系統的設計過程中,尤其是在數據庫的工作原理、工作特點,對其深刻的討論,與此同時,對于小型站點來說,最好服務器的選擇,其次,利用所學的知識點分析所做的系統,并在此基礎上設計。
目前本系統已經上線,正在試運行階段,用戶反饋良好,基本完成用戶所需,試運行過程中沒有出現阻斷性問題,有一些不足和小問題也及時予以修正,系統上線后,為了保證數據的安全性,對系統進行了備份操作,系統備份是每兩個月備份一次,數據庫備份為每周備份一次,系統部署在租賃的云平臺服務器中。
本次系統上線成功后,得到了用戶的高度認可,但是在功能上和性能上還需做進一步的研究處理,使其有更高的性能和更好的用戶體驗。
系統在以后的升級過程中,需要解決一系列用戶所提出的問題,例如打印過程中如何避免瀏覽器的兼容性問題,大量用戶訪問時,如何保持較高的響應速度,在系統今后的升級過程中將著重解決這些安全性問題。
參考文獻
[1]佐藤翔野,寺畑克哉,關優志. 住宿型車輛管理裝置、住宿型車輛管理系統以及住宿型車輛[P]. 日本:CN110774967B,2022-03-15.
[2]程勝.現代車輛管理系統及其維修策略分析[J].時代汽車,2021(12):184-185.
[3]于勤操. 基于車牌識別的智能礦區車輛管理系統的設計與實現[D].內蒙古大學,2021.
[4]柳楊. 物流車輛管理系統的設計與實現[D].杭州電子科技大學,2021.
[5]王怡康,王淑永, 后勤服務 建成辦公區ETC車輛管理系統. 蘇茂林 主編,黃河年鑒,水利部黃河水利委員會黃河年鑒社,2020,407,年鑒.
[6]盧玉華,薛斌斌,駱軍.車輛管理系統信息安全防護[J].中國科技信息,2020(24):44-45.
[7]. ResearchAndMarkets.com Releases Report: Asia Pacific Vehicle Management System Market[J]. Wireless News,2020.
[8]內藤智,向云.日本新型機車車輛管理系統的開發[J].國外鐵道車輛,2020,57(06):43-46.
[9]馮春強.基于毫米波雷達的高速公路服務區車輛管理信息發布系統[J].中國交通信息化,2020(11):118-121.
[10]. Nissan Motor Co. Ltd.; Patent Issued for Vehicle Management System And Vehicle Management Method (USPTO 10,748,418)[J]. Computers Networks & Communications,2020.
[11]. Toyota Jidosha Kabushiki Kaisha; Patent Issued for Vehicle Management System, Vehicle Management Method, And Non-Transitory Computer-Readable Recording Medium (USPTO 10,688,964)[J]. Computer Technology Journal,2020.
[12]孫一鳴. 交警大隊暫扣車輛管理系統的設計與實現[D].吉林大學,2020.
[13]夏琮.車輛管理系統的設計與實現[J].時代汽車,2020(06):18-21.
[14]曹鑫亮,孫桂平,孫健,鄒晨亮,車明亮,王英利.支持大并發量的車輛管理系統[J].南通大學學報(自然科學版),2019,18(04):34-38.
[15]蘇九寧.公安車輛管理系統的主要功能模塊設計與實現[J].中國新技術新產品,2019(22):16-17.DOI:10.13612/j.cnki.cntp.2019.22.006.
[16]韓亮, 智能網聯運營車輛管理系統的研究與開發. 四川省,宜賓成電智慧信息系統研究院有限公司,2019-09-26.
[17], 智慧交警涉案車輛管理系統V1.0. 安徽省,安徽國達城建設施科技有限公司,2019-08-27.
致謝
伴隨著設計的完成,大學生涯也隨之即將結束。大學期間是我最珍惜的時光,大學時光中學會了很多,也成長了很多,這段時光中每一段回憶都刻在腦海中。感謝一起學習,一起成長同學們,和成長過程悉心教導的老師們,非常感激有你們的陪伴。
首先感謝我的指導老師,設計的完成離不開老師的一系列指導。在畢業設計的完成過程中,老師給出了很多中肯的建議,正是由于老師一絲不茍的工作態度,我的設計才能順利的完成。
最后,感謝在大學生涯中每一位教導我的老師,是你們教給了我豐富的知識,更教會了我遇到問題時,如何去應對并解決。謝謝你們的幫助與支持。
免費領取本源代碼、數據庫,請私信
總結
以上是生活随笔為你收集整理的spring boot车辆管理系统毕业设计源码031034的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【解决】Cloning into ‘xx
- 下一篇: OpenCV+Mediapipe手势动作