免費送源碼:Java+ssm+MySQL 校園二手書銷售平臺設計與實現 計算機畢業設計原創定制

摘?要

信息化社會內需要與之針對性的信息獲取途徑,但是途徑的擴展基本上為人們所努力的方向,由于站在的角度存在偏差,人們經常能夠獲得不同類型信息,這也是技術最為難以攻克的課題。針對校園二手書銷售平臺等問題,對校園二手書銷售平臺進行研究分析,然后開發設計出校園二手書銷售平臺以解決問題。

校園二手書銷售平臺主要功能模塊包括網站管理(輪播圖、網站公告)人員管理(管理員、注冊用戶)內容管理(圖書資訊、資訊分類)購物管理(二手商城、分類列表、訂單列表)個人管理(個人信息、密碼修改),采取面對對象的開發模式進行軟件的開發和硬體的架設,能很好的滿足實際使用的需求,完善了對應的軟體架設以及程序編碼的工作,采取MySQL作為后臺數據的主要存儲單元,采用springboot框架、Java技術、Ajax技術進行業務系統的編碼及其開發,實現了本系統的全部功能。本次報告,首先分析了研究的背景、作用、意義,為研究工作的合理性打下了基礎。針對校園二手書銷售平臺的各項需求以及技術問題進行分析,證明了系統的必要性和技術可行性,然后對設計系統需要使用的技術軟件以及設計思想做了基本的介紹,最后來實現校園二手書銷售平臺和部署運行使用它。

關鍵詞:Java開發語言;springboot框架技術;校園二手書銷售平臺

Abstract

In the information society, there is a need for targeted access to information, but the expansion of access is basically the direction people are striving for. Due to the deviation in perspective, people often can obtain different types of information, which is also the most difficult topic for technology to overcome. Aiming at issues such as the campus second-hand book sales platform, this paper conducts research and analysis on the campus second-hand book sales platform, and then develops and designs a campus second-hand book sales platform to solve the problem.

The main functional modules of the campus second-hand book sales platform include website management (rotation chart, website announcement), personnel management (administrator, registered user), content management (book information, information classification), shopping management (second-hand mall, classification list, order list), personal management (personal information, password modification), and object-oriented development mode for software development and hardware installation, It can well meet the needs of actual use, improve the corresponding software setup and program coding work, adopt MySQL as the main storage unit for background data, and adopt the spring boot framework, Java technology, and Ajax technology to code and develop the business system, achieving all the functions of the system. This report first analyzes the background, role, and significance of the research, laying a foundation for the rationality of the research work. This article analyzes various requirements and technical issues of the campus second-hand book sales platform, proves the necessity and technical feasibility of the system, and then makes a basic introduction to the technical software and design ideas needed to design the system. Finally, it realizes the campus second-hand book sales platform and deploys and runs it.

Key words:Java development language; Spring boot framework technology; Campus second-hand book sales platform

目 ?錄

第1章 緒論 1

1.1?背景及意義 1

1.2?國內外研究現狀 1

第2章 相關技術介紹 3

2.1 B/S架構 3

2.2 springboot框架介紹 3

2.3 MySQL數據庫 4

第3章 系統分析 5

3.1?可行性分析 5

3.1.1?技術可行性 5

3.1.2?經濟可行性 5

3.1.3?操作可行性 6

3.2?系統功能需求 6

3.3?系統性能需求 12

第4章 系統設計 13

4.1?總體目標 13

4.2?總體結構設計 13

4.3?功能模塊設計 14

4.4?數據庫設計 14

4.4.1?概念設計 14

4.4.2?邏輯設計 15

第5章 系統實現 22

5.1?登錄模塊的實現 22

5.2?用戶模塊的實現 24

5.2.1?注冊模塊的實現 24

5.2.2?收貨地址模塊的實現 26

5.2.3?商品詳情模塊的實現 27

5.2.4?我的訂單模塊的實現 28

5.3?后臺模塊的實現 30

5.3.1?用戶管理模塊的實現 30

5.3.2?密碼修改模塊的實現 33

5.3.3?公告管理模塊的實現 34

5.3.4二手商城管理模塊的實現 35

5.3.5訂單列表管理模塊的實現 35

第6章 系統測試 37

6.1?測試目的 37

6.2?測試用例 37

6.2.1?公告測試 37

6.2.2?創建數據測試 37

6.2.3?修改數據測試 38

6.2.4?查詢數據測試 38

6.3?測試結果 38

第7章 結論 40

參考文獻 41

致謝 43

  1. 緒論
    1. 背景及意義

隨著社會的快速發展,計算機的影響是全面且深入的。對校園二手書銷售平臺方面的要求也在不斷提高,校園二手書銷售平臺類目的數量更是不斷增加,使得校園二手書銷售平臺的開發成為必需而且緊迫的事情。校園二手書銷售平臺主要是借助計算機,通過對校園二手書銷售平臺所需的信息管理,增加用戶的選擇,同時也方便對廣大用戶信息的及時查詢、修改以及對用戶信息的及時了解。校園二手書銷售平臺對用戶帶來了更多的便利,該系統通過和數據庫管理系統軟件協作來滿足用戶的需求。計算機技術在現代管理中的應用,使計算機成為人們應用現代技術的重要工具。能夠有效的解決獲取信息便捷化、全面化的問題,提高效率。

本校園二手書銷售平臺主要牽扯到程序,數據庫與計算機技術等。覆蓋知識面大,可以大大的提高系統人員工作效率。

    1. 國內外研究現狀

由于這幾年來,計算機技術的逐日發展,在現代化的生活中,我們所需要的各種信息的處理操作都是通過使用計算機來完成的,有了計算機就可以方便的對各種信息進行查詢和維護了。因此需要實現對校園二手書交易管理的電子化,提高校園二手書交易的管理效能和銷售效能。

因為國內外傳統的二手書的交易的方式是基于手工的,而人的精力和工作準確度是有限的,所以傳統的二手書交易的數據管理方式難免會存在效率低下、準確率低等缺點,還伴隨著人力資源的大量浪費。在管理的工作中,所涉及到的工作電腦機器比人類更為擅長,能夠達到快速、準確、耗費資源小等要求。基于這些顯著的優點,如果能設計一套完整且貼合具體校園用戶需求的校園二手書銷售平臺,那么將大大地提高二手交易的服務質量。在具備這樣的校園二手書銷售平臺之下,買家只要登錄到系統中就能看到所有的二手商品,進行購買,賣家只要登錄到系統中就能夠出售二手書管理人員只需配備少量的專業人員對數據庫進行日常數據審核、管理以及定期維護。整個過程中,使用者只需提供少量的必要信息,大部分數據處理工作皆由數據庫和相關程序來完成,節省了大量時間。如果數據庫中的某部分信息存在錯誤,那么使用者可以通過批量修改等方式來降低排錯過程中所要花費的時間和精力。因此,為校園開發一個稱職的校園二手書銷售平臺是十分有必要的。

  1. 相關技術介紹
    1. B/S架構

