操作系統(tǒng)專業(yè)課程設計說明指導書樣板樣本_第1頁
操作系統(tǒng)專業(yè)課程設計說明指導書樣板樣本_第2頁
操作系統(tǒng)專業(yè)課程設計說明指導書樣板樣本_第3頁
操作系統(tǒng)專業(yè)課程設計說明指導書樣板樣本_第4頁
操作系統(tǒng)專業(yè)課程設計說明指導書樣板樣本_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

操作系統(tǒng)專業(yè)課程設計說明指導書樣板課程設計任務書計算機科學與技術

專業(yè)

年級 班一、 設計題目文件管理系統(tǒng)設計二、 主要內容設計一個簡單的文件管理系統(tǒng)來模擬文件操作命令的執(zhí)行三、 具體要求設計和調試一個簡單的文件管理系統(tǒng)來模擬文件管理,使學生對主要文件操作命令的實質和執(zhí)行過程有比較深入的了解,掌握它們的基本實施方法。具體要求如下:⑴設計一個支持 n個用戶的文件系統(tǒng),每個用戶可擁有多個文件;⑵采用二級或二級以上的多級文件目錄管理;⑶對文件應設置存取控制保護方式,如“只能執(zhí)行” 、“允許讀”、“允許寫”等;⑷系統(tǒng)的外部特征應接近于真實系統(tǒng),可設置下述文件操作命令:建立文件、打開文件、關閉文件、刪除文件、讀文件、寫文件、復制文件、查詢目錄。⑸通過鍵盤(或鼠標)使用該文件系統(tǒng),系統(tǒng)應顯示操作命令的執(zhí)行結果。四、 進度安排2012-9-3-----2012-9-6 確定系統(tǒng)的總體設計方案:即系統(tǒng)包括哪些功能模塊,每個模塊的實現(xiàn)算法,并畫出相應的流程圖.同時編寫相應的設計文檔;2012-9-6-----2012-9-12 編寫程序代碼并調試,再將調試通過的各個子模塊進行集成調試;2012-2-12----2012-9-16 歸納文檔資料,完成課程設計說明書,參加課程設計答辯五、 完成后應上交的材料在課程設計完成后需要提交的成果和有關文檔資料包括:1、 課程設計的說明書。2、 課程設計有關源程序及可運行程序(光盤或電子郵件) 。六、 總評成績:指導教師 簽名日期 年 月 日系主任 審核日期 年 月 日一、本設計目的及基本思想本課程設計目的是實現(xiàn)樹型目錄結構文件系統(tǒng), 在實現(xiàn)過程中利用了二叉樹,其中每個節(jié)點都有父指針,子指針和兄弟指針,其中子指針指向該目錄下的第一個子節(jié)點,而該子節(jié)點的父指針則指向它的上級目錄。目錄下各子節(jié)點用兄弟指針連接起來。文件夾打開是則把文件夾名稱及其地址壓入打開文件夾棧,文件關閉則把文件夾名稱及其地址從打開文件夾棧中拋出。文件打開則把文件的名稱及其父指針寫到文件列表同時置文件打開標志為1,文件關閉則把文件從打開列表中刪除,同時置文件打開指針為0,文件讀取和寫入都要檢查文件是否在文件打開列表中,未打開文件不能讀寫,只讀文件不能寫,只寫文件不能讀。文件夾和文件創(chuàng)建,文件夾和文件的創(chuàng)建首先檢驗目錄是否為空,為空則把文件夾或文件連接到該目錄下,不為空則把檢查目錄下是否有同名文件夾或文件,有則提示創(chuàng)建不成功,沒有則把文件夾或文件連接到該目錄下的最后一個子節(jié)點,作為它的兄弟節(jié)點。文件夾和文件的刪除,文件夾下沒有打開的文件或文件沒有打開才能刪除,否則刪除失敗,刪除文件夾時利用了中序歷遍來刪除子樹。二、系統(tǒng)設計2.1系統(tǒng)基本結構系統(tǒng)基本結構如下圖:圖1系統(tǒng)基本結構圖root為根結點,root下有五個用戶,每個用戶有自己的文件夾或文件,系統(tǒng)初始化時為每個用戶創(chuàng)建一個file1文件。文件夾內容只有名稱和打開標志。文件除了名稱和打開標志,還有文件的訪問權限,文件類型以及文件長度。其中文件的訪問權限、文件類型、文件長度單獨作為一個結構體,其它和文件夾結構體相同,也同用一個結構體。打開文件列表的結構體包括文件名和文件的父節(jié)點地址,打開文件夾的棧中包括文件夾名稱及其地址2.2系統(tǒng)數(shù)據(jù)結構//普通文件的結構體structfile{chartype; //文件類型 0-文本文件 1-可執(zhí)行文件 2-記錄型文件charright; //文件的權限 0-可讀 1-可寫2-可讀可寫intf_length;//文件長度};typedefstructfileFile;//文件夾或文件的結構體structFCB{charkind; //kind='1'為文件夾kind='2'為文件charname[20];//文件夾或文件名稱boolopen;Fileif_file;structFCB*parent;structFCB*brother;structFCB*child;};typedefstructFCBFf;//root和fcp為全局變量Ff*root;//根節(jié)點Ff*fcp=null;//判斷是否有拷貝文件//打開項的結構體typedefstruct{charname[20];//名稱Ff*node; //指針,打開的是文件夾記錄文件夾的地址,是文件記錄文件的父節(jié)點地}opened;intOPFO=0; //記錄文件夾打開數(shù)目,最多20openedfolderopened[20];//記錄文件打開文件夾intOPFI=0;//記錄文件打開數(shù)目,最多20openedfileopened[20];//記錄打開文件2.3函數(shù)清單及部分函數(shù)算法流程圖//函數(shù)聲明/////////////////////////////voidinit();//初始化創(chuàng)建根節(jié)點voidinitopen();//初始化打開文件列表或打開文件夾文件列表Ff*creat(Ff*parent,charname[20],charkind);//創(chuàng)建文件或文件夾void delet(Ff *parent,char delname[20],charkind);//刪除文件文件夾void delSub(Ff *delp);//刪除子樹(配合刪除文件夾使用)voidopenfolder(Ff*parent,charname[20]);//打開文件夾voidopenfile(Ff*parent,charname[20]);//打開文件voidclosefo(); //關閉文件夾voidclosefile(charname[20]); //關閉文件voidread(Ff*parent,charname[20]); //讀文件voidwrite(charname[20]); //寫文件voidshow(); //顯示初始界面voidinitfile(); //初始化每個用戶,為每個用戶創(chuàng)建一個 file1文件intishaveopen(Ff*bedel); //判斷文件夾下是否有打開的文件或文件夾voidfilecpy(Ff*parent,charname[20]);//文件復制函數(shù)voidpastefile(Ff*parent); //文件粘貼主函數(shù)流程圖:主函數(shù)開始執(zhí)行時,先初始化。初始化包括創(chuàng)建 root根目錄,創(chuàng)建user0~user4五個用戶,為每個用戶創(chuàng)建一個 file1的文件。初始化完畢后,顯示選擇用戶和退出系統(tǒng)兩個操作,列出用戶。選擇1則進入選擇用戶界面,選擇用戶后則列出用戶目錄下的內容。同時顯示操作界面。選擇操作后,執(zhí)行相應的操作。執(zhí)行完畢回到選擇操作界面。創(chuàng)建文件夾或文件函數(shù)流程圖 (creat()):創(chuàng)建文件或文件夾首先通過主函數(shù)選擇操作來傳遞參數(shù), kind=1創(chuàng)建文件夾,kind=2創(chuàng)建文件。文件或文件夾名稱是由用戶輸入。文件或文件夾的父節(jié)點由folderopened[OPFO-1].node來傳遞。如果當前目錄下由同名文件或同名文件夾則創(chuàng)建文件或創(chuàng)建文件夾不成功。當前目錄是空目錄則創(chuàng)建的文件或文件夾是當前目錄的首個子節(jié)點。 Parent指針指向當前目錄,當前目錄的 child指針指向文件或文件夾。當前目錄不為空,則把文件或文件夾連接到當前目錄下最后的子節(jié)點后面,作為最后的兄弟節(jié)點。刪除文件或文件夾函數(shù) delet()的流程圖:同樣刪除文件或文件夾的類型參數(shù)由用戶選擇操作時傳遞。

