操作系统课程设计多用户多级目录文件系统的实现_第1页
操作系统课程设计多用户多级目录文件系统的实现_第2页
操作系统课程设计多用户多级目录文件系统的实现_第3页
操作系统课程设计多用户多级目录文件系统的实现_第4页
操作系统课程设计多用户多级目录文件系统的实现_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、课 程 设 计 课程名称 操作系统 题目名称 多用户多级目录文件系统的实现 学生学院 计算机学院 专业班级_计算机科学与技术4班 学 号 学生姓名_ _ 指导教师 2011年6月29日广东工业大学课程设计任务书题目名称多用户多级目录文件系统的实现学生学院计算机学院专业班级计算机科学与技术4班姓 名丘裕学 号3108006581一、课程设计的内容本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 二、课程设计的要求与数据1 在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个

2、多用户多目录的文件系统。2 文件物理结构可采用显式链接或其他方法。3 磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到fat中。4 文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。5 设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建: create(4)文件的打开:op

3、en(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete (9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout6 系统必须可实际演示,选用程序设计语言:c、c等。三、课程设计应完成的工作1充分理解设计的任务,完成设计的基本要求。然后根据自己的基础和能力选择不同难度的算法和实现方式,以取得更高的分数。 2. 独立独立完成系统的分析、设计、编码、测试工作。3完成设计报告的撰写。4以光盘(以班为单位刻录)方式提交已调试通过的完整的相关源程序和能够运行的执行文件;提交“课程设计报告”

4、的书面和电子两种版本。四、课程设计进程安排五、应收集的资料及主要参考文献1 计算机操作系统(修订版), 汤子瀛等 ,西安电子科技大学出版社, 2001 2 操作系统实验指导书,傅秀芬,广东工业大学(自编)3 计算机操作系统教程 ( 第二版 ), 张尧学、 史美林,清华大学出版社,2000 4 现代操作系统,a.s.tanenbaum 著,陈向群等译机械工业出版社,2002 年发出任务书日期:2011年06月20日 指导教师签名:计划完成日期: 2011年06月29日 基层教学单位责任人签章:目录1 设计思想说明71.1 设计环境71.2 设计思想72. 系统结构的说明73. 数据结构的说明74

5、. 各模块的算法流程图95. 程序源代码155.1函数声明155.2部分源代码166. 程序运行界面257. 操作说明书288. 体会、建议281、 设计思想说明1.1、设计环境 (1)计算机及操作系统:pc机,windowsxp (2)程序设计语言:c语言 (3)开发平台:c+ builder (4)运行平台:windows xp sp2,pc机 1.2、设计思想 本系统是模拟文件树型管理方式,用界面直观的实现文件的管理,以及用户方便的对文件进行操作,其中操作包括:打开文件和文件夹、新建、剪切、复制、粘贴、删除、重命名、刷新、文件属性。文件管理系统的首先有一个登陆界面,提示用户进入主界面,主

6、界面有三个窗口:主菜单,下面两个窗口体,左边的一个显示树型的文件夹的显示,右边的窗口体是左边选中的文件夹中的第一层内容。 文件操作执行都在右边的窗口点击右键选择操作。2、 系统结构的说明系统主要分为四个窗口:登陆窗口,主窗口,文件的打开编写窗,文件属性窗。其中主窗口包含了所有的操作。返回、打开、新建、剪切、复制、粘贴、删除、重命名、刷新、属性这些功能都是由相应的点击事件划分为不动的函数。unit1.cpp为主窗口函数,包含了以上所有函数,unit2.cpp为文件编写窗函数,unit3.cpp为文件属性窗函数。3、 数据结构说明文件夹结构体: struct ufd /文件目录结构体 int si

7、gn; /标志 0-file /1-folder ansistring filename; /文件/目录名 char protect3; /文件保护码 int length; /文件大小 ansistring content; /文件内容 ufd *up; /父节点指针 struct ufd *next; /下一节点指针 struct ufd *folder; /目录下一层指针 文件结构体:struct mfd /用户结构体 ansistring username; /用户名 struct ufd *ufd; /用户目录指针 struct mfd *link; /下一节点指针treeview

8、与ufd关系结构体 struct ft_connect struct ufd *folder; /ufd指针 ttreenode *tree; /treeview节点指针 ft_connect *next; /下一节点指针 listview 与ufd关系结构体struct fv_connect struct ufd *file; /ufd指针 tlistitem *item; /listview节点指针 fv_connect *next; /下一节点指针 4、 各模块的算法流程图主函数所有功能流程图:登陆窗口的流程图:打开文件或者文件夹流程图:添加文件文件夹流程图:刷新函数流程图剪切复制模块流

9、程图重命名模块流程图粘贴模块流程图删除模块流程图查看模块流程图属性模块流程图5、 程序源代码5.1、 函数声明int all_size();/统计listview中所有文件的大小int check_file_name(ufd *start,ansistring filename,int type); /寻找重名节点ufd *create_file(); /递归复制各节点void create_up_link(ufd *up,ufd *p); /复制后填写每个节点中的up指针void createfile(ansistring filename); /新建文件void createfolder(

10、ansistring filename); /新建目录ufd *copy_file(ufd *del);/递归复制各节点void delete_f(ufd *del); /递归删除节点void delete_file(ufd *del); /删除文件/文件夹void destory_ft(); /销毁 文件-tree 链表void destory_fv(); /销毁 文件-list 链表void disable_all(); /禁止控件ft_connect *draw_tree(ttreenode *tree_p,ufd *p); /递归生成树状结构void enable_all(); /激活

11、控件void file_copy_paste(ufd *directory); /复制后的粘贴void file_cut(ufd *pcut); /剪切文件/文件夹void file_paste(ufd *directory); /剪切后粘贴ansistring file_path(ufd *p);/计算文件路径void folder_view_ini(); /初始化目录显示void item_view_ini(); /初始化文件显示void login(); /登录void mfd_in(); /初始化用户文件链表,并赋予用户文件数据void per_copy(ufd *p); /复制voi

12、d refrash(); /刷新void reset(); /重置int subrelative(ufd *a,ufd *b); /判断a是否从属于b a在b里?void ufd_in(); /初始化用户文件链表,并赋予用户文件数据5.2、 部分源代码void login() /登录 ansistring username=user1; int sign=0; mfd *p,*q; reset(); disable_all(); if(!inputquery(用户登录,请输入用户名,username) return; p=mfd_head; while(p) if(p-username=use

13、rname) break; q=p; p=p-link; if(!p) sign=application-messageboxa(用户不存在,是否创建?,登录提示,mb_yesno); if(sign=idyes) p=new(mfd); p-username=username; p-link=null; p-ufd=create_file(null,原始文件); q-link=p; else return; current_user=p; form1-statusbar1-panels-items0-text=当前用户:+username; enable_all(); folder_view

14、_ini();void reset() /重置 form1-treeview1-items-clear(); form1-listview1-items-clear(); destory_ft(); cut=0; cut_prev=0; cut_up=0;void disable_all() /禁止控件 form1-listview1-enabled=0; form1-treeview1-enabled=0; form1-n11-enabled=0; form1-n12-enabled=0; form1-n13-enabled=0;void enable_all() /激活控件 form1-l

15、istview1-enabled=1; form1-treeview1-enabled=1; form1-n11-enabled=1; form1-n12-enabled=1; form1-n13-enabled=1;/-void _fastcall tform1:n2click(tobject *sender) /登录按钮 login();void folder_view_ini() /初始化目录显示 ft_connect *p; ttreenode *tree_p; form1-treeview1-items-clear(); tree_p=form1-treeview1-items-ad

16、dchild(null,current_user-username+ 的根目录); ft_head=new(ft_connect); ft_head-next=null; ft_head-folder=0; ft_head-tree=tree_p; ft_p=ft_head; draw_tree(tree_p,current_user-ufd); p=ft_head; while(p&ufd_p) if(p-folder=ufd_p) break; p=p-next; if(p) p-tree-selected=1; else ft_head-tree-selected=1;ft_connec

17、t *draw_tree(ttreenode *tree_p,ufd *p) /递归生成树状结构 ttreenode *tree_q; while(p) if(p-sign=1) tree_q=form1-treeview1-items-addchild(tree_p,p-filename); ft_q=new(ft_connect); ft_q-next=null; ft_q-tree=tree_q; ft_q-folder=p; ft_p-next=ft_q; ft_p=ft_p-next; if(p-folder) draw_tree(tree_q,p-folder); p=p-next

18、; void item_view_ini() /初始化文件显示 ansistring str; ufd *p; tlistitem *list_p; form1-listview1-items-clear(); if(!now_ft-tree) /无当前选择文件夹 p=current_user-ufd; else ft_p=ft_head; if(now_ft-folder=0) p=current_user-ufd; else p=now_ft-folder-folder; destory_fv(); /先销毁原链表 fv_p=new(fv_connect); fv_p-next=null;

19、 fv_head=fv_p; while(p) /显示并建立关系链表 list_p=form1-listview1-items-add(); list_p-caption=p-filename; if(p-sign=0) list_p-imageindex=1; fv_q=new(fv_connect); fv_q-item=list_p; fv_q-file=p; fv_q-next=null; fv_p-next=fv_q; fv_p=fv_p-next; p=p-next; fv_p=fv_head; fv_head=fv_head-next; free(fv_p); str=(stri

20、ng)form1-listview1-items-count+ 个对象; form1-statusbar1-panels-items1-text=str; if(now_ft-folder) str=now_ft-folder-filename; else str=根目录; form1-statusbar1-panels-items3-text=当前位置:+str; form1-statusbar1-panels-items2-text=总大小:+(string)all_size()+字节;void destory_fv() /销毁 文件-list 链表 fv_p=fv_head; while

21、(fv_p) fv_head=fv_p; fv_p=fv_p-next; free(fv_head); fv_head=null;void destory_ft() /销毁 文件-tree 链表 ft_p=ft_head; while(ft_p) ft_head=ft_p; ft_p=ft_p-next; free(ft_head); ft_head=null;void _fastcall tform1:listview1dblclick(tobject *sender) /listview上双击图表事件响应 tlistitem *p; p=listview1-selected; if(p)

22、fv_p=fv_head; while(fv_p) /已知list指针,通过文件-list链表获取文件链表节点指针 if(fv_p-item=p) break; fv_p=fv_p-next; if(fv_p) ufd_p=fv_p-file; if(ufd_p-sign=1) ft_p=ft_head; while(ft_p) /已知文件链表节点指针,通过文件-tree 链表 获取tree节点指针 if(ft_p-folder=ufd_p) break; ft_p=ft_p-next; if(ft_p) ft_p-tree-selected=true; /通过节点选中属性展开tree(并激活

23、之前定义的选中后更改右边项目框显示) else return; else if(!ufd_p-protect0) application-messageboxa(权限不足,无法读取文件,错误,mb_iconerror); return; if(!ufd_p-protect1) form2-memo1-readonly=1; form2-button1-enabled=0; else form2-button1-enabled=1; form2-memo1-readonly=0; edit=ufd_p; form2-show(); form2-caption=编辑文件 +ufd_p-filena

24、me; form2-memo1-text=ufd_p-content; 主界面的部分代码:object form1: tform1 left = 238 top = 207 width = 697 height = 538 caption = 文件管理系统 08级计算机科学与技术4班 3108006581 丘裕 color = clbtnface font.charset = default_charset font.color = clwindowtext font.height = -13 font.name = ms sans serif font.style = menu = main

25、menu1 oldcreateorder = false oncreate = formcreate pixelsperinch = 96 textheight = 16 object splitter2: tsplitter left = 281 top = 0 width = 3 height = 465 cursor = crhsplit end object treeview1: ttreeview left = 0 top = 0 width = 281 height = 465 align = alleft autoexpand = true hideselection = false images = imagelist1 indent = 35 popupmenu = popupmenu2 readonly = true rightclickselect = true taborder = 0 onchange = treeview1change ondragdrop = treeview1dragdrop ondragover = treeview1dragover endobject listview1: tlistview left = 284 top = 0 width =

温馨提示

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

评论

0/150

提交评论