摘要
隨著我國經(jīng)濟迅速發(fā)展,人們對手機的需求越來越大,各種手機軟件也都在被廣泛應用,但是對于手機進行數(shù)據(jù)信息管理,對于手機的各種軟件也是備受用戶的喜愛,詩詞打卡微信小程序被用戶普遍使用,為方便用戶能夠可以隨時進行在線查看詩詞打卡的數(shù)據(jù)信息管理,特開發(fā)了詩詞打卡微信小程序。
詩詞打卡微信小程序的設計主要是對系統(tǒng)所要實現(xiàn)的功能進行詳細考慮,確定所要實現(xiàn)的功能后進行界面的設計,在這中間還要考慮如何可以更好的將功能及頁面進行很好的結(jié)合,方便用戶可以很容易明了的找到自己所需要的信息,還有系統(tǒng)平臺后期的可操作性,通過對信息內(nèi)容的詳細了解進行技術的開發(fā)。
詩詞打卡微信小程序的開發(fā)利用現(xiàn)有的成熟技術參考,以源代碼為模板,分析功能調(diào)整與詩詞打卡微信小程序管理的實際需求相結(jié)合,討論了基于詩詞打卡微信小程序管理的使用。
關鍵詞:SSM;MySQL;詩詞打卡微信小程序;Java
Poetry Check in WeChat Mini Program
Abstract
With the rapid development of China's economy, people's demand for mobile phones is increasing, and various mobile software is also widely used. However, for data information management of mobile phones, various software for mobile phones is also highly favored by users. The Poetry Check in WeChat mini program is widely used by users. In order to facilitate users to view the data information management of poetry check in online at any time, a Poetry Check in WeChat mini program has been developed.
The design of the poetry check-in WeChat mini program mainly involves a detailed consideration of the functions to be implemented by the system. After determining the functions to be implemented, the interface design should be carried out. In the process, it is also necessary to consider how to better integrate the functions and pages, making it easy for users to find the information they need and the operability of the system platform in the later stage, Develop technology through a detailed understanding of information content.
The development of the Poetry Check in WeChat mini program utilizes existing mature technology references, uses source code as a template, analyzes functional adjustments, and combines them with the actual needs of the Poetry Check in WeChat mini program management. The use of the Poetry Check in WeChat mini program management is discussed.
Keywords:?SSM; MySQL; Poetry check-in WeChat mini program; Java
目 ?錄
摘要
Abstract
目??錄
1 緒論
1.1 選題背景
1.2研究現(xiàn)狀
1.3ssm框架介紹 2
2 詩詞打卡微信小程序需求分析
2.1 可行性分析
2.2功能需求分析
2.2.1數(shù)據(jù)增加流程
2.2.2數(shù)據(jù)修改流程
2.2.3數(shù)據(jù)刪除流程
2.3功能需求分析
2.4非功能性分析
3 詩詞打卡微信小程序總體設計
3.1 系統(tǒng)功能模塊設計
3.2系統(tǒng)E-R圖設計
3.3 數(shù)據(jù)庫設計
4 詩詞打卡微信小程序詳細設計與實現(xiàn)
4.1系統(tǒng)前臺部分功能模塊的實現(xiàn)
4.1.1 前臺首頁界面
4.1.2 登錄界面
4.1.3注冊界面
4.1.4詩詞圈子詳情界面
4.1.5打卡活動詳情界面
4.1.6打卡記錄界面
4.2系統(tǒng)后臺部分功能模塊的實現(xiàn)
4.2.1登錄界面
4.2.2用戶管理界面
4.2.3公告欄管理界面
4.2.4詩詞圈子管理界面
4.2.5打卡活動管理界面 30
4.2.6活動排行管理界面 30
5系統(tǒng)測試
5.1測試目的
5.2 系統(tǒng)測試用例
5.3 系統(tǒng)測試結(jié)果
結(jié)論
致??謝
參考文獻
1 緒論
1.1選題背景
?隨著網(wǎng)絡時代的到來,互聯(lián)網(wǎng)的優(yōu)勢和普及時刻影響并改變著人們的生活方式。在信息技術迅速發(fā)展的今天,計算機技術已經(jīng)遍及全球,使社會發(fā)生了巨大的變革。
為了不受時間和地點的限制,智能手機用戶可以通過移動網(wǎng)絡訪問網(wǎng)站和處理各種業(yè)務和互聯(lián)網(wǎng),這是一個有效的將應用系統(tǒng)的功能擴展到手機終端的方法?,F(xiàn)今各種智能手機層出不窮,各類基于手機平臺的軟件應運而生,其中,在眾多交流軟件中,微信備受人們青睞。近年來,微信發(fā)展規(guī)模越來越大,越來越多的人開始使用微信,目前隨著智能手機系統(tǒng)的普及,人人手機上基本都有了微信。
所以,微信推出小程序廣告支持公眾號關注,而這就意味著小程序跟公眾號之間的通道被徹底打通了。本論文詩詞打卡微信小程序主要牽扯到的程序,數(shù)據(jù)庫與計算機技術等。覆蓋知識面大,可以大大的提高系統(tǒng)人員工作效率。
1.2研究現(xiàn)狀
隨著社會的發(fā)展和科學技術的進步,互聯(lián)網(wǎng)技術越來越受歡迎。網(wǎng)絡傳播的生活方式逐漸受到廣大人民群眾的喜愛。越來越多的互聯(lián)網(wǎng)愛好者開始在互聯(lián)網(wǎng)上滿足他們的基本需求,同時逐漸進入各個用戶的生活起居?;ヂ?lián)網(wǎng)具有許多優(yōu)點,例如便利性,速度,高效率和低成本。因此,類似于詩詞打卡,滿足用戶工作繁忙的需求,不僅是方便用戶隨時查看信息的途徑,而且還能提高管理效率。
本文首先以基于微信小程序的詩詞打卡過程的基本問題作為研究對象。在開發(fā)系統(tǒng)之前,我們對現(xiàn)有狀況進行了詳細的調(diào)查和分析。最后,我們利用計算機技術開發(fā)了一套完整合適的基于微信小程序的詩詞打卡。該系統(tǒng)的實現(xiàn)主要優(yōu)勢是:該系統(tǒng)主要采用計算機技術開發(fā),它方便快捷;系統(tǒng)可以通過管理員界面查看用戶的所有信息管理。
基于微信小程序的詩詞打卡軟件是一款方便、快捷、實用的信息服務查詢軟件。隨著智能網(wǎng)絡在全球市場的不斷普及以及各種智能平臺的使用,系統(tǒng)的開發(fā)與人們的日常需求相關,作為中國主流智能的技術開發(fā)系統(tǒng),自然需要這樣的軟件來滿足更多用戶的需求和體驗。
1.3ssm框架介紹
SSM(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis兩個開源框架整合而成(SpringMVC是Spring中的部分內(nèi)容)。常作為數(shù)據(jù)源較簡單的web項目的框架。
1.8.1 Spring
Spring就像是整個項目中裝配bean的大工廠,在配置文件中可以指定使用特定的參數(shù)去調(diào)用實體類的構(gòu)造方法來實例化對象。也可以稱之為項目中的粘合劑。
Spring的核心思想是IoC(控制反轉(zhuǎn)),即不再需要程序員去顯式地`new`一個對象,而是讓Spring框架幫你來完成這一切。
1.8.2 SpringMVC
SpringMVC在項目中攔截用戶請求,它的核心Servlet即DispatcherServlet承擔中介或是前臺這樣的職責,將用戶請求通過HandlerMapping去匹配Controller,Controller就是具體對應請求所執(zhí)行的操作。SpringMVC相當于SSH框架中struts。
1.8.3 mybatis
mybatis是對jdbc的封裝,它讓數(shù)據(jù)庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關聯(lián)到各實體類的Mapper文件,Mapper文件中配置了每個類對數(shù)據(jù)庫所需進行的sql語句映射。在每次與數(shù)據(jù)庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執(zhí)行sql命令。
頁面發(fā)送請求給控制器,控制器調(diào)用業(yè)務層處理邏輯,邏輯層向持久層發(fā)送請求,持久層與數(shù)據(jù)庫交互,后將結(jié)果返回給業(yè)務層,業(yè)務層將處理邏輯發(fā)送給控制器,控制器再調(diào)用視圖展現(xiàn)數(shù)據(jù)。

2?詩詞打卡微信小程序需求分析
在我們開發(fā)一個新的項目的時候,我們首先要考慮這個項目是否可以開發(fā),是否值得開發(fā),因此在開發(fā)本詩詞打卡微信小程序的第一步就要對系統(tǒng)的需求進行分析。
2.1 可行性分析
(1)經(jīng)濟方面上的可行性:
在開發(fā)詩詞打卡微信小程序的時候主要考慮的是系統(tǒng)的投入和產(chǎn)出兩部分,投入方面只要配置一臺帶有ecplice+mysql的電腦就可以進行開發(fā),成本很少,產(chǎn)出方面目前通過線上家教的用戶的數(shù)量日益增多,網(wǎng)絡進行家教變得平民化普及化,用戶人數(shù)呈上升趨勢,當用戶人數(shù)龐大了,各種經(jīng)濟效益也就產(chǎn)生了。所以在經(jīng)濟方面可行性是沒有問題的。
(2)操作方面上的可行性:
設計的詩詞打卡微信小程序在界面上簡介易懂,而且通過導航欄能夠明顯的看到想要了解的各種信息,功能模塊劃分明確,而且在操作方面對使用者沒有任何要求,無需培訓,而且系統(tǒng)操作起來十分簡單,能夠便捷的管理任何信息。因此在操作方面可行性也是沒有問題的。
(3)技術方面上的可行性:
在技術方面使用了當下主流的SSM框架,采用了編譯器ecplice+mysql用以運行整體程序,在以后的技術更新以及維護方面是沒有問題的,因此在技術方面可行性也是沒有問題的。
2.2 系統(tǒng)流程分析
業(yè)務流程是用一些特定的符合和線條來進行演示用戶在使用系統(tǒng)時的過程,在進行系統(tǒng)分析的時候,業(yè)務流程可以幫助開發(fā)人員更好的理解業(yè)務,發(fā)現(xiàn)錯誤,完善系統(tǒng)。
2.2.1 數(shù)據(jù)增加流程
用戶成功登入系統(tǒng)后就能夠?qū)崿F(xiàn)增加數(shù)據(jù)的操作,增加數(shù)據(jù)的編號是特定的,系統(tǒng)生成,用戶不能隨意填寫,除了編號以外,其他增加信息用戶自己填寫,填寫后的信息經(jīng)過系統(tǒng)驗證,驗證合法通過就顯示增加數(shù)據(jù)成功了,相反的話,就沒有增加成功,圖2-1顯示的就是在增加數(shù)據(jù)時的流程。

