操作系統(tǒng)課程設計模擬磁盤文件管理的程序_第1頁
操作系統(tǒng)課程設計模擬磁盤文件管理的程序_第2頁
操作系統(tǒng)課程設計模擬磁盤文件管理的程序_第3頁
操作系統(tǒng)課程設計模擬磁盤文件管理的程序_第4頁
操作系統(tǒng)課程設計模擬磁盤文件管理的程序_第5頁
已閱讀5頁,還剩15頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、中南林業(yè)科技大學操作系統(tǒng)課程設計課程題目:模擬磁盤文件管理的程序姓名:學號:專業(yè):計算機科學與技術年級:2006計算機科學學院2008年 11月模擬磁盤文件管理的程序課程設計內(nèi)容 自定義磁盤文件管理的數(shù)據(jù)結構; 能夠自由創(chuàng)建、修改、刪除文件; 文件具有一定自定義的屬性; 能夠顯示當前系統(tǒng)文件的狀態(tài)。二、 課程設計的數(shù)據(jù)結構說明程序中定義了兩個類: class file/ 文件類private:char name10; / 文件名int tag; /刪除標記 1: 已刪 0: 未刪public:file( ) char *getname( )return name; /獲取文件名int gett

2、ag( )return tag; /獲取刪除標記int getlength() return length; /int getblocknum() return blocknum; / int getblocksum1()return blocksum1; / int getblocksum2()return blocksum2; /獲取文件大小 磁盤塊數(shù) 磁盤塊號的始點 磁盤塊號的終點int length,blocknum,blocksum1, blocksum2;void setname(char na ) strcpy(name,na); /設置文件名void delwenjian()

3、tag=1; / 設置刪除標記 1: 已刪 0: 未刪void creatfile(char *na,int L,int num,int s1,int s2) / 創(chuàng)建文件 void deltefile(char *na) tag=1; strcpy(name,na); /刪除文件void disp( )/輸出文件信息class fdatabase / 文件庫類 private:int top; / 文件記錄指針file f50;public:fdatabase()top=-1; / 構造函數(shù)int search(char *fname)/ 按文件名查找 int creatfile(char

4、*na,int L,int num,int s1,int s2)/ 是否存在創(chuàng)建文件時先查找int deltefile(char *na)/ 刪除文件時先查找是否存在 void disp() / 輸出所有文件信息;三、課程設計的模板說明1、初始化,建立文件系統(tǒng)輸入磁盤大?。℅),每個盤塊大?。∕ ),自動建立位示圖,位示圖字長定為32位輸出位示圖的行數(shù),以及行號、列號與磁盤塊號的轉換公式(都從0 開始編號) 。2、循環(huán)選擇執(zhí) 行以下功能1、存儲文件 輸入建立的文件名和文件大小,如果該文件名已經(jīng)存在,則輸出不能建立的信息 否則計算所需的磁盤塊數(shù)為其分配足夠多的磁盤塊,并記錄下來 輸出所占用的磁盤

5、塊號2、刪除文件 輸入要刪除的文件名,如果該文件名不存在,則輸出刪除錯誤信息,否則收回該 文件所占用的磁盤塊刪除該文件名3、顯示位示圖情況 顯示位示圖的情況 顯示剩余磁盤塊的數(shù)目4、顯示文件列表顯示文件名,文件大小,占用的磁盤塊數(shù)目和磁盤塊號四、課程設計的源代碼#include#include #include#include#include int i=0,j=0,sum=0,tt=0,r,ii,k,g,m;int a10032;class file/ 文件類private:int no; / 文件編號char name10; / 文件名public:int tag; / 刪除標記 1: 已

6、刪 0: 未刪file( ) char *getname( )return name; / int gettag( )return tag; / int getno() return no; / int getlength() return length;獲取姓名獲取刪除標記獲取文件編號/獲取文件大小int getblocknum() return blocknum; / int getblocksum1()/ 磁盤塊號的始點磁盤塊數(shù) return blocksum1; int getblocksum2()/ 磁盤塊號的終點 return blocksum2;int length; / 文件大

