操作系統(tǒng)課程設(shè)計(jì)---文件管理系統(tǒng)設(shè)計(jì)_第1頁
操作系統(tǒng)課程設(shè)計(jì)---文件管理系統(tǒng)設(shè)計(jì)_第2頁
操作系統(tǒng)課程設(shè)計(jì)---文件管理系統(tǒng)設(shè)計(jì)_第3頁
操作系統(tǒng)課程設(shè)計(jì)---文件管理系統(tǒng)設(shè)計(jì)_第4頁
操作系統(tǒng)課程設(shè)計(jì)---文件管理系統(tǒng)設(shè)計(jì)_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、課程設(shè)計(jì)任務(wù)書 計(jì)算機(jī)科學(xué)與技術(shù) 專業(yè) 年級(jí) 班 一、 設(shè)計(jì)題目文件管理系統(tǒng)設(shè)計(jì)二、 主要內(nèi)容設(shè)計(jì)一個(gè)簡(jiǎn)單的文件管理系統(tǒng)來模擬文件操作命令的執(zhí)行三、 具體要求設(shè)計(jì)和調(diào)試一個(gè)簡(jiǎn)單的文件管理系統(tǒng)來模擬文件管理,使學(xué)生對(duì)主要文件操作命令的實(shí)質(zhì)和執(zhí)行過程有比較深入的了解,掌握它們的基本實(shí)施方法。具體要求如下:設(shè)計(jì)一個(gè)支持n個(gè)用戶的文件系統(tǒng),每個(gè)用戶可擁有多個(gè)文件;采用二級(jí)或二級(jí)以上的多級(jí)文件目錄管理;對(duì)文件應(yīng)設(shè)置存取控制保護(hù)方式,如“只能執(zhí)行”、“允許讀”、“允許寫”等;系統(tǒng)的外部特征應(yīng)接近于真實(shí)系統(tǒng),可設(shè)置下述文件操作命令:建立文件、打開文件、關(guān)閉文件、刪除文件、讀文件、寫文件、復(fù)制文件、查詢目錄。

2、通過鍵盤(或鼠標(biāo))使用該文件系統(tǒng),系統(tǒng)應(yīng)顯示操作命令的執(zhí)行結(jié)果。四、 進(jìn)度安排2012-9-3-2012-9-6 確定系統(tǒng)的總體設(shè)計(jì)方案:即系統(tǒng)包括哪些功能模塊,每個(gè)模塊的實(shí)現(xiàn)算法,并畫出相應(yīng)的流程圖同時(shí)編寫相應(yīng)的設(shè)計(jì)文檔;2012-9-6-2012-9-12 編寫程序代碼并調(diào)試,再將調(diào)試通過的各個(gè)子模塊進(jìn)行集成調(diào)試;2012-2-12-2012-9-16 歸納文檔資料,完成課程設(shè)計(jì)說明書,參加課程設(shè)計(jì)答辯五、 完成后應(yīng)上交的材料在課程設(shè)計(jì)完成后需要提交的成果和有關(guān)文檔資料包括:1、 課程設(shè)計(jì)的說明書。2、 課程設(shè)計(jì)有關(guān)源程序及可運(yùn)行程序(光盤或電子郵件)。六、 總評(píng)成績(jī):指導(dǎo)教師 簽名日期

3、年 月 日系 主 任 審核日期 年 月 日一、本設(shè)計(jì)目的及基本思想 本課程設(shè)計(jì)目的是實(shí)現(xiàn)樹型目錄結(jié)構(gòu)文件系統(tǒng),在實(shí)現(xiàn)過程中利用了二叉樹,其中每個(gè)節(jié)點(diǎn)都有父指針,子指針和兄弟指針,其中子指針指向該目錄下的第一個(gè)子節(jié)點(diǎn),而該子節(jié)點(diǎn)的父指針則指向它的上級(jí)目錄。目錄下各子節(jié)點(diǎn)用兄弟指針連接起來。文件夾打開是則把文件夾名稱及其地址壓入打開文件夾棧,文件關(guān)閉則把文件夾名稱及其地址從打開文件夾棧中拋出。文件打開則把文件的名稱及其父指針寫到文件列表同時(shí)置文件打開標(biāo)志為1,文件關(guān)閉則把文件從打開列表中刪除,同時(shí)置文件打開指針為0,文件讀取和寫入都要檢查文件是否在文件打開列表中,未打開文件不能讀寫,只讀文件不能寫

