




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课 程 设 计 课程名称_操作系统 _ _ 题目名称_多用户多级目录文件系统的实现_ 学生学院_计算机学院_专业班级_ _学 号_ _ 学生姓名_ _ 指导教师_林穗_ 2011年 1月 18日广东工业大学课程设计任务书题目名称多用户多级目录文件系统的实现学生学院计算机学院专业班级08软件工程一班姓 名 学 号 一、课程设计的内容本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 二、课程设计的要求与数据1 在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的
2、文件系统。2 文件物理结构可采用显式链接或其他方法。3 磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。4 文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。5 设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建: create(4)文件的打开:open(5)文件
3、的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete (9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout6 系统必须可实际演示,选用程序设计语言:C、C等。三、课程设计应完成的工作1充分理解设计的任务,完成设计的基本要求。然后根据自己的基础和能力选择不同难度的算法和实现方式,以取得更高的分数。 2. 独立独立完成系统的分析、设计、编码、测试工作。3完成设计报告的撰写。4以光盘(以班为单位刻录)方式提交已调试通过的完整的相关源程序和能够运行的执行文件;提交“课程设计报告”的书面和电子两
4、种版本。四、课程设计进程安排序号设计各阶段内容地点起止日期1查阅资料、分析题目、概要设计分散周一2详细设计、编码分散周二3调试实验室周三4撰写设计报告分散周四5运行、验收实验室周五五、应收集的资料及主要参考文献1 计算机操作系统, 汤小丹等 ,西安电子科技大学出版社2 操作系统实验指导书,傅秀芬,广东工业大学(自编)3 计算机操作系统教程 ( 第二版 ), 张尧学、 史美林,清华大学出版社4 现代操作系统,A.S.Tanenbaum 著,陈向群等译机械工业出版社发出任务书日期:2010年12月22日 指导教师签名:林穗计划完成日期: 2011年1月21日 基层教学单位责任人签章:滕少华目录i.
5、 设计目的ii. 开发工具与环境iii. 设计思想iv. 系统结构说明v. 数据结构说明vi. 各模块的算法流程图1、程序总体源流程图2、主要模块的算法流程图3、函数声明vii. 程序运行及清单1、用户管理操作界面2、文件管理操作界面3、主要核心源代码viii. 操作说明书 1、用户管理使用手册 2、文件操作管理使用手册ix. 体会和建议i. 设计目的本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 ii. 开发工具与环境a)程序设计语言:C语言b)计算机及操作系统:PC机,W
6、indowsXPc)开发平台:Microsoft Visual C+ 6.0简化版d)运行平台:PC机,WindowsXPiii. 设计思想课程设计采用Microsoft Visual C+ 6.0简化版作为开发工具,参照了windows资源管理器的结构,模拟文件管理的工作过程,通过创建一棵多叉树,及对这棵多叉树的操作,建立了一个树型文件系统,实现了文件和文件夹的创建,打开,读写,删除,关闭,复制,粘贴,查看,属性设置等十来个功能。操作界面简单明了,操作方便。iv. 系统结构说明模拟文件管理系统可以自行设置多个用户进行管理操作,当选择已有用户时便可进入其文件管理菜单进行相应的操作(有界面提示功
7、能),当进入系统已建立的某个用户时,可以创建用户自己的文件夹或文件,当flag0时为创建文件,flag1时创建文件夹(这里设置了标志位)。文件除了名称和打开标志外,还可对他们的访问权限、文件类型和文件长度进行设置(长度设置主要在写入文件时会用到);而文件夹则可以设置访问权限等,打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的链表中包括文件夹名称及其地址等;对文件的管理包含复制、打开、关闭、写入、读出、粘贴、新建文件(夹)、删除文件(夹)和显示文件(夹)等等,为方便操作还设置了各功能操作(如进入下一级、返回上一级、返回初始菜单、直接退出等等)。下面的系统结构说明图示:其中P表示pa
8、rent指针,C表示child指针,N表示next指针v. 数据结构说明该模拟文件管理系统的文件目录检索采用简单的线性搜索,系统所采用的数据结构:typedef struct list LIST;struct listchar listname10;int type;int length;int protect;int flag;char *content;struct list *parent;struct list *child;struct list *next;typedef struct usd USD;struct usdchar username10; LIST *list; s
9、truct usd *next;vi. 各模块的算法流程图1. 程序总体流程图开 始显示用户管理菜单输入操作命令退出系统帮助文档系统时间列出用户选择用户删除用户新建用户结束程序显示文件管理菜单输入操作命令直接退出系统帮助与支持返回上一级文件夹进入下一级文件夹显示当前路径文件/夹粘贴文件复制文件关闭文件写入文件读出文件打开文件删除文件夹新建文件夹新建文件返回用户管理菜单删除文件结束程序 2. 主要模块的算法流程图1) 创建用户模块:2) 删除用户3) 创建文件(夹)4) 删除文件夹5) 复制文件3. 函数声明void displayusermenu();/用户管理界面菜单void time();
10、/系统时间void displayfilemenu();/文件管理界面菜单void creatuser();/新建用户void deleteuser();/删除用户void displayuser();/显示用户void userhelp();/用户管理帮助void filehelp();/文件管理帮助void selectuser();/选择用户void displaylist();/显示文件或者文件夹void creatfile(LIST *qq,int flag);/创建文件(夹)void deletefile(LIST *qq,int flag);/删除文件(夹)void openfi
11、le();/打开文件void readfile(); /读取文件void writefile(); /写入文件void closefile();/关闭文件void next();/下一层文件夹void back();/上一层文件夹void copyfile();/复制文件void pastedfile();/粘贴文件void quit();/直接退出系统vii. 程序运行及清单系统界面简洁美观实用,用户无须输入过长指令就可以完成操作。本系统还附带操作指南,用户如有疑问可查看指南说明。虽不如可视化易操作,但也不难。1、 用户管理操作1) 程序登陆界面2) 程序开始界面(即用户管理界面)3) 新建
12、用户4) 列出用户5) 删除用户6) 系统日期时间7) 帮助文档8) 退出系统9) 选择用户输入用户名(若系统无此用户会有提示)按回车后即进入文件操作界面。 2、对文件管理操作1) 进入用户后对文件操作初始界面2) 新建文件3) 新建文件夹4) 显示当前路径文件(夹)5) 删除文件文件存在时 6) 删除文件夹文件夹存在时 7) 打开文件文件存在时 8) 读出文件文件需要先置于打开状态,方可读取由于没有输入内容所以文件内容为空。9) 写入文件10) 读出刚才写入的内容11) 关闭文件12) 复制文件(先将刚才关闭的文件aa1打开再复制)如果输入的文件名不存在该用户中时会有提示信息3、主要核心源代
13、码(见电子版) #include <stdio.h>#include <math.h>#include <malloc.h>#include <string.h>#include <conio.h>#include <time.h>#include "stdlib.h"#define NULL 0#define get(type) (type *)malloc(sizeof(type)/分配空间typedef struct list LIST;struct listchar listname10;/ 文
14、件名长度int type;int length;/ 文件长度int protect;/ 保护模式,0为只读,1为可读写int flag;/ 标志,为0时创建文件夹,为1时创建文件char *content;struct list *parent;struct list *child;struct list *next;typedef struct usd USD;struct usd char username10;/ 用户名长度 LIST *list; struct usd *next;/ 函数声明void displayusermenu();/ 用户管理界面菜单void login();/
15、 系统登陆界面void time();/ 系统时间void displayfilemenu();/ 文件管理界面菜单void creatuser();/ 新建用户void deleteuser();/ 删除用户void displayuser();/ 显示用户void userhelp();/ 用户管理帮助void filehelp();/ 文件管理帮助void selectuser();/ 选择用户void displaylist();/ 显示文件或者文件夹void creatfile(LIST *qq,int flag);/ 创建文件(夹)void deletefile(LIST *qq,
16、int flag);/ 删除文件(夹)void openfile();/ 打开文件void readfile();/ 读取文件void writefile();/ 写入文件void closefile();/ 关闭文件void next();/ 下一层文件夹void back();/ 上一层文件夹void copyfile();/ 复制文件void pastedfile();/ 粘贴文件void quit();/ 直接退出系统USD *user=NULL,*currentuser=NULL;LIST *list=NULL,*currentlist=NULL,*copylist=NULL;voi
17、d displayusermenu()/ 显示用户菜单system("cls");/ 清屏int button;printf("nnttt欢迎使用多用户多级目录文件系统nn");printf("tt计算机学院tt软件工程1班nn");printf("tt tt nnn");printf("tt1、新建用户n");printf("tt2、删除用户n");printf("tt3、选择用户n");printf("tt4、列出用户n");pri
18、ntf("tt5、系统时间n");printf("tt6、帮助文档n");printf("tt7、退出系统nn");printf("tt请按功能选择操作:");scanf("%d",&button); switch(button) case 1: creatuser(); break;/ 创建新用户 case 2: deleteuser(); break;/ 删除用户 case 3: selectuser(); displayfilemenu(); break;/ 选择一个用户 case
19、 4: displayuser();/ 显示用户 getchar(); getchar(); displayusermenu(); break; case 5: system("cls");/系统时间显示 time(); displayusermenu(); break; case 6: userhelp();/ 帮助 getch(); displayusermenu(); break; case 7: system("cls");/ 退出 printf("nnntttt欢迎再次使用!nn"); getch(); exit(0); b
20、reak; default : printf("nnttt你的输入有误!请重新输入!n"); getch(); displayusermenu(); break;/ 输入非上述数字重新输入void displayfilemenu() / 显示文件管理操作菜单system("cls"); / 清屏int choice;LIST *p=currentlist;printf("ntt %s你好,欢迎进入文件管理系统 n",currentuser->username);/提示信息printf("n 当前的文件路径:"
21、);/ 接入目录地址doprintf("<%s",p->listname);p=p->parent;while(p!=NULL);printf("tt格式:子目录<-根目录nn");printf(" 功能选择 nn");/菜单printf("tt1、新建文件ttt 9、复制文件n");printf("tt2、删除文件ttt10、粘贴文件n");printf("tt3、新建文件夹ttt11、显示当前路径文件(夹)n");printf("tt4、
22、删除文件夹ttt12、进入下一级文件夹n");printf("tt5、打开文件ttt13、返回上一级文件夹n");printf("tt6、读出文件ttt14、返回用户管理菜单n");printf("tt7、写入文件ttt15、帮助与支持n");printf("tt8、关闭文件ttt16、直接退出系统nn");printf(" nn");printf("ttt按功能选择选择相应的操作(输入相关数字): ");scanf("%d",&choi
23、ce);printf("n");system("cls");switch(choice)/switch语句case 1:creatfile(currentlist,0);break;/ 创建文件case 2:deletefile(currentlist,0);break; / 删除文件case 3:creatfile(currentlist,1);break;/ 创建文件夹case 4:deletefile(currentlist,1);break;/ 删除文件夹case 5:openfile();break;/ 打开文件case 6:readfile(
24、);displayfilemenu();break;/ 读出文件 case 7:writefile();displayfilemenu();break;/ 写入文件case 8:closefile();break;/ 关闭文件case 9:copyfile();break;/ 复制文件case 10:pastedfile();break;/ 粘贴文件case 11:displaylist();/ 显示文件(夹)getch();displayfilemenu();break;case 12:next();break;/ 进入下一级文件夹case 13:back();break;/ 返回上一级文件
25、夹case 14:displayusermenu();break;/ 退出,返回上用户管理菜单 case 15:filehelp();displayfilemenu();break; case 16:quit();break;default :printf("nnttt你的输入有误!请重新输入!n");getch();displayfilemenu();break;/ 非法输入,返回文件管理菜单重新输入void login()char username20;char password20;printf("nnnn");printf("ttt系统
26、登陆:(用户密码均为admin)nn");printf("ttt请输入用户名:");scanf("%s",username);printf("ttt请输入密码:");scanf("%s",password);if(strcmp(username,"admin")|strcmp(password,"admin")printf("ntt用户名或密码错误,请重新输入!n");getch();system("cls");login()
27、;void time()/ 显示系统时间日期 time_t now;/ 调用系统日期时间 time(&now);printf("nn ttt系统当前日期时间nn"); printf("ttt %s",asctime(localtime(&now);/显示系统详细时间printf("nnn");getch();void creatuser()/ 创建用户int i;char s;USD *p,*q=user;system("cls");p=get(USD);for(i=1;q!=NULL;i+)q=q
28、->next; / i指示当前用户个数q=user;printf("ntttt创建一个新用户n");printf("ntttt请输入NO.%d个用户名: ",i);scanf("%s",p->username); /输入新用户的名字LIST *l=list;l=get(LIST);strcpy(l->listname,p->username);l->next=NULL;l->type=1;l->parent=NULL;l->child=NULL;p->list=l;p->ne
29、xt=NULL;if(user=NULL)user=p; / 若user为空,则把P复给userelse / 若user不为空,则以有旧用户存在 while(q->next!=NULL)/ 寻找最后一个用户if(strcmp(p->username,q->username)=0) / 比较,看系统是否已经存在该用户printf("ntthe user has exit ! try again !nn"); / 提示出错信息getchar();getchar();system("cls"); displayusermenu();q=q-&
30、gt;next;if(strcmp(p->username,q->username)=0)/检查提示重名并提示信息printf("nttt该用户已经存在!无法创建该用户!nn");getchar();getchar();system("cls"); displayusermenu();q->next=p; /继续寻找下一个字符printf("ntttt是否要再创建一个用户?(Y/N):"); /输入下一个用户scanf("%s",&s);switch(s)case 'y':
31、creatuser();break;case 'Y':creatuser();break;case 'n':displayusermenu();break; case 'N':displayusermenu();break;default :displayusermenu();break;void deleteuser() /删除用户 char n10;USD *p=user,*pre=NULL;displayuser();if(!p)printf("ntttt系统无用户可删除!n"); /P为空,报错,必须先创建一个用户ge
32、tchar();getchar();system("cls"); displayusermenu();printf("nntttt请输入要删除的用户名:");scanf("%s",n);while(p!=NULL)if(strcmp(p->username,n)=0) /寻找所要删除的用户if(p=user)user=user->next; /若是第一个用户,则释放Pelsepre->next=p->next; free(p);printf("nnntttt 已经成功删除用户%s! ",n)
33、;break;elsepre=p;p=p->next;if(p=NULL) /找不到用户printf("nnttt找不到该用户!请确认该用户是否存在!n");getchar();getchar();system("cls"); displayusermenu();void selectuser() /选择用户 char n10;USD *p=user;displayuser();if(!p)printf("nttt该用户不存在!请确认用户名是否正确!"); /没有用户getchar();getchar();system(&quo
34、t;cls"); displayusermenu();printf("ntttt选择一个用户");printf("nntttt请输入用户名:");scanf("%s",n); /输入用户名while(p!=NULL)if(strcmp(p->username,n)=0) /逐个比较寻找用户currentuser=p; /找到对应用户,则把currentuser指向该用户currentlist=p->list;printf("%sn",currentlist->listname);retu
35、rn;elsep=p->next; if(p=NULL) /找不到用户printf("nntttt该用户不存在!");getchar();system("cls"); displayusermenu();void creatfile(LIST *qq,int flag) /创建文件(夹) LIST *temp;LIST *p=qq->child; LIST *q; temp=get(LIST);loop:q=qq->child;if(flag=0) printf("ntttt创建一个新文件n"); printf(&q
36、uot;ntttt请输入新建文件名: "); /输入文件名else printf("ntttt创建一个新文件夹n"); printf("ntttt请输入新建文件夹名: "); /输入文件名scanf("%s",temp->listname);while(q!=NULL)if(strcmp(temp->listname,q->listname)=0)printf("nttt相同路径下有重名文件!请重新输入!");goto loop;q=q->next;temp->content
37、=NULL;printf("ntt文件属性: 0、只读Readtt1、读和写Read&Write"); /设置保护模式printf("nnttt请根据提示选择保护模式(0/1)?: ");scanf("%d",&temp->protect);if(temp->protect!=0&&temp->protect!=1) printf("nnttt你的选择有误!请重新输入(0/1)?: ");scanf("%d",&temp->prot
38、ect);if(flag=0) printf("ntttt请输入该文件的长度: "); /设置文件长度,供写入文件时会用到 scanf("%d",&temp->length); if(flag=0) temp->type=0; /0为文件else temp->type=1;temp->flag=0; /文件默认为关闭状态,以后需要时再打开temp->child=NULL;temp->next=NULL;temp->parent=currentlist;if(p=NULL) qq->child=tem
39、p;else while(p->next!=NULL)p=p->next;p->next=temp; getchar();displayfilemenu();void deletefile(LIST *qq,int flag) /删除文件(夹)char n10;LIST *p=qq->child;LIST *pre=NULL;if(flag=0)printf("ntttt删除一个文件n"); printf("ntttt请输入要删除的文件名: ");elseprintf("ntttt删除文件夹n"); print
40、f("ntttt请输入要删除的文件夹名: ");scanf("%s",n);while(p!=NULL) if(strcmp(p->listname,n)=0)&&(p->type=0) if(pre=NULL) /第一个节点 qq->child=p->next;free(p); printf("nntttt文件%s已删除成功!n",n); else pre->next=p->next; /把前一个指针的NEXT指向N当前指针的NEXT,则删除该文件 printf("nnt
41、ttt文件%s已删除成功!n",n); free(p); break; else if(strcmp(p->listname,n)=0)&&(p->type=1) if(pre=NULL) /第一个节点 qq->child=p->next;free(p); printf("nntttt文件夹%s已经成功删除!n",n); else pre->next=p->next; /把前一个指针的NEXT指向N当前指针的NEXT,则删除该文件 printf("nntttt文件夹%s已经成功删除!n",n)
42、; free(p); break; else pre=p; p=p->next; if(p=NULL&&flag=0) /该文件不存在 printf("nntttt找不到该文件!");else if(p=NULL&&flag=1) printf("nntttt找不到该文件夹!n");getchar(); /用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中)getchar(); displayfilemenu();void openfile() /打开文件char n10;LIST *p=
43、currentlist->child;printf("ntttt打开一个文件n");printf("ntttt请输入要打开的文件名: ");/输入文件名scanf("%s",n); while(p!=NULL)if(strcmp(p->listname,n)=0)&&(p->type=0)&&(p->flag=0)/比较文件以寻找要打开的文件p->flag=1;printf("ntttt文件%s成功打开!n",n);break;else if(strcm
44、p(p->listname,n)=0)&&(p->type=0)&&(p->flag=1)printf("ntttt文件%s打开已经!n",n);break; p=p->next;if(p=NULL)printf("nntttt找不到该文件!n");getchar();getchar();displayfilemenu();void readfile() /读出文件char n10;LIST *p=currentlist->child;printf("ntttt读取一个文件n&quo
45、t;);printf("nntttt请输入要读的文件名: ");scanf("%s",n);while(p!=NULL)if(strcmp(p->listname,n)=0)&&(p->type=0)&&(p->flag=1)/比较printf("nttt文件%s内容是:%s",p->listname,p->content);getchar();getchar();system("cls");return; p=p->next; printf(&q
46、uot;nntt读文件失败,请确认该文件是否已经打开或文件是否存在!n"); getchar();getchar();void writefile() /写入文件char n10,*temp;LIST *p=currentlist->child;printf("ntttt写入文件n");printf("ntttt请输入要写的文件名: ");scanf("%s",n);while(p!=NULL)if(strcmp(p->listname,n)=0)&&(p->type=0)if(p->
47、flag=0)printf("nttt文件未打开,无法写入!请将文件置打开状态!n");getchar();getchar();system("cls");else if(p->protect=0) printf("nnttt操作受限!该文件不能写!n"); /该文件限制读写 getchar(); system("cls"); return;elsetemp=(char *)malloc(sizeof(char)*p->length);printf("nntttt请输入文件内容(length&
48、lt;=%d):nnt",p->length);scanf("%s",temp);p->content=temp;getchar();system("cls");return; p=p->next; printf("nnttt该文件不存在!获取失败!n");/提示 getchar();getchar();void closefile() /关闭文件char n10;LIST *p=currentlist->child;printf("ntttt关闭一个文件n");printf("ntttt请输入要关闭的文件名: ");scanf("%s",n); while(p!=NULL)if(strcmp(p->listname,n)=0)&&(p->type=0)&&(p->flag=1)/寻找需要文件p->flag=0;printf("ntttt文件%s关闭成功.n",n)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论