操作系统原理课程设计-模拟文件系统A-2.doc

上传人:小小飞 文档编号:5022775 上传时间:2020-01-29 格式:DOC 页数:42 大小:351.50KB
返回 下载 相关 举报
操作系统原理课程设计-模拟文件系统A-2.doc_第1页
第1页 / 共42页
操作系统原理课程设计-模拟文件系统A-2.doc_第2页
第2页 / 共42页
操作系统原理课程设计-模拟文件系统A-2.doc_第3页
第3页 / 共42页
操作系统原理课程设计-模拟文件系统A-2.doc_第4页
第4页 / 共42页
操作系统原理课程设计-模拟文件系统A-2.doc_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《操作系统原理课程设计-模拟文件系统A-2.doc》由会员分享,可在线阅读,更多相关《操作系统原理课程设计-模拟文件系统A-2.doc(42页珍藏版)》请在三一文库上搜索。

1、数学与计算机学院 课程设计说明书 课 程 名 称: 操作系统原理-课程设计 课 程 代 码: 8404061 题 目: 模拟文件系统 A-2 年级/专业/班: 09 计科五班 学 生 姓 名: 学 号: 开 始 时 间: 2011 年 12 月 11 日 完 成 时 间: 2011 年 12 月 24 日 课程设计成绩: 学习态度及平 时成绩(30) 技术水平与实际 能力(20) 创新(5)说明书撰写质量(45) 总 分 (100) 指导教师签名: 年 月 日 西华大学数计学院课程设计说明书 目 录 1.1.引引 言言1 1.1 问题的提出 1 1.2 任务与分析.1 2.2.程序的主要功能程

2、序的主要功能2 2.1 改变目录功能.2 2.2 创建文件功能.2 2.3 删除文件功能 2 2.4 创建目录功能.2 2.5 删除目录功能.2 2.6 显示目录功能.2 2.7 剩余空间查询功能.2 2.8 主菜单功能 2 3.3.程序运行平台程序运行平台3 4.4.总体设计总体设计4 5.5.程序数据结构程序数据结构5 6.6.模块分析模块分析6 6.1 改变目录功能模块 6 6.2 创建文件功能模块 8 6.3 删除文件功能模块 10 6.4 创建目录功能模块 11 6.5 删除目录功能模块 13 6.6 显示目录功能模块 15 6.7 剩余空间查询功能模块 18 6.8 主菜单功能模块

3、 18 模拟文件系统 7.7.系统测试系统测试20 7.1 改变目录功能测试 20 7.2 创建文件功能测试 20 7.3 删除文件功能测试 21 7.4 创建目录功能测试 22 7.5 删除目录功能测试 22 7.6 显示目录功能测试 23 7.7 剩余空间查询功能测试 23 7.8 主菜单功能测试 24 8.8.结论结论25 参考文献参考文献26 附附 录录27 西华大学数计学院课程设计说明书 1 1.引 言 1.11.1 问题的提出问题的提出 从计算机的诞生到现在虽然只经历了短短几十年的时间,但无论是在软件还是在 硬件方面,计算机都有着飞跃式的发展。随着计算机应用不断增加,计算机上所需要

4、 存储的数据和程序也日益增多,早期的文件管理方式已经不能满足现在的需要。计算 机操作系统是配置在计算机硬件上的第一层软件,是对硬件的首次扩充。它在计算机 系统中占据了特别重要的地位。操作系统的主要功能是进行处理机管理功能、存储器 管理功能、设备管理功能、文件管理功能,每一个管理功能都是非常重要的。为了进 一步了解文件管理功能,我们在 Windows 2000/XP 环境下,在 U 盘上创建一个数据文 件来模仿微型计算机磁盘存储器,在此基础上建立磁盘文件系统。要求模拟编写系统 命令完成模拟链接存储结构文件系统中的子目录管理,包括创建,删除和访问管理。 1.21.2 任务与分析任务与分析 本课题的

