操作系统课程设计-文件管理系统的设计与实现(附源程序)_第1页
操作系统课程设计-文件管理系统的设计与实现(附源程序)_第2页
操作系统课程设计-文件管理系统的设计与实现(附源程序)_第3页
操作系统课程设计-文件管理系统的设计与实现(附源程序)_第4页
操作系统课程设计-文件管理系统的设计与实现(附源程序)_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、需要全套设计请联系qq174320523 各专业都有课 程 设 计 课程名称_操作系统课程设计_ _题目名称文件管理系统的设计与实现学生学院_ 计算机学院_专业班级_ 级软件工程班_学 号 学生姓名 指导教师_ _200年 月 日广东工业大学课程设计任务书题目名称文件管理系统的设计与实现学生学院计算机学院专业班级04级软件工程2班姓 名学 号一、课程设计的内容通过课程设计, 加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。编写并调试一个树型目录结构的文件系统,模拟文件管理工作流程。二、课程设计的要求与数据1设计

2、多用户文件系统,采用多级文件目录。2至少要有十个以上的实用命令,应设置文件保护措施。3设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入冗长的命令。三、课程设计应完成的工作1每位同学必须认真完成设计内容,并按照要求撰写课程设计说明书1份(不少于3000字)。在最后截止时间前提交电子和打印文档两部分内容。2电子部分以电子邮件方式或者u盘拷贝方式提交给班长。把设计内容压缩为一个文件,文件名应为:“序号”+“姓名”。内容包括:源文件、可执行文件、演示运行结果、课程设计报告,最后由班长以班为单位刻录两张光盘,统一交给任课教师。3每人自己打印操作系统课程设计报告的纸质文

3、档,装订后交给班长,班长收齐清点后统一交给任课教师。课程设计论文具体包括以下内容:(1)设计思想说明(5%);(2)系统结构的说明(15%);(3)数据结构的说明(5%);(4)各模块的算法流程图(5%);(5)程序运行及清单(共60%,其中书面源程序占20%,光盘的源程序在计算机上实现程度占40%)(6)使用说明书(即用户手册)(内容包含如何登录、退出、读、写、等操作说明)(5%分)(7)体会,建议(5%)四、课程设计进程安排序号设计各阶段内容地点起止日期1布置课程设计题目与要求教1-4292006.10.132熟悉unix开发平台和工具软件工学一号馆5122006.12.25上午四节3熟悉

4、solaris 8.0下vi编辑器使用工学一号馆5122006.12.25下午四节4课程设计答辩工学一号馆4152007.1.24五、应收集的资料及主要参考文献计算机操作系统(修订版), 汤子瀛,西安电子科技大学出版社;计算机操作系统学习指导与题解,汤子瀛,西安电子科技大学出版社;操作系统实验与设计指导,傅秀芬,广东工业大学;unix实验上机指导,林小平,李立希,广东工业大学;发出任务书日期: 2006年 10 月 13 日 指导教师签名:申建芳计划完成日期: 2007年 1 月 5 日 基层教学单位责任人签章:主管院长签章:摘要和关键字(400字) :摘要:课程设计内容是要完成一个多用户的文

5、件系统.使用的设计语言是c+,开发环境是c+builder6.参考资料有,.因为在学习java的过程中,发现其中有很多东西很有用,而且发各种语言虽然有很大的不同,但是也有很多共同的东西,之前可以相互参考.所以在用一门语言开发时,我们也可以参考下其它的语言,这个可能对我们的开发有很大帮助.而且可以扩大我们的知识面.开发目标,利用c+builder完成一个同windowsxp的文件管理器有相似界面,符合设计要求的图形窗口的程序.这样的设计是为了能够方便用户操作,而windowsxp是人们非常熟悉的操作系统,而文件管理器同样是人们非常熟悉的.开发的过程,学过软件工程后,我明白了采用软件工程的方法来设

6、计软件重要性,同时也方便我们的开发使我们的设计更加容易,更加快,更容易维护,更容易调试.c+builder也是这样一种优秀的编译器,提供可视化的编程环境,和模块化设计的思想,在设计过程中,不仅扩展了知识面而且提高了编程的能力.总的来说,有了很大的提高.关键字:多用户的文件系统, c+builder, 文件管理器, , 图形窗口,可视化的编程环境, 模块化设计 一、设计思想说明:本程序是根据windwowxp 的文件管理系统来篇的。而他的外形是根据exporeler的界面来做的根据老师的要求我们要实现如下的功能:1设计多用户文件系统,采用多级文件目录。2至少要有十个以上的实用命令,应设置文件保护

