已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第7章Struts2綜合應(yīng)用實(shí)例,7.1建立項(xiàng)目,7.2運(yùn)行主界面的實(shí)現(xiàn),7.3實(shí)現(xiàn)“登錄”功能,7.4實(shí)現(xiàn)“借書”功能,7.5實(shí)現(xiàn)“圖書管理”功能,第7章Struts2綜合應(yīng)用實(shí)例,這里只介紹圖書管理系統(tǒng)的兩個(gè)功能:讀者借書和圖書管理,它已經(jīng)包含了操作數(shù)據(jù)庫的主要內(nèi)容,其他功能讀者可以根據(jù)所學(xué)知識(shí)自行完成。本系統(tǒng)運(yùn)行時(shí)的初始主界面如圖7.1所示。,圖7.1運(yùn)行主界面,第7章Struts2綜合應(yīng)用實(shí)例,在沒“登錄”之前,操作功能的圖片是灰色的,不能被單擊。而當(dāng)?shù)卿洺晒?,操作功能的圖片就亮起來,登錄的輸入框及“登錄”按鈕被置灰,表示不可再進(jìn)行“登錄”操作。登錄有兩種角色,使用“管理員”登錄名登錄,操作功能所有圖片都會(huì)亮,表示所有操作都可以進(jìn)行,如圖7.2所示。,圖7.2管理員身份登錄后的界面,第7章Struts2綜合應(yīng)用實(shí)例,如果是“學(xué)生”登錄,登錄成功后,前面兩個(gè)圖片會(huì)亮,表示可以進(jìn)行操作,后面的圖片還是灰色的,表示不能操作,如圖7.3所示。,圖7.3學(xué)生身份登錄后的界面,7.1建立項(xiàng)目,首先,在MyEclipse中建立項(xiàng)目Struts2_Example,加載Struts2所需的5個(gè)類庫、SQLServer所需的類庫及文件上傳所需的兩個(gè)類庫(這兩個(gè)類庫在Struts2的文件上傳部分已經(jīng)講解)。然后修改web.xml文件,在第一個(gè)Struts2的例子中已經(jīng)給出,不再贅述。接著在src下創(chuàng)建Struts2的核心配置文件struts.xml,并編寫其框架代碼:./此處以后添加action配置,7.2運(yùn)行主界面的實(shí)現(xiàn),上面已經(jīng)展示了初始系統(tǒng)的主頁面,文件名為index.jsp,要實(shí)現(xiàn)這個(gè)功能,采用表格方式把頁面分成3行1列。其中,第1行是頁面的頭部,由于比較復(fù)雜,進(jìn)行專門設(shè)計(jì),文件名為head.jsp。結(jié)構(gòu)分布如下所示:,index.jsp,7.2運(yùn)行主界面的實(shí)現(xiàn),為了設(shè)計(jì)圖書管理系統(tǒng)上部頁面,可以先采用Adobe公司的Photoshop或者Illustrator軟件設(shè)計(jì)出整幅圖頁面,如圖7.4所示。,圖7.4上部頁面整幅圖,然后采用Photoshop或者Illustrator或者FireWorks(建議采用)的圖片“切片”工具,進(jìn)行切片分隔,切片后如圖7.5所示。,圖7.5切片分隔后,7.2運(yùn)行主界面的實(shí)現(xiàn),選擇“導(dǎo)出”功能,設(shè)置導(dǎo)出為“HTML和圖像”;選擇“選項(xiàng)”,對表格進(jìn)行設(shè)置,如圖7.6所示。,圖7.6導(dǎo)出設(shè)置,7.2運(yùn)行主界面的實(shí)現(xiàn),進(jìn)行“導(dǎo)出”操作后生成的圖片文件如圖7.7所示。,圖7.7生成的圖片文件,7.2運(yùn)行主界面的實(shí)現(xiàn),同時(shí),對系統(tǒng)自動(dòng)生成的HTML文件進(jìn)行如下處理:刪除注釋及img標(biāo)記中對本例沒有用的屬性;為了HTML代碼閱讀方便,把系統(tǒng)生成的有關(guān)的圖片文件改名;加入系統(tǒng)登錄和圖片對應(yīng)功能的超鏈接代碼;把擴(kuò)展名改成“head.jsp”。修改后的head.jsp代碼。除了上面介紹的切割圖片的方法外,HTML還提供了在圖片上制作熱點(diǎn)區(qū)域的方法,就是可以在一幅完整的圖片上面,制作出一塊區(qū)域用于超鏈接,該區(qū)域是用坐標(biāo)來實(shí)現(xiàn)的。應(yīng)用這種方法,只需將上面所說的頭部的圖片切割成上下兩部分,如圖7.8所示。,圖7.8頭部圖片切割情況,7.2運(yùn)行主界面的實(shí)現(xiàn),然后,把上面一幅圖作為背景,而下面一幅圖作為插入在表格中的圖片,該圖片可以制作熱點(diǎn)區(qū)域來實(shí)現(xiàn)圖片的超鏈接。制作完成后代碼。頭部實(shí)現(xiàn)后,運(yùn)行的主界面就簡單了,index.jsp代碼實(shí)現(xiàn)為。,7.3實(shí)現(xiàn)“登錄”功能,由于登錄時(shí)要對數(shù)據(jù)庫進(jìn)行查詢,故在編寫“登錄功能”的代碼之前,要先編寫連接數(shù)據(jù)庫的代碼。連接數(shù)據(jù)庫的文件DBConn.java代碼實(shí)現(xiàn)為??梢钥闯?,數(shù)據(jù)庫的連接與關(guān)閉使用的是靜態(tài)方法,要對數(shù)據(jù)庫連接或關(guān)閉,只需用“類名.方法名”即可。登錄頁面在“index.jsp”中已經(jīng)包含,可以看出,當(dāng)單擊“提交”時(shí),交給了“l(fā)ogin.action”,故需要在“struts.xml”中配置該action來處理請求:/index.jsp/index.jsp,7.3實(shí)現(xiàn)“登錄”功能,處理請求的Action類LoginAction.java代碼為。該Action中應(yīng)用了模型傳值,Login.java代碼為:packageorg.model;publicclassLoginprivateintid;privateStringname;privateStringpassword;privatebooleanrole;/省略上述屬性的get和set方法在Action中引用了LoginDao.java,該類負(fù)責(zé)登錄信息與數(shù)據(jù)庫的交互。DAO即為數(shù)據(jù)訪問對象,在一般的項(xiàng)目開發(fā)中都會(huì)有DAO的存在,這樣便于維護(hù),所以,登錄信息與數(shù)據(jù)庫的交互由LoginDao來處理。LoginDao這樣的命名方式可以使程序員根據(jù)該名稱就清楚它的功能,同時(shí)可以方便地找到它。LoginDao.java代碼實(shí)現(xiàn)。,7.4實(shí)現(xiàn)“借書”功能,當(dāng)用管理員身份“登錄”后,“圖片”鏈接就可用了,單擊“借書”,出現(xiàn)如圖7.9所示的界面。,圖7.9借書界面,7.4實(shí)現(xiàn)“借書”功能,要實(shí)現(xiàn)這個(gè)功能,采用表格方式把頁面分成3行2列。其中,第1行與第3行占兩列,然后在第2行的兩列中分別放兩個(gè)表格,左邊的表格非常簡單,不多介紹了,關(guān)鍵是右邊的表格,右邊的表格又分為3行1列,第1行是“圖書信息”字樣及一個(gè)簡單的表單,第2行中又插入了一個(gè)表格,這個(gè)表格顯示圖書的信息,第3行是分頁的信息?;窘Y(jié)構(gòu)如下所示:,lend.jsp,lend.jsp,7.4實(shí)現(xiàn)“借書”功能,從該頁面可以看出,左邊是“查詢”功能,輸入借書證號(hào)后,單擊“查詢”按鈕,就可以查出該借書證號(hào)的讀者借了哪些書籍,而剛進(jìn)入頁面時(shí),借書功能是不可用的,但當(dāng)輸入了借書證號(hào)后,單擊“查詢”按鈕,會(huì)在右邊顯示該讀者所借書籍,同時(shí)“借書”功能變亮,表示可以進(jìn)行借書操作了,如圖7.10所示。,圖7.10查詢借書信息,7.4實(shí)現(xiàn)“借書”功能,輸入正確的ISBN及圖書ID,單擊“借書”按鈕,就可以借得此書,如圖7.11所示。,圖7.11借書成功頁面,7.4.1查詢已借圖書,單擊“借書”鏈接后,出現(xiàn)了圖7.4的界面供用戶操作,從head.jsp中的代碼:可以看出,單擊該操作,提交到“l(fā)end.jsp”,故圖7.4所示的頁面的代碼實(shí)現(xiàn)應(yīng)該為lend.jsp:讀者可能會(huì)感覺這么長的代碼怎么看,其實(shí)代碼非常簡單,總體來說就四個(gè)部分,第一部分:,7.4.1查詢已借圖書,導(dǎo)入頭部,具體內(nèi)容前面已經(jīng)講解,不再贅述。第二部分就是頁面左邊的查詢功能部分:內(nèi)容選擇借書證號(hào):,7.4.1查詢已借圖書,當(dāng)輸入正確的借書證號(hào),單擊“查詢”時(shí),提交到“selectBook.action”,根據(jù)struts.xml配置下面的代碼:/lend.jsp處理的Action為LendAction中的selectAllLend方法,LendAction.java的該部分代碼。,7.4.1查詢已借圖書,由于用到了模型傳值,而且在后面的與數(shù)據(jù)庫交互時(shí)把查詢的數(shù)據(jù)記錄都轉(zhuǎn)化為該類中的屬性,故模型代碼Lend.java為:packageorg.model;importjava.util.Date;publicclassLendprivateStringbookId;privateStringreaderId;privateStringbookName;privateStringpublisher;privatefloatprice;privateStringISBN;privateDatelTime;/生成上述屬性的get和set方法,7.4.1查詢已借圖書,該Action中應(yīng)用了3個(gè)其他類,有StudentDao、LendDao及Pager,Dao是用來和數(shù)據(jù)庫交互的,該Action類中應(yīng)用了StudentDao的“selectByReaderId”方法。該方法是用來根據(jù)借書證號(hào),查詢學(xué)生信息,如果有該學(xué)生信息就查詢該學(xué)生已借圖書;如果沒有就添加“不存在該學(xué)生”的信息到“message”,然后返回到頁面,頁面會(huì)輸出該信息,告知用戶輸入了錯(cuò)誤的借書證號(hào)。StudentDao.java的代碼實(shí)現(xiàn)為。,7.4.1查詢已借圖書,該Dao中的方法selectByReaderId的作用就是根據(jù)借書證號(hào),查詢學(xué)生信息;如果有就返回該學(xué)生,如果沒有就返回null。當(dāng)然,在應(yīng)用Student類之前要先編寫該類的代碼,Student.java就是student表對應(yīng)的模型:packageorg.model;importjava.util.Date;publicclassStudentprivateStringreaderId;privateStringname;privateStringspec;privatebooleansex;privateDateborn;privateintnum;privateintsnum;privatebytephoto;/省略上面屬性的get和set方法,7.4.1查詢已借圖書,判斷完成后,如果輸入了正確的借書證號(hào),就會(huì)分頁查詢,先來看看在LendDao中的查詢方法。當(dāng)在Action中調(diào)用這個(gè)查詢方法后,就會(huì)得到對應(yīng)借書證號(hào)在lend表中的“pageSize”條記錄,返回查詢結(jié)果的List集。接下來就是Pager.java,即分頁功能。其實(shí),分頁功能的處理有很多方法,不同的程序員寫的方法可能不一樣,但都能達(dá)到目的。本例的分頁功能代碼。Pager類中構(gòu)造方法中要傳入兩個(gè)參數(shù),一個(gè)是“pageNow”,另一個(gè)是“totalSize”,而“totalSize”是數(shù)據(jù)庫中對應(yīng)記錄的總條數(shù),故需要查詢數(shù)據(jù)庫,所以在創(chuàng)建Pager對象時(shí):Pagerpage=newPager(pageNow,lendDao.selectLendSize(lend.getReaderId();,7.4.1查詢已借圖書,在LendDao中加入查詢總記錄的方法。在Action中調(diào)用方法查詢完成后,把要保存的信息保存到request中,然后根據(jù)返回值在struts.xml中的配置返回到“l(fā)end.jsp”頁面。此時(shí)由于request保存了該信息,就會(huì)在頁面輸出信息,輸出代碼就是要說的lend.jsp的第三部分:圖書IDISBN書名出版社價(jià)格借書時(shí)間,7.4.1查詢已借圖書,上面內(nèi)容是顯示存儲(chǔ)在request中的list,但在做這部分功能時(shí)每次只查詢了“pageSize”條記錄,故在頁面中應(yīng)用了分頁。下面看分頁代碼。當(dāng)單擊要顯示的頁面時(shí),就把pageNow值傳到了Action,Action就會(huì)根據(jù)pageNow的值查詢要顯示的list集,這樣查詢功能就基本完成了。在Action處理之前做了一些判斷工作,如果輸入的借書證號(hào)不合法或不存在就會(huì)直接返回并保存一些信息。在“l(fā)end.jsp”中也有相應(yīng)的輸出:,7.4.2“借書”功能,前面講解了“l(fā)end.jsp”根據(jù)借書證號(hào)查詢已借圖書的功能,“l(fā)end.jsp”中還有最后一個(gè)功能就是借書,首先看看其實(shí)現(xiàn)代碼。讀者可以發(fā)現(xiàn),借書的輸入框中也進(jìn)行了判斷,如果“readerId”沒有值就讓輸入框不可編輯,這是因?yàn)槿绻麤]有“readerId”就不知道誰要借書了,這個(gè)很容易理解。輸入了“借書證號(hào)”(即readerId),查詢該學(xué)生已借圖書后,“readerId”就被保存到了request中,這時(shí)該部分就變成可操作了,輸入要借書籍的“ISBN”及“圖書ID”,單擊“借書”按鈕,提交到“l(fā)endBook.action”,該請求在struts.xml中配置為:/lend.jsp,7.4.2“借書”功能,從“method=lendBook”可以看出,處理該功能的是LendAction中的lendBook方法,下面看該方法的實(shí)現(xiàn)。因?yàn)槭窃谕豁撁骘@示,故當(dāng)借書時(shí)還要顯示前面查詢的已借圖書,所以獲取已借圖書信息的代碼和前面一樣,不再多說。本功能在判斷是否有用戶輸入的“ISBN”時(shí)應(yīng)用了BookDao的“selectBook”方法。,7.4.2“借書”功能,圖書模型Book.java代碼為:packageorg.model;publicclassBookprivateStringISBN;privateStringbookName;privateStringauthor;privateStringpublisher;privatefloatprice;privateintcnum;privateintsnum;privateStringsummary;privatebytephoto;/省略上面屬性的get和set方法,7.4.2“借書”功能,調(diào)用該方法,如果返回的是null,就表示輸入的“ISBN”不存在,也就表示不存在該種圖書。同樣,在判斷圖書ID時(shí),因?yàn)橥槐緯荒鼙煌瑫r(shí)借兩次或多次,故在已經(jīng)借的書中不能包含剛剛輸入的圖書ID,判斷方法為LendDao中的“selectByBookId”方法,代碼實(shí)現(xiàn)。如果返回“l(fā)end”,表示已經(jīng)存在,將返回錯(cuò)誤信息。通過判斷都合法后,將應(yīng)用LendDao中的“addLend”方法對其進(jìn)行插入操作。由于該“ISBN”的圖書被借出去一本,故該圖書的庫存量應(yīng)該減少一本,所以在插入一條lend記錄的同時(shí)要修改book的庫存量:Bookbook=bookDao.selectBook(lend.getISBN();/取得該ISBN的圖書對象book.setSnum(book.getSnum()-1);/設(shè)置庫存量-1bookDao.updateBook(book);,7.4.2“借書”功能,在BookDao中的updateBook方法。同時(shí),學(xué)生的借書量應(yīng)該多出一本,故有這樣的代碼:StudentDaostudentDao=newStudentDao();Studentstu=studentDao.selectByReaderId(lend.getReaderId();stu.setNum(stu.getNum()+1);/設(shè)置學(xué)生的借書量+1studentDao.updateStudent(stu);,7.4.2“借書”功能,所以,在StudentDao中要編寫修改學(xué)生信息的方法:publicvoidupdateStudent(Studentstu)tryconn=DBConn.getConn();PreparedStatementpstmt=conn.prepareStatement(updatestudentsetnum=?wherereaderId=?);pstmt.setInt(1,stu.getNum();pstmt.setString(2,stu.getReaderId();pstmt.executeUpdate();catch(Exceptione)e.printStackTrace();finallyDBConn.CloseConn();,7.5實(shí)現(xiàn)“圖書管理”功能,單擊“圖書管理”,跳轉(zhuǎn)到“bookmanage.jsp”,出現(xiàn)如圖7.12所示的頁面。,圖7.12圖書管理頁面,7.5.1“圖書追加”功能,在實(shí)現(xiàn)該功能之前,先來看看“bookmanage.jsp”的實(shí)現(xiàn)。當(dāng)填寫完要添加的圖書信息后,顯示界面如圖7.13所示。,圖7.13圖書添加界面,7.5.1“圖書追加”功能,可以發(fā)現(xiàn),“圖書追加”提交按鈕代碼:由于4個(gè)按鈕均提交到“book.action”,故該提交代碼中定義了“method=addBook”,表示提交后由Action類中的“addBook”方法來處理,struts.xml中關(guān)于action的配置為:/bookmanage.jsp/bookmanage.jsp*addBook,updateBook,7.5.1“圖書追加”功能,通過該配置文件,系統(tǒng)會(huì)應(yīng)用BookAction來處理請求,并根據(jù)提交的方法名來決定用哪個(gè)方法進(jìn)行處理。Book的模型在借書部分已經(jīng)給出,這里不再列舉。本例中把照片傳入數(shù)據(jù)庫中用二進(jìn)制流保存,而在頁面中,由于用到文件上傳,故“form”中要加入屬性“enctype=multipart/form-data”,文件部分代碼為:命名為“photo”,故在Action中有:privateFilephoto;,7.5.1“圖書追加”功能,接收傳過來的值,后面“onchange”表示當(dāng)選擇好圖片的路徑時(shí),把:width=100height=120中“src”值設(shè)置為選中的圖片的路徑。這樣,當(dāng)我們選擇了圖片時(shí),就會(huì)在“img”的地方顯示該圖片。if(this.getPhoto()!=null)FileInputStreamfis=newFileInputStream(this.getPhoto();bytebuffer=newbytefis.available();fis.read(buffer);b.setPhoto(buffer);,7.5.1“圖書追加”功能,這段代碼是處理傳入的文件,把文件轉(zhuǎn)化為字節(jié)數(shù)組,完成后調(diào)用BookDao的“addBook”方法進(jìn)行插入操作。該方法的代碼。因?yàn)楫?dāng)添加記錄時(shí),需要對數(shù)據(jù)進(jìn)行驗(yàn)證,本部分采用驗(yàn)證框架來處理,驗(yàn)證框架文件“BookAction-validation.xml”配置。struts.xml中的action配置為:/bookmanage.jsp/bookmanage.jsp*addBook,updateBook,7.5.1“圖書追加”功能,黑體部分是配置該action應(yīng)用的攔截器,我們知道,action默認(rèn)使用的攔截器是“defaultStack”,本例為action配置該攔截器,但加入了兩個(gè)參數(shù):*表示對所有方法都不驗(yàn)證,而addBook,updateBook表示驗(yàn)證“addBook”、“updateBook”兩個(gè)方法,通過這樣的設(shè)置,系統(tǒng)就會(huì)只驗(yàn)證“addBook”、“updateBook”兩個(gè)方法。,7.5.2“圖書刪除”功能,圖書刪除功能非常簡單,輸入“ISBN”后,單擊“刪除”按鈕,就會(huì)根據(jù)BookAction中的“deleteBook”方法刪除圖書信息?!癲eleteBook”方法實(shí)現(xiàn)為:publicStringdeleteBook()throwsExceptionif(newLendDao().selectByBookISBN(book.getISBN()!=null)this.setMessage(該圖書已經(jīng)被借出,不能刪除);returnSUCCESS;Bookbo=bookDao.selectBook(book.getISBN();if(bo=null)/首先判斷是否存在該圖書this.setMessage(要?jiǎng)h除的圖書不存在!);returnSUCCESS;elseif(newLendDao().selectByBookISBN(book.getISBN()!=null)this.setMessage(該圖書已經(jīng)被借出,故不能刪除圖書信息!);returnSUCCESS;bookDao.deleteBook(book.getISBN();this.setMessage(刪除成功!);returnSUCCESS;,7.5.2“圖書刪除”功能,該功能用了三個(gè)方法,分別是BookDao中的“selectBook”、“deleteBook”及LendDao中的“selectByBookISBN”?!皊electBook”方法前面已經(jīng)給出,“deleteBook”方法實(shí)現(xiàn)為:publicbooleandeleteBook(StringISBN)tryconn=DBConn.getConn();PreparedStatementpstmt=conn.prepareStatement(deletefrombookwhereISBN=?);pstmt.setString(1,ISBN);pstmt.execute();returntrue;catch(Exceptione)e.printStackTrace();returnfalse;finallyDBConn.CloseConn();實(shí)現(xiàn)方法非常簡單,這里就不多做解釋了。LendDao中的“selectByBookISBN”方法實(shí)現(xiàn)。,7.5.3“圖書查詢”功能,輸入“ISBN”后,單擊“圖書查詢”按鈕,就會(huì)根據(jù)BookAction中的“selectBook”方法處理,查詢該圖書信息?!皊electBook”方法實(shí)現(xiàn)為:publicStringselectBook()throwsExceptionBookonebook=bookDao.selectBook(book.getISBN();if(onebook
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度光伏發(fā)電項(xiàng)目施工總承包合同
- 2025年中國女性洗液行業(yè)市場深度調(diào)研分析及投資前景研究預(yù)測報(bào)告
- 2025年度供應(yīng)鏈智能化升級(jí)與系統(tǒng)集成合同
- 2025年度化妝師個(gè)人品牌授權(quán)合同
- 2025年度數(shù)字醫(yī)療平臺(tái)合作開發(fā)合同范本
- 企業(yè)貸款申請書格式
- 2025年華北理工大學(xué)002礦業(yè)工程學(xué)院085704測繪工程報(bào)錄數(shù)據(jù)分析報(bào)告初
- 2025年度健身行業(yè)健身教練職業(yè)責(zé)任保險(xiǎn)合同范本
- 2025年度建筑工程考古發(fā)掘材料供應(yīng)合同范本
- 2025年度體育賽事廣告代理服務(wù)合同范本
- 新能源汽車概論題庫
- 設(shè)備維保的維修成本和維護(hù)費(fèi)用
- 2024年濰坊護(hù)理職業(yè)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 客運(yùn)站員工安全生產(chǎn)教育培訓(xùn)
- 口腔預(yù)防兒童宣教
- 綠城桃李春風(fēng)推廣方案
- 體質(zhì)健康概論
- 檔案管理流程優(yōu)化與效率提升
- 2023高考語文實(shí)用類文本閱讀-新聞、通訊、訪談(含答案)
- 人工智能在商場應(yīng)用
- (完整word版)大格子作文紙模板(帶字?jǐn)?shù)統(tǒng)計(jì))
評(píng)論
0/150
提交評(píng)論