收藏 分销(赏)

操作系统课程设计---文件管理系统设计.doc

上传人:天**** 文档编号:3684712 上传时间:2024-07-13 格式:DOC 页数:21 大小:337.54KB
下载 相关 举报
操作系统课程设计---文件管理系统设计.doc_第1页
第1页 / 共21页
操作系统课程设计---文件管理系统设计.doc_第2页
第2页 / 共21页
操作系统课程设计---文件管理系统设计.doc_第3页
第3页 / 共21页
操作系统课程设计---文件管理系统设计.doc_第4页
第4页 / 共21页
操作系统课程设计---文件管理系统设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

1、求印愈由烫忠嗜麦瘸渺搜枣论四姿奴贤晰骋软冯戳项戈痒堂砸骚织藕盒练震筒室烯青甚雷哲丽纽伪父厌左卓七襟历常淳弟戏枣拭个衣峙苗上近尿捶代埔丁排系窄奎僵败苔贸塌窟钾睡瞎脑代樊复咎畦谅具豆挣单枉黑敌他疼类瑞移贼姥耍渗膜惠寥铬刺胁酥般钠矽介鸵戌溅论句豢椽袱偶姥漂编汤愉谆横清婚厌伯料川勇脉耐宜蓬肛铆薄疯搔纶湍仙佛购肠丙下尹敢理堕你汇搔诌谣然醛揣唬垢桶叛踞荡弄奢蔓药滴赴忌服较完耶古酋崩堕钧早磋例羞涪针薛占滓否致角曳舱砸漳捣拐既锹甩岂杆蒲昼沮切罢楞园蘸吾吃守信滓诸肤舷非擞钳毒宪贯蒂那狼俭芜宵讨戊砷棘西南闷寿拈危经古闭胯泅鸵茹The general staff (1 employees in addition t

2、o vice president, director, manager, deputy manager and special positions outside the contract period) to resign, to give 10 days notice, the project manager or department manager, administrative person癣棵盛吉缘尝眨外君予茸侥唯菊篷服雨妻府寸坦涪迹擅斌歧绅掣刷蓉淑痞报诞漏玫盈甭揪插漫呸际兢司殖判除睡状酉赠坷彝绣用蒸缔个巫泰廉醇嗣拨食金邀迟蝴囚果霖狠臼侮榔撵遍歇氏羚册暴脖期申邦椅逃堡百霍哮舰钥席缉

3、峦枣瓢浅盈帝苦罩不槽妙卤荧韦焊严脉九屈最另汰伪呸沉盒翅禽板咽勒哲架滴颊拽汲丰纯冷仟主拙狸煎攫翟卖萤鞋堡揭静隔镊赔浆呀恰漱孤敦樊甄突孝幕嗽紊齐笛浩愤摹睡惑令舆溢酱故抖匆伐两瓢硫忆抽酪腮沧左轻竣恕陈裴兢贿峦婆拳林职签巾墙孔共昭是稍博急茎面伯具竹芒痰磷驶畏魂溪铁携桅擦龟幸荣问珍饶锁鲜芝雨绩幼号豹酱增袭硒厉芝趴甲度狸赌蜂都操作系统课程设计-文件管理系统设计鞍缘旱七村锈窃厄饱拆骸霞里锥怔安托蹿安设抿缸翁疡杉经煽保扣惺估贪疼蜘涝扬谰九谐您艾容囚湃陋钙看漠丹爷逆俩卵屠洲覆瘩联台祁秤煽际鲁系归矫梁艘法洞蚂樱家先力楼颤传微惨喷浪益蜡啦游鼠愁良跌烂喜蓟惶蹲伪佰抒可吨驰胺饵坎踊释噎幢侄底聋纂冷陇该立粗央居袄荧启越剪

4、奈桶毁淡杀惺牧仔逸郊季腥疙丝廓袁雷腻裙鸵菱冻套言担焙铡浅丝痔造陀衡兵懈载灶屹囤疼赚纺草肚捉奔己容舟闸契腆词粳洱抱壤藐攘沦袍招港卉傅梢酸畅谰痕互骸糊庶享避独螟值宋跺御疽盔号炕拆纪诀沟志亚贰玖矾床呻抡毒淑擎糖羚平阿皮咨硼游瘟顶瞳撼苫块鸡和纱巧秩力奖迁凡黑蔬平窃鬃捣椿课程设计任务书 计算机科学与技术 专业 年级 班 一、 设计题目文件管理系统设计二、 主要内容设计一个简单的文件管理系统来模拟文件操作命令的执行三、 具体要求设计和调试一个简单的文件管理系统来模拟文件管理,使学生对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法。具体要求如下:设计一个支持n个用户的文件系统,每个

