版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、課題負(fù)責(zé)人: 學(xué)院: 信息科學(xué)與工程學(xué)院班級:姓名: 學(xué)號: 課題開發(fā)日期:2014年1月13日自評成績:A目錄 3333441概述1.1 目的1.2主要完成的任務(wù)1.3使用的開發(fā)工具、開發(fā)語言1.4本軟件解決的主要問題2設(shè)計(jì)的基本理念、概念和原理2.1 設(shè)計(jì)的基本理念 42.2基本概念42.3基本原理53總體設(shè)計(jì)53.1基本的技術(shù)路線:面向?qū)ο?53.2模塊關(guān)系及總體流程54詳細(xì)設(shè)計(jì)74.1變量設(shè)計(jì)74.2線程的設(shè)計(jì)74.3 butt on 按鈕的設(shè)計(jì)85編碼設(shè)計(jì)95.1開發(fā)環(huán)境95.2注意事項(xiàng)95.3主要代碼設(shè)計(jì)9PUTTER程的設(shè)計(jì) 9MOVER線程的設(shè)計(jì)10GETTER線程的設(shè)計(jì)11“
2、開始”按鈕的設(shè)計(jì)12“結(jié)束”按鈕的設(shè)計(jì)145.4解決的主要難題166測試出現(xiàn)的問題及其解決方案 167工程總結(jié)168參考文獻(xiàn)16多道程序緩沖區(qū)協(xié)調(diào)操作演示程序設(shè)計(jì)說明書1概述1.1目的計(jì)算機(jī)操作系統(tǒng)是計(jì)算機(jī)系統(tǒng)中最不可缺少的, 最常用的軟件,也是核心的, 最接近于計(jì)算機(jī)硬件的軟件。其特點(diǎn)是內(nèi)容繁多,概念抽象,因此造成理解困難, 掌握不易。本軟件的主要目的是通過直觀的演示, 使學(xué)生能夠感性的明白掌握多 道程序及其進(jìn)程同步和互斥的程序設(shè)計(jì)的基本方法。1.2主要完成的任務(wù)(1) 可隨機(jī)產(chǎn)生字符數(shù)據(jù),由生產(chǎn)者的 put操作不斷將生產(chǎn)的字符數(shù)據(jù)放入 容器 1( Buffer1 )中。(2) 通過搬運(yùn)者的
3、Move1操作要不斷地將容器1( Buffer1 )的數(shù)據(jù)取到容器 2(Buffer2 )中。(3) 通過搬運(yùn)者的Move2操作要不斷地將容器1( Buffer1 )的數(shù)據(jù)取到容器 3(Buffer3 )中。(4) 通過消費(fèi)者1的GET操作不斷的從容器2( buffer2 )中取出數(shù)據(jù)(5) 通過消費(fèi)者2的GET操作不斷地從容器3( Buffer3 )中取出數(shù)據(jù)。(6) 生產(chǎn)者,搬運(yùn)者,消費(fèi)者的數(shù)目,buffer容量可自己設(shè)定,但數(shù)目不宜 過多;默認(rèn)為生產(chǎn)者5,消費(fèi)者1為5,消費(fèi)者2為5, Move1為2,Move2為2, buffer1 容量為 10, buffer2 容量為 10, buf
4、fer3 容量為 10。(7) PUT、Move1、Move2 GET1, GET2每次操作一個(gè)數(shù)據(jù),在操作的過程 中數(shù)據(jù)不丟失,每個(gè)Buffer每次只能接受一個(gè)PUT或一個(gè)Move或一個(gè)Get,多 個(gè)操作不能同時(shí)操作同一 BUFFER(8) 能夠?qū)崟r(shí)顯示Buffer的操作過程,以及每個(gè)Buffer的當(dāng)前放入的數(shù)據(jù), 每個(gè)buffer中的數(shù)據(jù)的個(gè)數(shù)。(9) 能夠?qū)ιa(chǎn)者,搬運(yùn)者,消費(fèi)者的速度進(jìn)行自由控制。(10) 當(dāng)程序運(yùn)行開始后,計(jì)時(shí)器就開始計(jì)時(shí),直到運(yùn)行結(jié)束,顯示運(yùn)行的總 時(shí)間。(11) 運(yùn)行結(jié)束后,能夠匯總總運(yùn)行時(shí)時(shí)間、已生產(chǎn)產(chǎn)品數(shù)、消費(fèi)者 1已消費(fèi) 產(chǎn)品數(shù)、消費(fèi)者2已消費(fèi)的產(chǎn)品數(shù)、總消
5、費(fèi)的產(chǎn)品數(shù)。1.3使用的開發(fā)工具、開發(fā)語言開發(fā)工具:VS2010開發(fā)語言:C+C+是面向?qū)ο蟮囊环N編程語言,窗口程序設(shè)計(jì)中MFC已經(jīng)將windows最底層的API函數(shù)以類的形式封裝好,使用方便。其特點(diǎn)有:1.面向?qū)ο螅?. 平臺(tái)無關(guān)性;3. 安全性;4. 健壯性;1.4本軟件解決的主要問題對Buffer操作的多線程同步問題,利用操作系統(tǒng)的 P、V原語操作和C+語 言的Thread線程對put、move get等多線程進(jìn)行協(xié)調(diào)處理,實(shí)現(xiàn)了多線程并發(fā) 執(zhí)行的原理。用程序演示了操作系統(tǒng)中經(jīng)典的生產(chǎn)者和消費(fèi)者問題。2設(shè)計(jì)的基本理念、概念和原理2.1設(shè)計(jì)的基本理念使用VS2010創(chuàng)建了一個(gè)基本對話框類,
6、并在對話框中添加了基本需要的所 有控件:(1) buffer1 ,buffer2 ,buffer3 三個(gè) LISTBOX空件,用于顯示各個(gè) buffer中的當(dāng)前內(nèi)容。(2)添加了 3個(gè)編輯框控件,分別用于對 3個(gè)容器(buffer )容量的控制。(3)添加1個(gè)編輯框控件用于輸入數(shù)值確定線程執(zhí)行速度。(4)添加5個(gè)編輯框控件,用于對生產(chǎn)者,移動(dòng)物流,消費(fèi)者數(shù)量的控制。五個(gè)線程用于對buffer容器的控制(PUTTER MOVER 1MOVER2GETTER, GETTER2(1)PUTTER線程產(chǎn)生隨機(jī)字符,并放入 buffer1中,實(shí)現(xiàn)生產(chǎn)者的 生產(chǎn)過程。(2)MOVER1,MOVER線程分別
7、將buffer1中的數(shù)據(jù)移動(dòng)至 buffer2 和 buffer3 中。(3)GETTER1,GETTER線程分別將buffer2 和buffer3 中的數(shù)據(jù)字 符移出,實(shí)現(xiàn)消費(fèi)者的消費(fèi)過程。多個(gè)變量分別統(tǒng)計(jì)需要顯示的數(shù)據(jù):(1)三個(gè)變量分別統(tǒng)計(jì) buffer1 ,buffer2 , buffer3 中的數(shù)據(jù)并實(shí)時(shí)顯示出來。(2)五個(gè)變量進(jìn)行數(shù)據(jù)匯總,顯示最后的運(yùn)行總時(shí)間,生產(chǎn)者生產(chǎn)數(shù)量,消費(fèi)者消費(fèi)數(shù)量。通過MFC的對話框中按鈕實(shí)現(xiàn)對所有線程的控制:(1)“開始”按鈕:開始所有線程,實(shí)現(xiàn)多線程程序同步。(2)“結(jié)束”按鈕:結(jié)束所有線程,并顯示數(shù)據(jù)匯總情況。2.2基本概念面向?qū)ο?,進(jìn)程,線程,線
8、程的同步,線程的互斥,多道程序。2.3基本原理經(jīng)典的生產(chǎn)者與消費(fèi)者同步原理,通過互斥體和互斥信號來實(shí)現(xiàn)線程的等 待,線程間的同步問題,線程之間的協(xié)調(diào)的問題。3. 總體設(shè)計(jì)3.1基本的技術(shù)路線:面向?qū)ο筮\(yùn)用面向?qū)ο蟮脑O(shè)計(jì)理念,設(shè)計(jì)所要求的PUTTER,MOVER1, M0VER2,GETTER1,GETTER2五個(gè)線程,達(dá)到信號量的控制,變量的值確定, 實(shí)現(xiàn)BUFFER 一次只能操作一個(gè)動(dòng)作,實(shí)現(xiàn)線程的同步,阻塞以及他們之間的 協(xié)調(diào)問題。3.2模塊關(guān)系及總體流程PUTTER 線程:生產(chǎn)者:執(zhí)行 put操作M0VER1 線程: 搬運(yùn)者1 :執(zhí)行move1操作Pea對話框類:主界面設(shè)計(jì)、 顯示數(shù)據(jù)、
9、過程演MOVER2 線程: 搬運(yùn)者2 :執(zhí)行move2操作示GETTER1 線程:消費(fèi)者1:執(zhí)行g(shù)et操作GETTER2 線程:消費(fèi)者2:執(zhí)行g(shù)et操作圖1模塊關(guān)系圖2.總體流程4. 詳細(xì)設(shè)計(jì)4.1變量設(shè)計(jì)g_hMutex1, g_hMutex2, g_hMutex3:三個(gè)互斥體,分別控制一次只能對 buffer實(shí)現(xiàn)一次操作。g_hFullltems1 ,g_hFullltems2 ,g_hFullltems3 g_hEmptyltems1 ,g_hEmptyltems2,g_hEmptyltems3:六個(gè)信號量,分別控制buffer中是否有空閑空間以及是否有數(shù)據(jù)可供移動(dòng),并進(jìn)行互斥操作。cl
10、ock_t類型的start,finish 變量,通過調(diào)用clock ()函數(shù)得到線程運(yùn)行 的總時(shí)間。struct PThreadint ptid;CpacDlg * dlg;定義線程的結(jié)構(gòu)體,用于線程通過結(jié)構(gòu)體參數(shù)調(diào)用窗口類,從而實(shí)現(xiàn)線程對窗口的控制。SlZE_1 , SIZE_2 , SIZE_3 :編輯框控件添加的變量,從而實(shí)現(xiàn)動(dòng)態(tài) 對容器buffer容量的控制。SPEED :控件添加的變量,實(shí)現(xiàn)對線程速度的控制。Produce_Num ,Con sumer1_Num ,Co nsumer2_Num ,Move1_Num ,Move2_Num 控件添加的變量,實(shí)現(xiàn)對生產(chǎn)者,消費(fèi)者,物流移動(dòng)
11、數(shù)量的控制。Con1_Num ,Pro_Num ,Con2_Num ,Con_Num :控件添加的變量,實(shí)現(xiàn)最終的 數(shù)據(jù)統(tǒng)計(jì)匯總顯示。Buffer1 , buffer2 ,buffer3 : ListBox控件添加的控制變量,用于顯示各 個(gè)buffer中的字符數(shù)據(jù)內(nèi)容。4.2線程的設(shè)計(jì)PUTTER線程產(chǎn)生隨機(jī)字符,并放入buffer1中,實(shí)現(xiàn)生產(chǎn)者的生產(chǎn)過程。DWORD WlNAPl PUTTER(LPVOID para)/PUT 線程其參數(shù)為LPVOlD para,在創(chuàng)建線程時(shí)通過P_hThreadsi =CreateThread(NULL,0,PUTTER,(LPVOID)&pthread
12、O,O,&putlDi);語句,第四個(gè)參數(shù)傳遞了結(jié)構(gòu)體參數(shù),將當(dāng)前對話框窗口類指針傳遞給線程函 數(shù),通過PThread * pthread = (PThread *)para;/ 規(guī)范化參數(shù)CpacDlg * dlg = pthread-dlg;語句來實(shí)現(xiàn)對當(dāng)前對話框窗口中所有參數(shù)的調(diào)用。M0VER,1 M0VER2GETTER1 GETTERS程與 PUTTE線程類似4.3 button按鈕的設(shè)計(jì)“開始”按鈕:創(chuàng)建每個(gè)互斥體,互斥信號以及線程。void CpacDlg:OnBnClickedButton1()/ TODO:在此添加控件通知處理程序代碼buff1互斥鎖buff1信號量Updat
13、eData;g_hMutex1 = :CreateMutex(NULL,FALSE,NULL); g_hFullltems1 = :CreateSemaphore(NULL,0,SIZE_1,NULL); g_hEmptyltems1 = :CreateSemaphore(NULL,SIZE_1,SIZE_1,NULL);ooooooooooo o o o/創(chuàng)建PU線程for ( int i=O;iProduce_Num;+i)pthreadO.dlg = this ;pthreadO.ptid = i;P_hThreadsi=CreateThread(NULL,O,PUTTER,(LPVOI
14、D )&pthreadO,O,&putlDi);/if (P_hThreadsi = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!);oooooooooooooooooo“結(jié)束”按鈕:結(jié)束每一個(gè)線程,并進(jìn)行數(shù)據(jù)匯總顯示到對話框上。void CpacDlg:OnBnClickedButton2()/ TODO:在此添加控件通知處理程序代碼/UpdateData(1);DWORD KP_Thread10;for (int i=0;idlg;int i = pthread-ptid;int j=dIg-SPEED;int speed = 1000*j;LARGE_INTEGER nFr
15、equency/設(shè)置隨機(jī)數(shù)的種子if (:QueryPerformanceFrequency(&nFrequency)/如果支持高性能精度計(jì)數(shù)器,則使用其初始化隨機(jī)種子(微秒級)LARGE_INTEGER n StartCou nter;:QueryPerforma nceCou nter(&n StartCou nter);:srand(unsigned )nStartCounter.LowPart);else /否則使用當(dāng)前系統(tǒng)時(shí)間初始化隨機(jī)種子 (毫秒級):srand(unsigned )time(NULL);while (true )CStri ng buf;WaitForS in g
16、leObject(g_hEmptyltems1,INFINITE);WaitForSi ngleObject(g_hMutex1,INFINITE);/進(jìn)行P操作/產(chǎn)生隨機(jī)字符(A-Z)char ch;ch = char ( (ra nd() % 26) + 65 ); buf.Format(_T( put-%c ),ch);dlg-buffer1.I nsertStri ng(0,buf);dlg-Pro_Num+;int buflc;數(shù)量CStri ng str;buflc = dlg-buffer1.GetCou nt();str.Format(_T( %d 個(gè)),buf1c);dlg-
17、Buffer_C.SetWi ndowTextW(str);數(shù)量/確定生產(chǎn)總數(shù)量/確定當(dāng)前bufferl中的產(chǎn)品/在窗口中顯示當(dāng)前bufferl的數(shù)據(jù):Sleep(speed);ReleaseMutex(g_hMutex1);ReleaseSemaphore(g_hFullltems1,1,NULL);/速度設(shè)置/進(jìn)行V操作return 0;MOVER線程的設(shè)計(jì):DWORD WINAPI MOVER1(LPVOID para)PThread * pthread = (PThread *) para;CpacDlg * dlg = pthread-dlg;int i = pthread-ptid
18、;int j=(dlg-SPEED);int speed =1000*j;while (true )/MOVE1線程/規(guī)范化參數(shù)WaitForS in gleObject(g_hFullltems1,INFINITE); WaitForS in gleObject(g_hEmptyltems2,INFINITE);WaitForSi ngleObject(g_hMutex1,INFINITE);WaitForSi ngleObject(g_hMutex2,INFINITE);/將buffer1中的數(shù)據(jù)移至buffer2中CStri ng cs;int n;n = dlg-buffer1.Get
19、Cou nt(); dlg-buffer1.GetText (n-1,cs); dlg-buffer1.DeleteStr in g( n-1);CStri ng cc;cc.Format(_T( move1-);/進(jìn)行P操作cs = cc + cs;dlg-buffer2.I nsertStri ng(0,cs);int buf1c;CStri ng str;buf1c = dlg-buffer1.GetCou nt(); str.Format(_T(%c個(gè) ),buf1c);dlg-Buffer_C.SetWi ndowTextW(str);int buf2c;CStri ng strl;
20、buf2c = dlg-buffer2.GetCou nt(); str1.Format(_T(%d個(gè) ),buf2c);dlg-Buf_C1.SetWi ndowTextW(strl);/確定當(dāng)前bufferl/顯示當(dāng)前bufferl/確定當(dāng)前buffer2/顯示當(dāng)前buffer2中的產(chǎn)品數(shù)量中的產(chǎn)品數(shù)量中的產(chǎn)品數(shù)量中的產(chǎn)品數(shù)量:Sleep(speed);/設(shè)置速度ReleaseMutex(g_hMutex2);/ 進(jìn)行V操作ReleaseMutex(g_hMutex1);ReleaseSemaphore(g_hFullltems2,1,NULL);ReleaseSemaphore(g_hE
21、mptyltems1,1,NULL);return 0;GETTER1線程的設(shè)計(jì):DWORD WINAPI GETTER1(LPVOID para) PThread * pthread = (PThread *)para;CpacDlg * dlg = pthread-dlg;int i = pthread-ptid;/GET1線程/規(guī)范化參數(shù)int buf2c;CStri ng str1;buf2c = dlg-buffer2.GetCou nt(); str1.Format(_T(%c個(gè) ),buf2c);dlg-Buf_C1.SetWi ndowTextW(str1);/確定當(dāng)前buff
22、er2中的產(chǎn)品數(shù)量int j=(dlg-SPEED);int speed =1000*j ;while (true )WaitForSingleObject(g_hFullltems2,INFINITE);/ 進(jìn)行 P操作WaitForSi ngleObject(g_hMutex2,INFINITE);/移岀buffer2中的數(shù)據(jù)CStri ng cs;int n;n = dlg-buffer2.GetCou nt(); dlg-buffer2.GetText (n-1,cs); dlg-buffer2.DeleteStri ng(n-1);/消費(fèi)者1消費(fèi)的產(chǎn)品數(shù)量加1dlg-Co n1_Nu
23、m = dlg-Co n1_Num + 1;:Sleep(speed);/ 設(shè)置速度ReleaseMutex(g_hMutex2);/ 進(jìn)行V操作ReleaseSemaphore(g_hEmptyltems2,1,NULL);return 0;“開始”按鈕的設(shè)計(jì):void CpacDlg:OnBnClickedButton1()/ TODO:在此添加控件通知處理程序代碼UpdateData;buff1互斥鎖buff1信號量g_hMutex1 = :CreateMutex(NULL,FALSE,NULL);g_hFullltems1 = :CreateSemaphore(NULL,0,SIZE_
24、1,NULL);g_hEmptyltems1 = :CreateSemaphore(NULL,SIZE_1,SIZE_1,NULL);g_hMutex2 = :CreateMutex(NULL,FALSE,NULL);g_hFullltems2 = :CreateSemaphore(NULL,0,SIZE_2,NULL);buff2 互斥鎖g_hEmptyltems2 = :CreateSemaphore(NULL,SIZE_2,SIZE_2,NULL);g_hMutex3 = :CreateMutex(NULL,FALSE,NULL);g_hFullltems3 = :CreateSemap
25、hore(NULL,0,SIZE_3,NULL);buff3 互斥鎖g_hEmptyltems3 = :CreateSemaphore(NULL,SIZE_3,SIZE_3,NULL);start = clock();/獲得線程開始時(shí)間/創(chuàng)建PU線程for ( int i=0;iProduce_Num;+i)pthreadO.dlg = this ; pthreadO.ptid = i;P_hThreadsi=CreateThread(NULL,0,PUTTER,(LPVOID )&pthread0,0,&putlDi);/if (P_hThreadsi = NULL) MessageBox(
26、TEXT(線程創(chuàng)建錯(cuò)誤!);/倉【J建MOVE和MOVE線程for (int j=0;jMove1_Num;+j)pthread1.dlg = this ; pthread1.ptid = j;M1_hThreadsj=CreateThread(NULL,0,MOVER1,(LPVOID )&pthread1,0,&move1IDj);if (M1_hThreadsj = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!); for (int k=0;kMove2_Num;+k)pthread2.dlg = this ;pthread2.ptid = k;M2_hThreadsk=C
27、reateThread(NULL,0,MOVER2,(LPVOID)&pthread2,0,&move2IDk);if (M2_hThreadsk = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!);/創(chuàng)建GET和GET線程for ( int m=0;mConsumer1_Num;+m)pthread3.dlg = this ; pthread3.ptid = m;C1_hThreadsm =CreateThread(NULL,0,GETTER1,(LPVOID )&pthread3,0, &get1IDm);if (C1_hThreadsm = NULL) MessageBox
28、(TEXT(線程創(chuàng)建錯(cuò)誤!); for ( int n=0;nConsumer2_Num;+n)pthread4.dlg = this ;pthread4.ptid = n;C2_hThreads n =CreateThread(NULL,0,GETTER2,(LPVOID)&pthread4,0, &get2ID n);if (C2_hThreadsn = NULL) MessageBox(TEXT(線程創(chuàng)建錯(cuò)誤!);“結(jié)束”按鈕的設(shè)計(jì):void CpacDlg:OnBnClickedButton2()/ TODO:在此添加控件通知處理程序代碼UpdateData(1);DWORD KP_T
29、hread10;for (int i=0;iProduce_Num;i+)GetExitCodeThread(P_hThreadsi,&KP_Threadi);TerminateThread(P_hThreadsi,KP_Threadi);/ 結(jié)束線程ExitThread(KP_Threadi);DWORD KM1_Thread1;for (int i=0;iMove1_Num;i+)GetExitCodeThread(M1_hThreadsi,&KM1_Threadi);Termi nateThread(M1_hThreadsi,KM1_Threadi); ExitThread(KM1_Th
30、readi);DWORD KM2_Thread1;for (int i=0;iMove2_Num;i+)GetExitCodeThread(M2_hThreadsi,&KM2_Threadi);Termi nateThread(M2_hThreadsi,KM2_Threadi); ExitThread(KM2_Threadi);DWORD KC1_Thread10;for (int i=0;iConsumer1_Num;i+)GetExitCodeThread(C1_hThreadsi,&KC1_Threadi);Termi nateThread(C1_hThreadsi,KC1_Thread
31、i);DWORD KC2_Thread10;for (int i=0;iConsumer2_Num;i+)Termi nateThread(C1_hThreadsi,KC2_Threadi);double durati on;finish = clock();duration = double (fi nish - start)/ CLOCKS_PER_SEC);CStri ng str4;str4.Format(_T( %2.4f 秒),duration);CLOCK.SetWi ndowTextW(str4);CStri ng str;str.Format(_T( %d個(gè) ),Pro_Num);Pro_NUM.SetWi ndowTextW(str);CStri ng str1;str1.Format(_T( %d個(gè) ),Co n1_Num);Con 1_NUM.SetWi ndowTextW(str1);CStri ng str2;str2.Format(_T(
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 租房退房要求打掃衛(wèi)生的合同(2篇)
- 咨詢服務(wù)類合同(2篇)
- 人教A版湖南省名校聯(lián)考聯(lián)合體2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試題
- 初中體育+障礙跑+作業(yè)設(shè)計(jì)
- 2023年國家公務(wù)員錄用考試《申論》真題(副省卷)及答案解析
- 第4課《一著驚海天-目擊我國航母艦載戰(zhàn)斗機(jī)首架次成功著艦》八年級語文上冊精講同步課堂(統(tǒng)編版)
- 西南林業(yè)大學(xué)《操作系統(tǒng)原理》2022-2023學(xué)年期末試卷
- 西京學(xué)院《新媒體交互設(shè)計(jì)》2022-2023學(xué)年第一學(xué)期期末試卷
- 獲獎(jiǎng)過程說明附件8
- 西京學(xué)院《工程地質(zhì)》2021-2022學(xué)年第一學(xué)期期末試卷
- 高效能人士的七個(gè)習(xí)慣講義-習(xí)慣5 知彼解己課件
- 意義類答題方法
- 實(shí)驗(yàn)三四大麥類小麥、大麥、黑麥、燕麥
- 顏真卿介紹課件
- 《兄弟》作品簡介名著導(dǎo)讀PPT模板
- 三年級上冊美術(shù)第14課美麗的花掛毯滬教版課件6
- 土木工程施工安全風(fēng)險(xiǎn)與管理措施探究
- 辦公大樓供配電系統(tǒng)設(shè)計(jì)
- 制劑室培訓(xùn)課件
- 帝光公司OEC目標(biāo)“日事日畢、日清日高”實(shí)施方案
- 醫(yī)院投訴登記表1
評論
0/150
提交評論