




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录1 设计目的12 设计内容13 设计步骤13.1 开发平台13.1.1 开发环境介绍13.1.2 开发界面截图23.2 详细设计23.2.1 算法说明23.2.2 系统流程图43.3 运行与测试43.3.1 运行测试43.3.2 异常处理测试73.4使用说明94 设计总结105 附录101 设计目的(用小3号黑体,并留出上下间距为:段前0.5行,段后0.5行)操作系统概论学习已经快结束了,通过本课程,了解了操作系统的发展,组成,处理器管理,存储管理,文件管理,设备管理,并发进程等相关知识。理论必须与实际联系,才能理解的更加深刻,所以进行了这次课程设计,制作一个文件模拟系统的程序,加深对相
2、关知识的理解与运用。2 设计内容本设计应完成以下要求:1设计一个10个用户的文件系统,用户至少有Create、delete、open、close、read、write等文件操作命令。2程序采用多级文件目录管理,仅可能模拟文件存取的全过程。3 设计步骤3.1 开发平台3.1.1 开发环境介绍我们采用了C语言来并在Visual Studio 2005平台实现。.NET Framework是生成、运行下一代应用程序和XML Web Services的内部Windows组件。它简化了分布式Internet环境中的应用程序开发,由公共语言运行库(CLR)和.NET Framework类库两个组件构成。V
3、isual Studio 2005 是微软公司开发的集成开发环境,支持C、C+、VB、J#、C#等多种开发语言,界面友好,并有自动补全代码功能,便于调式,是当前最流行的.NET Framework开发工具。安装Visual Studio 2005的系统要求:硬件需求描述处理器Pentium3级600MHZ以上处理器RAMWindows XP Professional至少为160MB硬盘对于Visual C#.NET、Visual Basic.NET,需要600MB硬盘空间,安装驱动器上需要1.5GB磁盘空间视频800*600像素,256色(建议:增强色16位)鼠标Microsoft鼠标或兼容的
4、指针设备3.1.2 开发界面截图3.2 详细设计3.2.1 算法说明用户登录时要输入用户名和密码,如果正确则进入初始界面,默认只有十个用户。用户登录成功后,可以使用的命令列表如下(命令不区分大小写): Create:创建一个新的文件;如果文件名空,则提示出错; Open: 打开一个已经存在的文件;如果该文件不存在,则提示出错; Read: 读取目标文件中的内容;如果目标文件不存在,则提示出错; Write: 向目标文件写入内容;如果目标文件不存在,则提示出错; Delete:删除目标文件;如果目标文件不存在,则提示出错; Mkdir:创建一个新的文件夹;如果目录名空,则提示出错; Cd: 改变
5、当前路径,转到目标目录下;入股目标目录不存在,则提示出错; Dir: 列出当前目录下文件; Copy: 把文件或目录由源地址拷贝到目标地址; Logout:推出文件管理系统;文件目录的检索使用了简单的线性搜索,文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为0,则表示不允许读写、执行。体现在工程开发中,我们建立了头文件:myHead.h,用以存放程序中用到的结构体定义和全局变量定义;代码主文件:myFileSys.cpp,存放程序主要代码。程序中使用的主要设计结构如下:1一个文件索引结构typedef struct unsigned Index;/文件元素索引编号char F
6、ileNameMAXFILENAMELEN;/文件元素名char ParentNameMAXFILENAMELEN; /父节点名unsigned FileBlockId;/文件元素所在物理块编号unsigned FileLevel;/文件元素所在层次,层文件元素名为一个文件元素的逻辑位置unsigned effect;/是否有效,-无效,-有效 FileIndexElement;2、文件状态结构typedef enumclosed, /已被关闭opened, /已被打开reading, /正在被读取writing /正在被写入 FileStatus;3、文件系统中的元素结构,包括文件和文件夹t
7、ypedef struct fsestruct fse *parent;/指向自己的父亲节点unsigned FileLevel;/文件元素所在层次,层文件元素名为一个文件元素的逻辑位置char FileNameMAXFILENAMELEN;/文件元素名unsigned FileBlockId;/文件元素所在物理块编号unsigned FileElemLen;/文件元素的长度FEType Type;/文件元素类型FEAccess Access;/文件元素可供操作的权限User Creator;/文件创建者char CreateTime18;/创建时间,日期格式:MM/DD/YY HH:MI:S
8、Schar LastModTime18;/最后一次修改时间char *FileData;/一个文件的数据开始地址,文件夹时该值为NULLFileStatus fileStu;/如果是一个文件表示文件当前的状态 FSElement;3.2.2 系统流程图3.3 运行与测试3.3.1 运行测试运行Debug目录下的myFileSys.exe可执行文件,运行成功,显示欢迎界面并帮助信息,如下图:系统默认了十个普通用户:user1,user2,user3,user4,user5,user6,user7,user8,user9,user10。所有用户密码与其用户名相同。输入正确的用户名和密码,单击回车键
9、就可以进入文件模拟系统,以用户user1为例,下面显示user1登录成功,如下图:用create命令创建test文件夹,用cd命令进入test文件夹,如下图:用create命令创建三个文件:1.txt,2.txt,3.txt。用dir命令列出当前目录下文件和文件夹如下:用open命令打开1.txt文件,用write命令写入信息,用close命令关闭1.txt文件。用logout命令退出系统,界面如下:运行测试表明,正常输入各项操作指令后,程序均正常运行并显示出预期结果,程序运行成功。3.3.2 异常处理测试键入错误的用户名或者错误的密码后,登陆失败并提示重新输入,如下图:用cd命令进入一个不存
10、在文件夹发生错误,界面如下:删除一个不存在的文件而发生错误,界面如下:文件没有打开的情况下,使用read命令读取或者使用write命令写入导致错误,界面如下:在上面的异常测试中,输入非法的指令后,系统能辨别并能给出相应的出错提示信息,表明系统具有一定的健壮性。3.4使用说明1、双击debug文件夹中的myFileSys.exe可执行程序,启动模拟界面。2、输入用户名和密码,单击回车键,如果通过验证,则进入系统。3、输入create books命令,可以建立一个名为books的文件夹。输入create 1.txt命令可以创建一个名为1.txt的文本文件(文件名和文件夹名字随意)。4、创建的文件夹
11、和文件可以通过dir命令在当前目录下面显示出来。5、输入open 1.txt命令,可以打开1.txt文本文件,只有打开的文件才能写入数据。6、输入write 1.txt命令。可以在1.txt文件中写入数据,例如写入:my name isZheng!按ctrl+D可以保存输入的信息。7、输入read 1.txt命令,可以查看该文件中的信息。8、输入close 1.txt命令,则可以关闭该文件9、输入cd books命令,可以进入books文件夹。10、输入logout,则注销当前用户了。4 设计总结本文件系统中,用户可以用到的指令包括:create, open, read, write, clo
12、se, delete, cd, dir, logout, copy等十一个文件操作指令,实现了基本的文件管理的相关功能。通过这次课程设计。对Visual Studio 2005和.NET Framework有了进一步的了解,熟悉了相关软件和技术的使用。在设计要求中,只要完成10个用户模拟,并对文件结构作了简化,我们对此作了扩充,除了默认用户10个和1个特权用户,每个用户创建文件数目没有限制,文件的模拟也是从底层的块开始。我做的这个文件管理模拟系统还存在一些不足:控制台形式的界面,对用户来说不够友好,应当继续开发出窗体界面。程序代码还有锤炼的空间,可以进一步进行研究,增加代码的执行效率,提升程序
13、的功能。通过本课程设计的课题研究、资料查询、代码编写、调试运行、测试总结等过程的进行,使自己对计算机操作系统的文件系统的管理方式有了进一步的理解,加深了对文件系统的工作原理的认识,使理论知识更加巩固。5 附录全局变量声明:const unsigned FILESYSCAP = 1024 * 1024;/模拟文件系统的容量设为Mconst unsigned BITMAPLEN = 64;/位示图的长度const unsigned FILEBLOCKCAP = 512;/一个文件块的大小const unsigned FILEBLOCKCOU = 512;/文件系统中文件块的数量const unsi
14、gned MAXFILENAMELEN = 11;/最长文件名的长度const unsigned MAXPASSWORDLEN = 11;/用户密码的最大长度const unsigned USERTESTLOGINCOU = 5;/用户登录尝试次数const unsigned COMMANDMAXLEN = 200;/命令行最大长度const unsigned PROSETCOMMCOU = 11;/预设命令数const char *PROSETCOMM = create, open, read, write, close, delete, mkdir, cd, dir, logout, co
15、py;创建文件函数:FSElement * CreateFileElement()实现:void Create(char *filename)if (strcmp(filename, ) = 0)printf(对不起,文件名不能为空。n);elseCreateFileElement(protect, filename, file, NULL, CS.CurrParent);printf(%s %sn$, CS.CurrentUser.UserName, CS.CurrentPath);初始化文件系统函数:InitFileSys()实现:/初始化模拟的文件系统if (FS.FSStart = (
16、char *)malloc(FILESYSCAP) = NULL)return false;FS.FileSystemCap = FILESYSCAP;FS.bm.BitMapLen = BITMAPLEN;FS.bm.BMStart = FS.FSStart;/设置位示图为未使用memset(FS.bm.BMStart, 0, FS.bm.BitMapLen);/初始化文件系统索引FS.FI.FIStart = (FileIndexElement *)(FS.FSStart + BITMAPLEN);/因为是模拟系统,暂定一个文件或文件夹最多占用一个文件块,一个文件块只放一个文件元素FS.F
17、I.FILen = sizeof(FileIndexElement) * FILEBLOCKCOU + sizeof(unsigned) * 2;FS.FI.FICount = 0;memset(FS.FI.FIStart, 0, FS.FI.FILen);/初始化文件块FS.FileBlockCou = FILEBLOCKCOU;FS.head = CreateFileBlockList(FS.FSStart + FILESYSCAP - FILEBLOCKCAP * FILEBLOCKCOU), FILEBLOCKCAP, FS.FileBlockCou);/区域的后FILEBLOCKCA
18、P * FILEBLOCKCOU个单元用来存储数据if (FS.head = NULL)return false;/初始化系统当前状态CS.CurrentUser.UserName = (char *)calloc(10,sizeof(char);strcpy(CS.CurrentUser.UserName, man);CS.CurrentUser.ut = admin;CS.CurrParent = NULL;CS.FileLevel = 0;CS.CurrentPath = (char *)calloc(1000, sizeof(char);/创建一个根目录base = CreateFil
19、eElement(pub, root, dir, NULL, NULL);if (base = NULL)return false;elsereturn true;登录验证函数:Login()实现如下:char username10;char passwordMAXPASSWORDLEN;int c;for (c = 0; c USERTESTLOGINCOU; c+)int i = 0;memset(password, 0, MAXPASSWORDLEN);memset(username, 0, 10);printf(请输入用户名:);gets(username);printf(请输入密码:
20、);while (i = USERTESTLOGINCOU)/非法用户printf(n对不起,您不是该系统用户,按任意键退出系统。n);return false;elsereturn true;列出当前目录的文件和文件夹函数:Dir(char *path)实现如下:char display1000;memset(display, 0, 1000);/查找显示内容for (unsigned i = 0; i FileName) = 0 & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1)strcat(disp
21、lay, FS.FI.FIStarti.FileName);strcat(display, tt);printf(n%sn, display);printf(%s %sn$, CS.CurrentUser.UserName, CS.CurrentPath);创建一个文件夹函数:Mkdir(char *filename)实现如下:if (strcmp(filename, ) = 0)printf(对不起,文件夹名不能为空。n);elseCreateFileElement(protect, filename, dir, NULL, CS.CurrParent);printf(%s %sn$, CS
22、.CurrentUser.UserName, CS.CurrentPath);进入一个文件夹函数:Cd(char *path)实现如下:int splitDisplayCou = 0;/分割符出现的次数if(strcmp(path, .) = 0)if (CS.FileLevel 0)CS.FileLevel-;CS.CurrParent = CS.CurrParent-parent;unsigned i;for ( i = strlen(CS.CurrentPath) - 1; i 0; i-)if (CS.CurrentPathi = )splitDisplayCou+;if (split
23、DisplayCou = 2)/已过滤掉最后一个目录名break;char temppath1000 ;strcpy(temppath, CS.CurrentPath);memset(CS.CurrentPath, 0, 1000);strncpy(CS.CurrentPath, temppath, i+1);elseelsechar display100 = ;for (unsigned i = 0; i FileName) = 0 & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 &strcmp(FS
24、.FI.FIStarti.FileName, path) = 0)strcpy(display, 文件存在。n);CS.CurrParent = (FSElement *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);CS.FileLevel+;strcat(CS.CurrentPath, path);strcat(CS.CurrentPath, );break;if (strcmp(display, ) = 0)/文件夹不存在,什么都不做printf(当前目录下没有您要进入的文件夹。n);printf(%s %sn$, CS.CurrentUs
25、er.UserName, CS.CurrentPath);读取当前目录文件函数:Read(char *path)实现如下:char displayFILEBLOCKCAP;for (unsigned i = 0; i FileName) = 0 & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 &strcmp(FS.FI.FIStarti.FileName, path) = 0)FSElement *fselem = (FSElement *)FindBlankFileBlock(FS.FI.FIStar
26、ti.FileBlockId);if (fselem-fileStu = closed)strcpy(display, 文件尚未打开,请先打开文件。n);elseif (fselem-FileData = NULL | strcmp(fselem-FileData, ) = 0)strcpy(display, 文件无内容。n);elsestrcpy(display, fselem-FileData);fselem-fileStu = reading;break;if (strcmp(display, ) = 0)strcpy(display, 当前目录下没有您要打开的文件。n);printf(
27、n%sn, display);printf(%s %sn$, CS.CurrentUser.UserName, CS.CurrentPath);写当前目录文件函数:Write(char *path)实现如下:char displayFILEBLOCKCAP;memset(display, 0, FILEBLOCKCAP);for (unsigned i = 0; i FileName) = 0 & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 &strcmp(FS.FI.FIStarti.FileName
28、, path) = 0)FSElement *fselem = (FSElement *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);if (fselem-fileStu = closed)strcpy(display, 文件尚未打开,请先打开文件。n);elseprintf(n注意:文件最大不可以超过%d 字节!按CTRL+D结束编辑。n, FILEBLOCKCAP - sizeof(FSElement);char c;int i = 0;while (c = getchar() != 0x04)displayi+ = c;getchar();/处理回车displayi = 0;strcpy(fselem-FileData, display);unsigned len = strlen(display) FileData, display, len);fselem-fileStu = writing;strcpy(display, 文件写入成功。n);break;printf(n%sn, display);printf(%s %sn$, CS.CurrentUser.UserName, CS.CurrentPath);命令判别函数:CommandTrans
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 产品总代理销售合同书
- 电商运营实战指南
- 校园安全隐患教育
- 教育机构品牌建设与管理手册
- 经济学宏观微观知识点试题及答案
- 美容美发技术与实践作业指导书
- 行政专业培训课件
- 学校安全工作与应急管理计划
- 亲子关系对幼儿心理健康的重要性计划
- 制定财务审计流程与时间表计划
- 小学生三年级家长会课件
- 胸腔闭式引流护理-2023年中华护理学会团体标准
- 第二届全国物流设计大赛一等奖作品:北京交通大学一队全国决赛作品
- 全飞秒激光技术
- 水泥产品生产许可证实施细则
- ABB变频器ACS510说明书
- 城轨道交通接触网检修工职业标准
- QC成果减少隧道工程Ⅳ类Ⅴ类围岩超挖量
- LY/T 1763-2008沿海防护林体系工程建设技术规程
- 校园网站设计论文
- GB/T 17213.4-2015工业过程控制阀第4部分:检验和例行试验
评论
0/150
提交评论