操作系统课程设计说明书_第1页
操作系统课程设计说明书_第2页
操作系统课程设计说明书_第3页
免费预览已结束,剩余24页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计任务书计算机科学与技术专业年级班设计题目文件管理系统设计主要内容设计一个简单的文件管理系统来模拟文件操作命令的执行三、具体要求设计和调试一个简单的文件管理系统来模拟文件管理,使学生对主要文件操 作命令的实质和执行过程有比较深入的了解, 掌握它们的基本实施方法。具体要 求如下:设计一个支持n个用户的文件系统,每个用户可拥有多个文件;采用二级或二级以上的多级文件目录管理;对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写” 等;系统的外部特征应接近于真实系统,可设置下述文件操作命令:建立文件、 打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。通过键盘(或鼠

2、标)使用该文件系统,系统应显示操作命令的执行结果。四、进度安排2012-9-32012-9-6 确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图同时编写相应的设计文档;2012-9-62012-9-12进行集成调试;编写程序代码并调试,再将调试通过的各个子模块2012-2-122012-9-16计答辩归纳文档资料, 完成课程设计说明书, 参加课程设五、完成后应上交的材料在课程设计完成后需要提交的成果和有关文档资料包括: 1 、 课程设计的说明书2、课程设计有关源程序及可运行程序(光盘或电子邮件)六、总评成绩:指导教师签名日期年_月_日系主任审核日期年 月

3、日一、本设计目的及基本思想本课程设计目的是实现树型目录结构文件系统,在实现过程中利用了二 叉树,其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的 第一个子节点,而该子节点的父指针则指向它的上级目录。目录下各子节点 用兄弟指针连接起来。文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。文件夹和文件创建,

4、文件夹和文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下, 不为空则把检查目录下是否有同名文件 夹或文件,有则提示创建不成功,没有则把文件夹或文件连接到该目录下的 最后一个子节点,作为它的兄弟节点。文件夹和文件的删除,文件夹下没有打开的文件或文件没有打开才能删 除,否则删除失败,删除文件夹时利用了中序历遍来删除子树。二、系统设计2 . 1系统基本结构系统基本结构如下图:图1系统基本结构图root 为根结点, root 下有五个用户,每个用户有自己的文件夹或文件,系统初始化时为每个用户创建一个 file1 文件。文件夹内容只有名称和打开标 志。文件除了名称和打开标志,还有文件的

5、访问权限,文件类型以及文件长 度。其中文件的访问权限、文件类型、文件长度单独作为一个结构体,其它 和文件夹结构体相同,也同用一个结构体。打开文件列表的结构体包括文件名和文件的父节点地址, 打开文件夹的栈中 包括文件夹名称及其地址2 2 系统数据结构/ 普通文件的结构体struct filechar type; / 文件类型 0- 文本文件 1-可执行文件 2- 记录型文件 char right; / 文件的权限 0可读 1 可写2 可读可写int f_length; / 文件长度;typedef struct file File;/ 文件夹或文件的结构体struct FCB char kind

6、; /kind='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;/ 根节点Ff *fcp=null;/ 判断是否有拷贝文件/ 打开项的结构体typedef structchar name20;/ 名称Ff *node; / 指针,打开的是文件夹记录文件夹的地址,是文件记录

7、文件的父节点 地opened;int OPFO=0; / 记录文件夹打开数目,最多 20 opened folderopened20;/ 记录文件打开文件夹int OPFI=0; / 记录文件打开数目,最多 20 opened fileopened20;/ 记录打开文件2 3 函数清单及部分函数算法流程图/ 函数声明 /void init();/ 初始化创建根节点void initopen();/ 初始化打开文件列表或打开文件夹文件列表Ff* creat(Ff *parent,char name20,char kind);/创建文件或文件夹void delet(Ff *parent,char

8、delname20,char kind);/删除文件文件夹void delSub(Ff *delp); / 删除子树(配合删除文件夹使用)void openfolder(Ff *parent, char name20);/ 打开文件夹void openfile(Ff *parent, char name20);/ void closefo();void closefile(char name20);void read(Ff*parent,char name20);void write(char name20);void show();void initfile();件int ishaveope