B/S架構(瀏覽器/服務器)是當前應用最為廣泛的一種架構,能夠使系統的開發變得容易、易操作、易于維護。當你在你的電腦上安裝一個數據庫和幾個非常常見的瀏覽器時,你就可以使用這個結構。B/S結構可以直接用于 B/S系統,并且 B/S架構可以在實際應用中大大降低了系統的運行維護。在 B/S平臺上,各數據庫彼此獨立,具有很高的安全性。由于 B/S架構可以清晰地觀察到系統所處理的業務,使管理者可以及時做出決定,從而避免了企業的虧損。B/S架構的本質特征是集中式管理,用戶通過系統產生的數據,將其存入數據庫,便于以后的應用,從而達到了各種需要。

B/S模型由一個瀏覽器、一個網絡服務器、一個數據庫服務器三個層級構成。數據管理采用了當前大部分現有B/S系統的表現層、應用層和數據層,Web瀏覽器是為了滿足用戶的要求而設計的,在數據處理和邏輯過程中使用的中間應用層,從而形成分布式的運行模式。B/S體系結構的邏輯是:在前端完成的處理,將主要的業務邏輯交給后臺,而前端只負責少量的請求、渲染等。由于因特網技術的迅速發展,B/S體系結構使得任何時間、任何地點都能訪問到該系統。

圖2-1 B/S模式三層結構圖

    1. springboot框架介紹

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. MySQL數據庫

數據庫作為數據的存儲地方是項目必須的,MySQL是一款非常優秀的關系型數據庫,早期的MySQL并不是甲骨文公司的,后來才被他收購的。MySQL非常的小巧,安裝包才幾兆,sql語言的書寫也比較容易學習,最重要的是MySQL同時也是一款開源的軟件,所以不需要額外進行付費,本系統本身也是以學習總結所學知識為主,在系統的開發上最好盡量使用免費的軟件,所以選用MySQL進行數據庫管理。MySQL的容量也是非常大的,同時支持分庫分表的操作,支持分布式,所以越來越多的中小企業選擇該款數據庫管理工具。另外值得一提的是,開源也有一個不好的地方,就是容易遭到破解和黑客攻擊,所以MySQL在使用上還是更多的使用在中小項目中。

MySQL不會對平臺有需求,所以任何一個程序員都可以通過 MySQL數據庫來完成自己的系統開發,并且還可以節約大量的資源。因為它具有強大功能,所以可以用來儲存這個系統的數據。

MySQL適合于各種應用,我們在運行數據庫的時候,也很容易上手,我們只要編寫一段代碼,就可以完成相應的功能,并且可以在任何的平臺上使用,而不需要再進行第二次的編譯。MySQL數據庫還具備在本地存儲數據和允許結構化查詢以方便管理的優勢;MySQL是一個完全網絡化的系統,它的數據庫可以在互聯網的任何位置被訪問,它可以在任何地點與任何人分享;此外,MySQL也提供了存取控制的能力,可以阻止數據被非法使用,MySQL服務穩定,開發成本低,所以在開發過程中,MySQL數據庫是最受歡迎的。

  1. 系統分析
    1. 可行性分析

可行性分析也是為了分析項目的開發系統是否對開發有價值,以及是否真的需要改進管理系統在信息聽寫方面的不足。以本項目校園二手書銷售平臺 的設計目標和實施過程為例,如果開發該系統,希望能很好地解決用戶的管理信息問題,并且如果這使校園二手書銷售平臺 可以發展出最大價值學說,并且還可以變相的解決了用戶在一定程度上的問題,那么這個項目的研發系統也就是最有價值有意義的系統。但研發目標又是不是達到了所期望的結果,以及科研任務在實現后的最大效用和價值,它是否等于所有總成本。因此,研發階段本質上就是研發體系能否真正設計的階段。

      1. 技術可行性

技術可行性是指所確定的科學技術或決策方法中的科學技術均未突破組織掌握或相關人員熟悉的科學技術資源的界限。在技術研究過程中,應注意全面調查系統研發過程中包含的各種關鍵技術問題,盡可能選擇成熟技術,認真引用先進技術,關注特定的研究平臺和開發人員,評估關鍵技術的有效性。

Java技術對于該校園二手書銷售平臺 的設計和實施很是關鍵,基于B/S架構的和MySQL數據庫管理,對于前臺的應用和后臺的數據庫管理都是至關重要的,要想有效應用該程序,就需要保持功能全面、易懂易簡單使用的特性。構建數據庫管理時,需要確保數據分析信息完全、數據分析信息穩定性好、數據分析信息穩定性較高的庫。在早期,人們對Java的基本重要知識點就有理解和熟悉,對MySQL數據庫發生過簡要的掌握、熟悉,在早期對軟件工程測試,以及UML語言等基礎課程發生過大致的掌握和練習,經過對上述課程練習,就能夠對上述課程有相應的信息系統開發、檢驗和判斷。

Java可以和MySQL結合起來研發一個校園二手書銷售平臺 ,一定是合理而且有效的。

      1. 經濟可行性

實施國民經濟的可行性主要包括兩個方面:一是從要實施的某個計劃中獲取和利用國民經濟各種資源的潛在可能性,二是實現國民經濟發展政策總體目標的潛在可能性;二是為完成某一國民經濟發展政策實施方案,所要花費的經濟成本及其所獲得的利益。由于政府的財務資源是限制的,每一種從國民經濟發展政策實施方案中所獲取和利用的財政資源也是限制的。于是,每一項公眾政策措施中都面臨著一種爭奪公共財政資本的問題。但總的來說,"公眾政策措施的社會經濟資源的占用量與其政策措施目標的預期價值成正比例關聯。"當然,這還觸及到了一種成本效率提問。假如某一方法的總成本等于利潤,顯然這種社會經濟政策措施就是不有效的。

這個項目開發的初衷是省錢,是我一個人做的,基本上不需要啟動資金。此外,項目開發的整個過程是一個自學的過程,這是一個雙贏的結果。因此,綜上所述,本項目的研發優勢大于劣勢,符合我國當前社會主義市場經濟發展的實際情況。

      1. 操作可行性

校園二手書銷售平臺的注冊與登陸頁面設計簡潔容易應用,可以通過最常見的頁面窗口來登陸頁面,并利用過計算機實現登陸功能,因此使用者只要平時利用過計算機都可以實現登陸應用。此操作系統的研發工作環境運用了Java技術,并運用了B/S結構,這些研發工作環境都使得此系統功能更為完整,使整個設計更為個性化,使用者功能也更為簡潔方便。本管理系統具備了易于運行、容易管理、交互性較好的優點,在實際操作上也是非常簡單的。因此,本管理系統也可進行商業設計。

綜上所述,該設備的研發符合技術、工藝和技術要求,因此其研發具有可操作性。

    1. 系統功能需求

用戶用例圖如下所示。

圖3-1 用戶用例圖

管理員用例圖如下所示。

圖3-2 管理員用例圖

表3-1 公告瀏覽用例描述

描述項

說明

用例名稱

公告查詢

用例描述

用戶可以查看公告的詳情

參與者

用戶

前置條件

使用者是普通用戶類型并成功進入該系統

后置條件

瀏覽成功

主事件流

(1)用戶可以瀏覽公告的模塊、公告的內容

(2)用戶點擊公告可以對公告進行詳情閱讀

異常事件流

e1.報500錯誤

e2.數據庫連接異常

表3-1 個人信息管理用例描述

用例名稱

