操作系统课程设计说明书样板_第1页
操作系统课程设计说明书样板_第2页
操作系统课程设计说明书样板_第3页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

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

文档简介

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

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

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

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

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;kind='1'为文

6、件夹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; /指针,打开的是文件夹记录文件夹的地址,是文件记录文件的父节点地 opened;int OPFO=0;

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

8、id 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 ishaveopen(Ff *bedel);void filecpy(Ff

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

10、作界面。创建文件夹或文件函数流程图(creat():夹,kind二2创建文件。文件或文件夹名称是由用户输入。文件或文件夹的父节点由 folderopenedOPFO-1.node来传递。如果当前目录下由同名文件或同名文件夹则创建文件或创建文件夹不成功。当前目录是空目录则创建的文件或文件夹是当前目录的首个子节点。Pare nt指针指向当前目录,当前目录的child指针指向文件或文件夹。当前目录不为空,则把文件或文件夹连接到当前目录下最后的子节点后面, 作为最后的兄弟节点。删除文件或文件夹函数delet()的流程图:同样删除文件或文件夹的类型参数由用户选择操作时传递。Kin d=1删除文件夹,ki

11、nd = 2删除文件。名称也由用户输入。文件在打开列表或文件夹中有打开的文件,文件或文件夹不能删除,目录下没有该文件或文件夹删除失败,删除失败时返回相应的信息。如果目录下有该文件或文件夹,而且文件没打开,或文件夹中没有打开的文件,则删除该释放该节点或该子树。返回删除成功信息。文件打开,只能但开当前目录下的文件,首先查找文件是否在打开文件列表 中,在则返回文件已经在打开文件列表中的信息,不是,则查看当前目录有没有该文件,有则打开,同时把文件名及其父节点地址写到文件队列中,置文件打开标志为1。返回打开成功信息。文件被打开后,返回上层目录或到别的目录下,文件不会从打开文件列表中 删除。除非在文件所在

12、的目录下执行关闭文件操作关闭此文件文件才从打开文件 列表中删除。其流程图如下:扎T阡跡用1 rm;1七 -阡龄JWJ.支件夭jhy到和 玮臥列文件删除函数说明及其流程图:文件删除,只能对当前的目录下的文件进行操作。 文件不在打开队列中,关 闭失败,返回提示信息。在打开列表中则关闭文件,置文件打开标志为0。流程图如下:/关闭成功X结束 )養文件夹打开和关闭函数说明:文件夹打开,只能打开当前目录下的文件夹打开后, 文件夹名称及其节点地址写到文件夹堆栈中(如果打开的是同一个目录,不用写打开文件夹堆栈),同 时列出文件夹目录下的内容。关闭文件夹(返回上级目录)则把当前目录从打开 文件夹堆栈中抛出,同时

13、打开上级目录。以下是打开文件夹和关闭文件夹函数源程序:打开文件夹: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->b

14、rother)printf(" 文件夹不存在! 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,beope

15、n->name); OPFO+;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&

16、#39;)printf("( 文本文件 %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; prin

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

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

19、回1,否则返回 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)ishaveo

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

