操作系统课程设计报告模拟文件管理系统附源程序_第1页
操作系统课程设计报告模拟文件管理系统附源程序_第2页
操作系统课程设计报告模拟文件管理系统附源程序_第3页
操作系统课程设计报告模拟文件管理系统附源程序_第4页
操作系统课程设计报告模拟文件管理系统附源程序_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

1、源程序代码,联系153893706操作系统课程设计报告题目: 模拟文件管理系统学 院 计算机 专 业 网络工程 年级班别 1班 学 号 学生姓名 指导教师_ _ 成 绩 2007 年 1 月 一、课程设计题目:编写并调试一个树型目录结构的文件系统,模拟文件管理工作流程。要求:(1)设计多用户文件系统,采用多级文件目录。(2)至少要有十个以上的实用命令,应设置文件保护措施。(3)设计一个较实用的用户界面,方便用户使用,界面要为用户提供足够的选择信息,不需用户打入打入冗长的命令。二、设计思想说明:1. 使用可视化环境编程,程序界面模仿windows系统的资源管理器程序(左边为目录树形结构,显示多级

2、文件目录,右边为目录内容显示)。2. 使用鼠标,键盘,快捷键及拖动作各种文件的操作。3. 文件操作功能有:用户登录,新建文件夹,新建文件,文件重命名,剪切文件/文件夹,复制文件/文件夹,粘贴,查看文件内容,修改文件内容,查看文件属性,修改文件权限等。4. 为了便于操作,系统内的所有文件文件类型默认为文本文件,用户可以直接编辑其文字内容。三、系统结构的说明1.开发环境: c+ builder 6.02.运行环境: windows 98/nt4.0 以上3.使用控件:tmenu 菜单栏控件timagelist 图表集控件 ttreeview 树形结构显示控件 tlistview 对象显示控件 tp

3、opupmenu 反健菜单控件 tsplitter 工具栏按钮分割控件 tstatusbar 状态栏控件 ttoolbutton 工具栏按钮控件 ttoolbar 工具栏菜单控件4.窗体结构: 如下图,窗体分为三个,分别是form1,form2,form3。其中form1位程序主界面窗体,为始终显示状态;form2为文件内容显示及修改窗体,打开文件时显示,其他时候为隐藏状态;form3为文件属性窗体,查看文件属性时为显示状态,其他时候为隐藏状态。form1,form2,form3之间互相包含头文件,以便于传递数据。 图表一 form1 图表二 form2 图表三 form35. 函数设置:fo

4、rm1: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(ansistring filename); /新建目录ufd *copy_file(ufd *del

5、); /递归复制各节点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(); /激活控件void file_copy_paste(ufd *directory); /复制后的粘贴vo

6、id 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); /复制void refrash(); /刷新void reset(); /重置int subrelative

7、(ufd *a,ufd *b); /判断a是否从属于b a在b里?void ufd_in(); /初始化用户文件链表,并赋予用户文件数据6. 组件列表form1: ttreeview *treeview1; tlistview *listview1; timagelist *imagelist1; timagelist *imagelist2; tmainmenu *mainmenu1; tmenuitem *n5; tmenuitem *n6; tmenuitem *n7; tmenuitem *n8; tstatusbar *statusbar1; ttoolbar *toolbar1;

8、ttoolbutton *toolbutton1; ttoolbutton *toolbutton2; ttoolbutton *toolbutton3; tpopupmenu *popupmenu1; tmenuitem *n9; tmenuitem *n10; tmenuitem *a1; tmenuitem *n11; tmenuitem *n12; tmenuitem *n13; tmenuitem *n14; tmenuitem *n15; tmenuitem *n17; tmenuitem *n18; tmenuitem *n1; tmenuitem *n2; tmenuitem

9、*n3; tmenuitem *n4; tmenuitem *n20; tmenuitem *n21; tmenuitem *n22; tmenuitem *n23; tmenuitem *n19; tmenuitem *n24; tmenuitem *n25; tmenuitem *n27; tmenuitem *n28; tmenuitem *n29; tmenuitem *n30; tmenuitem *n16; tpopupmenu *popupmenu2; tmenuitem *n26; tmenuitem *n33; tmenuitem *n31; tmenuitem *n34;

