




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、重慶科技學(xué)院課程設(shè)計成果 院(系):_電氣與信息工程學(xué)院_ 班 級: 計科普0802 學(xué)生姓名: 學(xué) 號: 設(shè)計地點(單位)_ _i315 _ _設(shè)計題目:_ 聊天程序設(shè)計_ _ 完成日期: 2011 年 9 月 5 日 指導(dǎo)教師評語: _ 成績(五級記分制):_ _ 教師簽名:_摘要嵌入式linux在電子行業(yè)的應(yīng)用很廣泛,學(xué)習(xí)嵌入式linux顯得非常重要。這次課程設(shè)計的主要目的是檢驗上學(xué)期學(xué)習(xí)linux后的效果。通過基礎(chǔ)題的代碼編寫,熟悉linux c語言編程技巧。通過完成聊天程序的設(shè)計,熟悉linux底層編程。利用qt設(shè)計界面,縮短開發(fā)時間。關(guān)鍵字:嵌入式linux;基礎(chǔ)題;聊天程序;qt
2、 目 錄課程設(shè)計任務(wù)書- 4 -題目一 基礎(chǔ)題- 6 -1 設(shè)計內(nèi)容及要求- 6 -1.1 二小題- 6 -1.2三小題- 6 -1.3四小題- 7 -1.3五小題- 9 -1.4六小題- 11 -1.5七小題- 11 -1.6八小題- 13 -題目二 聊天程序設(shè)計- 15 -1設(shè)計內(nèi)容及要求- 15 -1.1 聊天程序的基本要求- 15 -1.2 需實現(xiàn)的主要功能- 15 -2需求分析- 15 -2.1 qt設(shè)計- 15 -2.2服務(wù)器端和客戶端的數(shù)據(jù)傳輸方式- 16 -2.3 服務(wù)器端功能設(shè)計- 16 -2.4客戶端功能設(shè)計- 17 -3總體設(shè)計- 17 -3.1 總體功能- 17 -4.
3、 詳細(xì)設(shè)計- 17 -4.1 功能分析和描述- 17 -4.2 客戶端功能模塊- 17 -4.3 服務(wù)器功能模塊- 19 -5. 代碼實現(xiàn)- 20 -5.1 客戶端代碼- 20 -5.2 服務(wù)器端代碼- 22 -6功能實現(xiàn)- 23 -7總結(jié)- 23 -8致謝- 23 -9參考文獻- 23 -課程設(shè)計任務(wù)書設(shè)計題目:基礎(chǔ)題目學(xué)生姓名莊桐泉課程名稱嵌入式linux課程設(shè)計專業(yè)班級計科普2008地 點i315起止時間2011-8-29至2011-9-9設(shè)計內(nèi)容及要求 gcc編譯器的使用,linux系統(tǒng)c程序設(shè)計編譯、調(diào)試方法1、 編寫程序?qū)?shù)組內(nèi)容倒置a=”123456789”。2、 利用指針將數(shù)據(jù)
4、a的內(nèi)容復(fù)制到數(shù)據(jù)b。3、 創(chuàng)建兩線程,通過打印輸出各自線程號和打印次序,要求從打印結(jié)果看出兩個線程是并發(fā)執(zhí)行的。4、 創(chuàng)建兩線程,a線程通過消息隊列發(fā)消息,b線程收到后在屏幕打印輸出,要求兩線程個打印出線程號和消息內(nèi)容。5、 創(chuàng)建兩線程,a線程循環(huán)打印數(shù)組a100,b線程循環(huán)將數(shù)組成員+1,要求利用互斥鎖,使每次輸出a0=a99.6、 創(chuàng)建兩線程,a線程每2秒打印一次字母a,b線程每秒打印一次字母b,要求利用同步信號量,使輸出字母b總是在a之后。8、通過makefile,將project中的一個.c編譯成.a,另一個.c調(diào)用.a的函數(shù),要求實現(xiàn)靜態(tài)庫的生成和調(diào)用,運行結(jié)果正確。設(shè)計參數(shù)進度要
5、求第一周之內(nèi)完成參考資料1、嵌入式linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程.人民郵電出版社。華清遠(yuǎn)見嵌入式培訓(xùn)中心。2010.72、zlg armmagic2410實驗指導(dǎo)、資料。其它設(shè)計題目:聊天程序設(shè)計學(xué)生姓名莊桐泉課程名稱嵌入式linux課程設(shè)計專業(yè)班級計科普2008地 點i315起止時間2011-8-29至2011-9-9設(shè)計內(nèi)容及要求 1、在qt(或minigui)編寫聊天程序,交叉編譯后下載到目標(biāo)機,可實現(xiàn)兩臺目標(biāo)機可發(fā)送文本聊天2、qt(或minigui)界面設(shè)計至少包括“發(fā)送”,“重置”兩個按鈕,要求必須把目標(biāo)機的硬件鍵盤映射到qt設(shè)計的軟件界面中,實現(xiàn)軟件按鈕的功能。選作:發(fā)送文件。設(shè)
6、計參數(shù)進度要求做完基礎(chǔ)題目之后開始做本題目。參考資料1、嵌入式linux應(yīng)用程序開發(fā)標(biāo)準(zhǔn)教程.人民郵電出版社。華清遠(yuǎn)見嵌入式培訓(xùn)中心。2010.72、zlg armmagic2410實驗指導(dǎo)、資料。其它說明.本表應(yīng)在每次實施前一周由負(fù)責(zé)教師填寫二份,學(xué)院審批后交學(xué)院教務(wù)辦備案,一份由負(fù)責(zé)教師留用。.若填寫內(nèi)容較多可另紙附后。3.一題多名學(xué)生共用的,在設(shè)計內(nèi)容、參數(shù)、要求等方面應(yīng)有所區(qū)別。系主任: 指導(dǎo)教師: 2011年 9 月 5 日題目一 基礎(chǔ)題1 設(shè)計內(nèi)容及要求1.1 二小題(1) 編寫程序?qū)?shù)組內(nèi)容倒置a=”123456789”。(2) 程序代碼實現(xiàn)如下:char a=012345678
7、9; char tmp;int i = 0,j = 0;for(i = 0,j = strlen(a)-1;i=strlen(a)/2-1;i+,j-) tmp = ai; ai = aj; aj = tmp;for(i = 0;istrlen(a);i+) printf(%c,ai);printf(n);(3)程序分析:定義數(shù)組數(shù)組內(nèi)容倒置輸出倒置后數(shù)組內(nèi)容(4)程序執(zhí)行效果如下:1.2三小題(1)利用指針將數(shù)據(jù)a的內(nèi)容復(fù)制到數(shù)據(jù)b。(2)程序代碼實現(xiàn)如下:char a = abcd;char b =1234; int i = 0;char *tmp; tmp = a; for(i = 0;
8、istrlen(a);i+) bi = *tmp+;for(i = 0;istrlen(a);i+) printf(%c,bi);printf(n);(3)程序分析:定義數(shù)組定義指針指針指向數(shù)組a移動指針拷貝數(shù)字到b中顯示拷貝后的數(shù)組(4)程序執(zhí)行效果如下: 1.3四小題(1)創(chuàng)建兩線程,通過打印輸出各自線程號和打印次序,要求從打印結(jié)果看出兩個線程是并發(fā)執(zhí)行的。(2)程序代碼如下:#define thread_number2#define repeat_number5#define delay_time_levels10.0void * thrd_func(void *arg) int thr
9、d_num = (int)arg;int delay_time = 0;int count = 0;printf(thread %d is startingn, thrd_num);for (count = 0; count repeat_number; count+)delay_time = (int)(rand() * delay_time_levels/(rand_max) + 1;sleep(delay_time); printf(tthread %d: job %d delay = %dn, thrd_num, count, delay_time);printf(thread %d
10、finishedn, thrd_num);pthread_exit(null); int main(void)pthread_t threadthread_number;int no = 0, res;void * thrd_ret;for (no = 0; no thread_number; no+) res = pthread_create(&threadno, null, thrd_func, (void*)no);for (no = 0; no msg_text); pthread_exit(null); void * thrd_func1(void *arg) int thrd_nu
11、m = (int)arg;printf(thread %d is startingn, thrd_num);/*讀取消息隊列*/msgrcv(qid, &msg, bufsz, getpid(), 0); printf(recv the message is:%sn,(&msg)-msg_text);pthread_exit(null);void *(*const functhread_number)(void *)=thrd_func0,thrd_func1;int main(void)pthread_t threadthread_number;int no = 0, res;void *
12、thrd_ret;key_t key;int len; key = ftok(., a); qid = msgget(key,ipc_creat|0666); for (no = 0; no thread_number; no+)res = pthread_create(&threadno, null, funcno, (void*)no);for (no = 0; no thread_number; no+) res = pthread_join(threadno, &thrd_ret); (msgctl(qid, ipc_rmid, null); return 0; (3) 代碼分析如下:
13、該程序?qū)崿F(xiàn)了使用消息隊列進行線程之間的通信,包括消息隊列的創(chuàng)建、消息發(fā)送和讀取、消息隊列的撤銷和刪除等操作。 定義消息隊列消息結(jié)構(gòu)體 創(chuàng)建線程0,用于消息隊列發(fā)送消息 添加消息到消息隊列 退出線程 創(chuàng)建線程1,用于消息隊列讀取消息 讀取消息隊列 根據(jù)不同的路徑和關(guān)鍵表示產(chǎn)生標(biāo)準(zhǔn)的key 創(chuàng)建消息隊列 等待線程 從系統(tǒng)內(nèi)核中移走消息隊列 (4)程序執(zhí)行效果如下: 1.4六小題(1)創(chuàng)建兩線程,a線程循環(huán)打印數(shù)組a100,b線程循環(huán)將數(shù)組成員+1,要求利用互斥鎖,使每次輸出a0=a99.(2)程序源代碼如下:(3)程序分析如下:1.5七小題(1)創(chuàng)建兩線程,a線程每2秒打印一次字母a,b線程每秒打
14、印一次字母b,要求利用同步信號量,使輸出字母b總是在a之后。 (2)程序代碼如下:#define thread_number 2sem_t semthread_number;void * thrd_func0(void *arg) /a arg = arg;while(1) printf(an); sem_post(&sem1); sleep(2); pthread_exit(null); void * thrd_func1(void *arg) /b arg = arg;while(1) sem_wait(&sem1); printf(bn); sleep(1); pthread_exit(
15、null);void *(*const functhread_number)(void *)=thrd_func0,thrd_func1;int main(void)pthread_t threadthread_number;int no = 0, res;void * thrd_ret;for (no = 0; no thread_number; no+) res = pthread_create(&threadno, null, funcno, (void*)no);printf(create thread successn waiting for threads to finish.n)
16、;for (no = 0; no thread_number; no+) sem_destroy(&semno);return 0; (3)程序分析如下: 程序創(chuàng)建兩線程,實現(xiàn)a線程每2秒打印一次字母a,b線程每秒打印一次字母b,利用同步信號量,使輸出字母b總是在a之后。 創(chuàng)建線程0執(zhí)行函數(shù),用于打印字符a 打印字符a 對信號量1進行v操作 延時2s 退出線程 創(chuàng)建線程1執(zhí)行函數(shù),用于打印字符b 對信號量1進行p操作 打印字符b 延時1s 創(chuàng)建線程(4)程序執(zhí)行效果如下:1.6八小題 (1)通過makefile將project中的一個.c編譯成.a,另一個.c調(diào)用.a的函數(shù),要求實現(xiàn)靜態(tài)庫的生
17、成和調(diào)用,運行結(jié)果正確。 (2)編寫靜態(tài)庫程序thread.c如下:#include void pf1(void) printf(*n); return;void pf2(void) printf(#n); return;該程序定義兩個函數(shù),分別打印不同的內(nèi)容,該程序?qū)⒈痪幾g成.a靜態(tài)庫編寫調(diào)用程序call.c如下:extern void pf1(void);extern void pf2(void);int main(void) pf1(); pf2(); return 0;該程序?qū)o態(tài)庫進行調(diào)用,調(diào)用靜態(tài)庫中的兩個函數(shù)pf1和pf2。編寫makefile如下:cc=gcccppflags=
18、-cobjs = thread.osource = thread.ccall_source=call.clib = libthread.aexec=callar=arthread: $objs$cc -c $source -o $objs $ar rcsv $(lib) thread.o$cc -o $exec $call_source -l. -lthread.phony : cleanclean :-rm -f $objs $exec $libmakefile文件實現(xiàn)對靜態(tài)庫程序編譯成.a靜態(tài)庫,并且編譯調(diào)用靜態(tài)庫的程序call.c為可執(zhí)行文件call(4)程序執(zhí)行效果如下: 題目二 聊天
19、程序設(shè)計1設(shè)計內(nèi)容及要求1.1 聊天程序的基本要求1、在qt(或minigui)編寫聊天程序,交叉編譯后下載到目標(biāo)機,可實現(xiàn)兩臺目標(biāo)機可發(fā)送文本聊天。2、qt(或minigui)界面設(shè)計至少包括“發(fā)送”,“重置”兩個按鈕,要求必須把目標(biāo)機的硬件鍵盤映射到qt設(shè)計的軟件界面中,實現(xiàn)軟件按鈕的功能。1.2 需實現(xiàn)的主要功能(1) 客戶端輸入服務(wù)器ip和端口號。(2) 服務(wù)器必須成功啟動。(3) 每一個客戶端可以尋找服務(wù)器,并且與服務(wù)器建立連接。(4) 客戶端和服務(wù)器可以實現(xiàn)通信。(5) 通信的內(nèi)容可以顯示在面板上。(6) 利用qt設(shè)計界面,并下載到magicarm2410上面。2需求分析2.1 q
20、t設(shè)計qt設(shè)計編寫和調(diào)試階段使用周立功magicarm2410箱子提供的qt for pc編譯器,運行測試階段使用qt for arm編譯器。使用qt for pc階段編譯程序的步驟如下(以編譯hello.cpp程序為例):(1)進入/x86-qtopia目錄,運行set-env腳本,設(shè)置環(huán)境變量。$ . set-env(2)進入hello目錄,然后用progen工具生成工程文件。$ cd hello$ vi hello.cpp$ progen t app.t o (3)使用tmake工具,生成hello工程的makefile文件。$ tmake -o ma
21、kefile (4)修改makefile文件,在libs變量中增加需要用到的庫,然后輸入make命令編譯。libs = $(sublibs) -l$(qtdir)/lib -lqte -lm -lstdc+$ make(5)啟動虛擬控制臺,運行hello程序(主機須啟動幀緩沖,必須能夠訪問/dev/fb0)。$ cd /zylinux/x86-qtopia$ . set-env$ cd hello$ ./hello qws如果要將hello程序發(fā)布到magicarm2410上運行,還需進行以下工作:(6)進入/zylinux/arm-qtopia目錄,并將hello工程復(fù)制到
22、當(dāng)前目錄下。$ cd /zylinux/arm-qtopia$ cp av /zylinux/x86-qtopia/hello (7)運行當(dāng)前目錄下的set-env文件,重新設(shè)置環(huán)境變量,進入hello目錄,使用tmake工具,重新生成makefile文件。$ . set-env$ cd hello$ tmake -o makefile (8)按照步驟(4)的方法修改包含庫,編譯,得到可執(zhí)行文件hello,將hello文件添加到文件系統(tǒng)中,更新文件系統(tǒng)。(9)插入usb鼠標(biāo)和usb鍵盤,啟動magicarm2410。啟動qtopia的終端,運行hello程序。利用同樣的編譯方
23、法,客戶端qt程序進行編譯和調(diào)試。2.1.1 客戶端qt界面設(shè)計客戶端qt需要以下基本組件:(1)兩個qeditline,一個用于輸入服務(wù)器ip地址(可讀可寫),另一個用于輸入服務(wù)器端口號(可讀可寫)。(2)三個按鈕,一個用于連接服務(wù)器,另一個用于發(fā)送消息,最后一個用于清空發(fā)送區(qū)域數(shù)據(jù)。(3)四個標(biāo)簽,用于顯示不用組件的內(nèi)容。(4)兩個multilineedit,一個用于顯示通信內(nèi)容(只讀),一個作為發(fā)送區(qū)域(可讀可寫)。2.2服務(wù)器端和客戶端的數(shù)據(jù)傳輸方式 服務(wù)器端和客戶端的數(shù)據(jù)是用tcp套接字來傳輸?shù)?。ip地址表示internet上的計算機,端口號標(biāo)識正在計算機運行的進程。端口號與ip地址
24、的組合得出一個網(wǎng)絡(luò)套接字??蛻舳耸褂胠inux c 函數(shù)socket建立到服務(wù)器的套接字連接。 當(dāng)套接字連接socket建立后,可以利用linux c語言中的send函數(shù)和recv函數(shù)來實現(xiàn)簡單的發(fā)送和接收消息。2.3 服務(wù)器端功能設(shè)計由于時間有限,服務(wù)器并沒有用qt來編寫界面,只是實現(xiàn)一個簡單的控制程序。服務(wù)器主要實現(xiàn)有:(1)創(chuàng)建套接字(2)對套接字、ip地址和端口號進行綁定(3)進行監(jiān)聽(4)等待客戶端的連接(5)對客戶端接收和發(fā)送數(shù)據(jù)2.4客戶端功能設(shè)計客戶端使用qt設(shè)計界面,客戶端實現(xiàn)的功能如下: (1)創(chuàng)建套接字 (2)連接服務(wù)器 (3)與服務(wù)器通信3總體設(shè)計3.1 總體功能根據(jù)對
25、需求所做的分析,聊天程序需要實現(xiàn)的基本功能應(yīng)包括以下幾個方面:(1) 客戶端輸入服務(wù)器ip和端口號。(2) 服務(wù)器必須成功啟動。(3) 每一個客戶端可以尋找服務(wù)器,并且與服務(wù)器建立連接。(4) 客戶端和服務(wù)器可以實現(xiàn)通信。(5) 通信的內(nèi)容可以方便查看。 使用qt設(shè)計的界面簡潔,大方,操作簡單,方便,容易上手,用戶可以快速掌握操作流程。4. 詳細(xì)設(shè)計4.1 功能分析和描述 聊天工具包括兩大功能模塊:客戶端和服務(wù)器端。具體實現(xiàn)的功能創(chuàng)建套接字、連接通信、接收數(shù)據(jù)顯示和發(fā)送數(shù)據(jù)。4.2 客戶端功能模塊 4.2.1 連接服務(wù)器連接服務(wù)器之前需要解析服務(wù)器地址、創(chuàng)建套接字、設(shè)置sockaddr_in
26、結(jié)構(gòu)體中相關(guān)參數(shù)。4.2.2發(fā)送消息功能連接功能是開始聊天前必須進行的步驟,連接成功之后,就可以進行發(fā)送消息了。發(fā)送消息功能流程圖如圖2-5所示: 圖2-5 發(fā)送消息功能流程圖4.2.3接收消息模塊連接成功后,就可以接收服務(wù)器發(fā)送過來的數(shù)據(jù)。4.3 服務(wù)器功能模塊 服務(wù)器的設(shè)計并沒有使用qt編寫界面,服務(wù)器端實現(xiàn)的功能有: 圖2-8 服務(wù)器模塊流程圖5. 代碼實現(xiàn)5.1 客戶端代碼5.1.1 qt構(gòu)造和析構(gòu)函數(shù)editdemo:editdemo( qwidget *parent, const char *name):qwidget(parent, name)qgridlayout *grid
27、= new qgridlayout(this, 6, 3, 0, 0);/ip addrqlabel *label1 = new qlabel( ip addr:, this);grid-addwidget( label1, 0, 0 );edit_ip = new qlineedit(this); edit_ip-settext();grid-addwidget( edit_ip, 0, 1 );/server portqlabel *label2 = new qlabel( server port:, this);grid-addwidget( label2, 1, 0)
28、;edit_port = new qlineedit(this); edit_port-settext(4321);grid-addwidget( edit_port, 1, 1);qpushbutton *btn = new qpushbutton(connect, this); /*add the connect button*/ grid-addwidget( btn, 2, 1); /*add the button*/connect(btn, signal(clicked(), this, slot(buttonconnect(); /multiline input modeqlabe
29、l *label3 = new qlabel( contract area:, this);grid-addwidget(label3, 3, 0);multiedit_contract = new qmultilineedit(this); multiedit_contract-setreadonly(1);/set read only grid-addwidget(multiedit_contract,3,1); qlabel *label4 = new qlabel( send area:, this);grid-addwidget(label4, 4, 0);multiedit_sen
30、d = new qmultilineedit(this); grid-addwidget(multiedit_send,4,1);qpushbutton *button_send = new qpushbutton(send, this); /*add the send button*/ grid-addwidget( button_send, 5, 0); connect(button_send, signal(clicked(), this, slot(buttonsend(); qpushbutton *button_clear = new qpushbutton(clear, this
31、); /*add the clear button*/ grid-addwidget( button_clear, 5, 1); connect(button_clear, signal(clicked(), this, slot(buttonclear(); editdemo:editdemo()if(socket_flag = 1)/*if create socket success*/ close(sockfd); /*close the socket*/ printf(close the socketn);5.1.2 創(chuàng)建套接字void editdemo:createsocket(vo
32、id)/*地址解析函數(shù)*/host = gethostbyname(edit_ip-text();/*創(chuàng)建socket*/sockfd = socket(af_inet,sock_stream,0);/*設(shè)置sockaddr_in 結(jié)構(gòu)體中相關(guān)參數(shù)*/serv_addr.sin_family = af_inet;serv_addr.sin_port = htons(atoi(edit_port-text();serv_addr.sin_addr = *(struct in_addr *)host-h_addr);bzero(&(serv_addr.sin_zero), 8); 5.1.3 創(chuàng)建
33、線程void *task(void *arg) int recvbytes = 0; char bufbuffer_size= 0; arg = arg; while(1) if(recvbytes = recv(sockfd, buf, buffer_size, 0) 0) multiedit_contract-append(server said: +(qstring)buf); void createthread(void)int result = 0;result = pthread_create(&thread1, null, task, (void *)0); /*create thread*/5.2 服務(wù)器端代碼#define port 4321#define buffer_size 1024#define max_que_conn_nm 5int main()struct sockaddr_in server_sockaddr, client_sockaddr;int sin_size, recvbytes;unsigned int sendbytes = 0;int sockfd, client_f
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年高壓液壓柱塞泵馬達項目發(fā)展計劃
- 2025年度新能源材料研發(fā)保密與共享合同
- 2025年度綠色建筑項目財產(chǎn)贈與合同
- 2025年(半)干式煙氣脫硫成套設(shè)備項目建議書
- 2025年度出境領(lǐng)隊帶團操作規(guī)范合同范本
- 水務(wù)生態(tài)保護規(guī)劃計劃
- 2025年食品分離機械項目合作計劃書
- 持續(xù)改進教學(xué)工作的機制計劃
- 高危行業(yè)的安全防控計劃
- 合理安排急診排班的重要性計劃
- 【歷史】唐朝建立與“貞觀之治”課件-2024~2025學(xué)年統(tǒng)編版七年級歷史下冊
- 2024化工園區(qū)危險品運輸車輛停車場建設(shè)規(guī)范
- 05G359-3 懸掛運輸設(shè)備軌道(適用于一般混凝土梁)
- 警察行政法課件
- 數(shù)學(xué)與生活小報
- 挖掘數(shù)學(xué)專業(yè)課程的思政元素-以空間解析幾何為例
- 人力資源管理手冊(全集)
- 兒科學(xué)教學(xué)課件腎病綜合征
- 2023高中物理步步高大一輪 第四章 專題強化七 圓周運動的臨界問題
- 田字格模版內(nèi)容
- Q∕GDW 12152-2021 輸變電工程建設(shè)施工安全風(fēng)險管理規(guī)程
評論
0/150
提交評論