三內(nèi)存管理應(yīng)用程序設(shè)計(jì)課件_第1頁
三內(nèi)存管理應(yīng)用程序設(shè)計(jì)課件_第2頁
三內(nèi)存管理應(yīng)用程序設(shè)計(jì)課件_第3頁
三內(nèi)存管理應(yīng)用程序設(shè)計(jì)課件_第4頁
三內(nèi)存管理應(yīng)用程序設(shè)計(jì)課件_第5頁
已閱讀5頁,還剩111頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、三、 內(nèi)存管理應(yīng)用程序設(shè)計(jì)內(nèi)存管理的相關(guān)概念內(nèi)存數(shù)據(jù)空間的動(dòng)態(tài)分配內(nèi)存代碼空間的動(dòng)態(tài)分配2 1內(nèi)存管理 主要任務(wù)對(duì)內(nèi)存儲(chǔ)器進(jìn)行分配、變換、保護(hù)和擴(kuò)充,存儲(chǔ)管理還應(yīng)該能夠在內(nèi)存和外存之間交換數(shù)據(jù)和代碼。 在Windows操作系統(tǒng)下,存儲(chǔ)器被保護(hù)起來,程序和用戶無法直接訪問,需要在程序中通過靜態(tài)和動(dòng)態(tài)兩種方式來訪問。Windows的內(nèi)存管理完成物理內(nèi)存和虛擬內(nèi)存之間的交換,虛擬內(nèi)存是32位的,多達(dá)4GB的大小,內(nèi)存管理還提供了一個(gè)核心服務(wù),完成內(nèi)存映射文件、寫時(shí)復(fù)制內(nèi)存和用戶程序使用的大量和稀疏內(nèi)存的管理。 3兩種使用內(nèi)存的基本方法靜態(tài)方法數(shù)組,例如 Student student501動(dòng)態(tài)方法指

2、針,例如Student *student=new Studentcount+14內(nèi)存管理 Windows NT在X86體系下虛擬地址空間的分布: 6例3-6 動(dòng)態(tài)申請(qǐng)?zhí)摂M內(nèi)存整數(shù)階乘計(jì)算到13就會(huì)出錯(cuò)。怎么辦?使用動(dòng)態(tài)申請(qǐng)的虛擬內(nèi)存空間編寫計(jì)算任何數(shù)的階乘的程序。解體思路:計(jì)算較大數(shù)的階乘的計(jì)算一般使用數(shù)組來存放階乘的位數(shù)。但是C+中數(shù)組最大長度是10萬,這將影響使用的范圍。可以通過使用動(dòng)態(tài)內(nèi)存分配(指針)來解決。本程序采用動(dòng)態(tài)申請(qǐng)?zhí)摂M內(nèi)存空間的方法,不使用物理內(nèi)存,而是使用虛擬內(nèi)存,從而使求解問題的范圍擴(kuò)大。階乘源代碼階乘執(zhí)行代碼7函數(shù)VirtualAlloc用函數(shù)VirtualAlloc保

3、留或申請(qǐng)?zhí)摂M內(nèi)存空間。該函數(shù)格式如下:LPVOID VirtualAlloc( LPVOID lpAddress, / 起始地址 DWORD dwSize, / 大小 DWORD flAllocationType, / 分配類型(MEM_COMMIT等) DWORD flProtect / 保權(quán)限(PAGE_READWRITE等));9函數(shù)VirtualFree使用函數(shù)VirtualFree釋放虛擬內(nèi)存,函數(shù)格式:BOOL VirtualFree( LPVOID lpAddress, /起始地址 DWORD dwSize, /大小 DWORD dwFreeType /釋放類型(MEM_RELE

4、ASE等)); 10源程序#include #include int lfac(int *a, int n) int sum,sc; for(int i=0;in*1024;i+) /空間清零ai=0; a0=1; /最低位設(shè)為1 for(i=2;i=n;i+) /n的階乘的循環(huán) sc=0;for(int j=0;j0) return -1; else return 0;11舉例求5!a0=1; /最低位設(shè)為1for(i=2;i=n;i+) /n的階乘的循環(huán) sc=0; for(int j=0;jn*1024;j+) /階乘每一位處理的循環(huán) sum=aj*i+sc; /上一次進(jìn)位值和當(dāng)前計(jì)算結(jié)

5、果求和 sc=sum/10; /存放進(jìn)位數(shù)值 aj=sum%10;/將余數(shù)存入數(shù)組 i =2(2!=2)i =3(3!=6)i =4(4!=24)i =5(5!=120)j=0sum=2sc=0a0=22!=a0=2j=0sum=6sc=0a0=63!=a0=6j=0sum=24sc=2a0=4j=0sum=20sc=2a0=0j=2sum=20sc=0a2=1j=1sum=2sc=2a1=23!=a1a0=24j=1sum=12sc=1a1=26!=a2a1a0=12012主函數(shù)int main() char *p; int n; coutn; if(n0) couta輸入數(shù)據(jù)錯(cuò);retur

6、n 1; int * lpBase =(int *) VirtualAlloc(NULL, 1024, MEM_COMMIT, PAGE_READWRITE); /保留 n*10240總的地址空間 int * lpPage = (int *)VirtualAlloc (lpBase + 0, n*1024,MEM_COMMIT,PAGE_READWRITE); /提交n*1024的頁地址空間 bool flag=FALSE; if(lfac(lpPage,n)0) cout溢出=0;i-) if(flag | lpPagei0) flag=TRUE; coutlpPagei; /輸出每一位 c