4、,只寫文件不能讀。文件夾和文件創(chuàng)建,文件夾和文件的創(chuàng)建首先檢驗(yàn)?zāi)夸浭欠駷榭?,為空則把文件夾或文件連接到該目錄下,不為空則把檢查目錄下是否有同名文件夾或文件,有則提示創(chuàng)建不成功,沒有則把文件夾或文件連接到該目錄下的最后一個(gè)子節(jié)點(diǎn),作為它的兄弟節(jié)點(diǎn)。文件夾和文件的刪除,文件夾下沒有打開的文件或文件沒有打開才能刪除,否則刪除失敗,刪除文件夾時(shí)利用了中序歷遍來刪除子樹。二、系統(tǒng)設(shè)計(jì)21 系統(tǒng)基本結(jié)構(gòu)系統(tǒng)基本結(jié)構(gòu)如下圖: 圖1系統(tǒng)基本結(jié)構(gòu)圖root為根結(jié)點(diǎn),root下有五個(gè)用戶,每個(gè)用戶有自己的文件夾或文件,系統(tǒng)初始化時(shí)為每個(gè)用戶創(chuàng)建一個(gè)file1文件。文件夾內(nèi)容只有名稱和打開標(biāo)志。文件除了名稱和打開標(biāo)

5、志,還有文件的訪問權(quán)限,文件類型以及文件長(zhǎng)度。其中文件的訪問權(quán)限、文件類型、文件長(zhǎng)度單獨(dú)作為一個(gè)結(jié)構(gòu)體,其它和文件夾結(jié)構(gòu)體相同,也同用一個(gè)結(jié)構(gòu)體。打開文件列表的結(jié)構(gòu)體包括文件名和文件的父節(jié)點(diǎn)地址,打開文件夾的棧中包括文件夾名稱及其地址22 系統(tǒng)數(shù)據(jù)結(jié)構(gòu) /普通文件的結(jié)構(gòu)體struct filechar type; /文件類型0-文本文件 1-可執(zhí)行文件 2-記錄型文件char right; /文件的權(quán)限0可讀 1可寫 2可讀可寫int f_length; /文件長(zhǎng)度;typedef struct file File;/文件夾或文件的結(jié)構(gòu)體struct FCB char kind; /kind=

6、1為文件夾 kind=2為文件char name20; /文件夾或文件名稱bool open;File if_file; struct FCB *parent; struct FCB *brother;struct FCB *child;typedef struct FCB Ff;/root和fcp為全局變量Ff *root;/根節(jié)點(diǎn)Ff *fcp=null;/判斷是否有拷貝文件/打開項(xiàng)的結(jié)構(gòu)體typedef structchar name20;/名稱Ff *node; /指針,打開的是文件夾記錄文件夾的地址,是文件記錄文件的父節(jié)點(diǎn)地opened;int OPFO=0; /記錄文件夾打開數(shù)目,

7、最多20opened folderopened20;/記錄文件打開文件夾int OPFI=0; /記錄文件打開數(shù)目,最多20opened fileopened20;/記錄打開文件23 函數(shù)清單及部分函數(shù)算法流程圖 /函數(shù)聲明/void init();/初始化創(chuàng)建根節(jié)點(diǎn)void initopen();/初始化打開文件列表或打開文件夾文件列表Ff* creat(Ff *parent,char name20,char kind);/創(chuàng)建文件或文件夾void delet(Ff *parent,char delname20,char kind);/刪除文件文件夾void delSub(Ff *delp)

8、; /刪除子樹(配合刪除文件夾使用)void openfolder(Ff *parent, char name20);/打開文件夾void openfile(Ff *parent, char name20);/打開文件void closefo(); /關(guān)閉文件夾void closefile(char name20); /關(guān)閉文件void read(Ff*parent,char name20); /讀文件void write(char name20); / 寫文件void show(); /顯示初始界面void initfile(); /初始化每個(gè)用戶,為每個(gè)用戶創(chuàng)建一個(gè)file1文件int i

