基于Java+SpringMvc+Vue技術的在線學習交流平臺的設計與實現---60頁論文參考

?博主介紹:碩士研究生,專注于Java技術領域開發與管理,以及畢業項目實戰?

? ? ? ?從事基于java BS架構、CS架構、c/c++ 編程工作近16年,擁有近12年的管理工作經驗,擁有較豐富的技術架構思想、較扎實的技術功底和資深的項目管理經驗。

? ? ? ?先后擔任過技術總監、部門經理、項目經理、開發組長、java高級工程師及c++工程師等職位,在工業互聯網、國家標識解析體系、物聯網、分布式集群架構、大數據通道處理、接口開發、遠程教育、辦公OA、財務軟件(工資、記賬、決策、分析、報表統計等方面)、企業內部管理軟件(ERP、CRM等)、arggis地圖等信息化建設領域有較豐富的實戰工作經驗;擁有BS分布式架構集群、數據庫負載集群架構、大數據存儲集群架構,以及高并發分布式集群架構的設計、開發和部署實戰經驗;擁有大并發訪問、大數據存儲、即時消息等瓶頸解決方案和實戰經驗。

? ? ? ?擁有產品研發和發明專利申請相關工作經驗,完成發明專利構思、設計、編寫、申請等工作,并獲得發明專利1枚。

? ? ? 大家在畢設選題、項目升級、論文寫作,就業畢業等相關問題都可以給我留言咨詢,非常樂意幫助更多的人或加w 908925859。

相關博客地址:

csdn專業技術博客:https://blog.csdn.net/mr_lili_1986?type=blog

Iteye博客: ? ? ? ?https://www.iteye.com/blog/user/mr-lili-1986-163-com
————————————————

? ? ? ? ? ? ? ? ? ? ? ? ? ? 版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
? ? ? ? ? ? ? ? ? ? ? ??
原文鏈接:https://blog.csdn.net/mr_lili_111/article/details/139928121

基于Java+SpringMvc+Vue技術的在線學習交流平臺設計與實現

目錄

第一章 緒論

1.1?研究背景

1.2?研究現狀

1.3 研究內容

第二章 相關技術介紹

2.1 ?Java語言

2.2 HTML網頁技術

2.3 MySQL數據庫

2.4 Springboot 框架介紹

2.5 VueJS介紹

2.6 ElementUI介紹

第三章 系統分析

3.1 可行性分析

3.2 系統性能分析

3.3 系統功能分析

3.4?系統流程分析

第四章 系統設計

4.1 系統概要設計

4.2 系統結構設計

4.3?系統順序圖設計

4.4?系統關系圖設計

4.5 數據庫設計

第五章? 系統詳細設計

5.1 在線學習交流網站

5.2后臺管理

第六章? 部分代碼實現

6.1? Spring boot? 配置代碼

6.2 用戶管理及登錄登出代碼

6.3 Md5 加密算法代碼

6.4 ?部分數據庫代碼

第七章 系統測試

7.1 測試定義

7.2 測試目的

7.3 測試方案

7.4 測試結論

第八章 結 論

致謝

附一、論文參考:

附二、其他案例:?


第一章 緒論

1.1?研究背景

? ? ? ?在線學習平臺為廣大學習者提供了便捷、靈活的學習方式,涵蓋了從基礎教育到高等教育的各個階段,以及職業技能、興趣愛好等多個領域。

? ? ? ?隨著信息技術與互聯網的快速發展,人們對教育方式和學習方式的需求不斷提升,越來越多的人傾向于利用碎片時間進行在線學習。
據數據顯示,在線教育用戶規模持續增長。例如,有數據顯示2018年在線教育用戶已達到1.07億人,占互聯網用戶總量的34.9%,而到了更近的時期,用戶規模更是達到了數億人。
除了傳統的學術課程外,職業培訓、興趣愛好等領域的課程需求也在不斷增加,為在線教育平臺提供了廣闊的發展空間。
? ? ? ?自2010年以來,中國政府多次出臺相關政策支持在線教育的發展。例如,《國家中長期教育改革和發展規劃綱要(2010-2020年)》中明確提出要加強教育信息化建設,推動信息技術與教育教學的深度融合。如教育部等五部門聯合下發的《構建利用信息化手段擴大優質教育資源覆蓋面有效機制的實施方案》,以及《關于促進在線教育健康發展的指導意見》等文件,均對在線教育的發展提出了明確要求和支持措施。這些政策的實施有效推動了在線教育平臺的建設和發展。

1.2?研究現狀

一、市場需求與用戶規模
1、用戶規模持續增長:近年來,隨著互聯網技術的普及和在線教育市場的快速發展,在線學習交流平臺的用戶規模持續增長。大量用戶選擇在線學習作為獲取知識、提升技能的主要途徑。


2、學習需求多樣化:用戶的學習需求不再局限于傳統的學術課程,而是涵蓋了職業培訓、興趣愛好、語言學習等多個領域。這種多樣化的學習需求促使在線學習交流平臺不斷豐富課程資源,提供更加個性化的學習服務。

二、挑戰與機遇并存
1、技術安全與隱私保護:在線交流平臺面臨著技術安全和隱私保護的挑戰。平臺需要采取有效的技術手段和措施來保障用戶數據的安全和隱私,防止信息泄露和濫用。

2、內容監管與合規性:隨著法律法規的不斷完善,在線交流平臺需要加強對用戶發布內容的監管和審核,確保平臺內容的合法性和合規性。同時,平臺還需要積極響應政府部門的監管要求,履行社會責任。

3、發展機遇廣闊:盡管面臨諸多挑戰,但在線交流平臺仍然具有廣闊的發展機遇。隨著5G、物聯網等新技術的普及和應用,在線交流平臺將迎來更多的創新和發展機會。同時,隨著全球化和數字化的加速推進,在線交流平臺將成為連接不同國家和地區、促進文化交流和經濟合作的重要橋梁。

1.3 研究內容


? ? ? 本系統的開發和設計施根據用戶的實際情況出發,對系統的需求進行了詳細的分析,然后進行系統的整體設計,最后通過測試使得系統設計的更加完整,可以實現系統中所有的功能,在開始編寫論文之前每天到圖書館借閱相關書籍, 包括java入門到精通、javaee編程、mysql數據庫書籍等編程書籍,然后針對開發管理系統,去網上查找了其他別人做好的類似系統,參照他們的設計結果,來對自己的系統進行更加詳細的系統的設計,將系統中所有的功能結果一一列舉出來,然后進行需求分析,最后對所有的功能模塊進行編碼,最后完成系統的整體測試,實現系統的正常運行。

這次編寫的論文包含了8個部分的內容,具體內容如下:

第一部分 ?緒論:文章主要從課題背景以及研究現狀綜合闡述了開發此系統的必要性。

第二部分 ?相關技術介紹:系統開發用到的各種技術都大致做出了簡介。

第三部分 ?系統分析:對系統的可行性分析以及對所有功能需求進行分析,來查看該系統是否具有開發的可能。

第四部分 ?系統設計:對系統的架構、結構、功能、模板、模板關系、數據庫進行設計。

第五部分 ?系統詳細設計與實現:對系統的功能模塊設計和數據庫設計進行詳細設計,并設計出系統界面圖形展示,描述本系統功能。

第六部分? 部分系統代碼實現:對系統核心代碼進行簡要描述。

第七部分? 系統測試:測試系統的每一個功能是否能夠正常運行,是否可以滿足人們的需求。

第八部分? 結論:對本論文系統設計與實現進行總結。

? ? ? 本項目開發設計主要基于java語言springboot后端框架vueJS前端框架技術以及mysql數據庫進行設計,來開發出一款方便實用、易維護的前后端分享的在線求職招聘系系統,并且設計的程序具有界面整潔、功能強大等特性,從全局來說,在線學習交流平臺的設計解決了信息零散、信息不通、學習交流等問題,該系統的實現,可以投入到真實環境中,這樣不僅能解決以上提及的問題,讓信息管理更準則。?

第二章 相關技術介紹


2.1 ?Java語言


Java是一種面向對象的編程語言,目前由美國Oracle公司開發。自1995年上線以來,已經廣泛應用于Web開發、桌面應用開發等多個領域。Java語言的特點包括:

1、面向對象:Java提供了類、接口和繼承等面向對象的特性,支持單繼承和多接口繼承,以及動態綁定。

2、分布式:Java支持Internet應用的開發,提供了網絡應用編程接口(java.net),支持RMI(遠程方法激活)機制,適合開發分布式應用。

3、健壯性:Java的強類型機制、異常處理、垃圾自動收集等特性保證了程序的健壯性。Java的安全檢查機制也增強了其健壯性。

4、安全性:Java提供了安全機制以防惡意代碼的攻擊,包括類加載器的安全防范機制和安全管理機制。

5、體系結構中立:Java程序編譯為體系結構中立的字節碼格式,可以在任何實現Java平臺的系統中運行,適合異構網絡環境和軟件分發。

6、可移植性:Java的體系結構中立性和嚴格規定的基本數據類型長度保證了其可移植性。Java編譯器和運行環境也是用Java實現的,進一步增強了其可移植性。

7、解釋型:Java代碼首先被編譯為字節碼,然后由Java虛擬機(JVM)解釋執行。JVM適用于大多數軟件和硬件平臺,實現了Java代碼的高可移植性。

Java的發展歷程中,它最初是為了解決硬件領域的單片式計算機系統的智能化問題而開發的。隨著技術的發展,Java已經成為了全球最大的開發者專業社群之一,廣泛應用于PC、數據中心、游戲控制臺、科學超級計算機、移動電話和互聯網等多個領域。

2.2 HTML網頁技術


HTML的全稱超文本標記語言,于1990年創立的一種標記語言。它包括一系列標簽,通過這些標簽可以將網絡上的文檔格式統一,使分散的Internet資源連接為一個邏輯整體。HTML文本是由HTML命令組成的描述性文本,自1990年以來,HTML就一直被用作萬維網的信息表示語言,使用HTML描述的文件需要通過web瀏覽器顯示出效果。HTML是一種建立網頁文件的語言,通過標記式的指令(Tag),將文字,圖形、動畫、聲音、表格、鏈接、影像等內容顯示出來。。

2.3 MySQL數據庫


Mysql 經過多次的更新,功能層面已經非常的豐富和完善了,從Mysql4版本到5版本進行了比較大的更新,在商業的實際使用中取得了很好的實際應用效果。最新版本的Mysql支持對信息的壓縮,同時還能進行加密能更好的滿足對信息安全性的需求。同時經過系統的多次更新,數據庫自身的鏡像功能也得到了很大的增強,運行的流暢度和易用性方面有了不小的進步,驅動的使用和創建也更加的高效快捷。最大的變動還是進行了空間信息的顯示優化,能更加方便的在應用地圖上進行坐標的標注和運算。強大的備份功能也保證了用戶使用的過程會更加安心,同時支持的Office特性還支持用戶的自行安裝和使用。在信息的顯示形式上也進行了不小的更新,增加了兩個非常使用的顯示區,一個是信息區,對表格和文字進行了分類處理,界面的顯示更加清爽和具體。第二是儀表的信息控件,能在儀表信息區進行信息的顯示,同時還能進行多個信息的比對,為用戶的實際使用帶來了很大的便捷。