7、outendl; VirtualFree (int *)lpPage + 0,n*1024,MEM_DECOMMIT);/ 對(duì)頁地址解除提交內(nèi)存VirtualFree (lpBase,n*10240,MEM_RELEASE); / 釋放整個(gè)范圍的地址return 0;例3-6源代碼例3-6執(zhí)行代碼13程序執(zhí)行結(jié)果14例3-7 編寫計(jì)算圓周率的程序解題思路 已經(jīng)提供可以計(jì)算任意位小數(shù)的圓周率的動(dòng)態(tài)鏈接庫文件“pi.dll”和靜態(tài)庫文件“pi.lib”,需要將它們拷貝到工程的“Debug”子目錄中。 在“pi.dll”中存在計(jì)算圓周率的函數(shù)ComputPI,格式如下: int ComputPI(l

8、ong bits); 其中,參數(shù)bits代表要求的圓周率的小數(shù)位數(shù);返回值是0表示成功,是1表示失敗。16程序步驟 建立“Win32控制臺(tái)工程”,工程名稱為“Example3_7”; 在工程中添加一個(gè)C+源程序文件,文件名稱為“Example3_7.cpp”; 在工程中加入文件“pi.lib”。17程序執(zhí)行結(jié)果19 四、設(shè)備與文件管理應(yīng)用程序設(shè)計(jì)設(shè)備管理、文件管理于人機(jī)接口管理的相關(guān)概念設(shè)備管理程序設(shè)計(jì)文件設(shè)備管理程序設(shè)計(jì)人機(jī)接口管理程序設(shè)計(jì) 20 1. 設(shè)備管理與程序設(shè)計(jì)主要任務(wù) 根據(jù)確定的設(shè)備分配原則對(duì)設(shè)備進(jìn)行分配,使設(shè)備與主機(jī)能夠并行工作,為用戶提供良好的設(shè)備使用界面,以提高設(shè)備與設(shè)備之

9、間,設(shè)備與之間,進(jìn)程與進(jìn)程之間的并行性,從而提高整個(gè)操作系統(tǒng)的效率。21設(shè)備和內(nèi)存之間數(shù)據(jù)傳輸方式操作系統(tǒng)的設(shè)備管理程序通過四種控制方式完成設(shè)備與內(nèi)存之間的數(shù)據(jù)傳送。 1程序直接控制方式 中斷控制方式 DMA方式 通道方式 22(1)循環(huán)探測I/O方式通過設(shè)置一個(gè)測試I/O設(shè)備“忙/閑”狀態(tài)標(biāo)志的觸發(fā)器。若它置“閑”,則執(zhí)行I/O操作,若它置“忙”,則CPU不斷對(duì)它進(jìn)行監(jiān)測,直至設(shè)備“閑”下來為止。在早期計(jì)算機(jī)系統(tǒng)中主要采用這種方式。由于CPU速度比I/O設(shè)備速度高得多,而循環(huán)測試I/O方式使得CPU與外部設(shè)備只能串行工作,因此CPU絕大部分時(shí)間都處于等待I/O設(shè)備完成的循環(huán)測試中,CPU資源

10、浪費(fèi)極大。 優(yōu)點(diǎn): 管理簡單 缺點(diǎn): 浪費(fèi)了CPU資源 23(2)中斷處理方式為了克服循環(huán)測試方式的缺點(diǎn)(CPU必須不斷主動(dòng)測試I/O設(shè)備是否空閑),引入中斷處理技術(shù)。該方式的核心就是使I/O設(shè)備具有主動(dòng)“匯報(bào)”的能力;每當(dāng)完成I/O操作后,便給CPU發(fā)一個(gè)通告信號(hào)。只有當(dāng)CPU接到I/O設(shè)備中斷請(qǐng)求后,才處理I/O操作。 優(yōu)點(diǎn): 速度快,提高了資源的利用率。 缺點(diǎn):I/O操作還依賴于CPU,如果I/O處理頻繁,CPU也將很忙。特別是對(duì)字符設(shè)備,傳送一個(gè)字符,就要響應(yīng)一次中斷處理;若字符I/O設(shè)備很多、傳輸量很大時(shí),CPU可能完全陷入I/O處理中而不能自拔。示例24(4)通道(Channel)

11、方式要想把CPU從繁忙的雜務(wù)中解放出來,必須使I/O設(shè)備的管理不再依賴于CPU。“通道”是具有相對(duì)獨(dú)立的I/O處理能力的裝置。如大型機(jī)的前端機(jī),PC機(jī)的Intel 8090(I/O通道)等。在通道方式下,I/O處理變成了處理機(jī)之間的通訊問題。在采用通道方式的I/O系統(tǒng)中,CPU有兩個(gè)作用:一是將I/O操作任務(wù)下達(dá)給通道,由通道代替CPU專門處理I/O工作;二是隨時(shí)了解通道、控制器和設(shè)備工作的情況。 26設(shè)備管理示意圖 CPUCH1CH2CHnCU1CU2CUmDV1DV2DV3DV4DVkDVk+1通道控制器設(shè)備27例3-8 光驅(qū)管理程序算法分析 通過使用媒體控制接口(MCI) 的API函數(shù),

12、實(shí)現(xiàn)對(duì)光驅(qū)的操作。 編寫命令行式的程序,格式為: 光驅(qū)操作命令 光驅(qū)號(hào) 操作參數(shù) 接收命令行的argv1參數(shù),代表光驅(qū)盤符,和argv2參數(shù),代表操作命令(O表示打開,C表示關(guān)閉); 根據(jù)argv2參數(shù)的值,分別傳遞argv1參數(shù)調(diào)用函數(shù)OnCdopen打開光驅(qū)和OnCdclose關(guān)閉光驅(qū)。29解題思路使用“mmsystem.h”中的媒體控制接口(MCI) API函數(shù);MCI_OPEN_PARMS /打開光驅(qū)參數(shù)結(jié)構(gòu)體MCI_STATUS_PARMS /光驅(qū)狀態(tài)參數(shù)結(jié)構(gòu)體ZeroMemory函數(shù) /光驅(qū)參數(shù)賦零,將光驅(qū)類型 /參數(shù)設(shè)為CD_AUDIOmciSendCommand函數(shù) /發(fā)送設(shè)備

13、打開命令根據(jù)命令參數(shù)打開光驅(qū)和關(guān)閉光驅(qū)最后釋放設(shè)備存儲(chǔ)。30對(duì)話框框架程序用到的元素MCI_OPEN_PARMS結(jié)構(gòu)體 MCI_STATUS_PARMS結(jié)構(gòu)體 mciSendCommand函數(shù) ZeroMemory函數(shù) 31結(jié)構(gòu)體說明光驅(qū)管理程序typedef struct tagMCI_OPEN_PARMS /打開光驅(qū)參數(shù) DWORD dwCallback; / MCIDEVICEID wDeviceID; WORD wReserved0; LPCSTR lpstrDeviceType; LPCSTR lpstrElementName; LPCSTR lpstrAlias; MCI_OPEN