圖2-1 ?數(shù)據(jù)增加流程圖
2.2.2 數(shù)據(jù)修改流程
數(shù)據(jù)修改時的流程和上面介紹的數(shù)據(jù)增加時的流程差不多,如圖2-2所示。

圖2-2 ?數(shù)據(jù)修改流程圖
2.2.3 數(shù)據(jù)刪除流程
如果系統(tǒng)里面存在一些沒有用的數(shù)據(jù)的話,相關的管理人員還可以對這些數(shù)據(jù)進行刪除,圖2-3就是數(shù)據(jù)刪除時的流程圖。

圖2-3 ?數(shù)據(jù)刪除流程圖
2.3功能需求分析
詩詞打卡微信小程序劃分為了普通用戶模塊和管理員模塊這兩大部分。
普通用戶模塊:
(1)查看詩詞打卡微信小程序的首頁信息:詩詞打卡微信小程序的首頁信息包含了首頁、打卡活動、活動排行、我的。
(2)公告欄:用戶可以查看后臺管理員發(fā)布的公告信息,在查詢到自己想要了解的公告信息的時候,可以進入查看詳細的介紹。
(3)詩詞圈子:用戶可以查看詩詞圈子,在查詢到自己想要了解的詩詞圈子的時候,可以進入查看詳細的介紹,點擊“關注粉絲”這一按鈕以后會跳轉(zhuǎn)到關注粉絲信息填寫的界面,根據(jù)提示填寫好關注粉絲的信息,點擊“提交”以后關注粉絲就完成了,在詩詞圈子詳情這個界面,同時支持用戶對喜歡的詩詞進行收藏、點贊、評論、分享的功能。
(4)打卡活動:用戶可以查看打卡活動,在查詢到自己想要了解的打卡活動的時候,可以進入查看詳細的介紹,點擊“打卡”這一按鈕以后會跳轉(zhuǎn)到打卡信息填寫的界面,根據(jù)提示填寫好打卡的信息,點擊“提交”以后打卡就完成了,在活動詳情這個界面,同時支持用戶對喜歡的打卡活動進行收藏、點贊的功能。
(5)基本信息:在用戶端點擊“我的”的“基本信息”可以對頭像、昵稱、修改頭像、修改昵稱、修改密碼的信息進行管控。
圖2-1就是普通用戶角色的用例展示。