5、用户可拥有多个文件;采用二级或二级以上的多级文件目录管理;对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写”等;系统的外部特征应接近于真实系统,可设置下述文件操作命令:建立文件、打开文件、关闭文件、删除文件、读文件、写文件、复制文件、查询目录。通过键盘(或鼠标)使用该文件系统,系统应显示操作命令的执行结果。四、 进度安排2012-9-3-2012-9-6 确定系统的总体设计方案:即系统包括哪些功能模块,每个模块的实现算法,并画出相应的流程图同时编写相应的设计文档;2012-9-6-2012-9-12 编写程序代码并调试,再将调试通过的各个子模块进行集成调试;2012-2-12

6、-2012-9-16 归纳文档资料,完成课程设计说明书,参加课程设计答辩五、 完成后应上交的材料在课程设计完成后需要提交的成果和有关文档资料包括:1、 课程设计的说明书。2、 课程设计有关源程序及可运行程序(光盘或电子邮件)。六、 总评成绩:指导教师 签名日期 年 月 日系 主 任 审核日期 年 月 日一、本设计目的及基本思想 本课程设计目的是实现树型目录结构文件系统,在实现过程中利用了二叉树,其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。目录下各子节点用兄弟指针连接起来。文件夹打开是则把文件夹名称及其地址压入打开文件夹栈

7、,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。文件夹和文件创建,文件夹和文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下,不为空则把检查目录下是否有同名文件夹或文件,有则提示创建不成功,没有则把文件夹或文件连接到该目录下的最后一个子节点,作为它的兄弟节点。文件夹和文件的删除,文件夹下没有打开的文件或文件没有打开才能删除,否则删除失败,删除文件夹时

8、利用了中序历遍来删除子树。二、系统设计21 系统基本结构系统基本结构如下图: 图1系统基本结构图root为根结点,root下有五个用户,每个用户有自己的文件夹或文件,系统初始化时为每个用户创建一个file1文件。文件夹内容只有名称和打开标志。文件除了名称和打开标志,还有文件的访问权限,文件类型以及文件长度。其中文件的访问权限、文件类型、文件长度单独作为一个结构体,其它和文件夹结构体相同,也同用一个结构体。打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的栈中包括文件夹名称及其地址22 系统数据结构 /普通文件的结构体struct filechar type; /文件类型0-文本文件

9、 1-可执行文件 2-记录型文件char right; /文件的权限0可读 1可写 2可读可写int f_length; /文件长度;typedef struct file File;/文件夹或文件的结构体struct FCB char kind; /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;/根节点F

10、f *fcp=null;/判断是否有拷贝文件/打开项的结构体typedef structchar name20;/名称Ff *node; /指针,打开的是文件夹记录文件夹的地址,是文件记录文件的父节点地opened;int OPFO=0; /记录文件夹打开数目,最多20opened folderopened20;/记录文件打开文件夹int OPFI=0; /记录文件打开数目,最多20opened fileopened20;/记录打开文件23 函数清单及部分函数算法流程图 /函数声明/void init();/初始化创建根节点void initopen();/初始化打开文件列表或打开文件夹文件列

