版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
程序設(shè)計實踐6w-概要設(shè)計和模塊化第一頁,共53頁。提綱1.軟件概要設(shè)計和模塊化2.使用線程實現(xiàn)任務(wù)并發(fā)3.時間控制函數(shù)2第二頁,共53頁。概要設(shè)計和模塊化復(fù)雜的軟件研發(fā)核心策略:分而治之、模塊化設(shè)計與實現(xiàn)模塊1模塊2模塊n3第三頁,共53頁。3.概要設(shè)計要點(diǎn)概要設(shè)計的目的:全局把握程序結(jié)構(gòu):進(jìn)行程序的模塊劃分,設(shè)計模塊之間如何相互調(diào)用來完成程序要求的功能。定義關(guān)鍵全局?jǐn)?shù)據(jù)結(jié)構(gòu),包括全局變量,用來存儲各模塊共享的數(shù)據(jù),以及定義全局常量。設(shè)計系統(tǒng)的自動機(jī)模型,提前對關(guān)鍵的、較難解決的問題進(jìn)行處理。4第四頁,共53頁。3.概要設(shè)計要點(diǎn)概要設(shè)計主要從以下幾個方面考慮:用戶界面:界面友好,要能從界面提示信息了解火車的狀態(tài)和請求。自動機(jī)模型:火車的行為可以用自動機(jī)模型來描述。繪制狀態(tài)遷移圖,圖上需要描述引起狀態(tài)遷移的條件,并且要在文檔中附加說明進(jìn)入某狀態(tài)要做的動作。全局?jǐn)?shù)據(jù)結(jié)構(gòu):包括全局變量和常量等,較全面地給出各個模塊要共享的數(shù)據(jù)。程序模塊化:函數(shù)接口說明,函數(shù)調(diào)用關(guān)系說明。5第五頁,共53頁。用戶界面設(shè)計命令行版本,要求實現(xiàn)鍵盤輸入、命令行輸出,并將輸出結(jié)果記錄到文件。定義鍵盤輸入格式定義屏幕輸出格式定義輸出文件名稱和文件格式動畫版本,要求實現(xiàn)圖形界面輸入、動畫輸出,并將輸出結(jié)果記錄到文件。畫出圖形化界面中各個要素(如按鈕、輸入框、輸出動畫等)說明界面中的各種操作定義輸出文件名稱和文件格式6第六頁,共53頁。自動機(jī)模型設(shè)計針對“不同對象”,畫出對應(yīng)的狀態(tài)遷移圖汽車狀態(tài)圖(可分層次畫出)交通燈狀態(tài)圖第一層狀態(tài)第二層:行駛狀態(tài)細(xì)化7第七頁,共53頁。全局?jǐn)?shù)據(jù)結(jié)構(gòu)設(shè)計設(shè)計所有或多個模塊(函數(shù))都需要用到的公共變量或者常量全局常量定義汽車運(yùn)行方向常量設(shè)置#defineNORTH0#defineWEST1#defineSOUTH2#defineEAST3#defineSTOP4交通燈當(dāng)前顏色的狀態(tài)常量設(shè)置#defineRedS0//#defineGreenS1//8第八頁,共53頁。全局?jǐn)?shù)據(jù)結(jié)構(gòu)設(shè)計全局變量定義structCarAuto_A;//汽車AstructCarAuto_B;//汽車B全局?jǐn)?shù)據(jù)結(jié)構(gòu)定義汽車的結(jié)構(gòu):包括汽車的狀態(tài)(state)與汽車的坐標(biāo)structCar{intstate;doublex,y;};9第九頁,共53頁。程序模塊化設(shè)計模塊又稱構(gòu)件,在傳統(tǒng)的方法中指用一個名字就可調(diào)用的一段代碼。類似于高級語言中的過程、函數(shù)等。一個模塊可以包含一個或多個函數(shù)。10第十頁,共53頁。程序模塊化設(shè)計C語言中的模塊開發(fā)C語言允許一個程序由多個源文件組成。當(dāng)程序規(guī)模比較大時,可以根據(jù)模塊化原則將程序分成多個.c源文件,每個源文件看作是一個模塊,每個源文件中可包含一個或多個功能連接緊密的函數(shù)。在編譯該程序時,可以以源文件為單位分別進(jìn)行編譯,產(chǎn)生對應(yīng)的目標(biāo)文件,然后再用鏈接程序?qū)⒍鄠€目標(biāo)文件鏈接成一個可執(zhí)行文件。C語言的這種編譯過程稱為分塊編譯,這種開發(fā)方法稱為分塊開發(fā)11第十一頁,共53頁。程序模塊化設(shè)計程序模塊化設(shè)計應(yīng)該說明程序的模塊結(jié)構(gòu),包括:整個程序分成哪幾個模塊(.C源文件)?每一個文件里面包含哪些函數(shù)?函數(shù)原型說明。圖示說明模塊間調(diào)用關(guān)系(即模塊間函數(shù)的調(diào)用關(guān)系)。模塊1模塊2模塊3模塊4模塊5模塊6每個模塊是一個.C文件12第十二頁,共53頁。程序模塊化設(shè)計在確定一個程序要劃分成幾個模塊(源文件),每一個源文件要包含哪些函數(shù)時,需要以提高模塊獨(dú)立性為原則,將相關(guān)的功能放在一起,形成一個源文件。原則:高內(nèi)聚、低耦合13第十三頁,共53頁。通常,一個程序包含如下幾個部分:輸入處理:負(fù)責(zé)接收程序的輸入信息,將其存儲到內(nèi)存。如鍵盤輸入、圖形化輸入(鼠標(biāo)點(diǎn)擊等)、文件輸入等。輸出處理:負(fù)責(zé)輸出程序的結(jié)果信息。如屏幕輸出、圖形化輸出(輸出火車、輸出軌道、輸出探測點(diǎn)等)、文件輸出等。數(shù)據(jù)處理:負(fù)責(zé)對輸入信息進(jìn)行各種策略處理,將其轉(zhuǎn)化為最終的結(jié)果信息。數(shù)據(jù)處理按照程序內(nèi)部不同的子功能可劃分成不同的獨(dú)立子模塊,如火車狀態(tài)處理、火車控制策略、公共軌道狀態(tài)處理等。程序總調(diào)度:通常由主函數(shù)完成,單獨(dú)一個模塊。負(fù)責(zé)對以上所有模塊按照一定順序進(jìn)行調(diào)度。14第十四頁,共53頁。程序模塊化設(shè)計程序總調(diào)度輸入處理輸出處理數(shù)據(jù)處理15第十五頁,共53頁。模塊接口說明模塊文件模塊說明模塊包含的函數(shù)名函數(shù)功能
XXX.c功能說明
intfunction1(void)
voidfunction2
(float)
序號函數(shù)原型功能參數(shù)
返回值
1
intfunction1(void)
何時何條件被何模塊調(diào)用?完成什么功能?參數(shù)描述
返回值描述
2voidfunction2
(float)
參數(shù)描述
返回值描述表2函數(shù)說明表1模塊說明16第十六頁,共53頁。程序模塊化設(shè)計概要設(shè)計報告1用戶界面設(shè)計命令行方式、文件方式、動畫方式2有限狀態(tài)自動機(jī)狀態(tài)轉(zhuǎn)換圖3高層數(shù)據(jù)結(jié)構(gòu)定義包括:全局常量定義、全局?jǐn)?shù)據(jù)結(jié)構(gòu)定義4系統(tǒng)模塊劃分畫出系統(tǒng)模塊的調(diào)用關(guān)系圖;并詳細(xì)說明各個模塊的功能。17第十七頁,共53頁。程序模塊化設(shè)計頭文件的確定把所有公用的類型定義(結(jié)構(gòu)、聯(lián)合或枚舉聲明),公用的宏定義放在適當(dāng)?shù)念^文件中,供各個文件參考。如果在許多地方都使用一個(些)標(biāo)準(zhǔn)頭文件,或者某個頭文件本身需要,則可以把標(biāo)準(zhǔn)頭文件包含到一個自己定義的頭文件里供使用。如果只有一個源文件需要某個標(biāo)準(zhǔn)頭文件,則不要將它放在公共的頭文件中,而是讓這個源文件直接包含它,以提高編譯效率。對于所有在一個源文件里定義、而在其他文件中使用的東西(函數(shù)原型或者變量的外部聲明),都需要在某個頭文件中聲明,以方便使用。18第十八頁,共53頁。程序模塊化設(shè)計源文件設(shè)計時要注意以下問題:每個源文件只包含必要的頭文件,不用的東西盡量不包含。如果源文件既要包含標(biāo)準(zhǔn)頭文件,又要包含自定義頭文件,則應(yīng)將標(biāo)準(zhǔn)頭文件寫在前面,以防止本程序的局部定義影響標(biāo)準(zhǔn)庫文件里的定義。在一個源文件中,所有局部的東西都寫在各自的函數(shù)中;所有只在本文件范圍內(nèi)使用的外部變量和函數(shù),都使用static關(guān)鍵字定義為外部靜態(tài)的。對于多個函數(shù)都需要訪問的變量,應(yīng)該根據(jù)誰使用誰管理的歸屬原則,分別定義為不同源文件里的外部變量。在許多文件中都使用的全局變量,一般在主程序文件里定義。19第十九頁,共53頁。提綱1.軟件概要設(shè)計和模塊化2.使用線程實現(xiàn)任務(wù)并發(fā)3.時間控制函數(shù)20第二十頁,共53頁。1.使用線程實現(xiàn)任務(wù)并發(fā)問題的引出:以電梯控制系統(tǒng)為例目前能想到的程序主體結(jié)構(gòu)main(){while(1){state_trans();//計算此刻電梯的狀態(tài)
print_message();//輸出電梯此刻的狀態(tài),包括動畫get_input();//接收當(dāng)前時刻的新輸入(包括新目
標(biāo)和新呼叫)control();/*根據(jù)控制策略確定下一目標(biāo)樓層,
在state_trans()中要用到*/time_count();//時間片推進(jìn)一個}}思考:上述結(jié)構(gòu)不合理之處?
21第二十一頁,共53頁。1.使用線程實現(xiàn)任務(wù)并發(fā)上述結(jié)構(gòu)不合理之處:計算和輸出電梯狀態(tài)與接收服務(wù)請求是串行的,與現(xiàn)實中的電梯運(yùn)行不符!程序結(jié)構(gòu)的改進(jìn):
從上述代碼中刪除get_input(),從而實現(xiàn)每隔一小段時間就刷新電梯當(dāng)前狀態(tài)main(){while(1){state_trans();//計算此刻電梯的狀態(tài)
print_message();//輸出電梯此刻的狀態(tài) control();/*根據(jù)控制策略確定下一目標(biāo)樓層,這
在state_trans()中要用到*/time_count();//時間片推進(jìn)一個}}22第二十二頁,共53頁。1.使用線程實現(xiàn)任務(wù)并發(fā)但是,程序必須要能接收電梯服務(wù)請求,如何處理服務(wù)請求的輸入?理想狀態(tài):電梯服務(wù)請求的接收和電梯狀態(tài)的計算輸出能同時進(jìn)行,互不影響但是,能否實現(xiàn)?答案是:使用線程電梯狀態(tài)計算和輸出共享內(nèi)存區(qū)接收服務(wù)請求23第二十三頁,共53頁。1.使用線程實現(xiàn)任務(wù)并發(fā)進(jìn)程一個正在運(yùn)行的程序的實例,是一個程序在其自身的地址空間中的一次執(zhí)行活動,例如用字處理軟件編輯文稿時,同時打開mp3播放程序聽音樂,這兩個獨(dú)立的程序在同時運(yùn)行,稱為兩個進(jìn)程進(jìn)程是資源申請、調(diào)度和獨(dú)立運(yùn)行的單位24第二十四頁,共53頁。1.使用線程實現(xiàn)任務(wù)并發(fā)線程線程是系統(tǒng)分配處理器時間資源的基本單元。對于操作系統(tǒng)而言,其調(diào)度單元是線程(為線程提供時間片,線程在自己的時間片內(nèi)運(yùn)行)。一個程序中多段代碼同時并發(fā)執(zhí)行,稱為多線程譬如用word同時打開多個文檔進(jìn)行編輯,用IE瀏覽器同時訪問多個網(wǎng)站通過多線程,一個進(jìn)程表面上看同時可以執(zhí)行一個以上的任務(wù)——并發(fā)25第二十五頁,共53頁。線程(續(xù))一個進(jìn)程至少包括一個線程(稱為主線程)。一個進(jìn)程從主線程的執(zhí)行開始進(jìn)而創(chuàng)建一個或多個附加線程,就是所謂基于多線程的多任務(wù)。線程自己不擁有系統(tǒng)資源,但它可與同屬一個進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源26第二十六頁,共53頁。1.使用線程實現(xiàn)任務(wù)并發(fā)在C程序中要創(chuàng)建線程,可以調(diào)用Windows操作系統(tǒng)提供的創(chuàng)建線程的函數(shù)CreateThread:HANDLE
CreateThread(
LPSECURITY_ATTRIBUTES
lpThreadAttributes,
DWORD
dwStackSize,
LPTHREAD_START_ROUTINE
lpStartAddress,
LPVOID
lpParameter,
DWORD
dwCreationFlags,
LPDWORD
lpThreadId);
LPVOID是一個Void類型的指針,也就是說你可以將任意類型的指針賦值給LPVOID類型的變量。DWORD是32位無符號整數(shù)。27第二十七頁,共53頁。1.使用線程實現(xiàn)任務(wù)并發(fā)lpThreadAttributes表示創(chuàng)建線程的安全屬性,NT下有用??少x值為NULL。dwStackSize指定線程棧的尺寸,如果為0則與進(jìn)程主線程棧相同。lpStartAddress指定線程開始運(yùn)行的地址。賦值為指向函數(shù)的指針,即函數(shù)名。該函數(shù)的名稱任意,但函數(shù)類型必須遵照下述聲明形式: DWORDWINAPIThreadProc(LPVOIDlpParameter);否則需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換lpParameter表示傳遞給線程的32位的參數(shù)(數(shù)值或指針)。若無參數(shù)則賦值為NULL。dwCreationFlags表示是否創(chuàng)建后掛起線程(取值CREATE_SUSPENDED表示掛起,取值0表示創(chuàng)建后立即運(yùn)行),掛起后調(diào)用ResumeThread繼續(xù)執(zhí)行。若不掛起則賦值為0。lpThreadId用來存放返回的線程ID。
DWORDThreadID1=1;HANDLEhRead1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)getInput, NULL,0,&ThreadID1);28第二十八頁,共53頁。#include<stdio.h>#include<windows.h>DWORDWINAPIFun1Proc(LPVOIDlpParameter);intmain(){ HANDLEhThreadl;//<1> hThreadl=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//<2> CloseHandle(hThreadl);//<3> printf("mainthreadisrunning\n");//<4> return0;}DWORDWINAPIFun1Proc(LPVOIDlpParameter){ printf("hThreadlisrunning\n"); return0;}例129第二十九頁,共53頁。#include<stdio.h>#include<windows.h>DWORDWINAPIFun1Proc(LPVOIDlpParameter)intmain(){ HANDLEhThreadl;//<1> hThreadl=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//<2> CloseHandle(hThreadl);//<3> printf("mainthreadisrunning\n");//<4>Sleep(10);//讓線程睡眠10毫秒 return0;}例230第三十頁,共53頁。#include<stdio.h>#include<windows.h>intindex=0;DWORDWINAPIFun1Proc(LPVOIDlpParameter);intmain(){ HANDLEhThreadl;//<1> hThreadl=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);//<2> CloseHandle(hThreadl);//<3> while(index++<1000) { printf("mainthreadisrunning\n");//<4> } return0;}例3DWORDWINAPIFun1Proc(LPVOIDlpParameter){ while(index++<1000) { printf("hThreadlisrunning\n"); } return0;}31第三十一頁,共53頁。32第三十二頁,共53頁。#include<stdio.h>#include<windows.h>inttickets=100;DWORDWINAPIFun1Proc(LPVOIDpPararneter){ while(tickets>0) printf(“thread1sellticket:%d\n”,tickets--); return0;}DWORDWINAPIFun2Proc(LPVOIDpPararneter){while(tickets>0)printf(“thread2sellticket:%d\n”,tickets--);return0;}33第三十三頁,共53頁。intmain(){ HANDLEhThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); HANDLEhThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); Sleep(4000); return0;}34第三十四頁,共53頁。35第三十五頁,共53頁。線程的同步利用互斥對象(mutex)實現(xiàn)線程的同步,互斥對象能夠確保線程擁有對單個資源的互斥訪問權(quán)。3個操作互斥對象的創(chuàng)建互斥對象的釋放互斥對象的請求36第三十六頁,共53頁。互斥對象的創(chuàng)建HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,BOOLbinitialOwner,LPCTSTRlpNarne)lpMutexAttributes:可以給該參數(shù)傳遞NULL值,讓互斥對象使用默認(rèn)的安全性binitialOwner:BOOL類型,指定互斥對象初始的擁有者。如果該值為真,則創(chuàng)建這個互斥對象的線程獲得該對象的所有權(quán);否則,該線程將不獲得所創(chuàng)建的互斥對象的所有權(quán)。lpName:指定互斥對象的名稱。如果此參數(shù)為NULL.則創(chuàng)建一個匿名的互斥對象。如果調(diào)用成功,該函數(shù)將返回所創(chuàng)建的互斥對象的句柄37第三十七頁,共53頁?;コ鈱ο蟮尼尫臖OOLReleaseMutex(HANDLEhMutex);
ReleaseMutex函數(shù)只有一個HANDLE類型的參數(shù),即需要釋放的互斥對象的句柄。該函數(shù)的返回值是BOOL類型,如果函數(shù)調(diào)用成功,返回非0值;否則返回0值。38第三十八頁,共53頁?;コ鈱ο蟮恼埱驞WORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);Handle:所請求的互斥對象的句柄。一旦互斥對象處于有信號狀態(tài),則該函數(shù)就返回。如果該互斥對象始終處于無信號狀態(tài),即未通知的狀態(tài),則該函數(shù)就會一直等待,這樣就會暫停線程的執(zhí)行。dwMilliseconds:指定等待的時間間隔,以毫秒為單位。如果指定的時間間隔己過,即使所請求的對象仍處于無信號狀態(tài),WaitForSingleObject函數(shù)也會返回。如果將此參數(shù)設(shè)置為0,那么WaitForSingleObject函數(shù)將測試該對象的狀態(tài)并立即返回;如果將此參數(shù)設(shè)置為INFINITE,則該函數(shù)會永遠(yuǎn)等待,直到等待的對象處于有信號狀態(tài)才會返回。調(diào)用WaitForSingleObject函數(shù)后,該函數(shù)會一直等待,只有在以下兩種情況下才會返回:1)指定的對象變成有信號狀態(tài)。2)指定的等待時間間隔己過。39第三十九頁,共53頁。HANDLEhMutex;inttickets=100;
DWORDWINAPIFun1Proc(LPVOIDpPararneter){ while(tickets>0) { WaitForSingleObject(hMutex,INFINITE); if(tickets>0) printf("thread1sellticket:%d\n",tickets--); ReleaseMutex(hMutex); } return0;}40第四十頁,共53頁。DWORDWINAPIFun2Proc(LPVOIDpPararneter){ while(tickets>0) { WaitForSingleObject(hMutex,INFINITE); if(tickets>0) printf("thread2sellticket:%d\n",tickets--); ReleaseMutex(hMutex); } return0;}41第四十一頁,共53頁。intmain(){ HANDLEhThread1,hThread2; hMutex=CreateMutex(NULL,FALSE,NULL); hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL); CloseHandle(hThread1); CloseHandle(hThread2); Sleep(4000); return0;}42第四十二頁,共53頁。線程在電梯控制系統(tǒng)中的使用考慮現(xiàn)實中安裝在電梯上的軟件:接收電梯服務(wù)請求和計算電梯狀態(tài)、從而控制電梯的運(yùn)行是并行的因此我們可以考慮在模擬電梯控制系統(tǒng)中設(shè)計一個線程專門用于接收電梯服務(wù)請求,另一個線程實行電梯的狀態(tài)計算和狀態(tài)輸出電梯狀態(tài)計算和輸出線程共享內(nèi)存區(qū)接收服務(wù)請求電梯狀態(tài)計算和輸出:從共享內(nèi)存區(qū)讀取電梯請求,計算下一目標(biāo)樓層,從而確定電梯的下一狀態(tài)。接收服務(wù)請求:接收電梯請求,將請求保存到內(nèi)存。43第四十三頁,共53頁。//主線程main(){DWORDThreadID;//創(chuàng)建線程(對應(yīng)于函數(shù)input()),用于接收電梯輸入;
HANDLEhRead=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)getInput,NULL,0,&ThreadID);
//進(jìn)行變量初始化工作
線程在電梯控制系統(tǒng)中的使用44第四十四頁,共53頁。while(1){state_trans();();//根據(jù)自動機(jī)模型決定此刻電梯的狀態(tài)
print_message();/*輸出電梯此刻的狀態(tài)*/
control();/*根據(jù)控制策略確定下一目標(biāo)樓層,這在 state_trans()中要用到*/time_count();/*時間片推進(jìn)一個*/}}線程在電梯控制系統(tǒng)中的使用45第四十五頁,共53頁。//接收輸入線程voidgetInput(void){charch;while(1){ ch=getchar();//加入代碼:將ch翻譯成相應(yīng)請求并保存;
time_count();//時間片推進(jìn)一個;
}}線程在電梯控制系統(tǒng)中的使用46第四十六頁,共53頁。提綱1.軟件概要設(shè)計和模塊化2.使用線程實現(xiàn)任務(wù)并發(fā)3.時間控制函數(shù)47第四十七頁,共53頁。4.1-計時函數(shù)while(1){state_trans();();//根據(jù)自動機(jī)模型決定此刻電梯的狀態(tài)
print_message();/*輸出電梯此刻的狀態(tài)*/
control();/*根據(jù)控制策略確定下一目標(biāo)樓層,這在 state_trans()中要用到*/
time_count();/*時間片推進(jìn)一個*/}}48第四十八頁,共53頁。4.1-計時函數(shù)clock_tclock(void);
ANSI標(biāo)準(zhǔn)庫中的time.h頭文件,其中定義了日期和時間的處理函數(shù)。
這個函數(shù)返回從“啟動程序”到“程序中調(diào)用clock()函數(shù)”之間的CPU時鐘計時單元(clocktick)數(shù),在MSDN中稱之為掛鐘時間(wal-clock)。其中clock_t是用來保存時間的數(shù)據(jù)類型,長整型。clocktick:CPU時鐘計時單元,時間長短由CPU控制。一個clocktick不是CPU的一個時鐘周期,而是C/C++的一個基本計時單位。常量CLOCKS_PER_SEC,它表示一秒鐘會有多少個時鐘計時單元
??梢允褂霉絚lock()/CLOCKS_PER_SEC來計算一個進(jìn)程自身的運(yùn)行時間。49第四十九頁,共53頁。
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024股權(quán)合作經(jīng)營合同版
- 2025年度智能門禁系統(tǒng)升級改造合同3篇
- 2024年某農(nóng)業(yè)公司與農(nóng)產(chǎn)品加工企業(yè)就農(nóng)產(chǎn)品采購的合同
- 2025年度智能信息化車間生產(chǎn)承包合同范本3篇
- 2025年度新型草坪材料采購合同3篇
- 2024年版短期汽車租賃協(xié)議范本版B版
- 2024幼兒園教師勞務(wù)合同及教學(xué)成果評估范本2篇
- 2025年度文化產(chǎn)業(yè)財產(chǎn)抵押擔(dān)保投資合同3篇
- 2024年鋼構(gòu)建筑油漆工程專業(yè)承包合同
- 2024年高速公路養(yǎng)護(hù)司機(jī)勞務(wù)雇傭合同范本3篇
- 農(nóng)業(yè)合作社章程范本
- 痛風(fēng)性關(guān)節(jié)炎 課件
- 2休閑食品市場營銷策劃案1
- 全國高校第三輪學(xué)科評估按大學(xué)匯總
- 酒店砌體專項施工方案
- 建設(shè)工程施工合同 GF—2017—0201
- 部編版小學(xué)語文五年級下冊第四單元教學(xué)計劃及單元分析
- 進(jìn)水口快速閘門液壓啟閉機(jī)安裝施工方案
- 法道(FADAL)機(jī)床設(shè)備維修知識講座
- 職校生個人簡歷自薦信范文模板
- 雙電源STS靜態(tài)換轉(zhuǎn)開關(guān)輸入配電系統(tǒng)解決方案
評論
0/150
提交評論