2.4 Springboot 框架介紹


Spring ?Boot是由Pivotal團隊2013年開發提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。Spring框架是Java平臺上的一種開源應用框架,提供具有控制反轉特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補充,甚至是替補。Spring框架為開發提供了一系列的解決方案,比如利用控制反轉的核心特性,并通過依賴注入實現控制反轉來實現管理對象生命周期容器化,利用面向切面編程進行聲明式的事務管理,整合多種持久化技術管理數據訪問,提供大量優秀的Web框架方便開發等。

SpringBoot基于Spring4.0設計,不僅繼承了Spring框架原有的優秀特性,而且還通過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot通過集成大量的框架使得依賴包的版本沖突,以及引用的不穩定性等問題得到了很好的解決。 [1]

SpringBoot所具備的特征有:

(1)可以創建獨立的Spring應用程序,并且基于其Maven或Gradle插件,可以創建可執行的JARs和WARs;

(2)內嵌Tomcat或Jetty等Servlet容器;

(3)提供自動配置的“starter”項目對象模型(POMS)以簡化Maven配置;

(4)盡可能自動配置Spring容器;

(5)提供準備好的特性,如指標、健康檢查和外部化配置;

(6)絕對沒有代碼生成,不需要XML配置。

2.5 VueJS介紹


Vue 是一款用于構建用戶界面的 JavaScript 框架。它基于標準 HTML、CSS 和 JavaScript 構建,并提供了一套聲明式的、組件化的編程模型,可以高效地開發用戶界面。Vue.js是一套構建用戶界面的漸進式框架,采用自底向上增量開發的設計,核心庫只關注視圖層。另一方面,Vue完全有能力驅動采用單文件組件和Vue生態系統支持的庫開發的復雜單頁應用。

Vue.js 的主要特點

1、響應式數據綁定系統。這意味著當應用程序中的數據發生變化時,頁面上相關的部分會自動更新。這種機制使得開發者可以輕松地管理和維護復雜的應用程序狀態。

2、組件化開發。Vue.js 允許開發者將頁面拆分為獨立的組件,每個組件具有自己的數據和邏輯。這種模塊化的開發方式使得代碼復用和維護更加容易,并且能夠提高開發效率。

3、Vue.js 也提供了一套強大的指令系統,用于處理 DOM 操作和頁面交互。通過使用這些指令,開發者可以輕松地實現諸如條件渲染、循環渲染、事件處理等功能。

4、豐富的插件生態系統。開發者可以使用各種插件來擴展 Vue.js 的功能,例如路由、狀態管理、表單驗證等。這使得開發者可以根據自己的需求選擇合適的插件,從而更好地滿足項目的要求。

2.6 ElementUI介紹


Element-UI 是由餓了么前端團隊推出的一款基于 Vue.js 2.0 的桌面端 UI 組件庫。它為開發者提供了一套完整、易用、美觀的組件解決方案,極大地提升了前端開發的效率和質量。本文將詳細介紹 Element-UI 的特點、安裝使用、核心組件及其應用場景。

一、Element-UI的特點

1. 完整性

Element-UI 提供了從基礎控件到復雜組件的一整套 UI 解決方案,包括表單、表格、對話框、消息提示等。這些組件覆蓋了常見的 UI 場景,開發者可以直接使用,減少了重復造輪子的工作。

2. 易用性

Element-UI 的 API 設計簡單直觀,文檔詳細豐富,開發者可以很快上手。它與 Vue.js 無縫結合,利用 Vue 的特性(如數據綁定、組件化)使開發更加便捷。

3. 美觀性

Element-UI 的設計風格簡潔優雅,符合現代 UI 設計趨勢。它提供了多種主題配置,開發者可以根據項目需求進行定制。

4. 可擴展性

Element-UI 提供了豐富的鉤子函數和事件,可以方便地進行二次開發和擴展。開發者可以基于 Element-UI 的組件進行自定義開發,滿足特定業務需求。

