版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
本科生畢業(yè)論文(設(shè)計)題目springboot網(wǎng)絡(luò)云端日記本系統(tǒng)學(xué)院XXXXX專業(yè)班級XXXXX用戶姓名XXXX指導(dǎo)教師XXXX撰寫日期:2023年3月目錄TOC\o"1-3"\h\u摘要 .3系統(tǒng)開發(fā)技術(shù)的特色(1)網(wǎng)絡(luò)云端日記本系統(tǒng)中的web后臺管理中的后端不再使用古老的jsp+javabean+servlet技術(shù),而是使用當(dāng)前主流的springboot框架,它減少java配置代碼,簡化編程代碼,目前springboot框架也是很多企業(yè)選擇的框架之一。(2)網(wǎng)絡(luò)云端日記本系統(tǒng)中的web后臺管理中的前端使用的是JavaScript框架,它配合ajax[8]和jquery可以美化頁面設(shè)計。(3)網(wǎng)絡(luò)云端日記本系統(tǒng)中數(shù)據(jù)庫用的mysql5.7,它執(zhí)行效率高。1.4springboot框架介紹Spring框架是Java平臺上的一種開源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來讓它作為EJB(EnterpriseJavaBeans)模型的補(bǔ)充,甚至是替補(bǔ)。Spring框架為開發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)的核心特性,并通過依賴注入實(shí)現(xiàn)控制反轉(zhuǎn)來實(shí)現(xiàn)管理對象生命周期容器化,利用面向切面編程進(jìn)行聲明式的事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪問,提供大量優(yōu)秀的Web框架方便開發(fā)等等。Spring框架具有控制反轉(zhuǎn)(IOC)特性,IOC旨在方便項目維護(hù)和測試,它提供了一種通過Java的反射機(jī)制對Java對象進(jìn)行統(tǒng)一的配置和管理的方法。Spring框架利用容器管理對象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對象,開發(fā)者可以通過依賴查找或依賴注入來獲得對象。Spring框架具有面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時運(yùn)行時可配置;AOP框架主要針對模塊之間的交叉關(guān)注點(diǎn)進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務(wù)管理、遠(yuǎn)程訪問等功能均可以通過使用SpringAOP技術(shù)實(shí)現(xiàn)。Spring的事務(wù)管理框架為Java平臺帶來了一種抽象機(jī)制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點(diǎn)一起工作,并且?guī)缀蹩梢栽贘ava平臺的任何環(huán)境中工作。Spring集成多種事務(wù)模板,系統(tǒng)可以通過事務(wù)模板、XML或Java注解進(jìn)行事務(wù)配置,并且事務(wù)框架集成了消息傳遞和緩存等功能。Spring的數(shù)據(jù)訪問框架解決了開發(fā)人員在應(yīng)用程序中使用數(shù)據(jù)庫時遇到的常見困難。它不僅對Java:JDBC、iBATS/MyBATIs、Hibernate、Java數(shù)據(jù)對象(JDO)、ApacheOJB和ApacheCayne等所有流行的數(shù)據(jù)訪問框架中提供支持,同時還可以與Spring的事務(wù)管理一起使用,為數(shù)據(jù)訪問提供了靈活的抽象。Spring框架最初是沒有打算構(gòu)建一個自己的WebMVC框架,其開發(fā)人員在開發(fā)過程中認(rèn)為現(xiàn)有的StrutsWeb框架的呈現(xiàn)層和請求處理層之間以及請求處理層和模型之間的分離不夠,于是創(chuàng)建了SpringMVC。2網(wǎng)絡(luò)云端日記本系統(tǒng)分析系統(tǒng)分析是開發(fā)一個項目的先決條件,通過系統(tǒng)分析可以很好的了解系統(tǒng)的主體用戶的基本需求情況,同時這也是項目的開發(fā)的原因。進(jìn)而對系統(tǒng)開發(fā)進(jìn)行可行性分析,通常包括技術(shù)可行性、經(jīng)濟(jì)可行性等,可行性分析同時也是從項目整體角度進(jìn)行的分析。然后就是對項目的具體需求進(jìn)行分析,分析的手段一般都是通過用戶的用例圖來實(shí)現(xiàn)。下面是詳細(xì)的介紹。2.1可行性分析(1)技術(shù)可行性分析網(wǎng)絡(luò)云端日記本系統(tǒng)存儲所使用的是mysql數(shù)據(jù)庫以及開發(fā)中所使用的是IDEA、Tomcat這些開發(fā)工具的使用,能夠給我們的編寫工作帶來許多的便利。系統(tǒng)使用springboot框架進(jìn)行開發(fā),使系統(tǒng)的可擴(kuò)展性和維護(hù)性更佳,減少java配置代碼,簡化編程代碼,目前springboot框架也是很多企業(yè)選擇的框架之一。(2)經(jīng)濟(jì)可行性分析在開發(fā)網(wǎng)絡(luò)云端日記本系統(tǒng)中所使用的開發(fā)軟件像IDEA開發(fā)工具、Tomcat8.0服務(wù)器、MySQL5.7數(shù)據(jù)庫、Photoshop圖片處理軟件等,這些都是開源免費(fèi)的,這些環(huán)境在學(xué)校都進(jìn)行了系統(tǒng)的學(xué)習(xí),自己能夠獨(dú)立操作完成,不需要額外花費(fèi),而且系統(tǒng)的開發(fā)工具從網(wǎng)上都可以直接下載,因此在經(jīng)濟(jì)方面是可行的。(3)操作可行性分析此次項目設(shè)計的時候我參考了很多類似系統(tǒng)的成功案例,對它們的操作界面以及功能都進(jìn)行了系統(tǒng)的分析,將眾多案例結(jié)合在一起,突出以人為本簡化操作,所以具有基本計算機(jī)知識的人都會操作本項目。因此操作可行性也沒有問題。2.2系統(tǒng)流程分析業(yè)務(wù)流程是用一些特定的符合和線條來進(jìn)行演示用戶在使用系統(tǒng)時的過程,在進(jìn)行系統(tǒng)分析的時候,業(yè)務(wù)流程可以幫助開發(fā)人員更好的理解業(yè)務(wù),發(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)驗(yàn)證,驗(yàn)證合法通過就顯示增加數(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ù)的話,相關(guān)的管理人員還可以對這些數(shù)據(jù)進(jìn)行刪除,圖2-3就是數(shù)據(jù)刪除時的流程圖。圖2-3數(shù)據(jù)刪除流程圖2.3系統(tǒng)功能分析2.3.1功能性分析網(wǎng)絡(luò)云端日記本系統(tǒng)的設(shè)計與實(shí)現(xiàn)是為了讓使用者更加方便的進(jìn)行管理員工相關(guān)聯(lián)的一些信息,使用者查找管理的時候能夠節(jié)省大量的時間和精力,有效減少不必要的查找時間。系統(tǒng)在功能上劃分為管理員端以及系統(tǒng)用戶這兩大部分。管理員端:(1)個人資料:管理在登錄以后可以修改自己的個人資料以及對自己賬號登錄的密碼進(jìn)行修改;(2)系統(tǒng)用戶:管理員可以對系統(tǒng)中所有的用戶角色進(jìn)行管控,包含了管理員以及系統(tǒng)用戶這兩種角色,如果需要添加新的用戶,點(diǎn)擊頁面中的“添加”按鈕根據(jù)提示輸入上用戶信息,點(diǎn)擊“提交”以后在對應(yīng)的用戶界面就可以查看到了,可以點(diǎn)擊用戶后面的“刪除”按鈕直接刪除某一用戶。(3)日記信息:管理員點(diǎn)擊“日記信息”會顯示出所有的日記信息,支持通過日記信息狀態(tài)或者輸入日記編號或者日記名稱對日記信息進(jìn)行查詢,如果想要添加新的日記信息,點(diǎn)擊“添加”按鈕,輸入相關(guān)信息,點(diǎn)擊“提交”按鈕就可以添加了,同時可以選擇某一條日記信息,點(diǎn)擊“刪除”進(jìn)行刪除。(4)備忘錄信息:管理員點(diǎn)擊“備忘錄信息”會顯示出所有的備忘錄信息,支持輸入標(biāo)題名稱或者用戶信息對備忘錄信息進(jìn)行查詢,如果想要添加新的備忘錄信息,點(diǎn)擊“添加”按鈕,輸入相關(guān)信息,點(diǎn)擊“提交”按鈕就可以添加了,同時可以選擇某一條備忘錄信息,點(diǎn)擊“刪除”進(jìn)行刪除,也可以點(diǎn)擊后面的“提醒”按鈕對備忘錄信息的提醒信息進(jìn)行更新維護(hù);(5)提醒信息:管理員點(diǎn)擊“提醒信息”會顯示出所有的提醒信息,支持通過提醒信息狀態(tài)或者輸入標(biāo)題名稱或者用戶信息對提醒信息進(jìn)行查詢,如果想要添加新的提醒信息,點(diǎn)擊“添加”按鈕,輸入相關(guān)信息,點(diǎn)擊“提交”按鈕就可以添加了,同時可以選擇某一條提醒信息,點(diǎn)擊“刪除”進(jìn)行刪除。(6)公告信息:點(diǎn)擊“公告信息”這個按鈕可以查看到系統(tǒng)中所有的公告信息,支持通過公告編號或者公告標(biāo)題進(jìn)行查詢公告信息,如果想要添加新的公告信息,點(diǎn)擊“添加”按鈕然后根據(jù)提示輸入公告信息,點(diǎn)擊“提交”后,在公告信息界面就會顯示新增的公告信息,可以點(diǎn)擊某一公告信息查看公告信息的詳情,也可以直接點(diǎn)擊“刪除”進(jìn)行刪除公告信息;系統(tǒng)用戶端:(1)注冊登錄:當(dāng)用戶想要對系統(tǒng)中所實(shí)現(xiàn)的功能進(jìn)行查詢管理的時候,就必須進(jìn)行登錄到系統(tǒng)當(dāng)中,如果沒有賬號的話,在登錄界面,點(diǎn)擊“注冊”按鈕就會跳轉(zhuǎn)到注冊的界面,根據(jù)提示填寫好注冊信息,添加提交,用戶的信息在數(shù)據(jù)庫中就添加完成了,然后再輸入填寫好的賬號和密碼進(jìn)行登錄;(2)個人資料:學(xué)生在登錄以后可以修改自己的個人資料以及對自己賬號登錄的密碼進(jìn)行修改;(3)日記信息:管理員點(diǎn)擊“日記信息”會顯示出所有的日記信息,支持通過日記信息狀態(tài)或者輸入日記編號或者日記名稱對日記信息進(jìn)行查詢,如果想要添加新的日記信息,點(diǎn)擊“添加”按鈕,輸入相關(guān)信息,點(diǎn)擊“提交”按鈕就可以添加了,同時可以選擇某一條日記信息,點(diǎn)擊“刪除”進(jìn)行刪除。(4)備忘錄信息:管理員點(diǎn)擊“備忘錄信息”會顯示出所有的備忘錄信息,支持通過標(biāo)題名稱或者用戶信息或者用戶姓名對備忘錄信息進(jìn)行查詢,如果想要添加新的備忘錄信息,點(diǎn)擊“添加”按鈕,輸入相關(guān)信息,點(diǎn)擊“提交”按鈕就可以添加了,同時可以選擇某一條備忘錄信息,點(diǎn)擊“刪除”進(jìn)行刪除。(5)公告信息:點(diǎn)擊“公告信息”這個菜單,可以查看到系統(tǒng)中所有添加的公告信息,支持通過公告編號或者公告標(biāo)題對公告信息進(jìn)行查詢,如果想要了解某一公告信息的詳細(xì)信息,點(diǎn)擊后面的“詳情”會進(jìn)入詳情界面;2.3.2非功能性分析網(wǎng)絡(luò)云端日記本系統(tǒng)的非功能性需求比如網(wǎng)絡(luò)云端日記本系統(tǒng)的安全性怎么樣,可靠性怎么樣,性能怎么樣,可拓展性怎么樣等。具體可以表示在如下3-1表格中:表3-SEQ表3\*ARABIC1網(wǎng)絡(luò)云端日記本系統(tǒng)非功能需求表安全性主要指網(wǎng)絡(luò)云端日記本系統(tǒng)數(shù)據(jù)庫的安裝,數(shù)據(jù)庫的使用和密碼的設(shè)定必須合乎規(guī)范??煽啃钥煽啃允侵妇W(wǎng)絡(luò)云端日記本系統(tǒng)能夠安裝用戶的指示進(jìn)行操作,經(jīng)過測試,可靠性90%以上。性能性能是影響網(wǎng)絡(luò)云端日記本系統(tǒng)占據(jù)市場的必要條件,所以性能最好要佳才好??蓴U(kuò)展性比如數(shù)據(jù)庫預(yù)留多個屬性,比如接口的使用等確保了系統(tǒng)的非功能性需求。易用性用戶只要跟著網(wǎng)絡(luò)云端日記本系統(tǒng)的頁面展示內(nèi)容進(jìn)行操作,就可以了??删S護(hù)性網(wǎng)絡(luò)云端日記本系統(tǒng)開發(fā)的可維護(hù)性是非常重要的,經(jīng)過測試,可維護(hù)性沒有問題2.4系統(tǒng)用例分析網(wǎng)絡(luò)云端日記本系統(tǒng)中系統(tǒng)用戶角色用例圖如圖2-3所示:圖2-3網(wǎng)絡(luò)云端日記本系統(tǒng)系統(tǒng)用戶角色用例圖網(wǎng)絡(luò)云端日記本系統(tǒng)中管理員角色用例圖如圖2-4所示:圖2-4網(wǎng)絡(luò)云端日記本系統(tǒng)管理員角色用例圖2.5本章小結(jié)本章主要通過對網(wǎng)絡(luò)云端日記本系統(tǒng)的可行性分析、流程分析、功能需求分析、系統(tǒng)用例分析,確定整個網(wǎng)絡(luò)云端日記本系統(tǒng)要實(shí)現(xiàn)的功能。同時也為網(wǎng)絡(luò)云端日記本系統(tǒng)的代碼實(shí)現(xiàn)和測試提供了標(biāo)準(zhǔn)。3網(wǎng)絡(luò)云端日記本系統(tǒng)總體設(shè)計本章主要討論的內(nèi)容包括網(wǎng)絡(luò)云端日記本系統(tǒng)的功能模塊設(shè)計、數(shù)據(jù)庫系統(tǒng)設(shè)計。3.1系統(tǒng)架構(gòu)設(shè)計本網(wǎng)絡(luò)云端日記本系統(tǒng)從架構(gòu)上分為三層:表現(xiàn)層(UI)、業(yè)務(wù)邏輯層(BLL)以及數(shù)據(jù)層(DL)。圖3-1網(wǎng)絡(luò)云端日記本系統(tǒng)架構(gòu)設(shè)計圖表現(xiàn)層(UI):又稱UI層,主要完成本網(wǎng)絡(luò)云端日記本系統(tǒng)的UI交互功能,一個良好的UI可以打打提高用戶的用戶體驗(yàn),增強(qiáng)用戶使用本網(wǎng)絡(luò)云端日記本系統(tǒng)時的舒適度。UI的界面設(shè)計也要適應(yīng)不同版本的網(wǎng)絡(luò)云端日記本系統(tǒng)以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用戶進(jìn)行交互操作時必須要得到與之相符的交互結(jié)果,這就要求表現(xiàn)層要與業(yè)務(wù)邏輯層進(jìn)行良好的對接。業(yè)務(wù)邏輯層(BLL):主要完成本網(wǎng)絡(luò)云端日記本系統(tǒng)的數(shù)據(jù)處理功能。用戶從表現(xiàn)層傳輸過來的數(shù)據(jù)經(jīng)過業(yè)務(wù)邏輯層進(jìn)行處理交付給數(shù)據(jù)層,系統(tǒng)從數(shù)據(jù)層讀取的數(shù)據(jù)經(jīng)過業(yè)務(wù)邏輯層進(jìn)行處理交付給表現(xiàn)層。數(shù)據(jù)層(DL):由于本網(wǎng)絡(luò)云端日記本系統(tǒng)的數(shù)據(jù)是放在服務(wù)端的mysql數(shù)據(jù)庫中,因此本屬于服務(wù)層的部分可以直接整合在業(yè)務(wù)邏輯層中,所以數(shù)據(jù)層中只有數(shù)據(jù)庫,其主要完成本網(wǎng)絡(luò)云端日記本系統(tǒng)的數(shù)據(jù)存儲和管理功能。3.2系統(tǒng)功能模塊設(shè)計3.2.1整體功能模塊設(shè)計在上一章節(jié)中主要對系統(tǒng)的功能性需求和非功能性需求進(jìn)行分析,并且根據(jù)需求分析了本網(wǎng)絡(luò)云端日記本系統(tǒng)中的用例。那么接下來就要開始對本網(wǎng)絡(luò)云端日記本系統(tǒng)的架構(gòu)、主要功能和數(shù)據(jù)庫開始進(jìn)行設(shè)計。網(wǎng)絡(luò)云端日記本系統(tǒng)根據(jù)前面章節(jié)的需求分析得出,其總體設(shè)計模塊圖如圖3-2所示。圖3-2網(wǎng)絡(luò)云端日記本系統(tǒng)功能模塊圖3.3數(shù)據(jù)庫設(shè)計數(shù)據(jù)庫設(shè)計一般包括需求分析、概念模型設(shè)計、數(shù)據(jù)庫表建立三大過程,其中需求分析前面章節(jié)已經(jīng)闡述,概念模型設(shè)計有概念模型和邏輯結(jié)構(gòu)設(shè)計兩部分。3.3.1數(shù)據(jù)庫概念結(jié)構(gòu)設(shè)計下面是整個網(wǎng)絡(luò)云端日記本系統(tǒng)中主要的數(shù)據(jù)庫表總E-R實(shí)體關(guān)系圖。圖3-6網(wǎng)絡(luò)云端日記本系統(tǒng)總E-R關(guān)系圖下面根據(jù)網(wǎng)絡(luò)云端日記本系統(tǒng)的數(shù)據(jù)庫總E-R關(guān)系圖可以得出網(wǎng)絡(luò)云端日記本系統(tǒng)需要很多E-R圖,在此羅列出來一些主要的數(shù)據(jù)庫E-R模型圖。圖3-7公告信息E-R關(guān)系圖圖3-8日記信息E-R關(guān)系圖圖3-9備忘錄信息E-R關(guān)系圖圖3-10系統(tǒng)用戶E-R關(guān)系圖3.3.2數(shù)據(jù)庫邏輯結(jié)構(gòu)設(shè)計通過前面E-R關(guān)系圖可以看到項目需要創(chuàng)建很多個數(shù)據(jù)表。以下是項目中的主要數(shù)據(jù)庫表的關(guān)系模型:表announcement_information(公告信息)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1announcement_information_idint100NY公告信息ID2announcement_novarchar640YN公告編號3announcement_titlevarchar640YN公告標(biāo)題4publishervarchar640YN發(fā)布人5release_datedate100YN發(fā)布日期6announcement_contenttext655350YN公告內(nèi)容7recommendint100NN0智能推薦8create_timedatetime190NNCURRENT_TIMESTAMP創(chuàng)建時間9update_timetimestamp190NNCURRENT_TIMESTAMP更新時間表auth(用戶權(quán)限管理)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1auth_idint100NY授權(quán)ID:2user_groupvarchar640YN用戶組:3mod_namevarchar640YN模塊名:4table_namevarchar640YN表名:5page_titlevarchar2550YN頁面標(biāo)題:6pathvarchar2550YN路由路徑:7positionvarchar320YN位置:8modevarchar320NN_blank跳轉(zhuǎn)方式:9addtinyint30NN1是否可增加:10deltinyint30NN1是否可刪除:11settinyint30NN1是否可修改:12gettinyint30NN1是否可查看:13field_addtext655350YN添加字段:14field_settext655350YN修改字段:15field_gettext655350YN查詢字段:16table_nav_namevarchar5000YN跨表導(dǎo)航名稱:17table_navvarchar5000YN跨表導(dǎo)航:18optiontext655350YN配置:19create_timetimestamp190NNCURRENT_TIMESTAMP創(chuàng)建時間:20update_timetimestamp190NNCURRENT_TIMESTAMP更新時間:表classification_management(分類管理)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1classification_management_idint100NY分類管理ID2journal_classificationvarchar640YN日記分類3recommendint100NN0智能推薦4create_timedatetime190NNCURRENT_TIMESTAMP創(chuàng)建時間5update_timetimestamp190NNCURRENT_TIMESTAMP更新時間表hits(用戶點(diǎn)擊)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1hits_idint100NY點(diǎn)贊ID:2user_idint100NN0點(diǎn)贊人:3create_timetimestamp190NNCURRENT_TIMESTAMP創(chuàng)建時間:4update_timetimestamp190NNCURRENT_TIMESTAMP更新時間:5source_tablevarchar2550YN來源表:6source_fieldvarchar2550YN來源字段:7source_idint100NN0來源ID:表journal_information(日記信息)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1journal_information_idint100NY日記信息ID2journal_numbervarchar640YN日記編號3journal_namevarchar640YN日記名稱4journal_labelvarchar640YN日記標(biāo)簽5journal_classificationvarchar640YN日記分類6user_informationint100YN0用戶信息7user_namevarchar640YN用戶姓名8user_gendervarchar640YN用戶性別9user_agevarchar640YN用戶年齡10number_of_journalsvarchar640YN日記數(shù)量11journal_datedate100YN日記日期12journal_picturevarchar2550YN日記圖片13journal_audiovarchar2550YN日記音頻14journal_videovarchar2550YN日記視頻15journal_contenttext655350YN日記內(nèi)容16recommendint100NN0智能推薦17create_timedatetime190NNCURRENT_TIMESTAMP創(chuàng)建時間18update_timetimestamp190NNCURRENT_TIMESTAMP更新時間表memorandum_information(備忘錄信息)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1memorandum_information_idint100NY備忘錄信息ID2title_namevarchar640YN標(biāo)題名稱3user_informationint100YN0用戶信息4user_namevarchar640YN用戶姓名5user_gendervarchar640YN用戶性別6user_agevarchar640YN用戶年齡7content_detailstext655350YN內(nèi)容詳情8recommendint100NN0智能推薦9create_timedatetime190NNCURRENT_TIMESTAMP創(chuàng)建時間10update_timetimestamp190NNCURRENT_TIMESTAMP更新時間表reminder_information(提醒信息)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1reminder_information_idint100NY提醒信息ID2title_namevarchar640YN標(biāo)題名稱3user_informationint100YN0用戶信息4user_namevarchar640YN用戶姓名5user_gendervarchar640YN用戶性別6user_agevarchar640YN用戶年齡7reminder_contenttext655350YN提醒內(nèi)容8recommendint100NN0智能推薦9create_timedatetime190NNCURRENT_TIMESTAMP創(chuàng)建時間10update_timetimestamp190NNCURRENT_TIMESTAMP更新時間表system_user(系統(tǒng)用戶)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1system_user_idint100NY系統(tǒng)用戶ID2user_namevarchar640YN用戶姓名3user_gendervarchar640YN用戶性別4user_agevarchar640YN用戶年齡5examine_statevarchar160NN已通過審核狀態(tài)6recommendint100NN0智能推薦7user_idint100NN0用戶ID8create_timedatetime190NNCURRENT_TIMESTAMP創(chuàng)建時間9update_timetimestamp190NNCURRENT_TIMESTAMP更新時間表upload(文件上傳)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1upload_idint100NY上傳ID2namevarchar640YN文件名3pathvarchar2550YN訪問路徑4filevarchar2550YN文件路徑5displayvarchar2550YN顯示順序6father_idint100YN0父級ID7dirvarchar2550YN文件夾8typevarchar320YN文件類型表user(用戶賬戶:用于保存用戶登錄信息)編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1user_idmediumint80NY用戶ID:[0,8388607]用戶獲取其他與用戶相關(guān)的數(shù)據(jù)2statesmallint50NN1賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷)3user_groupvarchar320YN所在用戶組:[0,32767]決定用戶身份和權(quán)限4login_timetimestamp190NNCURRENT_TIMESTAMP上次登錄時間:5phonevarchar110YN手機(jī)號碼:[0,11]用戶的手機(jī)號碼,用于找回密碼時或登錄時6phone_statesmallint50NN0手機(jī)認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)7usernamevarchar160NN用戶名:[0,16]用戶登錄時所用的賬戶名稱8nicknamevarchar160YN昵稱:[0,16]9passwordvarchar640NN密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成10emailvarchar640YN郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時11email_statesmallint50NN0郵箱認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)12avatarvarchar2550YN頭像地址:[0,255]13create_timetimestamp190NNCURRENT_TIMESTAMP創(chuàng)建時間:表user_group(用戶組:用于用戶前端身份和鑒權(quán))編號名稱數(shù)據(jù)類型長度小數(shù)位允許空值主鍵默認(rèn)值說明1group_idmediumint80NY用戶組ID:[0,8388607]2displaysmallint50NN100顯示順序:[0,1000]3namevarchar160NN名稱:[0,16]4descriptionvarchar2550YN描述:[0,255]描述該用戶組的特點(diǎn)或權(quán)限范圍5source_tablevarchar2550YN來源表:6source_fieldvarchar2550YN來源字段:7source_idint100NN0來源ID:8registersmallint50YN0注冊位置:9create_timetimestamp190NNCURRENT_TIMESTAMP創(chuàng)建時間:10update_timetimestamp190NNCURRENT_TIMESTAMP更新時間:3.4本章小結(jié)整個網(wǎng)絡(luò)云端日記本系統(tǒng)的需求分析主要對系統(tǒng)總體架構(gòu)以及功能模塊的設(shè)計,通過建立E-R模型和數(shù)據(jù)庫邏輯系統(tǒng)設(shè)計完成了數(shù)據(jù)庫系統(tǒng)設(shè)計。4關(guān)鍵模塊的設(shè)計與實(shí)現(xiàn)4.1登錄模塊管理員和用戶在登錄界面輸入賬號+密碼,點(diǎn)擊“登錄”按鈕,系統(tǒng)在用戶數(shù)據(jù)庫表中會對管理員和用戶的賬號進(jìn)行匹配,賬號+密碼正確的話,就會登錄到系統(tǒng)中各個用戶的主管理界面,否則提示對應(yīng)的信息,返回到登錄的界面,其主界面展示如下圖4.1所示。圖4.1登錄界面圖登錄關(guān)鍵代碼如下所示。/***登錄*@paramdata*@paramhttpServletRequest*@return*/@PostMapping("login")publicMap<String,Object>login(@RequestBodyMap<String,String>data,HttpServletRequesthttpServletRequest){("[執(zhí)行登錄接口]");Stringusername=data.get("username");Stringemail=data.get("email");Stringphone=data.get("phone");Stringpassword=data.get("password");ListresultList=null;Map<String,String>map=newHashMap<>();if(username!=null&&"".equals(username)==false){map.put("username",username);resultList=service.select(map,newHashMap<>()).getResultList();}elseif(email!=null&&"".equals(email)==false){map.put("email",email);resultList=service.select(map,newHashMap<>()).getResultList();}elseif(phone!=null&&"".equals(phone)==false){map.put("phone",phone);resultList=service.select(map,newHashMap<>()).getResultList();}else{returnerror(30000,"賬號或密碼不能為空");}if(resultList==null||password==null){returnerror(30000,"賬號或密碼不能為空");}//判斷是否有這個用戶if(resultList.size()<=0){returnerror(30000,"用戶不存在");}UserbyUsername=(User)resultList.get(0);Map<String,String>groupMap=newHashMap<>();groupMap.put("name",byUsername.getUserGroup());ListgroupList=userGroupService.select(groupMap,newHashMap<>()).getResultList();if(groupList.size()<1){returnerror(30000,"用戶組不存在");}UserGroupuserGroup=(UserGroup)groupList.get(0);//查詢用戶審核狀態(tài)if(!StringUtils.isEmpty(userGroup.getSourceTable())){Stringsql="selectexamine_statefrom"+userGroup.getSourceTable()+"WHEREuser_id="+byUsername.getUserId();Stringres=String.valueOf(service.runCountSql(sql).getSingleResult());if(res==null){returnerror(30000,"用戶不存在");}if(!res.equals("已通過")){returnerror(30000,"該用戶審核未通過");}}//查詢用戶狀態(tài)if(byUsername.getState()!=1){returnerror(30000,"用戶非可用狀態(tài),不能登錄");}Stringmd5password=service.encryption(password);if(byUsername.getPassword().equals(md5password)){//存儲Token到數(shù)據(jù)庫AccessTokenaccessToken=newAccessToken();accessToken.setToken(UUID.randomUUID().toString().replaceAll("-",""));accessToken.setUser_id(byUsername.getUserId());tokenService.save(accessToken);//返回用戶信息JSONObjectuser=JSONObject.parseObject(JSONObject.toJSONString(byUsername));user.put("token",accessToken.getToken());JSONObjectret=newJSONObject();ret.put("obj",user);returnsuccess(ret);}else{returnerror(30000,"賬號或密碼不正確");}}4.2注冊模塊注冊模塊滿足用戶部分,當(dāng)用戶想要進(jìn)行用戶相關(guān)信息的查詢管理的時候,就必須進(jìn)行登錄,如果沒有賬號的話,在登錄界面,點(diǎn)擊“注冊”按鈕就會跳轉(zhuǎn)到注冊的界面,根據(jù)提示填寫好注冊信息,添加提交,注冊的信息在數(shù)據(jù)庫中就添加完成了,然后再輸入填寫好的賬號和密碼進(jìn)行登錄,其主界面展示如下圖4.2所示。圖4.2注冊界面圖注冊邏輯代碼如下:/***注冊*@paramuser*@return*/@PostMapping("register")publicMap<String,Object>signUp(@RequestBodyUseruser){//查詢用戶Map<String,String>query=newHashMap<>();query.put("username",user.getUsername());Listlist=service.select(query,newHashMap<>()).getResultList();if(list.size()>0){returnerror(30000,"用戶已存在");}user.setUserId(null);user.setPassword(service.encryption(user.getPassword()));service.save(user);returnsuccess(1);}/***用戶ID:[0,8388607]用戶獲取其他與用戶相關(guān)的數(shù)據(jù)*/@Id@GeneratedValue(strategy=GenerationType.IDENTITY)@Column(name="user_id")privateIntegeruserId;/***賬戶狀態(tài):[0,10](1可用|2異常|3已凍結(jié)|4已注銷)*/@Basic@Column(name="state")privateIntegerstate;/***所在用戶組:[0,32767]決定用戶身份和權(quán)限*/@Basic@Column(name="user_group")privateStringuserGroup;/***上次登錄時間:*/@Basic@Column(name="login_time")privateTimestamploginTime;/***手機(jī)號碼:[0,11]用戶的手機(jī)號碼,用于找回密碼時或登錄時*/@Basic@Column(name="phone")privateStringphone;/***手機(jī)認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)*/@Basic@Column(name="phone_state")privateIntegerphoneState;/***用戶名:[0,16]用戶登錄時所用的賬戶名稱*/@Basic@Column(name="username")privateStringusername;/***昵稱:[0,16]*/@Basic@Column(name="nickname")privateStringnickname;/***密碼:[0,32]用戶登錄所需的密碼,由6-16位數(shù)字或英文組成*/@Basic@Column(name="password")privateStringpassword;/***郵箱:[0,64]用戶的郵箱,用于找回密碼時或登錄時*/@Basic@Column(name="email")privateStringemail;/***郵箱認(rèn)證:[0,1](0未認(rèn)證|1審核中|2已認(rèn)證)*/@Basic@Column(name="email_state")privateIntegeremailState;/***頭像地址:[0,255]*/@Basic@Column(name="avatar")privateStringavatar;/***創(chuàng)建時間:*/@Basic@Column(name="create_time")@JsonFormat(pattern="yyyy-MM-ddHH:mm:ss")privateTimestampcreateTime;@Basic@TransientprivateStringcode;}4.3用戶管理模塊管理員可以對系統(tǒng)中所有的用戶角色進(jìn)行管控,包含了管理員以及用戶這兩種角色,如果需要添加新的用戶,點(diǎn)擊頁面中的“添加”按鈕根據(jù)提示輸入上用戶信息,點(diǎn)擊“提交”以后在對應(yīng)的用戶界面就可以查看到了,可以點(diǎn)擊用戶后面的“刪除”按鈕直接刪除某一用戶,這里以管理員用戶為例。界面如下圖4.3所示。圖4.3用戶管理界面圖用戶管理邏輯代碼如下所示。@RequestMapping(value="/del")@TransactionalpublicMap<String,Object>del(HttpServletRequestrequest){service.delete(service.readQuery(request),service.readConfig(request));returnsuccess(1);}@Transactionalpublicvoiddelete(Map<String,String>query,Map<String,String>config){StringBuffersql=newStringBuffer("DELETEFROM").append("`").append(table).append("`").append("");sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.GROUP_BY))));("[{}]-刪除操作:{}",table,sql);Queryquery1=runCountSql(sql.toString());query1.executeUpdate();}4.4日記信息模塊管理員點(diǎn)擊“日記信息”會顯示出所有的日記信息,支持輸入日記編號或者日記名稱對日記信息進(jìn)行查詢,如果想要添加新的日記信息,點(diǎn)擊“添加”按鈕,輸入相關(guān)信息,點(diǎn)擊“提交”按鈕就可以添加了,同時可以選擇某一條日記信息,點(diǎn)擊“刪除”進(jìn)行刪除,界面如下圖4.4所示。圖4.4日記信息界面圖日記信息關(guān)鍵代碼如下所示。@PostMapping("/add")@TransactionalpublicMap<String,Object>add(HttpServletRequestrequest)throwsIOException{service.insert(service.readBody(request.getReader()));returnsuccess(1);}@TransactionalpublicMap<String,Object>addMap(Map<String,Object>map){service.insert(map);returnsuccess(1);}publicMap<String,Object>readBody(BufferedReaderreader){BufferedReaderbr=null;StringBuildersb=newStringBuilder("");try{br=reader;Stringstr;while((str=br.readLine())!=null){sb.append(str);}br.close();Stringjson=sb.toString();returnJSONObject.parseObject(json,Map.class);}catch(IOExceptione){e.printStackTrace();}finally{if(null!=br){try{br.close();}catch(IOExceptione){e.printStackTrace();}}}returnnull;}publicvoidinsert(Map<String,Object>body){StringBuffersql=newStringBuffer("INSERTINTO");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()){Objectvalue=entry.getValue();if(valueinstanceofString){sql.append("'").append(entry.getValue()).append("'").append(",");}else{sql.append(entry.getValue()).append(",");}}sql.deleteCharAt(sql.length()-1);sql.append(")");("[{}]-插入操作:{}",table,sql);Queryquery=runCountSql(sql.toString());query.executeUpdate();}4.5備忘錄信息模塊管理員點(diǎn)擊“備忘錄信息”會顯示出所有的備忘錄信息,支持輸入標(biāo)題名稱或者用戶信息或者用戶姓名對備忘錄信息進(jìn)行查詢,如果想要添加新的備忘錄信息,點(diǎn)擊“添加”按鈕,輸入相關(guān)信息,點(diǎn)擊“提交”按鈕就可以添加了,同時可以選擇某一條備忘錄信息,點(diǎn)擊“刪除”進(jìn)行刪除,也可以點(diǎn)擊后面的“提醒”按鈕對備忘錄信息的提醒信息進(jìn)行更新維護(hù)。界面如下圖4.5所示。圖4.5備忘錄信息界面圖備忘錄信息關(guān)鍵代碼如下所示。@PostMapping("/set")@TransactionalpublicMap<String,Object>set(HttpServletRequestrequest)throwsIOException{service.update(service.readQuery(request),service.readConfig(request),service.readBody(request.getReader()));returnsuccess(1);}publicMap<String,String>readConfig(HttpServletRequestrequest){Map<String,String>map=newHashMap<>();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_));returnmap;}publicMap<String,String>readQuery(HttpServletRequestrequest){StringqueryString=request.getQueryString();if(queryString!=null&&!"".equals(queryString)){String[]querys=queryString.split("&");Map<String,String>map=newHashMap<>();for(Stringquery: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_);returnmap;}else{returnnewHashMap<>();}}@Transactionalpublicvoidupdate(Map<String,String>query,Map<String,String>config,Map<String,Object>body){StringBuffersql=newStringBuffer("UPDATE").append("`").append(table).append("`").append("SET");for(Map.Entry<String,Object>entry:body.entrySet()){Objectvalue=entry.getValue();if(valueinstanceofString){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))));("[{}]-更新操作:{}",table,sql);Queryquery1=runCountSql(sql.toString());query1.executeUpdate();}publicStringtoWhereSql(Map<String,String>query,Booleanlike){if(query.size()>0){try{StringBuildersql=newStringBuilder("WHERE");for(Map.Entry<String,String>entry:query.entrySet()){if(entry.getKey().contains(FindConfig.MIN_)){Stringmin=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_)){Stringmax=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("");returnsql.toString();}catch(UnsupportedEncodingExceptione){("拼接sql失敗:{}",e.getMessage());}}return"";}4.6提醒信息模塊管理員和用戶點(diǎn)擊“提醒信息”這個按鈕可以查看到系統(tǒng)中的提醒信息,支持通過標(biāo)題名稱或者用戶信息或者用戶性別進(jìn)行查詢提醒信息,如果想要添加新的提醒信息,點(diǎn)擊“添加”按鈕然后根據(jù)提示輸入提醒信息,點(diǎn)擊“提交”后,在提醒信息界面就會顯示新增的提醒信息,可以點(diǎn)擊某一提醒信息查看提醒信息的詳情,也可以直接點(diǎn)擊“刪除”進(jìn)行刪除提醒信息。界面如下圖4.6所示。圖4.6提醒信息界面圖提醒信息關(guān)鍵代碼如下所示。@RequestMapping(value="/del")@TransactionalpublicMap<String,Object>del(HttpServletRequestrequest){service.delete(service.readQuery(request),service.readConfig(request));returnsuccess(1);}@Transactionalpublicvoiddelete(Map<String,String>query,Map<String,String>config){StringBuffersql=newStringBuffer("DELETEFROM").append("`").append(table).append("`").append("");sql.append(toWhereSql(query,"0".equals(config.get(FindConfig.GROUP_BY))));("[{}]-刪除操作:{}",table,sql);Queryquery1=runCountSql(sql.toString());query1.executeUpdate();}4.7公告信息模塊點(diǎn)擊“公告信息”這個菜單,可以查看到系統(tǒng)中所有添加的公告信息,支持通過公告編號或者公告標(biāo)題對公告信息進(jìn)行查詢,只有管理員用戶可以添加新的公告信息,點(diǎn)擊“添加”按鈕,根據(jù)提示輸入公告信息,點(diǎn)擊“提交”按鈕,新的公告信息就在系統(tǒng)中顯示出來了,也可以對添加的公告信息進(jìn)行刪除。界面如下圖4.7所示。圖4.7公告信息界面圖4.8修改密碼模塊管理員和用戶點(diǎn)擊“修改密碼”按鈕,可以對登錄密碼進(jìn)行更改,首先輸入原密碼,然后再輸入新密碼和確認(rèn)密碼,當(dāng)原密碼正確,輸入兩次新密碼一致,則修改成功,否則給出錯誤提示信息。修改密碼界面如下圖4.8所示。圖4.8修改密碼界面圖5系統(tǒng)測試5.1系統(tǒng)測試的目的 系統(tǒng)開發(fā)到了最后一個階段那就是系統(tǒng)測試,系統(tǒng)測試對軟件的開發(fā)其實(shí)是非常有必要的。因?yàn)闆]什么系統(tǒng)一經(jīng)開發(fā)出來就可能會盡善盡美,再厲害的系統(tǒng)開發(fā)工程師也會在系統(tǒng)開發(fā)的時候出現(xiàn)紕漏,系統(tǒng)測試能夠較好的改正一些bug,為后期系統(tǒng)的維護(hù)性提供很好的支持。通過系統(tǒng)測試,開發(fā)人員也可以建立自己對系統(tǒng)的信心,為后期的系統(tǒng)版本的跟新提供支持。5.2系統(tǒng)測試用例系統(tǒng)測試包括:用戶登錄功能測試、日記信息展示功能測試、日記信息添加、日記信息搜索、密碼修改功能測試,如表5-1、5-2、5-3、5-4、5-5所示:用戶登錄功能測試:表5-1用戶登錄功能測試表用例名稱用戶登錄系統(tǒng)目的測試用戶通過正確的用戶名和密碼可否登錄功能前提未登錄的情況下測試流程1)進(jìn)入登錄頁面2)輸入正確的用戶名和密碼預(yù)期結(jié)果用戶名和密碼正確的時候,跳轉(zhuǎn)到登錄成功界面,反之則顯示錯誤信息,提示重新輸入實(shí)際結(jié)果實(shí)際結(jié)果與預(yù)期結(jié)果一致日記信息查看功能測試:表5-2日記信息查看功能測試表用例名稱日記信息查看目的測試日記信息查看功能前提用戶登錄測試流程點(diǎn)擊日記信息列表預(yù)期結(jié)果可以查看到所有日記信息實(shí)際結(jié)果實(shí)際結(jié)果與預(yù)期結(jié)果一致管理員添加日記信息界面測試:表5-3管理員添加日記信息界面測試表用例名稱日記信息發(fā)布測試用例目的測試日記信息發(fā)布功能前提用戶正常登錄情況下測試流程1)點(diǎn)擊日記信息管理就,然后點(diǎn)擊添加后并填寫信息。2)點(diǎn)擊進(jìn)行提交。預(yù)期結(jié)果提交以后,頁面首頁會顯示新的日記信息實(shí)際結(jié)果實(shí)際結(jié)果與預(yù)期結(jié)果一致日記信息搜索功能測試:表5-4日記信息搜索
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題申報參考:近代漢文中國行紀(jì)與全球文學(xué)關(guān)系研究
- 2025年度個人與公司租賃合同稅費(fèi)承擔(dān)協(xié)議4篇
- 二零二五版金融服務(wù)保密協(xié)議范本修訂6篇
- 2025年保定怎么考貨運(yùn)從業(yè)資格證
- 二零二五年城投小貸與農(nóng)業(yè)產(chǎn)業(yè)合作框架協(xié)議4篇
- 2025年度農(nóng)村土地流轉(zhuǎn)經(jīng)營權(quán)抵押貸款合同示范文本4篇
- 二零二五年度充電樁安裝工程知識產(chǎn)權(quán)保護(hù)合同4篇
- 二零二五年度出境領(lǐng)隊旅游目的地考察合同4篇
- 二零二五年度城市綜合體建設(shè)項目承包商安全作業(yè)管理協(xié)議4篇
- 2025年度葡萄采摘季節(jié)臨時工采購合同范本3篇
- 垃圾處理廠工程施工組織設(shè)計
- 天皰瘡患者護(hù)理
- 2025年蛇年新年金蛇賀歲金蛇狂舞春添彩玉樹臨風(fēng)福滿門模板
- 《建筑制圖及陰影透視(第2版)》課件 4-直線的投影
- 2024-2030年中國IVD(體外診斷)測試行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- 損失補(bǔ)償申請書范文
- 壓力與浮力的原理解析
- 鐵路損傷圖譜PDF
- 裝修家庭風(fēng)水學(xué)入門基礎(chǔ)
- 移動商務(wù)內(nèi)容運(yùn)營(吳洪貴)任務(wù)二 社群的種類與維護(hù)
- 《詩詞寫作常識 詩詞中國普及讀物 》讀書筆記思維導(dǎo)圖
評論
0/150
提交評論