圖2-1?詩詞打卡微信小程序普通用戶角色用例圖
管理員管理模塊:
(1)公告欄管理:管理員可以對系統(tǒng)前臺展示的公告欄進行增刪改查,方便用戶進行查看。
(2)用戶管理:管理員可以對詩詞打卡微信小程序中的管理員以及前臺注冊的普通用戶進行審核管理。
(3)打卡活動:管理員點擊“打卡活動”會顯示出所有的打卡活動信息,支持通過活動名稱或者活動時間對打卡活動信息進行查詢,如果想要添加新的打卡活動信息,點擊“添加”按鈕,輸入相關信息,點擊“提交”按鈕就可以添加了,同時可以選擇某一條打卡活動信息,點擊“刪除”進行刪除。
(4)詩詞圈子:管理員點擊“詩詞圈子”會顯示出所有的詩詞圈子信息,支持輸入標題或者圈子類型對詩詞圈子信息進行查詢,如果想要添加新的詩詞圈子信息,點擊“添加”按鈕,輸入標題、圈子類型、詩詞類型、發(fā)布用戶、封面圖片、詳情內(nèi)容等信息,點擊“提交”按鈕就可以添加了,同時可以選擇某一條詩詞圈子信息,點擊“刪除”進行刪除,也可以對用戶提交的詩詞圈子評論的信息進行管控;
(5)打卡記錄:管理員點擊“打卡記錄”會顯示出所有的打卡記錄信息,支持通過活動名稱或者活動時間或者活動類型對打卡記錄信息進行查詢,如果想要添加新的打卡記錄信息,點擊“添加”按鈕,輸入相關信息,點擊“提交”按鈕就可以添加了,同時可以選擇某一條打卡記錄信息,點擊“刪除”進行刪除。
(6)活動排行:管理員點擊“活動排行”會顯示出所有的活動排行信息,支持通過活動名稱或者活動時間對活動排行信息進行查詢,如果想要添加新的活動排行信息,點擊“添加”按鈕,輸入相關信息,點擊“提交”按鈕就可以添加了,同時可以選擇某一條活動排行信息,點擊“刪除”進行刪除。
圖2-2就是管理員角色的用例展示。

圖2-2?詩詞打卡微信小程序管理員角色用例圖
2.4非功能性分析
詩詞打卡微信小程序的非功能性需求比如詩詞打卡微信小程序的安全性怎么樣,可靠性怎么樣,性能怎么樣,可拓展性怎么樣等。具體可以表示在如下3-1表格中:
表3-1詩詞打卡微信小程序非功能需求表
安全性 |
主要指詩詞打卡微信小程序數(shù)據(jù)庫的安裝,數(shù)據(jù)庫的使用和密碼的設定必須合乎規(guī)范。 |
可靠性 |
可靠性是指詩詞打卡微信小程序能夠安裝用戶的指示進行操作,經(jīng)過測試,可靠性90%以上。 |
性能 |
性能是影響詩詞打卡微信小程序占據(jù)市場的必要條件,所以性能最好要佳才好。 |
可擴展性 |
比如數(shù)據(jù)庫預留多個屬性,比如接口的使用等確保了系統(tǒng)的非功能性需求。 |
易用性 |
用戶只要跟著詩詞打卡微信小程序的頁面展示內(nèi)容進行操作,就可以了。 |
可維護性 |
詩詞打卡微信小程序開發(fā)的可維護性是非常重要的,經(jīng)過測試,可維護性沒有問題 |
3 詩詞打卡微信小程序總體設計
3.1?系統(tǒng)功能模塊設計
詩詞打卡微信小程序整體的功能模塊包括管理員+普通用戶兩個模塊,其總體設計模塊圖如圖3-1所示。

圖3-1?詩詞打卡微信小程序功能模塊圖
3.2系統(tǒng)E-R圖設計
下面是整個詩詞打卡微信小程序中主要的數(shù)據(jù)庫表總E-R實體關系圖。