9、shaveopen(Ff *bedel); /判斷文件夾下是否有打開的文件或文件夾void filecpy(Ff *parent,char name20);/文件復(fù)制函數(shù)void pastefile(Ff *parent); /文件粘貼主函數(shù)流程圖:主函數(shù)開始執(zhí)行時(shí),先初始化。初始化包括創(chuàng)建root根目錄,創(chuàng)建user0user4五個(gè)用戶,為每個(gè)用戶創(chuàng)建一個(gè)file1的文件。初始化完畢后,顯示選擇用戶和退出系統(tǒng)兩個(gè)操作,列出用戶。選擇1則進(jìn)入選擇用戶界面,選擇用戶后則列出用戶目錄下的內(nèi)容。同時(shí)顯示操作界面。選擇操作后,執(zhí)行相應(yīng)的操作。執(zhí)行完畢回到選擇操作界面。創(chuàng)建文件夾或文件函數(shù)流程圖(cre

10、at(): 創(chuàng)建文件或文件夾首先通過主函數(shù)選擇操作來傳遞參數(shù),kind1創(chuàng)建文件夾,kind2創(chuàng)建文件。文件或文件夾名稱是由用戶輸入。文件或文件夾的父節(jié)點(diǎn)由folderopenedOPFO-1.node來傳遞。如果當(dāng)前目錄下由同名文件或同名文件夾則創(chuàng)建文件或創(chuàng)建文件夾不成功。當(dāng)前目錄是空目錄則創(chuàng)建的文件或文件夾是當(dāng)前目錄的首個(gè)子節(jié)點(diǎn)。Parent指針指向當(dāng)前目錄,當(dāng)前目錄的child指針指向文件或文件夾。當(dāng)前目錄不為空,則把文件或文件夾連接到當(dāng)前目錄下最后的子節(jié)點(diǎn)后面,作為最后的兄弟節(jié)點(diǎn)。刪除文件或文件夾函數(shù)delet()的流程圖:同樣刪除文件或文件夾的類型參數(shù)由用戶選擇操作時(shí)傳遞。Kind=

11、1刪除文件夾,kind2刪除文件。名稱也由用戶輸入。文件在打開列表或文件夾中有打開的文件,文件或文件夾不能刪除,目錄下沒有該文件或文件夾刪除失敗,刪除失敗時(shí)返回相應(yīng)的信息。如果目錄下有該文件或文件夾,而且文件沒打開,或文件夾中沒有打開的文件,則刪除該釋放該節(jié)點(diǎn)或該子樹。返回刪除成功信息。流程圖如下:文件打開函數(shù)及其流程圖openfile():文件打開,只能但開當(dāng)前目錄下的文件,首先查找文件是否在打開文件列表中,在則返回文件已經(jīng)在打開文件列表中的信息,不是,則查看當(dāng)前目錄有沒有該文件,有則打開,同時(shí)把文件名及其父節(jié)點(diǎn)地址寫到文件隊(duì)列中,置文件打開標(biāo)志為1。返回打開成功信息。文件被打開后,返回上層

12、目錄或到別的目錄下,文件不會(huì)從打開文件列表中刪除。除非在文件所在的目錄下執(zhí)行關(guān)閉文件操作關(guān)閉此文件文件才從打開文件列表中刪除。其流程圖如下: 文件刪除函數(shù)說明及其流程圖:文件刪除,只能對(duì)當(dāng)前的目錄下的文件進(jìn)行操作。文件不在打開隊(duì)列中,關(guān)閉失敗,返回提示信息。在打開列表中則關(guān)閉文件,置文件打開標(biāo)志為0。 流程圖如下: 文件夾打開和關(guān)閉函數(shù)說明:文件夾打開,只能打開當(dāng)前目錄下的文件夾打開后,文件夾名稱及其節(jié)點(diǎn)地址寫到文件夾堆棧中(如果打開的是同一個(gè)目錄,不用寫打開文件夾堆棧),同時(shí)列出文件夾目錄下的內(nèi)容。關(guān)閉文件夾(返回上級(jí)目錄)則把當(dāng)前目錄從打開文件夾堆棧中拋出,同時(shí)打開上級(jí)目錄。以下是打開文件

13、夾和關(guān)閉文件夾函數(shù)源程序:打開文件夾:void openfolder(Ff *parent, char name20)Ff *select,*beopen;if(!parent-child) /目錄為空printf(沒有此文件!);return;beopen=parent-child;while(beopen) /尋找要打開的文件夾if(beopen-kind=1)if(strcmp(beopen-name,name)=0) /文件夾被找到 break;if(!beopen-brother)printf(文件夾不存在!n);return;beopen=beopen-brother; /whil

14、e endif(!beopen-child)printf(該文件夾是空的!n);if(OPFO=2)if(folderopenedOPFO-2.node=parent)if(strcmp(folderopenedOPFO-1.name,name)=0)return;folderopenedOPFO.node=beopen;strcpy(folderopenedOPFO.name,beopen-name);OPFO+;return;if(beopen-child)select=beopen-child;while(select) /列出文件夾下的內(nèi)容for(int i=0;iname);if(s

15、elect-kind=1)printf(文件夾)t);if(select-kind=2)if(select-if_file.type=0)printf(文本文件 %dk)t,select-if_file.f_length);if(select-if_file.type=1)printf(可執(zhí)行文件 %dk)t,select-if_file.f_length);if(select-if_file.type=2)printf(記錄型文件 %dk)t,select-if_file.f_length);select=select-brother;printf(n);if(OPFO=2)if(folde

16、ropenedOPFO-2.node=parent) /打開文件夾堆棧中已有,不寫堆棧if(strcmp(folderopenedOPFO-1.name,name)=0)return;folderopenedOPFO.node=beopen; /打開文件夾不在堆棧,寫堆棧 strcpy(folderopenedOPFO.name,beopen-name);OPFO+;return;/關(guān)閉文件夾源程序: /文件夾關(guān)閉void closefo()if(OPFO=2) /返回到根結(jié)點(diǎn),不能再執(zhí)行返回操作printf(這里是根節(jié)點(diǎn)!n);show();OPFO-;return;OPFO-;openfo

