操作系统专业课程设计说明指导书样板样本_第1页
操作系统专业课程设计说明指导书样板样本_第2页
操作系统专业课程设计说明指导书样板样本_第3页
操作系统专业课程设计说明指导书样板样本_第4页
操作系统专业课程设计说明指导书样板样本_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

操作系统专业课程设计说明指导书样板课程设计任务书计算机科学与技术

专业

年级 班一、 设计题目文件管理系统设计二、 主要内容设计一个简单的文件管理系统来模拟文件操作命令的执行三、 具体要求设计和调试一个简单的文件管理系统来模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。具体要求如下:⑴设计一个支持 n个用户的文件系统,每个用户可拥有多个文件;⑵采用二级或二级以上的多级文件目录管理;⑶对文件应设置存取控制保护方式,如“只能执行” 、“允许读”、“允许写”等;⑷系统的外部特征应接近于真实系统,可设置下述文件操作命令:建立文件、打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。⑸通过键盘(或鼠标)使用该文件系统,系统应显示操作命令的执行结果。四、 进度安排2012-9-3-----2012-9-6 确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图.同时编写相应的设计文档;2012-9-6-----2012-9-12 编写程序代码并调试,再将调试通过的各个子模块进行集成调试;2012-2-12----2012-9-16 归纳文档资料,完成课程设计说明书,参加课程设计答辩五、 完成后应上交的材料在课程设计完成后需要提交的成果和有关文档资料包括:1、 课程设计的说明书。2、 课程设计有关源程序及可运行程序(光盘或电子邮件) 。六、 总评成绩:指导教师 签名日期 年 月 日系主任 审核日期 年 月 日一、本设计目的及基本思想本课程设计目的是实现树型目录结构文件系统, 在实现过程中利用了二叉树,其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。目录下各子节点用兄弟指针连接起来。文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。文件夹和文件创建,文件夹和文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下,不为空则把检查目录下是否有同名文件夹或文件,有则提示创建不成功,没有则把文件夹或文件连接到该目录下的最后一个子节点,作为它的兄弟节点。文件夹和文件的删除,文件夹下没有打开的文件或文件没有打开才能删除,否则删除失败,删除文件夹时利用了中序历遍来删除子树。二、系统设计2.1系统基本结构系统基本结构如下图:图1系统基本结构图root为根结点,root下有五个用户,每个用户有自己的文件夹或文件,系统初始化时为每个用户创建一个file1文件。文件夹内容只有名称和打开标志。文件除了名称和打开标志,还有文件的访问权限,文件类型以及文件长度。其中文件的访问权限、文件类型、文件长度单独作为一个结构体,其它和文件夹结构体相同,也同用一个结构体。打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的栈中包括文件夹名称及其地址2.2系统数据结构//普通文件的结构体structfile{chartype; //文件类型 0-文本文件 1-可执行文件 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;//根节点Ff*fcp=null;//判断是否有拷贝文件//打开项的结构体typedefstruct{charname[20];//名称Ff*node; //指针,打开的是文件夹记录文件夹的地址,是文件记录文件的父节点地}opened;intOPFO=0; //记录文件夹打开数目,最多20openedfolderopened[20];//记录文件打开文件夹intOPFI=0;//记录文件打开数目,最多20openedfileopened[20];//记录打开文件2.3函数清单及部分函数算法流程图//函数声明/////////////////////////////voidinit();//初始化创建根节点voidinitopen();//初始化打开文件列表或打开文件夹文件列表Ff*creat(Ff*parent,charname[20],charkind);//创建文件或文件夹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(); //初始化每个用户,为每个用户创建一个 file1文件intishaveopen(Ff*bedel); //判断文件夹下是否有打开的文件或文件夹voidfilecpy(Ff*parent,charname[20]);//文件复制函数voidpastefile(Ff*parent); //文件粘贴主函数流程图:主函数开始执行时,先初始化。初始化包括创建 root根目录,创建user0~user4五个用户,为每个用户创建一个 file1的文件。初始化完毕后,显示选择用户和退出系统两个操作,列出用户。选择1则进入选择用户界面,选择用户后则列出用户目录下的内容。同时显示操作界面。选择操作后,执行相应的操作。执行完毕回到选择操作界面。创建文件夹或文件函数流程图 (creat()):创建文件或文件夹首先通过主函数选择操作来传递参数, kind=1创建文件夹,kind=2创建文件。文件或文件夹名称是由用户输入。文件或文件夹的父节点由folderopened[OPFO-1].node来传递。如果当前目录下由同名文件或同名文件夹则创建文件或创建文件夹不成功。当前目录是空目录则创建的文件或文件夹是当前目录的首个子节点。 Parent指针指向当前目录,当前目录的 child指针指向文件或文件夹。当前目录不为空,则把文件或文件夹连接到当前目录下最后的子节点后面,作为最后的兄弟节点。删除文件或文件夹函数 delet()的流程图:同样删除文件或文件夹的类型参数由用户选择操作时传递。

