版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、廣東工業(yè)大學(xué)課程設(shè)計(jì)任務(wù)書(shū)(源代碼在附錄)題目名稱多用戶多級(jí)目錄文件系統(tǒng)的實(shí)現(xiàn)學(xué)生學(xué)院計(jì)算機(jī)學(xué)院專業(yè)班級(jí)2008級(jí)軟件工程2班6900一、課程設(shè)計(jì)的內(nèi)容本課程設(shè)計(jì)要求設(shè)計(jì)一個(gè)模擬的多用戶多級(jí)目錄的文件系統(tǒng)。 通過(guò)具體的文 件存儲(chǔ)空間的管理、文件的物理結(jié)構(gòu)、 目錄結(jié)構(gòu)和文件操作的實(shí)現(xiàn),加深對(duì)文件 系統(tǒng)內(nèi)部功能和實(shí)現(xiàn)過(guò)程的理解。二、課程設(shè)計(jì)的要求與數(shù)據(jù)1. 在內(nèi)存中開(kāi)辟一個(gè)虛擬磁盤(pán)空間作為文件存儲(chǔ)器,在其上實(shí)現(xiàn)一個(gè)多用戶多 目錄的文件系統(tǒng)。2. 文件物理結(jié)構(gòu)可采用顯式鏈接或其他方法。3. 磁盤(pán)空閑空間的管理可選擇位示圖或其他方法。如果采用位示圖來(lái)管理文件存儲(chǔ)空間,并采用顯式鏈接分配方式,則可以將位
2、示圖合并到FAT中。4 .文件目錄結(jié)構(gòu)采用多用戶多級(jí)目錄結(jié)構(gòu),每個(gè)目錄項(xiàng)包含文件名、物理地址、長(zhǎng)度等信息,還可以通過(guò)目錄項(xiàng)實(shí)現(xiàn)對(duì)文件的讀和寫(xiě)的保護(hù)。目錄組織方式 可以不使用索引結(jié)點(diǎn)的方式,但使用索引結(jié)點(diǎn),則難度系數(shù)為1.2。(1)(2)(3)(4)(5)(6)(7)(8)(9)5.設(shè)計(jì)一個(gè)較實(shí)用的用戶界面,方便用戶使用。要求提供以下相關(guān)文件操作: 具有l(wèi)ogin (用戶登錄)createopen read write close delete系統(tǒng)初始化(建文件卷、提供登錄模塊) 文件的創(chuàng)建: 文件的打開(kāi): 文件的讀: 文件的寫(xiě): 文件關(guān)閉: 刪除文件: 創(chuàng)建目錄(建立子目錄): mkdir(1
3、0)改變當(dāng)前目錄:cd(11)列出文件目錄:dir(12)退出:logout6.系統(tǒng)必須可實(shí)際演示,選用程序設(shè)計(jì)語(yǔ)言:C+ +、C等。1.11.21.31.42.12.22.32.42.53.13.23.33.43.53.63.73.83.9設(shè)計(jì)思想說(shuō)明設(shè)計(jì)環(huán)境設(shè)計(jì)思想存儲(chǔ)空間管理目錄結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)虛擬磁盤(pán)用戶的數(shù)據(jù)文件目錄文件管理目錄文件的類管理用戶的類功能實(shí)現(xiàn)登陸系統(tǒng)系統(tǒng)初始化文件的創(chuàng)建文件的打開(kāi)文件刪除文件的讀創(chuàng)建目錄查看當(dāng)前目錄刪除目錄3.10返回上一級(jí)目錄3.11退出四、操作思想五、界面演示5.1登陸界面5.2管理員登陸成功后的界面5.3用戶登陸成功后的界面八、系統(tǒng)具體運(yùn)行演示6.1文
4、件的創(chuàng)建與查看(讀文件)6.2目錄的創(chuàng)建與查看6.3文件系統(tǒng)空間的查看七、實(shí)驗(yàn)體會(huì)八、收集的資料及主要參考文獻(xiàn)目錄11一、設(shè)計(jì)思想說(shuō)明1.1設(shè)計(jì)環(huán)境a)程序設(shè)計(jì)語(yǔ)言:C+語(yǔ)言b)計(jì)算機(jī)及操作系統(tǒng):PC機(jī),WindowsXPc)開(kāi)發(fā)平臺(tái):Microsoft Visual C+ 6.0 企業(yè)版d)運(yùn)行平臺(tái):PC機(jī),WindowsXP1.2設(shè)計(jì)思想文件系統(tǒng)是操作系統(tǒng)中負(fù)責(zé)管理和存取文件信息的機(jī)構(gòu), 它具有“按名存取” 的功能。文件系統(tǒng)主要實(shí)現(xiàn)對(duì)具體的文件存取空間的管理、文件的物理結(jié)構(gòu)、 目 錄結(jié)構(gòu)管理和文件操作。本實(shí)驗(yàn)中的文件系統(tǒng)是多用戶多級(jí)目錄的文件系統(tǒng)。實(shí)驗(yàn)中定義用戶的上限為5個(gè),目錄結(jié)構(gòu)采用多
5、級(jí)目錄結(jié)構(gòu)。1.3存儲(chǔ)空間管理系統(tǒng)中的數(shù)據(jù)文件,需要為之分配磁盤(pán)空間。采用模擬方法,虛擬磁盤(pán)為一 個(gè)10000大小的一維數(shù)組:disk_block10000 ,0表示空閑,1表示已分配出去。使用混合索引分配方式來(lái)為存儲(chǔ)文件分配所在外存的塊號(hào): 當(dāng)文件大小較小 時(shí),采用直接地址,索引結(jié)點(diǎn)的每項(xiàng)存放文件數(shù)據(jù)的盤(pán)塊的盤(pán)塊號(hào); 當(dāng)文件大小 較大時(shí),采用一次間接地址,即一級(jí)索引;當(dāng)文件非常大時(shí),采用多次間接地址, 即二級(jí)索引。為了提咼即樹(shù)形目錄 如下圖所1.4目錄結(jié)構(gòu)目錄結(jié)構(gòu)的組織,關(guān)系到文件系統(tǒng)的存取速度、安全性、共享性。 目錄的檢索速度和文件系統(tǒng)的性能, 采用了多目錄結(jié)構(gòu)來(lái)組織目錄, 結(jié)構(gòu),主目錄稱
6、為根目錄,數(shù)據(jù)文件為樹(shù)葉,其他的目錄為樹(shù)的結(jié)點(diǎn)。示。二、數(shù)據(jù)結(jié)構(gòu)2.1虛擬磁盤(pán),初始化時(shí)所有盤(pán)塊置 0初始化所有磁盤(pán)塊為空閑for(i=0;i<10000;i+) disk_blocki=0; disk_e mp ty=10000;/22用戶的數(shù)據(jù)文件,即樹(shù)葉typ edef struct UFDchar n ame10;int attribute;int len gth;int a10;int *p1;int (*p 2)100; struct UFD *n ext;UFD;/2.32.4存儲(chǔ)文件信息文件名屬性 長(zhǎng)度/為文件本身分配10個(gè)空間 一級(jí)索引,100個(gè)空間/二級(jí)索引,100*
7、100個(gè)空間/文件鏈的下一結(jié)點(diǎn)目錄文件,即樹(shù)結(jié)構(gòu)中樹(shù)的結(jié)點(diǎn)typ edef struct DIRDIR* above; char n ame10; int len gth;DIR *n ext;UFD *File_head;DIR *Dir_head;DIR;/存儲(chǔ)目錄信息/上一結(jié)點(diǎn)目錄名目錄的大小下一結(jié)點(diǎn)此目錄下的文件指針此目錄下目錄鏈表指針/管理目錄文件的類,每個(gè)用戶都是其的對(duì)象class Cuse/定義管理用戶目錄的類DIR *now;UFD *Fhead;DIR *Dhead;/當(dāng)前目錄/文件的頭結(jié)點(diǎn)/根目錄的目錄鏈頭結(jié)點(diǎn)char code10; char n ame10; int l
8、en gth; int status;public:/ /代碼省略/密碼用戶名用戶空間大小是否獲得空間/ 2.5管理用戶的類,管理員是其的對(duì)象/用戶類class Cdisk public:Cuse user5;char code10;int dis_disk();/int first_dele_user();/int dele_user(i nt);/int n ew_user();/int set_code();int log in( char);/用戶個(gè)數(shù)最多為5/管理員密碼 顯示磁盤(pán)的使用情況刪除用戶的準(zhǔn)備工作 具體實(shí)現(xiàn)刪除用戶查看當(dāng)前用戶與外存空間使用情況,后創(chuàng)建新用戶 /設(shè)置新密碼/
9、登陸Cdisk();/構(gòu)造函數(shù)virtualCdisk();/ 虛函數(shù),析構(gòu);三、功能實(shí)現(xiàn)3.1登陸系統(tǒng)系統(tǒng)中設(shè)置了管理員和用戶兩種登陸模式。管理員的用戶名為“管理員”, 默認(rèn)密碼為123,可以后期修改密碼。用戶初始化時(shí)不存在,在登陸時(shí)系統(tǒng)發(fā)現(xiàn) 不存在任何用戶則自動(dòng)要求用戶先注冊(cè)一用戶,并在注冊(cè)成功后為用戶登陸。3.2系統(tǒng)初始化(建文件卷、提供登錄模塊)for(i=0;i<10000;i+)/初始化所有磁盤(pán)塊為空閑disk_blocki=0;disk_e mp ty=10000;int Cdisk:log in( char b)/登陸3.33.43.53.6文件的創(chuàng)建:int Cuse:
10、 new_file() 文件的打開(kāi):openint Cuse:o pen _file() 文件刪除:int Cuse:first_dele_file() int Cuse:dele_file(UFD *f) / 文件的讀:int Cuse:dis_file()/建立新文件/打開(kāi)文件/刪除文件的前面工作 具體實(shí)現(xiàn)刪除文件查看文件3.73.8創(chuàng)建目錄(建立子目錄):int Cuse:new_dir() 查看當(dāng)前目錄:int Cuse:dis_dir(DIR *d)/ /int Cuse:dis_ no w()DIR *Cuse:get_ no w() / 刪除目錄:int Cuse:first_d
11、ele_dir() int Cuse:dele_dir(DIR *p) 3.10 返回上一級(jí)目錄:int Cuse:goback() 3.11退出:在主菜單中用flag標(biāo)記實(shí)現(xiàn)3.9/建立新目錄顯示目錄顯示當(dāng)前目錄得到當(dāng)前目錄路徑/刪除目錄的前奏/具體實(shí)現(xiàn)刪除目錄的工作/向上返回四、操作思想(創(chuàng)建)后,將自動(dòng)獲得一個(gè)根各個(gè)用戶的名字不能相同。在每個(gè)用戶注冊(cè)目錄(root ),在此目錄中,可以創(chuàng)建多個(gè)目錄(同一父目錄下,不能同名)和 多個(gè)數(shù)據(jù)文件。在root目錄里,進(jìn)入一個(gè)新建的子目錄,則又可以在此子目錄里創(chuàng)建多個(gè) 目錄和數(shù)據(jù)文件。依次類推,實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)。但同一父目錄下,目錄項(xiàng)和數(shù)據(jù)文 件都不能
12、重名。五、界面演示5.1登陸界面陸眷陸統(tǒng)理戶出晴輸入選擇:5.2管理員登陸成功后的界面筲理員登陸成功IJ hrf .1 dv-w-vJI." " " 1. 戶口 盾窗 戶戶前碼陸 用暫密登 建回 創(chuàng)刪查修返gS*:usei*5.3用戶登陸成功后的界面在該界面中,功能選擇菜單正面顯示了用戶名為“user",并同時(shí)顯示了當(dāng)前所處的目錄為根目錄“ root”。此處,如當(dāng)前處在多級(jí)目錄里,將把目錄路徑 詳細(xì)列出,用到的實(shí)現(xiàn)函數(shù)為D.user n.dis_dir(D.user n.get_ no w();如下圖所示。root d dd ddd六、系統(tǒng)具體運(yùn)行演示6
13、.1文件的創(chuàng)建與查看(讀文件)請(qǐng)輸入建立的文件名:FilE七度;12屬性只讀,1:讀寫(xiě)” 0請(qǐng)輸入要查看的文件名*ile比為只諫文fr,占用硬盤(pán)塊號(hào)如下3LO1 2116.2目錄的創(chuàng)建與查看g錄名稱A3 盟 rill A包含如下目錄:目錄大入0Q0&課象包墻辣Fllel file29012文件屬性1&6.3文件系統(tǒng)空間的查看管理員登陸成功!戶口 用窗 戶戶前碼陸 用彎密登 建屠改回 創(chuàng)刪查僂返用戶名 userl u.ser2 usep3請(qǐng)選擇:占用空間大小21200212 9788七、實(shí)驗(yàn)體會(huì)本次課程設(shè)計(jì)是利用C+程序語(yǔ)言編寫(xiě)的,由于對(duì) C+的自學(xué)不夠深,導(dǎo)致 在調(diào)試與編譯時(shí)出
14、現(xiàn)了很大的困難,但在有關(guān) C+實(shí)踐指導(dǎo)書(shū)的幫助下,許多問(wèn) 題都逐步得到了解決。文件系統(tǒng)的要求的功能很多,程序很長(zhǎng)。但此次實(shí)驗(yàn)無(wú)疑是對(duì)我C+知識(shí)的一次磨練,使得我深深體會(huì)到它在實(shí)現(xiàn)對(duì)象操作和相關(guān)數(shù)據(jù)封 閉操作的好處。在設(shè)計(jì)此系統(tǒng)時(shí),方發(fā)覺(jué)自己對(duì)文件系統(tǒng)理解得不夠透徹。 例如在考慮如何 實(shí)現(xiàn)多用戶多目錄時(shí),差點(diǎn)就走進(jìn)了如何在二級(jí)目錄里實(shí)現(xiàn)的死胡同。后來(lái), 耐 心回到這學(xué)期學(xué)習(xí)的課本內(nèi)容上,才醒悟要利用樹(shù)形結(jié)構(gòu)。不然, 是無(wú)法實(shí)現(xiàn)多 用戶情況下的多目錄多文件層層嵌套。如何保證在子目錄里進(jìn)行文件操作 (數(shù)據(jù)文件的創(chuàng)建、刪除)時(shí)造成的當(dāng)前 目錄空間大小變化同步更新到先輩目錄的空間大小,這困擾了我很久。在
15、參考了操作系統(tǒng)實(shí)驗(yàn)教程后,利用了目錄類中的 above (指向上一目錄結(jié)點(diǎn)),當(dāng)前目錄空間變化時(shí),即循環(huán)向上同步變化先輩目錄的大小,直到根目錄為止。另外,實(shí)驗(yàn)中用到了 now (目錄指針)來(lái)指向當(dāng)前所處的目錄。在同一目錄下,如何實(shí)現(xiàn)多目錄或多數(shù)據(jù)文件的保存, 實(shí)驗(yàn)時(shí)我先是用數(shù)組 結(jié)構(gòu),但后來(lái)發(fā)覺(jué)用指針鏈表更為方便,因?yàn)檫@樣就不必限制數(shù)據(jù)文件和子目錄 的個(gè)數(shù),雖然指針對(duì)內(nèi)存的申請(qǐng)、釋放掌握要求更為嚴(yán)格。總而言之,操作系統(tǒng)的課程設(shè)計(jì),不僅提升了自己的程序設(shè)計(jì)及編寫(xiě)技巧, 更大大地加深了對(duì)操作系統(tǒng)的文件管理的了解。八、收集的資料及主要參考文獻(xiàn)123計(jì)算機(jī)操作系統(tǒng),湯小丹等,西安電子科技大學(xué)出版社 操
16、作系統(tǒng)實(shí)驗(yàn)指導(dǎo)書(shū),傅秀芬,廣東工業(yè)大學(xué)(自編) 操作系統(tǒng)實(shí)驗(yàn)教程,袁寶華,清華大學(xué)出版社4 C+上機(jī)實(shí)踐指導(dǎo)教程(第三版),Nell Dale著,馬樹(shù)奇譯,電子工業(yè)出版社附錄:)!/此程序包含三個(gè)源代碼文件?。╠isk.h, disk.cpp, menu.cpp/調(diào)試與編譯環(huán)境:VC+6.0 /C+/主源代碼文件為disk.cpp / /*disk h*/disk.h,磁盤(pán)頭文件,虛擬/以下的是對(duì) VC編譯器的檢查 #if !defined(AFX DISK H 1FAB24AE C718 49FF A915 94211192B8BC INCLUDED ) #define AFX DISK H
17、 1FAB24AE C718 49FF A915 94211192B8BC INCLUDED./VC+ 6.0=1200 #if MSC VER>1000 #pragma once #en dif /_MSC_VER>1000 extern int disk_block10000; exter n int disk_e mp ty;17typ edef struct UFD/存儲(chǔ)文件信息char n ame10;int attribute;/文件名屬性in t le ngth;/長(zhǎng)度/int a10;int *p1;in t (* p2)100; struct UFD *n ext
18、;為文件本身分配/ 一級(jí)索引,/二級(jí)索引,10個(gè)空間100個(gè)空間 100*100個(gè)空間/UFD;存儲(chǔ)目錄信息typ edef struct DIRDIR* above;/上一結(jié)點(diǎn)char n ame10; in t le ngth;DIR *n ext;/UFD *File_head;/下一結(jié)點(diǎn)此目錄下的文件指針DIR *Dir_head;/此目錄下目錄鏈表指針DIR;DIR *now;UFD *Fhead;/DIR *Dhead;/public:;char code10; char n ame10; in t le ngth;int status;/當(dāng)前目錄文件的頭結(jié)點(diǎn)根目錄的目錄鏈頭結(jié)點(diǎn)密
19、碼用戶名用戶空間大小是否獲得空間void set_status(i nt);int dele_user();int dis_file();int dis_dir(DIR *d);/int get_le ngth();char const *get_ name(); char const *get_code();int get_status();int set_user(char *,char *);/ DIR *get_ no w();int dele_file(UFD *f);int dele_dir(DIR*);Cuse();Cuse();int goback();int dis_ no
20、w();int n ew_file();int n ew_dir();int open _dir();int open _file();int first_dele_file();int first_dele_dir();int set_code();/顯示文件所占外存塊號(hào)當(dāng)前路徑設(shè)置用戶名與密碼/刪除文件刪除目錄構(gòu)造析構(gòu)返回上級(jí) 顯示當(dāng)前目錄刪除文件的前部分工作刪除目錄的前部分工作class Cdisk public:/用戶類Cuse user5;char code10;int dis_disk();int first_dele_user();int dele_user(i nt);/用戶個(gè)
21、數(shù)最多為5int n ew_user();/查看當(dāng)前用戶與外存空間使用情況,后創(chuàng)建新用int set_code(); in t logi n( char); Cdisk(); virtualCdisk();/;#en dif設(shè)置新密碼II登陸虛函數(shù),析構(gòu)!defi ned(AFX DISK H 1FAB24AE C718 49FF A915 94211192B8BC INCLUDED )II*disk cpp*#i nclude"disk.h"#in clude"me nu.cpp"#in clude<stri ng.h>#in clude&
22、lt;stdlib.h>#in clude<iostream.h>#i ncludevioma nip .h> in tdisk_block10000;int disk_e mpty;Cdisk:Cdisk() 管理磁盤(pán)的類,構(gòu)造函數(shù)int i=0;char code10="123456" for(i=0;i<10000;i+)disk_blocki=0;/初始化所有磁盤(pán)塊為空閑IIthis->user0.set_user("stude nt","123");/ disk_e mp ty=10000
23、;cout.setf(ios:left);/設(shè)置輸出方式默認(rèn)一個(gè)用戶Cdisk:Cdisk()/析構(gòu)int Cdisk:dele_user(i nt i)/Cdisk 類 dele user 的構(gòu)造Cuse C;C=useri;useri.dele_user();II調(diào)用Cuse類的成員函數(shù)int dele_user()return 1;int Cdisk:dis_disk()/檢查磁盤(pán)信息int i=0;cout<<setw(14)<<" 用戶名"<<setw(14)<<"占用空間大小"<<e
24、ndl; for(i=0;i<5;i+)/存在的用戶的信息if(useri.get_status()=1)cout<<setw(14)<<useri.get_ name()<<setw(14)<<useri.get_le ngth()<<e ndl;cout<<"已用空間:"<<10000-disk_empty<<endl<<"剩余空間:"<<disk_e mp ty<<e ndl;return 1;/登陸int Cd
25、isk:logi n( char b)char n10,c10;int i;if(b='1')cout<<"用戶:管理員"<<endl;cout<<"密碼:默認(rèn) n"<<endl;system( "p ause");return 1;elseif(!user0.get_status()i=0;cout<<"當(dāng)前用戶為空,/當(dāng)前不存在用戶歡迎注冊(cè)!useri.set_status(1); cout<<"請(qǐng)輸入用戶名:"&
26、lt;<e ndl;/"<<e ndl;為新用戶分配權(quán)利cin>>n;cout<<"請(qǐng)輸入密碼:"<<e ndl;cin>>c;useri.set_user( n,c);/調(diào)用Cuse的成員函數(shù),傳遞用戶名與密碼"<<e ndl;cout<<"恭喜,創(chuàng)建用戶成功!return i;12elsecout<<"用戶名:" cin>>n;H.cout<<"密碼: cin>>c;cout
27、<<e ndl;19for(i=0;i<5;i+)/查找是否存在此用戶if(useri.get_status()if(!strcm p(n, useri.get_ name()/存在方比較/相等時(shí)為0,此判斷為匹/密碼匹配if(!strcm p( c,useri.get_code()cout<<"cout<<"登陸成功! "<<e ndl;歡迎"<<useri.get_name()<<"登陸"<<endl;return i; elsecout&l
28、t;<"密碼錯(cuò)誤"<<endl;return -1;cout<<"此用戶不存在! "<<endl;return -1;int Cdisk:set_code()/設(shè)置新密碼char temp 110,te mp 210; cout<<"請(qǐng)輸入原密碼"<<endl;/無(wú)疑是針對(duì)當(dāng)前用戶進(jìn)行操作,故直接 codecin> >te mp1;if(strc mp (te mp 1,code)cout<<"原密碼錯(cuò)誤!"<<e
29、ndl;return 0; while(1)cout<<"請(qǐng)輸入新密碼:"<<endl;cin> >te mp1;cout<<"請(qǐng)?jiān)俅屋斎胄旅艽a:"<<endl;cin> >te mp2;if(strc mp (te mp 1,te mp 2)cout<<"兩次密碼不相同,請(qǐng)重輸 !"<<endl; break;strc py (code,te mp 1); break; cout<<"密碼設(shè)置成功!"<
30、;<endl;/保存新密碼return 1;int Cdisk: new_user()/準(zhǔn)備創(chuàng)建新用戶char n10,c10;int i=0,j; for(i=0;i<5;i+)if(useri.get_status()=0)/是否有此用戶,此尚未存在break;if(i=5)cout<<"已經(jīng)達(dá)到最大用戶5個(gè),不能再創(chuàng)建!"<<endl;return 0;useri.set_status(1);cout<<"請(qǐng)輸入用戶名:"<<endl;/為新用戶分配權(quán)利cin>>n;if(i&
31、gt;0)for(j=0;j<i-1;j+)if(!strc mp (userj.get_ name(), n)/已有其它用戶存在cout<<"此用戶名已存在!"<<endl;return 0; cout<<"請(qǐng)輸入密碼:"<<e ndl;cin>>c;/調(diào)用Cuse的成員函數(shù),傳遞用戶名與密碼"<<e ndl;/刪除用戶useri.set_user( n,c);cout<<"恭喜,創(chuàng)建用戶成功!return 1;int Cdisk:first_
32、dele_user()char n10,c;int i;cout<<"請(qǐng)輸入你要?jiǎng)h除的用戶名"<<endl;cin>>n;for(i=0;i<5;i+)/在查找用戶的同時(shí),得到用戶序號(hào) iif(!strcm p( useri.get_ name( ),n)&&useri.get_status()break;/找到,跳出if(i=5)cout<<"出錯(cuò)啦,此用戶不存在!"<<endl;return 0;cout<<"確認(rèn)刪除此用戶?確認(rèn)Y,取消任意鍵&q
33、uot;<<endl;cin>>c;if(c!='Y'&&c!='y')cout<<"已經(jīng)取消刪除!"<<endl;return 0;this->dele_user(i);cout<<"用戶刪除成功"<<endl;return 1;Cuse:Cuse()/構(gòu)造函數(shù),初始化成員status=O;/len gth=O;no w=0;Fhead=O;Dhead=O;Cuse:Cuse()/用戶權(quán)利,即是否被創(chuàng)建標(biāo)記 空間當(dāng)前目錄文件目錄
34、析構(gòu),清除程序占用的內(nèi)存disk_e mp ty+=le ngth;len gth=0;UFD *f=Fhead;DIR *d=Dhead;/文件/目錄int Cuse: new_file() /建立新文件while(f!=0)if(f->n ext=0) this->dele_file(f); f=0;break;while(f- >n ext- >n ext!=O)f=f->n ext;this->dele_file(f- >n ext); f->n ext=0;f=Fhead;while(d!=0)if(d- >n ext=0)thi
35、s->dele_dir(d);d=0;break;while(d->n ext->n ext!=0) d=d->n ext;this->dele_dir(d->n ext);d->n ext=0;d=Dhead;int i=0,j=0;UFD *f,*p=0;DIR *D;p=new UFD;/開(kāi)辟一個(gè)新的文件結(jié)構(gòu)體if(p=0)cout<<"無(wú)可用內(nèi)存空間,創(chuàng)建文件失?。?quot;<<endl;return 1;cout<<"請(qǐng)輸入建立的文件名:cin>>p->n ame;
36、if(no w=0) f=Fhead;elsef=no w->File_head;H./根目錄下的文件鏈當(dāng)前目錄下的文件鏈檢查是否文件重名while(f!=0)if(!strcm p(p->n ame,f- >n ame)cout<<"此文件已存在!"<<endl;/退出return 0;f=f->n ext;cout<<"rr<<"cin>>p->le ngth; cout<<"rr<<"長(zhǎng)度:"屬性(0 :只
37、讀,cin>>p->attnbute;cout<<e ndl;if(p->le ngth>disk_e mp ty)cout<<"文件太大,空間不足,1讀寫(xiě)):"/空間不足當(dāng)前空間為:"<<disk_e mp ty<<e ndl;delete p;return 0;disk_e mp ty=disk_e mpty-p->le ngth;/for(i=0;i< p->le ngth&&i<10;i+)for(j;j<10000;j+)if(di
38、sk_blockj=0)p->ai=j;disk_blockj=1;j+;break;/空閑剩余空閑盤(pán)塊文件較小時(shí),直接地址,文件數(shù)據(jù)盤(pán)塊位示圖法得到此空間標(biāo)記為已分配出去跳出尋找,為文件分配下一空間p-> p1=0;p-> p2=0;if(p->le ngth>10)p-> p1=new in t100;/for(i=10;i< p->le ngth&&i <110;i+) for(j;j<10000;j+) if(disk_blockj=0) (p-> p1)i-10=j; disk_blockj=1; j+
39、;break;if(p->le ngth>110)一級(jí)索引二級(jí)索引超過(guò)10,用一級(jí)索引為一級(jí)索引分配 100個(gè)空間/j,繼續(xù)前面的值p-> p2=new in t100100;for(i=110;i< p->le ngth;i+) for(j;j<10000;j+) if(disk_blockj=0) /超過(guò)110,得用二級(jí)索引int m=(i-110)/100; int k=(i-110)%100;p-> p2mk=j; disk_blockj=1; j+;break;/在一級(jí)索引的基礎(chǔ)上,2/j,繼續(xù)前面的值/行/列if(no w=0)p->
40、next=Fhead;/后繼結(jié)點(diǎn)指向頭,即新指點(diǎn)在前Fhead=p; /新結(jié)點(diǎn)在頭else/根目錄下的文件p->n ext=no w->File_head;no w->File_head=p;21/用戶總空間大小增加/子目錄下空間大小增加while(D!=0) int Cuse: new_dir()/建立新目錄len gth+=p->le ngth;if(no w!=0)no w->le ngth+=p->le ngth;D=now->above;/ 上一級(jí)目錄/上級(jí)目錄(根目錄已實(shí)現(xiàn))空間增加D->le ngth+=p->le ngth;
41、D=D->above; / 逐級(jí)向上27DIR *p,*h; cout<<"請(qǐng)輸入新目錄的名字:"<<endl;p=new DIR;cin>>p->n ame;p->Dir_head=0;p->le ngth=0;p-> File_head=0;if(no w=0)/目錄名目錄下的目錄鏈為空目錄下的文件為空 當(dāng)前為主目錄h=Dhead; /第一次時(shí),h=0;指向目錄鏈elseh=no w->Dir_head;/ 當(dāng)前的目錄鏈 while(h!=0) /此目錄下存在其它子目錄 if(!strcm p(h-
42、>n ame ,p->n ame)cout<<"此目錄已存在!"<<endl;return 0;h=h->n ext;if(no w=0)p->above=O; p->n ext=Dhead; Dhead=p;/當(dāng)前為主目錄/主目錄里目錄的上一結(jié)點(diǎn)為0/把原目錄接入新目錄后面( Dhead初始為0)/Dhead始終指向最新目錄結(jié)點(diǎn) else/當(dāng)前目錄為新目錄的上一結(jié)點(diǎn)/反序插入新目錄p->above=now;p->n ext=no w->Dir_head;now->Dir_head=p;/ 更新目
43、錄鏈cout<<"目錄創(chuàng)建成功"<<endl;return 1;int Cuse:goback()/向上返回if(no w=0)cout<<"已是主目錄,不能向上!"<<endl;return 0;now=no w->above;/上一結(jié)點(diǎn)return 1;int Cuse:o pen _dir()/打開(kāi)目錄char n ame10;DIR *p;if(now=0)/當(dāng)前主目錄p=Dhead;elsep=now->Dir_head;/p 指向目錄鏈cout<<"請(qǐng)輸入你要打
44、開(kāi)的目錄名:”<<endl;cin>>n ame;/int flag=0;while( p!=0)if(strcm p(p->n ame ,n ame)=O)now=p; /找至U目錄,now標(biāo)記return 1;p=p->n ext;cout<<"當(dāng)前沒(méi)此目錄"<<endl;刪除文件的前面工作return 0;int Cuse:first_dele_file() /char temp 10,a5;cout<<"你要?jiǎng)h除的文件名:"<<endl;cin> >t
45、e mp;UFD *f=Fhead; /數(shù)據(jù)文件頭指針UFD *above=0;if(no w!=0)f=now->File_head;/當(dāng)前目錄下的數(shù)據(jù)文件while(f!=0)if(!strc mp(f->n ame,tem p)break; /找到,跳出above=f; /標(biāo)記第一個(gè)文件f=f->n ext;if(f=0)cout<<"此文件不存在"<<endl;return 0;cout<<"確定刪除"<<f->name<<"文件嗎?按 0確定,其他鍵取
46、消"<<endl;cin> >a;if(a0!='0')cout<<"已取消刪除文件。"<<endl;return 0;disk_empty+=f->length;/回收此數(shù)據(jù)文件的空間大小if(now=0)/ 根目錄if(f=Fhead)Fhead=Fhead->n ext;elseabove->n ext=f- >n ext; elseDIR *d=now;while(d!=0)d->le ngth=f->le ngth;d=d->above;if(f=n
47、o w->File_head)no w->File_head=no w->File_head->n ext;elseabove->n ext=f- >n ext;len gth-=f->le ngth; this->dele_file(f);cout<<"刪除成功"<<endl; return 1;int Cuse:dele_file(UFD *f) /具體實(shí)現(xiàn)刪除文件int i=0,m;for(i=0;i<10&&i<f->le ngth;i+)m=f->ai;
48、disk_blockm=0;if(f-> p1!=0)for(i=10;i<110&&i <f->le ngth;i+)m=f-> p1i-10; disk_blockm=0;delete(f-> p1);if(f-> p2!=0)for(i=110;i<f->le ngth;i+)m=(f-> p2)(i-110)/100(i-110)%100; disk_blockm=0;delete(f-> p2);/回收一級(jí)索引/回收二級(jí)索引/回收文件具體空間,重置空閑delete f;f=0;/要?jiǎng)h除的文件為空了ret
49、urn 1;int Cuse:first_dele_dir()/刪除目錄的前奏char n10;char c;DIR *p ,*above=0;p=Dhead; /指向根目錄下的目錄鏈if(no w!=0)p=now->Dir_head;/指向當(dāng)前目錄下的目錄鏈cout<<"要?jiǎng)h除的目錄名:"<<endl;cin>>n;while (p !=0)if(!strc mp(p-> name, n)break; /找到要?jiǎng)h除的目錄,跳出above=p; /保存前一結(jié)點(diǎn)p=p->n ext;if(p=0)cout<<
50、"沒(méi)有這個(gè)目錄!"<<endl;return 0;cout<<"確定刪除當(dāng)前目錄及此目標(biāo)上的所有信息嗎?按0確定,其他鍵取消"<<e ndl;cin> >c; if(c!='0') return 0;disk_empty+=p->length;/ 回收磁盤(pán)空間if(no w=0)if(p=Dhead)/如果是根目錄下頭結(jié)點(diǎn),直接移動(dòng)Dhead=Dhead->n ext;elseDheadabove-> next=p-> next;/中間抽掉目標(biāo)else29if(p=n
51、o w->Dir_head)no w->Dir_head=no w->Dir_head->n ext; elseabove->n ext=p->n ext; above=now; / 當(dāng)前目錄while(above!=0)above->length-=p->length;/用above標(biāo)記當(dāng)前目錄,進(jìn)行大小更新above=above->above; / 向上一級(jí)/根目錄大小更新len gth-=p->le ngth;this->dele_dir( p);p=0;"<<e ndl;cout<<&q
52、uot;刪除成功!return 1;int Cuse:dele_dir(DIR *p)/具體實(shí)現(xiàn)刪除目錄的工作31int flag=O;DIR *d=p->Dir_head;UFD *f=p->File_head; if(f!=0)/當(dāng)前目錄下的目錄鏈表/當(dāng)前目錄下的文件鏈while( p-> File_head->n ext!=0)/刪除目錄里的文件f=p-> File_head;while(f- >n ext->n ext!=0) f=f->n ext;this->dele_file(f- >n ext); f->n ext
53、=0;if(p-> File_head->n ext=0)this->dele_file( p->File_head);/刪除頭文件p-> File_head=0; if(d!=0)/刪除目錄下的目錄while( p->Dir_head->n ext!=0) d=p->Dir_head;while(d->n ext- >n ext!=0)d=d->n ext;this->dele_dir(d->n ext);d->n ext=0;if(p->Dir_head->n ext=0)this->dele_dir( p->Dir_head);/ p->Dir_head=0;delete p;p=0;return 1;刪除目錄鏈頭結(jié)點(diǎn)/釋放p占用的內(nèi)存置0顯示當(dāng)前目錄int Cuse:dis_ no w() /DIR *d=Dhead;UFD *f=Fhead;if(no w!=0)d=now->Dir_head;/當(dāng)前目錄下
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度綜合金融服務(wù)合同
- 2024年度員工福利費(fèi)用共享協(xié)議
- 關(guān)于2022學(xué)生頂崗實(shí)習(xí)心得范文大全
- 傳統(tǒng)節(jié)日演講稿范文
- 2024年商場(chǎng)美食廣場(chǎng)招商合同
- 2024年度坂田二期公交車消防設(shè)備升級(jí)及安裝合同
- 2024年工程項(xiàng)目合作框架協(xié)議
- 2024年度玻璃購(gòu)銷協(xié)議
- 語(yǔ)法副詞課件教學(xué)課件
- 2024年度網(wǎng)絡(luò)文化傳播合同
- 《大學(xué)生軍事理論教程》第四章
- 光伏發(fā)電項(xiàng)目達(dá)標(biāo)投產(chǎn)實(shí)施細(xì)則之歐陽(yáng)科創(chuàng)編
- 焊接符號(hào)說(shuō)明
- 第屆世界旅游小姐大賽中國(guó)云南總決賽招商贊助方案
- 愛(ài)立信網(wǎng)管BO操作流程
- 大學(xué)生計(jì)算與信息化素養(yǎng)-北京林業(yè)大學(xué)中國(guó)大學(xué)mooc課后章節(jié)答案期末考試題庫(kù)2023年
- 第四代篦冷機(jī)液壓系統(tǒng)的故障與維護(hù)獲獎(jiǎng)科研報(bào)告
- 人大代表為人民
- 文明之痕:流行病與公共衛(wèi)生知到章節(jié)答案智慧樹(shù)2023年四川大學(xué)
- 鋼結(jié)構(gòu)設(shè)計(jì)原理全套PPT完整教學(xué)課件
- 《基于杜邦分析法周大福珠寶企業(yè)盈利能力分析報(bào)告(6400字)》
評(píng)論
0/150
提交評(píng)論