黄冈师范学院提高型实验报告实验课题文件系统的设计与实现(实验类型:□综合性设计性□应用性)实验课程操作系统原理实验时间2015-2016第二学期学生姓名何正发专业班级软件工程1401学号2014263040107一、实验目的和要求1、熟悉操作系统设计的过程,巩固操作系统的基本知识,加深对操作原理、功能及各种不同的存储管理方法理解与应用;2、学会运用各种语言、软件开发新软件的基本方法;3、增强实际应用能力和动手操作能力。二、实验条件Win7/Windows8.1/Linux等操作系统,装有java、C、C++、C#等语言工具的环境。三、实验原理分析可以选择最佳适应算法,按照从小到大的次序组成空闲区自由链,当用户作业或进程申请一个空闲区时,存储管理程序从表头开始查找,当找到第一个満足要求的空闲区时,停止查找。如果该空闲区大于请求表中的请求长度,将减去请求长度后的剩余空闲区部分留在可用表中。回收时,从作链中删去要回收的作业块,同时在空闲链中插入该作业大小的空闲区,并按顺序排列四、实验方案或步骤1、应用环境、需求分析本模拟系统主要针对文件的管理和操作名主要有:创建用户、文件、文件夹,读文件,写文件,执行文件,关闭文件,删除用户、文件夹、文件的功能。创建用户、文件、文件夹:在对系统发出操作命令之前必须先登录用户,然而登录之前必须创建该用户。在创建完后,可通过登录用户来创建文件和文件夹。在创建文件时可设置文件的属性和输入文件的内容。读文件:读取任何已创建的只读或读写文件的内容;如果所要读的文件不是可读文件时,系统会显示该文件不可读;如果所读文件不存在,系统会显示文件不存在。写文件用户可写或重写读写文件中的内容,并保存文件中的重写内容,以供下次读取;当所要写的文件不是可写的文件时,系统会显示该文件不可写;当所要写的文件并不存在时,系统会显示该文件不存在。成绩:执行文件:登录用户后,用户可执行系统中已创建的执行文件;当该文件不是可执行文件时,系统会显示该文件不可执行;当该文件不存在时,系统将会显示该文件不存在。关闭文件:可通过选择关闭文件的功能选项,来关闭系统中所有打开的文件,如果没有文件被打开,则系统会显示没有文件打开。删除用户、文件、文件夹:用户可通过选择删除的功能选项来删除不想再保存的文件和文件夹,删除后,用户会自动注销;当选择删除用户的功能选项时,系统会删除该用户,以及该用户所创建的所有文件和文件夹。2、概要设计打开文件流程图:开始输入文件判断是否存在判断是否打开打开文件结束错误提示是是否否写文件流程图:输入文件名判断是否存在判断是否打开是开始写入内容结束是错误提示否打开文件否关闭文件流程图:开始输入文件名判断是否存在错误提示判断是否打开关闭结束是否是否3、详细设计(1)用户结构:账号与密码结构typedefstructusers{charname[8];charpwd[10];}users;本系统有8个默认的用户名,前面是用户名,后面为密码,用户登陆时只要输入正确便可进入系统,否则提示失败要求重新输入。usersusrarray[8]={usr1,usr1,usr2,usr2,usr3,usr3,usr4,usr4,usr5,usr5,usr6,usr6,usr7,usr7,usr8,usr8,};(2)数据结构说明a)文件结构链表structfnode{charfilename[FILENAME_LENGTH];intisdir;intisopen;charcontent[255];fnode*parent;fnode*child;fnode*prev;fnode*next;};b)函数介绍fnode*initfile(charfilename[],intisdir);//初始化文件或目录voidcreateroot();//建立系统根目录intrun();系统运行intfindpara(char*topara);对参数进行处理boolchklogin(char*users,char*pwd);检查账号与口令voidhelp();命令列表intmkdir();建立目录intcreate();建立文件intread();读取文件intwrite();写入文件intdel();删除文件intcd();切换目录intdir();文件与目录列表4、代码清单#includestdio.h#includeiostream.h#includestring.h#includeiomanip.h#defineFILENAME_LENGTH10//文件名称长度#defineCOMMAND_LENGTH10//命令行长度#definePARA_LENGTH30//参数长度//账号结构typedefstructusers{charname[8];charpwd[10];}users;//文件结构structfnode{charfilename[FILENAME_LENGTH];intisdir;intisopen;charcontent[255];fnode*parent;fnode*child;fnode*prev;fnode*next;};//账号usersusrarray[8]={usr1,usr1,usr2,usr2,usr3,usr3,usr4,usr4,usr5,usr5,usr6,usr6,usr7,usr7,usr8,usr8,};fnode*initfile(charfilename[],intisdir);voidcreateroot();intrun();intfindpara(char*topara);boolchklogin(char*users,char*pwd);voidhelp();intmkdir();intcreate();intread();intwrite();intdel();intcd();intdir();fnode*root,*recent,*temp,*ttemp;charpara[PARA_LENGTH],command[COMMAND_LENGTH],temppara[PARA_LENGTH],recentpara[PARA_LENGTH];//创建文件与目录结点fnode*initfile(charfilename[],intisdir){fnode*node=newfnode;strcpy(node-filename,filename);node-isdir=isdir;node-isopen=0;node-parent=NULL;node-child=NULL;node-prev=NULL;node-next=NULL;returnnode;}//创建文件存储结点voidcreateroot(){recent=root=initfile(/,1);root-parent=NULL;root-child=NULL;root-prev=root-next=NULL;strcpy(para,/);}intmkdir(){temp=initfile(,1);cintemp-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(对不起,目录已存在!);return1;}}ttemp-next=temp;temp-parent=NULL;temp-child=NULL;temp-prev=ttemp;temp-next=NULL;}return1;}intcreate(){temp=initfile(,0);cintemp-filename;gets(temp-content);//cintemp-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(对不起,文件已存在!);return1;}}ttemp-next=temp;temp-parent=NULL;temp-child=NULL;temp-prev=ttemp;temp-next=NULL;cout文件建立成功!endl;}return1;}intdir(){inti=0,j=0;temp=newfnode;temp=recent;if(temp!=root){coutDIR..endl;i++;}if(temp-child==NULL){coutTotal:directorsifilesjendl;return1;}temp=temp-child;while(temp){if(temp-isdir){coutDIRtemp-filenameendl;i++;}else{coutFILEtemp-filenameendl;j++;}temp=temp-next;}coutTotal:directorsifilesjendl;}intread(){charfilename[FILENAME_LENGTH];cinfilename;if(recent-child==NULL){cout文件不存在!endl;return1;}if(strcmp(recent-child-filename,filename)==0){coutrecent-child-contentendl;return1;}else{temp=recent-child;while(temp-next){if(strcmp(temp-next-filename,filename)==0){couttemp-next-contentendl;return1;}}cout文件不存在!endl;}}intwrite(){charfilename[FILENAME_LENGTH];cinfilename;if(recent-child==NULL){cout文件不存在!endl;return1;}if(strcmp(recent-child-filename,filename)==0){recent-child-isopen=1;//设置文件标记为打开cinrecent-child-content;recent-child-isopen=0;//设置文件标记为关闭cout文件写入成功!endl;return1;}else{temp=recent-child;while(temp-next){if(strcmp(temp-next-filename,filename)==0){recent-child-isopen=1;//设置文件标记为打开cintemp-next-content;recent-child-isopen=0;//设置文件标记为关闭cout文件写入成功!