《广工_操作系统_课程设计报告_源代码.doc》由会员分享,可在线阅读,更多相关《广工_操作系统_课程设计报告_源代码.doc(49页珍藏版)》请在课桌文档上搜索。
1、-课 程 设 计课程名称_操作系统 _ 题目名称_多用户多级目录文件系统的实现_ 学生学院_计算机学院_专业班级_学 号_学生_指导教师_一、课程设计的容本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理构造、目录构造和文件操作的实现,加深对文件系统部功能和实现过程的理解。二、课程设计的要求与数据1 在存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。2 文件物理构造可采用显式或其他方法。3 磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式分配方式,那么可以将位示图合并到FAT中。4
2、文件目录构造采用多用户多级目录构造,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,那么难度系数为1.2。5 设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:1具有login (用户登录)2系统初始化建文件卷、提供登录模块3文件的创立: create4文件的翻开:open5文件的读:read6文件的写:write7文件关闭:close8删除文件:delete 9创立目录建立子目录:mkdir10改变当前目录:cd11列出文件目录:dir12退出:logout6 系统必须可实际演示,选用
3、程序设计语言:C、C等。三、课程设计应完成的工作1充分理解设计的任务,完成设计的根本要求。然后根据自己的根底和能力选择不同难度的算法和实现方式,以取得更高的分数。 2. 独立独立完成系统的分析、设计、编码、测试工作。3完成设计报告的撰写。4以光盘以班为单位刻录方式提交已调试通过的完整的相关源程序和能够运行的执行文件;提交课程设计报告的书面和电子两种版本。四、课程设计进程安排序号设计各阶段容地点起止日期1查阅资料、分析题目、概要设计分散周一2详细设计、编码分散周二3调试实验室周三4撰写设计报告分散周四5运行、验收实验室周五五、应收集的资料及主要参考文献1计算机操作系统, 汤小丹等 ,电子科技大学
4、2操作系统实验指导书,傅秀芬,工业大学自编3 计算机操作系统教程 ( 第二版 ), 尧学、 史美林,清华大学4 现代操作系统,A.S.Tanenbaum 著,向群等译机械工业发出任务书日期:2010年12月22日 指导教师签名:林穗方案完成日期: 2011年1月21日 基层教学单位责任人签章:滕少华目录i. 设计目的ii. 开发工具与环境iii. 设计思想iv. 系统构造说明v. 数据构造说明vi. 各模块的算法流程图1、程序总体源流程图2、主要模块的算法流程图3、函数声明vii. 程序运行及清单1、用户管理操作界面2、文件管理操作界面3、主要核心源代码viii. 操作说明书1、用户管理使用手
5、册2、文件操作管理使用手册ix. 体会和建议i. 设计目的本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理构造、目录构造和文件操作的实现,加深对文件系统部功能和实现过程的理解。ii. 开发工具与环境a程序设计语言:C语言b计算机及操作系统:PC机,WindowsXPc开发平台:Microsoft Visual C+ 6.0简化版d运行平台:PC机,WindowsXPiii. 设计思想课程设计采用Microsoft Visual C+ 6.0简化版作为开发工具,参照了windows资源管理器的构造,模拟文件管理的工作过程,通过创立一棵多叉树,及对这棵
6、多叉树的操作,建立了一个树型文件系统,实现了文件和文件夹的创立,翻开,读写,删除,关闭,复制,粘贴,查看,属性设置等十来个功能。操作界面简单明了,操作方便。iv. 系统构造说明模拟文件管理系统可以自行设置多个用户进展管理操作,中选择已有用户时便可进入其文件管理菜单进展相应的操作有界面提示功能,当进入系统已建立的某个用户时,可以创立用户自己的文件夹或文件,当flag0时为创立文件,flag1时创立文件夹这里设置了标志位。文件除了名称和翻开标志外,还可对他们的访问权限、文件类型和文件长度进展设置长度设置主要在写入文件时会用到;而文件夹那么可以设置访问权限等,翻开文件列表的构造体包括文件名和文件的父
7、节点地址,翻开文件夹的链表中包括文件夹名称及其地址等;对文件的管理包含复制、翻开、关闭、写入、读出、粘贴、新建文件夹、删除文件夹和显示文件夹等等,为方便操作还设置了各功能操作如进入下一级、返回上一级、返回初始菜单、直接退出等等。下面的系统构造说明图示:其中P表示parent指针,C表示child指针,N表示next指针v. 数据构造说明该模拟文件管理系统的文件目录检索采用简单的线性搜索,系统所采用的数据构造:typedef struct list LIST;struct listchar listname10;int type;int length;int protect;int flag;c
8、har *content;struct list *parent;struct list *child;struct list *next;typedef struct usd USD;struct usdchar username10;LIST *list; struct usd *next;vi. 各模块的算法流程图1. 程序总体流程图开 始显示用户管理菜单输入操作命令退出系统帮助文档系统时间列出用户选择用户删除用户新建用户完毕程序显示文件管理菜单输入操作命令直接退出系统帮助与支持返回上一级文件夹进入下一级文件夹显示当前路径文件/夹粘贴文件复制文件关闭文件写入文件读出文件翻开文件删除文件夹
9、新建文件夹新建文件返回用户管理菜单删除文件完毕程序2. 主要模块的算法流程图1) 创立用户模块:2) 删除用户3) 创立文件(夹)4) 删除文件夹5) 复制文件3. 函数声明void displayusermenu();/用户管理界面菜单void time();/系统时间void displayfilemenu();/文件管理界面菜单void creatuser();/新建用户void deleteuser();/删除用户void displayuser();/显示用户void userhelp();/用户管理帮助void filehelp();/文件管理帮助void selectuser()
10、;/选择用户void displaylist();/显示文件或者文件夹void creatfile(LIST *qq,int flag);/创立文件(夹)void deletefile(LIST *qq,int flag);/删除文件(夹)void openfile();/翻开文件void readfile(); /读取文件void writefile(); /写入文件void closefile();/关闭文件void next();/下一层文件夹void back();/上一层文件夹void copyfile();/复制文件void pastedfile();/粘贴文件void quit(
11、);/直接退出系统vii. 程序运行及清单系统界面简洁美观实用,用户无须输入过长指令就可以完成操作。本系统还附带操作指南,用户如有疑问可查看指南说明。虽不如可视化易操作,但也不难。1、 用户管理操作1) 程序登陆界面2) 程序开场界面即用户管理界面3) 新建用户4) 列出用户5) 删除用户6) 系统日期时间7) 帮助文档8) 退出系统9) 选择用户输入用户名假设系统无此用户会有提示按回车后即进入文件操作界面。2、对文件管理操作1) 进入用户后对文件操作初始界面2) 新建文件3) 新建文件夹4) 显示当前路径文件夹5) 删除文件文件存在时 6) 删除文件夹文件夹存在时 7) 翻开文件文件存在时
12、8) 读出文件文件需要先置于翻开状态,方可读取由于没有输入容所以文件容为空。9) 写入文件10) 读出刚刚写入的容11) 关闭文件12) 复制文件先将刚刚关闭的文件aa1翻开再复制如果输入的文件名不存在该用户中时会有提示信息. z.-3、主要核心源代码见电子版. z.-#include #include #include #include #include #include #include stdlib.h#define NULL 0#define get(type) (type *)malloc(sizeof(type)/分配空间typedef struct list LIST;struc
13、t listchar listname10;/ 文件名长度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()
14、;/ 用户管理界面菜单void login();/ 系统登陆界面void time();/ 系统时间void displayfilemenu();/ 文件管理界面菜单void creatuser();/ 新建用户void deleteuser();/ 删除用户void displayuser();/ 显示用户void userhelp();/ 用户管理帮助void filehelp();/ 文件管理帮助void selectuser();/ 选择用户void displaylist();/ 显示文件或者文件夹void creatfile(LIST *qq,int flag);/ 创立文件(夹)
15、void deletefile(LIST *qq,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=
16、NULL,*copylist=NULL;void displayusermenu()/ 显示用户菜单system(cls);/ 清屏int button;printf(nnttt欢送使用多用户多级目录文件系统nn);printf(tt计算机学院tt软件工程1班nn);printf(tt ttnnn);printf(tt1、新建用户n);printf(tt2、删除用户n);printf(tt3、选择用户n);printf(tt4、列出用户n);printf(tt5、系统时间n);printf(tt6、帮助文档n);printf(tt7、退出系统nn);printf(tt请按功能选择操作:);sc
17、anf(%d,&button); switch(button) case 1: creatuser(); break;/ 创立新用户 case 2: deleteuser(); break;/ 删除用户 case 3: selectuser(); displayfilemenu(); break;/ 选择一个用户 case 4: displayuser();/ 显示用户 getchar(); getchar(); displayusermenu(); break; case 5: system(cls);/系统时间显示 time(); displayusermenu(); break; cas
18、e 6: userhelp();/ 帮助 getch(); displayusermenu(); break; case 7: system(cls);/ 退出 printf(nnntttt欢送再次使用!nn); getch(); exit(0); break; default : printf(nnttt你的输入有误!请重新输入!n); getch(); displayusermenu(); break;/ 输入非上述数字重新输入void displayfilemenu() / 显示文件管理操作菜单system(cls); / 清屏int choice;LIST *p=currentlist
19、;printf(ntt %s你好,欢送进入文件管理系统 n,currentuser-username);/提示信息printf(n 当前的文件路径:);/ 接入目录地址doprintf(listname);p=p-parent;while(p!=NULL);printf(tt格式:子目录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-user
20、name);l-next=NULL;l-type=1;l-parent=NULL;l-child=NULL;p-list=l;p-next=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();s
21、ystem(cls); displayusermenu();q=q-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:creatuser();break;case Y:creatuser();break;c
22、ase 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为空,报错,必须先创立一个用户getchar();getchar();system(cls); displayusermenu();printf(nntttt请输入要删除的用户名:);scanf(%s,n)
23、;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);break;elsepre=p;p=p-next;if(p=NULL) /找不到用户printf(nnttt找不到该用户!请确认该用户是否存在!n);getchar();getchar();system(cls); displayusermenu();void selectuser() /选择
24、用户 char n10;USD *p=user;displayuser();if(!p)printf(nttt该用户不存在!请确认用户名是否正确!); /没有用户getchar();getchar();system(cls); displayusermenu();printf(ntttt选择一个用户);printf(nntttt请输入用户名:);scanf(%s,n); /输入用户名while(p!=NULL)if(strcmp(p-username,n)=0) /逐个比拟寻找用户currentuser=p; /找到对应用户,那么把currentuser指向该用户currentlist=p-l
25、ist;printf(%sn,currentlist-listname);return;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(ntttt请输入新
26、建文件名: ); /输入文件名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=NULL;printf(ntt文件属性: 0、只读Readtt1、读和写Read&Write); /设置保护模式printf(nnttt请根据提示选择保护模式(0/1):
27、);scanf(%d,&temp-protect);if(temp-protect!=0&temp-protect!=1) printf(nnttt你的选择有误!请重新输入(0/1): );scanf(%d,&temp-protect);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-nex
28、t=NULL;temp-parent=currentlist;if(p=NULL) qq-child=temp;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); pri
29、ntf(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(nntttt文件%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); free(p); break; else