10、tmenuitem *n35; tsplitter *splitter1; tsplitter *splitter2; ttoolbutton *toolbutton4; ttoolbutton *toolbutton5;form2: tmemo *memo1; tbutton *button1; tbutton *button2;form3: tbutton *button1; tgroupbox *groupbox1; tcheckbox *read_mark; tcheckbox *write_mark; tcheckbox *execute_mark; tgroupbox *group

11、box2; tlabel *label1; tlabel *label2; tlabel *label3; tedit *path; tedit *filename; tedit *size;7. 响应事件列表form1: void _fastcall formcreate(tobject *sender); void _fastcall treeview1change(tobject *sender, ttreenode *node); void _fastcall n9click(tobject *sender); void _fastcall a1click(tobject *sende

12、r); void _fastcall n2click(tobject *sender); void _fastcall listview1dblclick(tobject *sender); void _fastcall toolbutton1click(tobject *sender); void _fastcall n30click(tobject *sender); void _fastcall n14click(tobject *sender); void _fastcall n15click(tobject *sender); void _fastcall n21click(tobj

13、ect *sender); void _fastcall n22click(tobject *sender); void _fastcall n23click(tobject *sender); void _fastcall n17click(tobject *sender); void _fastcall n25click(tobject *sender); void _fastcall n29click(tobject *sender); void _fastcall listview1selectitem(tobject *sender, tlistitem *item, bool se

14、lected); void _fastcall n26click(tobject *sender); void _fastcall n24click(tobject *sender); void _fastcall n19click(tobject *sender); void _fastcall n16click(tobject *sender); void _fastcall n28click(tobject *sender); void _fastcall n33click(tobject *sender); void _fastcall n35click(tobject *sender

15、); void _fastcall n34click(tobject *sender); void _fastcall popupmenu2popup(tobject *sender); void _fastcall n11click(tobject *sender); void _fastcall n13click(tobject *sender); void _fastcall n27click(tobject *sender); void _fastcall n31click(tobject *sender); void _fastcall listview1dragdrop(tobje

16、ct *sender, tobject *source,int x, int y); void _fastcall listview1dragover(tobject *sender, tobject *source,int x, int y, tdragstate state, bool &accept); void _fastcall listview1keydown(tobject *sender, word &key,tshiftstate shift); void _fastcall listview1keyup(tobject *sender, word &

17、key, tshiftstate shift); void _fastcall treeview1dragover(tobject *sender, tobject *source, int x, int y, tdragstate state, bool &accept); void _fastcall treeview1dragdrop(tobject *sender, tobject *source, int x, int y); void _fastcall n8click(tobject *sender); void _fastcall n12click(tobject *s

18、ender); void _fastcall n3click(tobject *sender); void _fastcall n4click(tobject *sender); void _fastcall toolbutton2click(tobject *sender); void _fastcall toolbutton4click(tobject *sender); void _fastcall n10click(tobject *sender); void _fastcall toolbar1click(tobject *sender);form2: void _fastcall

19、button2click(tobject *sender); void _fastcall button1click(tobject *sender);form3: void _fastcall button1click(tobject *sender);四、数据结构的说明程序的所有数据存储由以下四个链表组成:struct ufd /文件目录了链表 int sign; /标志 0-file /1-folder ansistring filename; /文件/目录名 char protect3; /文件保护码 int length; /文件大小 ansistring content; /文件内

20、容 ufd *up; /父节点指针 struct ufd *next; /下一节点指针 struct ufd *folder; /目录下一层指针*ufd_head,*ufd_p,*current_ufd;struct ft_connect /treeview 与ufd关系链表 struct ufd *folder; /ufd指针 ttreenode *tree; /treeview节点指针 ft_connect *next; /下一节点指针*ft_head=null,*ft_p,*ft_q;struct fv_connect /listview 与ufd关系链表 struct ufd *fil

21、e; /ufd指针 tlistitem *item; /listview节点指针 fv_connect *next; /下一节点指针*fv_head=null,*fv_p=null,*fv_q=null;struct mfd /用户链表 ansistring username; /用户名 struct ufd *ufd; /用户目录指针 struct mfd *link; /下一节点指针*mfd_head,*mfd_p,*current_user;五、各模块的算法流程图1.用户登录模块流程图:2.刷新/初始化流程图:3.treeview change事件 处理流程图:4.打开操作流程图5.新建