5、主要任务是在 Windows 2000/XP 环境下,在 U 盘上创建一个数据文件来 模仿微型计算机磁盘存储器,在此基础上建立磁盘文件系统。要求模拟编写系统命令 完成模拟链接存储结构文件系统中的子目录管理,包括创建,删除和访问管理。 本课题的具体要求是设计前应复习设计中所涉及的理论知识和算法,针对设计要 求完成基本代码编写并完成预习报告、设计中认真调试所编代码并进行必要的测试、 记录并分析设计结果,设计后认真书写符合规范格式的设计报告,按时上交。 本课题的主要技术路线如下: (1)要求利用结构化或面向对象的方法完成系统的设计; (2)要求在设计的过程中,建立清晰的层次关系; (3)在系统的设计

6、中,尽量采用面向对象的机制。 (4)开发环境:Windows XP 或 Windows 2000 (5)编程语言建议采用 C+,也可以采用其他语言。 (6)数据处理方法: a) 首先应确定文件系统的数据结构等; b) 规划文件系统常见操作的算法; c) 实现完整的程序。 模拟文件系统 2 2.程序的主要功能 2.12.1 改变目录功能改变目录功能 模拟系统改变目录的命令将工作目录改变到指定的合法目录。 2.22.2 创建文件功能创建文件功能 模拟系统创建文件的命令进行在相应的目录中创建指定大小的文件。 2.32.3 删除删除文件功能文件功能 模拟系统删除文件的命令对相应目录中的文件进行删除。

7、2.42.4 创建目录功能创建目录功能 模拟系统创建目录的命令在相应目录中创建新的目录。 2.52.5 删除目录功能删除目录功能 模拟系统删除目录的命令在相应目录中删除其子目录。 2.62.6 显示目录功能显示目录功能 模拟系统显示目录的命令显示文件系统中已有的目录及文件。 2.72.7 剩余空间查询功能剩余空间查询功能 模拟系统剩余空间查询命令对磁盘剩余空间进行查询。 2.82.8 主菜单功能主菜单功能 显示程序的功能菜单,方便用户选择相应的功能。 西华大学数计学院课程设计说明书 3 3.程序运行平台 Micrisoft Visual C+ 6.0 模拟文件系统 4 4.总体设计 模拟文件管

8、理模拟系统 改变 目录 功能 创 建 文 件 功 能 删除 文件 功能 创建 目录 功能 删 除 目 录 功 能 显示 目录 功能 剩余 空间 查询 图 4.1 系统总体框架图 西华大学数计学院课程设计说明书 5 5.程序数据结构 目录和文件的结构定义:目录和文件的结构定义: typedef struct node char name50; /*目录或文件的名字*/ int type; /*0 代表目录,1 代表普通文件*/ struct node *next; /*指向下一个兄弟结点的指针*/ struct node *son; /*指向第一个子结点的指针*/ struct node *fa

9、ther; /*指向父结点的指针*/ int size; /*如果是文件则表示文件的大小*/ dirNode; 全局变量的定义:全局变量的定义: dirNode *workDir; /定义当前工作目录 dirNode root; /定义根目录 long toallsize=10000;/总空间大小 string path1100;/定义路径信息 int K=0;/标记路径位置 int tag;/标记下一个路径与当前路径的关系,1 为子目录,2 为兄弟目录,3 为父目录。 模拟文件系统 6 6.模块分析 6.16.1 改变目录功能模块改变目录功能模块 1. 编写函数 CD 实现目录的改变功能,该