7、小int blocknum;/ 盤塊數(shù)int blocksum1;/ 所占盤塊號的始點int blocksum2;/ 所占盤塊號的終點void setname(char na ) /設置文件名strcpy(name,na);void delwenjian() tag=1; / 設置刪除標記 void creatfile(char *na,int L,int num,int s1,int s2) / tag=0;length=L; blocknum=num; blocksum1=s1;blocksum2=s2;strcpy(name,na);blocknum=length/m; / if(len

8、gth%m!=0) / blocknum=blocknum+1;cout 所需磁盤塊數(shù): if(sum+blocknum)=32) / for(;j(sum+blocknum);j+)aij=1;sum=sum+blocknum; /else1: 已刪 0: 未刪創(chuàng)建文件盤塊數(shù) =文件大小 / 盤塊大小 盤塊數(shù)取上整blocknumendlendl;所有盤塊數(shù)只占用一行,直接賦值再進行下面文件的盤塊數(shù)累加 /for(;j32;j+)aij=1;i=i+1;for(j=0;j(sum+blocknum)-32;j+) aij=1;sum=sum+blocknum-32;tt=tt+blocknu

9、m; / cout 所占磁盤塊號:占用多行,先賦值整行/ 再進行剩余項賦值輸出文件所占用的盤塊號tt-blocknum to tt-1endl;blocksum1=tt-blocknum;blocksum2=tt-1;void deltefile(char *na) / 刪除文件 tag=1;strcpy(name,na);void disp( )/ 輸出文件信息coutsetw(8)namesetw(10)lengthsetw(18)blocknumsetw(12)blocksum1 to blocksum2endl;class fdatabase / 文件庫類 private:int to

10、p; / 文件記錄指針file f50;public:fdatabase() / 構造函數(shù)top=-1;int search(char *fname)/ 按文件名查找for ( ii=0;ii=top;ii+) if (strcmp(fii.getname(),fname)=0 & fii.tag=0)return 0;return 1;int creatfile(char *na,int L,int num,int s1,int s2)/創(chuàng)建文件時先查找是否存在 int p;p=search(na);if (p=1) top+; ftop.creatfile(na,L,num,s1,s2);

11、return 1;elsecout ! return 0; int deltefile(char *na)/int b,p,x=0,n1,n2,q1,q2,t; p=search(na); if (p=0) / / fii.tag=1; b=fii.length/m; / if(ii=0) / for(k=0;kb;k+) axk=0;該文件已存在 , 不能創(chuàng)建 !nn;刪除文件時先查找是否存在若文件存在進行刪除文件賦值盤塊數(shù) =當前文件大小 / 盤塊大小 對第一個刪除文件進行賦值elsen1=(fii-1.blocksum2+1)/32; /n2=(fii.blocksum2+1)/32;

12、/ 示跨行q1=(fii-1.blocksum2+1)-n1*32; / q2=(fii.blocksum2+1)-n2*32; / t=n2-n1;if(t=0) / 一行for(k=q1;k=0;t-,x+)/for(k=0;k32;k+)axk=0;x=n2; / for(k=0;kb-(t-1)*32;k+) axk=0;else / x=n1; for(k=q1;k0;t-,x+)/for(k=0;k32;k+)axk=0;x=n2; /被查找的文件之前文件所占用的盤塊數(shù) /32 , / 大于 0 表示跨行所有文件所占用的盤塊數(shù) /32 ,大于 0表當前文件的開始盤塊號用于跨行后計算

13、盤塊號若 n2 與 n1 相等,表明當前所有被占用盤塊在同前面所占用的盤塊數(shù)是 32 倍數(shù) 當前文件賦值 循環(huán)進行整行賦值對剩余項賦值對當前文件前幾項賦值中間整行賦值最后剩余項賦值for(k=0;k(fii.blocksum2+1)-t1*32;k+) axk=0; return 1; elsecout 該文件不存在 ;return 0;void disp() / 輸出所有文件信息for (int i=0;i=top;i+)if(fi.tag=0)fi.disp();void bit_map(int I)int s=0;cout-endl;for(int p=0;pI;p+)for(int q

14、=0;q32;q+) coutapq ; coutendl;out -endl;for(int p1=0;p1I;p1+)for(int q1=0;q132;q1+)if(ap1q1=1)s=s+1;s=(g*1024)/m-s;cout 剩余盤塊數(shù) :sendl;void main() int I,l,b,i,j,ss1,ss2,sum=0;char fname20;fdatabase p;file w;cout tt*n;cout tt*cout tt*cout tt*n;*n; 初始化,建立文件系統(tǒng)*n;cout tt*n;cout g; coutendl; cout m;coutend

15、l;I=(g*1024)/(32*m);for( i=0;iI;i+)for( j=0;j32;j+)aij=0;coutbit_map(I);coutcout tt*n;cout tt*cout tt*cout tt*cout tt*cout tt*cout tt*cout tt*char choice;while(choice!=0)cout tt*n; cout tt*n;cout tt*文 件 管 理 系 統(tǒng)cout tt* *n;cout tt*n;建立的位示圖為: endl;行數(shù): Iendl;*n;行號、列號與磁盤塊號的轉換公式為:磁盤塊號二行號*32+列號行號=磁盤塊號/32列