管理和修改個人信息

參與者

用戶

描述

用戶查看、修改個人信息

前置條件

用戶已登錄到系統中

后置條件

事件流

(1)用戶查看個人信息

(2)用戶修改個人信息

補充說明

(a)用戶可修改密碼

(b)用戶可修改個人資料,例如姓名,頭像等

表3-1 評論用例描述

用例名稱

評論

參與者

用戶

描述

用戶發表評論

前置條件

用戶已登錄

后置條件

評論內容不違規

事件流

(1)在評論頁輸入評論數據,提交評論

(2)更新并顯示評論板

補充說明

(a)評論內容不能為空

表3-1 收藏用例描述

用例名稱

收藏

參與者

用戶

描述

用戶將內容加入收藏夾

前置條件

用戶已登錄

后置條件

事件流

(1)在收藏頁加入收藏

(2)更新并顯示收藏夾

補充說明

表3-1 用戶管理用例描述

描述項

說明

用例名稱

用戶操作

用例描述

管理員正確登錄后臺管理的條件下,對用戶進行管理

參與者

管理員

前置條件

管理員登錄成功并跳轉到后臺主界面

后置條件

操作成功

主事件流

管理員跳轉用戶管理頁面,查詢用戶詳情的信息

管理員可以刪除用戶信息

異常事件流

e1.報500錯誤

e2.數據庫連接異常

訂單管理用例描述如下表所示。

表3-1 訂單管理用例描述

描述項

說明

用例名稱

訂單管理信息操作

用例描述

管理員正確登錄后臺管理的條件下,對訂單、技能信息等訂單進行管理

參與者

管理員

前置條件

管理員成功登錄

后置條件

操作成功

主事件流

(1)管理員進入訂單管理頁面,查詢訂單的信息

(2)管理員可以對訂單進行增刪除和編輯操作

(3)管理員新增技能,添加成功跳轉到查詢頁面

異常事件流

e1.報500錯誤

e2.數據庫連接異常

表3-1 公告管理用例描述

用例名稱

公告管理

參與者

管理者

描述

管理者提供新增、修改、刪除、查閱等功能

前置條件

  1. 管理者成功登錄系統
  2. 管理者只能對已存在的公告進行修改和刪除

后置條件

事件流

(1)管理者查看修改公告

(2)管理者添加公告

(3)管理者刪除公告

補充說明

(a)新添加的公告不符合要求時會添加失敗

(b)修改的公告不符合要求時會修改失敗

表3-1 二手商城管理用例描述

描述項

說明

用例名稱

二手商城操作

用例描述

管理員正確登錄后臺管理的條件下,二手商城模塊進行管理

參與者

管理員

前置條件

管理員成功登錄

后置條件

操作成功

主事件流

(1)管理員進入二手商城界面,查詢二手商城商城信息

(2)管理員可以刪除二手商城

異常事件流

e1.報500錯誤

e2.數據庫連接異常

表3-1 評論管理用例描述

描述項

說明

用例名稱

評論操作

用例描述

管理員正確登錄后臺管理的條件下,評論模塊進行管理

參與者

管理員

前置條件

管理員成功登錄

后置條件

操作成功

主事件流

(1)管理員進入評論管理頁面,查詢評論商城的信息

(2)管理員可以從用戶評論中刪除數據

異常事件流

e1.報500錯誤

e2.數據庫連接異常

表3-1 文件上傳用例描述

用例名稱

文件上傳

參與者

用戶

描述

用戶上傳文件至服務器

前置條件

用戶已登錄

后置條件

事件流

在文件上傳頁點擊“上傳”按鈕

補充說明

    1. 系統性能需求

第一,友好界面。校園二手書銷售平臺開發設計,界面的友好性比較重要,滿足這一要求才能體現出人性化設計特征,和用戶應用系統便捷性相適應,動態的人機交互設計,用戶應用系統的時候能感受到操作的便利,提高用戶的體驗良好感受,才能有助于將系統開采設計的作用價值充分發揮出來。

第二,穩定性要求。開發設計的校園二手書銷售平臺,需要保持其穩定,系統應用穩定才能有助于各項管理工作高效率完成,提升系統使用體驗度。系統運行保障因外部異常造成系統崩潰,系統發生問題后數據能及時備份,第一時間恢復數據信息,保障系統良好運行。

第三,可擴展性。校園二手書銷售平臺的開發設計,需要滿足可擴展性的要求,系統的設計需要考慮未來系統業務擴展問題,在測試不斷應用下,功能需求會不斷擴展,通過良好擴展性作用發揮,滿足多樣化的需要。

第四,滿足需求。為能有效加強對大用戶的需求,在開發校園二手書銷售平臺的過程中,要能和實際應用的需求緊密對接,保障系統的實用性。系統開發要能有前瞻性,由于管理系統建設是長期工程,不同階段需要有先導發展藍圖以及行動綱領為指導。預見性地考慮教材訂購信息管理的重要問題。系統的開發要能滿足靈活性應用的需要,將系統的價值充分發揮出來。

  1. 系統設計
    1. 總體目標

校園二手書銷售平臺主要服務于二手書用戶,利用網絡改變傳統校園二手書銷售平臺 模式,簡化校園二手書銷售平臺流程,減輕傳統校園二手書銷售平臺帶來的工作負擔和降低大量資源的消耗。本系統達到的目標主要有以下幾點:

(1)通過簡單的頁面設計和便捷的功能操作,保證系統的簡單性和實用性,形成良好的用戶體驗。

(2)本系統主要針對校園二手書銷售平臺需求進行設計開發,突出較強的針對性。

(3)能夠具有一定的安全機制,保證用戶信息的安全性。

    1. 總體結構設計

層次框圖是一系列由多層矩形框架組成的樹,其頂部為矩形框架,表示整個數據結構,下方的長方形立方體表示獨立的數據,下方的長方形表示該數據的實際數據(不能進行分割)。由于這個架構的精煉,層級方塊圖描述的資料結構也愈加詳盡,這個模型很好地滿足了需求分析的要求。首先對最上層的信息進行分類,然后在圖表中的每個路徑上重復地進行優化,直至完整的數據結構被確定。

這個系統由二個模塊組成,一個是管理員,另一個是用戶,這二個部分看起來是獨立的,實際上卻是連接著數據庫,每個模塊都有自己的權限,唯一不同的,就是訪問的方式不同。在調研資料的基礎上,完成了各個模塊的功能。在對上述功能進行分析的基礎上,本系統提出了二個主要的模塊,每個單元可劃分為若干小單元。

系統的功能結構圖如下圖所示。

圖4-2 系統功能結構圖

    1. 功能模塊設計

1.登錄模塊:

本校園二手書銷售平臺的用戶登錄涉及到三類信息的判斷:第一類是用戶名和密碼是否為空;第二類是驗證碼是否錄入和正確;第三類就是用戶登錄信息、驗證碼和權限是否匹配通過。在該用戶登錄流程對會對用戶名和密碼是否為空進行判斷,以及驗證碼是否正確進行判斷,只有以上的幾類信息中的一種存在問題的情況下都是無法登錄成功的。

2.公告管理模塊:

本校園二手書銷售平臺 中的公告管理,管理方式都是對信息的三種基本操作:一種是完成公告信息的添加,在這里會對公告信息的錄入情況來判斷;一種是對公告信息的修改,另一種就是對公告信息的刪除。其后兩種操作都是要建立在第一種操作而生成的公告列表的基礎上完成的。

3.二手商城管理模塊:

本校園二手書銷售平臺中的二手商城管理,管理方式都是對信息的三種基本操作:一種是完成二手商城信息的添加,在這里會對二手商城信息的錄入情況來判斷;一種是對二手商城信息的修改,另一種就是對二手商城信息的刪除。其后兩種操作都是要建立在第一種操作而生成的二手商城列表的基礎上完成的。

    1. 數據庫設計
      1. 概念設計

借助先進的系統,ER圖使其他用戶可以快速輕松地了解系統的功能以及他們之間的關系。根據校園二手書銷售平臺分析結果,整個校園二手書銷售平臺包括以下各個單元:管理員,公告,用戶,二手商城,地址,訂單,評論等。

系統的主要實體間關系E-R圖如下圖所示。

總體ER圖如下圖所示。

圖4-3 總體ER圖

      1. 邏輯設計

所有系統的應用數據相互區分。一旦在相應的系統中實現,它們將與自己相應的網絡和服務器通信。所以這個系統可以連接這些數據。當我們選擇橋梁截面時,以下將簡要介紹如何建立系統。在單擊上一個按鍵的時候,就會自動在對話框中彈出數據源的名字,之后再單擊下一個按鍵時,就在填寫相對應的身份驗證和登錄信息。按照系統功能設計的特點與職能模塊的分類,校園二手書銷售平臺的總體設計和實施過程一共涉及到了幾個資料表格。

以下就介紹了一些根據各類別主要數據庫表的設計結構以及基本功能建立數據庫表:

表address (收貨地址:)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

address_id

int

10

0

N

Y

收貨地址:

2

name

varchar

32

0

Y

N

姓名:

3

phone

varchar

13

0

Y

N

手機:

4

postcode

varchar

8

0

Y

N

郵編:

5

address

varchar

255

0

N

N

地址:

6

user_id

mediumint

8

0

N

N

用戶ID

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

9

default

bit

1

0

N

N

0

默認判斷

表article (文章:用于內容管理系統的文章)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

article_id

mediumint

8

0

N

Y

文章id:[0,8388607]

2

title

varchar

125

0

N

Y

標題:[0,125]用于文章和html的title標簽中

3

type

varchar

64

0

N

N

0

文章分類:[0,1000]用來搜索指定類型的文章

4

hits

int

10

0

N

N

0

點擊數:[0,1000000000]訪問這篇文章的人次

5

praise_len

int

10

0

N

N

0

點贊數

6

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

7

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

8

source

varchar

255

0

Y

N

來源:[0,255]文章的出處

9

url

varchar

255

0

Y

N

來源地址:[0,255]用于跳轉到發布該文章的網站

10

tag

varchar

255

0

Y

N

標簽:[0,255]用于標注文章所屬相關內容,多個標簽用空格隔開

11

content

longtext

2147483647

0

Y

N

正文:文章的主體內容

12

img

varchar

255

0

Y

N

封面圖

13

description

text

65535

0

Y

N

文章描述

表article_type (文章分類)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

type_id

smallint

5

0

N

Y

分類ID:[0,10000]

2

display

smallint

5

0

N

N

100

顯示順序:[0,1000]決定分類顯示的先后順序

3

name

varchar

16

0

N

N

分類名稱:[2,16]

4

father_id

smallint

5

0

N

N

0

上級分類ID:[0,32767]

5

description

varchar

255

0

Y

N

描述:[0,255]描述該分類的作用

6

icon

text

65535

0

Y

N

分類圖標:

7

url

varchar

255

0

Y

N

外鏈地址:[0,255]如果該分類是跳轉到其他網站的情況下,就在該URL上設置

8

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

9

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

表auth (用戶權限管理)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

auth_id

int

10

0

N

Y

授權ID:

2

user_group

varchar

64

0

Y

N

用戶組:

3

mod_name

varchar

64

0

Y

N

模塊名:

4

table_name

varchar

64

0

Y

N

表名:

5

page_title

varchar

255

0

Y

N

頁面標題:

6

path

varchar

255

0

Y

N

路由路徑:

7

position

varchar

32

0

Y

N

位置:

8

mode

varchar

32

0

N

N

_blank

跳轉方式:

9

add

tinyint

3

0

N

N

1

是否可增加:

10

del

tinyint

3

0

N

N

1

是否可刪除:

11

set

tinyint

3

0

N

N

1

是否可修改:

12

get

tinyint

3

0

N

N

1

是否可查看:

13

field_add

text

65535

0

Y

N

添加字段:

14

field_set

text

65535

0

Y

N

修改字段:

15

field_get

text

65535

0

Y

N

查詢字段:

16

table_nav_name

varchar

500

0

Y

N

跨表導航名稱:

17

table_nav

varchar

500

0

Y

N

跨表導航:

18

option

text

65535

0

Y

N

配置:

19

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

20

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

表cart (購物車)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

cart_id

int

10

0

N

Y

購物車ID:

2

title

varchar

64

0

Y

N

標題:

3

img

varchar

255

0

N

N

0

圖片:

4

user_id

int

10

0

N

N

0

用戶ID:

5

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

6

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

7

state

int

10

0

N

N

0

狀態:使用中,已失效

8

price

double

9

2

N

N

0.00

單價:

9

price_ago

double

9

2

N

N

0.00

原價:

10

price_count

double

11

2

N

N

0.00

總價:

11

num

int

10

0

N

N

1

數量:

12

goods_id

mediumint

8

0

N

N

商品id:[0,8388607]

13

type

varchar

64

0

N

N

未分類

商品分類:

14

description

varchar

255

0

Y

N

描述:[0,255]用于產品規格描述

表collect (收藏)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

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

comment_id

int

10

0

N

Y

評論ID:

2

user_id

int

10

0

N

N

0

評論人ID:

3

reply_to_id

int

10

0

N

N

0

回復評論ID:空為0

4

content

longtext

2147483647

0

Y

N

內容:

5

nickname

varchar

255

0

Y

N

昵稱:

6

avatar

varchar

255

0

Y

N

頭像地址:[0,255]

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

9

source_table

varchar

255

0

Y

N

來源表:

10

source_field

varchar

255

0

Y

N

來源字段:

11

source_id

int

10

0

N

N

0

來源ID:

表goods (商品信息)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

goods_id

mediumint

8

0

N

Y

產品id:[0,8388607]

2

title

varchar

125

0

Y

N

標題:[0,125]用于產品和html的<title>標簽中

3

img

text

65535

0

Y

N

封面圖:用于顯示于產品列表頁

4

description

varchar

255

0

Y

N

描述:[0,255]用于產品規格描述

5

price_ago

double

8

2

N

N

0.00

原價:[1]

6

price

double

8

2

N

N

0.00

賣價:[1]

7

sales

int

10

0

N

N

0

銷量:[0,1000000000]

8

inventory

int

10

0

N

N

0

商品庫存

9

type

varchar

64

0

N

N

商品分類:

10

hits

int

10

0

N

N

0