22、文件/文件夹 流程图6.文件/文件夹 重命名流程图:7.删除文件/文件夹流程图:8. 复制文件/文件夹流程图:六、程序源代码清单:project1.bpr 工程文件project1.cpp 工程源文件unit1.cpp form1 源文件unit1.dfm form1 窗体文件unit2.cpp form2 源文件unit2.dfm form2 窗体文件unit3.cpp form3 源文件unit3.dfm form3 窗体文件七、关键源代码核心函数源代码:void _fastcall tform1:formcreate(tobject *sender)/form1初始化函数 mfd_in(

23、); login();/-void _fastcall tform1:treeview1change(tobject *sender, ttreenode *node) /记录当前数-文件夹链接 ft_p=ft_head; while(ft_p) if(ft_p->tree=treeview1->selected) break; ft_p=ft_p->next; if(ft_p) now_ft=ft_p; item_view_ini(); /-void _fastcall tform1:n9click(tobject *sender) /删除按钮响应 tlistitem *p

24、; if(p=listview1->selected) if(application->messageboxa("确定删除"+p->caption+"吗?").c_str(),"删除",mb_okcancel) delete_file(now_fv->file); refrash();/-void refrash() /刷新显示 form1->treeview1->items->clear(); form1->listview1->items->clear(); destor

25、y_ft(); drag_copy=0; folder_view_ini();ufd *create_file(ufd *perv,ansistring filename) /新建单个文件的数据结构 ufd *q; q=new(ufd); q->filename=filename; q->sign=0; strcpy(q->protect,"111"); q->length=12; q->folder=null; q->up=null; q->content="事例文件内容" q->next=null; r

26、eturn q;void login() /登录 ansistring username="user1" int sign=0; mfd *p,*q; reset(); disable_all(); if(!inputquery("用户登录","请输入用户名(系统默认为user1-user3)",username) return; p=mfd_head; while(p) if(p->username=username) break; q=p; p=p->link; if(!p) sign=application->

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

28、; enable_all(); folder_view_ini();/-void folder_view_ini() /初始化目录显示 ft_connect *p; ttreenode *tree_p; form1->treeview1->items->clear(); tree_p=form1->treeview1->items->addchild(null,current_user->username+" 的根目录"); ft_head=new(ft_connect); ft_head->next=null; ft_hea

29、d->folder=0; ft_head->tree=tree_p; ft_p=ft_head; draw_tree(tree_p,current_user->ufd); p=ft_head; while(p&&now_ft) if(p->folder=now_ft->folder) break; p=p->next; if(p) p->tree->selected=1; else ft_head->tree->selected=1;ft_connect *draw_tree(ttreenode *tree_p,ufd

30、 *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->fol

31、der); p=p->next; 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; desto

32、ry_fv(); /先销毁原链表 fv_p=new(fv_connect); fv_p->next=null; 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; f

33、v_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=(string)form1->listview1->items->count+" 个对象" form1->statusbar1->panels->items1->text=str; if(now_ft->folder) str=now_ft->folder->filename; else str=&q

34、uot;根目录" form1->statusbar1->panels->items3->text="当前位置:"+str; form1->statusbar1->panels->items2->text="总大小:"+(string)all_size()+"字节"void destory_fv() /销毁 文件-list 链表 fv_p=fv_head; while(fv_p) fv_head=fv_p; fv_p=fv_p->next; free(fv_head); f

35、v_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) fv_p=fv_head; while(fv_p) /已知list指针,通过 文件-lis

36、t 链表 获取文件链表节点指针 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(并激活之前定义的选中后

37、更改右边项目框显示) 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

38、; edit=ufd_p; form2->show(); form2->caption="编辑文件 "+ufd_p->filename; form2->memo1->text=ufd_p->content; int all_size() /统计listview中所有文件的大小 int size=0; ufd *p; if(now_ft->folder=0) p=current_user->ufd; else p=now_ft->folder->folder; while(p) size+=p->length; p=p->next; return size;void _fastcall tform1:n29click(tobject *sender) /listview中重命名按钮 ttreenode *tree_p; ansistring filename; ufd *p; if(listview1->selected) filename=now_fv->file-&

温馨提示

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

评论

0/150

提交评论