Kind=1

删除文件夹,kind=2删除文件。名称也由用户输入。文件在打开列表或文件夹中有打开的文件,文件或文件夹不能删除,目录下没有该文件或文件夹删除失败,删除失败时返回相应的信息。如果目录下有该文件或文件夹,而且文件没打开,或文件夹中没有打开的文件,则删除该释放该节点或该子树。返回删除成功信息。流程图如下:文件打开函数及其流程图 openfile():文件打开,只能但开当前目录下的文件,首先查找文件是否在打开文件列表中,在则返回文件已经在打开文件列表中的信息,不是,则查看当前目录有没有该文件,有则打开,同时把文件名及其父节点地址写到文件队列中,置文件打开标志为1。返回打开成功信息。文件被打开后,返回上层目录或到别的目录下,文件不会从打开文件列表中删除。除非在文件所在的目录下执行关闭文件操作关闭此文件文件才从打开文件列表中删除。其流程图如下:文件删除函数说明及其流程图:文件删除,只能对当前的目录下的文件进行操作。文件不在打开队列中,关闭失败,返回提示信息。在打开列表中则关闭文件,置文件打开标志为 0。流程图如下:文件夹打开和关闭函数说明:文件夹打开,只能打开当前目录下的文件夹打开后,文件夹名称及其节点地址写到文件夹堆栈中(如果打开的是同一个目录,不用写打开文件夹堆栈) ,同时列出文件夹目录下的内容。关闭文件夹(返回上级目录)则把当前目录从打开文件夹堆栈中抛出,同时打开上级目录。以下是打开文件夹和关闭文件夹函数源程序:打开文件夹: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("( 可 执 行 文件%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)//返回到根结点,不能再执行返回操作{printf("这里是根节点!\n");show();OPFO--;return;}OPFO--;openfolder(folderopened[OPFO-2].node,folderopened[OPFO-1].name);folderopened[OPFO].node=null;}//////////////////////////////////////删除子树函数(voiddelSub())和判断文件夹下是否有文件打开函数( intishaveopen())这两个函数都是用来辅助删除文件夹函数的,删除子树函数用后序历遍树的方法删除子树是递归函数。 Ishaveopen()函数利用先序历遍树的方法判断文件夹下是否有打开文件,也是递归函数。当有打开文件是返回 1,否则返回0。删除子树函数源程序://删除子树voiddelSub(Ff*delp){if(delp->brother)delSub(delp->brother);//历遍brother子树if(delp->child) delSub(delp->child);//历遍child子树free(delp);//释放节点}判断文件夹下是否有打开文件函数源程序://辅助del函数中的删除文件夹intishaveopen(Ff*bedel){if(bedel->open==true){return1;}if(bedel->brother)ishaveopen(bedel->brother);if(bedel->child)ishaveopen(bedel->child);elsereturn0;}文件复制及其粘贴函数的说明:文件复制,在当前目录下查找要复制的文件,若查找不到,返回信息,拷贝失败。若查找到了,则创建一个新节点,把要复制的文件的信息写道新节点的相应的项里。文件粘贴,首先判断fcp是否为空,空则表明没有复制文件,不能执行粘贴操作。不为空,则查找当前目录下是否有同名文件,有则询问用户是否要覆盖已存在的文件,是则把复制代替要被覆盖的文件,并释放被覆盖文件的资源。否则退出。若是没有和复制文件同名的文件则把文件连到目录下的最后的子节点后。以下是粘贴文件的源程序:///粘贴文件//////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')//覆盖的文件是目录下第一个子节点{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建立文件成功和失败图示:建立同名文件时,创建出错不同名文件创建成功。删除文件成功及失败图示:1、删除文件file1,file1没打开。删除成功:目录只剩下file2。2、删除ff文件,目录下没有此文件,删除失败:3、文件file2打开后删除,删除失败:创建文件夹成功和失败图示:1、

温馨提示

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

评论

0/150

提交评论