圖3-2?詩詞打卡微信小程序總E-R關系圖
3.3 數(shù)據(jù)庫設計
通過上一節(jié)中詩詞打卡微信小程序中總E-R關系圖上得出一共需要創(chuàng)建很多個數(shù)據(jù)表。在此我主要羅列幾個主要的數(shù)據(jù)庫表結(jié)構(gòu)設計。
表activity_ranking (活動排行)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
activity_ranking_id |
int |
10 |
0 |
N |
Y |
活動排行ID |
|
2 |
activity_name |
varchar |
64 |
0 |
Y |
N |
活動名稱 |
|
3 |
activity_time |
date |
10 |
0 |
Y |
N |
活動時間 |
|
4 |
activity_type |
varchar |
64 |
0 |
Y |
N |
活動類型 |
|
5 |
full_name |
varchar |
64 |
0 |
Y |
N |
姓名 |
|
6 |
head_portrait |
varchar |
255 |
0 |
Y |
N |
頭像 |
|
7 |
number_of_clocking_in |
int |
10 |
0 |
Y |
N |
0 |
打卡次數(shù) |
8 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
9 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
10 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表auth (用戶權(quán)限管理)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
auth_id |
int |
10 |
0 |
N |
Y |
授權(quán)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 |
跳轉(zhuǎn)方式: |
9 |
add |
tinyint |
3 |
0 |
N |
N |
1 |
是否可增加: |
10 |
del |
tinyint |
3 |
0 |
N |
N |
1 |
是否可刪除: |
11 |
set |
tinyint |
3 |
0 |
N |
N |
1 |
是否可修改: |
12 |
get |
tinyint |
3 |
0 |
N |
N |
1 |
是否可查看: |
13 |
field_add |
text |
65535 |
0 |
Y |
N |
添加字段: |
|
14 |
field_set |
text |
65535 |
0 |
Y |
N |
修改字段: |
|
15 |
field_get |
text |
65535 |
0 |
Y |
N |
查詢字段: |
|
16 |
table_nav_name |
varchar |
500 |
0 |
Y |
N |
跨表導航名稱: |
|
17 |
table_nav |
varchar |
500 |
0 |
Y |
N |
跨表導航: |
|
18 |
option |
text |
65535 |
0 |
Y |
N |
配置: |
|
19 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
20 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表circle_classification (圈子分類)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
circle_classification_id |
int |
10 |
0 |
N |
Y |
圈子分類ID |
|
2 |
circle_type |
varchar |
64 |
0 |
Y |
N |
圈子類型 |
|
3 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
4 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表classification_of_poetry (詩詞分類)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
classification_of_poetry_id |
int |
10 |
0 |
N |
Y |
詩詞分類ID |
|
2 |
types_of_poetry |
varchar |
64 |
0 |
Y |
N |
詩詞類型 |
|
3 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
4 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表clock_in_activities (打卡活動)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
clock_in_activities_id |
int |
10 |
0 |
N |
Y |
打卡活動ID |
|
2 |
activity_name |
varchar |
64 |
0 |
Y |
N |
活動名稱 |
|
3 |
activity_time |
date |
10 |
0 |
Y |
N |
活動時間 |
|
4 |
activity_type |
varchar |
64 |
0 |
Y |
N |
活動類型 |
|
5 |
activity_poster |
varchar |
255 |
0 |
Y |
N |
活動海報 |
|
6 |
poetry_audio |
varchar |
255 |
0 |
Y |
N |
詩詞音頻 |
|
7 |
event_details |
text |
65535 |
0 |
Y |
N |
活動詳情 |
|
8 |
hits |
int |
10 |
0 |
N |
N |
0 |
點擊數(shù) |
9 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
點贊數(shù) |
10 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
11 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
12 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表clock_in_record (打卡記錄)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
clock_in_record_id |
int |
10 |
0 |
N |
Y |
打卡記錄ID |
|
2 |
activity_name |
varchar |
64 |
0 |
Y |
N |
活動名稱 |
|
3 |
activity_time |
date |
10 |
0 |
Y |
N |
活動時間 |
|
4 |
activity_type |
varchar |
64 |
0 |
Y |
N |
活動類型 |
|
5 |
clocking_user |
int |
10 |
0 |
Y |
N |
0 |
打卡用戶 |
6 |
full_name |
varchar |
64 |
0 |
Y |
N |
姓名 |
|
7 |
open_date |
date |
10 |
0 |
Y |
N |
打開日期 |
|
8 |
number_of_clocking_in |
varchar |
64 |
0 |
Y |
N |
打卡次數(shù) |
|
9 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
10 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
11 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表collect (收藏)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
collect_id |
int |
10 |
0 |
N |
Y |
收藏ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
收藏人ID: |
3 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
4 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
5 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
6 |
title |
varchar |
255 |
0 |
Y |
N |
標題: |
|
7 |
img |
varchar |
255 |
0 |
Y |
N |
封面: |
|
8 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
9 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表comment (評論)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
comment_id |
int |
10 |
0 |
N |
Y |
評論ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
評論人ID: |
3 |
reply_to_id |
int |
10 |
0 |
N |
N |
0 |
回復評論ID:空為0 |
4 |
content |
longtext |
2147483647 |
0 |
Y |
N |
內(nèi)容: |
|
5 |
nickname |
varchar |
255 |
0 |
Y |
N |
昵稱: |
|
6 |
avatar |
varchar |
255 |
0 |
Y |
N |
頭像地址:[0,255] |
|
7 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
9 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
10 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
11 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
表follow_fans (關注粉絲)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
follow_fans_id |
int |
10 |
0 |
N |
Y |
關注粉絲ID |
|
2 |
title |
varchar |
64 |
0 |
Y |
N |
標題 |
|
3 |
circle_type |
varchar |
64 |
0 |
Y |
N |
圈子類型 |
|
4 |
types_of_poetry |
varchar |
64 |
0 |
Y |
N |
詩詞類型 |
|
5 |
publishing_users |
int |
10 |
0 |
Y |
N |
0 |
發(fā)布用戶 |
6 |
followers |
int |
10 |
0 |
Y |
N |
0 |
關注人員 |
7 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
8 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
9 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表hits (用戶點擊)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
hits_id |
int |
10 |
0 |
N |
Y |
點贊ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
點贊人: |
3 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
4 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
表notice (公告)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
notice_id |
mediumint |
8 |
0 |
N |
Y |
公告id: |
|
2 |
title |
varchar |
125 |
0 |
N |
N |
標題: |
|
3 |
content |
longtext |
2147483647 |
0 |
Y |
N |
正文: |
|
4 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
5 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表ordinary_users (普通用戶)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
ordinary_users_id |
int |
10 |
0 |
N |
Y |
普通用戶ID |
|
2 |
full_name |
varchar |
64 |
0 |
N |
N |
姓名 |
|
3 |
gender |
varchar |
64 |
0 |
Y |
N |
性別 |
|
4 |
examine_state |
varchar |
16 |
0 |
N |
N |
已通過 |
審核狀態(tài) |
5 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
6 |
user_id |
int |
10 |
0 |
N |
N |
0 |
用戶ID |
7 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表poetry_circle (詩詞圈子)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
poetry_circle_id |
int |
10 |
0 |
N |
Y |
詩詞圈子ID |
|
2 |
title |
varchar |
64 |
0 |
Y |
N |
標題 |
|
3 |
circle_type |
varchar |
64 |
0 |
Y |
N |
圈子類型 |
|
4 |
types_of_poetry |
varchar |
64 |
0 |
Y |
N |
詩詞類型 |
|
5 |
publishing_users |
int |
10 |
0 |
Y |
N |
0 |
發(fā)布用戶 |
6 |
cover_photo |
varchar |
255 |
0 |
Y |
N |
封面圖片 |
|
7 |
details |
text |
65535 |
0 |
Y |
N |
詳情內(nèi)容 |
|
8 |
hits |
int |
10 |
0 |
N |
N |
0 |
點擊數(shù) |
9 |
praise_len |
int |
10 |
0 |
N |
N |
0 |
點贊數(shù) |
10 |
recommend |
int |
10 |
0 |
N |
N |
0 |
智能推薦 |
11 |
create_time |
datetime |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間 |
12 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間 |
表praise (點贊)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
praise_id |
int |
10 |
0 |
N |
Y |
點贊ID: |
|
2 |
user_id |
int |
10 |
0 |
N |
N |
0 |
點贊人: |
3 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
4 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
8 |
status |
bit |
1 |
0 |
N |
N |
1 |
點贊狀態(tài):1為點贊,0已取消 |
表slides (輪播圖)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
slides_id |
int |
10 |
0 |
N |
Y |
輪播圖ID: |
|
2 |
title |
varchar |
64 |
0 |
Y |
N |
標題: |
|
3 |
content |
varchar |
255 |
0 |
Y |
N |
內(nèi)容: |
|
4 |
url |
varchar |
255 |
0 |
Y |
N |
鏈接: |
|
5 |
img |
varchar |
255 |
0 |
Y |
N |
輪播圖: |
|
6 |
hits |
int |
10 |
0 |
N |
N |
0 |
點擊量: |
7 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
8 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
表upload (文件上傳)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
upload_id |
int |
10 |
0 |
N |
Y |
上傳ID |
|
2 |
name |
varchar |
64 |
0 |
Y |
N |
文件名 |
|
3 |
path |
varchar |
255 |
0 |
Y |
N |
訪問路徑 |
|
4 |
file |
varchar |
255 |
0 |
Y |
N |
文件路徑 |
|
5 |
display |
varchar |
255 |
0 |
Y |
N |
顯示順序 |
|
6 |
father_id |
int |
10 |
0 |
Y |
N |
0 |
父級ID |
7 |
dir |
varchar |
255 |
0 |
Y |
N |
文件夾 |
|
8 |
type |
varchar |
32 |
0 |
Y |
N |
文件類型 |
表user (用戶賬戶:用于保存用戶登錄信息)
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
user_id |
mediumint |
8 |
0 |
N |
Y |
用戶ID:[0,8388607]用戶獲取其他與用戶相關的數(shù)據(jù) |
|
2 |
state |
smallint |
5 |
0 |
N |
N |
1 |
賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷) |
3 |
user_group |
varchar |
32 |
0 |
Y |
N |
所在用戶組:[0,32767]決定用戶身份和權(quán)限 |
|
4 |
login_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
上次登錄時間: |
5 |
phone |
varchar |
11 |
0 |
Y |
N |
手機號碼:[0,11]用戶的手機號碼,用于找回密碼時或登錄時 |
|
6 |
phone_state |
smallint |
5 |
0 |
N |
N |
0 |
手機認證:[0,1](0未認證|1審核中|2已認證) |
7 |
username |
varchar |
16 |
0 |
N |
N |
用戶名:[0,16]用戶登錄時所用的賬戶名稱 |
|
8 |
nickname |
varchar |
16 |
0 |
Y |
N |
昵稱:[0,16] |
|
9 |
password |
varchar |
64 |
0 |
N |
N |
密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成 |
|
10 |
|
varchar |
64 |
0 |
Y |
N |
郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時 |
|
11 |
email_state |
smallint |
5 |
0 |
N |
N |
0 |
郵箱認證:[0,1](0未認證|1審核中|2已認證) |
12 |
avatar |
varchar |
255 |
0 |
Y |
N |
頭像地址:[0,255] |
|
13 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
表user_group (用戶組:用于用戶前端身份和鑒權(quán))
編號 |
名稱 |
數(shù)據(jù)類型 |
長度 |
小數(shù)位 |
允許空值 |
主鍵 |
默認值 |
說明 |
1 |
group_id |
mediumint |
8 |
0 |
N |
Y |
用戶組ID:[0,8388607] |
|
2 |
display |
smallint |
5 |
0 |
N |
N |
100 |
顯示順序:[0,1000] |
3 |
name |
varchar |
16 |
0 |
N |
N |
名稱:[0,16] |
|
4 |
description |
varchar |
255 |
0 |
Y |
N |
描述:[0,255]描述該用戶組的特點或權(quán)限范圍 |
|
5 |
source_table |
varchar |
255 |
0 |
Y |
N |
來源表: |
|
6 |
source_field |
varchar |
255 |
0 |
Y |
N |
來源字段: |
|
7 |
source_id |
int |
10 |
0 |
N |
N |
0 |
來源ID: |
8 |
register |
smallint |
5 |
0 |
Y |
N |
0 |
注冊位置: |
9 |
create_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
創(chuàng)建時間: |
10 |
update_time |
timestamp |
19 |
0 |
N |
N |
CURRENT_TIMESTAMP |
更新時間: |
4 詩詞打卡微信小程序詳細設計與實現(xiàn)
詩詞打卡微信小程序的詳細設計與實現(xiàn)主要是根據(jù)前面的詩詞打卡微信小程序的需求分析和詩詞打卡微信小程序的總體設計來設計頁面并實現(xiàn)業(yè)務邏輯,開發(fā)工具采用ecplice,數(shù)據(jù)庫在MYSQL中存儲,運用了當下比較主流的SSM框架。
4.1系統(tǒng)前臺部分功能模塊的實現(xiàn)
4.1.1 前臺首頁界面
當進入詩詞打卡微信小程序的時候,系統(tǒng)以上中下的布局進行展示,首先映入眼簾的是系統(tǒng)的導航欄,下面是輪播圖,再往下是公告欄信息,其主界面展示如下圖4-1所示。