14、_PARMS;typedef struct tag MCI_STATUS_PARMS /光驅(qū)狀態(tài)參數(shù) DWORD dwCallback; DWORD dwReturn; DWORD dwItem; DWORD dwTrack; MCI_STATUS_PARMS;32設(shè)備控制函數(shù)說明MCIERROR mciSendCommand( /發(fā)送打開設(shè)備命令 MCIDEVICEID IDDevice, /設(shè)備標(biāo)示號(hào) UINT uMsg, /命令消息 DWORD fdwCommand, /命令消息標(biāo)志 DWORD dwParam /命令消息參數(shù));void ZeroMemory ( /初始化數(shù)據(jù)函數(shù) PV

15、OID Destination, /填充地址 DWORD Length /填充字節(jié)大小);33源程序#include #include #include /MCI API函數(shù)頭文件#pragma comment(lib,winmm)void CD_OpenCloseDrive(BOOL bOpenDrive, TCHAR cDrive)MCI_OPEN_PARMS op; /光驅(qū)打開參數(shù)結(jié)構(gòu)MCI_STATUS_PARMS st; /光驅(qū)狀態(tài)參數(shù)結(jié)構(gòu)DWORD flags;TCHAR szDriveName4; /光驅(qū)盤符變量strcpy(szDriveName, X:);:ZeroMemor

16、y(&op, sizeof(MCI_OPEN_PARMS); /光驅(qū)參數(shù)賦值為0op.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO; /光驅(qū)類型參數(shù)為CD_AUDIOif (cDrive 1) szDriveName0 = cDrive; op.lpstrElementName = szDriveName; /光驅(qū)盤符參數(shù)為函數(shù)參數(shù) flags = MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT | MCI_OPEN_SHAREABLE; else flags = MCI_OPEN_TYP

17、E | MCI_OPEN_TYPE_ID | MCI_OPEN_SHAREABLE; if ( !mciSendCommand(0,MCI_OPEN,flags,(unsigned long)&op) ) /發(fā)送設(shè)備打開命令st.dwItem = MCI_STATUS_READY;if(bOpenDrive) mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_OPEN,0); /打開光驅(qū)else mciSendCommand(op.wDeviceID,MCI_SET,MCI_SET_DOOR_CLOSED,0); /關(guān)閉光驅(qū)mciSendComm

18、and(op.wDeviceID,MCI_CLOSE,MCI_WAIT,0); /釋放設(shè)備存取34子函數(shù)源程序void OnCdopen(CString m_Letter) /打開光驅(qū)子函數(shù) CString new_letter = m_Letter; /取得輸入光驅(qū)盤符CD_OpenCloseDrive(TRUE, new_letter0);/打開指定盤符光驅(qū)m_Letter = ;void OnCdclose(CString m_Letter) /關(guān)閉光驅(qū)子函數(shù) CString new_letter = m_Letter; /取得輸入光驅(qū)盤符CD_OpenCloseDrive(TRUE,

19、new_letter0);/關(guān)閉指定盤符光驅(qū)m_Letter = ;35主函數(shù)int main(int argc, char *argv)if (argc 3) couta使用方法: Example3_8 ; return 1; if( argv20=O ) OnCdopen(argv1); else OnCdclose(argv1); return 0;例3-8源代碼例3-8執(zhí)行代碼36例3-9 雙緩沖顯示位圖程序 在程序設(shè)計(jì)中,普通的繪圖方法是一個(gè)圖形一個(gè)圖形地直接繪制到屏幕上,這樣做的缺點(diǎn)是會(huì)引起屏幕閃爍。采用雙緩沖技術(shù)可以減少屏幕的閃爍。37解題思路本程序采用單文檔/視圖框架;本程序中

20、定義一個(gè)內(nèi)存顯示設(shè)備對(duì)象MemDC、屏幕顯示設(shè)備對(duì)象pDC和位圖對(duì)象m_Bitmap;其中CBitmap是MFC提供的一個(gè)表示位圖文件的位圖類,一個(gè)位圖具有它的類型、大小和顏色值等;通過MemDC的函數(shù)CreateCompatibleDC建立與屏幕顯示兼容的內(nèi)存顯示設(shè)備;通過m_Bitmap的函數(shù)CreateCompatibleBitmap建立一個(gè)與屏幕顯示兼容的位圖;通過MemDC的函數(shù)SelectObject將位圖選入到內(nèi)存顯示設(shè)備中;接著在內(nèi)存位圖中進(jìn)行繪制;繪制完成后通過pDC的函數(shù)BitBlt將內(nèi)存中的圖拷貝到屏幕上進(jìn)行顯示;使用完成后,需要清除位圖對(duì)象m_Bitmap和內(nèi)存顯示設(shè)備

21、MemDC。38程序步驟建立單文檔/視圖框架程序,工程名為“Example3_9”;在文件“Example3_9View.cpp”的OnDraw(CDC* pDC) 函數(shù)中添加如下代碼:CDC MemDC; /首先定義一個(gè)顯示設(shè)備對(duì)象CBitmap m_Bitmap; /定義一個(gè)位圖對(duì)象 int nWidth=500; /繪圖寬度int nHeight=500; /繪圖高度MemDC.CreateCompatibleDC(NULL); /建立與屏幕顯示兼容的內(nèi)存顯示設(shè)備m_Bitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight); /建立一個(gè)與屏幕顯示

22、兼容的位圖MemDC.SelectObject(&m_Bitmap); /將位圖選入到內(nèi)存顯示設(shè)備中MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(192,192,192); /畫實(shí)心矩形 MemDC.Ellipse(100,100,400,400); /畫圓MemDC.MoveTo(100,100); /移動(dòng)到指定位置MemDC.LineTo(400,400); /畫直線MemDC.TextOut(220,250,“歡迎”); /顯示文字pDC-BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY); /將內(nèi)存中的圖拷

