《广工-操作系统-课程设计-源代码(共64页).doc》由会员分享,可在线阅读,更多相关《广工-操作系统-课程设计-源代码(共64页).doc(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上课 程 设 计 课程名称_操作系统 _ _ 题目名称_多用户多级目录文件系统的实现_ 学生学院_计算机学院_专业班级_ _学 号_ _ 学生姓名_ _ 指导教师_林穗_ 2011年 1月 18日广东工业大学课程设计任务书题目名称多用户多级目录文件系统的实现学生学院计算机学院专业班级08软件工程一班姓 名 学 号 一、课程设计的内容本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 二、课程设计的要求与数据1 在内存中开辟一个虚拟磁盘空间作为文件存储器,在
2、其上实现一个多用户多目录的文件系统。2 文件物理结构可采用显式链接或其他方法。3 磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。4 文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。5 设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建: create(4)文件
3、的打开:open(5)文件的读: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日 基层教学单位
5、责任人签章:滕少华目录i. 设计目的ii. 开发工具与环境iii. 设计思想iv. 系统结构说明v. 数据结构说明vi. 各模块的算法流程图1、程序总体源流程图2、主要模块的算法流程图3、函数声明vii. 程序运行及清单1、用户管理操作界面2、文件管理操作界面3、主要核心源代码viii. 操作说明书 1、用户管理使用手册 2、文件操作管理使用手册ix. 体会和建议i. 设计目的本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。 ii. 开发工具与环境a)程序设计语言:C语言b)计
6、算机及操作系统:PC机,WindowsXPc)开发平台:Microsoft Visual C+ 6.0简化版d)运行平台:PC机,WindowsXPiii. 设计思想课程设计采用Microsoft Visual C+ 6.0简化版作为开发工具,参照了windows资源管理器的结构,模拟文件管理的工作过程,通过创建一棵多叉树,及对这棵多叉树的操作,建立了一个树型文件系统,实现了文件和文件夹的创建,打开,读写,删除,关闭,复制,粘贴,查看,属性设置等十来个功能。操作界面简单明了,操作方便。iv. 系统结构说明模拟文件管理系统可以自行设置多个用户进行管理操作,当选择已有用户时便可进入其文件管理菜单进
7、行相应的操作(有界面提示功能),当进入系统已建立的某个用户时,可以创建用户自己的文件夹或文件,当flag0时为创建文件,flag1时创建文件夹(这里设置了标志位)。文件除了名称和打开标志外,还可对他们的访问权限、文件类型和文件长度进行设置(长度设置主要在写入文件时会用到);而文件夹则可以设置访问权限等,打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的链表中包括文件夹名称及其地址等;对文件的管理包含复制、打开、关闭、写入、读出、粘贴、新建文件(夹)、删除文件(夹)和显示文件(夹)等等,为方便操作还设置了各功能操作(如进入下一级、返回上一级、返回初始菜单、直接退出等等)。下面的系统结
8、构说明图示:其中P表示parent指针,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;
9、LIST *list; struct usd *next;vi. 各模块的算法流程图1. 程序总体流程图开 始显示用户管理菜单输入操作命令退出系统帮助文档系统时间列出用户选择用户删除用户新建用户结束程序显示文件管理菜单输入操作命令直接退出系统帮助与支持返回上一级文件夹进入下一级文件夹显示当前路径文件/夹粘贴文件复制文件关闭文件写入文件读出文件打开文件删除文件夹新建文件夹新建文件返回用户管理菜单删除文件结束程序 2. 主要模块的算法流程图1) 创建用户模块:2) 删除用户3) 创建文件(夹)4) 删除文件夹5) 复制文件3. 函数声明void displayusermenu();/用户管理界面菜
10、单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,int flag);/删除文件(
11、夹)void openfile();/打开文件void readfile(); /读取文件void writefile(); /写入文件void closefile();/关闭文件void next();/下一层文件夹void back();/上一层文件夹void copyfile();/复制文件void pastedfile();/粘贴文件void quit();/直接退出系统vii. 程序运行及清单系统界面简洁美观实用,用户无须输入过长指令就可以完成操作。本系统还附带操作指南,用户如有疑问可查看指南说明。虽不如可视化易操作,但也不难。1、 用户管理操作1) 程序登陆界面2) 程序开始界面(
12、即用户管理界面)3) 新建用户4) 列出用户5) 删除用户6) 系统日期时间7) 帮助文档8) 退出系统9) 选择用户输入用户名(若系统无此用户会有提示)按回车后即进入文件操作界面。 2、对文件管理操作1) 进入用户后对文件操作初始界面2) 新建文件3) 新建文件夹4) 显示当前路径文件(夹)5) 删除文件文件存在时 6) 删除文件夹文件夹存在时 7) 打开文件文件存在时 8) 读出文件文件需要先置于打开状态,方可读取由于没有输入内容所以文件内容为空。9) 写入文件10) 读出刚才写入的内容11) 关闭文件12) 复制文件(先将刚才关闭的文件aa1打开再复制)如果输入的文件名不存在该用户中时会
13、有提示信息专心-专注-专业3、主要核心源代码(见电子版) #include #include #include #include #include #include #include stdlib.h#define NULL 0#define get(type) (type *)malloc(sizeof(type)/分配空间typedef struct list LIST;struct listchar listname10;/ 文件名长度int type;int length;/ 文件长度int protect;/ 保护模式,0为只读,1为可读写int flag;/ 标志,为0时创建文件夹
14、,为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();/ 系统登陆界面void time();/ 系统时间void displayfilemenu();/ 文件管理界面菜单void creatuser();/ 新建用户
15、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 openfile();/ 打开文件void readfile();/ 读取文件void writefile();/
16、 写入文件void closefile();/ 关闭文件void next();/ 下一层文件夹void back();/ 上一层文件夹void copyfile();/ 复制文件void pastedfile();/ 粘贴文件void quit();/ 直接退出系统USD *user=NULL,*currentuser=NULL;LIST *list=NULL,*currentlist=NULL,*copylist=NULL;void displayusermenu()/ 显示用户菜单system(cls);/ 清屏int button;printf(nnttt欢迎使用多用户多级目录文件系统
17、nn);printf(tt计算机学院tt软件工程1班nn);printf(tt tt nnn);printf(tt1、新建用户n);printf(tt2、删除用户n);printf(tt3、选择用户n);printf(tt4、列出用户n);printf(tt5、系统时间n);printf(tt6、帮助文档n);printf(tt7、退出系统nn);printf(tt请按功能选择操作:);scanf(%d,&button); switch(button) case 1: creatuser(); break;/ 创建新用户 case 2: deleteuser(); break;/ 删除用户 c
18、ase 3: selectuser(); displayfilemenu(); break;/ 选择一个用户 case 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欢迎再次使用!n
19、n); getch(); exit(0); break; default : printf(nnttt你的输入有误!请重新输入!n); getch(); displayusermenu(); break;/ 输入非上述数字重新输入void displayfilemenu() / 显示文件管理操作菜单system(cls); / 清屏int choice;LIST *p=currentlist;printf(ntt %s你好,欢迎进入文件管理系统 n,currentuser-username);/提示信息printf(n 当前的文件路径:);/ 接入目录地址doprintf(listname);
20、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-username);l-next=NULL;l-type=1;l-parent=NULL;l-child=NULL;p-list=l;p-next=NULL;if(user=NULL)user=p; / 若user
21、为空,则把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-next;if(strcmp(p-username,q-username)=0)/检查提示重名并提示信息printf(nttt该用户已经存在!无法
22、创建该用户!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;case n:displayusermenu();break; case N:displayusermenu();break;default :displayusermenu();break;void delete
23、user() /删除用户 char n10;USD *p=user,*pre=NULL;displayuser();if(!p)printf(ntttt系统无用户可删除!n); /P为空,报错,必须先创建一个用户getchar();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-
24、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() /选择用户 char n10;USD *p=user;displayuser();if(!p)printf(nttt该用户不存在!请确认用户名是否正确!); /没有用户getchar();getchar();system(
25、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);return;elsep=p-next; if(p=NULL) /找不到用户printf(nntttt该用户不存在!);getchar();sy
26、stem(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请输入新建文件名: ); /输入文件名else printf(ntttt创建一个新文件夹n); printf(ntttt请输入新建文件夹名: ); /输入文件名scanf(%s,temp-listname);while(q!=
27、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)?: );scanf(%d,&temp-protect);if(temp-protect!=0&temp-protect!=1) printf(nnttt你的选择有误!请重新输入(0/1)?: );scanf(%d,&te
28、mp-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-next=NULL;temp-parent=currentlist;if(p=NULL) qq-child=temp;else while(p-next!=NULL)p=p-next;p-next=temp; getch
29、ar();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); printf(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