10、函数带一个字符串类型参数,用以表示 想要改变到的目录名。 2. 设计思路:首先根据参数在已有的链表中进行检索,若找到该节点则将工作目 录指针指向找到的节点,若没找到则返回没有该目录。 3. 实现代码: /改变目录 void CD(char dirName) dirNode *p,*s; int flag=0;/标记是否找到指定目录,0 为没找到,1 为已找到 s=p=workDir; p=s-son; while(p) if(p-type=0) if(!strcmp(p-name,dirName) flag=1; tag=1; break; p=p-next; if(flag=0) p=s-n

11、ext; while(p) 西华大学数计学院课程设计说明书 7 if(p-type=0) if(!strcmp(p-name,dirName) flag=1; tag=2; break; p=p-next; if(flag=0 if(p-type=0) if(!strcmp(p-name,dirName) flag=1; tag=3; if(flag=1) workDir=p; if(tag=1) K=K+1; path1K=p-name; coutname; 模拟文件系统 8 coutname; coutname,fileName); q-son=NULL; q-type=1; q-next

12、=NULL; q-father=workDir; q-size=fileSize; toallsize=toallsize-fileSize; 西华大学数计学院课程设计说明书 9 p=workDir-son; if(p=NULL) workDir-son=q; couttype=1) if(!strcmp(p-name,fileName) flag=1; coutnext; if(flag=0) p=workDir-son; while(p-next) p=p-next; p-next=q; coutson; if(p=NULL) couttype=1) if(!strcmp(p-name,f

13、ileName) flag=1; break; p=p-next; if(flag=1) if(p=workDir-son) char choise; coutchoise; if(choise=Y|choise=y) workDir-son=p-next; toallsize=toallsize+p-size; delete p; coutname,dirName); q-son=NULL; q-type=0; q-next=NULL; q-father=workDir; q-size=0; p=workDir-son; if(p=NULL) workDir-son=q; couttype=

14、0) if(!strcmp(p-name,dirName) flag=1; coutnext; 西华大学数计学院课程设计说明书 13 if(flag=0) p=workDir-son; while(p-next) p=p-next; p-next=q; coutson; if(p=NULL) couttype=0) if(!strcmp(p-name,dirName) flag=1; break; p=p-next; if(flag=1) if(p=workDir-son) if(p-son!=NULL) coutchoise; if(choise=Y|choise=y) workDir-so

15、n=p-next; delete p; couttype=0) cout.setf(2); coutname“name“sizenext; /子目录的显示 void dirs(dirNode *p,char str) char newstr100; dirNode *q; coutson) strcpy(newstr,“); strcat(newstr,str); strcat(newstr,“); strcat(newstr,q-name); dirs(q-son,newstr); q=p; while(q-next) if(q-next-son) 模拟文件系统 18 strcpy(news

16、tr,“); strcat(newstr,str); strcat(newstr,“ “); strcat(newstr,q-next-name); dirs(q-next-son,newstr); q=q-next; 6.76.7 剩余空间查询功能模块剩余空间查询功能模块 1用 AVAI 语句模拟系统命令完成对磁盘剩余空间查询功能。 2. 设计思路:设定一个全局变量用以记录系统的总磁盘空间大小,初始值设为 10000,每当新建和删除文件时对全局变量做相应的修改。 6.86.8 主菜单功能模块主菜单功能模块 1编写 MENU 函数实现主菜单的显示功能,该函数不带参数。 2. 实现代码: /显示

17、主菜单函数 void menu() cout #include 西华大学数计学院课程设计说明书 27 #include #include #include using namespace std ; / *目录和文件的结构定义* long toallsize=10000;/总空间大小 typedef struct node char name50; /*目录或文件的名字*/ int type; /*0 代表目录,1 代表普通文件*/ struct node *next; /*指向下一个兄弟结点的指针*/ struct node *son; /*指向第一个子结点的指针*/ struct node

18、 *father; /*指向父结点的指针*/ int size; /*如果是文件则表示文件的大小*/ dirNode; dirNode *workDir; /定义当前工作目录 dirNode root; /定义根目录 string path1100;/定义路径信息 int K=0;/标记路径位置 int tag;/标记下一个路径与当前路径的关系,1 为子目录,2 为兄弟目录,3 为父目录 /初始化函数 void initial() strcpy(root.name,“root“); root.type=0; root.next=NULL; root.son=NULL; root.father=

19、NULL; root.size=0; workDir= path1K=“root“; /初始化新结点函数 dirNode *init() dirNode *p; p=new dirNode; strcpy(root.name,“); root.type=0; root.next=NULL; root.son=NULL; root.father=NULL; 模拟文件系统 28 root.size=0; return p; /1 改变目录 void CD(char dirName) dirNode *p,*s; int flag=0;/标记是否找到指定目录,0 为没找到,1 为已找到 s=p=wo