23、貝到屏幕上進(jìn)行顯示m_Bitmap.DeleteObject(); /清除位圖對(duì)象MemDC.DeleteDC(); /清除內(nèi)存顯示設(shè)備程序運(yùn)行即可得到結(jié)果.39程序運(yùn)行結(jié)果 例3-9執(zhí)行代碼40 2. 文件管理與程序設(shè)計(jì)主要任務(wù)有效地管理文件的存儲(chǔ)空間,合理地組織和管理文件系統(tǒng),為文件訪問和文件保護(hù)提供更有效的方法及手段,并把這種存儲(chǔ)、檢索、共享和保護(hù)文件的手段提供給操作系統(tǒng)本身和用戶,以達(dá)到方便用戶和提高資源利用率的目的。 41文件有關(guān)概念文件 一組相關(guān)信息的集合,文件具有一定的數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)、分類屬性和訪問權(quán)限。 文件從物理上,由位(bit)、字節(jié)(byte)、塊(block)、頁(pa

24、ge)和盤(disk)等組成; 物理結(jié)構(gòu)有連續(xù)文件結(jié)構(gòu)、串聯(lián)文件結(jié)構(gòu)和索引文件結(jié)構(gòu)。 從邏輯上,有字(word)、字段(segment)、記錄(record)、虛擬塊(virtual block)、文件(file)、文件目錄(file directory)、文件夾(folder)和文件卷(volume)等。 邏輯結(jié)構(gòu)可分為兩大類:字符流式的無結(jié)構(gòu)文件和記錄式的有結(jié)構(gòu)文件。42文件系統(tǒng)文件管理程序和所管理的全部文件(文件與目錄的集合)。 最常用的一些文件類型是: .exe 可執(zhí)行文件 .wav聲音文件.lib靜態(tài)庫文件 .jpg 圖片文件.dll動(dòng)態(tài)庫文件 .doc Word文件.ocx 組件文

25、件 .mdb Access數(shù)據(jù)庫文件.cpp C+源程序文件 .log日志文件.java Java源程序文件 .bmp 位圖文件.html 網(wǎng)頁文件 .ini初始化文件.chk磁盤整理文件等等43文件保護(hù)文件的保護(hù)可以通過改變文件屬性為可讀、可寫、可執(zhí)行、隱藏和歸擋來進(jìn)行。 44文件系統(tǒng)格式Windows操作系統(tǒng)采用FAT32和NTFS兩種文件系統(tǒng)格式:其中FAT32采用文件目錄表(file directory table,FDT)和文件分配表(file allocate table,FAT)相結(jié)合的方式來管理文件。FAT32的文件分配表是32位的,增強(qiáng)了對(duì)磁盤的管理能力,減少了磁盤空間的浪費(fèi)

26、。NTFS采用壓縮存儲(chǔ)方式,具有文件權(quán)限的管理功能,能夠更好地管理文件。45文件結(jié)構(gòu)文件的結(jié)構(gòu)包括物理結(jié)構(gòu)和邏輯結(jié)構(gòu)。文件的物理結(jié)構(gòu)又稱為文件的存儲(chǔ)結(jié)構(gòu),它是指文件在外存上的存儲(chǔ)組織形式,與存儲(chǔ)介質(zhì)的存儲(chǔ)性能有關(guān)。常用的物理結(jié)構(gòu)有連續(xù)文件結(jié)構(gòu)、串聯(lián)文件結(jié)構(gòu)和索引文件結(jié)構(gòu)。文件的邏輯結(jié)構(gòu)是用戶所觀察到的文件組織形式,是用戶可以直接處理的數(shù)據(jù)及結(jié)構(gòu),它獨(dú)立于物理特性,又稱為文件組織(FILE ORGANIZATION)。文件的邏輯結(jié)構(gòu)可分為兩大類:字符流式的無結(jié)構(gòu)文件和記錄式的有結(jié)構(gòu)文件。46文件的邏輯結(jié)構(gòu)文件的邏輯結(jié)構(gòu)分為兩種形式:一種是有結(jié)構(gòu)的記錄式文件,它由一組相關(guān)記錄組成。文件中的記錄可按

27、順序編號(hào)為記錄1、記錄2、記錄n。 例如,數(shù)據(jù)庫文件。另一種是無結(jié)構(gòu)的流式文件,它是指由字符序列集合組成的文件。 例如,一個(gè)Word文件。在UNIX中,所有文件都被看作是流式文件,包括打印機(jī)、顯示器等I/O設(shè)備。示例示例47文件的物理結(jié)構(gòu)是指文件在存儲(chǔ)設(shè)備上的存放形式。文件在邏輯上是連續(xù)的,但在存儲(chǔ)設(shè)備上存放時(shí)卻有幾種不同形式:連續(xù)文件。又稱順序文件。其特點(diǎn)是文件存放在存儲(chǔ)設(shè)備的相臨的物理塊中,即連續(xù)存放。串聯(lián)文件。又稱鏈表文件。它采用非連續(xù)的物理塊來存放文件信息,將文件的所有物理塊串聯(lián)組成一個(gè)鏈表,塊之間通過指針鏈接。索引文件。索引文件要求系統(tǒng)為每一個(gè)文件創(chuàng)建一張索引表,索引表的表項(xiàng)給出文件

28、的邏輯塊號(hào)和物理塊號(hào)的對(duì)應(yīng)關(guān)系。Hash(散列)文件。它采用計(jì)算尋址方法,將記錄鍵值通過Hash函數(shù)計(jì)算轉(zhuǎn)換成相應(yīng)記錄的地址。示例48文件的目錄結(jié)構(gòu)文件組織體系中還包括文件的目錄結(jié)構(gòu)。用戶使用的是文件的邏輯結(jié)構(gòu),系統(tǒng)使用的是文件的物理結(jié)構(gòu),在兩種不同的組織結(jié)構(gòu)之間似乎應(yīng)該有銜接的紐帶。銜接的紐帶就是文件的目錄結(jié)構(gòu)。通過文件的目錄結(jié)構(gòu),將文件的邏輯結(jié)構(gòu)和文件的物理結(jié)構(gòu)聯(lián)系在了一起。49例3-10 驅(qū)動(dòng)器瀏覽程序解題思路:本程序顯示操作系統(tǒng)中的所有盤符,程序中用到MFC和Windows API函數(shù);CString代表一個(gè)字符串對(duì)象;SetAt 函數(shù)改變字符串某個(gè)位置的字符;GetLength函數(shù)取

