版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
基于Java的QQ屏幕截圖工具設(shè)計報告目錄目錄 51.緒論 71.1課題背景 71.2課題研究內(nèi)容 72.可行性分析及開發(fā)環(huán)境的選擇 82.1可行性分析 82.1.1技術(shù)可行性 92.1.2經(jīng)濟(jì)可行性 92.1.3法律可行性 92.1.4可行性結(jié)論 92.2運(yùn)行環(huán)境的選擇 92.3開發(fā)工具的選擇 102.4B/S結(jié)構(gòu) 113.系統(tǒng)需求分析 123.1業(yè)務(wù)需求 133.2用戶需求 133.3性能需求 134.系統(tǒng)設(shè)計 134.1系統(tǒng)的設(shè)計目標(biāo) 144.2系統(tǒng)功能整體設(shè)計 145.系統(tǒng)設(shè)計實(shí)現(xiàn) 155.1系統(tǒng)主界面實(shí)現(xiàn) 155.2系統(tǒng)截圖實(shí)現(xiàn) 175.3截圖的編輯實(shí)現(xiàn) 235.4截圖的存儲實(shí)現(xiàn) 316.系統(tǒng)測試 356.1截圖軟件系統(tǒng)測試 356.1.1保存選項(xiàng)測試 356.1.2復(fù)制到剪切板選項(xiàng)測試 366.1.3編輯選項(xiàng)測試 366.2測試評價 37結(jié)論 37參考文獻(xiàn) 38致謝 391.緒論所謂的截圖就是將計算機(jī)中的某一畫面使用圖片的方式記錄下來,以供操作和使用。截圖是從個人需求出發(fā),根據(jù)需要獲取計算機(jī)中的內(nèi)容,以圖片形式將想要獲取的內(nèi)容保存下來,可以對圖片進(jìn)行存儲、編輯、發(fā)送等多種操作。獲取的圖標(biāo)與人眼所示的效果的相同的。通常,計算機(jī)以及某些軟件就帶有截圖功能,如QQ就具有截圖工具。截取下來的圖片大致可以分成兩個類別,一種是靜態(tài)的圖標(biāo),圖片是一種像素文件,一般保存形式的后綴為BMP、PNG、JPG。另一種就是動態(tài)形式的圖片,是一個動態(tài)的文件,保存格式為GIF。截圖顯示了當(dāng)時時間下各元素的狀態(tài),保存了當(dāng)時的狀態(tài)信息。1.1課題背景隨著計算機(jī)的普及以及信息技術(shù)的飛速發(fā)展,在信息處理方面,尤其是圖片信息的處理方面,需求越來越高。在日常的工作中,無論是溝通還是文件內(nèi)容的編輯和撰寫,其中都涉及了截圖的過程,通過截圖獲取信息或者直觀的作為信息傳播和展示的載體。提升工作效率是很多企業(yè)的目標(biāo),也是社會發(fā)展所必須的。在文檔的撰寫過程中通常會花費(fèi)大量的時間,效果可能并不理想,因此使用截圖工具獲取圖片信息能夠簡化文檔的處理過程。截圖工具具有多種功能,例如,截圖、保存、復(fù)制等,節(jié)省了文檔的編輯時間,提升的工作效率。不只是在文檔的編輯過程中可以使用,也可以靈活的應(yīng)用于多個工作過程中。現(xiàn)階段的截圖工具中都或多或少的受到條件的限制,影響使用者的操作效率。因此本設(shè)計使用Java語言設(shè)計了截圖工具,為用戶提供更加便利的使用條件。1.2課題研究內(nèi)容為了便于用戶的使用和操作,本人設(shè)計的是單機(jī)版的截圖工具,能夠根據(jù)用戶的操作獲取相應(yīng)的截圖,同時具有存儲、編輯和復(fù)制等功能,可以根據(jù)需要設(shè)置相應(yīng)的操作熱鍵。本截圖工具通過捕捉和追蹤光標(biāo)的位置獲取制定區(qū)域的截圖。用戶可以對截取的圖片進(jìn)行重命名,如果沒有重命名的話,圖片就以系統(tǒng)時間為名稱保存。儲存的位置用戶可以進(jìn)行選擇。當(dāng)圖片存儲成功時會出現(xiàn)存儲位置的提示窗,同時用戶可以選擇圖片的保存格式。保存之前可以在多層菜單欄中預(yù)覽保存結(jié)果。成功保存的圖片都可以瀏覽,多層菜單欄中能夠?qū)訉语@示圖片。用戶可以對圖片進(jìn)行編輯,主要是添加文字內(nèi)容,之后也能夠進(jìn)行保存。2.可行性分析及開發(fā)環(huán)境的選擇2.1可行性分析可行性分析的項(xiàng)目進(jìn)行,就必須得綜合許多方面的知識以及常識,并將它們與即將進(jìn)行的項(xiàng)目進(jìn)行比較,從而將項(xiàng)目的相關(guān)內(nèi)容同有關(guān)人士進(jìn)行咨詢,在此基礎(chǔ)上展開對項(xiàng)目的仔仔細(xì)細(xì)的鉆研,以保證項(xiàng)目的進(jìn)一步實(shí)施,并且結(jié)合多方面的資料,對項(xiàng)目給出詳細(xì)的方案,當(dāng)然也必須將收益進(jìn)行預(yù)估,必須保證項(xiàng)目的收入滿足成本的輸出,為項(xiàng)目的設(shè)計和完成提供具有合理性、可行性的建議,同時提供堅實(shí)的理論基礎(chǔ)對項(xiàng)目的整體設(shè)計進(jìn)行指導(dǎo)。可行性分析必須具備一些特征,比如:(1)能夠大體的預(yù)估收益的大??;(2)能夠公平的進(jìn)行分析與決斷;(3)能夠保證項(xiàng)目進(jìn)行的通暢;(4)具有非??捎^的理論依據(jù)。可行性分析對整個項(xiàng)目的設(shè)計、建設(shè)、完善具有重要的影響。對項(xiàng)目的可行性進(jìn)行分析能夠及時的發(fā)現(xiàn)項(xiàng)目中的不足之處,保證項(xiàng)目的可行性??尚行苑治鼍哂幸韵聝牲c(diǎn)要求。第一,從客觀的角度對項(xiàng)目進(jìn)行分析,先收集相關(guān)的資料和數(shù)據(jù),同時與社會中的真實(shí)數(shù)據(jù)進(jìn)行對比,對二者之間的差異情況進(jìn)行分析,結(jié)合實(shí)際的社會情況和行業(yè)的變化趨勢討論項(xiàng)目是否值得繼續(xù)進(jìn)行。第二,可行性研究和分析的內(nèi)容必須符合國家的多定義原則,研究的主體必須是完整的,不能有缺少的部分。在進(jìn)行研究時盡可能獲取全面的信息數(shù)據(jù),保證調(diào)查的準(zhǔn)確,可行性分析結(jié)果具有指導(dǎo)性。2.1.1技術(shù)可行性B/S結(jié)構(gòu)中包括兩部分,分別是瀏覽器(Browser)和服務(wù)器(Server),本截圖工具中主要使用了Java語言以及網(wǎng)絡(luò)技術(shù),這些技術(shù)十分常見。因此,本設(shè)計在技術(shù)上具有可行性。2.1.2經(jīng)濟(jì)可行性本設(shè)計在硬件方面的要求不高,由我們?nèi)珯?quán)負(fù)責(zé),自行研究,成本需要較低,幾乎可以忽略不計,后期的維護(hù)也可以自行完成,成本較少。因此本設(shè)計在經(jīng)濟(jì)上具有可行性。2.1.3法律可行性Eclipse是一個免費(fèi)的,開放的軟件,本設(shè)計不用于經(jīng)營和盈利活動,是自己開發(fā)研究的,不存在侵權(quán)行為,不會引發(fā)其他的法律責(zé)任。因此,本設(shè)計在法律方面具有可行性。2.1.4可行性結(jié)論從以上技術(shù)、經(jīng)濟(jì)、法律方面進(jìn)行分析,本設(shè)計具有可行性,可以進(jìn)行后續(xù)的研究和開發(fā)。2.2運(yùn)行環(huán)境的選擇本設(shè)計對運(yùn)行條件和與運(yùn)行環(huán)境沒有嚴(yán)格的要求。在Windows系統(tǒng)或者Linux系統(tǒng)中都可以進(jìn)行使用,但是需要注意的是,系統(tǒng)的版本可能會對效果具有一定的影響。本截圖工具只需要一臺計算機(jī)就能夠進(jìn)行,過程中不需要繳納任何費(fèi)用,用戶只需登錄就能夠進(jìn)行多種操作。2.3開發(fā)工具的選擇本設(shè)計中使用的設(shè)計軟件是Eclipse,使用的編程語言是Java。Eclipse是不收費(fèi)的,為軟件設(shè)計提供良好的設(shè)計環(huán)境,也允許使用Java語言進(jìn)行潤建設(shè)合計。Eclipse包含了很多設(shè)計框架,因此其能夠提供多種服務(wù),設(shè)計環(huán)境中包括多種插件和組件,其組合形式多種多樣。Eclipse中具有規(guī)范化的collection,能夠?qū)⒉寮徒M件保存下來,最常見的就是Javadevelopmentkit。Eclipse最早是由加拿大的OptimizationTechnologyInc公司和InternationalBusinessMachinesCorporation公司共同與1994年創(chuàng)建的。Eclipse的基礎(chǔ)建設(shè)是由InternationalBusinessMachinesCorporation公司負(fù)責(zé)。經(jīng)過一段時間的運(yùn)營,Eclipse項(xiàng)目的參與者越來越多,已經(jīng)形成了一個聯(lián)盟,成員公司的數(shù)量已經(jīng)超過了150家。例如當(dāng)時比較有名的寶藍(lán)公司、賽貝斯公司都參與到Eclipse中。Eclipse是免費(fèi)的,用戶不需要繳納任何費(fèi)用就能夠獲得相關(guān)的軟件資源,同時可以在原代碼上進(jìn)行改變,設(shè)計自己想要的工具。隨著使用的人越來越多,幾個大型企業(yè)關(guān)注到這個設(shè)計軟件并加入到研發(fā)中來。Eclipse支持多種語言的使用,可以在多個平臺上使用,用戶通過簡單的操作就能夠獲得自身想要的語言。Java語言具有平臺無關(guān)性、多線程技術(shù)和安全可靠性等特點(diǎn)。平臺無關(guān)性是指Java語言適用于多種網(wǎng)絡(luò)環(huán)境中,不會受到計算機(jī)和網(wǎng)絡(luò)的平臺的影響。這一特點(diǎn)減輕了工作人員和管理人員的工作壓力。多線程技術(shù)是指計算機(jī)的軟硬件同時處理一個或者多個線程的技術(shù)。擁有多線程技術(shù)能夠使計算機(jī)在一段時間內(nèi)處理多個線程,提升了計算機(jī)的控制能力。安全可靠性是指相比于c++語言,Java能夠避免很多編程錯誤的發(fā)生。Java語言是從c++語言中衍生來的,通常使用與網(wǎng)絡(luò)應(yīng)用中。假設(shè)Java的安全性較低,那么當(dāng)計算機(jī)之間傳遞信息資料時,就很容易被網(wǎng)絡(luò)病毒攻擊,造成系統(tǒng)破壞。因此為了保證共享過程不會出現(xiàn)問題,因此Java語言具有較高的安全性。Java語言主要是通過自身的病毒預(yù)防機(jī)制和保護(hù)機(jī)制實(shí)現(xiàn)安全性的,保護(hù)了計算機(jī)系統(tǒng)和信息資料的的安全。2.4B/S結(jié)構(gòu)B/S結(jié)構(gòu)中包括兩部分,分別是瀏覽器和服務(wù)器,是一種web架構(gòu),受到廣大使用者的歡迎。瀏覽器是為用戶提供服務(wù)的關(guān)鍵部分,大部分軟件的功能都需要通過瀏覽器才能實(shí)現(xiàn)。服務(wù)器是為用戶提供服務(wù)對用戶進(jìn)行管理的重要終端,對軟件的正常運(yùn)行以及需求功能的提供具有極大的影響。計算機(jī)上安裝一個瀏覽器,服務(wù)器上具有能夠正常使用的數(shù)據(jù)庫就能夠?qū)崿F(xiàn)軟件功能。通過網(wǎng)絡(luò),瀏覽器和服務(wù)器就能夠進(jìn)行數(shù)據(jù)傳輸和信息互通。B/S是從C/S結(jié)構(gòu)的基礎(chǔ)上提出的,由于C/S結(jié)構(gòu)存在一定的問題,所以B/S結(jié)構(gòu)應(yīng)運(yùn)而生,隨著時間的推移和技術(shù)水平的提高,B/S結(jié)構(gòu)越來越豐富,使用者也越來越多。與二層架構(gòu)的C/S結(jié)構(gòu)不同的是B/S結(jié)構(gòu)具有三層架構(gòu),可以說是C/S結(jié)構(gòu)的一種特殊形式。B/S結(jié)構(gòu)中的使用的網(wǎng)絡(luò)技術(shù)越來越多,功能逐步豐富。B/S結(jié)構(gòu)將網(wǎng)絡(luò)的編程語言、瀏覽器的腳本、媒體對象技術(shù)相結(jié)合,為廣大的用戶提供便利的操作條件,使用任何瀏覽器都能使軟件正常運(yùn)行,實(shí)現(xiàn)其功能,發(fā)揮其作用,同時在成本的投入規(guī)模上也得到了一定程度的節(jié)省。B/S結(jié)構(gòu)的優(yōu)勢就是其操作不會受到瀏覽器和空間的限制。只要計算機(jī)能夠連接網(wǎng)絡(luò)就能夠運(yùn)行軟件。用戶使用的計算機(jī)上也不需要下載多余的軟件,也不需要進(jìn)行維護(hù)和檢修,節(jié)省了很多不必要的時間,系統(tǒng)的拓展也很便利。B/S結(jié)構(gòu)具有維護(hù)優(yōu)化方式簡單的特點(diǎn)。B/S結(jié)構(gòu)的軟件只需要在服務(wù)器上進(jìn)行維護(hù)和檢查即可,不需要在客戶端進(jìn)行任何操作。同時B/S結(jié)構(gòu)花費(fèi)的成本少,選擇方向多。只需要在服務(wù)器上對軟件進(jìn)行管理即可,這樣也提高了數(shù)據(jù)信息的安全性以及用戶計算機(jī)系統(tǒng)的安全性。由于B/S結(jié)構(gòu)的軟件大部分服務(wù)功能都需要服務(wù)器的支持,服務(wù)器的負(fù)荷較大。3.系統(tǒng)需求分析需求分析是指在計算機(jī)中新建一個項(xiàng)目或者對現(xiàn)存的項(xiàng)目進(jìn)行修改以描述新項(xiàng)目。需求分析是系統(tǒng)進(jìn)入運(yùn)行階段之前進(jìn)行的準(zhǔn)備工作,對軟件的設(shè)計具有十分重要的影響。需求分析的過程就是將目標(biāo)消費(fèi)者的需求傳達(dá)到設(shè)計師處,設(shè)計師從顧客的需求出發(fā)對系統(tǒng)進(jìn)行設(shè)計。只有從顧客的需求出發(fā)才能設(shè)計出使用的工具,同時也能根據(jù)需求的變化對工具進(jìn)行一定的調(diào)整和優(yōu)化,進(jìn)而為顧客提供更加優(yōu)質(zhì)的服務(wù)。需求分析的主要內(nèi)容就是掌握顧客的需求。需求分析對將會使用軟件的主要群體進(jìn)行調(diào)查,從原本的設(shè)計基礎(chǔ)和運(yùn)行現(xiàn)狀出發(fā),及時總結(jié)目標(biāo)群體的需求變化,結(jié)合需求變化趨勢對系統(tǒng)進(jìn)行調(diào)整和優(yōu)化,豐富系統(tǒng)的功能。需求分析中包括多方面的內(nèi)容,主要有以下幾種:(1)效果需要;(2)性能供應(yīng)(3)能夠上市與有保障(4)解決異常(5)銜接的處理(6)限制(7)反方向的處理(8)日后有幾率產(chǎn)生的需要。需求分析有以下步驟。首先掌握組織機(jī)構(gòu)實(shí)際情況,然后掌握其業(yè)務(wù)活動,之后收集用戶的要求信息,明確系統(tǒng)中需要調(diào)整的部分,其次對系統(tǒng)功能和數(shù)據(jù)進(jìn)行分析,最后對分析結(jié)果進(jìn)行歸納和總結(jié),完成分析報告。3.1業(yè)務(wù)需求能夠?qū)崿F(xiàn)對屏幕的隨機(jī)截取,復(fù)制,保存以及添加文字等操作,便于用戶對數(shù)據(jù)的處理。3.2用戶需求用戶給設(shè)計者提出的軟件上的需求,是對產(chǎn)品的的要求。3.3性能需求界面清楚明確,操作簡單,用戶容易掌握截圖操作。4.系統(tǒng)設(shè)計Physicaldesign是進(jìn)行軟件設(shè)計的基礎(chǔ)。從用戶的需求出發(fā),確定系統(tǒng)的功能,進(jìn)而明確系統(tǒng)的邏輯需求和性能模型。在滿足用戶需求以及能夠順利運(yùn)行的前提下,制定合理的設(shè)計方案使本設(shè)計能夠具體化,能夠在計算機(jī)中運(yùn)行。系統(tǒng)設(shè)計為軟件提供了物理模型。系統(tǒng)設(shè)計將軟件分成多個層次,將整個系統(tǒng)進(jìn)行拆分,分析其中的數(shù)據(jù)庫以及各個部分的運(yùn)行過程和方式。通俗點(diǎn)說,系統(tǒng)設(shè)計就是將軟件的運(yùn)行流程展現(xiàn)在用戶的眼前,便于用戶理解和操作。其中系統(tǒng)設(shè)計中包括總體設(shè)計、詳細(xì)設(shè)計和具體步驟總體設(shè)計就是在每個模塊的分界線處作出詳細(xì)的設(shè)計并設(shè)計各個小內(nèi)容內(nèi)部的上下等級的結(jié)構(gòu)同時設(shè)置數(shù)據(jù)庫。詳細(xì)設(shè)計就是對各部分的運(yùn)行細(xì)節(jié)進(jìn)行控制,主要是對算法的編寫和構(gòu)成的信息結(jié)構(gòu)進(jìn)行控制。演繹法和歸納法是系統(tǒng)設(shè)計常用的兩種方法。演繹法是一種從普通到特殊的推理方法,換句話說就是從常見的事實(shí)和理論出發(fā),根據(jù)不同的設(shè)計經(jīng)驗(yàn)和知識水平,對能夠滿足需求的模塊進(jìn)行挑選,選出符合設(shè)計條件的模塊,再將這些模塊按照一定的組成方式進(jìn)行組合,完成項(xiàng)目的設(shè)計。如果使用歸納法,有以下幾點(diǎn)需要注意。首先就是要獲取充足的數(shù)據(jù)資料,尤其是相關(guān)性較高的資料。其次,要對收集到的資料進(jìn)行整理和總結(jié),將資料數(shù)據(jù)作為基礎(chǔ)進(jìn)行設(shè)計和分析,主要是進(jìn)行需求分析,設(shè)計系統(tǒng)的功能。4.1系統(tǒng)的設(shè)計目標(biāo)本系統(tǒng)工具的設(shè)計便利了信息的儲存形式,不再需要手動輸入信息,信息的獲取更加準(zhǔn)確和便捷。本截圖工具具備隨即截圖、編輯、復(fù)制、存儲功能。4.2系統(tǒng)功能整體設(shè)計 開發(fā)的總體設(shè)計: 截圖:根據(jù)提示,隨機(jī)獲取指定屏幕區(qū)域; 編輯:在圖片上添加文字; 存儲:指定存儲目錄將截圖進(jìn)行存儲。 流程圖請看下圖(1):圖(1)程序流程圖5.系統(tǒng)設(shè)計實(shí)現(xiàn)5.1系統(tǒng)主界面實(shí)現(xiàn)系統(tǒng)主界面有公共操作區(qū)、操作欄、界面布局三部分。操作欄部分代碼以及注解:JPanelall=newJPanel();all.add(jp);all.add(buttonJP);通過getContentPane()方法得到窗體最下面那個面板然后往面板上添加控件c然后放到窗體的正中央位置;在窗體南方的位置上添加一個控件。設(shè)置控件的尺寸寬500高400設(shè)置窗口相對于指定組件的位置。如果組件當(dāng)前未顯示,或者c為null,則此窗口將置于屏幕的中央。設(shè)置組件的可見性,如果為true則組件可見設(shè)置將該窗體永遠(yuǎn)在最前端顯示用戶單擊窗口的關(guān)閉按鈕時程序執(zhí)行的操作 界面布局注解: JPaneljp=newJPanel(); jp.add(system=newJRadioButton("系統(tǒng)界面",true)); system.addActionListener(this); jp.setBorder(BorderFactory.createTitledBorder("界面風(fēng)格"));創(chuàng)建面板jp,給jp設(shè)置一個標(biāo)題,標(biāo)題名稱為界面風(fēng)格,將面板jp設(shè)置為系統(tǒng)界面給其添加到動作監(jiān)聽器頁面效果代碼及注解:publicvoidactionPerformed(ActionEventae){這里寫一個動作開始執(zhí)行的方法,參數(shù)是一個動作事件,先聲明一個新的變量來獲取這個事件源,然后在通過if語句判斷動作類型:start執(zhí)行的是開始截屏動作;cancel執(zhí)行的是退出操作。elseif(source==cancel){System.exit(0);}如果事件源的值為system,則顯示本軟件的系統(tǒng)外觀,這里需要捕獲一下異常。} } 系統(tǒng)的外觀如下圖(2)所示:圖(2)系統(tǒng)外觀圖5.2系統(tǒng)截圖實(shí)現(xiàn)設(shè)置起點(diǎn)終點(diǎn)橫縱坐標(biāo),注解請看下面:這里實(shí)現(xiàn)的是獲取截取屏幕范圍起點(diǎn)、終點(diǎn)的橫縱坐標(biāo),然后將這個范圍的邊框設(shè)置為紅色,畫出對應(yīng)截取屏幕的范圍。對于縱坐標(biāo)y,通過三目運(yùn)算符判斷,如果startY小于endY,那么y的值為startY,否則為endY。選擇區(qū)域的變量設(shè)置為select,創(chuàng)建一個新的矩形框?qū)ο?,他的寬是起點(diǎn)的橫坐標(biāo)減去終點(diǎn)的橫坐標(biāo)的絕對值;他的高是起點(diǎn)的縱坐標(biāo)減去終點(diǎn)的縱坐標(biāo)的絕對值。設(shè)置八點(diǎn)的位置,注解請看下面:設(shè)置八個點(diǎn)的位置,先創(chuàng)建一個坐標(biāo)對象,設(shè)置他的起始點(diǎn)和終點(diǎn),起點(diǎn)就是x,y兩個參數(shù)減去5個像素點(diǎn),終點(diǎn)的位置在(10,10);第二個點(diǎn)同上邊的第一個點(diǎn);然后是第三個點(diǎn)的位置,判斷起點(diǎn)的橫坐標(biāo)是否大于終點(diǎn)的橫坐標(biāo),如果結(jié)果為true,則起始點(diǎn)橫坐標(biāo)為startX,否則為EndX;終點(diǎn)的坐標(biāo)依然是(10,10);依次往后的點(diǎn)都如同第三個點(diǎn).運(yùn)行這個軟件的效果:通過if語句來判斷代碼是否開始執(zhí)行,在這里調(diào)用前邊寫的方法,設(shè)置截圖區(qū)域待確認(rèn)狀態(tài)下是青色,fillrect該函數(shù)用指定的畫刷填充矩形,然后在設(shè)置截圖邊框顏色為紅色,設(shè)置drawRect,將需要截圖的矩形框坐標(biāo)參數(shù)傳入其中,設(shè)置他的顏色為黑色,然后設(shè)置drawString方法,在截圖的時候輸出一些提示用戶的信息。具體的截圖效果如圖(3)所示。圖(3)八點(diǎn)及邊線展示圖 定義鼠標(biāo)移動是為了確定截屏的區(qū)域范圍和區(qū)域代碼。創(chuàng)建帶參數(shù)的私有的無返回值的方法doMouseMoved,進(jìn)行鼠標(biāo)移動勾選電腦屏幕的指定區(qū)域,在該方法中,如果所選的內(nèi)容包括了me參數(shù)所獲得的點(diǎn)的坐標(biāo),那么就將創(chuàng)建一個新的對象Cursor,并將該對象的值設(shè)定為MOVE_COURSOR,并將current的屬性值移動。如果不包括me,那么就將Status的值存入到一個數(shù)組中,進(jìn)行循環(huán),通過for循環(huán),循環(huán)條件是聲明一個局部的整型變量將i小于他的長度,i需要在一次執(zhí)行結(jié)束進(jìn)行自加一,再在循環(huán)里進(jìn)行判斷,如果它與me獲得的值相同,那么將數(shù)組對應(yīng)值傳入到current在將此值設(shè)置到cursor里,在判斷語句里寫上return,若果滿足則結(jié)束方法。循環(huán)結(jié)束后再將設(shè)置cursor,并將current的值設(shè)置為默認(rèn)的。移動鼠標(biāo)獲取鼠標(biāo)所在的位置。以下為這一操作的解釋。//通過八個方向(上北下南左西右東)決定x坐標(biāo)與y坐標(biāo),并將它們進(jìn)行刷新值創(chuàng)建帶參數(shù)的無返回值類型的initSelect方法,參數(shù)為state,即:privatevoidinitSelect(Statesstate){使用判斷語句switch/case的判斷方式進(jìn)行多次判斷,如果state狀態(tài)為默認(rèn)狀態(tài),那么將x坐標(biāo)設(shè)置為0,y坐標(biāo)設(shè)置為0,用break進(jìn)行結(jié)束case; switch(state){ caseDEFAULT: currentX=0;currentY=0;break; 同理:對于不同的state將X,Y坐標(biāo)進(jìn)行設(shè)置;若果state狀態(tài)設(shè)置為東(EAST),那么將x坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果x結(jié)束時的坐標(biāo)大于x開始的坐標(biāo),就輸出結(jié)束時的x坐標(biāo),反之就輸出x開始時的坐標(biāo),y坐標(biāo)設(shè)置為0,用break結(jié)束case;即:currentX=(endX>startX?END_X:START_X); currentY=0;break;若果state狀態(tài)設(shè)置為西(WEST),那么將x坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果x結(jié)束時的坐標(biāo)大于x開始的坐標(biāo),就輸出開始時的x坐標(biāo),反之就輸出x結(jié)束時的坐標(biāo),y坐標(biāo)設(shè)置為0,用break結(jié)束case;若果state狀態(tài)設(shè)置為北(NORTH),那么將y坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果y結(jié)束時的坐標(biāo)小于y開始的坐標(biāo),就輸出開始時的y坐標(biāo),反之就輸出y結(jié)束時的坐標(biāo),x坐標(biāo)設(shè)置為0,用break結(jié)束case;若果state狀態(tài)設(shè)置為南(SOUTH),那么將y坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果y結(jié)束時的坐標(biāo)小于y開始的坐標(biāo),就輸出結(jié)束時的y坐標(biāo),反之就輸出y開始時的坐標(biāo),x坐標(biāo)設(shè)置為0,用break結(jié)束case;若果state狀態(tài)設(shè)置為東北(NORTH_EAST),那么將y坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果y結(jié)束時的坐標(biāo)小于y開始的坐標(biāo),就輸出結(jié)束時的y坐標(biāo),反之就輸出y開始時的坐標(biāo),x坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果x結(jié)束時的坐大于x開始的坐標(biāo),就輸出開始時的y坐標(biāo),反之輸出結(jié)束時的y坐標(biāo),用break結(jié)束case;若果state狀態(tài)設(shè)置為西北(NORTH_WEST),那么將y坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果y結(jié)束時的坐標(biāo)小于y開始的坐標(biāo),就輸出開始時的y坐標(biāo),反之就輸出y結(jié)束時的坐標(biāo),x坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果x結(jié)束時的坐大于x開始的坐標(biāo),就輸出開始時的x坐標(biāo),反之輸出結(jié)束時的x坐標(biāo),用break結(jié)束case;若果state狀態(tài)設(shè)置為東南(SOUTH_EAST),那么將y坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果y結(jié)束時的坐標(biāo)小于y開始的坐標(biāo),就輸出結(jié)束時的y坐標(biāo),反之就輸出y開始時的坐標(biāo),x坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果x結(jié)束時的坐大于x開始的坐標(biāo),就輸出結(jié)束時的x坐標(biāo),反之輸出開始時的x坐標(biāo),用break結(jié)束case;若果state狀態(tài)設(shè)置為西南(SOUTH_WEST),那么將y坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果y結(jié)束時的坐標(biāo)小于y開始的坐標(biāo),就輸出結(jié)束時的y坐標(biāo),反之就輸出y開始時的坐標(biāo),x坐標(biāo)設(shè)置為三目運(yùn)算并進(jìn)行判斷,如果x結(jié)束時的坐大于x開始的坐標(biāo),就輸出開始時的x坐標(biāo),反之輸出結(jié)束時的x坐標(biāo),用break結(jié)束case;當(dāng)不屬于以上情況時,將x的坐標(biāo)設(shè)置為0,y坐標(biāo)設(shè)置為0。} 在窗口顯示所截圖片注解:創(chuàng)建一個類Temp并且繼承面板類最后實(shí)現(xiàn)鼠標(biāo)監(jiān)聽接口: privateclassTempextendsJPanelimplementsMouseListener,MouseMotionListener在該類中聲明幾個對象,即: 私有的緩沖圖片類型bi,即:privateBufferedImagebi; 私有的整型寬度以及長度,即:privateintwidth,height; 私有的整型x的起始坐標(biāo),y的起始坐標(biāo),x的結(jié)束坐標(biāo),y的結(jié)束坐標(biāo),以及臨時的x坐標(biāo),y坐標(biāo),即:privateintstartX,startY,endX,endY,tempX,tempY; 私有的面板jf,即:privateJFramejf; 私有的矩形select并初始化為0,即:privateRectangleselect=newRectangle(0,0,0,0); 私有的cursor類型的cs,即: privateCursorcs=newCursor(Cursor.CROSSHAIR_CURSOR); 私有的狀態(tài)current并設(shè)置為默認(rèn)值,即:privateStatescurrent=States.DEFAULT; 私有的矩形數(shù)組,即:privateRectangle[]rec; 公有的的靜態(tài)常量x的開始坐標(biāo),即:publicstaticfinalintSTART_X=1; 公有的的靜態(tài)常量x的結(jié)束坐標(biāo),即:publicstaticfinalintSTART_Y=2; 公有的的靜態(tài)常量y的開始坐標(biāo),即:publicstaticfinalintEND_X=3; 公有的的靜態(tài)常量y的結(jié)束坐標(biāo),即:publicstaticfinalintEND_Y=4;privatePointp=newPoint();privatebooleanshowTip=true;創(chuàng)建公有的有參的Temp構(gòu)造函數(shù)(參數(shù)為面板jf,緩沖圖片bi,以及圖片的長度,圖片的寬度),即:publicTemp(JFramejf,BufferedImagebi,intwidth,intheight){ 函數(shù)體將jf賦值給Temp的jf, bi賦值給Temp的bi, 寬度賦值給Temp的寬度, 高度賦值給Temp的高度, 在將鼠標(biāo)監(jiān)聽器加到Temp上, 調(diào)用方法initRecs();} 創(chuàng)建私有的無參無返回值類型的方法initRecs,方法體里創(chuàng)建新的矩形對象,for循環(huán)生成矩形的八點(diǎn)坐標(biāo);即:privatevoidinitRecs() 創(chuàng)建公有的帶參數(shù)的無返回值類型的方法paintComponent,方法體里進(jìn)行劃線,指定畫線的起始以及終點(diǎn)坐標(biāo),即:publicvoidpaintComponent(Graphicsg) 并將線設(shè)置成紅色, 劃線x的起始坐標(biāo),y的起始坐標(biāo),x的終止坐標(biāo),y的起始坐標(biāo), 畫第二條線x的起始坐標(biāo),y的結(jié)束坐標(biāo),x的終止坐標(biāo),y的終止坐標(biāo), 畫第三條線x的起始坐標(biāo),y的起始坐標(biāo),x的起始坐標(biāo),y的終止坐標(biāo), 畫第四條線x的結(jié)束坐標(biāo),y的起始坐標(biāo),x的終止坐標(biāo),y的終止坐標(biāo), 并將x坐標(biāo)重新進(jìn)行賦值,若x的起始坐標(biāo)小于x的終止坐標(biāo),x值為x的起始坐標(biāo),反之為x的結(jié)束坐標(biāo), 并將y坐標(biāo)重新進(jìn)行賦值,若y的起始坐標(biāo)小于y的終止坐標(biāo),y值為y的起始坐標(biāo),反之為y的結(jié)束坐標(biāo), 將新的矩形對象設(shè)置為(x,y,起始與終止的x坐標(biāo)差的絕對值,起始與終止的y坐標(biāo)差的絕對值), 設(shè)置x1的值為起始與終止坐標(biāo)和的一半,設(shè)置y1的值為起始與終止坐標(biāo)和的一半,將其設(shè)置為:并且以矩形框設(shè)置第一個點(diǎn)的像素點(diǎn)(x-5,y-5,10,10); 以矩形框設(shè)置第二個點(diǎn)的像素點(diǎn)(x1-5,y-5,10,10); 以矩形框設(shè)置第三個點(diǎn)的像素點(diǎn)((startX>;endX?startX:endX)-5,y-5,10,10); 以矩形框設(shè)置第四個點(diǎn)的像素點(diǎn)((startX>;endX?startX:endX)-5,y1-5,10,10);以矩形框設(shè)置第五個點(diǎn)的像素點(diǎn)((startX>;endX?startX:endX)-5,(startY>;endY?startY:endY)-5,10,10); 以矩形框設(shè)置第六個點(diǎn)的像素點(diǎn)(x1-5,(startY>;endY?startY:endY)-5,10,10); 以矩形框設(shè)置第七個點(diǎn)的像素點(diǎn)(x-5,(startY>;endY?startY:endY)-5,10,10); 以矩形框設(shè)置第八個點(diǎn)的像素點(diǎn)(x-5,y1-5,10,10);并將顏色設(shè)置為青色,再次將其設(shè)置為(p.x,p.y,170,20);設(shè)置顏色為紅色,畫框(p.x,p.y,170,20);設(shè)置顏色為黑色,在(p.x,p.y+15)寫下內(nèi)容“按住鼠標(biāo)即可選擇截圖范圍”。圖片獲取成功就會在多層菜單欄中顯示出來。圖片下方顯示可以對圖片進(jìn)行的操作,分別是存儲、復(fù)制到剪切板、編輯和關(guān)閉,如圖(4)所顯示。圖(4)成功截圖展示圖操作欄四個按鈕的設(shè)置,注解請看下面:聲明一個私有的返回值為空的方法initPanel(),方法里聲明四個按鈕:“保存”、“復(fù)制到剪切板”、“關(guān)閉”、“編輯”。將他們分別賦值給四個變量使用:save、copy、close、update。然后分別將他們的菜單選項(xiàng)熱鍵設(shè)置為:s、c、x、u聲明一個新的Jpanel類型的變量buttonPanel,將上邊四個按鈕添進(jìn)去,然后分別給四個變量添加四個動作監(jiān)聽器。 聲明一個返回值為空的帶動作事件參數(shù)的方法,是個動作監(jiān)聽的方法。 在創(chuàng)建一個新的Object類型的變量source用于接收事件源。 再通過if語句比對,來判斷系統(tǒng)改做出設(shè)么樣的動作: save調(diào)用對應(yīng)的存儲模塊; copy調(diào)用對應(yīng)的拷貝模塊; close則調(diào)用關(guān)閉模塊。5.3截圖的編輯實(shí)現(xiàn)要想對截圖進(jìn)行編輯,在圖片上面編輯文字時,鼠標(biāo)左鍵點(diǎn)擊“編輯”,出現(xiàn)操作提示窗,先將圖片保存,再編輯文字。主界面設(shè)置代碼及注解:定義了一個私有的獲取截圖方法,并且聲明一個截圖對象,然后把他放到保存之后進(jìn)行編輯(如:添加文字)panel.setBorder(newTitledBorder(border,"設(shè)置",F(xiàn)ont.LAYOUT_LEFT_TO_RIGHT,F(xiàn)ont.LAYOUT_LEFT_TO_RIGHT,font));里面運(yùn)用一個布局管理器,部件如果想加入其中需要借助GridBagConstraints,利用組件的橫縱坐標(biāo),并設(shè)置了組件所占行列數(shù),也就是截圖的寬度,還有截圖的高度,當(dāng)組件在其格內(nèi)而不能撐滿其格時,通過fill的值來設(shè)定填充方式,用戶通過滑動滑塊,查看截圖的各個部分。同時也可以利用拖拽的方式,調(diào)整音量和背景亮度等,可以在代碼中生成對應(yīng)的輸出口。部分按鈕設(shè)置相關(guān)代碼:} 界面以及按鈕的展示圖如下圖(5):圖(5)添加文字界面 通過調(diào)用父類的繪制事件,并重寫父類的繪制函數(shù),調(diào)用了父類的相應(yīng)方法,并且父類的方法中還有可能包含一些默認(rèn)操作,因?yàn)橛行┎僮魇潜仨毜?,繪制的時候并且,進(jìn)行了非空判斷,對于繪制的要求 預(yù)覽效果展示圖(6):圖(6)預(yù)覽添加文字5.4截圖的存儲實(shí)現(xiàn) 圖片截取成功之后,鼠標(biāo)左鍵點(diǎn)擊“復(fù)制到剪切板”,出現(xiàn)“已復(fù)制到剪切板”的信息提示,點(diǎn)擊“確認(rèn)”按鈕,即可完成復(fù)制操作。 請看下述代碼及注解: 定義此信息框?qū)τ谟脩舨僮鞯囊粋€判斷這個方法的參數(shù),在對于復(fù)制截圖到剪切板中的時候,如果圖片為空的話,就提示用戶為空,否則就成功復(fù)制到剪切板。并添加了捕獲異常的控件,如果出現(xiàn)錯誤,就提示用戶說復(fù)制到系統(tǒng)粘貼板出錯,控件消失。,"復(fù)制到系統(tǒng)粘帖板出錯!!","錯誤",JOptionPane.ERROR_MESSAGE);}}Transferable是一個用于不同存儲介質(zhì)間數(shù)據(jù)傳輸?shù)慕涌?,必須通過此接口才能實(shí)現(xiàn)兩個存儲介質(zhì)間的數(shù)據(jù)傳輸,此接口還封裝了數(shù)據(jù)傳輸過程的具體方式。主要的方法有:(1)ObjectgetTransferData(DataFlavorflavor)返回一個Transferable數(shù)據(jù)傳輸對象,參數(shù)則用來指定數(shù)據(jù)傳輸過程中的數(shù)據(jù)傳輸格式;(2)DataFlavor[]getTransferDataFlavors()用來返回一個DataFlavor數(shù)組;(3)BooleanisDataFlavorSupported(DataFlavorflavor)判斷當(dāng)前用來傳輸數(shù)據(jù)的Transferable對象的數(shù)據(jù)傳輸格式是否符合DataFlavor對象中的幾種格式(stringFlavor,imageFlavor,plainTextFlavor)Transferable對象是用來傳輸數(shù)據(jù)的,DataFlavor則封裝于該對象中用來指定該對象傳輸數(shù)據(jù)時的數(shù)據(jù)的格式展示圖請看下圖(7):圖(7)將截圖保存到剪切板使用word測試圖片是否成功復(fù)制到剪切板,如圖(8)所示。 圖(8)出現(xiàn)“已復(fù)制到剪切板”的信息,表示該模塊的功能已經(jīng)實(shí)現(xiàn)。截取圖片成功之后,鼠標(biāo)左鍵點(diǎn)擊“存儲”,進(jìn)行圖片的存儲,這是會出現(xiàn)圖片存儲位置的選擇信息,圖片的保存格式也可以進(jìn)行選擇。請看下述注解:定義了一個保存方法,并在方法中進(jìn)行異常的捕獲,開頭的時候進(jìn)行了保存圖片的獲得判斷,如果它沒有讀到圖片信息的話,就提示用戶圖片不能為空,否則就跳出這個方法,然后引入了保存不同類型,不同格式的圖片,并一一進(jìn)行了引入,傳人了this這個狀態(tài)信息,,并設(shè)置了格式過濾器,如果是靜態(tài)的圖片就選擇相對應(yīng)的保存格式,這些格式的判斷方法在代碼中已經(jīng)一一進(jìn)行了判斷,保存格式有jpeg,png,bmp,如果是動態(tài)的圖片,就需要就需要保存為gif的格式,并且如果再運(yùn)行過程中,如果抓到異常,要在控制臺打印錯誤信息??!其中需要設(shè)置格式過濾器,選擇所需要的格式:這是向用戶可選擇的文件過濾器列表添加一個過濾器,如果應(yīng)該保存該文件就返回true,否則返回false,用戶點(diǎn)擊保存按鈕的時候,由繼承了這個過濾器類上門的UI調(diào)用此方法,但要確保指定的文件是可見的,不是隱藏的,并要通知對此事件感興趣的所有偵聽器,最后返回一個bmp對象,給用戶一個反饋.這是通過繼承filechooser類來讓用戶最終確定保存的格式,給用戶提供了一種簡單的機(jī)制,并返回用戶保存路徑,通過用戶選擇的保存格式,通過它相對應(yīng)的過濾器,如保存GIG格式的過濾器privateclassGIFfilter并且寫了一個暫時類,來顯示當(dāng)前的屏幕圖像,TEMP,引證了過濾器的判斷,最終實(shí)現(xiàn)jpeg,bmp,png,和動態(tài)圖片gif,的保存。展示圖請看下面圖(9):圖(9) 截圖保存過程圖 點(diǎn)擊保存后,進(jìn)入到目錄下進(jìn)行查看,查看是否保存成功。圖(9)查看已保存的截圖 經(jīng)查看已經(jīng)成功存儲6.系統(tǒng)測試系統(tǒng)測試,即整合起來眾多的元素展開測試,測試他們集合在一起能否正常運(yùn)行,這些內(nèi)容包括各種方面種種信息,比如,系統(tǒng)軟件和應(yīng)用軟件、電腦硬件、外接鼠標(biāo)鍵盤等硬件、Internet等。系統(tǒng)測試將會對整個系統(tǒng)進(jìn)行測試,主要是為了測試系統(tǒng)能否滿足目標(biāo)需求,并從中發(fā)現(xiàn)漏洞和不足之處,進(jìn)而針對性的進(jìn)行優(yōu)化和改進(jìn)。6.1截圖軟件系統(tǒng)測試 系統(tǒng)測試的目的是對該軟件的功能進(jìn)行檢測,是否能夠?qū)崿F(xiàn)需求功能。分別進(jìn)行截圖保存的測試,復(fù)制的測試,編輯(添加文字)的測試。6.1.1保存選項(xiàng)測試圖片截取之后,出現(xiàn)“成功存儲”,則表示圖片已經(jīng)儲存,同時需要對圖片進(jìn)行命名,如果不命名就不完成儲存;如果存儲失敗將會出現(xiàn)“未能成功儲存”的提示信息。圖(10)截圖保存 圖(11)成功保存經(jīng)運(yùn)行測試,證明保存截圖功能沒有問題,已經(jīng)成功實(shí)現(xiàn)。6.1.2復(fù)制到剪切板選項(xiàng)測試在圖片已經(jīng)截取之后,出現(xiàn)“成功存儲”,則為已經(jīng)復(fù)制到剪切板;出現(xiàn)“未能復(fù)制到剪切板”,則為失敗。圖(12) 復(fù)制到剪切板圖(13)復(fù)制到剪切板成功經(jīng)過運(yùn)行測試,證明復(fù)制到剪切板功能沒有問題,已經(jīng)成功實(shí)現(xiàn)。6.1.3編輯選項(xiàng)測試在圖片上添加文字。如果文字在圖片上面顯示,則為編輯成功,否則編輯功能未能實(shí)現(xiàn)。圖(14)添加文字成功經(jīng)過運(yùn)行測試,證明添加文字功能沒有問題,已經(jīng)成功實(shí)現(xiàn)。6.2測試評價測試結(jié)果顯示,需求功能已經(jīng)滿足使用的需要,能夠進(jìn)行截圖、存儲和編輯等操作。但是功能還不夠全面,同時,外觀還不夠美化,以上兩方面還需要進(jìn)行優(yōu)化和完善,以為用戶提供更加優(yōu)質(zhì)的服務(wù)?,F(xiàn)階段的測試結(jié)果表明,本截圖工具中沒有嚴(yán)重的漏洞。結(jié)論在諸多朋友和老師的幫助之下,終于完成了這個截圖工具的設(shè)計和制作,在此過程中,我將軟件工程的相關(guān)理論和技術(shù)作為基礎(chǔ),制定設(shè)計和制作計劃,一步一步的按照計劃完成,嚴(yán)格根據(jù)整體的制作計劃執(zhí)行。雖然最終完成了這一工具的設(shè)計和調(diào)試,但是在過程中我還是出現(xiàn)很多錯誤,我發(fā)現(xiàn)自己對開發(fā)工具相關(guān)理論和工具的掌握程度還有待提升,有很大一部分時間的設(shè)計效率不高,將寶貴的時間浪費(fèi)了,同時在系統(tǒng)擴(kuò)充時,也出現(xiàn)了問題。我需要繼續(xù)提升自身的專業(yè)水平,學(xué)習(xí)多方面的專業(yè)知識,為未來進(jìn)行更好的設(shè)計做準(zhǔn)備。在這次的畢業(yè)設(shè)計的過程中,我發(fā)現(xiàn)自己還有很多的不足,但是畢業(yè)設(shè)計的成功完成也提升了我的信心。未來,我還有很大的上升空間,繼續(xù)堅持,繼續(xù)努力。參考文獻(xiàn)\h程新黨;\h程強(qiáng);\h黃河濤.基于Windows圖形驅(qū)動的屏幕截圖技術(shù)(2005年12期)\h魏威.利用C#和GDI+制作屏幕截圖小軟件.圖形圖像處理(2013年23期)張之.QQ屏幕截圖的秘密.CFan加油站(2007年1
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡(luò)安全應(yīng)急響應(yīng)-第3篇-洞察分析
- 網(wǎng)絡(luò)學(xué)習(xí)社區(qū)建設(shè)-洞察分析
- 數(shù)字藝術(shù)教育創(chuàng)新-洞察分析
- 水陸聯(lián)運(yùn)技術(shù)集成-洞察分析
- 藥物作用靶點(diǎn)驗(yàn)證技術(shù)-洞察分析
- 營養(yǎng)素與環(huán)境關(guān)系研究-洞察分析
- 網(wǎng)絡(luò)藝術(shù)市場分析-洞察分析
- 新能源車輛在物流業(yè)的應(yīng)用-洞察分析
- 從社交平臺到市場爆款的地鐵文創(chuàng)產(chǎn)品設(shè)計秘訣
- 辦公空間綠色改造的實(shí)踐與思考
- 文創(chuàng)店室內(nèi)設(shè)計方案
- 裝修公司安全生產(chǎn)規(guī)章制度
- 認(rèn)領(lǐng)一只羊計劃書
- 超聲波探傷儀350 操作手冊-1
- 肺膿腫小講課
- 戴明的質(zhì)量管理
- 《企業(yè)如何合理避稅》課件
- 2022-2023學(xué)年山東省淄博市張店區(qū)青島版(五年制)三年級上冊期末考試數(shù)學(xué)試卷
- 【基于eNsp平臺的小學(xué)無線網(wǎng)絡(luò)系統(tǒng)設(shè)計與實(shí)現(xiàn)18000字(論文)】
- 小學(xué)六年級上冊音樂知識復(fù)習(xí)匯總
- 《幼兒園美術(shù)課件:認(rèn)識卡通人物》
評論
0/150
提交評論