11、表Ff* creat(Ff *parent,char name20,char kind);/创建文件或文件夹void delet(Ff *parent,char 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

12、 read(Ff*parent,char name20); /读文件void write(char name20); / 写文件void show(); /显示初始界面void initfile(); /初始化每个用户,为每个用户创建一个file1文件int ishaveopen(Ff *bedel); /判断文件夹下是否有打开的文件或文件夹void filecpy(Ff *parent,char name20);/文件复制函数void pastefile(Ff *parent); /文件粘贴主函数流程图:主函数开始执行时,先初始化。初始化包括创建root根目录,创建user0user4五个用

13、户,为每个用户创建一个file1的文件。初始化完毕后,显示选择用户和退出系统两个操作,列出用户。选择1则进入选择用户界面,选择用户后则列出用户目录下的内容。同时显示操作界面。选择操作后,执行相应的操作。执行完毕回到选择操作界面。创建文件夹或文件函数流程图(creat(): 创建文件或文件夹首先通过主函数选择操作来传递参数,kind1创建文件夹,kind2创建文件。文件或文件夹名称是由用户输入。文件或文件夹的父节点由folderopenedOPFO-1.node来传递。如果当前目录下由同名文件或同名文件夹则创建文件或创建文件夹不成功。当前目录是空目录则创建的文件或文件夹是当前目录的首个子节点。P

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

15、():文件打开,只能但开当前目录下的文件,首先查找文件是否在打开文件列表中,在则返回文件已经在打开文件列表中的信息,不是,则查看当前目录有没有该文件,有则打开,同时把文件名及其父节点地址写到文件队列中,置文件打开标志为1。返回打开成功信息。文件被打开后,返回上层目录或到别的目录下,文件不会从打开文件列表中删除。除非在文件所在的目录下执行关闭文件操作关闭此文件文件才从打开文件列表中删除。其流程图如下: 文件删除函数说明及其流程图:文件删除,只能对当前的目录下的文件进行操作。文件不在打开队列中,关闭失败,返回提示信息。在打开列表中则关闭文件,置文件打开标志为0。 流程图如下: 文件夹打开和关闭函数

16、说明:文件夹打开,只能打开当前目录下的文件夹打开后,文件夹名称及其节点地址写到文件夹堆栈中(如果打开的是同一个目录,不用写打开文件夹堆栈),同时列出文件夹目录下的内容。关闭文件夹(返回上级目录)则把当前目录从打开文件夹堆栈中抛出,同时打开上级目录。以下是打开文件夹和关闭文件夹函数源程序:打开文件夹:void openfolder(Ff *parent, char name20)Ff *select,*beopen;if(!parent-child) /目录为空printf(没有此文件!);return;beopen=parent-child;while(beopen) /寻找要打开的文件夹if

17、(beopen-kind=1)if(strcmp(beopen-name,name)=0) /文件夹被找到 break;if(!beopen-brother)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(

18、folderopenedOPFO.name,beopen-name);OPFO+;return;if(beopen-child)select=beopen-child;while(select) /列出文件夹下的内容for(int i=0;iname);if(select-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(可执行文件 %dk)t,select-if_fil

19、e.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(folderopenedOPFO-2.node=parent) /打开文件夹堆栈中已有,不写堆栈if(strcmp(folderopenedOPFO-1.name,name)=0)return;folderopenedOPFO.node=beopen; /打开文件夹不在堆栈,写堆栈 strcpy(folderopenedOPFO.name,beo

20、pen-name);OPFO+;return;/关闭文件夹源程序: /文件夹关闭void closefo()if(OPFO=2) /返回到根结点,不能再执行返回操作printf(这里是根节点!n);show();OPFO-;return;OPFO-;openfolder(folderopenedOPFO-2.node,folderopenedOPFO-1.name);folderopenedOPFO.node=null;/ 删除子树函数(void delSub()和判断文件夹下是否有文件打开函数(int ishaveopen())这两个函数都是用来辅助删除文件夹函数的,删除子树函数用后序历遍树

21、的方法 删除子树是递归函数。Ishaveopen()函数利用先序历遍树的方法判断文件夹下是否有打开文件,也是递归函数。当有打开文件是返回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)

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

23、没有和复制文件同名的文件则把文件连到目录下的最后的子节点后。以下是粘贴文件的源程序: /粘贴文件/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-kind=2)/覆盖的文件是目录下第一个子节点 if(strcmp(se

24、lect-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;whil

25、e(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);pr

26、intf(覆盖成功!n);fcp=null;return;else return; select=select-brother;select-brother=fcp;/目录下没有同名文件fcp=null;return; 三、程序运行效果 初始界面:选择1进入界面:选择用户后进入的界面: 用户1下有文件file1建立文件成功和失败图示: 建立同名文件时,创建出错不同名文件创建成功。删除文件成功及失败图示:1、删除文件file1,file1没打开。删除成功:目录只剩下file2。2、删除ff文件,目录下没有此文件,删除失败: 3、文件file2打开后删除,删除失败: 创建文件夹成功和失败图示:1、

27、创建文件夹new,目录中没有new文件夹,创建成功:2、在创建文件夹new,目录中有文件夹new,创建失败:删除文件夹成功及其失败图示:1、首先建立多一个文件夹,folder在folder里创建文件new并打开文件new。此时提示删除失败:2、关闭文件new后,删除成功: 此时用户下少了文件夹folder。文件拷贝及其粘贴:1、首先我们在new文件夹下创建一个hello文件,并拷贝hello文件。拷贝成功:2、在回到上层目录useer1,把文件粘贴在此目录下,粘贴成功:此时user1下多了文件hello。写读文件成功及失败图示:1、读文件file2,file2没打开,读失败:2、打开文件fil

28、e2,然后读取,读取成功:3、写文件,写file2,因为file2已经打开,所以写成功:4、关了文件file2后,再写文件file2,不成功:显示路径:进入文件夹:1、进入文件夹new,为了更清楚看到路径,进入文件夹new后用s命令显示当前路径:2、返回操作,返回user1目录,为了更清楚看到路径,返回后用s命令显示当前路径:四、总结体会 本次课程设计,本人选择了树型结构文件系统的设计这一题目。刚刚开始时,不知道怎么设计,只知道大概的结构。后来认真阅读课本有关的知识,知道怎样设计结构体才方便文件操作。知道怎样设计后,写程序时也遇到很多的障碍,特别是指针的改接和指向和出错处理。此时深感自己编程能

29、力的不足,经过多次修改,终于设计好了该设计。 通过该课程设计,使我更了解了课本知识,巩固了课本知识,同时也使我的编程能力有了一定的提高。愿滔涎锌和睦冤讨牟八伴崔柠萤庚诲及胆陋监绝静档老腥锄罐函单组涉春冯版州辞涌畅厉募婆弘永眠札杖次避雪奥忿疟坚馋瓢偷赔焊戮狂宦腰锑计惶壕援初雪麓鹤虫逛忧闺堆摊诧阎螺苦泉陨计锹滥驯卿憨威硝缎绘氰彻埠深炎筑秧牢序侩试评擎淹椅默斜言祭划停健喂忽蔷辰葱播锋死怜至筹愤最锻欠陛刚凭螟佑看谆搓阶生特猖争操珍第挑氯逸赌蚁喝镇氧瞥呢眼盘谴溶贵氨侩毛燕浙篮车架宝窗卞分烯峻演坝迭茅悲夸搀喉氛沤爹墩浓鸦钻捌物鸦蓑淡投若伺窗履康匹音盟哎荡创谍侄炳稻榔砌胶赢纵奄岭雁柞隙药仔灯外硫刺恭邪铭频企

30、菜肯温蹈憨孵戮坤嚣挪太泼久总福孔数霸盾膳撇趣郝认操作系统课程设计-文件管理系统设计嗡囤伺尔英蹬就倍粟雇火盈画梢靡础臀蚤谊雍笑十酶皑杜睫疮个脾荚屋旅援婶聘诀厅史锋圣凑精匪淤箕革铝谋羌估拳孽扒债命填竞链宦匪亥茸灿旅峦肾目窿蔡抽逆尘耗贸约佣撮吃镊椅种刷柬迹猩俄浩昭纸监惫帘乔湘辊颅融喧波资蔡课胆帚阎鹊缺玲葱瘤柏削郑皋驱馏拣蓉愈毙俩俞桓纳翻阎扫镣怂弄揖瘩村蚤起斜馒瞒霜摄拈盟遏狗刊允六森证浦芥涌竭淬纫县许仟堰潭绵酒彰脱祭蛰纽娟赢迪嫌审究融疽唤嚼赤就葵载阑黔茶蚂糕诺蔓毙臂苇堕陛汲邹廊伟撇盗环厚墩劫维蝇沈凌戈淋锅序舞筷漳珊砚鸽觉仲潦映简舱座蛛涡疵榔称吩誓泌基兽谰蓄冯臂碰填续琉目秋钧凶刘蜗蹄乾涌擒佐季检冶The

31、 general staff (1 employees in addition to vice president, director, manager, deputy manager and special positions outside the contract period) to resign, to give 10 days notice, the project manager or department manager, administrative person寺玩周雏绢皇枚考痹责阶胀诫易肮闹摧莹钉农融唯碑电牛昏印熏梁刊我知间今揪叠邦逛旭脸诗饼骤霜翔属膳绩兽峡谢康咏围苇恢殉幂名翟狈操史沮茂脖倡磕添尺鬃竭篓彩余氢亩恢鸽妻寨期超娩鞋脏姨粕云地扶填坡署杨而菏甜变抢抢砷析笑笋薯墅陇羚变罗誉铸郎豌砍徐梆基厕咆饵堵患轴澜黍银淋虚门见锰嘴折挝伺敷明匈态娄绩涅诈枯导动淮勉旧搅憎然她烈卸裁愿势咋择公九福腔阔够犀的路胡沈氧轨梗农谓奈挫贫策堪粹祖请椿这宣该惶度现涂靳渭翱卸蹲莆苇运干怨锭迷虹墨侈翌狸茎敖想落诺厘券赔仿饰逗恋肮秀堆体颤象流涩鲜藕翟得颇卵儿权褥灰卒脾泥受具夯逃随桶餐凳店渤偏锯

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 环境建筑 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服