【維普】軟件工程-基于SpringBoot的博客系統(tǒng)1_第1頁
【維普】軟件工程-基于SpringBoot的博客系統(tǒng)1_第2頁
【維普】軟件工程-基于SpringBoot的博客系統(tǒng)1_第3頁
【維普】軟件工程-基于SpringBoot的博客系統(tǒng)1_第4頁
【維普】軟件工程-基于SpringBoot的博客系統(tǒng)1_第5頁
已閱讀5頁,還剩105頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

摘要目錄TOC\o"1-2"\h\u6581摘要 系統(tǒng)測試在第五章中,功能都已經(jīng)羅列完成,而在這章我們進(jìn)對系統(tǒng)進(jìn)行測試,確保系統(tǒng)不會出現(xiàn)嚴(yán)重的問題。首先我們將擬定測試計劃,然后對功能模塊一個一個進(jìn)行測試,并將測試結(jié)果保留下來。6.1測試計劃系統(tǒng)測試計劃如下:對劃分的功能逐個進(jìn)行測試,首先從登陸注冊開始,接著是一般用戶的個人博客中心、私信中心。推薦博客、博客中心、修改個人信息,然后到管理員的用戶管理和博客管理。6.2功能模塊測試功能模塊測試:主要測試各個功能模塊是否能夠正常運(yùn)行,是否能夠達(dá)到需求。整體運(yùn)行后會不會有以外情況發(fā)生。登錄功能測試對登錄模塊測試流程如下表6-1所示。表6-1登錄模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述登錄測試1手機(jī)號和密碼均為空無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理登錄測試2手機(jī)號不為空,密碼為空無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理登錄測試3手機(jī)號為空,密碼不為空無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理登錄測試4手機(jī)號和密碼均已輸入,手機(jī)號正確,但是密碼不正確無法登錄,清空輸入框,提示賬號或密碼錯誤與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理登錄測試5手機(jī)號和密碼均已輸入,手機(jī)號不正確,但是密碼正確無法登錄,清空輸入框,提示賬號或密碼錯誤與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理登錄測試6手機(jī)號和密碼均已輸入,手機(jī)號和密碼均正確,且身份為一般用戶正常登錄,且跳轉(zhuǎn)至一般用戶界面與預(yù)期結(jié)果一致測試系統(tǒng)異常正常情況下的反應(yīng)登錄測試7手機(jī)號和密碼均已輸入,手機(jī)號和密碼均正確,且身份為管理員正常登錄,且跳轉(zhuǎn)至管理員界面與預(yù)期結(jié)果一致測試系統(tǒng)異常正常情況下的反應(yīng)一般用戶和管理員的登陸測試均已通過,具體測試結(jié)果如下圖6-1至圖6-6所示。由于點擊登錄出現(xiàn)錯誤后會將輸入框清空,因此效果圖為模擬情況,實際是輸入框都被清空的。圖6-1都為空的情況下提示圖圖6-2其中一個為空提示圖圖6-3賬號錯誤提示圖圖6-4密碼錯誤提示圖圖6-5一般用戶登錄成功圖圖6-6管理員登錄成功圖注冊功能測試對用戶注冊模塊測試流程如下表6-2所示。表6-2注冊模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述注冊測試1手機(jī)號、昵稱、密碼均為空無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試2手機(jī)號已填,昵稱、密碼未填無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試3昵稱已填,手機(jī)號和密碼未填無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試4密碼已填,手機(jī)號和昵稱未填無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試5手機(jī)號和昵稱已填,密碼未填無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試6手機(jī)號和密碼已填,昵稱未填無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試7手機(jī)號、昵稱、密碼均已填,但是手機(jī)號格式錯誤無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試8手機(jī)號、昵稱、密碼均已填,但是手機(jī)號格式已注冊無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試9手機(jī)號、昵稱、密碼均已填,但是昵稱過長無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試10手機(jī)號、昵稱、密碼均已填,但是密碼過短無法登錄,并給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理注冊測試11手機(jī)號、昵稱、密碼均已填,且均正確注冊成功,給出提示,且能正常登錄與預(yù)期結(jié)果一致測試系統(tǒng)異常正常情況下的反應(yīng)用戶的注冊測試均已通過,具體測試結(jié)果如下圖6-7至圖6-13所示。圖6-7都為空的情況下提示圖圖6-8手機(jī)錯誤格式提示圖圖6-9手機(jī)號已注冊提示圖圖6-10昵稱過長提示圖圖6-11密碼過短提示圖圖6-12注冊成功提示圖圖6-13注冊完登錄示意圖個人博客中心測試對一般用戶個人博客中心模塊測試流程如下表6-3所示。有博客查詢測試、用戶信息測試、博客創(chuàng)建測試、博客修改測試、博客刪除測試、博客詳情測試。表6-3個人博客中心測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述博客查詢測試1進(jìn)入個人博客中心頁面正常顯示屬于自己的博客列表,且內(nèi)容不包含圖片鏈接與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客查詢測試2模糊查詢博客顯示搜索到的博客列表與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作用戶信息測試1進(jìn)入個人中心頁面正常顯示登陸用戶的信息與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客創(chuàng)建測試1進(jìn)入博客創(chuàng)建的界面,標(biāo)題和內(nèi)容均不輸入,點擊提交。不能正常提交,顯示提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理博客創(chuàng)建測試2進(jìn)入博客創(chuàng)建的界面,標(biāo)題輸入,內(nèi)容不輸入不能正常提交,顯示提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理博客創(chuàng)建測試3進(jìn)入博客創(chuàng)建的界面,標(biāo)題不輸入,只輸入內(nèi)容不能正常提交,顯示提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理博客創(chuàng)建測試4進(jìn)入博客創(chuàng)建的界面,正常輸入標(biāo)題和內(nèi)容,且包含圖片。提示提交成功,且輸入框均清空,返回后能看到新建博客,且個人信息博客數(shù)發(fā)生變化。與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客修改測試1進(jìn)入博客修改界面正常顯示標(biāo)題和內(nèi)容與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客修改測試2進(jìn)入博客修改界面,修改標(biāo)題標(biāo)題成功修改,且給出成功提示,返回后看到修改后的信息與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客修改測試3進(jìn)入博客修改界面,修改內(nèi)容內(nèi)容成功修改,且給出成功提示,返回后看到修改后的信息與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客刪除測試1點擊刪除按鈕,彈出框點擊取消彈框消失,且博客并沒有被刪除與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客刪除測試2點擊刪除按鈕,彈框點擊確定博客內(nèi)容被刪除,給出提示,且用戶信息博客數(shù)改變內(nèi)容被刪除,但是用戶信息博客數(shù)沒有改變測試系統(tǒng)功能的正常工作博客詳情測試1進(jìn)入博客詳情界面標(biāo)題正常顯示,內(nèi)容正常顯示文字和圖片與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作由上表可知,博客刪除測試2出現(xiàn)了問題,檢查發(fā)現(xiàn)是因為前端刪除完成后沒有重新調(diào)用getUserInfo()函數(shù),導(dǎo)致用戶信息沒有更新。修改后的具體測試結(jié)果如下圖6-14至圖6-24所示:圖6-14博客查詢示意圖圖6-15博客搜索示意圖圖6-16博客創(chuàng)建都不輸入提示圖圖6-17博客創(chuàng)建正常輸入示意圖圖6-18博客創(chuàng)建保存示意圖圖6-19博客創(chuàng)建后返回示意圖圖6-20博客標(biāo)題修改示意圖圖6-21博客編輯后返回示意圖圖6-22博客刪除提示圖圖6-23博客刪除后示意圖圖6-24博客詳情示意圖修私信中心模塊測試對私信中心模塊測試流程如下表6-4所示。這里假設(shè)發(fā)送消息者為A,接收消息者為B。表6-4私信中心模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述消息列表測試1進(jìn)入私信中心界面在已經(jīng)建立消息的基礎(chǔ)上,顯示消息列表與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作消息列表測試2點擊消息框顯示相應(yīng)的聊天內(nèi)容與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作消息列表測試3刪除某個消息框?qū)?yīng)消息框消失,聊天框消失消息框正常刪除,但是聊天框內(nèi)容未消失測試系統(tǒng)功能的正常工作聊天內(nèi)容測試1未選擇消息列表點擊發(fā)送按鈕給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作聊天內(nèi)容測試2選擇了消息框,但是內(nèi)容未填點發(fā)送按鈕給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理聊天內(nèi)容測試3A正常填寫內(nèi)容點擊發(fā)送,B未選擇消息列表A的聊天界面顯示新增聊天內(nèi)容,B聊天內(nèi)容不顯示,A的未讀消息數(shù)增加與預(yù)期結(jié)果一致測試系統(tǒng)功能的完善聊天內(nèi)容測試4B點擊A的消息框B顯示聊天內(nèi)容,且消息框的未讀消息數(shù)為0與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作聊天內(nèi)容測試5B發(fā)送A多條消息,A已選擇B的消息框A和B聊天界面顯示新增聊天內(nèi)容,A界面B的未讀消息數(shù)增加與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作聊天內(nèi)容測試6在有B的未讀消息下,A發(fā)送信息A和B聊天界面顯示新增聊天內(nèi)容,在A界面未讀消息數(shù)清0,B未讀消息數(shù)增加。與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作聊天內(nèi)容測試7在有B的未讀消息下,A點擊B的消息框A和B聊天界面顯示新增聊天內(nèi)容,A界面B的未讀消息數(shù)清0。與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作消息列表測試3在刪除后為有預(yù)期結(jié)果,經(jīng)過排查是因為前端未將聊天內(nèi)容列表和目標(biāo)人物信息清空。修改后的具體測試結(jié)果如下圖6-25至圖6-33所示:圖6-25獲取消息列表示意圖圖6-26點擊消息框示意圖圖6-27刪除消息框提示圖圖6-28刪除成功示意圖圖6-29未選擇對象提示圖圖6-30未輸入內(nèi)容提示圖圖6-31A正常發(fā)勇消息示意圖圖6-32B未選擇對象示意圖圖6-33B選擇A示意圖推薦中心模塊測試對推薦中心模塊測試流程如下表6-5所示。表6-5推薦中心模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述推薦中心測試1進(jìn)入推薦中心界面正常顯示博客與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作推薦中心測試2用戶張三進(jìn)入推薦中心界面根據(jù)算法會固定有一篇標(biāo)題為2號用戶測試標(biāo)題1的博客,以及兩篇隨機(jī)的博客與預(yù)期結(jié)果一致測試算法的準(zhǔn)確性推薦中心測試3用戶王五進(jìn)入推薦中心根據(jù)算法,王五的推薦是三篇隨機(jī)的博客與預(yù)期結(jié)果一致測試算法的準(zhǔn)確性推薦中心測試4點擊了解更多進(jìn)入博客詳情界面與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作由上表可知推薦中心模塊測試的結(jié)果全都是符合預(yù)期的。具體測試結(jié)果如下圖6-34至圖6-38所示:圖6-34張三第一次進(jìn)入推薦中心示意圖圖6-35張三第二次進(jìn)入推薦中心示意圖圖6-36王五第一次進(jìn)入推薦中心示意圖圖6-37張三第二次進(jìn)入推薦中心示意圖圖6-38進(jìn)入詳情界面示意圖博客中心模塊測試對博客中心模塊測試流程如下表6-6所示。表6-6博客中心模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述博客查詢測試1用戶進(jìn)入博客中心界面正常顯示除自己以外的博客與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客查詢測試1輸入標(biāo)題查詢博客正常顯示符合條件的博客與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客查詢測試3輸入作者名查詢博客正常顯示符合條件的博客與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客詳情測試1點擊標(biāo)題或內(nèi)容進(jìn)入博客詳情界面與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客詳情測試2點擊愛心愛心發(fā)生變化,且博主的被點贊數(shù)也發(fā)生變化與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客詳情測試3點擊去私信,未輸入的情況下點擊確定不能正常發(fā)送,給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理博客詳情測試4點擊去私信,正常輸入內(nèi)容后點擊確定可以發(fā)送成功,且在私信中心可以看到發(fā)送的信息與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作由上表可知博客中心模塊測試都是符合預(yù)期結(jié)果的。具體測試結(jié)果如下圖6-39至圖6-46所示:圖6-39進(jìn)入博客中心界面示意圖圖6-40按標(biāo)題搜索示意圖圖6-41按作者名搜索示意圖圖6-42進(jìn)入詳情界面示意圖圖6-43點贊取消示意圖圖6-44未輸入確定提示圖圖6-45正常私信留言示意圖圖6-46私信留言后私信中心示意圖修改個人信息模塊測試對修改個人信息模塊測試流程如下表6-7所示。表6-7修改個人信息模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述修改個人信息測試1進(jìn)入賬號設(shè)置界面顯示頭像、賬號、昵稱和簡介與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作修改個人信息測試2修改頭像右上角會跟隨變化與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作修改個人信息測試3修改昵稱過長無法修改,給出錯誤提示與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理修改個人信息測試4修改昵稱右上角會更隨變化與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作修改個人信息測試5修改簡介更改成功與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作個人密碼測試1不輸入的情況下點擊確認(rèn)按鈕無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試2只輸入舊密碼的情況下確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試3只輸入新密碼的情況下確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試4只輸入確認(rèn)新密碼的情況下確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試5在輸入舊密碼和新密碼的情況下卻無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試6在輸入舊密碼和確認(rèn)新密碼的情況下確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試7在輸入新密碼和確認(rèn)新密碼的情況下確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試8在舊密碼,新密碼,確認(rèn)新密碼均輸入的情況下,就密碼輸入錯誤確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試9在舊密碼,新密碼,確認(rèn)新密碼均輸入的情況下,新密碼過短確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試10在舊密碼,新密碼,確認(rèn)新密碼均輸入的情況下,新密碼和確認(rèn)新密碼不一致確認(rèn)無法修改,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理個人密碼測試11在舊密碼,新密碼,確認(rèn)新密碼均輸入正確的情況下確認(rèn)修改成功,給出提示與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作由上表可知個人信息修改模塊的測試均符合預(yù)期結(jié)果。具體測試結(jié)果如下圖6-47至圖6-54所示:圖6-47修改頭像示意圖圖6-48修改完成后示意圖圖6-49昵稱過長提示圖圖6-50昵稱和簡介修改示意圖圖6-51都不輸入提示圖圖6-52輸入錯誤舊密碼提示圖圖6-53輸入錯誤確認(rèn)新密碼提示圖圖6-54正常修改面示意圖用戶管理模塊測試對用戶管理模塊測試流程如下表6-8所示。表6-8用戶管理模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述用戶管理模塊測試1管理員進(jìn)入用戶管理界面正常顯示除自己以外的用戶列表與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作用戶管理模塊測試2輸入用戶姓名后搜索正常顯示符合條件的用戶輸入框中無法輸入文字測試系統(tǒng)功能的正常工作用戶管理模塊測試3對某個用戶點擊修改權(quán)限按鈕該用戶權(quán)限顯示管理員,且無法對其進(jìn)行刪除與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作用戶管理模塊測試4直接點擊刪除按鈕無法刪除,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作用戶管理模塊測試5選擇刪除的用戶,然后點擊刪除按鈕,在提示界面選擇取消彈窗消失,且用戶沒有被刪除與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作用戶管理模塊測試6選擇刪除的用戶,然后點擊刪除按鈕,在提示界面選擇確定用戶被正常刪除刪除后用戶列表沒有刷新,需要手動刷新測試系統(tǒng)功能的正常工作由上表可知用戶管理模塊測試2和用戶管理模塊測試6出現(xiàn)了錯誤。經(jīng)過排查用戶管理模塊測試2的原因是輸入框沒有雙向綁定,除此以外搜索的按鈕沒有綁定點擊事件。用戶管理模塊測試6的原因是在重新調(diào)用getUsersInfo(this.pageNum)函數(shù)時沒有加this,導(dǎo)致沒有調(diào)用該函數(shù)。經(jīng)修改后,具體測試結(jié)果如下圖6-55至圖6-61所示:圖6-55用戶管理界面示意圖圖6-56名字搜索示意圖圖6-57修改權(quán)限提示圖圖6-58修改成功后示意圖圖6-59直接點擊刪除按鈕提示圖圖6-60刪除用戶提示圖圖6-61刪除成功后示意圖博客管理模塊測試對博客管理模塊測試流程如下表6-9所示。表6-9博客管理模塊測試流程測試名稱測試用例預(yù)期結(jié)果實際結(jié)果測試描述博客管理模塊測試1管理員進(jìn)入博客管理界面正常顯示除自己以外的博客列表,且過長標(biāo)題和內(nèi)容會被省略與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客管理模塊測試2輸入標(biāo)題后搜索正常顯示符合條件的博客與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客管理模塊測試3輸入作者姓名后搜索正常顯示符合條件的博客與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客管理模塊測試4雙擊點擊某一行博客進(jìn)入博客詳情界面與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客管理模塊測試5直接點擊刪除按鈕無法刪除,給出錯誤提示信息與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客管理模塊測試6選擇刪除的博客,然后點擊刪除按鈕,在提示界面選擇取消彈窗消失,且博客沒有被刪除與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作博客管理模塊測試7選擇刪除的博客,然后點擊刪除按鈕,在未輸入原因的情況下,點擊確定無法正確提交,給出錯誤體會與預(yù)期結(jié)果一致測試系統(tǒng)異常輸入的處理博客管理模塊測試8選擇刪除的博客,然后點擊刪除按鈕,輸入原因,然后點擊確定正常刪除,且列表中消失,被刪除的用戶會收到消息。與預(yù)期結(jié)果一致測試系統(tǒng)功能的正常工作由上表可知博客管理模塊全都符合預(yù)期的結(jié)果。具體測試結(jié)果如下圖6-62至圖6-69所示:圖6-62博客管理界面示意圖圖6-63輸入標(biāo)題后搜索示意圖圖6-64輸入作者姓名示意圖圖6-65進(jìn)入詳情界面示意圖圖6-66直接點擊刪除提示圖圖6-67未輸入原因提示圖圖6-68刪除成功后示意圖圖6-69刪除成功后收到消息示意圖6.3系統(tǒng)接口測試系統(tǒng)的接口在功能測試中已經(jīng)顯示全部可用,因此無需再重復(fù)測試。本小結(jié)僅以張三獲取個人博客為例,接口為/getBlogsByUid,請求方式為GET,參數(shù)為張三id,頁面為1,搜索內(nèi)容空。下圖6-70為張三獲取個人博客的接口測試。圖6-70張三獲取個人博客的接口測試示意圖6.4本章小結(jié)雖然開發(fā)固然重要,但是測試仍然不能忽視。不能理所當(dāng)然認(rèn)為這個功能可以實現(xiàn),就不去測試了,這樣會在交付測試的時候給人帶來巨大的困擾。除此以外,對于本系統(tǒng)一些反饋交互上仍然有些不夠理想,也許在以后的學(xué)習(xí)中,能夠?qū)@些方面有更好的理解和設(shè)計模式。結(jié)束語7結(jié)束語本問針對博客系統(tǒng)進(jìn)行了系統(tǒng)分析、系統(tǒng)總體設(shè)計、系統(tǒng)詳細(xì)設(shè)計、系統(tǒng)實現(xiàn)的描述以及最后的系統(tǒng)測試報告。通過這些方面希望讀者能夠更好了解該系統(tǒng)的功能設(shè)計,為他人提供一些設(shè)計上的思路。在系統(tǒng)中使用了基于物品的協(xié)同過濾算法,這是本人首次在系統(tǒng)中嘗試加入算法的功能。對于這個功能參考了很多的文獻(xiàn),以及他人的一些設(shè)計方式,最后以自己的想法整合到本系統(tǒng)中。由于是以最低的限度實現(xiàn)的推薦功能,因此在代碼的書寫上可能沒有那么精煉,有些地方有更好的改進(jìn)方式,這里也請見諒。在本系統(tǒng),個人認(rèn)為比較核心的功能是博客的創(chuàng)建和編輯以及他們的呈現(xiàn)。由于一篇博客理所當(dāng)然的會結(jié)合圖片和文字,但是先前本人從沒嘗試過在輸入框中添加圖片,因此在開發(fā)前甚為煩惱。一次偶然發(fā)現(xiàn)了vue-quill-editor富文本框,這個同時解決了在輸入框中輸入圖片和再次呈現(xiàn)的問題。首先是放圖片,可以配合ElementUI的上傳圖片組件,實現(xiàn)上傳。接著是再次呈現(xiàn),由于會有博客列表,此時不應(yīng)該在內(nèi)容簡介里就有圖片,而這個富文本編輯器很貼心的有html和content的內(nèi)容,完全將html和文本內(nèi)容分隔開來,后續(xù)數(shù)據(jù)庫的設(shè)計也是照此進(jìn)行的。不過由于對這個編輯器還不是很熟練,所以還會有點小問題,但最低限度地實現(xiàn)功能是沒有問題的。在系統(tǒng)中仍有一些不滿意和欠缺的地方。比如管理員的功能太過死板,只有登錄、管理信息和修改個人信息。如果對博客系統(tǒng)的管理員需求了解的更加透徹的話,管理員的功能會設(shè)計得更好些。這樣就可以顯得一般用戶和管理的功能數(shù)量以及復(fù)雜度平衡些。還有一點就是一些刷新上的問題,有些請求或許比預(yù)想的要花費時間,而這在等待的過程中應(yīng)該引入一些等待動畫,這樣可以提高用戶使用的滿意度。不然在完成某些功能操作后,直接發(fā)生想刷新一樣的改變,使得用戶體驗起來不是很好。在這次開發(fā)中也學(xué)習(xí)到了很多,雖然還有很多的不成熟,但是也請各位讀者見諒,后續(xù)等慢慢積累了經(jīng)驗,也會使開發(fā)風(fēng)格更加成熟。參考文獻(xiàn)參考文獻(xiàn)[1]武曉莉.中國網(wǎng)民規(guī)模達(dá)10.32億[N].中國消費者報,2022-03-03(003).DOI:10.28867/ki.nxfzb.2022.000442.[2]余思源,張偉.基于JAVA的個人博客系統(tǒng)的設(shè)計與實現(xiàn)[J].電腦知識與技術(shù),2018,14(17):129-131.DOI:10.14004/ki.ckt.2018.1833.[3]閔亮,薛格格,張玉欣,趙彩.基于Node.JS博客系統(tǒng)的設(shè)計與實現(xiàn)[J].電子設(shè)計工程,2022,30(07):37-41.DOI:10.14022/j.issn1674-6236.2022.07.008.[4]劉子凡,郭昱君.基于SpringBoot+Mybatis的個人博客系統(tǒng)設(shè)計與實現(xiàn)[J].現(xiàn)代信息科技,2021,5(08):104-107+111.DOI:10.19850/ki.2096-4706.2021.08.029.[5]AlamdariPM,NavimipourNJ,HosseinzadehM,etal.AsystematicstudyontherecommendersystemsintheE-commerce[J].IEEEAccess,2020(8):115694-115716.[6]WangYC.Researchonrecommendationalgorithmbasedoncollaborativefilteringoffusionmodel[J].JournalofPhysics:ConferenceSeries,2021,1774(1):012058.[7]劉國麗,徐洪楠,譚有倩.結(jié)合專家信任的協(xié)同過濾推薦算法研究[J].計算機(jī)與現(xiàn)代化,2022(11):60-68.[8]HEXN,LIAOLZ,ZHANGHW,etal.Neuralcollaborativefiltering[C]//Proceedingsofthe26thinternationalconferenceonworldwideweb,Perth,Apr3-7,2017.NewYork:ACM,2017:173-182.[9]ChunxiaZhang,MingYang,JingLv,WanqiYang.AnImprovedHybridCollaborativeFilteringAlgorithmBasedonTagsandTimeFactor[J].BigDataMiningandAnalytics,2018,1(02):128-136.[10]LindenG,SmithB,YorkJ.Arecommendations:itemto-itemcollaborativefiltering[J].IEEEInternetComputing,2003,7(1):76-80.[11]KarypisG.Evaluationofitem-basedtop-Nrecommendationalgorithms[C]//ProceedingsofthetenthinternationalconferenceonInformationandknowledgemanagement.2001:247-254.[12]董沛然.SQL注入漏洞的防范措施[J].數(shù)字通信世界,2023(01):62-65.[13]童松鉛,楊艷紅.“全映蘇應(yīng)校園說”校園博客系統(tǒng)的研發(fā)[J].電腦知識與技術(shù),2020,16(14):118-119.DOI:10.14004/ki.ckt.2020.1519.[14]藍(lán)燕,曾樹洪.圖書館校園博客服務(wù)WebApp設(shè)計[J].現(xiàn)代計算機(jī)(專業(yè)版),2017(21):74-78.[15]袁偉恒,薄小永,蘇迅,等.基于“互聯(lián)網(wǎng)+”的博客系統(tǒng)研究與開發(fā)[J].科技經(jīng)濟(jì)導(dǎo)刊,2020,28(36):34-35,38附錄附錄附錄1用戶登錄關(guān)鍵代碼登錄的前端代碼:

checkPassword(rule,value,callback){

axios({

url:"http://localhost:5000/blog/login",

method:"POST",

data:this.form,

}).then((res)=>{

console.log(res);

if(res.data.code==200){

window.sessionStorage.setItem(

"user",

JSON.stringify(res.data.extend.user)

);

this.userInfo=res.data.extend.user;

callback();

}else{

this.$refs.form.resetFields();

callback(newError("用戶名或密碼錯誤"));

}

});

},登錄的后端代碼:@RequestMapping(value="/login",method={RequestMethod.POST}) @ResponseBody publicResultMsgcheckUser(@RequestBodyUsersu){ //獲取賬號和密碼 Stringmobile=u.getUsersMobile(); Stringpassword=u.getUsersPassword(); //調(diào)用CheckUser,返回用戶信息 List<Users>list=usersService.checkUser(mobile,password); //未查找到,說明賬號或密碼錯誤,給出錯誤提示 if(list.size()==0){ returnResultMsg.fail(); } //能夠查找到獲取用戶的信息 Usersuser=list.get(0); returnResultMsg.success().add("user",user); }附錄2用戶注冊關(guān)鍵代碼用戶注冊后端代碼: /* *注冊用戶 */ @ResponseBody @RequestMapping(value="/createUser",method=RequestMethod.POST) publicResultMsgcreateUser(@RequestBodyUsersuser){ user.setUsersBlogs(0); user.setUsersLikes(0); user.setUsersPic("/0/88/03b0d39583f48206768a7534e55bcpng.png"); user.setUsersStatus(1); usersService.createUser(user); returnResultMsg.success(); }附錄3個人信息修改關(guān)鍵代碼基本信息修改的前端代碼:

confirm(){

this.$refs.form.validate((valid)=>{

if(valid){

axios({

url:"http://localhost:5000/blog/updateUser",

method:"POST",

data:this.form,

}).then((res)=>{

window.sessionStorage.clear();

window.sessionStorage.setItem(

"user",

JSON.stringify(res.data.extend.user)

);

this.$message({

showClose:true,

message:"修改成功",

type:"success",

});

this.getUserInfo();

this.$router.go(0);

});

}else{

returnfalse;

}

});

},用戶更新后端代碼: /* *更新用戶 */ @ResponseBody @RequestMapping(value="/updateUser",method=RequestMethod.POST) publicResultMsgupdateUser(@RequestBodyUsersuser){ Usersu=usersService.updateUser(user); returnResultMsg.success().add("user",u); }附錄4博客查看關(guān)鍵代碼博客查看的前端代碼:

getBlogInfo(num){

this.pageNum=num;

//獲取博客信息

axios({

url:"http://localhost:5000/blog/getBlogByUid",

method:"get",

params:{

usersId:this.userInfo.usersId,

pn:this.pageNum,

search:this.search,

},

}).then((res)=>{

console.log(res);

this.blogInfo=res.data.extend.pageInfo.list;

this.pages=res.data.extend.pageInfo.pages;

this.pageTotal=res.data.extend.pageInfo.total;

});

},博客查看的后端代碼:@ResponseBody @RequestMapping("/getBlogByUid") publicResultMsggetBlogByUid(@RequestParam(value="usersId")IntegerusersId, @RequestParam(value="pn",defaultValue="1")Integerpn,@RequestParam(value="search")Stringsearch){ //引入pageHelper分頁插件 //調(diào)用,傳入頁碼,每頁的大小設(shè)置為5 PageHelper.startPage(pn,5); List<Blog>list=blogService.getBlogByUid(usersId,search); //設(shè)置每頁數(shù)據(jù)顯示的大小 PageInfopage=newPageInfo(list,5); returnResultMsg.success().add("pageInfo",page); }附錄5博客創(chuàng)建或編輯關(guān)鍵代碼創(chuàng)建或編輯的前端代碼:init()是初始化判斷此次是創(chuàng)建還是編輯,createContent()是編輯的情況下獲取博客信息。

init(){

console.log(this.$route.params.id);

if(this.$route.params.id){

this.createContent();

}else{

this.userInfo=sessionStorage.getItem("user")

?JSON.parse(sessionStorage.getItem("user"))

:{};

this.quillForm.blogUid=this.userInfo.usersId;

}

},

createContent(){

axios({

url:"http://localhost:5000/blog/getBlogByBId",

method:"get",

params:{

blogId:this.$route.params.id,

},

}).then((res)=>{

console.log(res);

this.quillForm=res.data.extend.blog;

});

},創(chuàng)建或編輯的保存前端代碼:

//最后的提交數(shù)據(jù),此處有表單驗證

submit(formName){

this.$refs[formName].validate((valid)=>{

if(valid){

console.log(JSON.stringify(this.quillForm));

axios({

url:"http://localhost:5000/blog/createOrUpdateBlog",

method:"post",

data:this.quillForm,

}).then((res)=>{

console.log(res);

if(!this.$route.params.id){

this.$refs.quillForm.resetFields();

window.sessionStorage.clear();

window.sessionStorage.setItem(

"user",

JSON.stringify(res.data.extend.user)

);

}

this.$message({

message:"保存成功",

type:"success",

});

});

}else{

returnfalse;

}

});

},創(chuàng)建或編輯博客的后端代碼:/* *創(chuàng)建或更新博客內(nèi)容 */ @RequestMapping(value="/createOrUpdateBlog",method=RequestMethod.POST) @ResponseBody publicResultMsgcreateOrUpdateBlog(@RequestBodyBlogblog){ //判斷博客的id是否為空若為空則是創(chuàng)建否做是更新 if(blog.getBlogId()==null){ Datedate=newDate(); SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd"); blog.setBlogCreate(sdf.format(date)); blog.setBlogLikes(0); blogService.createBlog(blog); //重新計數(shù)博客數(shù)量 Integernum=blogService.countBlog(blog.getBlogUid()); Usersu=newUsers(); u.setUsersId(blog.getBlogUid()); u.setUsersBlogs(num); Usersuser=usersService.updateUser(u); returnResultMsg.success().add("user",user); }else{ blogService.updateBlog(blog); returnResultMsg.success(); } }附錄6博客詳情關(guān)鍵代碼發(fā)送請求:

init(){

console.log(this.$route.params.id);

axios({

url:"http://localhost:5000/blog/getBlogByBId",

method:"get",

params:{

blogId:this.$route.params.id,

},

}).then((res)=>{

console.log(res);

this.blogInfo=res.data.extend.blog;

});

},博客詳情的后端代碼: /* *獲取單條博客信息 */ @ResponseBody @RequestMapping("/getBlogByBId") publicResultMsggetBlogByBId(@RequestParam(value="blogId")IntegerblogId){ //獲取博客信息 Blogblog=blogService.getBlogByBId(blogId); returnResultMsg.success().add("blog",blog); }附錄7點贊行為關(guān)鍵代碼愛心的html設(shè)計:

<i

class="el-icon-thirdaixin1heart"

style="color:red"

v-if="isExist"

@click="changeLove"

></i>

<iclass="el-icon-thirdaixinheart"v-else@click="changeLove"></i>改變喜愛狀態(tài)的前端代碼:

changeLove(){

axios({

url:"http://localhost:5000/blog/createOrUpdateLove",

method:"get",

params:{

usersId:this.userInfo.usersId,

blogId:this.$route.params.id,

writerId:this.otherUserInfo.usersId,

},

}).then((res)=>{

console.log(res);

this.isExist=res.data.extend.isLove;

this.init();

});

},改變喜愛狀態(tài)的后端代碼/* *創(chuàng)建或更新喜歡行為 */ @ResponseBody @RequestMapping("/createOrUpdateLove") publicResultMsgcreateOrUpdateLove(@RequestParam(value="usersId")IntegerusersId, @RequestParam(value="blogId")IntegerblogId,@RequestParam(value="writerId")IntegerwriterId){ List<Love>loves=loveService.getLove(usersId,blogId); //如果長度為0則數(shù)據(jù)庫中不存在則添加 if(loves.size()==0){ loveService.createLove(usersId,blogId,writerId); returnResultMsg.success().add("isLove",true); } //不為0則修改喜歡行為 Lovelove=loves.get(0); BooleanisLove=love.getLoveAction()==1?false:true; if(love.getLoveAction()==1){ love.setLoveAction(0); }else{ love.setLoveAction(1); } loveService.updateLove(love); //更新博客的被點贊數(shù)量 //統(tǒng)計所有喜歡該博客的數(shù)量 Integernum=loveService.countLoveByBid(blogId); Blogblog=newBlog(); blog.setBlogId(blogId); blog.setBlogLikes(num); blogService.updateBlog(blog); //更新作者的被點贊數(shù)量 //統(tǒng)計喜愛表中所有作者id為writerId的數(shù)量 Integernum2=loveService.countLoveByUid(writerId); Usersuser=newUsers(); user.setUsersId(writerId); user.setUsersLikes(num2); usersService.updateUser(user); returnResultMsg.success().add("isLove",isLove); }附錄8私信留言關(guān)鍵代碼私信留言確認(rèn)前端代碼:

confirm(){

if(!this.text){

this.$message({type:"warning",message:"請輸入內(nèi)容"});

return;

}

axios({

url:"http://localhost:5000/blog/createChat",

method:"post",

params:{

usersId:this.userInfo.usersId,

targetId:this.otherUserInfo.usersId,

content:this.text,

},

}).then((res)=>{

this.dialogVisible=false;

this.$message({

showClose:true,

message:"發(fā)送成功",

type:"success",

});

});

},私信留言后端代碼:/* *創(chuàng)建聊天內(nèi)容 */ @RequestMapping("/createChat") @ResponseBody publicResultMsgcreateChat(@RequestParam(value="usersId")IntegerusersId, @RequestParam(value="targetId")IntegertargetId,@RequestParam(value="content")Stringcontent){ //實例化聊天消息對象 Chatchat=newChat(); chat.setFromUser(usersId); chat.setToUser(targetId); chat.setChatContent(content); //設(shè)置為未讀 chat.setReadFlag(0); chatService.saveChat(chat); //判斷消息表中是否有A對B的相應(yīng)數(shù)據(jù) IntegermsgId=msgService.isExistMsg(usersId,targetId); if(msgId==null){ //說明消息表中不存在,執(zhí)行新建 Msgmsg=newMsg(); msg.setMsgFrom(usersId); msg.setMsgTo(targetId); msg.setMsgUnread(1); msgService.saveMsg(msg); }else{ //說明消息表中存在,執(zhí)行更新 //統(tǒng)計聊天信息中未讀數(shù)量 intnum=chatService.countReadFlag(usersId,targetId); //執(zhí)行更新操作 msgService.updateMsg(msgId,num); } //判斷消息表中是否有B對A的相應(yīng)數(shù)據(jù) IntegermsgId2=msgService.isExistMsg(targetId,usersId); if(msgId2==null){ //說明消息表中不存在,執(zhí)行新建 Msgmsg=newMsg(); msg.setMsgFrom(targetId); msg.setMsgTo(usersId); //這里因為是B對A因此無需設(shè)置未讀數(shù)量 msg.setMsgUnread(0); msgService.saveMsg(msg); }else{ //說明消息表中存在,執(zhí)行更新 //統(tǒng)計聊天信息中未讀數(shù)量 intnum=chatService.countReadFlag(targetId,usersId); //執(zhí)行更新操作 msgService.updateMsg(msgId2,num); } returnResultMsg.success(); }附錄9私信中心關(guān)鍵代碼發(fā)送按鈕的前端代碼:

send(){

if(!this.targetInfo.usersId){

this.$message({type:"warning",message:"請選擇聊天對象"});

return;

}

if(!this.text){

this.$message({type:"warning",message:"請輸入內(nèi)容"});

}else{

if(typeofWebSocket=="undefined"){

console.log("您的瀏覽器不支持WebSocket");

}else{

console.log("您的瀏覽器支持WebSocket");

//組裝待發(fā)送的消息json

//{"from":"zhang","to":"admin","text":"聊天文本"}

letmessage={

fromUser:this.userInfo.usersId,

toUser:this.targetInfo.usersId,

chatContent:this.text,

};

//將組裝好的json發(fā)送給服務(wù)端,由服務(wù)端進(jìn)行轉(zhuǎn)發(fā)

socket.send(JSON.stringify(message));

//放到頁面上

this.chatList.push(message);

this.scrollToBottom();

//清空

this.text="";

//刷新消息列表

this.getMsgList(this.pageNum);

}

}

},發(fā)送按鈕的后端代碼:@OnMessage publicvoidonMessage(Stringmessage,Sessionsession,@PathParam("usersId")IntegerusersId){ ("服務(wù)端收到用戶usersId={}的消息:{}",usersId,message); JSONObjectobj=JSONUtil.parseObj(message); //獲取接收消息者和發(fā)送的內(nèi)容 StringtoUserStr=obj.getStr("toUser"); Stringcontent=obj.getStr("chatContent"); //將接受消息者的id轉(zhuǎn)化為id,在存儲數(shù)據(jù)庫和返回到前端時需要為數(shù)字整型 IntegertoUser=Integer.valueOf(toUserStr); //首先將數(shù)據(jù)存入數(shù)據(jù)庫中 //在這里無法注入Service所以使用這種方式注入Service if(chatService==null){ this.chatService=(ChatService)SpringContextUtil.getBean("chatService"); } //實例化聊天消息對象 Chatchat=newChat(); chat.setFromUser(usersId); chat.setToUser(toUser); chat.setChatContent(content); //設(shè)置為未讀 chat.setReadFlag(0); chatService.saveChat(chat); //更新消息表中相應(yīng)的記錄 if(msgService==null){ this.msgService=(MsgService)SpringContextUtil.getBean("msgService"); } //判斷消息表中是否有相應(yīng)數(shù)據(jù) IntegermsgId=msgService.isExistMsg(usersId,toUser); if(msgId==null){ //說明消息表中不存在,執(zhí)行新建 Msgmsg=newMsg(); msg.setMsgFrom(usersId); msg.setMsgTo(toUser); msg.setMsgUnread(1); msgService.saveMsg(msg); }else{ //說明消息表中存在,執(zhí)行更新 //統(tǒng)計聊天信息中未讀數(shù)量 intnum=chatService.countReadFlag(usersId,toUser); //執(zhí)行更新操作 msgService.updateMsg(msgId,num); } //將接受消息者給發(fā)送消息者的聊天消息全部設(shè)置為已讀 chatService.updateRead(usersId,toUser); //將接受消息者給發(fā)送消息者的消息的未讀數(shù)量設(shè)置為0 msgService.updateUnRead(usersId,toUser); //根據(jù)toUser來獲取session,再通過session發(fā)送消息文本 SessiontoSession=sessionMap.get(toUserStr); //服務(wù)器端再把消息組裝一下,組裝后的消息包含發(fā)送人和發(fā)送的文本內(nèi)容 //{"fromUser":"1","toUser":"2""text":"hello"} JSONObjectjsonObject=newJSONObject(); jsonObject.set("fromUser",usersId); jsonObject.set("toUser",toUser); jsonObject.set("chatContent",content); //發(fā)送信息 this.sendMessage(jsonObject.toString(),toSession); ("發(fā)送給用戶workerName={},消息:{}",toUser,jsonObject.toString()); }瀏覽器端收消息的前端代碼

socket.onmessage=function(msg){

console.log("收到數(shù)據(jù)===="+msg.data);

letdata=JSON.parse(msg.data);

if(data.fromUser===_this.targetInfo.usersId){

_this.chatList.push(data);

_this.scrollToBottom();

}

_this.getMsgList(this.pageNum);

};附錄10推薦中心關(guān)鍵代碼推薦中心后端算法核心代碼://獲取按照點贊數(shù)量排序的博客列表 //去除自己的博客 List<Blog>list=blogService.getBlogsOrderByLike(usersId); List<Love>likeLists;//其他用戶喜歡的博客列表 List<Users>users=usersService.getUsers(usersId,"");//除了自己的所有用戶列表 //除了自己的所有博客列表 List<Blog>blogs=blogService.getBlogsOrderById(usersId); intmaxId=blogs.get(0).getBlogId(); intlength=maxId+5; int[][]curMatrix=newint[length][length];//當(dāng)前矩陣 int[][]comMatrix=newint[length][length];//共現(xiàn)矩陣 int[]N=newint[length];//喜歡每個博客的人數(shù) for(Usersuser:users){ likeLists=loveService.getLoveById(user.getUsersId());//當(dāng)前用戶的喜歡列表 for(inti=0;i<length;i++) for(intj=0;j<length;j++) curMatrix[i][j]=0;//清空矩陣 for(inti=0;i<likeLists.size();i++){ intbid1=likeLists.get(i).getLoveBid(); ++N[bid1]; for(intj=i+1;j<likeLists.size();j++){ intbid2=likeLists.get(j).getLoveBid(); ++curMatrix[bid1][bid2]; ++curMatrix[bid2][bid1];//兩兩加一 } } //累加所有矩陣,得到共現(xiàn)矩陣 for(inti=0;i<blogs.size();i++){ for(intj=0;j<blogs.size();j++){ intbid1=blogs.get(i).getBlogId(),bid2=blogs.get(j).getBlogId(); comMatrix[bid1][bid2]+=curMatrix[bid1][bid2]; comMatrix[bid2][bid1]+=curMatrix[bid2][bid1]; } } } TreeSet<Blog>preList=newTreeSet<Blog>(newComparator<Blog>(){ @Override publicintcompare(Blogo1,Blogo2){ if(o1.getW()!=o2.getW()) return(int)((o1.getW()-o2.getW())*100); elseif(o1.getBlogLikes()!=o2.getBlogLikes()) returno1.getBlogLikes()-o2.getBlogLikes(); else return-1; } });//預(yù)處理的列表 likeLists=loveService.getLoveById(usersId);//當(dāng)前用戶喜歡的博客列表 boolean[]used=newboolean[length];//判重數(shù)組 for(Lovelike:likeLists){ intNij=0;//既喜歡i又喜歡j的人數(shù) doubleWij;//相似度 Blogtmp;//當(dāng)前的博客 inti=like.getLoveBid(); for(Blogblog:blogs){ if(like.getLoveBid()==blog.getBlogId()) continue;//去除自己喜歡的博客 intj=blog.getBlogId(); if(N[i]*N[j]==0){ Wij=0; }else{ Nij=comMatrix[i][j]; Wij=(double)Nij/Math.sqrt(N[i]*N[j]);//計算余弦相似度 } tmp=blogService.getBlogByBId(blog.getBlogId()); tmp.setW(Wij); if(used[j]) continue; if(Wij!=0.0){ System.out.println(tmp.getBlogId()); preList.add(tmp); used[tmp.getBlogId()]=true; } } }附錄11管理員博客管理關(guān)鍵代碼這部分只提供批量刪除博客的代碼批量刪除前端代碼:

del(){

//獲取復(fù)選框的選擇情況

letselection=this.$refs.gridTable.selection;

//如果未選擇任何復(fù)選框則給出相應(yīng)的提示

if(selection==null||selection.length==0){

this.$message({

showClose:true,

message:"請選擇一條信息",

type:"warning",

});

return;

}

this.dialogVisible=true;

},

confirm(){

if(!this.text){

this.$message({

showClose:true,

message:"請輸入內(nèi)容",

type:"warning",

});

return;

}

letselection=this.$refs.gridTable.selection;

letids=selection.map((item)=>item.blogId).join(",");

axios({

url:"http://localhost:5000/blog/delBlogs",

method:"post",

params:{

usersId:this.userInfo.usersId,

ids:ids,

text:this.text,

},

}).then((res)=>{

this.dialogVisible=false;

this.$message({

showClose:true,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論