9、n(Ff *bedel);void filecpy(Ff *parent,char name20);/ void pastefile(Ff *parent);打开文件/ 关闭文件夹/ 关闭文件/ 读文件/ 写文件/ 显示初始界面/ 初始化每个用户,为每个用户创建一个 file1 文/ 判断文件夹下是否有打开的文件或文件夹 文件复制函数/ 文件粘贴 主函数流程图:主函数开始执行时,先初始化。初始化包括创建root根目录,创建user0user4 五个用户,为每个用户创建一个 filel的文件。初始化完毕后,显示选择用户和退出系统两个操作,列出用户。选择1则进入选择用户界面,选择用户后则列出用户目

10、录下的内容。同时显示操作界面。 选择操作后,执行相应的操作。执行完毕回到选择操作界面。创建文件夹或文件函数流程图(creat():创建文件夹kind不用骗入k为kind创建文 件klnd=2创建 文件 gkind= 1不甬输入创建文件 返回创建失败信息返回创建失败信息把节点连援到该日录下的最后一亍于节点之后创建成功创建文件或文件夹首先通过主函数选择操作来传递参数,kind = 1创建文件夹,kind二2创建文件。文件或文件夹名称是由用户输入。文件或文件夹的父节点由 folderopenedOPFO-1.node来传递。如果当前目录下由同名文件或同名文件夹则创建文件或创建文件夹不成功。 当前目录

11、是空目录则创建的文件或文件夹是当前目录的首个子节点。Parent指针指向当前目录,当前目录的child指针指向文件或文件夹。当前目录不为空,则把文件或文件夹连接到当前目录下最后的子节点后面,作为最后的兄弟节点。删除文件或文件夹函数delet ()的流程图:同样删除文件或文件夹的类型参数由用户选择操作时传递。Kin d=1删除文 件夹,kind = 2删除文件。名称也由用户输入文件在打开列表或文件夹中有打开的文件, 文件或文件夹不能删除,目录下 没有该文件或文件夹删除失败,删除失败时返回相应的信息。如果目录下有该文件或文件夹,而且文件没打开,或文件夹中没有打开的文件,则删除该释放该节点或该子树。

12、返回删除成功信息。流程图如下:klRl nd 戈l<ind=2刪玮就件夹kind L1 IH-丄或2I 卄姑)刪f#玄件|刪味失败删除惑对|回收出点和 点 S 兄点 一弟 前兄 桌 节一 SI回甲千棚I. L;/ |. 二|岁ml除裟或I冊馬吃两1删隐知创,矗)文件打开函数及其流程图openfile():文件打开,只能但开当前目录下的文件,首先查找文件是否在打开文件列表 中,在则返回文件已经在打开文件列表中的信息,不是,则查看当前目录有没有该文件,有则打开,同时把文件名及其父节点地址写到文件队列中,置文件打开标志为1。返回打开成功信息。文件被打开后,返回上层目录或到别的目录下,文件不会从

13、打开文件列表中删除。除非在文件所在的目录下执行关闭文件操作关闭此文件文件才从打开文件 列表中删除。其流程图如下:文件删除函数说明及其流程图:文件删除,只能对当前的目录下的文件进行操作。 文件不在打开队列中,关闭失败,返回提示信息。在打开列表中则关闭文件,置文件打开标志为0。流程图如下:文件夹打开和关闭函数说明:文件夹打开, 只能打开当前目录下的文件夹打开后, 文件夹名称及其节点地 址写到文件夹堆栈中(如果打开的是同一个目录,不用写打开文件夹堆栈) ,同 时列出文件夹目录下的内容。 关闭文件夹(返回上级目录) 则把当前目录从打开 文件夹堆栈中抛出,同时打开上级目录。以下是打开文件夹和关闭文件夹函