7、措施。3设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入冗长的命令。根据老师的要求我通过windowsxp了解,设置了打开文件和文件夹、新建、剪切、复制、粘贴、删除、重命名、刷新、属性等十个常用的命令。其中文件可对其属性进行更改和操作,后原来打算对用户进行加密操作,担是由于时间有限,所以此功能并没有实现,界面是尽量采用大家熟悉的界面,所以是根据windows的窗口的做的,虽然在界面上是,非常相似但是其功能并没有那么那么多,只有以上的十余个命令.在做之前,原本打算,用java来实现的图形界面,因为在图形界面的实现上,java显得更加容易实现.通过jframe和

8、file类就可以轻易,创建窗口和文件夹的类,而且这类可视化的的教程还比较多.但考虑初学,还是选择了c+.但是还是有很多地方是借鉴了java的资源管理器的设计思想,同是也参考了和和等资料书. 而程序的总体设计是,采用菜单命令,主要是工具条和右键菜单命令.主要是能方便操作.而显示是采用两个窗口,一个显示树型的目录结构,主要是为了显示出其目录结构,但是并不能操作.其次便是用户和文件夹窗口了.用户可以在这个窗口里,实现各种命令的操作.而总体的设计思想是,采用java的编程思想,先进行窗口的布局再具体实现其中的功能.再细化功能细节,这也是可视化编程的优势,直接进行可视化的图形设计来代码自动生成.后再进行

9、具体的功能代码的添加.这样编出的程序结构明白简易.便于操作和修改.其内部命令结构图如下 :二、系统结构的说明: 系统结构主要是分为菜单命令,右键命令,树形的目录,用户操作窗口,以及地址栏,而菜单命令又分为文件,编辑,收藏,查看,工具,帮助.而用户操作又可为帐号创建窗口和文件夹的操作窗口,相应的命令要在相应的窗口才能进行操作.下面是设计是的结构图示:其中,各菜单命令又有子命令:其中,文件有文件操作的命令:打开,创建,删除,属性.退出.而编辑是:剪切,复制,粘贴.重命名.帮助:关于.而其它则没有相应的操作,因为能力限,只能完成要求的相应要求.三、数据结构的说明:采用jbuilder的好处是,进行图

10、形设计时,会生成相应的代码.再进行功能添加.所以具体的数据设计可以分为以下几部分:界面图形模块.菜单功能模块这个模块又分为好多小模块只要是实现各命令的功能,文件夹模块这个模块只要是用来创建新文件夹,帐户模块这个模块只要是用来创建新的帐户,文件模块这个模块主要是用来创建新的文件.其结构图如下:四、各模块的算法流程图:总的框架流程图:以下是主要功能的功能算法流程图打开算法流程图:以下是新建流程图:以下是剪切的流程图:以下是粘贴的流程图:五、程序运行及清单:程序的运行如下:用户操作界面a:用户操作界面b:用户操作界面c:文件夹操作界面:文件操作界面:程序清单:以下只给出主要部分的程序代码:树形结构的

11、代码:void _fastcall tform1:treeview1click(tobject *sender) string rootstr,str; ttreenode *treenode,*childnode; treenode=treeview1-selected; if(treenode=null) return; str=treenode-text; if(treenode-level=0) comboboxex1-text=根目录:; treerefresh(); listrefresh(); return; while(treenode-parent-level!=0) tre

12、enode=treenode-parent; rootstr=treenode-text+; str=rootstr+str; rootstr=root:+str; comboboxex1-text=rootstr; treerefresh(); listrefresh();地址栏的代码:void _fastcall tform1:treerefresh() int i; mfd *npos; ttreenode *treenode; string rootstr,flostr; rootstr=comboboxex1-text; mpos=root; while(rootstr!=) i=r