20、rkDir; p=s-son; while(p) if(p-type=0) if(!strcmp(p-name,dirName) flag=1; tag=1; break; p=p-next; if(flag=0) p=s-next; while(p) if(p-type=0) if(!strcmp(p-name,dirName) flag=1; tag=2; break; p=p-next; if(flag=0 if(p-type=0) if(!strcmp(p-name,dirName) flag=1; tag=3; if(flag=1) workDir=p; if(tag=1) K=K+

21、1; path1K=p-name; coutname; coutname; coutname,fileName); q-son=NULL; q-type=1; q-next=NULL; 模拟文件系统 30 q-father=workDir; q-size=fileSize; if(toallsize-fileSize)son; if(p=NULL) workDir-son=q; couttype=1) if(!strcmp(p-name,fileName) flag=1; coutnext; if(flag=0) p=workDir-son; while(p-next) p=p-next; p

22、-next=q; coutson; if(p=NULL) couttype=1) if(!strcmp(p-name,fileName) flag=1; break; p=p-next; if(flag=1) if(p=workDir-son) char choise; coutchoise; if(choise=Y|choise=y) workDir-son=p-next; toallsize=toallsize+p-size; delete p; couttype=0) cout.setf(2); coutname“name“sizenext; /子目录的显示 void dirs(dirN

23、ode *p,char str) char newstr100; dirNode *q; coutson) strcpy(newstr,“); strcat(newstr,str); strcat(newstr,“); strcat(newstr,q-name); dirs(q-son,newstr); q=p; while(q-next) if(q-next-son) strcpy(newstr,“); strcat(newstr,str); strcat(newstr,“ “); strcat(newstr,q-next-name); dirs(q-next-son,newstr); q=

24、q-next; 西华大学数计学院课程设计说明书 33 / 显示所有目录 void show() dirNode *p; coutname,dirName); q-son=NULL; q-type=0; q-next=NULL; q-father=workDir; q-size=0; p=workDir-son; if(p=NULL) workDir-son=q; couttype=0) if(!strcmp(p-name,dirName) flag=1; coutnext; if(flag=0) p=workDir-son; while(p-next) p=p-next; 模拟文件系统 34

25、p-next=q; coutson; if(p=NULL) couttype=0) if(!strcmp(p-name,dirName) flag=1; break; p=p-next; if(flag=1) if(p=workDir-son) if(p-son!=NULL) coutchoise; if(choise=Y|choise=y) workDir-son=p-next; delete p; cout“; gets(string); 模拟文件系统 36 len=strlen(string); if(len=0) strcpy(command,“errer“); else /获得命令

26、s=NULL; s=strchr(string, ); if(s!=NULL) *s=0; strcpy(command,string); /测试命令类型 if(!strcmp(command,“CD“)|!strcmp(command,“cd“) comm=1; else if(!strcmp(command,“cre“)|!strcmp(command,“CRE“) comm=2; else if(!strcmp(command,“DEL“)|!strcmp(command,“del“) comm=3; else if(!strcmp(command,“show“)|!strcmp(com

27、mand,“SHOW“) comm=4; else if(!strcmp(command,“MD“)|!strcmp(command,“md“) comm=5; else if(!strcmp(command,“RD“)|!strcmp(command,“rd“) comm=6; else if(!strcmp(command,“EXIT“)|!strcmp(command,“exit“) comm=0; else if(!strcmp(command,“AVAI“)|!strcmp(command,“avai“) comm=7; 西华大学数计学院课程设计说明书 37 else comm=10

28、0; switch(comm) case 1: /1 改变目录 strcpy(name,s+1); CD(name); break; case 2: /2 创建文件 s1=strchr(s+1, ); *s1=0; strcpy(name,s+1); fileSize=atoi(s1+1); cre(name,fileSize); break; case 3: /3 删除文件 strcpy(name,s+1); DEL(name); break; case 4: /4 显示目录 show(); break; 模拟文件系统 38 case 5: /5 创建目录 strcpy(name,s+1); MD(name); break; case 6: /6 删除目录 strcpy(name,s+1); RD(name); break; case 7: /8 显示剩余磁盘空间 cout“磁盘总大小为:10000“endl; cout“剩余磁盘空间大小为:“toallsizeendl; break; case 0: /0 退出系统 flag=0; cout“* 感谢使用本系统 ! *“endl; break; default: cout“命令错误“endl;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1