針對本文中設計的在線求職招聘系統在實際的實現過程中,最終選擇Mysql數據庫的主要原因在于在企業的應用系統應用及開發的過程中會存在大量的數據庫比較頻繁的操作,而且數據的安全性要求也是非常的高,最重要的是Mysql5.8為開源免費的數據庫,在行業中應用比較廣泛。綜合這些因素,最終選擇安全性系數比較高的Mysql來對個人博客管理系統后臺數據進行存儲操作[。

第三章 系統分析


3.1 可行性分析


? ? 在系統開發之初要進行系統可行分析,這樣做的目的就是使用最小成本解決最大問題,一旦程序開發滿足用戶需要,帶來的好處也是很多的。下面我們將從技術上、操作上、經濟上等方面來考慮這個系統到底值不值得開發。

3.1.1 技術可行性


? ? ? 本系統基于JAVA編程語言,采用springboot后端框架、vueJS前端框架技術,以及對mysql數據庫進行開發設計,作為計算機專業學生,在學校期間就接觸到許多關于編程方面的知識,當然也包括各種編程軟件,對他們的了解度也比較系統,所以技術開發上面還是有一定熟悉和把握。

3.1.2 經濟可行性
? ? 我在設計該系統的時候主要是從節約成本出發,然后進行具體的系統的設計,在系統的設計過程中由于采用的所有工具以及技術支持全部都是免費的,因此不需要有任何的成本就可以進行該系統的設計。所用到的所有資源都是免費的,只要有網絡就可以進行下載使用,不需要支付相應的費用,因此該項目在經濟方面是完全可以實行的。

3.1.3 操作可行性
? ? ? 本人自己就是學生,程序開發經驗不足,在界面設計上面不會設計太復雜,要講究簡單好看,操作上要方便,不能讓用戶覺得不流暢。用戶一旦進入操作界面,界面上就會有相應提示,跟著操作提示就可以找到對應的功能操作模塊,對于用戶來說免培訓就能使用。

從上面幾個部分的可行性分析得出,這次開發的在線學習交流平臺在開發上面沒有什么大問題,值得開發。

3.2 系統性能分析


(1)系統響應效率:頁面響應時問應該在3秒以內,最長不能超過4秒,并支持至少10000人同時在線所有系統。

(2)界面簡潔清晰:系統界面要求簡單明了,容易操作,符合用戶操作習慣。

(3)儲存性高:因為本系統中有很多的信息需要存儲,因此對于系統的存儲量有很大的要求,需要有一個強大的數據庫的支持才能確保所有的信息都能安全穩定的進行存儲。

(4)易學性:該系統在操作上必須簡單好上手,沒有很多復雜的操作,只需要簡單的進行學習就能操作該系統。

(5)穩定性需求:開發的在線求職招聘系統要求運行穩定,運行過程中無界面不清楚、字體模糊、不能正常操作等現象。

3.3 系統功能分析


? ? ? ? 在線學習交流平臺主要包括以下幾大功能模塊,即用戶管理、菜單管理、權限管理、首頁、文章管理、文章分類管理、標簽管理、評論管理、評論審核、個人中心、后臺管理等功能模板。

其中,

(1)用戶管理模塊:包括系統管理員和一般用戶。系統中的核心用戶是系統管理員,管理員登錄后,通過管理員菜單來管理系統。其中,系統管理員可以對本系統所有功能進行動態管理。一般用戶登錄后可以對個人信息進行修改,管理自己的招聘信息、應聘信息、留言等。

(2)菜單管理:對本系統的所有菜單進行動態管理,實現系統的低偶合設計。

(3)權限管理:通過角色管理、角色權限動態分配等操作實現本系統用戶的權限動態控制,實現不同用戶、不同角色、不同權限。同時,個人只能管理自己的相應信息。從而保障本系統的安全、本系統的用戶數據安全,提供系統健壯性。

(4)文章管理模塊:對文章進行管理,每個人只能管理自己的文章,管理員可以對所有文章進行管理。

(5)文章分類管理:對文章的分類進行管理,由管理員統一對文章分類進行管理。

(6)標簽管理模塊:文章可以添加標簽,由管理員統一對文章標簽進行管理。

(7)評論管理模塊:增加用戶可以對文章進行評論、點贊、打賞等功能。

(8)評論審核管理模塊:對評論進行手動或自動過濾審核功能。當設置為自動審核時,平臺對敏感詞進行做加*處理。

3.4?系統流程分析

3.4.1 登錄流程

登錄模塊主要滿足管理員以及用戶的權限登錄,用戶登錄流程圖如圖3-5所示。

??

圖3-5 登錄流程圖

3.4.2 注冊流程
? ? 未有賬號的用戶可進入注冊界面進行注冊操作,用戶注冊流程圖如圖3-6所示。

??

圖3-6 注冊流程圖

3.4.3 添加信息流程
? ? 用戶在添加信息時,信息編號自動生成,系統會對添加的信息進行驗證,驗證通過則添加至數據庫,添加信息成功,反之添加失敗。添加信息流程如圖3-7所示。

??

圖3-7 添加信息流程圖

3.4.4 刪除信息流程
? ? 用戶可選擇要刪除的信息進行信息刪除操作,在刪除信息時系統提示是否確定刪除信息,是則刪除信息成功,系統數據庫將信息進行刪除。刪除信息流程圖如圖3-8所示。

??

圖3-8刪除信息流程圖

第四章 系統設計


4.1 系統概要設計


? ? ?系統采用B/S架構,通過Web瀏覽器進行訪問和操作。系統包括前臺和后臺兩個主要部分:

1、交流網站:為大家提供用戶學習、交流界面,實現文章搜索、查看、評論交流、點贊、打賞等功能。

2、后臺:為管理員提供管理界面,實現用戶管理、文章管理、評論管理、數據統計等功能。。

4.2 系統結構設計


? ? 整個系統是由多個功能模塊組合而成的,要將所有的功能模塊都一一列舉出來,然后進行逐個的功能設計,使得每一個模塊都有相對應的功能設計,然后進行系統整體的設計。

本系統結構圖如圖4-2所示。?

4.3?系統順序圖設計

4.3.1?登錄模塊順序圖

??? 登錄模塊主要滿足了管理員以及用戶的權限登錄,登錄模塊順序圖如圖4-3所示。

4.3.2?添加信息模塊順序圖

??? 管理員以及用戶登錄后均可進行添加信息操作,添加信息模塊順序圖如圖4-4所示。

4.4?系統關系圖設計

本系統各類之間關系圖如圖4-2所示。

4.5 數據庫設計

? ? ? ?一個好的數據庫可以關系到程序開發的優劣,數據庫設計離不開表結構的設計,還有表與表之間的聯系,以及系統開發需要設計的數據表內容等信息。在進行數據庫設計期間,要結合實際情況來對數據庫進行針對性的開發設計[12]。

4.4.1 數據庫E-R圖設計
本系統采用的是mysql數據庫,數據存儲快,因為個人博客管理系統,主要的就是對信息的管理,信息內容比較多,這就需要好好的設計一個好的數據庫,分類要清楚,不能添加信息的時候,造成信息太過混亂,設計好的數據庫首先就需要先把各個實體之間的關系表達明確,系統的E-R圖如下圖所示:?

4.4.2 邏輯結構設計
? ? ? ?邏輯結構設計是把概念結構設計階段畫好的數據庫ER圖轉換為關系模型。該系統的關系模型的邏輯結構是由主要一下關系模式組成,具體的關系模式如下:

(1)用戶信息(主鍵id、用戶id、用戶姓名、表名、角色id、角色名、密碼、新增時間、過期時間)

(2)角色信息(主鍵id、角色名稱、角色描述、新增時間、過期時間)

(3)角色權限信息(主鍵id、角色id、角色名稱、關聯的菜單id、關聯的菜單名、新增時間、過期時間)

(4)菜單信息(主鍵id、菜單名稱、菜單訪問路徑、菜單描述、上級菜單id、新增時間、過期時間)

(5)文章信息(主鍵id、創建日期、文章名稱、文章內容描述、文章類型、文章標簽、文章點贊數、文章訪問數、父節點id、上傳用戶id、上傳用戶姓名、狀態、文章審核狀態、審核人id、審核人)

(6)評論信息(主鍵id、創建日期、文章id、文章名、評論人id、評論人姓名、評論內容、是否審核、評論時間等)

第五章? 系統詳細設計

5.1 在線學習交流網站

5.1.1用戶登錄注冊模塊:

用戶填寫登錄信息進行登錄

5.1.2 首頁:

展示網站的所有功能,包括 文章、文章分類 、推薦、最新文章 等

5.1.3? 文章查看

5.1.4? 文章交流評論、點贊、打賞

5.1.4? 留言

5.1.5 用戶中心--修改密碼:

5.1.6 用戶中心--首頁:

5.1.7 用戶中心--發布文章:

5.1.8 用戶中心--文章列表:

5.1.9 用戶中心--評論交流列表:

5.2后臺管理

5.2.1用戶登錄注冊模塊:

用戶填寫登錄信息進行登錄

5.1.2 后臺首頁:

包括 文章管理、菜單管理、權限管理、網站管理、系統管理

5.1.3 文章管理:

5.1.4 文章分類管理:

5.1.5 文章標簽管理:

5.1.5 交流評論管理:

包含自動敏感詞過濾和自動/人工審核

5.1.6 用戶管理:

5.1.7 菜單管理:

5.1.7 角色管理:

5.1.8 角色權限管理:

5.1.9 日志管理:

第六章? 部分代碼實現

6.1? Spring boot? 配置代碼

# Tomcat
server:tomcat:uri-encoding: UTF-8port: 8080servlet:context-path: /springboot0t8qlspring:datasource:driverClassName: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/springboot0t8ql?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8username: rootpassword: 123456#        driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
#        url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springboot0t8ql
#        username: sa
#        password: 123456servlet:multipart:max-file-size: 10MBmax-request-size: 10MBresources:static-locations: classpath:/testStatic/,classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/#mybatis
mybatis-plus:mapper-locations: classpath*:mapper/*.xml#實體掃描,多個package用逗號或者分號分隔typeAliasesPackage: com.entityglobal-config:#主鍵類型  0:"數據庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數字類型唯一ID)", 3:"全局唯一ID UUID";id-type: 1#字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"field-strategy: 2#駝峰下劃線轉換db-column-underline: true#刷新mapper 調試神器refresh-mapper: true#邏輯刪除配置logic-delete-value: -1logic-not-delete-value: 0#自定義SQL注入器sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjectorconfiguration:map-underscore-to-camel-case: truecache-enabled: falsecall-setters-on-nulls: true#springboot 項目mybatis plus 設置 jdbcTypeForNull (oracle數據庫需配置JdbcType.NULL, 默認是Other)
jdbc-type-for-null: 'null'

6.2 用戶管理及登錄登出代碼

/*** 用戶賬戶:用于保存用戶登錄信息(User)表控制層*/
@Slf4j
@RestController
@RequestMapping("user")
public class UserController extends BaseController<User, UserService> {/*** 服務對象*/@Autowiredpublic UserController(UserService service) {setService(service);}/*** Token服務*/@Autowiredprivate AccessTokenService tokenService;@Autowiredprivate UserGroupService userGroupService;/*** 注冊* @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);}/*** 找回密碼* @param form* @return*/@PostMapping("forget_password")public Map<String, Object> forgetPassword(@RequestBody User form,HttpServletRequest request) {JSONObject ret = new JSONObject();String username = form.getUsername();String code = form.getCode();String password = form.getPassword();// 判斷條件if(code == null || code.length() == 0){return error(30000, "驗證碼不能為空");}if(username == null || username.length() == 0){return error(30000, "用戶名不能為空");}if(password == null || password.length() == 0){return error(30000, "密碼不能為空");}// 查詢用戶Map<String, String> query = new HashMap<>();query.put("username",username);Query select = service.select(query, service.readConfig(request));List list = select.getResultList();if (list.size() > 0) {User o = (User) list.get(0);JSONObject query2 = new JSONObject();JSONObject form2 = new JSONObject();// 修改用戶密碼query2.put("user_id",o.getUserId());form2.put("password",service.encryption(password));service.update(query, service.readConfig(request), form2);return success(1);}return error(70000,"用戶不存在");}/*** 登錄* @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, "賬號或密碼不正確");}}/*** 修改密碼* @param data* @param request* @return*/@PostMapping("change_password")public Map<String, Object> change_password(@RequestBody Map<String, String> data, HttpServletRequest request){// 根據Token獲取UserIdString 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,"密碼修改失敗!");}/*** 登錄態* @param request* @return*/@GetMapping("state")public Map<String, Object> state(HttpServletRequest request) {JSONObject ret = new JSONObject();// 獲取狀態String token = request.getHeader("x-auth-token");// 根據登錄態獲取用戶IDInteger userId = tokenGetUserId(token);log.info("[返回userId] {}",userId);if(userId == null || userId == 0){return error(10000,"用戶未登錄!");}// 根據用戶ID獲取用戶Map<String,String> query = new HashMap<>();query.put("user_id" ,String.valueOf(userId));// 根據用戶ID獲取Query select = service.select(query,service.readConfig(request));List resultList = select.getResultList();if (resultList.size() > 0) {JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(resultList.get(0)));user.put("token",token);ret.put("obj",user);return success(ret);} else {return error(10000,"用戶未登錄!");}}/*** 登錄態* @param request* @return*/@GetMapping("quit")public Map<String, Object> quit(HttpServletRequest request) {String token = request.getHeader("x-auth-token");JSONObject ret = new JSONObject();Map<String, String> query = new HashMap<>(16);query.put("token", token);try{tokenService.delete(query,service.readConfig(request));}catch (Exception e){e.printStackTrace();}return success("退出登錄成功!");}/*** 獲取登錄用戶ID* @param token* @return*/public Integer tokenGetUserId(String token) {log.info("[獲取的token] {}",token);// 根據登錄態獲取用戶IDif(token == null || "".equals(token)){return 0;}Map<String, String> query = new HashMap<>(16);query.put("token", token);AccessToken byToken = tokenService.findOne(query);if(byToken == null){return 0;}return byToken.getUser_id();}/*** 重寫add* @return*/@PostMapping("/add")@Transactionalpublic Map<String, Object> add(HttpServletRequest request) throws IOException {Map<String,Object> map = service.readBody(request.getReader());map.put("password",service.encryption(String.valueOf(map.get("password"))));service.insert(map);return success(1);}}

6.3 Md5 加密算法代碼

public class MD5Utils {private static final Logger logger = LoggerFactory.getLogger(MD5Utils.class);// 全局數組private final static String[] strDigits = {"0", "1", "2", "3", "4", "5","6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};/*** 16進制字符*/private final static char hexdigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8','9', 'a', 'b', 'c', 'd', 'e', 'f'};/*** 對文件全文生成MD5摘要** @param file 要加密的文件* @return MD5摘要碼*/public static String getMD5ForFile(String filePath) {FileInputStream fis = null;MessageDigest md = null;try {md = MessageDigest.getInstance("MD5");File file = new File(filePath);if (!file.exists()) {return "";}fis = new FileInputStream(file);byte[] buffer = new byte[4096];int length = -1;while ((length = fis.read(buffer)) != -1) {md.update(buffer, 0, length);}byte[] b = md.digest();return byteToHexString(b);} catch (Exception ex) {logger.error("獲取MD5信息發生異常!" + ex.toString());return null;} finally {try {if (null != fis) {fis.close();}} catch (IOException e) {logger.error("獲取MD5信息發生異常!" + e.toString());}}}/*** 把byte[]數組轉換成十六進制字符串表示形式** @param tmp 要轉換的byte[]* @return 十六進制字符串表示形式*/private static String byteToHexString(byte[] tmp) {String s;char str[] = new char[16 * 2];int k = 0;for (int i = 0; i < 16; i++) {byte byte0 = tmp[i];str[k++] = hexdigits[byte0 >>> 4 & 0xf];str[k++] = hexdigits[byte0 & 0xf];}s = new String(str);return s;}// 返回形式為數字跟字符串private static String byteToArrayString(byte bByte) {int iRet = bByte;// System.out.println("iRet="+iRet);if (iRet < 0) {iRet += 256;}int iD1 = iRet / 16;int iD2 = iRet % 16;return strDigits[iD1] + strDigits[iD2];}// 返回形式只為數字private static String byteToNum(byte bByte) {int iRet = bByte;System.out.println("iRet1=" + iRet);if (iRet < 0) {iRet += 256;}return String.valueOf(iRet);}// 轉換字節數組為16進制字串private static String byteToString(byte[] bByte) {StringBuffer sBuffer = new StringBuffer();for (int i = 0; i < bByte.length; i++) {sBuffer.append(byteToArrayString(bByte[i]));}return sBuffer.toString();}public static String GetMD5Code(String strObj) {if (StringUtils.isEmpty(strObj)) {return "";}String resultString = null;try {resultString = new String(strObj);MessageDigest md = MessageDigest.getInstance("MD5");// md.digest() 該函數返回值為存放哈希值結果的byte數組resultString = byteToString(md.digest(strObj.getBytes()));} catch (NoSuchAlgorithmException ex) {ex.printStackTrace();}return resultString;}}

6.4 ?部分數據庫代碼

-- ----------------------------
-- Table structure for permission
-- ----------------------------
DROP TABLE IF EXISTS `permission`;
CREATE TABLE `permission` (`id` int(11) NOT NULL AUTO_INCREMENT,`permission_id` varchar(32) NOT NULL COMMENT '權限id',`name` varchar(100) NOT NULL COMMENT '權限名稱',`description` varchar(255) DEFAULT NULL COMMENT '權限描述',`url` varchar(255) DEFAULT NULL COMMENT '權限訪問路徑',`perms` varchar(255) DEFAULT NULL COMMENT '權限標識',`parent_id` int(11) DEFAULT NULL COMMENT '父級權限id',`type` int(1) DEFAULT NULL COMMENT '類型   0:目錄   1:菜單   2:按鈕',`order_num` int(3) DEFAULT '0' COMMENT '排序',`icon` varchar(50) DEFAULT NULL COMMENT '圖標',`status` int(1) NOT NULL COMMENT '狀態:1有效;2刪除',`create_time` datetime DEFAULT NULL,`update_time` datetime DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of permission
-- ----------------------------
BEGIN;
INSERT INTO `permission` VALUES (1, '1', '工作臺', '工作臺', '/workdest', 'workdest', 0, 1, 1, 'fas fa-home', 1, '2017-09-27 21:22:02', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (2, '2', '權限管理', '權限管理', NULL, NULL, 0, 0, 4, 'fas fa-user-cog', 1, '2017-07-13 15:04:42', '2020-04-19 19:09:22');
INSERT INTO `permission` VALUES (3, '201', '用戶管理', '用戶管理', '/users', 'users', 2, 1, 1, 'fas fa-chess-queen', 1, '2017-07-13 15:05:47', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (4, '20101', '列表查詢', '用戶列表查詢', '/user/list', 'user:list', 3, 2, 0, NULL, 1, '2017-07-13 15:09:24', '2017-10-09 05:38:29');
INSERT INTO `permission` VALUES (5, '20102', '新增', '新增用戶', '/user/add', 'user:add', 3, 2, 0, NULL, 1, '2017-07-13 15:06:50', '2018-02-28 17:58:46');
INSERT INTO `permission` VALUES (6, '20103', '編輯', '編輯用戶', '/user/edit', 'user:edit', 3, 2, 0, NULL, 1, '2017-07-13 15:08:03', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (7, '20104', '刪除', '刪除用戶', '/user/delete', 'user:delete', 3, 2, 0, NULL, 1, '2017-07-13 15:08:42', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (8, '20105', '批量刪除', '批量刪除用戶', '/user/batch/delete', 'user:batchDelete', 3, 2, 0, '', 1, '2018-07-11 01:53:09', '2018-07-11 01:53:09');
INSERT INTO `permission` VALUES (9, '20106', '分配角色', '分配角色', '/user/assign/role', 'user:assignRole', 3, 2, 0, NULL, 1, '2017-07-13 15:09:24', '2017-10-09 05:38:29');
INSERT INTO `permission` VALUES (10, '202', '角色管理', '角色管理', '/roles', 'roles', 2, 1, 2, 'fas fa-chess-queen', 1, '2017-07-17 14:39:09', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (11, '20201', '列表查詢', '角色列表查詢', '/role/list', 'role:list', 10, 2, 0, NULL, 1, '2017-10-10 15:31:36', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (12, '20202', '新增', '新增角色', '/role/add', 'role:add', 10, 2, 0, NULL, 1, '2017-07-17 14:39:46', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (13, '20203', '編輯', '編輯角色', '/role/edit', 'role:edit', 10, 2, 0, NULL, 1, '2017-07-17 14:40:15', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (14, '20204', '刪除', '刪除角色', '/role/delete', 'role:delete', 10, 2, 0, NULL, 1, '2017-07-17 14:40:57', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (15, '20205', '批量刪除', '批量刪除角色', '/role/batch/delete', 'role:batchDelete', 10, 2, 0, '', 1, '2018-07-10 22:20:43', '2018-07-10 22:20:43');
INSERT INTO `permission` VALUES (16, '20206', '分配權限', '分配權限', '/role/assign/permission', 'role:assignPerms', 10, 2, 0, NULL, 1, '2017-09-26 07:33:05', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (17, '203', '資源管理', '資源管理', '/permissions', 'permissions', 2, 1, 3, 'fas fa-chess-queen', 1, '2017-09-26 07:33:51', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (18, '20301', '列表查詢', '資源列表', '/permission/list', 'permission:list', 17, 2, 0, NULL, 1, '2018-07-12 16:25:28', '2018-07-12 16:25:33');
INSERT INTO `permission` VALUES (19, '20302', '新增', '新增資源', '/permission/add', 'permission:add', 17, 2, 0, NULL, 1, '2017-09-26 08:06:58', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (20, '20303', '編輯', '編輯資源', '/permission/edit', 'permission:edit', 17, 2, 0, NULL, 1, '2017-09-27 21:29:04', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (21, '20304', '刪除', '刪除資源', '/permission/delete', 'permission:delete', 17, 2, 0, NULL, 1, '2017-09-27 21:29:50', '2018-02-27 10:53:14');
INSERT INTO `permission` VALUES (22, '3', '運維管理', '運維管理', NULL, NULL, 0, 0, 7, 'fas fa-people-carry', 1, '2018-07-06 15:19:26', '2020-04-19 19:09:59');
INSERT INTO `permission` VALUES (23, '301', '數據監控', '數據監控', '/database/monitoring', 'database', 22, 1, 1, 'fas fa-chess-queen', 1, '2018-07-06 15:19:55', '2018-07-06 15:19:55');
INSERT INTO `permission` VALUES (24, '4', '系統管理', '系統管理', NULL, NULL, 0, 0, 5, 'fas fa-cog', 1, '2018-07-06 15:20:38', '2020-04-19 19:08:58');
INSERT INTO `permission` VALUES (25, '401', '在線用戶', '在線用戶', '/online/users', 'onlineUsers', 24, 1, 1, 'fas fa-chess-queen', 1, '2018-07-06 15:21:00', '2018-07-24 14:58:22');
INSERT INTO `permission` VALUES (32, '1000001992372345', '在線用戶查詢', '在線用戶查詢', '/online/user/list', 'onlineUser:list', 25, 2, 0, '', 1, '2018-07-24 15:02:23', '2018-07-24 15:02:23');
INSERT INTO `permission` VALUES (33, '1000002083579304', '踢出用戶', '踢出用戶', '/online/user/kickout', 'onlineUser:kickout', 25, 2, 0, '', 1, '2018-07-24 15:03:16', '2018-07-24 15:03:16');
INSERT INTO `permission` VALUES (34, '1000000171409776', '批量踢出', '批量踢出', '/online/user/batch/kickout', 'onlineUser:batchKickout', 25, 2, 0, '', 1, '2018-07-24 15:04:09', '2018-07-24 15:04:09');
INSERT INTO `permission` VALUES (35, '1000000863853891', '網站管理', '網站管理', NULL, NULL, 0, 0, 3, 'fas fa-columns', 1, '2018-07-24 15:44:23', '2020-04-19 19:08:46');
INSERT INTO `permission` VALUES (36, '1000001264798222', '基礎信息', '基礎設置', '/siteinfo', 'siteinfo', 35, 1, 1, 'fas fa-chess-queen', 1, '2018-07-24 15:48:13', '2018-07-24 17:43:39');
INSERT INTO `permission` VALUES (37, '1000000432183856', '保存', '基礎設置-保存', '/siteinfo/save', 'siteinfo:save', 36, 2, 0, '', 1, '2018-07-24 15:49:12', '2018-07-24 15:49:12');
INSERT INTO `permission` VALUES (38, '1000001792841328', '系統公告', '系統公告', '/notifies', 'notifies', 35, 1, 2, 'fas fa-chess-queen', 0, '2018-07-24 23:40:45', '2018-09-13 12:34:18');
INSERT INTO `permission` VALUES (39, '1000001351219537', '查詢', '系統公告-查詢', '/notify/list', 'notify:list', 38, 2, 0, '', 0, '2018-07-24 23:41:30', '2018-09-13 12:33:19');
INSERT INTO `permission` VALUES (40, '1000000791685519', '新增', '系統公告-新增', '/notify/add', 'notify:add', 38, 2, 0, '', 0, '2018-07-24 23:42:20', '2018-09-13 12:33:26');
INSERT INTO `permission` VALUES (42, '1000001531648485', '編輯', '系統公告-編輯', '/notify/edit', 'notify:edit', 38, 2, 0, '', 0, '2018-07-24 23:44:39', '2018-09-13 12:33:52');
INSERT INTO `permission` VALUES (43, '1000001548165826', '刪除', '系統公告-刪除', '/notify/delete', 'notify:delete', 38, 2, 0, '', 0, '2018-07-24 23:45:27', '2018-09-13 12:33:57');
INSERT INTO `permission` VALUES (44, '1000001530229707', '批量刪除', '批量刪除公告', '/notify/batch/delete', 'notify:batchDelete', 38, 2, 0, '', 0, '2018-07-24 23:46:25', '2018-09-13 12:34:02');
INSERT INTO `permission` VALUES (45, '1000000237721285', '友鏈管理', '友情鏈接', '/links', 'links', 35, 1, 3, 'fas fa-chess-queen', 1, '2018-07-25 11:05:49', '2018-07-25 11:07:03');
INSERT INTO `permission` VALUES (46, '1000001238193773', '查詢', '友鏈-查詢', '/link/list', 'link:list', 45, 2, 0, '', 1, '2018-07-25 11:06:44', '2018-07-25 11:06:44');
INSERT INTO `permission` VALUES (47, '1000001305005793', '新增', '友鏈-新增', '/link/add', 'link:add', 45, 2, 0, '', 1, '2018-07-25 11:07:46', '2018-07-25 11:07:46');
INSERT INTO `permission` VALUES (48, '1000001679037501', '編輯', '友鏈-編輯', '/link/edit', 'link:edit', 45, 2, 0, '', 1, '2018-07-25 11:08:21', '2018-07-25 11:08:21');
INSERT INTO `permission` VALUES (49, '1000001011730177', '刪除', '友鏈-刪除', '/link/delete', 'link:delete', 45, 2, 0, '', 1, '2018-07-25 11:08:53', '2018-07-25 11:08:53');
INSERT INTO `permission` VALUES (50, '1000001312374743', '批量刪除', '友鏈-批量刪除', '/link/batch/delete', 'link:batchDelete', 45, 2, 0, '', 1, '2018-07-25 11:09:40', '2018-07-25 11:09:40');
INSERT INTO `permission` VALUES (51, '1000001507480127', '審核', '友鏈-審核', '/link/audit', 'link:audit', 45, 2, 0, '', 1, '2018-07-25 11:42:28', '2018-07-25 11:42:28');
INSERT INTO `permission` VALUES (52, '1000000602555213', '文章管理', '文章管理', NULL, NULL, 0, 0, 2, 'fas fa-newspaper', 1, '2018-07-25 17:43:12', '2020-04-19 19:04:49');
INSERT INTO `permission` VALUES (53, '1000001729104792', '分類管理', '分類管理', '/categories', 'categories', 52, 1, 3, 'fas fa-chess-queen', 1, '2018-07-25 17:43:50', '2020-04-19 20:33:27');
INSERT INTO `permission` VALUES (54, '1000000015836901', '新增', '新增分類', '/category/add', 'category:add', 53, 2, 0, '', 1, '2018-07-25 17:44:28', '2018-07-25 17:44:28');
INSERT INTO `permission` VALUES (55, '1000001439189167', '編輯', '編輯分類', '/category/edit', 'category:edit', 53, 2, 0, '', 1, '2018-07-25 17:44:52', '2018-07-25 17:44:52');
INSERT INTO `permission` VALUES (56, '1000001647995753', '刪除', '刪除分類', '/category/delete', 'category:delete', 53, 2, 0, '', 1, '2018-07-25 17:45:28', '2018-07-25 17:45:28');
INSERT INTO `permission` VALUES (58, '1000000841419865', '查詢', '分類查詢', '/category/list', 'category:list', 53, 2, 0, '', 1, '2018-07-25 17:49:43', '2018-07-25 17:49:43');
INSERT INTO `permission` VALUES (59, '1000000976625379', '標簽管理', '標簽管理', '/tags', 'tags', 52, 1, 4, 'fas fa-chess-queen', 1, '2018-07-25 18:50:47', '2020-04-19 20:33:35');
INSERT INTO `permission` VALUES (60, '1000002127467055', '查詢', '查詢標簽列表', '/tag/list', 'tag:list', 59, 2, 0, '', 1, '2018-07-25 18:51:20', '2018-07-25 18:51:20');
INSERT INTO `permission` VALUES (61, '1000001458372033', '新增', '新增標簽', '/tag/add', 'tag:add', 59, 2, 0, '', 1, '2018-07-25 18:51:42', '2018-07-25 18:51:42');
INSERT INTO `permission` VALUES (62, '1000001832967209', '編輯', '編輯標簽', '/tag/edit', 'tag:edit', 59, 2, 0, '', 1, '2018-07-25 18:52:17', '2018-07-25 18:52:17');
INSERT INTO `permission` VALUES (63, '1000000754923037', '刪除', '刪除標簽', '/tag/delete', 'tag:delete', 59, 2, 0, '', 1, '2018-07-25 18:52:40', '2018-07-25 18:52:40');
INSERT INTO `permission` VALUES (64, '1000000759248744', '批量刪除', '批量刪除標簽', '/tag/batch/delete', 'tag:batchDelete', 59, 2, 0, '', 1, '2018-07-25 18:53:14', '2018-07-25 18:53:14');
INSERT INTO `permission` VALUES (65, '1000001038456544', '文章列表', '文章列表', '/articles', 'articles', 52, 1, 2, 'fas fa-chess-queen', 1, '2018-07-29 20:20:23', '2020-04-19 19:23:06');
INSERT INTO `permission` VALUES (66, '1000000686545782', '查詢', '查詢文章', '/article/list', 'article:list', 65, 2, 0, '', 1, '2018-07-29 20:20:54', '2018-07-29 20:20:54');
INSERT INTO `permission` VALUES (67, '1000001642272578', '新增', '新增文章', '/article/add', 'article:add', 65, 2, 0, '', 1, '2018-07-29 20:21:21', '2018-07-29 20:21:21');
INSERT INTO `permission` VALUES (68, '1000000804049447', '編輯', '編輯文章', '/article/edit', 'article:edit', 65, 2, 0, '', 1, '2018-07-29 20:21:50', '2018-07-29 20:21:50');
INSERT INTO `permission` VALUES (69, '1000000488864959', '刪除', '刪除文章', '/article/delete', 'article:delete', 65, 2, 0, '', 1, '2018-07-29 20:23:27', '2018-07-29 20:23:27');
INSERT INTO `permission` VALUES (70, '1000000512435306', '批量刪除', '批量刪除文章', '/article/batch/delete', 'article:batchDelete', 65, 2, 0, '', 1, '2018-07-29 20:23:49', '2018-07-29 20:23:49');
INSERT INTO `permission` VALUES (71, '1000000899091444', '發布文章', '寫文章', '/article/add', 'article:add', 52, 1, 1, 'fas fa-chess-queen', 1, '2018-07-29 20:39:49', '2020-04-19 19:16:06');
INSERT INTO `permission` VALUES (72, '1000000224901858', '評論管理', '評論管理', '/comments', 'comments', 35, 1, 4, 'fas fa-chess-queen', 1, '2018-08-10 09:44:41', '2018-09-19 15:44:13');
INSERT INTO `permission` VALUES (73, '1000001579533936', '查詢', '查詢', '/comment/list', 'comment:list', 72, 2, 0, '', 1, '2018-08-10 09:46:54', '2018-08-10 09:46:54');
INSERT INTO `permission` VALUES (74, '1000000663968031', '審核', '審核評論', '/comment/audit', 'comment:audit', 72, 2, 0, '', 1, '2018-08-10 09:57:11', '2018-08-10 09:57:11');
INSERT INTO `permission` VALUES (75, '1000000322655547', '回復', '回復評論', '/comment/reply', 'comment:audit', 72, 2, 0, '', 1, '2018-08-10 10:04:28', '2018-08-10 10:04:28');
INSERT INTO `permission` VALUES (76, '1000001419287014', '刪除', '刪除評論', '/comment/delete', 'comment:delete', 72, 2, 0, '', 1, '2018-08-10 10:06:27', '2018-08-10 10:06:27');
INSERT INTO `permission` VALUES (77, '1000002075182223', '批量刪除', '批量刪除評論', '/comment/batch/delete', 'comment:batchDelete', 72, 2, 0, '', 1, '2018-08-10 10:07:57', '2018-08-10 10:07:57');
INSERT INTO `permission` VALUES (78, '1000000587822241', '上傳管理', '上傳管理', NULL, NULL, 0, 0, 6, 'fas fa-cloud-upload-alt', 1, '2018-09-12 17:08:41', '2020-04-19 19:09:35');
INSERT INTO `permission` VALUES (79, '1000000493635111', '云存儲配置', '云存儲配置', '/attachment/config', 'upload:config', 78, 1, 1, 'fas fa-chess-queen', 1, '2018-09-12 17:10:09', '2020-03-07 14:31:41');
INSERT INTO `permission` VALUES (80, '1000000318760332', '保存', '保存云存儲配置', '/upload/saveConfig', 'upload:saveConfig', 79, 2, 0, '', 1, '2018-09-12 17:10:42', '2018-09-12 17:10:42');
INSERT INTO `permission` VALUES (81, '1000000919723998', '主題管理', '主題管理', '/themes', 'themes', 35, 1, 2, 'fas fa-chess-queen', 1, '2018-09-19 15:43:50', '2018-09-19 15:43:50');
INSERT INTO `permission` VALUES (82, '1000000784272506', '查詢', '主題列表', '/theme/list', 'theme:list', 81, 2, 0, '', 1, '2018-09-19 15:44:50', '2018-09-19 15:44:50');
INSERT INTO `permission` VALUES (83, '1000000215201942', '新增', '新增主題', '/theme/add', 'theme:add', 81, 2, 0, '', 1, '2018-09-19 15:45:34', '2018-09-19 15:45:34');
INSERT INTO `permission` VALUES (84, '1000001065007557', '啟用', '啟用主題', '/theme/use', 'theme:use', 81, 2, 0, '', 1, '2018-09-19 15:46:28', '2018-09-19 15:46:28');
INSERT INTO `permission` VALUES (85, '1000000431577803', '刪除', '刪除主題', '/theme/delete', 'theme:delete', 81, 2, 0, '', 1, '2018-09-19 15:48:06', '2018-09-19 15:48:06');
INSERT INTO `permission` VALUES (86, '1000000207002458', '批量刪除', '批量刪除主題', 'theme/batch/delete', 'theme:batchDelete', 81, 2, 0, '', 1, '2018-09-19 15:48:39', '2018-09-19 15:48:39');
INSERT INTO `permission` VALUES (87, '1000002051091207', '編輯', '編輯主題', '/theme/edit', 'theme:edit', 81, 2, 0, '', 1, '2018-09-19 15:54:34', '2018-09-19 15:54:34');
INSERT INTO `permission` VALUES (88, '5011629010561508', '批量推送', '批量推送百度', '/article/batch/push', 'article:batchPush', 65, 2, 0, '', 1, '2018-10-28 15:15:00', '2018-10-28 15:15:00');COMMIT;-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (`id` int(11) NOT NULL AUTO_INCREMENT,`role_id` varchar(20) NOT NULL COMMENT '角色id',`name` varchar(50) NOT NULL COMMENT '角色名稱',`description` varchar(255) DEFAULT NULL COMMENT '角色描述',`status` int(1) NOT NULL COMMENT '狀態:1有效;2刪除',`create_time` datetime DEFAULT NULL COMMENT '創建時間',`update_time` datetime DEFAULT NULL COMMENT '更新時間',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of role
-- ----------------------------
BEGIN;
INSERT INTO `role` VALUES (1, '1', '超級管理員', '超級管理員', 1, '2017-06-28 20:30:05', '2017-06-28 20:30:10');
INSERT INTO `role` VALUES (2, '2', '管理員', '管理員', 1, '2017-06-30 23:35:19', '2017-10-11 09:32:33');
INSERT INTO `role` VALUES (3, '3', '普通用戶', '普通用戶', 1, '2017-06-30 23:35:44', '2018-07-13 11:44:06');
INSERT INTO `role` VALUES (4, '4', '數據庫管理員', '數據庫管理員', 1, '2017-07-12 11:50:22', '2017-10-09 17:38:02');
COMMIT;-- ----------------------------
-- Table structure for role_permission
-- ----------------------------
DROP TABLE IF EXISTS `role_permission`;
CREATE TABLE `role_permission` (`id` int(11) NOT NULL AUTO_INCREMENT,`role_id` varchar(20) NOT NULL COMMENT '角色id',`permission_id` varchar(20) NOT NULL COMMENT '權限id',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1917 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of role_permission
-- ----------------------------
BEGIN;
INSERT INTO `role_permission` VALUES (1843, '1', '1');
INSERT INTO `role_permission` VALUES (1844, '1', '1000000602555213');
INSERT INTO `role_permission` VALUES (1845, '1', '1000000899091444');
INSERT INTO `role_permission` VALUES (1846, '1', '1000001038456544');
INSERT INTO `role_permission` VALUES (1847, '1', '1000000686545782');
INSERT INTO `role_permission` VALUES (1848, '1', '1000001642272578');
INSERT INTO `role_permission` VALUES (1849, '1', '1000000804049447');
INSERT INTO `role_permission` VALUES (1850, '1', '1000000488864959');
INSERT INTO `role_permission` VALUES (1851, '1', '1000000512435306');
INSERT INTO `role_permission` VALUES (1852, '1', '5.011629010561508e15');
INSERT INTO `role_permission` VALUES (1853, '1', '1000001729104792');
INSERT INTO `role_permission` VALUES (1854, '1', '1000000015836901');
INSERT INTO `role_permission` VALUES (1855, '1', '1000001439189167');
INSERT INTO `role_permission` VALUES (1856, '1', '1000001647995753');
INSERT INTO `role_permission` VALUES (1857, '1', '1000000841419865');
INSERT INTO `role_permission` VALUES (1858, '1', '1000000976625379');
INSERT INTO `role_permission` VALUES (1859, '1', '1000002127467055');
INSERT INTO `role_permission` VALUES (1860, '1', '1000001458372033');
INSERT INTO `role_permission` VALUES (1861, '1', '1000001832967209');
INSERT INTO `role_permission` VALUES (1862, '1', '1000000754923037');
INSERT INTO `role_permission` VALUES (1863, '1', '1000000759248744');
INSERT INTO `role_permission` VALUES (1864, '1', '1000000863853891');
INSERT INTO `role_permission` VALUES (1865, '1', '1000001264798222');
INSERT INTO `role_permission` VALUES (1866, '1', '1000000432183856');
INSERT INTO `role_permission` VALUES (1867, '1', '1000000919723998');
INSERT INTO `role_permission` VALUES (1868, '1', '1000000784272506');
INSERT INTO `role_permission` VALUES (1869, '1', '1000000215201942');
INSERT INTO `role_permission` VALUES (1870, '1', '1000001065007557');
INSERT INTO `role_permission` VALUES (1871, '1', '1000000431577803');
INSERT INTO `role_permission` VALUES (1872, '1', '1000000207002458');
INSERT INTO `role_permission` VALUES (1873, '1', '1000002051091207');
INSERT INTO `role_permission` VALUES (1874, '1', '1000000237721285');
INSERT INTO `role_permission` VALUES (1875, '1', '1000001238193773');
INSERT INTO `role_permission` VALUES (1876, '1', '1000001305005793');
INSERT INTO `role_permission` VALUES (1877, '1', '1000001679037501');
INSERT INTO `role_permission` VALUES (1878, '1', '1000001011730177');
INSERT INTO `role_permission` VALUES (1879, '1', '1000001312374743');
INSERT INTO `role_permission` VALUES (1880, '1', '1000001507480127');
INSERT INTO `role_permission` VALUES (1881, '1', '1000000224901858');
INSERT INTO `role_permission` VALUES (1882, '1', '1000001579533936');
INSERT INTO `role_permission` VALUES (1883, '1', '1000000663968031');
INSERT INTO `role_permission` VALUES (1884, '1', '1000000322655547');
INSERT INTO `role_permission` VALUES (1885, '1', '1000001419287014');
INSERT INTO `role_permission` VALUES (1886, '1', '1000002075182223');
INSERT INTO `role_permission` VALUES (1887, '1', '2');
INSERT INTO `role_permission` VALUES (1888, '1', '201');
INSERT INTO `role_permission` VALUES (1889, '1', '20101');
INSERT INTO `role_permission` VALUES (1890, '1', '20102');
INSERT INTO `role_permission` VALUES (1891, '1', '20103');
INSERT INTO `role_permission` VALUES (1892, '1', '20104');
INSERT INTO `role_permission` VALUES (1893, '1', '20105');
INSERT INTO `role_permission` VALUES (1894, '1', '20106');
INSERT INTO `role_permission` VALUES (1895, '1', '202');
INSERT INTO `role_permission` VALUES (1896, '1', '20201');
INSERT INTO `role_permission` VALUES (1897, '1', '20202');
INSERT INTO `role_permission` VALUES (1898, '1', '20203');
INSERT INTO `role_permission` VALUES (1899, '1', '20204');
INSERT INTO `role_permission` VALUES (1900, '1', '20205');
INSERT INTO `role_permission` VALUES (1901, '1', '20206');
INSERT INTO `role_permission` VALUES (1902, '1', '203');
INSERT INTO `role_permission` VALUES (1903, '1', '20301');
INSERT INTO `role_permission` VALUES (1904, '1', '20302');
INSERT INTO `role_permission` VALUES (1905, '1', '20303');
INSERT INTO `role_permission` VALUES (1906, '1', '20304');
INSERT INTO `role_permission` VALUES (1907, '1', '4');
INSERT INTO `role_permission` VALUES (1908, '1', '401');
INSERT INTO `role_permission` VALUES (1909, '1', '1000001992372345');
INSERT INTO `role_permission` VALUES (1910, '1', '1000002083579304');
INSERT INTO `role_permission` VALUES (1911, '1', '1000000171409776');
INSERT INTO `role_permission` VALUES (1912, '1', '1000000587822241');
INSERT INTO `role_permission` VALUES (1913, '1', '1000000493635111');
INSERT INTO `role_permission` VALUES (1914, '1', '1000000318760332');
INSERT INTO `role_permission` VALUES (1915, '1', '3');
INSERT INTO `role_permission` VALUES (1916, '1', '301');
COMMIT;-- ----------------------------
-- Table structure for sys_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config` (`id` bigint(20) NOT NULL AUTO_INCREMENT,`sys_key` varchar(50) DEFAULT NULL COMMENT 'key',`sys_value` varchar(2000) DEFAULT NULL COMMENT 'value',`status` tinyint(4) DEFAULT '1' COMMENT '狀態   0:隱藏   1:顯示',`remark` varchar(500) DEFAULT NULL COMMENT '備注',PRIMARY KEY (`id`),UNIQUE KEY `key` (`sys_key`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COMMENT='系統配置信息表';-- ----------------------------
-- Records of sys_config
-- ----------------------------
BEGIN;
INSERT INTO `sys_config` VALUES (1, 'CLOUD_STORAGE_CONFIG', '{\"type\":1,\"qiniuDomain\":\"http://xxx.com\",\"qiniuPrefix\":\"img/blog\",\"qiniuAccessKey\":\"xxxAccessKey\",\"qiniuSecretKey\":\"xxxSecretKey\",\"qiniuBucketName\":\"blog\",\"aliyunDomain\":\"\",\"aliyunPrefix\":\"\",\"aliyunEndPoint\":\"\",\"aliyunAccessKeyId\":\"\",\"aliyunAccessKeySecret\":\"\",\"aliyunBucketName\":\"\",\"qcloudDomain\":\"\",\"qcloudPrefix\":\"\",\"qcloudSecretId\":\"\",\"qcloudSecretKey\":\"\",\"qcloudBucketName\":\"\",\"qcloudRegion\":\"\"}', 1, '云存儲配置信息');
INSERT INTO `sys_config` VALUES (2, 'SITE_NAME', 'MC智能管理系統', 1, '網站名稱');
INSERT INTO `sys_config` VALUES (3, 'SITE_KWD', 'Java JavaScript Spring SpringBoot Vue React', 1, '網站關鍵字');
INSERT INTO `sys_config` VALUES (4, 'SITE_DESC', '個人博客網站,技術交流,經驗分享。', 1, '網站描述');
INSERT INTO `sys_config` VALUES (5, 'SITE_LOGO', 'http://localhost:8080/img/mc-cms-logo.jpg', 1, '站點logo');
INSERT INTO `sys_config` VALUES (6, 'SITE_PERSON_PIC', 'http://localhost:8080/img/mc-cms-logo.jpg', 1, '站長頭像');
INSERT INTO `sys_config` VALUES (7, 'SITE_PERSON_NAME', 'MC智能管理系統', 1, '站長名稱');
INSERT INTO `sys_config` VALUES (8, 'SITE_PERSON_DESC', 'MC智能管理系統,可以讓你智能管理機房/倉庫!', 1, '站長描述');
INSERT INTO `sys_config` VALUES (9, 'BAIDU_PUSH_URL', 'https://blog.csdn.net/mr_lili_1986?type=blog', 1, '博客地址');
COMMIT;-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
create table user
(user_id         varchar(20)  not null comment '用戶id',username        varchar(50)  not null comment '用戶名',password        varchar(50)  not null,salt            varchar(128) null comment '加密鹽值',nickname        varchar(50)  null comment '昵稱',email           varchar(50)  null comment '郵箱',phone           varchar(50)  null comment '聯系方式',sex             int(255)     null comment '年齡:1男2女',age             int(3)       null comment '年齡',img             varchar(255) null comment '頭像地址',status          int(1)       not null comment '用戶狀態:1有效; 2刪除',create_time     datetime     null comment '創建時間',update_time     datetime     null comment '更新時間',last_login_time datetime     null comment '最后登錄時間',constraint user_user_id_uindexunique (user_id)
)charset = utf8;-- ----------------------------
-- Records of user
-- ----------------------------
BEGIN;
INSERT INTO `user` VALUES ('1', 'admin', '53911073f14abb1987905ff2ae66003d', '9524c5f3c8c886acd44ea01802121457', 'mc', '888@qq.com', '15666666666', 1, 22, 'http://localhost:8080/img/mc-cms-logo.jpg', 1, '2018-05-23 21:22:06', '2018-07-17 23:04:46', '2019-09-17 23:20:04');
COMMIT;-- ----------------------------
-- Table structure for user_role
-- ----------------------------
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role` (`id` int(11) NOT NULL AUTO_INCREMENT,`user_id` varchar(20) NOT NULL COMMENT '用戶id',`role_id` varchar(20) NOT NULL COMMENT '角色id',PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;-- ----------------------------
-- Records of user_role
-- ----------------------------
BEGIN;
INSERT INTO `user_role` VALUES (1, '1', '1');
COMMIT;SET FOREIGN_KEY_CHECKS = 1;

第七章 系統測試


一個系統設計好后,就會進入測試階段,測試的目標是檢驗設計好的網站是否可以正常無誤的運行,盡可能的發現網站的問題,已使后期網站投入使用后網站盡少出錯。

7.1 測試定義


系統測試主要是判斷系統是否可以正常運行,功能模塊是否可以實現操作。程序代碼中是否有錯誤出現。測試程序是開發過程中的一個主要問題。就算系統完成的再好,再進行程序測試時也會也會發現一個重來沒有被發現的錯誤信息。

測試不僅是系統開發的開始,而且應該貫穿整個系統的整個生命周期。評估系統質量的方法不局限于系統編碼和過程,應該與軟件設計工作和歷史需求分析密切相關。系統錯誤,不一定是代碼錯誤,可能是階段的設計摘要和設計細節存在問題,問題也可能出現在需求分析階段[13]。從實際情況來看,最初的問題很可能是一個小錯誤,根據按鈕的原理,按鈕后的按鈕位錯將是所有位錯。該系統的原因也同樣適用,隨著后續的開發工作,誤差將越來越嚴重。因此就應該對系統進行測試,在一開始就發現系統中存在的問題,就能保證以后系統能夠正常穩定的運行。在測試系統中,開發人員應該站在用戶的角度來處理測試工作,而現在主要的測試方法是黑盒測試。測試的目的可以概括為以下幾點:首先,用戶界面和用戶需求是一致的,設置界面和設計風格統一;第二,創新設計接口規范設計標準,具有獨特的審美特征;最后,人類傳統的接口以滿足審美需求,不能盲目地追求一種獨特的,合理的規劃布局,符合審美標準。

7.2 測試目的


測試的目的在于要對系統的穩定和可操作性能進行對照檢查。對于軟件的開發利用最終的目的在最后的測試和試用,這是一個不可缺少的重要環節。對于軟件開發者而言,在對每一個單獨的功能進行編排時候,都要有單獨的測試,并通過測試階段才可以研發多個功能性軟件,這樣既縮短了研發時間,也可以在的單個的早期測試中發現問題,以免融合后的軟件,在查找問題時就很難快速解決或者急速定位問題。

本系統開發設計完成后,需要對其進行系統測試,測試的主要目的就是發現并找出系統中存在的問題,并及時的進行解決,確保系統可以正常穩定的運行下去,在進行系統測試的時候,在一定要非常的認真、仔細,切記不能粗心,不能放過一個漏洞,測試時候一定不要著急,要按照之前指定好的測試步驟一步一步進行,并且將測試的結果進行詳細的記錄,我們在進行測試的時候做好選擇自動化的測試,這樣既可以節省時間而且也能確保測試的準確性,如果采用人工測試的方法就不會這么的方便,由于人工測試有很多不確定的因素,在測試過程中很可能會出現一些問題,用機器測試就不會出現任何的問題,而且機器不會疲憊會一直二等工作下去。在測試的時候一定要非常專注,時刻關注著測試的結果,一但發現異常及時進行修改,最后,測試完之后的文檔應該保存下來,方便以后測試時用到。系統測試的方法有很多,對于本個人博客管理系統的測試,我們使用了測試用得最多的黑盒測試方法來對該系統進行測試。

7.3 測試方案


對測試計劃的把握是測試方案的重中之重。所有的技術難點應該都被包含在這個測試計劃之中。而且我們要保證能與目標形成一致性,以至于能夠測試出一些主要存在的錯誤和一些錯誤的漏洞。可以完美解決這些問題就只有白盒測試或者黑盒測試[14]。

構造測試是白盒測試的另一個名字,了解與分析程序的結構以及性能功用的,從而我們可以得到最終想要的結果并且觀察出是不是每一條程序都能得到。

性能測試是黑盒測試別稱,程序本身的運作通過程序的進程來觀察,主要是看一下程序是不是能夠像我們預期的目標那樣發展,看一看我們的程序最終能不能完整的得到我們最后想要的功能和儲存想得到的數據,到最后看一下我們的這個程序完整性能不能達到要求。

(1)模塊測試

單元測試就是模塊測試,顧名思義就是測試每個模塊所承擔的功能是否能夠實現,這個測試就是為了找出代碼在實際的設計運轉中某一些小的程序所出現的偏差,很好地改正這些錯誤,就說明我們模塊測試進行很成功過。

(2)集成測試:

集成測試就是對系統的測試以及對他子系統的一些性能測試,他檢查的事系統的包裝程序信息。找出其中的問題。他的優勢主要有以下這幾點:

軟件耗費較少。

可以提前發現端口的錯誤。

更好的地位系統中錯誤的位置。

從底部往上面進行的方案針對于偏下層的結構,而中間的結構就采用折中的方法。

(3)驗收測試:

終于到了結尾性的工作了。就是為了給用戶看一下我們的系統功能是否達到了預期的效果。我采用了性能測試也就是黑盒測試對系統進行測試。

其結果是分別是:

有一定的差異在用戶的需求。

再者就是結果與之差不了多少。

到了最后了,我們發現的問題都是與用戶的需求存在一定的關聯。

1、登錄測試

測試點:登錄

測試的目標:輸入賬號密碼以及驗證碼后系統會自動進行驗證是否正確。

所用的環境:Windows10和IE瀏覽器。

輸入信息:用戶名、密碼。

步驟:

(1)首先我們打來瀏覽器,進入該系統的登錄界面。

(2)在進入頁面登錄部分以后可以進行對用戶名、密碼進行測試,具體測試輸入情況如下表6.1所示。

表6.1 登錄測試?

序號用戶名輸入密碼輸入期望結果
1155462192251244566提示“用戶名或者密碼錯誤,或賬號未經審核”
2aaaaa123456提示“用戶名或密碼錯誤,或者賬號未經審核”
315546219225hangguowei登陸成功

7.4 測試結論


在線學習交流平臺按設計要求基本都可以達到,此系統具有完整的軟件功能,良好的用戶界面,能夠正確的處理錯誤信息,而且能夠準確的提出錯誤的種類。但是系統測試時也出現了一些系統的不足和缺陷,所以在今后的日子里我會對其視覺上的不足作出修改,其次系統的代碼和數據庫出現了非常多的冗余現象,都是因為對編程技術的應用不夠熟練,在日后我會加強自己的自身學習和能力,減少這樣的冗余現象。

經過對上述的測試結果分析,本系統無論是在技術方面,還是操作方面,還是經濟方面都是完全可以實行的,并且經過測試,該系統操作簡單,所有的功能都可以實現,因此該系統可以滿足人們的使用需求,值得被推廣。

總體說來,軟件通過測試。?

第八章 結 論

本文研究了在線學習交流平臺系統的設計與實現,在文章開端首先對個研究背景、研究現狀和研究內容作了簡單的介紹,然后通過系統分析,引申出本系統研究的主要內容。

通過對java語言、springboot框架和mysql數據庫的簡介,系統的說明了在線學習交流平臺的設計與實現的可行性,本文結論及研究成果如下:實現了java與mysql相結合構建的在線學習交流平臺,通過本次對在線學習交流平臺的設計與實現的研究與實現,我感觸到學習一門新技術,最重要的是實踐,只有多動手才能盡快掌握它,一個系統的開發,經驗是最重要的,經驗不足,就難免會有許多考慮不周之處。要想吸引更多的用戶,系統的界面必須要美觀、有特色、友好,功能要健全。

由于在此之前對于java知識并不了解,所以從一開始就碰到許多困難,例如一開始的頁面顯示不規范、數據庫連接有問題已經無法實現參數的傳遞等等,不過通過我不斷的查閱相關的資料,以及向老師同學請教,最后出現的所有的問題都得到了解決,通過這次的系統開發,我學到了很多的知識,也明白了自己在哪些方面有不足的地方,尤其是學會如何從大量的信息中篩選出所需有用的信息,同時我更加深刻的體會到了,雖然書本上的大部分知識都是有價值,正確的,但實際上每個人編程的思路和對數據處理的方法、思想都是不同的,這就要求我們一定要通過實踐才能找到解決問題的方案。在此次畢業設計活動中,我不斷的提高了自己,也得到了寶貴的經驗,我相信這些對我以后的發展都會有很大幫助。

通過這次對在線學習交流平臺的開發,讓我學到了更多的知識,同時通過這次系統的設計也讓我明白了自己在哪方面有不足,以后加以學習爭取可以開發住更多有用的適用的系統軟件,本次系統的設計提高了我的編程水平,為了我今后系統的開發打下了結實的基礎。?

參考文獻
[1] 高永強.基于深度學習的個性化推薦研究[J].工業控制計算機,2021,34(10):90-92.
[2] 張安淇,李元旭.互聯網知識共享平臺信息過載效應與弱化機制——基于知乎的案例研究[J].
情報科學,2020,38(01):24-29+41.DOI:10.13833/j.issn.1007-7634.2020.01.004.
[3] Xiaoqin Shelley Zhang,Xiaojie Zhang,Pavan Kaparthi. Combat Information Overload Problem in
Social Networks With Intelligent Information-Sharing and Response Mechanisms[J]. IEEE
Transactions on Computational Social Systems,2020.
[4] 劉馨蔚.“它經濟”升溫 寵物吸金強勁[J].中國對外貿易,2021(04):54-55.
[5] 狗民網.2020 年中國寵物行業白皮書.
[6] Lou Feng,Ning Xin. E-Commerce Recommendation Technology Based on Collaborative
Filtering Algorithm and Mobile Cloud Computing[J]. Wireless Communications and Mobile
Computing,2022,2022.
[7] Goldberg D, Nichols D.A, Oki B.M, et al. Using collaborative filtering to weave an information
tapestry[J]. Communications of The ACM, 1992, 35(12): 61-70.
[8] Konstan J.A, Miller B.N, Maltz D.A, et al. GroupLens: Applying collaborative filtering to
Usenet news[J]. Communications of The ACM, 1997, 40(3): 77-87.
[9] Venture Beat [EB/OB]. htp:/venturebeat.comn/ [2009-04].
[10] He X, Deng K, Wang X, et al. LightGCN: Simplifying and Powering Graph Convolution
Network for Recommendation[C]. In ACM 2020.
[11] Wang Hulong,Shen Zesheng,Jiang Shuzhen,Sun Guang,Zhang Ren Jie. User-based
Collaborative Filtering Algorithm Design and Implementation[J]. Journal of Physics: Conference
Series,2021,1757(1).0
[12] 鄧園園,吳美香,潘家輝.基于物品的改進協同過濾算法及應用[].計算機系統應用,
2019,28(01):184-189.
[13] Jena, Kalyan Kumar,Bhoi, Sourav Kumar,Mallick, Chittaranjan,Jena, Soumya Ranjan,Kumar,
Raghvendra,Long, Hoang Viet,Son, Nguyen Thi Kim. Neural model based collaborative filtering for
movie recommendation system[J]. International Journal of Information
Technology,2022(prepublish).
[14] Zhang Kaihan,Wang Zhiqiang,Liang Jiye,Zhao Xingwang. A Bayesian matrix factorization
model for dynamic user embedding in recommender system[J]. Frontiers of Computer
Science,2022,16(5).
[15] 吳青洋,程旭,鄧程鵬,丁浩軒,張宏,林勝海.基于聚類和獎懲用戶模型的協同過濾算法[J].計
算機系統應用,2020,29(08):135-143.DOI:10.15888/j.cnki.csa.007491.
[16] 陸文超,崔海朋.一種基于融合自編碼與神經網絡的協同過濾算法[J].中國水運(下半
月),2022,22(03):18-20.
[17] 王寧,沈正一,崔德龍,劉晴瑞.結合協同過濾與隱語義模型的視頻推薦策略[J].湖南工程學院
學報(自然科學版),2021,31(04):40-43.DOI:10.15987/j.cnki.hgbjbz.2021.04.007.
[18] Thomas N. Kipf and Max Welling. Semi-Supervised Classification with Graph Convolutional
Networks. In ICLR.2017
[19] 張術梅.MVC架構下網站的設計與實現思考[J].信息記錄材
料,2022,23(01):92-94.DOI:10.16009/j.cnki.cn13-1295/tq.2022.01.036.
[20] R.Karthik,T.S.Sridhar,R.Sriram. Digital Food ordering system based on Spring Framework[J].
International Journal of Recent Technology and Engineering (IJRTE),2020,8(6).
[21] 曹華山.SSM 框架在 Web 應用開發中的設計與實現[J].無線互聯科技,2021,18(11):108-109.
[22] 胡世洋,賴森林.淺論SSM框架在構建“微農”信息服務中的應用[J].電腦知識與技
術,2021,17(34):4-6.DOI:10.14004/j.cnki.ckt.2021.3589.
[23] Di Lu,Yuping Qiu,Chun Qian,Xi Wang,Wei Tan. Design of Campus Resource Sharing
Platform based on SSM Framework[J]. IOP Conference Series: Materials Science and
Engineering,2019,490(6).
[24] Xiaojie Guo,Tingmei Wang*. Design and Implementation of Graduate Information
Management System Based on SSM Framework[J]. Journal of Simulation,2020,8(2).
[25] Feng Leijie,Mu Zehui. Research on Mobile Point Exchange System Based on Collaborative
Filtering Recommendation Algorithm[J]. International Journal of Advanced Network, Monitoring
and Controls,2021,6(2).
[26] 賴佳星.基于Bootstrap和JavaScript技術設計與實現簡易Web計算器[J].科技資
訊,2022,20(01):13-16.DOI:10.16661/j.cnki.1672-3791.2110-5042-2874.
[27] Haokun Qi, Qingyang Feng , Junyan Zhang. Technology and analysis of JSP-based
merchandising system[J]. Scientific Journal of Intelligent Systems Research,2022,4(2).
[28] 周公平.基于jQuery框架的Web前端開發設計方法研究[J].信息與電腦(理論
版),2022,34(05):128-130.
[29] Liu Hongqing,Liu Yan. Research on Personalized Blog Customization System Based on
AJAX[C]//.Proceedings of 2018 5th International Conference on Electrical & Electronics
Engineering and Computer Science(ICEEECS 2018).,2018:136-139.
[30] 朱克武.Ajax技術在就業網站用戶信息管理中的應用[J].電腦知識與技
術,2021,17(33):9-11.DOI:10.14004/j.cnki.ckt.2021.3303.?

致謝


在畢業設計的過程中,通過對在線學習交流平臺的設計,我受益匪淺。在這段時間里,大學四年所學的知識得到了綜合的運用,掌握了軟件開發的基本方法,了解了當今軟件開發的一些新技術。

本設計是在A老師的悉心指導和熱情幫助下完成的。無論在理論上還是在實踐中,老師都給予我很大的幫助,每當遇到困難時,老師總是耐心的給我講解,老師認真負責的工作態度,讓我敬佩。值此論文完成之際,特別向指導老師表示衷心的感謝和崇高的敬意,謝謝他細心而又耐心地輔導,使得我得以順利的完成畢業設計開發工作,同時也要感謝其他幫助過我的老師和同學,他們在我完成設計過程中給予我很大的幫助,在此一并表示感謝。

在論文編寫過程中,雖然反復推敲核證,但由于本人水平有限,加上時間緊促,本文一定有不少缺點和不足,懇請各位老師給予幫助和指正。

------------------------------------------------------------------?

附一、論文參考:

附二、其他案例:?

?

??

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41724.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41724.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41724.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

AI+若依框架(低代碼開發)

提前說明&#xff1a; 文章是實時更新&#xff0c;寫了就會更。 文章是黑馬視頻的筆記&#xff0c;如果要自己學可以點及下面的鏈接&#xff1a; https://www.bilibili.com/video/BV1pf421B71v/一、若依介紹 1.版本介紹 若依為滿足多樣化的開發需求&#xff0c;提供了多個版本…

基于jeecgboot-vue3的Flowable流程-集成仿釘釘流程(一)圖標svgicon的使用

因為這個項目license問題無法開源&#xff0c;更多技術支持與服務請加入我的知識星球。 1、lowflow這里使用了tsx的動態圖標&#xff0c;如下&#xff1a; import ./index.scss import type { CSSProperties, PropType } from vue import { computed, defineComponent, resolv…

MATLAB基礎應用精講-【數模應用】 嶺回歸(Ridge)(附MATLAB、python和R語言代碼實現)

目錄 前言 算法原理 數學模型 Ridge 回歸的估計量 Ridge 回歸與標準多元線性回歸的比較 3. Ridge 參數的選擇 算法步驟 SPSSPRO 1、作用 2、輸入輸出描述 3、案例示例 4、案例數據 5、案例操作 6、輸出結果分析 7、注意事項 8、模型理論 SPSSAU 嶺回歸分析案…

Java [ 進階 ] 深入理解 JVM

?探索Java基礎 深入理解 JVM? 深入理解 JVM&#xff1a;結構與垃圾回收機制 Java 虛擬機&#xff08;JVM&#xff09;是 Java 程序運行的核心&#xff0c;了解 JVM 的內部結構和垃圾回收機制對優化 Java 應用性能至關重要。本文將深入探討 JVM 的結構和垃圾回收機制&#…

支付寶沙箱對接(GO語言)

支付寶沙箱對接 1.1 官網1.2 秘鑰生成&#xff08;系統默認&#xff09;1.3 秘鑰生成&#xff08;軟件生成&#xff09;1.4 golan 安裝 SDK1.5 GoLand 代碼1.6 前端代碼 1.1 官網 沙箱官網: https://open.alipay.com/develop/sandbox/app 秘鑰用具下載&#xff1a; https://ope…

序列化、反序列化

java 提供了一種對象序列化的機制&#xff0c;該機制中&#xff0c;一個對象可以被表示為一個字節序列&#xff0c;該字節序列包括該對象的數據、有關對象的類型的信息和存儲在對象中數據的類型。 將序列化對象寫入文件之后&#xff0c;可以從文件中讀取出來&#xff0c;并且對…

Java并發編程-ThreadLocal深入解讀及案例實戰

文章目錄 概述原理使用場景示例最佳實踐內存泄漏風險阿里開源組件TransmittableThreadLocal原理和機制使用場景如何使用注意事項ThreadLocal在分布式存儲系統edits_log案例中的實踐1. 為什么使用`ThreadLocal`?2. 實踐案例2.1 緩存日志操作2.2 線程局部的編輯日志狀態3. 注意事…

在 Spring 中編寫單元測試

單元測試是軟件開發過程中不可或缺的一部分&#xff0c;它能有效地提高代碼質量&#xff0c;確保代碼功能的正確性。在 Spring 應用中&#xff0c;JUnit 和 Mockito 是常用的單元測試工具&#xff0c;而 Spring Test 提供了豐富的測試支持。本文將介紹如何在 Spring 中使用 JUn…

并行處理百萬個文件的解析和追加

處理和解析大量文件&#xff0c;尤其是百萬級別的文件&#xff0c;是一個復雜且資源密集的任務。為實現高效并行處理&#xff0c;可以使用Python中的多種并行和并發編程工具&#xff0c;比如multiprocessing、concurrent.futures模塊以及分布式計算框架如Dask和Apache Spark。這…

物聯網時代5G通信技術分析研究一、引言

一、引言 近幾年&#xff0c;移動網絡技術跟隨互聯網的不斷發展而改革和進步&#xff0c;給平民大眾的生活也帶來新的嘗試與影響。從2G網絡的出現&#xff0c;到逐步被社會民眾所了解的3G&#xff0c;再到被熟知的且正在服務于大家的4G網絡&#xff0c;移動網絡技術的發展速度令…

jQuery Mobile 安裝指南

jQuery Mobile 安裝指南 jQuery Mobile 是一個基于 jQuery 的移動設備友好的網頁開發框架,它允許開發者創建響應式網頁和應用程序。本指南將詳細介紹如何安裝 jQuery Mobile,并確保您的開發環境準備好進行移動網頁開發。 1. 環境準備 在開始安裝 jQuery Mobile 之前,請確…

Mysql系列-Binlog主從同步

原文鏈接&#xff1a;https://zhuanlan.zhihu.com/p/669450627 一、主從同步概述 mysql主從同步&#xff0c;即MySQL Replication,可以實現將數據從一臺數據庫服務器同步到多臺數據庫服務器。MySQL數據庫自帶主 從同步功能&#xff0c;經過配置&#xff0c;可以實現基于庫、表…

B端設計:任何不顧及用戶體驗的設計,都是在裝樣子,花架子

B端設計是指面向企業客戶的設計&#xff0c;通常涉及產品、服務或系統的界面和功能設計。與C端設計不同&#xff0c;B端設計更注重實用性和專業性&#xff0c;因為它直接影響企業的效率和利益。 在B端設計中&#xff0c;用戶體驗同樣至關重要。不顧及用戶體驗的設計只是空洞的表…

數據庫之索引(二)

目錄 一、如何判斷數據庫的索引是否生效 二、如何評估索引創建的是否合理 三、索引是否越多越好 四、如何處理數據庫索引失效 五、是否所有的字段都適合創建索引 一、如何判斷數據庫的索引是否生效 可以使用EXPLAIN語句查看索引是否正在使用。 例如&#xff0c;假設已經創…

70.Bug:使用list.sort(Comparator.Comping(User::getCreateTime).reverse())空指針異常

1.出錯原因&#xff1a;在xml中沒有做字段映射 報錯語句復現&#xff1a; List<User> listnew ArrayList<>()&#xff1b; xml中進行查詢數據&#xff0c;數據存放在list中........... //排序 list.sort(Comparator.Comping(User::getCreateTime).reverse())&…

經典的layui框架,還有人用嗎?令人惋惜。

自從layui官網宣布關閉之后&#xff0c;layui框架的用戶飛速下滑&#xff0c;以至于到現在貝格前端工場承接的項目中&#xff0c;鮮有要求使用layui框架的&#xff0c;那么個框架還有人用嗎&#xff1f; 一、layui沒落是不是jquery惹的禍 layui的沒落與jQuery無關。layui框架…

Hi3861 OpenHarmony嵌入式應用入門--UDP Server

本篇使用的是lwip編寫udp服務端。需要提前準備好一個PARAM_HOTSPOT_SSID宏定義的熱點&#xff0c;并且密碼為PARAM_HOTSPOT_PSK。 修改網絡參數 在Hi3861開發板上運行上述四個測試程序之前&#xff0c;需要根據你的無線路由、Linux系統IP修改 net_params.h文件的相關代碼&…

深入理解 Docker 容器技術

一、引言 在當今的云計算和軟件開發領域&#xff0c;Docker 容器技術已經成為了一項不可或缺的工具。它極大地改變了應用程序的部署和運行方式&#xff0c;為開發者和運維人員帶來了諸多便利。 二、Docker 容器是什么&#xff1f; Docker 容器是一種輕量級、可移植、自包含的…

起底:Three.js和Cesium.js,二者異同點,好比全科和專科.

Three.js和Cesium.js是兩個常用的webGL引擎&#xff0c;很多小伙伴容易把它們搞混淆了&#xff0c;今天威斯數據來詳細介紹一下&#xff0c;他們的起源、不同點和共同點&#xff0c;閱讀后你就發現二者就像全科醫院和專科醫院的關系&#xff0c;很好識別。 一、二者的起源 Th…

性能測試相關理解---性能測試流程(二)

六、性能測試流程&#xff08;如何做性能測試&#xff1f;) 根據學習全棧測試博主的課程做的筆記 1、前期準備– 項目初期就開始&#xff0c;業務需求評審時盡量參與,對業務更深刻的認識&#xff08;確定哪些是核心業務、哪些可能存在并發請求、確定什么地方會出現瓶頸,方便后…