14、数源程序:打开文件夹: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(&qu

15、ot; 文件夹不存在! n"); return;beopen=beopen->brother;/while 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+;

16、return;if(beopen->child)select=beopen->child; while(select) / 列出文件夹下的内容for(int i=0;i<3&&select;i+) printf("%s",select->name); if(select->kind='1') printf("( 文件夹 )t"); if(select->kind='2')if(select->if_file.type='0')printf("

17、;( 文本文件 %dk)t",select->if_file.f_length); if(select->if_file.type='1') printf("( 可执行文件 %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&quo

18、t;);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;/关闭文件夹源程序:/ 文件夹关闭void closefo()if(OPFO=2) / 返回到根结点,不能再执行返回操作printf("

19、这里是根节点 !n");show();OPFO-;return;OPFO-; openfolder(folderopenedOPFO-2.node,folderopenedOPFO-1.name); folderopenedOPFO.node=null;/删除子树函数(void delSub ()和判断文件夹下是否有文件打开函数 (intishaveopen() )这两个函数都是用来辅助删除文件夹函数的, 删除子树函数用后序历遍树的方法 删除子树是递归函数。 Ishaveopen ()函数利用先序历遍树的方法判断文件夹下是否有打开文件,也是递归函数。当有打开文件是返回 1 ,否则返回

20、 0删除子树函数源程序:/ 删除子树void delSub(Ff *delp)if(delp->brother) delSub(delp->brother);/ 历遍 brother 子树 if(delp->child) delSub(delp->child);/ 历遍 child 子树 free(delp);/ 释放节点判断文件夹下是否有打开文件函数源程序:/ 辅助 del 函数中的删除文件夹int ishaveopen(Ff *bedel)if(bedel->open=true)return 1;if(bedel->brother)ishaveopen(

21、bedel->brother);if(bedel->child)ishaveopen(bedel->child);elsereturn 0;文件复制及其粘贴函数的说明:文件复制,在当前目录下查找要复制的文件,若查找不到,返回信息,拷贝失败。若查找到了,则创建一个新节点, 把要复制的文件的信息写道新节点的相应的项里。文件粘贴,首先判断 fcp 是否为空, 空则表明没有复制文件,不能执行粘贴操作不为空,则查找当前目录下是否有同名文件, 有则询问用户是否要覆盖已存在的文件,是则把复制代替要被覆盖的文件, 并释放被覆盖文件的资源。 否则退出。 若是没有和复制文件同名的文件则把文件连到

22、目录下的最后的子节点后。以下是粘贴文件的源程序:/ 粘贴文件 /void pastefile(Ff *parent)Ff *select,*cover;char opt;if(!fcp)printf(" 没有被拷贝的文件 , 请先拷贝文件 !n");return;if(!parent->child) / 目 录是 空目录fcp->child=parent;parent->child=fcp;fcp=null;printf(" 粘贴成功 !n");return;select=parent->child;if(select->k

23、ind='2') / 覆盖的文件是目录下第一个子节点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;

24、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

25、) 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

26、(" 覆盖成功 !n");fcp=null;return;elsereturn;select=select->brother;select->brother=fcp; / 目录下没有同名文件fcp=null;return;三、程序运行效果初始界面:"*F: OS课程设计XDebugOS程设计-选择曲户2-退出索统KX>E M; iMatXiWMSIt SMJtXatMESMKEMatHlEMSltmOCMSltSMKXXJC 珂X下有以下用户user0 ucerl use r2 usef3 wserl请选择操作:选择1进入界面:"X下有

27、以下用户user0 userl user2 usep3 useMSI馨盲鬲入数字旷4选择0到4中的一个用户亠选择用户后进入的界面:噩導瞬書他择嘶中的请选择換毎旷显示国前路径b关团文任 叶文件读取 创產新女件夹 斤粘贴文件4圳除文件EiBi匚豔幾目录k-揭旦文件用户1下有文件filel建立文件成功和失败图示:nrm记箓型文件鹉> 请惶择操作- 创-W.N見il -A貝IK 見A NJM 具 jH,鼻.貝 Ail A, «> 展L A >H. A n. E.良-K, -A見flNA-A“-1I开哀杵匸-羌阳文件遇-册|除文杵"-创BS文件-骂丈许叶文吐谖取七-

28、至=级目茎b-Pl?i|惚目录“显示当前路径f-'W文件亲-ate文仔宾霸拥文件P-粘贴文件q-iRtdO團 見具 1A 見iK JL 具貝 見.=4. 耗 見帕 fL 見 At 鼻L 帕 貝诗输入新文件名秫:f ileZ厝輸入艾件类型仙-文本文件执行文件2记就型文件刈曆更入文仕痼限佃-可谟丄-可写富-司谨可写旳 WIlfe<0-可谏丄-可昌 可诱可写瑞入枕限错误' ®iwtfi<023可该丄可场 "可诱可写龙 勰咸功丫WgK记求刮文件lk>f记录理文件23k>|请选择爆祚建立同名文件时,创建出错不同名文件创建成功删除文件成功及失败图

29、示:1、删除文件filel,filel没打开。删除成功:麒當蠶型删绅®吨昶文件皿3显沢当前路轻夹 件取X件 关- CF FP件X级桑 陈下年 删到删迅录目建到贝n-J文攻 的型 B录作 畫我2<样 H那fll穀目录只剩下file2 。2、删除ff文件,目录下没有此文件,删除失败:H 文上文 建费 创创衬1件日第>.£>很41-:。寸I开文件<5密崑示出前腿径rff件 2 件文件 文嗖 的懸 刘密己 貫2C一 h节le H 叢fi3、文件file2打开后删除,删除失败:卄丈上丈 卄建到呱Hit 宀创叵拷卄h h k>rX二 M 件日辣MM 除不隼

30、“ 一黑別退心 T;"X兴件MMy-Mrt八文读娶“开1作3®13入开圜i打写显M M K M- M> X器般器丸黄眠件十记录型复仲23k>创建文件夹成功和失败图示:1、创建文件夹new,目录中没有new文件夹,创建成功:请选择操咋录目sfr咬上文崖到贝创回祥n-h-k-糞件目扇文级史系除下留删到删迟rSFh並示当前路径-gfl*件 一创歸芟件夫P-紡贴交件File氛记录型文件2 3k>n&X文件夹7*1* n.iU_ 亠e J, D 2、在创建文件夹new,目录中有文件夹new,创建失败:一录- 目 文上文 一M到贝 一刨回橢 二Jb-k-I 件

31、 文®m fe、矗a夹 件 件取TT祚 文轟丈 H 咬荣 c p f 5件前文胃开文一 _八打总一一二 二麟驟严Fih烈记录璽文件23k) newX件夹)删除文件夹成功及其失败图示:1、首先建立多一个文件夹,folder在folder里创建文件new并打开文件new o此时提示删除失败:录 “ 目 “ snMK 文上文W 建到贝- LIJ回窿 “ -Kfile2记羽型丈件22k n.M文件夹、foldB-*文件夹、件目结“ 丈覧臬* 除下留“ 舅删退MM 4t-E 夬WM 件 件咿诒“ 文谏零;贴MM 序文弐 :;MXM &MX 路MK* 开丈示卄 打写虽MX -一 M 0