Kind=1

刪除文件夾,kind=2刪除文件。名稱也由用戶輸入。文件在打開列表或文件夾中有打開的文件,文件或文件夾不能刪除,目錄下沒有該文件或文件夾刪除失敗,刪除失敗時返回相應的信息。如果目錄下有該文件或文件夾,而且文件沒打開,或文件夾中沒有打開的文件,則刪除該釋放該節(jié)點或該子樹。返回刪除成功信息。流程圖如下:文件打開函數(shù)及其流程圖 openfile():文件打開,只能但開當前目錄下的文件,首先查找文件是否在打開文件列表中,在則返回文件已經在打開文件列表中的信息,不是,則查看當前目錄有沒有該文件,有則打開,同時把文件名及其父節(jié)點地址寫到文件隊列中,置文件打開標志為1。返回打開成功信息。文件被打開后,返回上層目錄或到別的目錄下,文件不會從打開文件列表中刪除。除非在文件所在的目錄下執(zhí)行關閉文件操作關閉此文件文件才從打開文件列表中刪除。其流程圖如下:文件刪除函數(shù)說明及其流程圖:文件刪除,只能對當前的目錄下的文件進行操作。文件不在打開隊列中,關閉失敗,返回提示信息。在打開列表中則關閉文件,置文件打開標志為 0。流程圖如下:文件夾打開和關閉函數(shù)說明:文件夾打開,只能打開當前目錄下的文件夾打開后,文件夾名稱及其節(jié)點地址寫到文件夾堆棧中(如果打開的是同一個目錄,不用寫打開文件夾堆棧) ,同時列出文件夾目錄下的內容。關閉文件夾(返回上級目錄)則把當前目錄從打開文件夾堆棧中拋出,同時打開上級目錄。以下是打開文件夾和關閉文件夾函數(shù)源程序:打開文件夾:voidopenfolder(Ff*parent,charname[20]){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;}//whileendif(!beopen->child){printf("該文件夾是空的!\n");if(OPFO>=2){if(folderopened[OPFO-2].node==parent){if(strcmp(folderopened[OPFO-1].name,name)==0)return;}}folderopened[OPFO].node=beopen;strcpy(folderopened[OPFO].name,beopen->name);OPFO++;return;}if(beopen->child){select=beopen->child;while(select)//列出文件夾下的內容{for(inti=0;i<3&&select;i++){printf("%s",select->name);if(select->kind=='1'){printf("(文件夾)\t");}if(select->kind=='2'){if(select->=='0'){printf("( 文 本 文件%dk)\t",select->);}if(select->=='1'){printf("( 可 執(zhí) 行 文件%dk)\t",select->);}if(select->=='2'){printf("( 記 錄 型 文件%dk)\t",select->);}}select=select->brother;}printf("\n");}if(OPFO>=2){if(folderopened[OPFO-2].node==parent)//打開文件夾堆棧中已有,不寫堆棧{if(strcmp(folderopened[OPFO-1].name,name)==0)return;}}folderopened[OPFO].node=beopen; //打開文件夾不在堆棧,寫堆棧strcpy(folderopened[OPFO].name,beopen->name);OPFO++;return;}}///////////////////////////////////////////////關閉文件夾源程序:///文件夾關閉voidclosefo(){if(OPFO==2)//返回到根結點,不能再執(zhí)行返回操作{printf("這里是根節(jié)點!\n");show();OPFO--;return;}OPFO--;openfolder(folderopened[OPFO-2].node,folderopened[OPFO-1].name);folderopened[OPFO].node=null;}//////////////////////////////////////刪除子樹函數(shù)(voiddelSub())和判斷文件夾下是否有文件打開函數(shù)( intishaveopen())這兩個函數(shù)都是用來輔助刪除文件夾函數(shù)的,刪除子樹函數(shù)用后序歷遍樹的方法刪除子樹是遞歸函數(shù)。 Ishaveopen()函數(shù)利用先序歷遍樹的方法判斷文件夾下是否有打開文件,也是遞歸函數(shù)。當有打開文件是返回 1,否則返回0。刪除子樹函數(shù)源程序://刪除子樹voiddelSub(Ff*delp){if(delp->brother)delSub(delp->brother);//歷遍brother子樹if(delp->child) delSub(delp->child);//歷遍child子樹free(delp);//釋放節(jié)點}判斷文件夾下是否有打開文件函數(shù)源程序://輔助del函數(shù)中的刪除文件夾intishaveopen(Ff*bedel){if(bedel->open==true){return1;}if(bedel->brother)ishaveopen(bedel->brother);if(bedel->child)ishaveopen(bedel->child);elsereturn0;}文件復制及其粘貼函數(shù)的說明:文件復制,在當前目錄下查找要復制的文件,若查找不到,返回信息,拷貝失敗。若查找到了,則創(chuàng)建一個新節(jié)點,把要復制的文件的信息寫道新節(jié)點的相應的項里。文件粘貼,首先判斷fcp是否為空,空則表明沒有復制文件,不能執(zhí)行粘貼操作。不為空,則查找當前目錄下是否有同名文件,有則詢問用戶是否要覆蓋已存在的文件,是則把復制代替要被覆蓋的文件,并釋放被覆蓋文件的資源。否則退出。若是沒有和復制文件同名的文件則把文件連到目錄下的最后的子節(jié)點后。以下是粘貼文件的源程序:///粘貼文件//////voidpastefile(Ff*parent){Ff*select,*cover;charopt;if(!fcp){printf("沒有被拷貝的文件 ,請先拷貝文件!\n");return;}if(!parent->child)//目錄是空目錄{fcp->child=parent;parent->child=fcp;fcp=null;printf("粘貼成功!\n");return;}select=parent->child;if(select->kind=='2')//覆蓋的文件是目錄下第一個子節(jié)點{if(strcmp(select->name,fcp->name)==0){printf("該目錄下已經有此文件!是否覆蓋(y/n)?");getchar();scanf("%c",&opt);if(opt=='Y'||opt=='y'){fcp->brother=select->brother;fcp->child=select->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("該目錄下已經有此文件!是否覆蓋(y/n)?");getchar();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;}elsereturn;}}select=select->brother;}select->brother=fcp;//目錄下沒有同名文件fcp=null;return;}三、程序運行效果初始界面:選擇1進入界面:選擇用戶后進入的界面:用戶1下有文件file1建立文件成功和失敗圖示:建立同名文件時,創(chuàng)建出錯不同名文件創(chuàng)建成功。刪除文件成功及失敗圖示:1、刪除文件file1,file1沒打開。刪除成功:目錄只剩下file2。2、刪除ff文件,目錄下沒有此文件,刪除失敗:3、文件file2打開后刪除,刪除失?。簞?chuàng)建文件夾成功和失敗圖示:1、

溫馨提示

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

評論

0/150

提交評論