13、ootstr.pos(); if(i!=0) flostr=rootstr.substring(1,i-1); rootstr=rootstr.delete(1,i); else flostr=rootstr;rootstr=; if(flostr=根目录:) npos=mpos-folder; else for(;npos!=null;npos=npos-next) if(npos-name=flostr) mpos=npos;npos=mpos-folder; break; next: findtnode(); selnode-selected=true; if(selnode=treev

14、iew1-topitem) for(treenode=selnode-getfirstchild();treenode!=null;treenode=selnode-getnextchild(treenode) treenode-imageindex=3;treenode-selectedindex=3;新建帐户,文件,文件夹的代码:void _fastcall tform1:n39click(tobject *sender) mfd *p,*q; treerefresh(); ansistring inputstr; if(mpos=null) return; if(mpos!=root)

15、application-messageboxa(账号建立不成功,请确认创建位置正确,请返回,mb_iconerror);return; inputstr=新账号_+(string)creatuserno; if(!inputquery(新建账号,请输入新账号名,inputstr)return; for(q=mpos-folder;q!=null;q=q-next) if(q-name=inputstr) application-messageboxa(账号已经存在,请重新输入!,请返回,mb_iconerror); return; p=new(mfd); p-name=inputstr; p-

16、folder=null; p-parent=null; p-file=null; p-next=null; q=mpos-folder; if(q=null) mpos-folder=p;p-parent=mpos; else while(q-next!=null) q=q-next; q-next=p; p-parent=q; listrefresh(); findtnode(); if(selnode=null) return; treeview1-items-addchild(selnode,p-name); treerefresh(); creatuserno+;void _fastc

17、all tform1:n18click(tobject *sender) mfd *p,*q; treerefresh(); ansistring inputstr; if(mpos=null) return; if(mpos=root) application-messageboxa(无法创建文件夹,请确认操作正确!,无法在此新建文件夹,mb_iconerror);return; inputstr=newfolder_+(string)creatfolderno; if(!inputquery(新建文件夹,请输入新文件夹名,inputstr)return; for(q=mpos-folder

18、;q!=null;q=q-next) if(q-name=inputstr) application-messageboxa(文件夹已存在,请重新输入!,文件夹重名,mb_iconerror); return; p=new(mfd); p-name=inputstr; p-folder=null; p-parent=null; p-file=null; p-next=null; q=mpos-folder; if(q=null) mpos-folder=p;p-parent=mpos; else while(q-next!=null) q=q-next; q-next=p; p-parent=

19、q; listrefresh(); findtnode(); if(selnode=null) return; treeview1-items-addchild(selnode,p-name); creatfolderno+;void _fastcall tform1:n19click(tobject *sender) ufd *p,*q; ansistring inputstr; treerefresh(); if(mpos=null) return; if(mpos=root) application-messageboxa(不能在根目录下创建文件,只能创建用户!,请返回,mb_icone

20、rror);return; inputstr=newfile_+(string)creatfileno; if(!inputquery(新建文件,请输入新文件名,inputstr)return; for(q=mpos-file;q!=null;q=q-next) if(q-filename=inputstr) application-messageboxa(指定文件名已存在,请重新输入!,请返回,mb_iconerror); return; /for p=new(ufd); p-filename=inputstr; p-text=; p-pt=111; p-parent=null; p-nex

21、t=null; q=mpos-file; if(q=null) mpos-file=p; else while(q-next!=null) q=q-next; q-next=p; p-parent=q; listrefresh(); creatfileno+;重命名的代码id _fastcall tform1:n11click(tobject *sender) tlistitem *listitem; ufd *p,*f; mfd *q,*r; ansistring str; ttreenode *treenode; listitem=listview1-selected; if(listit

22、em=null) return; treerefresh(); if(listitem-imageindex=1) if(mpos-file=null) return; for(p=mpos-file;p!=null;p=p-next) if(p-filename=listitem-caption) str=p-filename; if(!inputquery(重命名,输入新文件名,str)return; for(f=mpos-file;f!=null;f=f-next) if(f-filename=str) application-messageboxa(无法重命名+p-filename+:

23、指定的文件与现有文件重名。请指定另一文件名).c_str(),重命名文件或文件夹时出错,mb_iconerror); return; p-filename=str; listrefresh(); return; else if(listitem-imageindex=0) if(mpos-folder=null) return; for(q=mpos-folder;q!=null;q=q-next) if(q-name=listitem-caption) str=q-name; if(!inputquery(重命名,输入新文件夹名,str)return; for(r=mpos-folder;r

24、!=null;r=r-next) if(r-name=str) application-messageboxa(无法重命名+q-name+:指定的文件与现有文件重名。请重新输入新的文件名).c_str(),重命名文件或文件夹时出错,mb_iconerror); return; findtnode(); for(treenode=selnode-getfirstchild();treenode!=null;treenode=selnode-getnextchild(treenode) if(treenode-text=listitem-caption) treenode-text=str;bre

25、ak; q-name=str; listrefresh(); return; /for /else if else application-messageboxa(不能修改用户的用户名!,无法重命名,mb_iconerror);剪切的代码:void _fastcall tform1:n6click(tobject *sender) tlistitem *listitem; listitem=listview1-selected; if(listitem=null) return; addrstr=comboboxex1-text; treerefresh(); if(listitem-imag

26、eindex=1) flag=0; for(cutfile=mpos-file;cutfile!=null;cutfile=cutfile-next) if(cutfile-filename=listitem-caption) return; else if(listitem-imageindex=0) flag=1; for(cutfolder=mpos-folder;cutfolder!=null;cutfolder=cutfolder-next) if(cutfolder-name=listitem-caption) return; else application-messagebox

27、a(用户不能剪切!,无法剪切,mb_iconerror);void _fastcall tform1:n9click(tobject *sender) string goalstr; ufd *gfile,*newfile,*prevcopy,*prevfile; mfd *gfolder,*newfolder; ttreenode *treenode,*nownode; goalstr=comboboxex1-text; treerefresh(); if(mpos=root&flag!=6) application-messageboxa(请确认是操作正确!,无法粘贴,mb_iconerr

28、or);return; switch(flag) case 0: for(gfile=mpos-file;gfile!=null;gfile=gfile-next) if(gfile-filename=cutfile-filename) if(application-messageboxa(此文件夹已包含名为+cutfile-filename+的文件。n是否确认覆盖?).c_str(),确认文件替换,mb_yesno+mb_iconwarning)=mrno)return; if(cutfile-parent=null) comboboxex1-text=addrstr; treerefres

29、h(); comboboxex1-text=goalstr; mpos-file=cutfile-next; else cutfile-parent-next=cutfile-next; if(cutfile-next)cutfile-next-parent=cutfile-parent; treerefresh(); if(mpos-file=null) mpos-file=cutfile; cutfile-parent=null; cutfile-next=null; cutfile=null; flag=6; listrefresh(); return; else for(gfile=m

30、pos-file;gfile!=null;gfile=gfile-next) if(gfile-filename=cutfile-filename) gfile-text=cutfile-text; gfile-pt=cutfile-pt; gfile-len=cutfile-len; free(cutfile); flag=6; listrefresh(); return; for(gfile=mpos-file;gfile-next!=null;gfile=gfile-next) if(gfile-next=null) gfile-next=cutfile; cutfile-next=nu

31、ll; cutfile-parent=gfile; cutfile=null; flag=6; listrefresh(); return; break; case 1: for(gfolder=mpos-folder;gfolder!=null;gfolder=gfolder-next) if(gfolder-name=cutfolder-name) if(application-messageboxa(此文件夹已包含名为+cutfolder-name+的文件夹。n是否确认覆盖?(清空原有文件夹).c_str(),确认文件夹替换,mb_yesno+mb_iconwarning)=mrno)r

32、eturn; treerefresh(); checkdown2(cutfolder,mpos); if(checkdown=1) application-messageboxa(目标文件夹为原文件夹子层文件夹。,剪切文件出错,mb_iconerror); checkdown=0; return; comboboxex1-text=addrstr; findtnode(); comboboxex1-text=goalstr; for(treenode=selnode-getfirstchild();treenode!=null;treenode=selnode-getnextchild(tre

33、enode) if(treenode-text=cutfolder-name) treenode-delete();break; if(cutfolder-parent-folder=cutfolder) cutfolder-parent-folder=cutfolder-next; if(cutfolder-next)cutfolder-next-parent=cutfolder-parent; else cutfolder-parent-next=cutfolder-next; if(cutfolder-next)cutfolder-next-parent=cutfolder-parent; findtnode(); for(treenode=selnode-getfirstchild();treenode!=null;treenode=selnode-getnextchild(treenode) if(treenode-text=cutfolder-name) break; if(treenode=null) treeview1-items-addchild(selnode,cutfolder-name); treerefresh(); if(m

温馨提示

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

评论

0/150

提交评论