29、得字符的長度;GetBuffer函數(shù)將一個(gè)CString型的字符串轉(zhuǎn)換為LPTSTR類型的指定長度的字符串;宏變量DRIVE_REMOVABLE、DRIVE_FIXED、DRIVE_REMOTE、DRIVE_CDROM和DRIVE_RAMDISK分別表示不同類型的盤,在程序代碼中有說明。50程序步驟 調(diào)用API函數(shù)GetLogicalDrives取得“我的電腦”中的所有邏輯盤,并得到一個(gè)DWORD類型的數(shù),其中的某一位為1時(shí)表示該位代表的盤存在。其中GetLogicalDrives函數(shù)的格式為: DWORD GetLogicalDrives(VOID);通過提取dwDriveList的每一位,

30、得到所有盤符;調(diào)用API函數(shù)GetDriveType判別每一盤符的類型,其中GetDriveType函數(shù)的格式為: UINT GetDriveType(int nDrive) 51程序#include #include void main() int nPos = 0; UINT nCount = 0; CString strDrive = ?:; DWORD dwDriveList = GetLogicalDrives (); /取得我的電腦的所有盤 CString cTmp; UINT nType; cout我的電腦包含如下盤:endl; while (dwDriveList) if (d

31、wDriveList & 1) cTmp = strDrive; strDrive.SetAt (0, 0 x41 + nPos); /將數(shù)字表示的盤符轉(zhuǎn)換為字母 coutstrDrive.GetBuffer(strDrive.GetLength(); /將字符串轉(zhuǎn)換為指定格式 nType = GetDriveType (LPCTSTR) strDrive); /取得每個(gè)盤的類型 switch (nType) case DRIVE_REMOVABLE:cout可移動(dòng)盤endl;break; case DRIVE_FIXED: cout邏輯硬盤endl; break; case DRIVE_RE

32、MOTE:cout網(wǎng)絡(luò)盤endl;break; case DRIVE_CDROM:coutCDROM盤endl; break; case DRIVE_RAMDISK:coutRAM盤endl;break; default: cout未知類型盤= 1; /準(zhǔn)備取得下一個(gè)盤符 nPos+; cout共:nCount個(gè)盤endl; 52程序運(yùn)行結(jié)果 例3-10執(zhí)行代碼53例3-11 判別指定文件或文件夾屬性算法分析從命令行輸入指定的文件或目錄名稱,可以包含通配符( “*” 和“?”)。命令格式為: 命令 文件名使用FMC的CFileFind類的FindFile函數(shù)對(duì)指定文件進(jìn)行查找。CFileFin

33、d類的FindNextFile函數(shù)對(duì)指定文件繼續(xù)進(jìn)行查找(因指定的文件可能含有通配符)。分別通過函數(shù)GetFileName、 GetFilePath、IsDirectory、IsReadOnly和GetCreateTime得到文件的名稱、路徑、是否目錄、是否只讀和建立時(shí)間等,并顯示相應(yīng)結(jié)果。54 解題思路本應(yīng)用用到MFC的CFileFind類的FindFile、 FindNextFile、GetFileName、 GetFilePath、IsDirectory、IsReadOnly和GetCreateTime函數(shù);還用到CTime類的GetYear、GetMonth、GetDay函數(shù)取得文件建

34、立的時(shí)間(年、月、日)。55 源程序#include#includevoid main(int argc,char *argv)if(argc2) cout 使用格式:Example3_11 endl; exit(1); CFileFind finder;BOOL bWorking = finder.FindFile(argv1); /取得命令行參數(shù)指定的文件名,并查詢while (bWorking)bWorking = finder.FindNextFile(); /繼續(xù)查詢下一個(gè)文件cout 文件名稱:(LPCTSTR) finder.GetFileName() endl;cout 文件路