圖4-1?前臺首頁界面圖
4.1.2 登錄界面
詩詞打卡微信小程序中的前臺上注冊后的用戶是可以通過自己的賬戶名和密碼進行登錄的,當會員輸入完整的自己的賬戶名和密碼信息并點擊“登錄”按鈕后,將會首先驗證輸入的有沒有空數(shù)據(jù),再次驗證輸入的賬戶名+密碼和數(shù)據(jù)庫中當前保存的用戶信息是否一致,只有在一致后將會登錄成功并自動跳轉(zhuǎn)到詩詞打卡微信小程序的首頁中;否則將會提示相應錯誤信息,用戶登錄界面如下圖4-2所示。

圖4-2登錄界面圖
登錄關鍵代碼如下所示。
?/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String,?Object> login(@RequestBody Map<String,?String> data,?HttpServletRequest httpServletRequest) {
????????log.info("[執(zhí)行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????QueryWrapper wrapper = new QueryWrapper<User>();
????????Map<String,?String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username",?username);
????????????resultList = service.selectBaseList(service.select(map,?new HashMap<>()));
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email",?email);
????????????resultList = service.selectBaseList(service.select(map,?new HashMap<>()));
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone",?phone);
????????????resultList = service.selectBaseList(service.select(map,?new HashMap<>()));
????????}else{
????????????return error(30000,?"賬號或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000,?"賬號或密碼不能為空");
????????}
????????//判斷是否有這個用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String,?String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap,?new HashMap<>()));
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態(tài)
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過")){
????????????????return error(30000,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態(tài)
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態(tài),不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲Token到數(shù)據(jù)庫
????????????AccessToken accessToken = new AccessToken();
????????????accessToken.setToken(UUID.randomUUID().toString().replaceAll("-",?""));
????????????accessToken.setUser_id(byUsername.getUserId());
????????????tokenService.save(accessToken);
????????????// 返回用戶信息
????????????JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
????????????user.put("token",?accessToken.getToken());
????????????JSONObject ret = new JSONObject();
????????????ret.put("obj",user);
????????????return success(ret);
????????} else {
????????????return error(30000,?"賬號或密碼不正確");
????????}
}
????public String select(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("select ");
????????sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
????????sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query,?"0".equals(config.get(FindConfig.LIKE))));
????????if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
????????????sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
????????}
????????if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
????????????sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
????????}
????????if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
????????????int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
????????????int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
????????????sql.append(" limit ").append( (page-1)*limit ).append(" ,?").append(limit);
????????}
????????log.info("[{}] - 查詢操作,sql: {}",table,sql);
????????return sql.toString();
}
????public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
4.1.3注冊界面
詩詞打卡微信小程序的用戶可以進行注冊登錄,當用戶左上角“注冊”按鈕的時候,當填寫上自己的賬號+密碼+確認密碼+昵稱+郵箱+手機號,選擇身份,然后填寫身份信息后再點擊“注冊”按鈕后將會先驗證輸入的有沒有空數(shù)據(jù),再次驗證密碼和確認密碼是否是一樣的,最后驗證輸入的賬戶名和數(shù)據(jù)庫表中已經(jīng)注冊的賬戶名是否重復,只有都驗證沒問題后即可注冊成功。其用注冊界面展示如下圖4-3所示。

圖4-3注冊界面圖
所有的用戶都可以通過網(wǎng)頁進入到詩詞打卡微信小程序中對信息進行查看,但是要實現(xiàn)打卡、收藏、評論的話,就不是所有人都能操作的,必須成為詩詞打卡微信小程序的會員,注冊登錄的流程圖如下圖4-4所示。