點擊量:[0,1000000000]訪問這篇產品的人次

11

content

longtext

2147483647

0

Y

N

正文:產品的主體內容

12

img_1

text

65535

0

Y

N

主圖1:

13

img_2

text

65535

0

Y

N

主圖2:

14

img_3

text

65535

0

Y

N

主圖3:

15

img_4

text

65535

0

Y

N

主圖4:

16

img_5

text

65535

0

Y

N

主圖5:

17

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

18

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

19

customize_field

text

65535

0

Y

N

自定義字段

20

source_table

varchar

255

0

Y

N

來源表:

21

source_field

varchar

255

0

Y

N

來源字段:

22

source_id

int

10

0

N

N

0

來源ID:

23

user_id

int

10

0

Y

N

0

添加人

表goods_type (商品類型)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

type_id

int

10

0

N

Y

商品分類ID:

2

father_id

smallint

5

0

N

N

0

上級分類ID:[0,32767]

3

name

varchar

255

0

Y

N

商品名稱:

4

desc

varchar

255

0

Y

N

描述:

5

icon

varchar

255

0

Y

N

圖標:

6

source_table

varchar

255

0

Y

N

來源表:

7

source_field

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

更新時間:

表hits (用戶點擊)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

hits_id

int

10

0

N

Y

點贊ID:

2

user_id

int

10

0

N

N

0

點贊人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

5

source_table

varchar

255

0

Y

N

來源表:

6

source_field

varchar

255

0

Y

N

來源字段:

7

source_id

int

10

0

N

N

0

來源ID:

表notice (公告)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

notice_id

mediumint

8

0

N

Y

公告id:

2

title

varchar

125

0

N

N

標題:

3

content

longtext

2147483647

0

Y

N

正文:

4

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

5

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

表order (訂單)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

order_id

int

10

0

N

Y

訂單ID:

2

order_number

varchar

64

0

Y

N

訂單號:

3

goods_id

mediumint

8

0

N

N

商品id:[0,8388607]

4

title

varchar

32

0

Y

N

商品標題:

5

img

varchar

255

0

Y

N

商品圖片:

6

price

double

10

2

N

N

0.00

價格:

7

price_ago

double

10

2

N

N

0.00

原價:

8

num

int

10

0

N

N

1

數量:

9

price_count

double

8

2

N

N

0.00

總價:

10

norms

varchar

255

0

Y

N

規格:

11

type

varchar

64

0

N

N

未分類

商品分類:

12

contact_name

varchar

32

0

Y

N

聯系人姓名:

13

contact_email

varchar

125

0

Y

N

聯系人郵箱:

14

contact_phone

varchar

11

0

Y

N

聯系人手機:

15

contact_address

varchar

255

0

Y

N

收件地址:

16

postal_code

varchar

9

0

Y

N

郵政編碼:

17

user_id

int

10

0

N

N

0

買家ID:

18

merchant_id

mediumint

8

0

N

N

0

商家ID:

19

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

20

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

21

description

varchar

255

0

Y

N

描述:[0,255]用于產品規格描述

22

state

varchar

16

0

N

N

待付款

訂單狀態:待付款,待發貨,待簽收,已簽收,待退款,已退款,已拒絕,已完成

表praise (點贊)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

praise_id

int

10

0

N

Y

點贊ID:

2

user_id

int

10

0

N

N

0

點贊人:

3

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

4

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

5

source_table

varchar

255

0

Y

N

來源表:

6

source_field

varchar

255

0

Y

N

來源字段:

7

source_id

int

10

0

N

N

0

來源ID:

8

status

bit

1

0

N

N

1

點贊狀態:1為點贊,0已取消

表registered_users (注冊用戶)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

registered_users_id

int

10

0

N

Y

注冊用戶ID

2

gender

varchar

64

0

Y

N

性別

3

age

varchar

64

0

Y

N

年齡

4

examine_state

varchar

16

0

N

N

已通過

審核狀態

5

recommend

int

10

0

N

N

0

智能推薦

6

user_id

int

10

0

N

N

0

用戶ID

7

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

創建時間

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間

表second_hand_shopping_mall (二手商城)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

second_hand_shopping_mall_id

int

10

0

N

Y

二手商城ID

2

new_and_old_degree

varchar

64

0

Y

N

新舊程度

3

seller

int

10

0

Y

N

0

賣家

4

recommend

int

10

0

N

N

0

智能推薦

5

cart_title

varchar

125

0

Y

N

標題:[0,125]用于產品html的標簽中

6

cart_img

text

65535

0

Y

N

封面圖:用于顯示于產品列表頁

7

cart_description

varchar

255

0

Y

N

描述:[0,255]用于產品規格描述

8

cart_price_ago

double

8

2

N

N

0.00

原價:[1]

9

cart_price

double

8

2

N

N

0.00

賣價:[1]

10

cart_inventory

int

10

0

N

N

0

商品庫存

11

cart_type

varchar

64

0

N

N

未分類

商品分類:

12

cart_content

longtext

2147483647

0

Y

N

正文:產品的主體內容

13

cart_img_1

text

65535

0

Y

N

主圖1:

14

cart_img_2

text

65535

0

Y

N

主圖2:

15

cart_img_3

text

65535

0

Y

N

主圖3:

16

cart_img_4

text

65535

0

Y

N

主圖4:

17

cart_img_5

text

65535

0

Y

N

主圖5:

18

create_time

datetime

19

0

N

N

CURRENT_TIMESTAMP

創建時間

19

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間

表slides (輪播圖)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

slides_id

int

10

0

N

Y

輪播圖ID:

2

title

varchar

64

0

Y

N

標題:

3

content

varchar

255

0

Y

N

內容:

4

url

varchar

255

0

Y

N

鏈接:

5

img

varchar

255

0

Y

N

輪播圖:

6

hits

int

10

0

N

N

0

點擊量:

7

create_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

創建時間:

8

update_time

timestamp

19

0

N

N

CURRENT_TIMESTAMP

更新時間:

表upload (文件上傳)

編號

名稱

數據類型

長度

小數位

允許空值

主鍵

默認值

說明

1

upload_id

int

10

0

N

Y

上傳ID

2

name

varchar

64

0

Y

N

文件名

3

path

varchar

255

0

Y

N

訪問路徑

4

file

varchar

255

0

Y

N

文件路徑

5

display

varchar

255

0

Y

N

顯示順序

6

father_id

int

10

0

Y

N

0

父級ID

7

dir

varchar

255

0

Y

N

文件夾

8

type

varchar

32

0

Y

N

文件類型

  1. 系統實現
    1. 登錄模塊的實現

用戶登錄的驗證將不再局限于登錄信息和權限的匹配驗證,而是另外增加了一個驗證碼,只有界面上所有的編輯框數據都準確的情況下才能實現登錄成功。管理員的登錄和前臺用戶登錄是一樣的過程,其主要就是利用權限字段來完成對用戶或管理員的角色識別。

用戶登錄流程圖如下所示。

圖5-1 用戶登錄流程圖

登錄界面如下圖所示。

圖5-1 登錄界面

登錄系統主要代碼如下。