35、徑:(LPCTSTR) finder.GetFilePath() endl;if(finder.IsDirectory( ) cout 目錄endl;elsecout 文件 endl;if(finder.IsReadOnly( ) cout 只讀 endl;CTime fileTime;finder.GetCreationTime(fileTime); /取得文件建立時(shí)間cout 建立時(shí)間是:fileTime.GetYear()年;cout fileTime.GetMonth()月;cout fileTime.GetDay()日 endlendl;56程序運(yùn)行結(jié)果 例3-11執(zhí)行代碼57 例3

36、-12 讀取位圖文件屬性程序算法分析 從命令行輸入指定的位圖文件名稱; 命令格式為:命令 位圖文件名 定義位圖文件頭結(jié)構(gòu)變量BitmapFileHeader; 定義位圖信息結(jié)構(gòu)變量BitmapInfo; 打開指定文件; 使用函數(shù)fread分別讀取位圖文件頭和位圖信息; 關(guān)閉指定文件。并顯示位圖文件名稱、位圖文件類型、圖像寬度、圖像高度和每個(gè)像素的位數(shù)。58 解題思路 位圖文件是Windows操作系統(tǒng)中很重要的一種圖形格式,本例是對(duì)位圖文件的簡單操作。本程序用到的結(jié)構(gòu)體和函數(shù)有: BITMAPFILEHEADER /位圖文件頭結(jié)構(gòu)體 BITMAPINFO /位圖信息結(jié)構(gòu)體 fread()函數(shù) /

37、文件讀函數(shù)59BITMAPFILEHEADER格式位圖文件頭結(jié)構(gòu)體為: typedef struct tagBITMAPFILEHEADER WORD bfType; /文件類型 DWORD bfSize; /文件大小 WORD bfReserved1; /文件保留1 WORD bfReserved2; /文件保留2 DWORD bfOffBits; / ; 60位圖信息結(jié)構(gòu)體位圖信息結(jié)構(gòu)體BITMAPINFO的格式為:typedef struct tagBITMAPINFO BITMAPINFOHEADER bmiHeader; /位圖像素、像素位數(shù) RGBQUAD bmiColors1;

38、/顏色 BITMAPINFO;61Fread函數(shù)函數(shù)fread的格式如下:size_t fread( void *buffer, /文件緩沖區(qū) size_t size, /緩沖區(qū)塊長度 size_t count, /緩沖區(qū)塊個(gè)數(shù) FILE *stream /文件流指針 );62源程序#include#include#includevoid main(int argc,char *argv)if(argc2) cout用法:Example3_12 endl; exit(1); BITMAPFILEHEADER BitmapFileHeader; /定義位圖文件頭結(jié)構(gòu)變量BITMAPINFO Bi

39、tmapInfo; /定義位圖信息結(jié)構(gòu)變量 FILE *fp=fopen(argv1,rb); /打開命令行指定的文件if(fp=NULL) cout文件:argv1打開錯(cuò)誤endl; exit(1); fread(&BitmapFileHeader,sizeof(BITMAPFILEHEADER),1,fp); /讀位圖文件頭fread(&BitmapInfo,sizeof(BITMAPINFO),1,fp); /讀位圖信息fclose(fp); /關(guān)閉文件cout位圖文件名稱為:argv1endl; cout位圖文件類型為:(char)BitmapFileHeader.bfType;cou

40、t(char)(BitmapFileHeader.bfType/0 x100)endl;cout位圖文件的大?。築itmapFileHeader.bfSizebytesendl;cout圖像寬度:BitmapInfo.bmiHeader.biWidth點(diǎn)endl;cout圖像高度:BitmapInfo.bmiHeader.biHeight點(diǎn)endl;switch(BitmapInfo.bmiHeader.biBitCount) /每個(gè)像素的位數(shù) case 0: coutJPEG圖endl;break; case 1: cout單色圖endl;break; case 4: cout16色圖end

41、l;break; case 8: cout256色圖endl;break; case 16: cout64K圖endl;break; case 24: cout16M真彩色圖endl;break; case 32: cout4G真彩色圖endl;break; default: cout單位像素位數(shù)未知GetSafeHwnd()取得; lpOperation可以是“open”(打開)、“print”(打印)和“explore”(瀏覽目錄)、 參數(shù)lpFile為需要處理的文件名、 參數(shù)lpParameters為文件參數(shù),參數(shù)pDirectory為文件目錄,參數(shù)nShowCmd為窗口打開的大?。⊿W

42、_SHOWNORMAL、SW_SHOWMAXIMIZED等)。66程序步驟在VC+中建立文檔視圖的程序框架,工程命名為“Example3_15”;加入一個(gè)新對(duì)話框,并按下列要求設(shè)計(jì)對(duì)話框資源:對(duì)話框資源號(hào)為:“IDD_STUDENTDIALOG”;對(duì)話框窗口標(biāo)題為:“增加學(xué)生期末考試成績”;設(shè)置對(duì)話框中對(duì)象的屬性;放置6個(gè)靜態(tài)文本控件,6個(gè)編輯文本控件,2個(gè)按鈕控件,以及對(duì)應(yīng)的控件變量。在工程中增加一個(gè)Student類:創(chuàng)建菜單、修改菜單屬性;在類“Example3_14View”中增加成員變量:public:int count;Student student501;在文件“Example3_

43、14View.cpp”中加入操作代碼。67 Student 類成員public:int No;CString Name;float MathScore,EnglishScore,ComputerScore, AverageScore;Student()MathScore=EnglishScore=ComputerScore=AverageScore=0;68 CExample3_14View()的代碼#include Student.h#include StudentDialog.h CExample3_14View:CExample3_14View()count=0;69 CExample3

44、_14View:OnAdd() 代碼void CExample3_14View:OnAdd() CStudentDlg dlg; dlg.m_Count=count; int result=dlg.DoModal(); if(result=IDOK) studentcount.No=dlg.m_No;studentcount.Name=dlg.m_Name;studentcount.MathScore=dlg.m_MathScore;studentcount.EnglishScore=dlg.m_EnglishScore;studentcount.ComputerScore=dlg.m_Com

45、puterScore;studentcount.AverageScore=(studentcount.MathScore+studentcount.EnglishScore+studentcount.ComputerScore)/3;count+; 70 CExample3_14View:OnShow()代碼void CExample3_14View:OnShow()FILE *file=fopen(Student.txt,wt);char *p;char p1256;p= 學(xué)生期末考試成績單 rn學(xué)號(hào) 姓名 數(shù)學(xué) 英語 計(jì)算機(jī) 均分rn;fputs(p, file);p=rn;fputs(p

46、, file);for(int i=0;iGetSafeHwnd(), open, Student.txt, NULL, NULL, SW_SHOWNORMAL);71CExample3_14View:OnTotal()代碼void CExample3_14View:OnTotal() FILE *file=fopen(StudentTotal.txt,wt); char *p;char p1256; p= 學(xué)生總成績單 rn人數(shù) 數(shù)學(xué) 英語 計(jì)算rn; fputs(p, file); p=rn; fputs(p, file); studentcount.MathScore=0; studen

47、tcount.EnglishScore=0; studentcount.ComputerScore=0; for(int i=0;iGetSafeHwnd(), open, StudentTotal.txt, NULL, NULL, SW_SHOWNORMAL);72 CExample3_14View:OnPrint()代碼void CExample3_14View:OnPrint() ShellExecute(this-GetSafeHwnd(), print, Student.txt, NULL, NULL, SW_SHOWNORMAL);73 CExample3_14View:OnTot

48、alprint()代碼void CExample3_14View:OnTotalprint()ShellExecute(this-GetSafeHwnd(), print, StudentTotal.txt, NULL, NULL, SW_SHOWNORMAL);74 例3-14運(yùn)行結(jié)果 (b)數(shù)據(jù)輸入 (c)學(xué)生成績單 (d)學(xué)生統(tǒng)計(jì)成績單圖3-44 例3-14的運(yùn)行結(jié)果例3-14執(zhí)行代碼75作業(yè)、思考題作業(yè):第3章 一、二、三題的全部答疑時(shí)間:星期四、五:下午:4:006:00點(diǎn)答疑地點(diǎn):計(jì)教中心505房間76結(jié)束語歡迎參加到中心網(wǎng)站軟件基礎(chǔ)課程的學(xué)習(xí)討論中來。中心網(wǎng)址: http:/我的

49、E-mail地址: LZQ 謝謝,再見!77Cstring類Cstring類是MFC中提供的一個(gè)有關(guān)字符串操作的應(yīng)用程序類。它的定義放在頭文件中。其成員函數(shù)有:SetAt(int nIndex,TCHAR ch)替換指定位置上的字符GetAt(int nIndex)返回指定位置的字符GetLength()返回字符串的長度GetBuffer()將Cstring型字符串轉(zhuǎn)換為LPTSTR型字符串Insert()在字符串指定位置插入子串MakeReverse()將字符串中字符倒序Format()格式化輸出Find()返回指定字符在字符串中的位置返回78MFC的概述MFC是一個(gè)Windows應(yīng)用程序框

50、架,它定義了應(yīng)用程序的結(jié)構(gòu),并實(shí)現(xiàn)了標(biāo)準(zhǔn)的用戶接口。MFC提供了管理窗口、菜單、對(duì)話框的代碼,可實(shí)現(xiàn)基本的輸入/輸出和數(shù)據(jù)存儲(chǔ)。使用MFC庫,可以在Windows軟件開發(fā)專家的工作基礎(chǔ)上建立自己的應(yīng)用程序。應(yīng)用程序框架的核心是“文檔-視圖”結(jié)構(gòu)。文檔類的作用是將應(yīng)用程序的數(shù)據(jù)保存在文檔類對(duì)象中,視圖類的作用是顯示數(shù)據(jù)和編輯數(shù)據(jù)。MFC庫協(xié)調(diào)著文檔、視圖、框架窗口以及應(yīng)用程序?qū)ο笾g的相互作用。 79MFC類功能簡介根類CObjectMFC應(yīng)用結(jié)構(gòu)類應(yīng)用和線程支持類、命令例程類、文檔類、文檔模板類窗口、對(duì)話和控件類 CWnd類、框架窗口類、對(duì)話框類、視圖類、控件類、控件條類菜單類繪圖和打印類、輸