16、號=磁盤塊號%32*n;*n;*n;*n;*n;*n;*n;cout ttt1 存 儲 文 件 nnttt2 刪 除 文 件 nnttt3 顯示位示圖情況 nnttt4顯示文件列表 endl;cout choice;coutendl;switch (choice)case 1:cout fname;coutendl; / 創(chuàng)建文件前,先查找是否有同名文件存在 int q;q=p.search(fname);if (q=0) cout ! 該文件已存在 , 不能創(chuàng)建 !nn; break;cout l;coutg*1024)cout ! 文 件 大 小 超 過 磁 盤 最 大 容 量 , 無 法

17、 進 行 分配!e ndl;break; p.creatfile(fname,l,b,ss1,ss2);break;case 2:cout fname;coutendl; q=p.search(fname);if (!q=0)cout ! 該文件不存在,無法刪除 !nn break;p.deltefile(fname);break;case 3:cout tt* 顯 示 位 示 圖 如 下*n;coutendl;bit_map(I);break;case 4:cout tt*文件列表如下*n;cout -endl;coutvsetw(10)vv文件名setw(15)vv文件大小(MB)vset

18、w(15)v所占盤 塊數(shù)setw(15)所占盤塊號endl;p.disp();coutendl;break;default:cout 輸入錯誤,請從新輸入: nn;break;五、課程設計程序運行結果1、初始化,建立文件系統(tǒng)(1)用戶根據(jù)提示輸入磁盤大小( GB )與每個盤塊大?。?MB );(2) 程序首先根據(jù)用戶輸入的磁盤大?。?GB)與每個盤塊大?。∕B),自動建立位示圖, 即初始化位示圖,位示圖每一行長度固定為 32 位(即列固定為 32);位示圖中每一位表示 一個盤塊,取值 0 和 1 分別表示空閑和占用。初始化的位示圖應全為 0;3)程序再輸出位示圖的剩余盤塊數(shù),行數(shù),以及行號、列

19、號與磁盤塊號的轉換公式(行列皆從0開始編號);這樣,初始化,建立文件系統(tǒng)完成。運行結果:2、選擇執(zhí)行:存儲文件,刪除文件,顯示位示圖情況,顯示文件列表【顯示文件管理系統(tǒng)列表】顯示文件系統(tǒng)管理列表,并提示輸入信息1 4。用戶輸入 文件操作命令1 (存儲文件),2 (刪除文件)、3 (顯示位示圖情況)、4 (顯示文件列表);格式如下:鍵入1,創(chuàng)建文件名為fname,大小為L ( MB )的文件;鍵入2,刪除文件名為fname的文件;鍵入3,顯示位示圖情況;鍵入4,顯示所有文件信息。運行結果:【存儲文件】用戶輸入文件操作命令是1(存儲文件)。系統(tǒng)提示你輸入你要建立的文件名和文件大小,如果該文件名已經(jīng)

20、存在,則系統(tǒng)提示輸出不能建立此文件的信息,否則計算所需的磁盤 塊數(shù)和所占用的磁盤塊號,并輸出結果。相應的在位示圖上,因為位示圖是矩陣,可以 用數(shù)組存儲,根據(jù)所占用的磁盤塊號和公式:磁盤塊號=行號*32+列號行號=磁盤塊號/32列號=磁盤塊號 32計算出文件占用的磁盤塊在位示圖上的位置,現(xiàn)在是創(chuàng)建文件,所以將位示圖該位置上的二進制數(shù)置1表示已分配出去。分別創(chuàng)建名為II,ZZ和mm三個文件,文件大小分別為 224MB,320MB和56MB。| c:,1- *F: ososile BaikageVDebiLgVfile- eze*-|n| x請輸入選擇項:1Jk請輸入文件名:11請輸入文件大小血:224所需磁盤塊數(shù):28所占磁盤塊號:0 to27請輸入選擇項:13請輸入文件名:ZZ請輸入文件大小冊:320所需磁盤塊數(shù):40所占磁盤塊號:28 to67請輸入選擇項:13請輸入文件名=EE請輸入文件大小血:56所需磁盤塊數(shù):7所占磁盤塊號:68 to| 74-J n| x此時對應的位示圖如下:匕胞 *F:ososile BajiageVDebiigVflie. exe11111111111111111111111111111111111111111111111111111111

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論