/**

?????* 登錄

?????* @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, "賬號或密碼不正確");

????????}

}

    1. 用戶模塊的實現
      1. 注冊模塊的實現

系統的用戶通過自行注冊生成,在系統首頁點擊用戶注冊菜單,系統跳轉到對應的注冊頁面。點擊重置按鈕,清空所填數據,點擊注冊按鈕完成注冊。

用戶注冊流程圖如下所示。

圖5-1 用戶注冊流程圖

用戶注冊界面如下圖所示。

圖5-1 用戶注冊界面

用戶注冊系統主要代碼如下。

/**

?????* 注冊

?????* @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;

}

      1. 收貨地址模塊的實現

當用戶點擊“收貨地址”右后,就回去顯示出目前現有的地址,也可以添加新的地址。

收貨地址界面如圖所示。

圖5-1 收貨地址界面

      1. 商品詳情模塊的實現

當訪客點擊了任意商品后將會進入該款商品的詳情界面,可以了解到該商品的圖片信息、商品信息、價錢信息等,同時可以對該商品進行加購+立即購買+收藏+點贊+評論。商品信息界面如圖所示。

圖5-1 商品信息界面

      1. 我的訂單模塊的實現

當用戶點擊“我的訂單”鏈接后就進入自己購買的訂單的界面展示。

我的訂單界面如下圖所示。

圖5-1 我的訂單界面

    1. 后臺模塊的實現
      1. 用戶管理模塊的實現

用戶通過注冊了方可獲得登錄使用權限,此時選擇注冊用戶選項,系統就會自動轉到用戶注冊工作面,在注冊該部分信息時系統會自動調用add函數,然后在給定的文本框中填寫有關該用戶的基礎信息后選擇確認即可完成注冊。檢索用戶信息,在新增用戶信息以后,在檢索工具欄中填寫對應的用戶信息,系統就會將該用戶有關的所有信息展示出來。

用戶管理流程圖如下所示。

圖5-1 用戶管理流程圖

用戶管理界面如下圖所示。

圖5-1 用戶管理界面

用戶管理代碼如下。

@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 "";

????}

      1. 密碼修改模塊的實現

用戶使用該校園二手書銷售平臺 注冊完成后,用戶對登錄密碼有修改需求時,系統也可以提供用戶修改密碼權限。系統中所有的操作者能夠變更自己的密碼信息,執行該功能首先必須要登入系統,然后選擇密碼變更選項以后在給定的文本框中填寫初始密碼和新密碼來完成修改密碼的操作。在填寫的時候,假如兩次密碼填寫存在差異,那么此次密碼變更操作失敗,下面的圖片展示的就是該板塊對應的工作面。

密碼修改流程圖如下所示。

圖5-1 密碼修改流程圖

密碼修改界面如圖所示。

圖5-1 修改密碼界面

修改密碼代碼如下所示。

?/**

?????* 修改密碼

?????* @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,"密碼修改失敗!");

????}

      1. 公告管理模塊的實現

在主頁左側菜單欄中點擊“公告管理”按鈕,再從二級目錄中點擊“新增公告”按鈕,進入到新增公告界面。在此處公告可以添加公告的名稱、價格、預約方式。

在主頁左側菜單欄中點擊“公告管理”按鈕,再從二級目錄中點擊“查詢公告”按鈕,進入到查詢公告界面。在此處公告可以查詢當前所有公告記錄。

公告展示界面如下圖所示。

圖5-1 公告展示界面

公告管理界面如下圖所示。

圖5-1 公告管理界面

公告管理主要代碼如下。

??@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();

????}

      1. 二手商城管理模塊的實現

管理員執行二手商城管理,并可以操作相關內容,例如添加,查看,編輯和刪除。通過單擊“添加二手商城”,可以通過二手商城添加界面添加詳細信息。單擊查看字段級別鏈接以查看有關所選字段級別的信息。然后單擊“提交”跳轉重返到添加頁面。添加成功后的信息會載入到二手商城查詢列表中,管理員可進行編輯以及修改。

二手商城添加流程圖如下所示。

圖5-1 二手商城管理流程圖

二手商城管理如下圖所示。

圖5-1 二手商城管理界面

      1. 訂單列表管理模塊的實現

管理員執行訂單列表管理,并可以操作相關內容,例如添加,查看,編輯和刪除。通過單擊“添加訂單列表”,可以通過訂單列表添加界面添加詳細信息并添加訂單列表注釋。單擊查看字段級別鏈接以查看有關所選字段級別的信息。然后單擊“提交”跳轉重返到添加頁面。添加成功后的信息會載入到訂單列表查詢列表中,管理員可進行編輯以及修改。

訂單列表管理流程如下圖所示。

圖5-1 訂單列表管理流程

訂單列表管理界面如下圖所示。

圖5-1 訂單列表管理界面

訂單列表管理代碼如下所示。

@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 "";

????}

  1. 系統測試
    1. 測試目的

在這個產品被投入使用前,首先需要進行試用,這是重要的環節。考慮到某個部分的開發沒有缺陷情況下,把各種模塊拼接,也有一定概率就存在矛盾。這就好比每個人都很獨特,但聚在一起就顯得雜亂無章,需要保證有默契的配合。對于測試,要看它的各項內容是否契合的原則。若與最初定下的標準有一定程度上的出入,那么就需要做出一些調整,讓最終的大方向朝著目標前進。

測試是為了發現在開發的程序中所存在的問題,測試這一工作是非常艱巨的,而又是非常困難的,這一部分在程序的設計中占有很大比例,可以說一個程序的開發工作量要是占據了百分至六十,那么剩下的百分之四十必然是測試這一部分,甚至更高。

    1. 測試用例
      1. 公告測試

公告測試用例如下表所示。

表6-3 公告測試用例

測試用例編號

YL_03

測試用例名稱

系統使用者進行在線交流

測試用例描述

使用者輸入標題、內容等信息

系統入口

瀏覽器

步驟

預期結果

實際結果

輸入完整的論壇標題和內容

提示“交流成功”,并進入系統

預期結果

不輸入的論壇標題和內容

提示“請輸入完整”

預期結果

      1. 創建數據測試?

在系統中,創建功能也是基礎功能之一,因此創建功能的測試很有代表性。在此章節主要列舉在創建時各種情況下系統結果的測試。由于系統涉及創建功能操作過多,因此將多處統稱創建功能。

創建數據用例如下表所示。

表6-5 創建數據測試用例

測試用例編號

YL_05

測試用例名稱

系統使用者進行創建數據

測試用例描述

使用者輸入要創建的數據

系統入口

瀏覽器

步驟

預期結果

實際結果

輸入完整并且格式正確的數據

提示“創建成功”,并顯示所有數據

預期結果

核心位置數據但非必要位置不輸入數據

提示“創建成功”,并顯示所有數據

預期結果

核心數據位置不輸入數據

提示“創建失敗”

預期結果

      1. 修改數據測試?

在系統中,修改功能是系統主要實現功能,因此修改功能的測試很有代表性。在此章節主要列舉在修改時各種情況下系統結果的測試。由于系統涉及修改功能操作過多,因此將多處數據表記錄修改和狀態修改統稱修改功能。

修改數據用例如下表所示。

表6-6 修改數據測試用例

測試用例編號

YL_06

測試用例名稱

系統使用者進行修改數據

測試用例描述

使用者對可修改的數據項進行修改

系統入口

瀏覽器

步驟

預期結果

實際結果

將現有數據修改成正確的數據

提示“修改成功”,并顯示所有數據

預期結果

將現有數據修改成錯誤的數據

提示“修改失敗”

預期結果

      1. 查詢數據測試?

在系統中,查詢功能是使用系統使用最多也是最基礎的功能,因此查詢功能的測試很有代表性。在此章節主要列舉在查詢時各種情況下系統結果的測試。

查詢數據用例如下表所示。

表6-7 查詢數據測試用例

測試用例編號

YL_05

測試用例名稱

系統使用者進行查詢數據

測試用例描述

全部查詢以及輸入關鍵詞查詢

系統入口

瀏覽器

步驟

預期結果

實際結果

界面自動查詢全部

顯示對應所有記錄

預期結果

輸入已存在且能匹配成功的關鍵字

顯示所查詢到的數據

預期結果

輸入不存在的關鍵字

顯示數據界面為空

預期結果

    1. 測試結果

在本次測試的過程主要針對所有功能下的添加操作,修改操作和刪除操作,并以真實數據一一進行相關功能項目的輸入,最終能夠保證每個項目涉及的功能都是能夠正常運行,因此能夠保證本次設計的,已實現的功能能夠正常運行并且相關數據庫的信息也同樣保證正確。

結 ?論

本次校園二手書銷售平臺利用了Web應用同現實校園二手書銷售平臺工作進行相結合,在系統功能開始編碼之前,作者花費了大量時間在圖書館內進行資料文獻的收集和總結,通過大量文獻的分析,能夠發現,校園二手書銷售平臺的方式在二手書商城中扮演的位置是越來越重要,而使用的方式也是越來越多元化,也正是因為這個原因,作者深深的希望能夠開發出一種專門針對用戶的校園二手書銷售平臺,以滿足用戶的需求。

在本次校園二手書銷售平臺中,利用了目前市場上普遍使用的Java技術,以及數據庫管理功能MySQL,和目前比較流行的springboot框架,最后配合使用到了VUE頁面布局技術進行系統界面的布置,以現實生活的校園二手書銷售平臺過程為標準,設計實現了公告查詢、資訊瀏覽、地址、訂單、購物車、點贊收藏、評論等功能,并維護好后臺的信息和整體系統的穩定性。

但是由于作者受到了技術水平的限制,在有限的時間,只能夠將系統功能模擬時的功能實現,在許多功能方面仍然存在很大的弊端,而這些弊端需要不斷的測試,不斷的總結,不斷的改進。例如本次系統設計中,在數據儲存的方面并不夠全面,很容易出現信息泄露的風險;例如針對用戶權限的設置同樣不夠全面完整,沒有考慮權限在實際情況的運用是否能夠完美執行。而在這之后的日子里,作者將會繼續學習Java技術和相關的信息技術,對系統功能進行更加完整的,詳細的分析,將系統功能一一進行完善,幫助使用者完成相應的操作。

參考文獻

[1]吳育華. 一種基于JAVA語言系統開發的高性能計算機[P]. 安徽省:CN115686129A,2023-02-03.

[2]鄭智文,張宜梅. 一種基于SpringBoot服務框架的用戶標簽處理系統及方法[P]. 山東省:CN115689513A,2023-02-03.

[3]李晉華,葛毅,李世川.嵌入Java Web服務的桌面應用開發技術研究[J].電腦編程技巧與維護,2022(11):51-53.DOI:10.16184/j.cnki.comprg.2022.11.003.

[4]沈志元,張文健.基于Java技術的醫院管理系統的設計與實現[J].電腦知識與技術,2022,18(32):38-40+54.DOI:10.14004/j.cnki.ckt.2022.1994.

[5]劉玥垚,曾姿琪,彭佳慧,吳思懿,樊蓉. 淺析大學校園二手圖書資源循環使用的網絡平臺建設的必要[C]//.2022電腦校園網絡論壇論文集.,2022:155-157.DOI:10.26914/c.cnkihy.2022.025230.

[6]陳凌茜,張青森,吳倩. 一種可移動式校園二手書智能一體化收售管理系統[P]. 湖北省:CN216435046U,2022-05-03.

[7]Gordon V Scott,Clevenger John L. Computer Graphics Programming in OpenGL with Java[M].Mercury Learning and Information:2021-09-02.

[8]趙壯. 推薦算法在校園二手交易平臺中的研究與應用[D].武漢輕工大學,2021.DOI:10.27776/d.cnki.gwhgy.2021.000161.

[9]劉欣,李亮亮,牛聰. 基于Vue和SpringBoot框架的流域監管平臺的研究和應用[C]//.第十一屆防汛抗旱信息化論壇論文集.,2021:118-122.DOI:10.26914/c.cnkihy.2021.024864.

[10]Siyi Liu. Explore Java Language and Android Mobile Software Development[J]. International Journal of Frontiers in Engineering Technology,2021,3.0(2.0).

[11]吳瀾濤, 基于Java的運行調試安裝管理系統V1.0. 湖北省,武漢東湖學院,2021-03-01.

[12]程雙,周春暉,曲馨藝,施芳瑛.淺談校園二手書籍循環利用的可持續發展[J].科技與創新,2021(01):145-146+148.DOI:10.15913/j.cnki.kjycx.2021.01.057.

[13]施珺,紀兆輝,趙雪峰. Java語言實驗與課程設計指導[M].南京大學出版社:, 202101.304.

[14]何為,遲文恒. Java服務端研發知識圖譜[M].機械工業出版社:信息科學與技術叢書, 201812.430.

[15]GB/T 34944-2017, Java語言源代碼漏洞測試規范[S].

[16]Wu Hongyan. Construction of Online Teaching System Based on SpringBoot Framework for Normal University Students’ Informatization Teaching Ability Training[P]. 2022 2nd International Conference on Education, Information Management and Service Science (EIMSS 2022),2022.

致 ?謝

在此論文完成之際,感謝我的指導老師。在指導老師的網頁設計課上,當時我學到了很多東西,這對于我實習過程中也打了一定的基礎,而且指導老師對于我的設計也提出許多建議,并予以悉心的指導,對于一些細小的問題都耐心的指導我去完善,授予我寫論文的心得,時常的鼓勵我,另外感謝教導我完善此項目的前端同學,對于這個項目,我是邊學習邊實現完成的,有許多東西開始并不是很明白,但前端開發的同學非常耐心的引導我去將這個項目完成,在系統的后端開發中,所用到的后臺開發技術也時常會給我講解,助于我更好的將論文完成,在此對幫助到我的同學和一直予以教導的指導老師致以衷心的感謝,祝事業有成。

免費領源碼,麻煩一鍵三連,私信博主。謝謝。

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

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

相關文章

工業科學級天文相機:跨界融合的高精密成像解決方案

隨著國內科技的快速發展&#xff0c;工業相機領域正悄然興起一場"天文級"的技術革命。這類兼具工業設備可靠性與天文觀測精度的特殊相機&#xff0c;正在半導體制造、天文觀測、空間探測等領域開辟新的應用疆域。其核心技術突破不僅體現在傳感器性能的提升&#xff0…

論文閱讀筆記——Multi-Token Attention

MTA 論文 在 Transformer 中計算注意力權重時&#xff0c;僅依賴單個 Q 和 K 的相似度&#xff0c;無法有效捕捉多標記組合信息。&#xff08;對于 A、B 兩個詞&#xff0c;單標記注意力需要分別計算兩個詞的注意力分數&#xff0c;再通過后處理定位共同出現的位置或通過多層隱…

301.找出3位偶數

2094. 找出 3 位偶數 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<Integer> resnew ArrayList<>();List<Integer> linew ArrayList<>();public int[] findEvenNumbers(int[] digits) {Arrays.sort(digits);boolean[] numsnew boolea…

【KWDB 創作者計劃】第二卷:開發者實戰篇

?KWDB技術白皮書卷二&#xff1a;開發者實戰篇 ?1. 自然語言到量子查詢的編譯系統 1.1 NL2QSQL翻譯引擎架構 運行時流程圖解&#xff1a; ┌──────────────────────┐ ┌───────────────────┐ ┌─────────────…

前端工程化之新晉打包工具

新晉打包工具 新晉打包工具前端模塊工具的發展歷程分類初版構建工具grunt使用場景 gulp采用管道機制任務化配置與api簡潔 現代打包構建工具基石--webpack基于webpack改進的構建工具rollup 推薦舉例說明package.jsonrollup.config.mjsmy-extract-css-rollup-plugin.mjssrc/index…

ai軟件UI自動化

在AI與UI自動化結合的場景中,通常涉及計算機視覺(CV)、自然語言處理(NLP)和機器學習(ML)等技術。以下是實現AI驅動UI自動化的關鍵方向、工具和步驟: ?一、核心應用場景? ?元素定位增強? ?問題?:傳統工具依賴XPath/CSS選擇器,易因UI變化失效。?AI方案?:CV識別…

關于 C++ 中 cin 對象和 EOF 的詳細解釋

【DeepSeek提問】 給解釋一下下面這段話&#xff08;C編程&#xff09; cin是 iostream 類的一個對象實例&#xff0c;如果輸入正常&#xff0c; cin 將返回本身。 舉個例子&#xff1a;cin>x>>y, 如果 cin>>x 讀入正常&#xff0c;那么將返回cin, 相當于后面繼…

Vue 3 和 Vue 2 的區別及優點

Vue.js 是一個流行的 JavaScript 框架&#xff0c;廣泛用于構建用戶界面和單頁應用。自 Vue 3 發布以來&#xff0c;很多開發者開始探索 Vue 3 相較于 Vue 2 的新特性和優勢。Vue 3 引入了許多改進&#xff0c;優化了性能、增強了功能、提升了開發體驗。本文將詳細介紹 Vue 2 和…

【特權FPGA】之UART串口

0.簡介 通用異步收發器(Universal Asynchronous Receiver&#xff0f;Transmitter&#xff0c;UART)可以和各種標準串行接口&#xff0c;如RS 232和RS 485等進行全雙工異步通信&#xff0c;具有傳輸距離遠、成本低、可靠性高等優點。一般UART由專用芯片如8250&#xff0c;1645…

Vue3中watch監視reactive對象方法詳解

在Vue3中&#xff0c;使用watch監視reactive對象時&#xff0c;需根據監視的目標選擇合適的方法。以下是詳細的步驟和說明&#xff1a; 1. 監視整個reactive對象 自動深度監視&#xff1a;直接監視reactive對象時&#xff0c;Vue3會默認啟用深度監視&#xff0c;無需設置deep:…

如何制定性能調優策略

目錄 性能測試攻略 微基準性能測試 宏基準性能測試 熱身問題 多 JVM 情況下的影響 合理分析結果&#xff0c;制定調優策略 推薦閱讀 性能測試攻略 性能測試是提前發現性能瓶頸&#xff0c;保障系統性能穩定的必要措施。下面我先給你介紹兩種常用 的測試方法&#xff0c;幫…

HarmonyOS-ArkUI V2裝飾器@Local裝飾器:組件內部狀態

@Local裝飾器的作用 @Local裝飾器是用來裝飾組件內的狀態的。而且它修飾的變量可以成為數據源。Local裝飾器,作用跟名字差不多,重點突出了“本地”的特性,也就是使用的范圍僅僅限制在組件內部。且它在初始化的時候必須是在本地進行初始化的,不能在外部組件,同時也禁止了外…

Linux線程屬性與多線程開發:API詳解與實戰代碼解析

Linux 線程的屬性 線程池 多線程的創建 線程的屬性 引入 我們設想一個場景&#xff0c;使用pthread_detach時&#xff0c;發現線程早就已經結束了&#xff0c;這時候pthread_detach還能正常發揮清理線程的 獨有空間 的作用嗎&#xff1f; 答案是可以的&#xff0c;但是這難…

測試第二課-------測試分類

作者前言 &#x1f382; ??????&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ?&#x1f382; 作者介紹&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

MySQL安裝實戰分享

一、在 Windows 上安裝 MySQL 1. 下載 MySQL 安裝包 訪問 MySQL 官方下載頁面。選擇適合你操作系統的版本。一般推薦下載 MySQL Installer。 2. 運行安裝程序 雙擊下載的安裝文件&#xff08;例如 mysql-installer-community-<version>.msi&#xff09;。如果出現安全…

數據庫預熱

介紹 Database Warm-up &#x1f9e0; 一句話理解 數據庫是在應用啟動階段&#xff0c;提前建立數據庫連接 或 執行輕量 SQL 操作&#xff0c;從而 加快首個請求的響應速度 的一種優化手段 &#x1f3af; 為什么需要數據庫預熱&#xff1f; 當 FastAPI 或其他 Web 服務剛啟…

SearXNG

SearXNG 什么是 SearXNG &#xff1f;說白了&#xff0c;其實就是一個免費開源的搜索引擎。那為什么要本地安裝它呢&#xff1f; 看它官網的解釋(翻譯)&#xff0c;當然&#xff0c;其中官方也有一篇文檔解釋了為什么需要部署使用私有示例&#xff1a;為什么使用私有實例&…

js 顏色轉換分析

一、十六進制轉RGB function hexToRgba(hex) {// 移除 # 字符hex hex.replace(#, );// 處理簡寫形式如 #fffif (hex.length 3) {hex hex[0] hex[0] hex[1] hex[1] hex[2] hex[2];}// 轉換為十進制const r parseInt(hex.substring(0, 2), 16); // 截圖前兩位&#xff0…

智能資源管理機制-重傳機制

一、發送端資源管理的核心機制 1. 滑動窗口&#xff08;Sliding Window&#xff09; 這是TCP協議的核心優化設計&#xff1a; 窗口動態滑動&#xff1a;發送端不需要保留所有已發送的分組&#xff0c;只需維護一個"發送窗口"窗口大小&#xff1a;由接收方通告的接…

基于SSM+Layui畢業設計選題系統源碼

項目介紹 基于SSM+Layui畢業設計選題系統源碼,可以作為課程設計項目參考,該系統分為三個角色: 管理員:用戶管理(對學生和老師的信息進行維護),統計分析(對老師課題情況以及學生選題情況信息進行維護),修改密碼 老師:個人信息維護,畢業設計題目管理,報名學生管理…