版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
摘要隨著Internet技術(shù)的發(fā)展,越來越多的交易活動都在網(wǎng)絡(luò)上進行,網(wǎng)上購物已經(jīng)成為一種時尚.鑒于此我們針對圖書的網(wǎng)上交易開發(fā)了一個網(wǎng)上圖書訂購系統(tǒng).本系統(tǒng)以頁面的方式向顧客展示網(wǎng)上書城的書籍,并需要顧客注冊為網(wǎng)上書城的會員,為會員提供購物和留言的功能.購物時為顧客提供購物車和定單功能;游客有瀏纜商品和瀏纜留言板的功能.為網(wǎng)站管理員提供對各個版塊的管理功能.本系統(tǒng)使用eclipse作為開發(fā)工具,基于B/S模式,采用MVC框架對整體進行設(shè)計,以跨平臺語言java作為低層代碼實現(xiàn)語言.M(model)層使用Hibernate技術(shù)訪問數(shù)據(jù)庫,數(shù)據(jù)庫使用的是MySql數(shù)據(jù)庫;C(controller)層主要用struts技術(shù)實現(xiàn);而使用jsp來實現(xiàn)V(view)層的界面設(shè)計;使用Tomcat作為本系統(tǒng)Server端服務(wù)器.關(guān)鍵詞:雪域書城、Hibernate、Struts、jsp、java、Mysql、TomcatAbstractAlongwiththeInternettechnology'sdevelopment,moreandmoretransactionactivitiescarriesonthenetwork,on-lineshoppingalreadybecameonefashion.Inviewofthefactthatthiswehavedevelopedon-linebooksordersysteminviewofthebookson-linetransaction.Thissystembypage'swaytothecustomerdemonstratedthaton-linebookcitythebooks,andneedthecustomerregistrationforon-linebookcitymember,providestheshoppingandthemessagefunctionforthemember.Whenshoppingprovidestheshoppingcartandtheorderformfunctionforthecustomer;Thetouristhastheclearcablecommodityandtheclearcablemessagecenter'sfunction.Providesforthewebsitemanagertoeachsectormanagementfunction.Thissystemuseseclipsetotakethedevelopmentkit,inthepatternisbasedontheB/Spattern,thewholeusestheMVCframe,realizesthelanguagebycrossplatformlanguagejavaastheunderlyingbedcode.TheM(model)levelusestheHibernatetechnologytovisitthedatabase,whatdatabaseuseistheMySqldatabase;TheC(controller)levelmainlyrealizeswiththestrutstechnology;ButusesjsptorealizetheV(view)levelcontactsurfacedesign;UsesTomacttotakethissystemServerendserver.keyword:Snowterritorybookcity,Hibernate,Struts,jsp,java,Mysql目錄TOC\o"1-3"\h\u摘要 1Abstract 21緒論 52開發(fā)環(huán)境和開發(fā)工具簡介 62.1eclipse概述: 6eclipse項目簡介: 62.2java語言簡介 62.2.1Java語言特性 62.2.2豐富的類庫 62.3jsp概述: 72.4.1JSP的技術(shù)原理 73開發(fā)所用框架 73.1Hibernate概述: 7(1)持久化與關(guān)系數(shù)據(jù)庫 7(2)對象/關(guān)系阻抗不匹配 8(3)阻抗不匹配的幾個典型方面 8(4)對象/關(guān)系映射 83.2struts技術(shù)原理: 83.2.1struts整體框架: 83.2.2struts工作原理: 94系統(tǒng)需求分析 94.1系統(tǒng)主要功能詳細描述 94.2系統(tǒng)角色及其功能分析 104.3系統(tǒng)功能模塊設(shè)計 105總體設(shè)計 114.1系統(tǒng)用例圖: 144.1.1用戶用例圖: 144.2DB層設(shè)計: 154.1.2各類E-R圖: 15圖2.3.6 185.2DAO層設(shè)計 215.3SERVICE層設(shè)計 215.4WEB層設(shè)計 226系統(tǒng)詳細設(shè)計 236.1前臺部分 236.1.1前臺總體框架 23使用Hibernate連接數(shù)據(jù)庫: 24部分數(shù)據(jù)庫表的結(jié)構(gòu)設(shè)計: 25部分數(shù)據(jù)庫建表語句: 256.1.2用戶管理模塊 326.1.3修改密碼: 336.1.4購物車模塊 346.1.6留言板模塊 387致謝 428參考文獻 429附錄一中英文對照文獻 441緒論互聯(lián)網(wǎng)的浪潮席卷了我們生活的每一寸空間,從全球咨詢,到奇聞異事;從時事要聞到衣食住行;只有我們想不到的沒有在網(wǎng)絡(luò)上找不到的.由此可見互聯(lián)網(wǎng)給我們工作、生活、學習所帶來的翻天覆地的變化。隨著Internet的迅猛發(fā)展,電子商務(wù)也以不可思義的速度融入到我們的生活中,以他便利,安全,可靠的優(yōu)點沖擊著傳統(tǒng)的交易方式,網(wǎng)上購物已經(jīng)被越來越多的人接受,并逐漸成為一種時尚.Internet技術(shù)得到持續(xù)、猛烈的發(fā)展,已經(jīng)成為計算機產(chǎn)業(yè)的一個技術(shù)熱點,越來越多的企業(yè)開始關(guān)注網(wǎng)絡(luò),許多人正在或正準備學習網(wǎng)絡(luò)知識,進行網(wǎng)絡(luò)開發(fā)或創(chuàng)建自己的網(wǎng)站。本次畢業(yè)設(shè)計是基于B/S模式的網(wǎng)上購物系統(tǒng),采用MVC框架.使用到的技術(shù)主要包括Hibernate,Struts等基于java的開源框架,使用jsp進行動態(tài)網(wǎng)頁的設(shè)計.使用mysql數(shù)據(jù)庫對數(shù)據(jù)進行存儲,應(yīng)用服務(wù)器使用的是Tomcat服務(wù)器.本次網(wǎng)上購物系統(tǒng)是由我和另外兩人組成的三人小組共同開發(fā)完成的,本系統(tǒng)主要分為用戶管理,留言管理,產(chǎn)品管理,定單管理,購物車管理,管理員管理6個模塊;我負責對其中的用戶管理,留言管理,購物車管理3個模塊進行開發(fā).在此次畢業(yè)論文中,首先對開發(fā)中所有到的相關(guān)技術(shù)進行了簡單介紹:包括elipse的體系結(jié)構(gòu)和安裝,以及開發(fā)環(huán)境的配置;Java語言的特征和他的應(yīng)用前景;Hibernate的工作原理,配置文件和他的優(yōu)點;Jsp的技術(shù)原理;Struts的整體框架和工作原理.然后是對需求分析和詳細設(shè)計,包括數(shù)據(jù)庫的結(jié)構(gòu)設(shè)計;使用Hibernate連接數(shù)據(jù)庫,以及對本人所作模塊的展示和部分實現(xiàn)代碼.2開發(fā)環(huán)境和開發(fā)工具簡介2.1eclipse概述:eclipse項目簡介:
eclipse是一個開放源碼社區(qū),專注于開發(fā)框架和示范工具的通用平臺,從而使得構(gòu)建和部署軟件更簡單且成本有效.這個大型聯(lián)盟包括主要軟件供應(yīng)商,解決方案提供商,企業(yè),教研機構(gòu)和個人,他們密切合作,一起創(chuàng)建一個生態(tài)系統(tǒng),以便用補充的產(chǎn)品,能力和服務(wù)增強和形成eclipseeclipse為三類支持者提供價值
基于eclipse的產(chǎn)品的用戶將獲益于:提供對整個eclipse生態(tài)系統(tǒng)中研究和知識的訪問;經(jīng)受開放源碼社區(qū)詳細審查而產(chǎn)生的高質(zhì)量軟件;eclipse一致接口導致的重用技術(shù)的能力.eclipse平臺是一個具有一組強大服務(wù)的框架,這些服務(wù)支持插件,比如JDT和插件開發(fā)環(huán)境(PDE).它由幾個主要的部分構(gòu)成:平臺運行庫,工作區(qū),工作臺,團隊支持和幫助.
2.2java語言簡介2.2.1Java語言特性Java是一個廣泛使用的網(wǎng)絡(luò)編程語言,它是一種新的計算概念。首先,作為一種程序設(shè)計語言,它簡單、面向?qū)ο?、不依賴于機器的結(jié)構(gòu)、具有可移植性、魯棒性、安全性、并且提供了并發(fā)的機制、具有很高的性能。其次,它最大限度地利用了網(wǎng)絡(luò),Java的小應(yīng)用程序(applet)可在網(wǎng)絡(luò)上傳輸而不受CPU和環(huán)境的限制。另外,Java還提供了豐富的類庫,使程序設(shè)計者可以很方便地建立自己的系統(tǒng)。Java語言有下面一些特點:簡單、面向?qū)ο蟆⒎植际?、解釋?zhí)行、魯棒、安全、體系結(jié)構(gòu)中立、可移植、高性能、多線程以及動態(tài)性。2.2.2豐富的類庫Java提供了大量的類以滿足網(wǎng)絡(luò)化、多線程、面向?qū)ο笙到y(tǒng)的需要。(1.)語言包提供的支持包括字符串處理、多線程處理、例外處理、數(shù)學函數(shù)處理等,可以用它簡單地實現(xiàn)Java程序的運行平臺。(2.)實用程序包提供的支持包括哈希表、堆棧、可變數(shù)組、時間和日期等。(3.)輸入輸出包用統(tǒng)一的"流"模型來實現(xiàn)所有格式的I/O,包括文件系統(tǒng)、網(wǎng)絡(luò)、輸入(4.)低級網(wǎng)絡(luò)包用于實現(xiàn)Socket編程。(5.)抽象圖形用戶接口包實現(xiàn)了不同平臺的計算機的圖形用戶接口部件,包括窗口、菜單、滾動條、對話框等,使得Java可以移植到不同平臺的機器。(6.)網(wǎng)絡(luò)包支持Internet的TCP/IP協(xié)議,提供了與In-ternet的接口。它支持URL連接,WWW的即時訪問,并且簡化了用戶/服務(wù)器模型的程序設(shè)計。2.3jsp概述:2.4.1JSP的技術(shù)原理JSP語言及其特點在傳統(tǒng)的網(wǎng)頁HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP標記(tag),就構(gòu)成了JSP網(wǎng)頁(*.jsp)。JSP頁面看上去象標準的HTML和XML頁面,并附帶有JSP引擎能夠處理和抽取的額外元件。Web服務(wù)器在遇到訪問JSP網(wǎng)頁的請求時,首先執(zhí)行其中的程序片段,然后將執(zhí)行結(jié)果以HTML格式返回給用戶。程序片段可以操作數(shù)據(jù)庫、重新定向網(wǎng)頁以及發(fā)送E-mail等,這就是建立動態(tài)網(wǎng)站所需要的功能。所有程序都在服務(wù)器端執(zhí)行,網(wǎng)絡(luò)上傳送給客戶端的僅是得到的結(jié)果,對客戶瀏覽器的要求最低。它基于強大的Java語言,具有良好的伸縮性,在網(wǎng)絡(luò)數(shù)據(jù)庫應(yīng)用開發(fā)領(lǐng)域具有得天獨厚的優(yōu)勢。JSP技術(shù)加速了動態(tài)Web頁面的開發(fā):3開發(fā)所用框架3.1Hibernate概述:Hibernate是一個用于開發(fā)Java應(yīng)用的對象/關(guān)系映射框架。它通過在數(shù)據(jù)庫中為開發(fā)人員存儲應(yīng)用對象,在數(shù)據(jù)庫和應(yīng)用之間提供了一座橋梁,開發(fā)人員不必編寫大量的代碼來存儲和檢索對象,省下來的精力更多的放在問題本身上。(1)持久化與關(guān)系數(shù)據(jù)庫持久化的常見定義:使數(shù)據(jù)的存活時間超過創(chuàng)建該數(shù)據(jù)的進程的存活時間。數(shù)據(jù)持久化后可以重新獲得它;如果外界進程沒有修改它,它將與持久化之前相同。對于一般應(yīng)用來說,持久化指的是將數(shù)據(jù)存儲在關(guān)系數(shù)據(jù)庫中。
關(guān)系數(shù)據(jù)庫是為管理數(shù)據(jù)而設(shè)計的,它在存儲數(shù)據(jù)方面很流行,這主要歸功于易于使用SQL來創(chuàng)建和訪問。
關(guān)系數(shù)據(jù)庫使用的模型被稱為關(guān)系模型,它使用二維表來表示數(shù)據(jù)。這種數(shù)據(jù)邏輯視圖表示了用戶如何看待包含的數(shù)據(jù)。表可以通過主碼和外碼相互關(guān)聯(lián)。主碼唯一的標識了表中的一行,而外碼是另一個表中的主碼。(2)對象/關(guān)系阻抗不匹配關(guān)系數(shù)據(jù)庫是為管理數(shù)據(jù)設(shè)計的,它適合于管理數(shù)據(jù)。然而,在面向?qū)ο蟮膽?yīng)用中,將對象持久化為關(guān)系模型可能會遇到問題。這個問題的根源是因為關(guān)系數(shù)據(jù)庫管理數(shù)據(jù),而面向?qū)ο蟮膽?yīng)用是為業(yè)務(wù)問題建模而設(shè)計的。由于這兩種目的不同,要使這兩個模型協(xié)同工作可能具有挑戰(zhàn)性。這個問題被稱為對象/關(guān)系阻抗不匹配(Object/relationalimpedancemismatch)或簡稱為阻抗不匹配(3)阻抗不匹配的幾個典型方面在應(yīng)用中輕易實現(xiàn)的對象相同或相等,這樣的關(guān)系在關(guān)系數(shù)據(jù)庫中不存在。
在面向?qū)ο笳Z言的一項核心特性是繼承,繼承很重要,因為它允許創(chuàng)建問題的精確模型,同時可以在層次結(jié)構(gòu)中自上而下的共享屬性和行為。而關(guān)系數(shù)據(jù)庫不支持繼承的概念。
對象之間可以輕易的實現(xiàn)一對一,一對多和多對多的關(guān)聯(lián)關(guān)系,而數(shù)據(jù)庫并不理.解這些,它只知道外碼指向主碼。(4)對象/關(guān)系映射前頁列舉了一些阻抗不匹配的問題,當然開發(fā)人員是可以解決這些問題,但這一過程并不容易。對象/關(guān)系映射(Object/RelationalMapping)就是為解決這些問題而開發(fā)的。
ORM在對象模型和關(guān)系模型之間架起了一座橋梁,讓應(yīng)用能夠直接持久化對象,而不要求在對象和關(guān)系之間進行轉(zhuǎn)換。Hibernate就是ORM工具中最成功的一種。它的主要優(yōu)點是簡單,靈活,功能完備和高效。3.2struts技術(shù)原理:3.2.1struts整體框架:基于struts的MVC模式即Model-View-Controller的縮寫,是一種常用的設(shè)計模式。MVC減弱了業(yè)務(wù)邏輯接口和數(shù)據(jù)接口之間的耦合,以及讓視圖層更富于變化。Struts是MVC的一種實現(xiàn),它將Servlet和JSP標記(屬于J2EE規(guī)范)用作實現(xiàn)的一部分。Struts繼承了MVC的各項特性,并根據(jù)J2EE的特點,做了相應(yīng)的變化與擴展。3.2.2struts工作原理:控制:struts需要用到一個XML文件Struts-config.xml,與之相關(guān)聯(lián)的是Controller,在Struts中,承擔MVC中Controller角色的是一個Servlet,叫ActionServlet。ActionServlet是一個通用的控制組件。這個控制組件提供了處理所有發(fā)送到Struts的HTTP請求的入口點。它截取和分發(fā)這些請求到相應(yīng)的動作類(這些動作類都是Action類的子類)。另外控制組件也負責用相應(yīng)的請求參數(shù)填充ActionFrom(通常稱之為FromBean),并傳給動作類(通常稱之為ActionBean)。動作類實現(xiàn)核心商業(yè)邏輯,它可以訪問javabean或調(diào)用EJB。最后動作類把控制權(quán)傳給后續(xù)的JSP文件,后者生成視圖。所有這些控制邏輯利用Struts-config.xml文件來配置?;趕truts的MVC模式的三層模式介紹如下:視圖(View):主要由JSP生成頁面完成視圖,Struts提供豐富的JSP標簽庫:Html,Bean,Logic,Template等,這有利于分開表現(xiàn)邏輯和程序邏輯。模型(Module):模型以一個或多個javabean的形式存在。這些bean分為三類:ActionForm、Action、JavaBeanorEJB。ActionForm通常稱之為FormBean,封裝了來自于Client的用戶請求信息,如表單信息。Action通常稱之為ActionBean,獲取從ActionSevlet傳來的FormBean,取出FormBean中的相關(guān)信息,并做出相關(guān)的處理,一般是調(diào)用JavaBean或EJB等??刂?Controller):在Struts中,用戶的請求一般以*.do作為請求服務(wù)名,所有的*.do請求均被指向ActionSevlet,ActionSevlet根據(jù)Struts-config.xml中的配置信息,將用戶請求封裝成一個指定名稱的FormBean,并將此FormBean傳至指定名稱的ActionBean,由ActionBean完成相應(yīng)的業(yè)務(wù)操作,如文件操作,數(shù)據(jù)庫操作等。每一個*.do均有對應(yīng)的FormBean名稱和ActionBean名稱,這些在Struts-config.xml中配置。4系統(tǒng)需求分析4.1系統(tǒng)主要功能詳細描述(1)用戶可以注冊,登錄。(2)登錄用戶可以查看用戶資料,修改密碼,添加收貨人,刪除收貨人。(3)所有用戶可以瀏覽商品列表及每個商品的詳細信息。(4)所有用戶可以進行查詢本站所擁有的自己需要的物品。(5)所有用戶可以查看用戶留言列表,登錄用戶可以留言。(6)登錄用戶可以進行購物,并會像超市的購物車一樣放入自己需要的物品以便后面的下單。(7)登錄用戶可以對自己的購物車進行相關(guān)操作。(8)登錄用戶可以在進行購物后,進行下單,網(wǎng)站可以對定單進行處理。(9)用戶只能查看自己已經(jīng)有的定單,并能看到每個定單的詳細信息。(10)后臺管理員可以對用戶進行添加,刪除,修改和查詢操作。(11)后臺管理員可以對商品進行添加,刪除,修改和查詢操作。(12)后臺管理員可以查看所有的用戶對應(yīng)的定單。并能對每個定單進行刪除操作。(13)后臺管理員可以對用戶留言進行刪除操作。4.2系統(tǒng)角色及其功能分析系統(tǒng)主要用戶有三類:游客,登陸用戶,管理員。游客主要可以用的功能是:查看所有商品,搜索商品,查看商品詳細信息,查看用戶留言列表。登錄用戶主要可以用的功能:查看修改自己的資料,查看所有商品,搜索商品,查看商品詳細信息,購買商品,下定單,查看定單,查看用戶留言列表,留言。管理員主要功能:操作普通管理員信息,操作用戶信息,操作產(chǎn)品信息,操作定單信息,操作用戶留言信息。4.3系統(tǒng)功能模塊設(shè)計功能結(jié)構(gòu)圖如下:網(wǎng)上購網(wǎng)上購書系統(tǒng)網(wǎng)上購書系統(tǒng)前臺功能后臺功能用戶管理用戶購買書用戶留言個人資料管理留言板管理商品管理用戶信息管理鏈接信息管理留言管理訂單管理管理員身份驗證功能模塊設(shè)計圖從圖中可以看出,網(wǎng)上購物系統(tǒng)可以分為前臺和后臺兩個部分,前臺部分由用戶使用,主要包括用戶注冊,生成訂單,購物車管理,查看購物車,查看留言,訂購產(chǎn)品,訂單查詢和發(fā)布留言7個模塊;后臺部分由管理員使用,主要包括管理員身份驗證,商品管理,處理訂單,用戶信息管理,留言管理,連接信息管理6個模塊。5總體設(shè)計網(wǎng)上書城系統(tǒng)是基于B/S架構(gòu)。實現(xiàn)網(wǎng)上售書的電子商務(wù)網(wǎng)站。系統(tǒng)使用Java語言開發(fā),利用到Hibernate和Struts等開源框架,整個系統(tǒng)分成多層,有效實現(xiàn)了系統(tǒng)各部分的低偶合.整個系統(tǒng)主要有:表現(xiàn)層.業(yè)務(wù)層.數(shù)據(jù)訪問層。利用軟件分層把系統(tǒng)偶合度降低。在數(shù)據(jù)訪問層,使用接口和和實現(xiàn)分離。上層的服務(wù)只依賴于底層的接口,底層的實現(xiàn)方式改變不會影響到上層的服務(wù)。這樣就會最大程度的降低了軟件各部分之間的偶合。便于以后修改底層的實現(xiàn)。在分層的基礎(chǔ)上。有將軟件分模塊,從而使系統(tǒng)橫向上面分模塊,縱向上面分層次。整個軟件的層次是:表現(xiàn)層業(yè)務(wù)層數(shù)據(jù)訪問層DB整個軟件根據(jù)系統(tǒng)需求分析,可得出系統(tǒng)兩種用戶的業(yè)務(wù)流程圖。前臺用戶操作業(yè)務(wù)流程為:開始瀏覽用戶留言信息覽商品列表登錄瀏覽商品詳細信息登錄NN登錄YY添加商品進購物車用戶留言購物車生成定單退出結(jié)束在用戶業(yè)務(wù)流里面,首先用戶連接到主界面,主界面顯示所有商品,并且提供商品的搜索服務(wù),在主界面可以直接連接到用戶留言列表界面,在主界面還可以連接到用戶登錄界面。用戶在主界面可以瀏覽所有的商品,也可以查看商品的詳細信息,在用戶主界面和商品詳細信息界面,用戶可以將商品添加進購物車,此操作只有登錄用戶可以使用,非登錄用戶選自添加進購物車會被攔截到未登錄界面。用戶在留言主界面可以進行留言。非登錄用戶不能留言。用戶可以點擊購物車,進入購物車界面,在購物車界面,用戶可以對購物車里的商品進行刪除操作,也可以將購物車中的商品修改數(shù)量,還可以清空購物車。也可以在購物車界面選擇繼續(xù)購物,連接到主界面繼續(xù)選擇商品。用戶還可以在購物車界面進行下單操作。將購物車里的商品生成定單。在生成定單之前.需要用戶添加收獲人地址,一個用戶可以添加多個收貨人地址.生成定單后,用戶可以查看自己的定單。后臺管理員的業(yè)務(wù)流程為:開始登錄管理員主界面有權(quán)限N權(quán)限出錯頁面Y管理員管理用戶管理產(chǎn)品管理定單管理留言管理退出結(jié)束在后臺中,管理員可以直接進入管理員入口登錄管理員管理界面。在管理員管理的主界面顯示的是管理員所有的操作。管理員可直接選擇操作進入不同的管理界面,對管理員管理主要有超級管理員來實現(xiàn),其他管理員沒有此操作。用戶管理界面直接顯示所有用戶的列表,在用戶管理界面。管理員可以選擇添加和刪除用戶,在產(chǎn)品管理界面,管理員可以添加和刪除產(chǎn)品。定單管理界面。管理員可以刪除定單。留言管理界面。管理員可以刪除留言。4.1系統(tǒng)用例圖:4.1.1用戶用例圖:4.1.2管理員用例圖:4.2DB層設(shè)計:4.1.2各類E-R圖:(1)User(用戶):User有11個屬性,分別是:userid,username,password,createtime,addr,telephone,e_ma,gender,age,state,role.User的E-R如圖2.3.1所示.UsernnamePasswordstateUsernnamePasswordstateUserUserUseridRoleCreatetimeUseridRoleCreatetime圖2.3.1(2)UserItem(收貨人):UserItem有7個屬性,分別是:user_item_id,item_name,item_address,item_email,item_mobilelphone,item_officephone,item_postcode.UserItem的E-R圖2.3.2所示.Item_addressUser_item_idItem_nameItem_addressUser_item_idItem_nameItem_emailItem_emailUseritemUseritemItem_mobilephoneItem_mobilephoneItem_postcodeItem_officephoneItem_postcodeItem_officephone圖2.3.2(3)Message(用戶留言):Message有4個屬性,分別是:Messageid,title,content,usernameMessage的E-R圖如圖2.3.3所示.contentmessageIdtitlecontentmessageIdtitleUsernameUsernameMessageMessage圖2.2.3(4)Module(管理員權(quán)限):module有2個屬性,分別是:moduleId,moduleName Module的E-R圖如圖2.3.4所示:Module_nameModule_idModule_nameModule_idModuleModule圖2.2.4(5)Admin(管理員):Admin有5個屬性,分別是:adminid,adminname,password,email,telAdmin的E-R圖如圖2.2.5所示:passwordadminidadminnamepasswordadminidadminnameAdminAdmintelemailtelemail圖2.2.5(6)Catalog(書籍分類)Catalog有3個屬性,分別是:catalogid,catalogname,descriptionCatalog的E-R圖如圖2.3.6所示:descriptiondescriptioncatalognamecatalogidcatalognamecatalogidCatalogCatalog圖2.3.6(7)Product(商品):Product有11個屬性,分別是:name,isbn,printer,author,price,productid,booknum,state,imagepath,description,createtimeProduct的E-R圖如圖2.3.7所示.nameisbnnameisbnprinterauthorbooknumdescriptionImagepathcreatetimepricestateProductidproduct圖2.3.7`(8)Order(定單):Order有5個屬性,分別是:orderid,totalprice,orderstate,payinfo,createtime.Order的E-R圖如圖2.2.8所示:orderstateorderidtotalpriceorderstateorderidtotalpriceorderorderpayinfocreatetimepayinfocreatetime圖2.2.8(9)OrderItem(定單條目):OrderItem有2個屬性,分別是:order_item_id,qualityOrderItem的E-R圖如圖2.3.9所示:qualityqualityorder_item_idorder_item_idorder_itemorder_item圖2.3.9(10)對各個類的E-R圖進行,并標出他們之間的對應(yīng)關(guān)系,得到整體E-R圖.其中一個User(用戶)可以有多個Message(留言),可以添加多個UserItem(收獲人),可以創(chuàng)建多個Order(定單);一個UserItem(收獲人)可以創(chuàng)建多個Order(定單);一個Order(定單)可以增加多個OrderItem(定單條目);一個Product(商品)可以存在于多個OrderItem(定單條目)中;一個Catalog(商品類型)中可以有多個此類的Product(商品);一個Admin(管理員)可以有多個Module(權(quán)限),一個Module(權(quán)限)可以為多個Admin(管理員)所有.MessageMessageTalknTalkuserItemaddUser1userItemaddUser1n1createcreate1createncreateorderordern1addaddcreateProductHaveorderItemncreateProductHaveorderItemn1ncatalog1cataloghavemoduleadminhavemoduleadminmn5.2DAO層設(shè)計在數(shù)據(jù)訪問層,將全部使用接口和實現(xiàn)分離,這樣便于以后更換數(shù)據(jù)庫,降低了數(shù)據(jù)訪問層與數(shù)據(jù)庫之間的偶合度。在這層中,主要是對數(shù)據(jù)庫的表操作。我們利用的是Hibernate技術(shù)。這是一種ORM技術(shù),可以將關(guān)系數(shù)據(jù)庫中存的每條記錄都對應(yīng)成一個實體,由于所有數(shù)據(jù)庫中的表都只通過DAO來訪問,所以在DAO中要有每個表的入口。因此,要為每和實體類對應(yīng)一個DAO。5.3SERVICE層設(shè)計Service主要是系統(tǒng)的業(yè)務(wù)邏輯,也就是系統(tǒng)的實際的業(yè)務(wù)邏輯活動,是系統(tǒng)的真正的核心,這一層主要都是一些業(yè)務(wù)。同時這一層中應(yīng)該加上事務(wù),因為,對數(shù)據(jù)庫的操作可能出現(xiàn)異常,而Service完全依賴于DAO,所以當數(shù)據(jù)庫出現(xiàn)異常后,這里可以對未完成的事務(wù)進行回滾。5.4WEB層設(shè)計WEB層主要是用來接收用戶請求,并通過請求的不同選擇相應(yīng)的服務(wù)來處理請求,再把結(jié)果表現(xiàn)給用戶。這樣在WEB中把請求,服務(wù)和表現(xiàn)分開。我們在Java的開源框架中選擇Struts來做WEB層,我們首先利用Action來接收請求,在Action中有不同的方法來處理不同的請求,再在Action中調(diào)用相應(yīng)的Service來處理請求。對執(zhí)行結(jié)果進行判斷后,選擇不同的JSP來進行表現(xiàn)。Struts中這種開發(fā)我們成為MVC模式,下面是MVC模式的圖解,以及在本系統(tǒng)中的具體作用: C控制層 ActionnewRequestreturnM模型層瀏覽器forward/redirectResponseV視圖層Jsp6系統(tǒng)詳細設(shè)計6.1前臺部分6.1.1前臺總體框架前臺部分由用戶使用,包括用戶注冊,購物車管理,留言板管理,個人資料管理等幾個部分。(1)模塊功能介紹用戶管理:為了便于網(wǎng)站的管理,必須有一套完整的用戶管理體系。該網(wǎng)站用戶管理模塊由用戶注冊,用戶登陸,修改密碼部分組成。購物車:所選商品須通過購物車進行保存,然后生成訂單。查看用戶資料:為了方便用戶為自己或他人購買書籍,用戶登陸后即可添加收獲人信息。留言板:用戶登錄以后可以查看和添加留言信息,對于游客可以查看留言信息.雪域書店首頁雪域書店首頁Index.jsp用戶注冊pages/register.jsp留言板pages/listmessage.jsp產(chǎn)品列表pages/listproduct.jsp用戶登錄pages/login.jsp用戶注冊pages/register.jsp留言板pages/listmessage.jsp產(chǎn)品列表pages/listproduct.jsp用戶登錄pages/login.jsp查看用戶資料biz/userinfo.jsp修改密碼biz/updatepassword.jsp用戶留言biz/addmessage.jsp查看用戶資料biz/userinfo.jsp修改密碼biz/updatepassword.jsp用戶留言biz/addmessage.jsp加入購物車biz/cartlist.jsp添加收獲人地址biz/adduseritem.jsp查看定單biz/orderinfo.jsp添加收獲人地址biz/adduseritem.jsp查看定單biz/orderinfo.jsp生成定單biz/orderlist.jsp生成定單biz/orderlist.jsp退出退出(2)數(shù)據(jù)庫操作:使用Hibernate連接數(shù)據(jù)庫:<?xmlversion='1.0'encoding='UTF-8'?><!DOCTYPEhibernate-configurationPUBLIC"-//Hibernate/HibernateConfigurationDTD3.0//EN""/hibernate-configuration-3.0.dtd"><hibernate-configuration> <session-factory> <propertyname="hibernate.show_sql">true</property> <propertyname="hibernate.format_sql">true</property> <propertyname="dialect">org.hibernate.dialect.MySQLDialect</property> <propertyname="connection.url"><!—使用mysql數(shù)據(jù)庫所用的URL和數(shù)據(jù)庫字符的設(shè)置--> jdbc:mysql://:3306/angd?useUnicode=true&characterEncoding=utf8 </property> <!--所使用的數(shù)據(jù)庫的用戶名和密碼--> <propertyname="connection.username">root</property> <propertyname="connection.password"></property> <propertyname="connection.driver_class">com.mysql.jdbc.Driver</property><!—使用到的實體類映射文件路徑--> <mappingresource="com/tarena/bookshop/entity/User.hbm.xml"/> <mappingresource="com/tarena/bookshop/entity/UserItem.hbm.xml"/> <mappingresource="com/tarena/bookshop/entity/Message.hbm.xml"/> </session-factory></hibernate-configuration>部分數(shù)據(jù)庫表的結(jié)構(gòu)設(shè)計: 表1是對e_user的描述列名說明類型備注userid用戶IDint不允許空,主健username用戶姓名varchar不允許空password用戶密碼varchar不允許空 表2是對e_user_item的描述列名說明類型備注user_item_id收貨人每項IDint不允許空,主健item_name收貨人的名字varchar可以為空item_address收貨人的地址varchar可以為空item_postcode收貨人的郵編varchar可以為空item_officephone固定電話varchar可以為空item_mobilephone移動電話varchar可以為空item_email收貨人人郵箱varchar可以為空userid用戶IDint不允許空,外健 表3是對e_message的描述列名說明類型備注messageId留言IDint不允許空,主健tile標題varchar不允許空content留言信息varchar不允許空部分數(shù)據(jù)庫建表語句:#Host:localhostDatabase:angd##Serverversion5.0.15-nt--DROPDATABASEIFEXISTS`angd`;--CREATEDATABASE`tarena`/*!40100DEFAULTCHARACTERSETgbk*/;--USE`angd`;droptablee_message;droptablee_user_item;droptablee_user;####Tablestructurefortablee_user#CREATETABLE`e_user`(`userid`int(11)NOTNULLauto_increment,`username`varchar(30)NOTNULL,`password`varchar(15)defaultNULL,`createtime`datedefaultNULL,`state`int(11)default'0',`role`int(11)default'0',PRIMARYKEY(`userid`))DEFAULTCHARACTERSETutf8;##Dumpingdatafortablee_user###Tablestructurefortablee_user_item#CREATETABLE`e_user_item`(`user_item_id`int(11)NOTNULLauto_increment,`item_name`varchar(30)defaultNULL,`item_address`varchar(100)defaultNULL,`item_postcode`varchar(10)defaultNULL,`item_officephone`varchar(50)defaultNULL,`item_mobilephone`varchar(20)defaultNULL,`item_email`varchar(50)defaultNULL,`userid`int(12)NOTNULL,PRIMARYKEY(`user_item_id`),KEY`userid`(`userid`))DEFAULTCHARACTERSETutf8;createtablee_message(messageIdintegerauto_increment,tilevarchar(32),content varchar(32),primarykey(messageId));(3)網(wǎng)站前臺首頁的運行結(jié)果如圖1所示:圖1首頁主要是向用戶展示書店的書籍,并利用分頁技術(shù)顯示多余的書籍.在頭部的左上角顯示用戶的狀態(tài).顯示主頁的JSP頁面如下,他是通過form表單向Action傳送數(shù)據(jù),Action端利用request接送數(shù)據(jù). <%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%><%@pageimport="com.ahut.bookshop.entity.Product"%><!--jsp:directive.pageimport="com.tarena.bookshop.entity.Product"/--><%@taglibprefix="c"uri="/jsp/jstl/core"%><%@taglibprefix="html"uri="/tags-html"%><!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN"><html> <head> <metahttp-equiv="Content-Language"content="zh-cn"> <metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"> <metaname="description"content="雪域書城"> <title>雪域書城</title> <LINKhref="<%=request.getContextPath()%>/css/style.css" rel=stylesheet> <scriptlanguage="JavaScript" src="<%=request.getContextPath()%>/js/tarena.js"></script> </head> <bodybackground="<%=request.getContextPath()%>/images/bg.gif" onLoad="MM_preloadImages('<%=request.getContextPath()%>/images/index_on.gif','<%=request.getContextPath()%>/images/reg_on.gif','<%=request.getContextPath()%>/images/order_on.gif','<%=request.getContextPath()%>/images/top/topxmas/jp_on.gif','<%=request.getContextPath()%>/images/top/topxmas/download_on.gif','<%=request.getContextPath()%>/images/top/topxmas/bbs_on.gif','<%=request.getContextPath()%>/images/top/topxmas/designwz_on.gif')" topmargin="0"leftmargin="0"rightmargin="0"bottommargin="0"> <jsp:includeflush="true"page="/common/header.jsp"></jsp:include> <tablecellspacing=1cellpadding=3align=centerwidth="90%" class=tableBorder2> </table> <br> <formmethod="post"name="searchform" action="<%=request.getContextPath()%>/page/product.do"> <tablecellpadding=3cellspacing=1align=centerwidth="90%" class=tableborder1> <tr> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/top_r.gif"width=""> <fontcolor="000000"face="隸書"size=3><b>搜索</b></font> </td> </tr> <tr> <tdclass=tablebody2valign=middlealign=centerwidth="" height="30"> 搜索: <inputtype="text"name="text"maxlength="30"/> <inputtype="radio"name="radio"value="author"/> 作者名 <inputtype="radio"name="radio"value="bookname"/> 書名 <inputtype="radio"name="radio"value="printer"/> 出版社 <inputtype="radio"name="radio"value="createtime"/> 出版日期 <selectname="catalog"> <optionvalue="0"selected>--種類--</option> <optionvalue="1">程序設(shè)計</option> <optionvalue="2">文學書籍</option> <optionvalue="3">英語書籍</option> </select> 種 類 <inputtype="hidden"name="method"value="searchProduct"> <inputtype="button"value="開始搜索"class="button" onclick="javascript:searchform.submit();"/> </td> </tr> </table> </form> <tablecellspacing=1cellpadding=3align=centerwidth="90%" class=tableBorder2> <tr> <tdheight=25valign=middle> <imgsrc="<%=request.getContextPath()%>/images/Forum_nav.gif" align="absmiddle"> <fontcolor="">共有${size}個結(jié)果:</font> </td> </tr> </table> <br> <!--hrcolor="red"width="97%"--> <tablewidth="100" height="60%" align="center" class=tableborder1> <!--tr> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>序號</b></font> </td> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>產(chǎn)品名稱</b></font> </td> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>價格</b></font> </td> <tdvalign=middlealign=centerheight=25 background="<%=request.getContextPath()%>/images/bg2.gif"width=""> <fontcolor="#ffffff"><b>操作</b></font> </td> </tr--> <c:iftest="${!emptyproducts}"> <c:forEachvar="product"items="${products}"varStatus="status"> <trheight="40"> <!--tdclass=tablebody2valign=middlealign=centerwidth=""> ${status.count} </td--> <tdrowspan="2"width="100"> <a href='<%=request.getContextPath()%>/page/product.do?method=listDetail&productid=${ductid}'> <imgborder="0" src="<%=request.getContextPath()%>/${product.imagepath}" width="127"height="180"> </a> </td> <tdclass=tablebody1align=leftalign=centerwidth="40%"><h1>書名: <a href='<%=request.getContextPath()%>/page/product.do?method=listDetail&productid=${ductid}'>${} </a> </h1> </td> <tdclass=tablebody2align=leftalign=centerwidth="20%">作者: ${product.author} </td> <tdclass=tablebody2align=leftalign=centerwidth="20%">價格:¥ ${product.price} 元 </td> <tdclass=tablebody1align=leftalign=centerwidth="20%">操作: <!--將商品加入購物車中--> <a href="<%=request.getContextPath()%>/biz/cart.do?method=addCart&productid=${ductid}"> <imgborder="0" src="<%=request.getContextPath()%>/images/car_new.gif" width="97"height="18"></a> </td> </tr> <trheight="100"> <tdcolspan="4"class=tablebody2valign=middlealign="left"width="">簡介: ${product.description} </td> </tr> <trheight="20"bgcolor="#EFEFEF"> <tdcolspan="5"> </td> </tr> </c:forEach> <tr> <!--這一行專門用來做分頁顯示的--> <tdclass="tablebody2"colspan="5"align="center"> ${navigation} </td> </tr> </c:if> </table> <!--當沒有搜索到結(jié)果時,應(yīng)給用戶一個友好的提示--> <c:iftest="${emptyproducts}"> <tablecellpadding=3cellspacing=1align=centerwidth="97%" > <tr> <tdclass=tablebody2align=center> <fontcolor="red"><h2>對不起!沒有搜索到您需要的商品!請重試!</h2></font> </td> </tr> </table> </c:if> <jsp:includeflush="true"page="/common/footer.jsp"></jsp:include> </body></html>6.1.2用戶管理模塊對于前臺頁面的用戶來說,用戶管理主要是注冊,登錄;以及登錄以后的修改密碼和查看用戶資料。其流程圖如圖所示:首頁登錄首頁登錄登錄修改密碼查看用戶資料注冊注冊NYYYNN(1)用戶注冊當用戶第一次登錄時首先要注冊,成為會員后,才可以使用購物車購買物品,進行留言.用戶可以通過單擊首頁的注冊按鍵來打開注冊頁面進行會員注冊操作,用戶注冊頁面的運行結(jié)果如圖2所示.圖2注冊用戶名如果已經(jīng)存在,則給出用戶提示信息,保證用戶在本系統(tǒng)的用戶名都是獨一無二的.并利用驗證碼技術(shù)防止惡意注冊.(2)用戶登錄用戶登錄窗口的超鏈接設(shè)置在首頁上,由超鏈接轉(zhuǎn)到用戶登錄界面,主要用來接收用戶輸入的用戶名和密碼,并更新用戶在網(wǎng)站中的狀態(tài)信息.會員登錄窗口的運行結(jié)果如圖3所示:圖3若用戶名或密碼錯誤給出相應(yīng)的提示信息,若登錄成功則進入主也面,此時在頁面頭部右上角會出現(xiàn)登錄的用戶名.:6.1.3修改密碼:用戶資料修改在前臺主頁右上角,單擊“修改密碼”鏈接,進入用戶修改密碼頁面.利用舊密碼再次驗證用戶的登錄密碼,通過兩此輸入新密碼確認用戶的新密碼.若成功則將用戶的新密碼更新到數(shù)據(jù)庫;不成功則給出相應(yīng)的錯誤信息.其運行結(jié)果如圖4:所示.:圖4其核心代碼如下:publicActionForwardupdatepassword(ActionMappingmapping,ActionFormform, HttpServletRequestrequest,HttpServletResponseresponse) throwsException{ UserServiceuserService=newUserService(); Stringpassword1=request.getParameter("password1").trim(); Stringpassword2=request.getParameter("password2").trim(); Stringpassword3=request.getParameter("password3").trim(); HttpSessionsession=request.getSession(); Useruser=(User)session.getAttribute("user"); if(!password1.equals(user.getPassword())){ Stringmessage="舊密碼錯誤,請重新輸入"; request.setAttribute("message",message); returnmapping.findForward("updatepassword"); }elseif(!password2.equals(password3)){ Stringmessage="兩次密碼輸入不一致,請重新輸入"; request.setAttribute("message",message); returnmapping.findForward("updatepassword"); } user.setPassword(password2); userService.modifyUser(user); returnmapping.findForward("updatepassword_success"); }6.1.4購物車模塊在超市購物,可以根據(jù)自己的需要將很多的物品挑選到購物車(籃)中。而在網(wǎng)上虛擬的購物商城中,通常都會采用一種被稱做“購物車”的技術(shù)來模擬現(xiàn)實生活。這種技術(shù)用起來十分方便,不但可以隨時添加,查看,修改,清空購物車中的內(nèi)容,還可以隨時去收銀臺結(jié)帳。游客和登錄用戶都可以在首頁瀏覽本系統(tǒng)的商品,并查看商品詳細信息。要想購買商品必須先登錄。本系統(tǒng)為每個登錄用戶提供一個購物車,用戶在本系統(tǒng)購買商品時可以像在超市中一樣把要買的商品放入購物車。在購物車界面用戶可以選擇繼續(xù)購物,刪除不滿意的商品,最后確認定單進入定單管理界面。其流程圖如圖所示:首頁(瀏覽商品)登錄首頁(瀏覽商品)登錄登錄加入購物車刪除一個商品繼續(xù)購物確認定單提交定單(1)添加購物車、添加購物車就是把用戶選中的商品放在購物車中。當用戶在前臺首頁中單擊商品展示區(qū)的“”按鈕時,系統(tǒng)會將該商品的詳細信息展示在查看物品清單頁中,運行結(jié)果如圖5所示:圖5可以修改書籍的數(shù)量,然后點保存修改就可.點擊"確認定單"進入定單管理模塊.其代碼實現(xiàn)如下所示: <tablecellpadding=3cellspacing=1align=centerclass=tableborder1> <tr> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>序號</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>產(chǎn)品名稱</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>價格</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>數(shù)量</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>合計</b></font> </td> <tdvalign=middlealign=centerheight=25background="<%=request.getContextPath()%>/images/top_r.gif" width=""> <fontcolor="blue"><b>操作</b></font> </td> </tr> <c:iftest="${!emptyducts}"> <c:forEachvar="carproducts"items="${cart.cartProducts}"varStatus="status"> <tr> <formmethod="post" action="<%=request.getContextPath()%>/biz/cart.do"name="f1"> <inputtype="hidden"name="productid"value="${ductid}"> <inputtype="hidden"name="number"value="${carproducts.num}"> <inputtype="hidden"name="method"value="modify"> <tdclass=tablebody2valign=middlealign=centerwidth=""> ${status.count} </td> <tdclass=tablebody1valign=middlewidth=""> ${} </td> <tdclass=tablebody2valign=middlealign=centerwidth=""> ${duct.price} </td> <tdclass=tablebody1valign=middlealign=centerwidth=""> <inputtype="text"name="num"value="${carproducts.num}"size="4" onblur="javascript:if(this.value<1){alert('對不起,產(chǎn)品數(shù)量不能小于1');this.focus();}else{number.value=this.value;}"/> </td> <tdclass=tablebody2valign=middlealign=leftwidth=""> ${carproducts.total} </td> <tdclass=tablebody1valign=middlealign=centerwidth=""> <inputtype="button"value="刪除"class="button" onclick="ja
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- DB51T 1625-2013 政務(wù)服務(wù)中心 電子政務(wù)大廳數(shù)據(jù)接口規(guī)范
- DB51T 1520-2012 土壤中總鉻的測定電感耦合等離子體發(fā)射光譜法
- DB51T 1125-2010 白烏鱧養(yǎng)殖技術(shù)規(guī)范 苗種
- 新建呋喃樹脂砂鑄造生產(chǎn)線項目立項申請報告
- 新建箱式變電站項目可行性研究報告
- 高強鋼絲項目立項申請報告
- 新建樟樹原油項目立項申請報告
- 工業(yè)電爐投資項目可行性分析報告
- 完整鋼結(jié)構(gòu)畢業(yè)課程設(shè)計
- 2024-2030年新版中國高大乳油項目可行性研究報告
- 臨床醫(yī)學研究進展展望新興領(lǐng)域與發(fā)展趨勢培訓課件
- 北京市2022-2023學年三年級上學期語文期末試卷(含答案)2
- 2023-2024年三年級上冊科學(教科版) 期末模擬試卷(三)(含解析)
- 消防爬梯施工方案
- 關(guān)于工程師思維素養(yǎng)課件
- 昆蟲記32種昆蟲簡介
- 短視頻平臺私域建設(shè)研究報告
- 工業(yè)風扇-專業(yè)介紹
- 23秋國家開放大學《廣告設(shè)計》形考任務(wù)1-4參考答案
- 污水處理廠有毒有害氣體檢測記錄表
- 馬克思主義與社會科學方法論課后思考題答案全
評論
0/150
提交評論