32、V 5 M请先*1*51newC件夫72、关闭文件new后,删除成功:件 23k>neM 记, 请选泽录目钱件文上文建到贝削回拷n-b-k-1一件目女 一文欝系 一除下留。-打开文件l关因文件4删叶写文伴叶文住读里t-?lj旷显示当前路径 仓憾新女件夹 叶删 旷帖贴文件1-fi芒闭前文件m“署麟髀虹件论2文件知fo】茁皿文件夹、叶打开哀件"征示当前路桎c-WX 件文昨饮爭»粘贴文件d-州卩壬文4 e SlffgS?2退出录茨“回巫上级目录 k 拷処文件输入立牛夹名侏FoW"flle2<vg录型文件23k>*3文件夹Je1±1目 斗XX

33、文多KK 建的口 fl-hk-“件目僅文级戈系退-件杠 .XI.义“ 关交SJttKM釈<B 鋼型瞰爲 立 sffls 渤書条 硒瑜苇齧11丸 "请富呼创B1EIJ供.1文書开文示並显D-W-S-此时用户下少了文件夹folder文件拷贝及其粘贴:1、首先我们在new文件夹下创建一个hello文件,并拷贝hello文件拷贝成功: " F :谨程设计Dubu卷皿谋程设计.ese录 目建到贝削旦拷-llbk件目建文斐系除下星刑-M J-Arn-<!-夹 件 養新R 关文创粘-L c r _F D 径 件前 文畫 幵文示 晋显 -一- owe2、在回到上层目录useerl ,把文件粘贴在此目录下,粘贴成功:bFilm记累型文件23k>

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论