51、出(設(shè)備上下文)類、繪圖工具類簡單的數(shù)據(jù)類型類數(shù)組、列表和映射類文件和數(shù)據(jù)庫類文件I/O類、DAO類、ODBC類Internet和網(wǎng)絡(luò)類OLE類調(diào)試和異常類80MFC類層次 MFC的類可分為兩種:從CObject派生的類及非派生類。CObject應(yīng)用結(jié)構(gòu)類文件服務(wù)類繪圖工具類框架窗口類CCmdTargetCWndCDCCFile所有窗口的基類CFrameWnd對(duì)話框類CDialog視圖類CView控件類CAnimateCtrl應(yīng)用對(duì)象類CWinAppCDocumentCDocTemplate文檔類文檔模板類CMenu菜單類CArray數(shù)組類CList列表類CMap映射類CGdiObject返回

52、81CDC類MFC的類中與圖形操作有關(guān)的類有兩種:一種是CDC(Class Device Context)類、一種是GDI(Graphic Device Interface)對(duì)象類。GDI圖形設(shè)備接口是Windows提供的一個(gè)圖形操作的抽象的接口,通俗地講是各種關(guān)于圖形操作的函數(shù)庫。Windows不允許應(yīng)用程序直接訪問硬件,而是通過GDI間接地和硬件打交道(通過“設(shè)備環(huán)境”DC)。CDC類主要功能是完成繪圖功能和環(huán)境的建立。82CDC類中常用的函數(shù)及功能 BitBlt()TextOut()LineTo()Ellipse()FillRect()MoveTo()Ractangle()Pie()Po

53、lygon()GetTextColor()SelectStockObject()SetWindowOrg()SetWindowExt()把位圖從一個(gè)DC拷貝到另一個(gè)DC繪制文本繪制線條繪制橢圓或圓用給定的畫筆的顏色填充矩形設(shè)置畫筆的位置繪制矩形繪制餅圖繪制多邊形獲取文本的顏色選取GDI繪圖對(duì)象設(shè)置窗口中坐標(biāo)系中的原點(diǎn)設(shè)置窗口的范圍83CDC類的使用方法對(duì)于顯示器類型的DC調(diào)用CDC*CWnd:GetDC()函數(shù)來獲得指向窗口的工作區(qū)的DC指針;利用得到的DC指針,調(diào)用CDC類的函數(shù)完成繪制工作;使用ReleaseDC()釋放獲得的DC。對(duì)于內(nèi)存型的DC調(diào)用CDC*CWnd:CreateComp

54、atibleDC()函數(shù)來創(chuàng)建兼容設(shè)備環(huán)境;利用得到的DC對(duì)象,調(diào)用CDC類的函數(shù),來完成繪制工作;使用DeleteDC()刪除創(chuàng)建的DC。返回84OnDraw()函數(shù)的使用方法在Windows中是不允許直接訪問顯示硬件的,要控制顯示的對(duì)象,需要通過和窗口關(guān)聯(lián)的“設(shè)備環(huán)境”與顯示硬件進(jìn)行通信。設(shè)備環(huán)境是由Visual C+的CDC類對(duì)象來表示的,該對(duì)象以指針的形式作為參數(shù)傳遞給了OnDraw函數(shù),有了這個(gè)設(shè)備環(huán)境指針,就可以在OnDraw函數(shù)完成各種各樣的繪制工作。返回例如,在Exaple3_9工程文件中有: void CExaple3_9View:OnDraw(CDC* pDC)CExapl

55、e3_9Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here85設(shè)備管理有關(guān)的數(shù)據(jù)結(jié)構(gòu)為了對(duì)系統(tǒng)中的設(shè)備實(shí)行有效的管理,設(shè)置了一整套數(shù)據(jù)結(jié)構(gòu),包括:系統(tǒng)設(shè)備表(SDT)、設(shè)備控制表(DCT)、控制器控制表(COCT)以及通道控制表(CHCT),稱這些表格的數(shù)據(jù)為“設(shè)備管理數(shù)據(jù)基”。也可以說,設(shè)備的管理,實(shí)際上是對(duì)這些相關(guān)數(shù)據(jù)的表格的管理。 86SDT 系統(tǒng)設(shè)備表(System Device Table)SDT表記錄著系統(tǒng)中全部標(biāo)準(zhǔn)I/O設(shè)備,一種設(shè)備一個(gè)表項(xiàng)。 內(nèi)容包括:

56、設(shè)備1設(shè)備i .SDT設(shè)備i特征信息設(shè)備類設(shè)備標(biāo)識(shí)符進(jìn)程標(biāo)識(shí)符設(shè)備接口模塊標(biāo)識(shí)符 每一種設(shè)備又建立相應(yīng)的設(shè)備控制塊、控制器控制塊和通道控制塊。87DCT 設(shè)備控制表(Device Control Table)為了實(shí)現(xiàn)對(duì)設(shè)備的控制,每一種設(shè)備都在DCT表中有一個(gè)表項(xiàng),內(nèi)容包括: DCTDCT1DCTi設(shè)備類型設(shè)備標(biāo)識(shí)符設(shè)備狀態(tài)(忙/閑)與設(shè)備連接的控制器表指針重復(fù)執(zhí)行次數(shù)或時(shí)間 *設(shè)備隊(duì)列隊(duì)頭指針設(shè)備隊(duì)列隊(duì)尾指針注:表示若出錯(cuò),重復(fù)執(zhí)行的次數(shù)或時(shí)間。88COCT控制器控制表(COntroller Control Table)為了實(shí)現(xiàn)對(duì)控制器的控制,每一個(gè)控制器都在COCT表中有一個(gè)表項(xiàng),內(nèi)容包括

57、: COCTCOCT1COCTi控制器標(biāo)識(shí)符控制器狀態(tài)(忙/閑)與控制器連接的通道表指針控制器隊(duì)列隊(duì)頭指針控制器隊(duì)列隊(duì)尾指針89CHCT 通道控制表(CHannel Control Table)為了實(shí)現(xiàn)對(duì)通道的控制,每一個(gè)通道都在CHCT表中有一個(gè)表項(xiàng),內(nèi)容包括: CHCTCHCT1CHCTi通道標(biāo)識(shí)符通道狀態(tài)(忙/閑)與通道連接的控制器表指針通道隊(duì)列隊(duì)頭指針通道隊(duì)列隊(duì)尾指針90基于數(shù)據(jù)基的管理示意圖 SDTDCTCOCTCHCT 申請(qǐng)I/O 申請(qǐng)控制器 申請(qǐng)通道 隊(duì)列 隊(duì)列 隊(duì)列 設(shè)備管理程序返回91與分配策略有關(guān)的因素I/O設(shè)備的固有屬性I/O設(shè)備的分配算法設(shè)備的安全性與設(shè)備的無關(guān)性 92

58、 I/O設(shè)備的固有屬性設(shè)備屬性不同要采用不同的分配方式。獨(dú)享設(shè)備 是一些慢速的設(shè)備,它不允許交叉使用,并在使用過程中需要人工干預(yù)。因此,一旦占用,只能到用完才能釋放、收回。共享設(shè)備 如磁盤,其定位操作時(shí)間短,可供直接存取操作,可由多進(jìn)程共享使用,所以采用共享分配方式。共享設(shè)備在系統(tǒng)中主要用于存儲(chǔ)文件。 93 I/O設(shè)備的分配算法I/O調(diào)度程序的分配策略與進(jìn)程調(diào)度策略基本相同,但由于I/O操作一旦啟動(dòng),就不能停止的特點(diǎn),因此,不能采用進(jìn)程調(diào)度的時(shí)間片輪轉(zhuǎn)法。 先請(qǐng)求先分配 當(dāng)多個(gè)進(jìn)程對(duì)同一個(gè)設(shè)備提出I/O請(qǐng)求時(shí),系統(tǒng)按請(qǐng)求的先后次序?qū)⑦M(jìn)程排隊(duì)。設(shè)備分配程序?qū)/O設(shè)備分配給隊(duì)列中第1個(gè)進(jìn)程。優(yōu)先

59、數(shù)最高優(yōu)先 系統(tǒng)優(yōu)先響應(yīng)優(yōu)先數(shù)最高的進(jìn)程對(duì)I/O設(shè)備的請(qǐng)求。對(duì)優(yōu)先數(shù)相同的I/O請(qǐng)求,則按先請(qǐng)求先分配的原則處理。 94 設(shè)備分配的安全性在有些系統(tǒng)下,出于安全的考慮,限定一個(gè)進(jìn)程只能提出一個(gè)I/O設(shè)備請(qǐng)求,以防止可能產(chǎn)生“死鎖”,導(dǎo)致設(shè)備分配不安全。設(shè)備分配程序在多請(qǐng)求方式中,為保證不發(fā)生死鎖,一般要采取預(yù)防發(fā)生死鎖的措施。 95 與設(shè)備無關(guān)性為提高系統(tǒng)的可適應(yīng)性和可擴(kuò)展性,應(yīng)使用戶程序和實(shí)際使用的物理設(shè)備無關(guān)。為此引入邏輯設(shè)備名和物理設(shè)備名的概念。系統(tǒng)規(guī)定,在用戶程序中只允許使用邏輯設(shè)備名。與設(shè)備無關(guān)性通常是通過系統(tǒng)提供的邏輯設(shè)備和物理設(shè)備的映象表來實(shí)現(xiàn)的(也稱為進(jìn)程連接表PAT。若某邏輯

60、設(shè)備已連接到相應(yīng)的物理設(shè)備上,則PAT表中該物理設(shè)備表項(xiàng)由該類設(shè)備的邏輯設(shè)備名和物理設(shè)備名組成)。 返回96文件系統(tǒng)的組織基本概念 文件卷(Volume)用于存放文件的存儲(chǔ)介質(zhì) 的統(tǒng)稱。一個(gè)邏輯盤就是一個(gè)文件卷。 塊(Block)文件系統(tǒng)中,用來存儲(chǔ)、傳輸文件信息的單位。定長(例如512或1024個(gè)字節(jié))。 塊長度 不同文件系統(tǒng),塊長度不一樣,通常 取2n ;MS-DOS中,用“簇”(2n 個(gè)扇區(qū)) 作為塊長度單位,UNIX中,用“頁”作為 長度單位。n97基本概念(續(xù)) 文件構(gòu)成: 為便于管理,一個(gè)文件由兩個(gè)部分組成:文件特征信息;用于管理和操作控制;文件體;是文件的實(shí)際內(nèi)容信息。文件目錄及

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論