圖4-4注冊登錄流程圖
登錄關鍵代碼如下所示。
?/**
?????* 登錄
?????* @param data
?????* @param httpServletRequest
?????* @return
?????*/
????@PostMapping("login")
????public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
????????log.info("[執(zhí)行登錄接口]");
????????String username = data.get("username");
????????String email = data.get("email");
????????String phone = data.get("phone");
????????String password = data.get("password");
????????List resultList = null;
????????QueryWrapper wrapper = new QueryWrapper<User>();
????????Map<String, String> map = new HashMap<>();
????????if(username != null && "".equals(username) == false){
????????????map.put("username", username);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(email != null && "".equals(email) == false){
????????????map.put("email", email);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}
????????else if(phone != null && "".equals(phone) == false){
????????????map.put("phone", phone);
????????????resultList = service.selectBaseList(service.select(map, new HashMap<>()));
????????}else{
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????if (resultList == null || password == null) {
????????????return error(30000, "賬號或密碼不能為空");
????????}
????????//判斷是否有這個用戶
????????if (resultList.size()<=0){
????????????return error(30000,"用戶不存在");
????????}
????????User byUsername = (User) resultList.get(0);
????????Map<String, String> groupMap = new HashMap<>();
????????groupMap.put("name",byUsername.getUserGroup());
????????List groupList = userGroupService.selectBaseList(userGroupService.select(groupMap, new HashMap<>()));
????????if (groupList.size()<1){
????????????return error(30000,"用戶組不存在");
????????}
????????UserGroup userGroup = (UserGroup) groupList.get(0);
????????//查詢用戶審核狀態(tài)
????????if (!StringUtils.isEmpty(userGroup.getSourceTable())){
????????????String res = service.selectExamineState(userGroup.getSourceTable(),byUsername.getUserId());
????????????if (res==null){
????????????????return error(30000,"用戶不存在");
????????????}
????????????if (!res.equals("已通過")){
????????????????return error(30000,"該用戶審核未通過");
????????????}
????????}
????????//查詢用戶狀態(tài)
????????if (byUsername.getState()!=1){
????????????return error(30000,"用戶非可用狀態(tài),不能登錄");
????????}
????????String md5password = service.encryption(password);
????????if (byUsername.getPassword().equals(md5password)) {
????????????// 存儲Token到數(shù)據(jù)庫
????????????AccessToken accessToken = new AccessToken();
????????????accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
????????????accessToken.setUser_id(byUsername.getUserId());
????????????tokenService.save(accessToken);
????????????// 返回用戶信息
????????????JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
????????????user.put("token", accessToken.getToken());
????????????JSONObject ret = new JSONObject();
????????????ret.put("obj",user);
????????????return success(ret);
????????} else {
????????????return error(30000, "賬號或密碼不正確");
????????}
}
????public String select(Map<String,String> query,Map<String,String> config){
????????StringBuffer sql = new StringBuffer("select ");
????????sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
????????sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
????????if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
????????????sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
????????}
????????if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
????????????sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
????????}
????????if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
????????????int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
????????????int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
????????????sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
????????}
????????log.info("[{}] - 查詢操作,sql: {}",table,sql);
????????return sql.toString();
}
????public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
4.1.4詩詞圈子詳情界面
用戶可以查看詩詞圈子,在查詢到自己想要了解的詩詞圈子的時候,可以進入查看詳細的介紹,點擊“關注”這一按鈕以后會跳轉(zhuǎn)到關注信息填寫的界面,根據(jù)提示填寫好關注的信息,在詩詞圈子信息詳情這個界面,同時支持用戶對喜歡的詩詞圈子進行收藏、點贊、分享的功能,詩詞圈子詳情展示頁面如圖4-5所示。
???????

圖4-5詩詞圈子詳情界面圖
4.1.5打卡活動詳情界面
用戶可以查看打卡活動信息,在查詢到自己想要了解的打卡活動的時候,可以進入查看詳細的介紹,點擊“打卡”這一按鈕以后會跳轉(zhuǎn)到打卡信息填寫的界面,根據(jù)提示填寫好打卡的信息,在打卡活動信息詳情這個界面,同時支持用戶對喜歡的打卡活動進行收藏、點贊的功能,打卡活動詳情展示頁面如圖4-6所示。
?????

圖4-6打卡活動詳情界面圖
在實現(xiàn)打卡操作的時候,沒有登錄的用戶只能進行查看,如果想要實現(xiàn)打卡這個操作的話,打卡的前提必須是登錄后才能進行。詳見圖4-7所示。
?????????????

圖4-7?打卡流程圖
4.1.6?打卡記錄界面
點擊導航欄上的“打卡記錄”,可以選擇活動名稱、活動時間、活動類型、打卡用戶、姓名、打開日期、打卡次數(shù),然后點擊“提交”按鈕進行提交打卡記錄,打卡記錄界面如下圖4-8所示。

圖4-8打卡記錄界面圖
4.2系統(tǒng)后臺部分功能模塊的實現(xiàn)
4.2.1登錄界面
管理員在登錄界面輸入賬號+密碼,點擊“登錄”按鈕,系統(tǒng)在用戶數(shù)據(jù)庫表中會對管理員,普通管理者的賬號進行匹配,賬號+密碼正確的話,就會登錄到系統(tǒng)中各個用戶的主管理界面,否則提示對應的信息,返回到登錄的界面,如果管理人員忘記密碼的話,點擊“忘記密碼”根據(jù)提示可以找回密碼,然后再進行登錄其主界面展示如下圖4-9所示。

圖4-9登錄界面圖
4.2.2用戶管理界面
詩詞打卡微信小程序中的管理員在“用戶管理”這一菜單是中可以對注冊的用戶以及管理員人員進行管控。界面如下圖4-10所示。

圖4-10用戶管理界面圖
用戶管理關鍵代碼如下所示。
public List selectBaseList(String select) {
????????List<Map<String,Object>> mapList = baseMapper.selectBaseList(select);
????????List<E> list = new ArrayList<>();
????????for (Map<String,Object> map:mapList) {
????????????list.add(JSON.parseObject(JSON.toJSONString(map),eClass));
????????}
????????return list;
}
4.2.3公告欄管理界面
公告欄管理模塊是對公告欄的設置,只有管理員權(quán)限才能進行更新維護。界面如下圖4-11所示。

圖4-11公告欄管理界面圖
4.2.4詩詞圈子管理界面
點擊“詩詞圈子”按鈕會顯示自己添加的詩詞圈子,如果想要添加新的詩詞圈子,點擊“添加”按鈕根據(jù)提示輸入詩詞圈子,點擊“提交”后在詩詞圈子界面就可以顯示了,如果信息有錯可以對詩詞圈子進行更新維護,也可以直接刪除某一詩詞圈子,還可以管理評論信息,界面如下圖4-12所示。