21、名的文件则把文件连到目录下的最后的子节点后。以下是粘贴文件的源程序:/ 粘贴文件 /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(selec

22、t->kind='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->

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

24、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->pare nt=cover->pare nt; select->brother=fcp; free(cove

25、r);printf("覆盖成功!n");fcp=n ull;return;elsereturn; select=select->brother;select->brother=fcp; /目录下没有同名文件fcp=n ull;return;三、程序运行效果初始界面:1VJ毗下有以下用户users userl user2 user3 usei'4:请选择操作二选择1进入界面:n "F: 0£课程设计DebukOS程设辻.ene1- 词丰因丘2- 退出索统EX下有以下用户user© userl user2 userf user4

26、蠶肆甲鬲入数字艸选择0到4中的一个用户亠选择用户后进入的界面:tIOH户熾亂入数字旷勾选择p到4 口药一个用户:i趨件”关团文件片-文社澳取 建新召件夹件R8丈赏系除下棒删乳册退-d t R Q!»-粘贴丈f牛用户1下有文件filel建立文件成功和失败图示:n黑右聽驚称:7 玮"1;记黍型文件lk>才显示当前路径c r- £- p-件件段文件文薯文ffll贴芸史创帖n-«'M文任名型限文 件養型 新文文耍文文功记探 入入入哭入入密拦 费黑建Le选 普晴请逾P诗请创fi请ih>files<12:型文佇 玄升)y去匸佇群杓打立件J记

27、用卞二件可饯 1 -可吗 2 -可侠可写汨-可读1-可2可读可写瑜入权限错误t -可诔丄一可号思可诱可写龙建立同名文件时,创建出错不同名文件创建成功删除文件成功及失败图示:1、删除文件filel,filel没打开。删除成功:File収记录型交叶2ah>关文皐-灵夭 件 音级5苑 d-=q-录目fr卡交建容贝n-h-k-需翻节雌蟻 f ileZ< 文件欝k 瞬择目录只剩下file2。2、删除ff文件,目录下没有此文件,删除失败:钢件厂息示当前路径件件取F评W車关丈- - I榦翕file2<« 3 ft件 2 件文件 的塩 徑ft武 划戋记_< 1 1収仃己灵型弋

28、件肿灯 请选掙操作3、文件file2打开后删除,删除失败:寒:!<:簽:?:总-F:,.«:簽.釁总:II-塗蠢:|錢:孩录MK a Z 文上文 - 雁到仄卄 创回拷 “ 一 _L -;k “MM 薫皿 件目爰 文娄系“ 除一、陵H" rt-t 叶二M件 “ 件职命NM 囁更“贴“ 关文毘MM 一一丄; 吧1*F p1<MM*7r作操"显示当前路径M M M< M M带耗騙増先关闭文件Ffile2<1型 乂一件 23k>创建文件夹成功和失败图示:1、创建文件夹new,目录中没有new文件夹,创建成功:谓选择操聲n-rj7 件°

29、;写玄件E-显示当前躊径P:fc幸件夹Sl±8录4融支件加风文件夬72、在创建文件夹new,目录中有文件夹new,创建失败:i 件弓 文级文系 s'除H 一 =L - d tniq"-创建文件竜契件 声如路径慟驚夹件目基ITS除下番录專件文上文創回H-一 一FiW駅记录型文件23k) new<X件夹)删除文件夹成功及其失败图示:1、首先建立多一个文件夹,folder在folder里创建文件new并打开文件new。 此时提示删除失败:归“彰记录型丈件23k> <1山文件夹、£olde><jt件夹、-T:£Dlder井的

30、文件,诗先夕 g丈件 23k? neif2、关闭文件new后,删除成功:伍“"记录型文件23k> 阳収文件夹 谊选择換作Fold»r<文件夹叶扌丁开夫件"关利文件前路桎 创盂舖殳件夬P粘貼文件d调躲方 c I'O4退出录fr pn-由薄文(牛 b回列上奴鬥录E拷頁文件m输入文件去名QX啓足录型丈件23h> *中点文件夬祇以记書型文件23k> 请选叶打开文件尸关同文件文件旷刨建文件旷写文护叶文库读車“期下级日專b-回到丄级日录旷显示也前踣径 f-wi新丈件夹k-拷贝文件旷帖贴丈件1-退占系址验入垂芒闭的文件沁2此时用户下少了文件夹fo

31、lder。文件拷贝及其粘贴:1、首先我们在new文件夹下创建一个hello文件,并拷贝hello文件拷贝成功:HIM抚程设计Ucbu以”抚程设计.件1- el备 h - - 31 -6-2 3 称 <e2 苛型澈閔件文 謫交龙:功霽 人入入入戍3<库 彌埔输驹建11丸1叫和行荻卫-远录型文畔汨 可写玄-可i熏可写堆夹件3 启廷贴“ 关文創牯KK c-lr-f-p-j 件前 文書 开X小 埜显二MX iiJJ/rtM 件目僅KN 文级3系MM 莘蚩三 退MH栄 * 目* A£KM 建刻口 2 nbk-2、在回到上层目录useerl把文件粘贴在此目录下,粘贴成功:FilEZf

32、记艮:型文件22)0n总(X文件夹)请选澤操祜叶文住谏里创建新史件夹 p-帖贴文卜1件目赛文旻系除下嗨录目文上文逮到贝创回持n-b-DFile履记录型文件23k>咤<文件夹请选萍探作hello<文本文件23k>此时userl下多了文件hello。写读文件成功及失败图示:1、读文件file2 , file2没打开,读失败:才显示当前賂径滨漲|plfel件夹删除文件 t-¥f-B 計退羸入丧任名沁倔n-创建文件_ 爛加2、打开文件file2,然后读取,读取成功:XX - -K-习 5 KK目 一 -Bff 一 "创果=b-k-一I MM件日算 KX立嬰系 "除下§ g

温馨提示

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

评论

0/150

提交评论