课程设计课程名称计算机操作系统题目名称模拟文件系统专业班级2014级计算机科学与技术(专升本)班学生姓名宋欢乐、张焕、范孝礼学号51402111042、51402111038、51402111043 指导教师邹青青二○一四年十二月二十日目录1、引言 (2)2、需求分析 (3)3、概要设计 (4)3.1 系统的主要功能 (4)(1) 主界面 (4)(2) Create 建立文件 (5)(3)Read 读取文件 (6)(4)Write 写入文件 (7)(5)Delete 删除文件 (9)(6)Mkdir 建立目录 (10)(7)Cd 切换目录 (11)(8)Logout 退出登录 (12)3.2 系统模块功能结构 (12)(1)结构说明: (12)3.3 运行环境要求 (13)3.4 数据结构设计 (13)3.5 数据结构说明 (14)(1)文件结构链表 (14)(2)函数介绍 (14)4、详细设计 (15)4.1 模块设计 (15)4.2 算法流程图 (15)5、系统源代码 (17)见附录 (17)6、系统测试及调试 (18)6.1 运行结果及分析 (18)6.2 系统测试结论 (22)7、总结与体会 (23)参考文献 (24)附录系统的主要源代码 (25)1、引言计算机操作系统是计算机系统中不可缺少的基本系统软件,计算机操作系统是由硬件和软件两部分构成的。
操作系统实际上是一个计算机系统中硬、软件资源的总指挥部。
能有效的组织和管理计算机系统中的硬件和软件资源、合理的组织计算机工作流程,控制程序的执行、并向用户提供各种服务功能,使得用户能够合理、方便、有效的使用计算机,是整个计算机系统能高效运行的一组程序模块的集合。
操作系统在计算机体系中张非常重要的地位。
在现代计算机管理中,总是把程序和数据以文件的形式存储在磁盘和磁带上,供所有的或指定的用户使用。
为此,在操作系统中必须配置文件管理机构。
文件管理的主要任务是对任务和系统文件进行管理,以方便用户使用,并保证文件的安全性。
为此,文件管理应具有对文件存储空间的管理、目录管理、文件的读写管理,以及文件的共享与保护等功能。
从计算机诞生到现在虽然只经历了短短几十年的时间,但无论是在软件还是在硬件方面,计算机都有着飞跃式的发展。
随着计算机应用不断增加,计算机上所需要存储的数据和程序也日益增多,早期的文件管理方式已经不能满足现在的需要。
计算机操作系统是配置在计算机硬件上的第一层软件,是对硬件的首次扩充。
他在计算机系统中占据了特别重要的地位。
操作系统的主要功能是进行处理机管理功能,为了进一步了解文件管理功能,我们建立了一个文件模拟系统,要求编写程序,模拟实现文件系统中关于目录及文件的操作。
2、需求分析该模拟文件系统包括目录文件(简称目录)、普通文件(简称文件),并实现下面一些基本功能:1.创建目录:mkdir 〈目录名〉,再指定路径下创建指定的目录,或者在没有指定路径时,在当前目录下创建子目录。
2.改变目录:cd 〈目录名〉,工作目录转到指定的目录下。
cd .. 返回根目录下3.创建文件:create 〈文件名〉,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。
4.写入文件:Write 〈文件名〉,把需要写入的数据,写入文件之中。
5.读取(显示)文件:Read 〈文件名〉,把文件的数据,打印在屏幕上。
6.删除文件:delete 〈文件名〉,删除指定的文件。
6.获得命令帮助 HELP7.退出文件系统 LOGOUT 要考虑的特殊情况:1)各个命令对全路径和相对路径的支持A.目录不存在时,给出错误信息B.不能用cd 进入文件C.相对路径的解析D.路径中的空格剔除2)删除目录或文件时的问题A.删除不存在的文件或目录,给出错误提示B.删除目录时目录不为空; 如果该目录为空,则可删除,否则给出是否做删除,删除操作将该目录下的全部文件和子目录都删除C.进入到某个目录下,却要删除本目录或者上级目录3、概要设计3.1 系统的主要功能此文件模拟系统主要是模拟有关目录和文件的创建等操作,具体如下:(1)主界面主界面的设计主要包含整形的main()函数,在函数体中通过调用while循环语句来实现用户只能验证三次用户名和密码限制,以及对其他模块(帮助命令等)的调用。
int main() //主函数main(){int i=0;bool in=false;char users[8],pwd[12];cout<<"|-----------------------------------------------------------------|"<<endl;cout<<"| 模拟Linux文件系统|"<<endl;cout<<"| 账号:usr1-usr8 密码:usr1-usr8 |"<<endl;cout<<"| 你只有三次机会来试验账号|"<<endl;cout<<"|_________________________________________|"<<endl;cout<<endl;while(i<3) //限制用户的用户名和密码的验证次数{cout<<"Login:";cin>>users;cout<<"Pass:";cin>>pwd;if(chklogin(users,pwd)){in=true;break;}i++;}help(); //调用帮助函数,以便用户命令的使用createroot();while(in){if(!run())break;}}登录模块中包含了8个默认用户名和密码,且用户在登录时只有三次登录机会,登录不成功则自动退出系统。
users usrarray[8] ={"usr1","usr1", //用户名:usr1,密码:usr1"usr2","usr2", //用户名:usr2,密码:usr2"usr3","usr3", //用户名:usr3,密码:usr3"usr4","usr4", //用户名:usr4,密码:usr4"usr5","usr5", //用户名:usr5,密码:usr5"usr6","usr6", //用户名:usr6,密码:usr6"usr7","usr7", //用户名:usr7,密码:usr7"usr8","usr8", //用户名:usr8,密码:usr8};(2)Create 建立文件文件的建立主要是使用整形函数create()函数来实现的,具体如下:int create() //定义一个创建文件的整形函数create(){temp=initfile(" ",0);cin>>temp->filename; //输入文件名cin>>temp->content; //输入内容if(recent->child==NULL){temp->parent=recent;temp->child=NULL;recent->child=temp;temp->prev=temp->next=NULL;cout<<"文件建立成功!"<<endl; //文件创建成功}else{ttemp=recent->child;while(ttemp->next){ttemp=ttemp->next;if(strcmp(ttemp->filename,temp->filename)==0&& //判断子目录是否存在ttemp->isdir==0){printf("对不起,文件已存在!"); //输出文件已经存在return 1;}}ttemp->next=temp;temp->parent=NULL;temp->child=NULL;temp->prev=ttemp;temp->next=NULL;cout<<"文件建立成功!"<<endl; //文件创建成功}return 1;}(3)Read 读取文件文件的读取主要是使用整形函数read()函数来实现的,具体如下:int read() //定义一个文件读取的整形函数read(){char filename[FILENAME_LENGTH];cin>>filename;if(recent->child==NULL) //判断文件是否存在{cout<<"文件不存在!"<<endl; //文件不存在return 1;}if(strcmp(recent->child->filename,filename)==0) //读取文件{cout<<recent->child->content<<endl;return 1;}else{temp=recent->child;while(temp->next){if(strcmp(temp->next->filename,filename)==0){cout<<temp->next->content<<endl;return 1;}}cout<<"文件不存在!"<<endl;}}(4)Write 写入文件文件的写入主要是使用整形函数write()函数来实现的,具体如下:int write() //定义一个文件写入的整形函数write(){char filename[FILENAME_LENGTH];cin>>filename;if(recent->child==NULL){cout<<"文件不存在!"<<endl;return 1;}if(strcmp(recent->child->filename,filename)==0){recent->child->isopen=1;//设置文件标记为打开cin>>recent->child->content;recent->child->isopen=0;//设置文件标记为关闭cout<<"文件写入成功!"<<endl;return 1;}else{temp=recent->child;while(temp->next){if(strcmp(temp->next->filename,filename)==0){recent->child->isopen=1;//设置文件标记为打开cin>>temp->next->content;recent->child->isopen=0;//设置文件标记为关闭cout<<"文件写入成功!"<<endl;return 1;}}cout<<"文件不存在!"<<endl;}}}(5)Delete 删除文件文件的删除主要是使用整形函数del()函数来实现的,具体如下:int del() //定义一个文件删除的整形函数del(){char filename[FILENAME_LENGTH];cin>>filename;temp=new fnode;if(recent->child){temp=recent->child;while(temp->next && (strcmp(temp->filename,filename)!=0 ||temp->isdir!=0))temp=temp->next;if(strcmp(temp->filename,filename)!=0) //判断文件是否存在{cout<<"不存在该文件!"<<endl;return 0;}}else{cout<<"不存在该文件!"<<endl;return 0;}if(temp->parent==NULL){temp->prev->next=temp->next;if(temp->next)temp->next->prev=temp->prev;temp->prev=temp->next=NULL;}else{if(temp->next)temp->next->parent=temp->parent;temp->parent->child=temp->next;}delete temp;cout<<"文件已删除!"<<endl;}(6)Mkdir 建立目录目录的建立主要是使用整形函数write()函数来实现的,具体如下:int mkdir() //定义一个目录创建的整形函数mkdir(){temp=initfile(" ",1);cin>>temp->filename;if(recent->child==NULL){temp->parent=recent;temp->child=NULL;recent->child=temp;temp->prev=temp->next=NULL;}else{ttemp=recent->child;while(ttemp->next){ttemp=ttemp->next;if(strcmp(ttemp->filename,temp->filename)==0&&ttemp->isdir==1){printf("对不起,目录已存在!");return 1;}}ttemp->next=temp;temp->parent=NULL;temp->child=NULL;temp->prev=ttemp;temp->next=NULL;}return 1;}(7)Cd 切换目录目录的切换主要是使用整形函数cd()函数来实现的,具体如下:int cd() //定义一个目录切换的整形函数cd(){char topara[PARA_LENGTH];cin>>topara;If(strcmp(topara,"..")==0){int i;while(recent->prev)recent=recent->prev;if(recent->parent){recent=recent->parent;}i=strlen(para);while(para[i]!='/' && i>0) i--;if(i!=0)para[i]='\0';elsepara[i+1]='\0';}else{findpara(topara);}return 1;}(8)Logout 退出登录当用户执行完自己的操作或任务时,输入logout即可退出系统。