圖4-12詩詞圈子管理界面圖
4.2.5打卡活動管理界面
點擊“打卡活動”按鈕會顯示自己添加的打卡活動,如果想要添加新的打卡活動,點擊“添加”按鈕根據(jù)提示輸入打卡活動,點擊“提交”后在打卡活動界面就可以顯示了,如果信息有錯可以對打卡活動進行更新維護,也可以直接刪除某一打卡活動,界面如下圖4-13所示。

圖4-13打卡活動管理界面圖
打卡活動管理關鍵代碼如下所示。
?@RequestMapping("/get_obj")
????public Map<String, Object> obj(HttpServletRequest request) {
????????List resultList = service.selectBaseList(service.select(service.readQuery(request), service.readConfig(request)));
????????if (resultList.size() > 0) {
????????????JSONObject jsonObject = new JSONObject();
????????????jsonObject.put("obj",resultList.get(0));
????????????return success(jsonObject);
????????} else {
????????????return success(null);
????????}
}
4.2.6活動排行管理界面
管理員點擊“活動排行”會顯示出所有的活動排行信息,支持通過活動名稱或者活動時間對活動排行信息進行查詢,如果想要添加新的活動排行信息,點擊“添加”按鈕,輸入相關信息,點擊“提交”按鈕就可以添加了,同時可以選擇某一條活動排行信息,點擊“刪除”進行刪除,界面如下圖4-13所示。