17、lder(folderopenedOPFO-2.node,folderopenedOPFO-1.name);folderopenedOPFO.node=null;/ 刪除子樹函數(shù)(void delSub()和判斷文件夾下是否有文件打開函數(shù)(int ishaveopen())這兩個(gè)函數(shù)都是用來輔助刪除文件夾函數(shù)的,刪除子樹函數(shù)用后序歷遍樹的方法 刪除子樹是遞歸函數(shù)。Ishaveopen()函數(shù)利用先序歷遍樹的方法判斷文件夾下是否有打開文件,也是遞歸函數(shù)。當(dāng)有打開文件是返回1,否則返回0。刪除子樹函數(shù)源程序:/刪除子樹void delSub(Ff *delp)if(delp-brother) de

18、lSub(delp-brother);/歷遍brother子樹if(delp-child) delSub(delp-child);/歷遍child子樹free(delp);/釋放節(jié)點(diǎn)判斷文件夾下是否有打開文件函數(shù)源程序:/輔助del函數(shù)中的刪除文件夾int ishaveopen(Ff *bedel)if(bedel-open=true)return 1;if(bedel-brother)ishaveopen(bedel-brother);if(bedel-child)ishaveopen(bedel-child);elsereturn 0;文件復(fù)制及其粘貼函數(shù)的說明:文件復(fù)制,在當(dāng)前目錄下查找

19、要復(fù)制的文件,若查找不到,返回信息,拷貝失敗。若查找到了,則創(chuàng)建一個(gè)新節(jié)點(diǎn),把要復(fù)制的文件的信息寫道新節(jié)點(diǎn)的相應(yīng)的項(xiàng)里。文件粘貼,首先判斷fcp是否為空,空則表明沒有復(fù)制文件,不能執(zhí)行粘貼操作。不為空,則查找當(dāng)前目錄下是否有同名文件,有則詢問用戶是否要覆蓋已存在的文件,是則把復(fù)制代替要被覆蓋的文件,并釋放被覆蓋文件的資源。否則退出。若是沒有和復(fù)制文件同名的文件則把文件連到目錄下的最后的子節(jié)點(diǎn)后。以下是粘貼文件的源程序: /粘貼文件/void pastefile(Ff *parent)Ff *select,*cover;char opt;if(!fcp)printf(沒有被拷貝的文件,請(qǐng)先拷貝文

20、件!n);return;if(!parent-child) /目錄是空目錄fcp-child=parent;parent-child=fcp;fcp=null;printf(粘貼成功!n);return;select=parent-child; if(select-kind=2)/覆蓋的文件是目錄下第一個(gè)子節(jié)點(diǎn) if(strcmp(select-name,fcp-name)=0)printf(該目錄下已經(jīng)有此文件!是否覆蓋(y/n)?);getchar();scanf(%c,&opt);if(opt=Y|opt=y)fcp-brother=select-brother;fcp-child=se

21、lect-child;fcp-parent=select-parent;parent-child=fcp;select-brother=null;select-child=null;select-parent=null;free(select);printf(覆蓋成功!n);fcp=null;return;elsereturn;while(select-brother)/查找目錄下是否有同名文件if(select-brother-kind=2)if(strcmp(select-brother-name,fcp-name)=0)printf(該目錄下已經(jīng)有此文件!是否覆蓋(y/n)?);getc

22、har();scanf(%c,&opt);if(opt=Y|opt=y)/覆蓋同名文件cover=select-brother;fcp-brother=cover-brother;fcp-child=cover-child;fcp-parent=cover-parent;select-brother=fcp;free(cover);printf(覆蓋成功!n);fcp=null;return;else return; select=select-brother;select-brother=fcp;/目錄下沒有同名文件fcp=null;return; 三、程序運(yùn)行效果 初始界面:選擇1進(jìn)入界面:選擇用戶后進(jìn)入的界面: 用戶1下有文件file1建立文件成功和失敗圖示: 建立同名文件時(shí),創(chuàng)建出錯(cuò)不同名文件創(chuàng)建成功。刪除文件成功及失敗圖示:1、刪除文件file1,file1沒打開。刪

溫馨提示

  • 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)論