圖4-13活動排行管理界面圖
5系統(tǒng)測試
5.1測試目的
在系統(tǒng)的前臺、后臺、數(shù)據(jù)庫設計完成以后,詩詞打卡微信小程序才算是完成了一半,系統(tǒng)的最后一個階段就是對系統(tǒng)的功能、性能進行測試,測試對一個系統(tǒng)來說是非常重要的,有的時候開發(fā)完一個系統(tǒng),如果測試不合格的話,這個系統(tǒng)是沒有辦法進行投入使用的,所有我們要用測試對系統(tǒng)的功能、性能等方面進行檢驗,把不完善的功能盡量完善,把出現(xiàn)的bug及時解決掉,然后給用戶呈現(xiàn)出一個完美的系統(tǒng)。
5.2 系統(tǒng)測試用例
系統(tǒng)測試包括:用戶登錄功能測試、活動排行展示功能測試、活動排行添加、活動排行搜索、密碼修改功能測試,如表5-1、5-2、5-3、5-4、5-5所示:
用戶登錄功能測試:
表5-1?用戶登錄功能測試表
用例名稱 |
用戶登錄系統(tǒng) |
目的 |
測試用戶通過正確的用戶名和密碼可否登錄功能 |
前提 |
未登錄的情況下 |
測試流程 |
1) 進入登錄頁面 2) 輸入正確的用戶名和密碼 |
預期結(jié)果 |
用戶名和密碼正確的時候,跳轉(zhuǎn)到登錄成功界面,反之則顯示錯誤信息,提示重新輸入 |
實際結(jié)果 |
實際結(jié)果與預期結(jié)果一致 |
活動排行查看功能測試:
表5-2?活動排行查看功能測試表
用例名稱 |
活動排行查看 |
目的 |
測試活動排行查看功能 |
前提 |
用戶登錄 |
測試流程 |
點擊活動排行列表 |
預期結(jié)果 |
可以查看到所有活動排行 |
實際結(jié)果 |
實際結(jié)果與預期結(jié)果一致 |
管理員添加詩詞圈子詳情界面測試:
表5-3?管理員添加詩詞圈子詳情界面測試表
用例名稱 |
活動排行發(fā)布測試用例 |
目的 |
測試活動排行發(fā)布功能 |
前提 |
用戶正常登錄情況下 |
測試流程 |
1)用戶點擊活動排行管理就,然后點擊添加后并填寫信息。 2)點擊進行提交。 |
預期結(jié)果 |
提交以后,頁面首頁會顯示新的活動排行? |
實際結(jié)果 |
實際結(jié)果與預期結(jié)果一致 |
活動排行搜索功能測試:
表5-4活動排行搜索功能測試表
用例名稱 |
活動排行搜索測試 |
目的 |
測試活動排行搜索功能 |
前提 |
無 |
測試流程 |
1)在搜索框填入搜索關鍵字。 2)點擊搜索按鈕。 |
預期結(jié)果 |
頁面顯示包含有搜索關鍵字的活動排行 |
實際結(jié)果 |
實際結(jié)果與預期結(jié)果一致 |
密碼修改功能測試:
表5-5 密碼修改功能測試表
用例名稱 |
密碼修改測試用例 |
目的 |
測試管理員密碼修改功能 |
前提 |
管理員用戶正常登錄情況下 |
測試流程 |
1)管理員密碼修改并完成填寫。 2)點擊進行提交。 |
預期結(jié)果 |
使用新的密碼可以登錄 |
實際結(jié)果 |
實際結(jié)果與預期結(jié)果一致 |
5.3?系統(tǒng)測試結(jié)果
通過編寫詩詞打卡微信小程序的測試用例,已經(jīng)檢測完畢用戶登錄模塊、活動排行查看模塊、活動排行添加模塊、活動排行搜索模塊、密碼修改功能測試,通過這5大模塊為詩詞打卡微信小程序的后期推廣運營提供了強力的技術支撐。
結(jié)論
本文描述了詩詞打卡微信小程序設計與實現(xiàn)的原理和開發(fā)過程,該系統(tǒng)是通過Spring+SpringMVC+MyBatis框架來搭建后臺,中間件使用的是Tomcat服務器,數(shù)據(jù)庫管理平臺采用開源的Mysql數(shù)據(jù)庫,前臺使用的是JQuery框架,同時使用Validate校驗框架,這樣就可以減少前端代碼的輸入量,而且基于JQuery框架的Validat框架使用簡單,是流行的前端使用框架,前端使用的主要是Java頁面展示技術。
在開發(fā)這個詩詞打卡微信小程序之前做了許多的準備,比如到學校進行調(diào)研,了解現(xiàn)在大學生對詩詞打卡微信小程序所要實現(xiàn)的功能,同時在詩詞打卡微信小程序的設計和開發(fā)過程中去圖書館以及網(wǎng)上查閱和學習了許多相關的文獻資料,與此同時從開發(fā)這個詩詞打卡微信小程序的過程當中我也收獲了許許多多寶貴的實踐方法以及設計的思路,對系統(tǒng)的開發(fā)也起到了很重要的作用,詩詞打卡微信小程序的開發(fā)技術選用的都是自己比較熟悉的,比如Web、SSM、MYSQL等,這些技術都在平時的課程當中學到,而且平時都能夠熟練運用,在開發(fā)詩詞打卡微信小程序的過程當中許多的設計思路和方法都是在以前不斷地學習中摸索出來的經(jīng)驗,開發(fā)詩詞打卡微信小程序?qū)τ谖襾碚f工作量還是比較大的,畢竟是一個完整的系統(tǒng),正是由于之前的積累與準備,才能順利的完成這個項目,由此看來,積累經(jīng)驗跟做好準備是十分重要的事情。
當然在開發(fā)該詩詞打卡微信小程序的過程當中也是離不開導師以及同學們的幫助的,在遇到自己搞不定的問題的時候,我首先會和同學們探討,找出解決方法,實在解決不了的時候,我會請教我的導師,在開發(fā)詩詞打卡微信小程序的過程中正是因為他們的指導與幫助,我才能夠成功的在預期內(nèi)完成了這個系統(tǒng)。同時詩詞打卡微信小程序還有很多需要改進的地方,但是由于專業(yè)知識的淺薄,開發(fā)的系統(tǒng)并不是十全十美,希望以后有機會可以對其進行完善,讓其真正的投入到使用之中。
致 ?謝
到此,整個詩詞打卡微信小程序就算完成了,雖然過程十分艱難,但是等到都完成的時候,我感覺無比的自豪,雖然設計的系統(tǒng)還存在許多的紕漏,但是我已經(jīng)拼勁全力,給自己的大學四年畫上了一個圓滿的句號。
在這里我首先要感謝的就是大學四年來所有教導我的老師,是他們教會了我許多的專業(yè)知識以及做人的道理,從一進校門對對開發(fā)系統(tǒng)一竅不通到現(xiàn)在能自主開發(fā)一個管理系統(tǒng),里面包含了前臺框架、后臺框架、業(yè)務流程、數(shù)據(jù)結(jié)構(gòu)、操作系統(tǒng)等各種知識,只有把他們統(tǒng)一運用好,才能夠完成整個系統(tǒng),這都是老師的功勞;其次我要感謝我的指導老師,在開發(fā)這個系統(tǒng)的時候,我遇到了無數(shù)的問題,經(jīng)常通過線上、線下的方式去請教導師,每次去請教導師,他從來沒有不耐煩,都是細心的引導,告訴我怎么樣實現(xiàn)這個功能,怎么樣才能使得系統(tǒng)更加完善,然后通過自己查詢相關資料解決問題,提高了自己自主解決問題的能力,授人以魚不如授人以漁,指導老師的這種工作態(tài)度受益終生,我也會向老師不斷靠攏,向他學習,在此我只想說一句:“老師,謝謝您,您辛苦了”!最后我還要感謝我的室友、同學,在一起學習這四年,他們不但學習上給了我很多建議,在生活上更加給了我?guī)椭?,正是有他們的幫助,我的大學生涯才如此完美。
最后,希望自己在未來的道路上能夠越走越遠,不辜負在大學的學習以及老師們的細致的教導,追風趕月莫停留,平荒盡處是春山。
參考文獻
[1]姚麗娟,羅宏偉,丑晨,楊成興.基于微信小程序的智慧校園導航系統(tǒng)研究[J].網(wǎng)絡安全技術與應用,2023(03):48-50.
[2]鄭欽,曹艷佩.慢性腎臟病患者飲食管理微信小程序功能需求的質(zhì)性研究[J].上海護理,2023,23(03):6-12.
[3]魏興華,羅春,陳棟,李建輝,張文件,李春,吳炎,臧冰凌. 一種用于MySQL數(shù)據(jù)庫的數(shù)據(jù)同步方法、設備及介質(zhì)[P]. 浙江省:CN115757357A,2023-03-07.
[4]章莉. 一種基于MySQL數(shù)據(jù)庫操作審計、回滾的方法[P]. 貴州?。篊N115757459A,2023-03-07.
[5]張旭,吳丹,張成平.老年人網(wǎng)上購物微信小程序建設研究[J].科技與創(chuàng)新,2023(05):131-133.DOI:10.15913/j.cnki.kjycx.2023.05.042.
[6]譚松淇,郭嘉梁,李振興,俞嘉杰. 基于MySQL數(shù)據(jù)庫日志分析的自動駕駛數(shù)據(jù)監(jiān)測方法及監(jiān)測系統(tǒng)[P]. 黑龍江?。篊N115730020A,2023-03-03.
[7]馬金偉,賈九泰,秦丁丁,聶磊,王鑫,奧葉林,王樹森.基于微信小程序的植物分類實踐教學軟件研發(fā)[J].實驗室科學,2023,26(01):77-80.
[8]伍德鵬,李佩學.基于SSM框架的高職院校教學辦公用品管理信息系統(tǒng)設計研究[J].輕工科技,2023,39(01):99-101.
[9]常婉綸,談姝辰,屈小娥,田召.基于SSM框架的二級學院教科研信息共享系統(tǒng)的設計與實現(xiàn)[J].電腦知識與技術,2022,18(34):39-41.DOI:10.14004/j.cnki.ckt.2022.2208.
[10]李亞君. 基于SSM框架的B2C電子商城系統(tǒng)的設計與實現(xiàn)[D].合肥工業(yè)大學,2022.DOI:10.27101/d.cnki.ghfgu.2022.000313.
[11]曹澤翰.基于SSM框架的流體力學課程虛擬仿真實驗平臺設計[J].信息與電腦(理論版),2022,34(20):34-36.
[12]李罡,周正茂. 基于Java技術實現(xiàn)內(nèi)存鍵值數(shù)據(jù)管理的方法及其裝置[P]. 北京市:CN114840498B,2022-09-13.
[13]林易康, 基于Java的web應用程序控制管理軟件. 湖北省,武漢東湖學院,2021-10-01.
[14]He Xinbin,Bai Yongbin,Yue Lisen,Wang Haixiao,Liu Yi. Design and Implementation of Information System Based on Java Technology Platform[J]. Journal of Physics: Conference Series,2021,2033(1).
[15]Tian Ming Huang. Design and Implementation of App System for Legal Consulting Based on JAVA Technology[J]. Procedia Computer Science,2020,166(C).
[16]方春露,楊文琦,陳滔等. 基于Javaweb技術廣東省學生體質(zhì)爭優(yōu)運動處方數(shù)據(jù)庫和視頻庫的構(gòu)建[C]//中國生理學會運動生理學專業(yè)委員會,北京體育大學.2018年中國生理學會運動生理學專業(yè)委員會會議暨“科技創(chuàng)新與運動生理學”學術研討會論文集.[出版者不詳],2018:161-162.文章來源:http://www.zghlxwxcb.cn/news/detail-742464.html
[17]SJ/T 11683-2017, Java語言源代碼缺陷控制與測試指南[S].文章來源地址http://www.zghlxwxcb.cn/news/detail-742464.html
關注+點贊+收藏+私信博主,免費領取項目源碼
到了這里,關于(贈源碼)java+SSM+MySQL詩詞打卡微信小程序44669-計算機畢業(yè)設計項目選題推薦的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!