




已阅读5页,还剩38页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机系课程设计实 验 报 告 课程名称 操作系统课程设计 实验学期 2012 至 2013 学年 第 1 学期 学生所在系部 计算机与信息管理系 年级 2010 专业班级 计算机001班 学生姓名 学号 任课教师 实验成绩 计算机系制一个简单的文件系统的详细设计一、实验目的(1)阅读并调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。(2)了解设计一个n个用户的文件系统,每个用户可以保存M个文件。用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有create、delete、open、close、read、write等命令。二、实验要求1、阅读所给文件系统源程序,并加注释(注释量达60%),2、修改、完善该系统,画出所设计的文件系统的详细流程图。三、文件系统功能设计1. 功能设计该文件系统是一个多用户、多任务的文件系统。对用户和用户的文件数目并没有上限。也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制。该系统可以支持的操作命令如下: bye用户注销命令。当使用该命令时,用户退出系统,注销该用户功能设计并回到登陆界面。命令格式: bye close删除用户注册信息命令。执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除。命令执行完成后返回登陆界面。命令格式:close create在当前目录下创建一个文件,且该文件不能跟当前已有的文件重名。该文件的管理信息登记在用户文件信息管理模块中。执行完该命令后回到执行命令行。命令格式:createfile1其中:“”符为提示符,file1为要创建的文件名。 delete删除当前用户目录下的一个文件,命令执行完毕返回至命令行。命令格式:deletefile1 其中:file1为要删除的文件名。 list显示当前注册目录下的所有文件信息,包括文件名、文件长度、文件操作权限。命令格式:list chmod改变某个文件的执行权限,但前提是该文件是该用户目录下的文件。命令格式:chmodfile1。其中:file1为要授权的文件名。 open在window界面下打开某个文件。执行该命令后,文件file1将用在windows界面下的文件形式打开。用户可以在这个方式中对文件进行修改,并将修改后的内容保存。命令格式:openfile1其中:file1为要打开的文件名。 read读文件信息。将文件信息读入并显示在终端上。命令格式:readfile1其中:file1为要读的文件名。 write向某个文件写入新的信息。用户可以选择用覆盖原来内容的方式或和在文件的末尾追加新信息的方式写入信息。 当要退出时输入“#”即可。(2)系统采用二级文件目录。设置主目录(MFD)和用户文件目录(UFD),分别以文件的方式保存在磁盘中。在主目录中有注册用户的用户名和另一标志该用户目录下是否有文件的指针标记。用户文件目录采用用户名作为文件名保存于磁盘,以便检索时方便对应。在用户文件目录中保存着该目录下所有文件的文件名称、保护码、文件长度。(3)该系统大量使用高级语言中的文件操作函数,所以能实际看到文件的创建、写入、读出、删除等效果。2. 功能设计实现总体流程3. 主要数据结构 4. 主要功能模块四、文件系统功能模块详细设计流程图1. int LoginDisplay() /登陆选项操作函数图1:函数LoginDisplay()流程图2. bool Login(int SELETE)/用户登陆,注册函数 图2:函数Login(int SELETE)流程图3. void DisplayUFD() /打印用户信息,包括用户的各个文件图3:函数DisplayUFD()流程图4. void ByeFile(bool BOOL)/注销函数,调用此函数后用户可以退出系统图4:函数ByeFile(bool BOOL)流程图5. bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除图5:函数ClearUserFile()流程图6. void ClearUserMes()/删除用户全部信息图6:函数ClearUserMes()流程图7. void DeleteUser()/删除用户注册目录的操作图7:函数DeleteUser()流程图8. void CreatFile()/在当前用户目录下创建文件图8:函数CreatFile()流程图9. void DeleteFile()/删除当前目录下一个文件的操作图9:函数DeleteFile()流程图10. bool QueryModElse(bool BOOL,bool &flag)/查询其它用户目录下的文件图10:函数QueryModElse(bool BOOL,bool &flag)流程图11. bool QueryMod(bool BOOL)/查询权限图11:函数QueryMod(bool BOOL)流程图12. bool WriteRight(int len,bool BOOL) /查看是否已经正确地写入到该文件信息中,是则返回真值图12:函数WriteRight(int len,bool BOOL)流程图13. void WriteLengthToFile(int Len,bool BOOL)/将文件长度写入文件管理模块中图13:函数WriteLengthToFile(int Len,bool BOOL)流程图14. void WriteFile()/向文件写入信息的操作图14:函数WriteFile()流程图15. void ReadFile()/读文件函数图15:函数ReadFile()流程图16. void ChangeMod()/修改某文件的执行权限图16:函数ChangeMod()流程图17. void Execute(int i,int len,int cmdset)/执行命令函数图17:函数Execute()流程图18. void Command()/读取用户输入的命令,并将其转换成系统能识别的命令图18:函数Command()流程图5、 实验运行结果1、用户注册:图19:用户注册2、创建文件:图20:创建文件3、用户注册时重名:图21:用户注册时重名4、已注册用户登陆,并打开文件进行写入操作:图22:已注册用户登陆,并打开文件进行写入操作5、读出文件内容到终端:图23:读出文件内容到终端6、删除文件:图24:删除文件7、打印文件清单:图25:打印文件清单8、修改用户权限:图26:修改用户权限9、删除用户全部文件与信息:图27:删除用户全部文件与信息10、退出系统:图28:退出系统六、系统改进的设想与实现1、修改内容说明:(1)、对源程序中的函数进行了声明和排序(按首字母排列);(2)、在登陆选项操作函数LoginDisplay()和修改文件权限函数ChangeMod()中添加了人性化提示语句,方便用户操作。2、实现程序(用小六字体打印):(1)、程序如下:/-函数声明-void ByeFile(bool BOOL); /注销函数,调用此函数用户可以退出系统void ChangeMod(); /修改某文件的执行权限void ClearUserMes(); /删除用户全部信息void Command(); /读取用户输入的命令,并将其转换成系统能识别的命令void CreatFile(); /在当前用户目录下创建文件void DeleteFile(); /删除当前目录下一个文件的操作void DeleteUser(); /删除用户注册目录的操作void DisplayUFD(); /打印用户信息,包括用户的各个文件名称、长度和操作权限的设置信息void Execute(int i,int len,int cmdset); /执行命令函数void KeyWord(); /初始化命令关键字void ListAllFile(); /显示当前用户目录下的文件信息void OpenFile(); /在window模式下打开该文件void ReadFile(); /读文件函数void WriteFile(); /向文件写入信息的操作void WriteLengthToFile(int Len,bool BOOL); /将文件长度写入文件管理模块中bool ClearUserFile(); /用户要将自己的注册目录从系统彻底删除,首先应将该用户目录下的全部文件删除bool Login(int SELETE); /用户登陆,注册函数。bool QueryMod(bool BOOL); /查询权限bool QueryModElse(bool BOOL,bool &flag); /查询其它用户目录下文件的文件bool WriteRight(int len,bool BOOL); /查看是否已经正确地写入到该文件信息中,若是,则返回真值int LoginDisplay(); /登陆选项操作函数(登陆界面模块)。int main(); /*主函数声明,与其他函数声明一样,其功能是:使编译器进行预编译时为主函数预留内存空间。 只有主函数可以不要声明,直接定义使用。 VC6.0里用void main();。*/ (2) 、程序如下:A、登陆选项操作函数LoginDisplay()system(cls); /清屏函数。 cout *欢迎使用本文件系统*endl; cout *您可以进行以下操作*endl; cout*温馨提示:输入操作序号,如“2”,再按回车键*n *即可进入“用户注册”功能界面,下同。*endl;coutn *请选择操作*n1、用户登陆 2、用户注册 0、退出SELETE_1; /键盘输入一个序号,如1、2、0。 B、修改文件权限函数ChangeMod() coutn文件的权限值具体如下:; coutn30:其他用户既没读权也没写权;; coutn31:其他用户没有读权但有写权;; coutn32:其他用户具有读权但没写权;; coutn33:其他用户既有读权也有写权。n; coutn输入文件 buffermod;/输入权限值3、 源程序(用小六字体打印):/* * 文 件 名: Simple_file_system.c* 功 能: 简单文件管理系统模拟程序 * 指导老师: 陆丽娜 * 组 长: 王珊* 组 员: 王珊、韩二雄 */-头文件包含-#include /定义“数据流输入输出函数”的头文件。 #include /定义“输入输出函数” 的头文件。 #include /定义“C语言标准库函数” 的头文件。#include /定义“字符串处理函数” 的头文件。 #include conio.h /定义“控制台输入输出函数” 的头文件。 #include /定义“BIOS和DOS调用函数” 的头文件。 /*表示在包含文件目录中去查找,而不在源文件目录中找; 表示首先在当前的源文件目录中查找,若未找到,才到包含目录中去查找。*/-编译预处理-/#define NULL 0 /不带参的宏定义,功能为:用宏名(NULL)替换宏体(0)。 #define keynum 10 /同上。 #define getspace(type) (type*)malloc(sizeof(type) /*带参的宏定义,功能为:用宏名(getspace(type))替换宏体((type*)malloc(sizeof(type))。 其中type为形式参数。*/ char cmd64; /存放用户输入的命令char buffer36; /char user32; /存放当前登陆的用户名 /定义了3个全局变量(外部变量),当函数内部定义了与其同名的局部变量(内部变量)时,全局变量就会被屏蔽。 typedef char ALFA12; /用户自定义类型,其功能为:用“ALFA12”代替“char”,其实换汤不换药。 ALFA KWORDkeynum; /此处若用char KWORDkeynum;会有24个错误出现。 /-struct UFD /用户文件管理模块 char filename32;/文件名int safecode; /文件保护码long length; /文件长度*curfile = NULL; /*定义一个结构类型UFD,内含三个成员变量。 又定义一个结构体变量curfile,并赋值为NULL。 */ /-struct MFD /用户登陆信息管理模块char username32; /用户名bool filepoint; /用户目录下的文件指针,false表示目录为空,true为该用户目录中有文件*curuser = NULL,*elseuser=NULL;/-typedef UFD UFD;typedef MFD MFD; /自定义类型,用UFD代替UFD,用MFD代替MFD。为什么? /-函数声明-void ByeFile(bool BOOL); /注销函数,调用此函数用户可以退出系统void ChangeMod(); /修改某文件的执行权限void ClearUserMes(); /删除用户全部信息void Command(); /读取用户输入的命令,并将其转换成系统能识别的命令void CreatFile(); /在当前用户目录下创建文件void DeleteFile(); /删除当前目录下一个文件的操作void DeleteUser(); /删除用户注册目录的操作void DisplayUFD(); /打印用户信息,包括用户的各个文件名称、长度和操作权限的设置信息void Execute(int i,int len,int cmdset); /执行命令函数void KeyWord(); /初始化命令关键字void ListAllFile(); /显示当前用户目录下的文件信息void OpenFile(); /在window模式下打开该文件void ReadFile(); /读文件函数void WriteFile(); /向文件写入信息的操作void WriteLengthToFile(int Len,bool BOOL); /将文件长度写入文件管理模块中bool ClearUserFile(); /用户要将自己的注册目录从系统彻底删除,首先应将该用户目录下的全部文件删除bool Login(int SELETE); /用户登陆,注册函数。bool QueryMod(bool BOOL); /查询权限bool QueryModElse(bool BOOL,bool &flag); /查询其它用户目录下文件的文件bool WriteRight(int len,bool BOOL); /查看是否已经正确地写入到该文件信息中,若是,则返回真值int LoginDisplay(); /登陆选项操作函数(登陆界面模块)。int main(); /*主函数声明,与其他函数声明一样,其功能是:使编译器进行预编译时为主函数预留内存空间。 只有主函数可以不要声明,直接定义使用。 VC6.0里用void main();。*/ /-函数定义-/-void ByeFile(bool BOOL) /注销函数,调用此函数用户可以退出系统FILE *infile,*outfile;char out50;strcpy(out,outfilelocate.exe);if(infile=fopen(LOGIN.exe,rb)=NULL)coutn保存错误。;/fclose(infile);return;elseif(outfile=fopen(out,wb+)=NULL)/申请一个缓冲区管理模块存放用户更新后的全部信息coutusername,curuser-username)=0) /用户名相同 if(BOOL) /更新当前用户信息的操作fwrite(curuser,sizeof(MFD),1,outfile);else continue;/如果用户想把自己的注册目录从系统中彻底删除,则执行该操作elsefwrite(mfd,sizeof(MFD),1,outfile); /写入新的模块fclose(infile);fclose(outfile);remove(LOGIN.exe); /将旧的该用户的文件管理模块删除rename(out,LOGIN.exe);/将新的用户的文件管理模块重命名为用户目录下的管理模块/-void ChangeMod()/修改某文件的执行权限int mod=40;FILE *fp,*infile,*outfile;char in50,out50;UFD *ufd = getspace(UFD);strcpy(in,curuser-username);strcat(in,.exe);strcpy(out,outfilelocate.exe);if(fp=fopen(in,rb)=NULL)/fclose(fp);coutn操作出现错误,对此我们表示歉意!;return; elsewhile(1)/查看该文件是否在当前用户的注册目录下 /任何用户无权修改不是自己目录下的文件的权限值fread(ufd,sizeof(UFD),1,fp);if(feof(fp)/在当前目录下找不到该文件,说明该用户无权修改该文件权限coutn你没有权限对文件 bufferfilename,buffer)=0)/找到该文件,继续操作fclose(fp);break;bool flag1=true;while(flag1) coutn文件的权限值具体如下:; coutn30:其他用户既没读权也没写权;; coutn31:其他用户没有读权但有写权;; coutn32:其他用户具有读权但没写权;; coutn33:其他用户既有读权也有写权。n; coutn输入文件 buffermod;/输入权限值if(mod33)/确保输入的权限值正确coutn错误:权限值必须在3033之间;continue;elsechar ch;switch(mod)/告诉用户对该文件权限修改的结果,以便用户确认case 30:coutn当前权限设置:其他用户对buffer既没读权也没写权!;break;case 31:coutn当前权限设置:其他用户对buffer没有读权但有写权!;break;case 32:coutn当前权限设置:其他用户对buffer具有读权但没写权!;break;case 33:coutn当前权限设置:其他用户对buffer既有读权也有写权!;break;default: break;coutch;switch(ch)case Y:case y:flag1=false;break;default: flag1=true;/更新文件信息管理模块,相关操作类似上面,不在赘述if(infile=fopen(in,rb)=NULL)coutn操作出现错误,对此我们表示歉意!;fclose(infile);return;elseif(outfile=fopen(out,wb+)=NULL) coutfilename,buffer)=0)ufd-safecode=mod; fwrite(ufd,sizeof(UFD),1,outfile); fclose(infile);fclose(outfile); remove(in); rename(out,in);/-void ClearUserMes()/删除用户全部信息char name50;strcpy(name,curuser-username);strcat(name,.exe);remove(name); /从磁盘中删除用户文件信息管理模块ByeFile(false); /更新系统的用户登陆信息管理模块/-void Command() /读取用户输入的命令,并将其转换成系统能识别的命令int len = 0,i,j;int cmdset;while(1)cmdset = 0;coutcmd; /char cmd64; /存放用户输入的命令。 len = strlen(cmd); /求字符串长度函数。 i=0;j=0;while(cmdi=|cmdi= )i+;/过滤空格键和for(;i | cmdi= | i=len-1)if(cmdi= | cmdi= )bufferj = 0;elseif(i=len-1) bufferj=cmdi; bufferj+1=0;i+;j=0;int low=1,mid,high=keynum-1; /#define keynum 10 /不带参的宏定义,功能为:用宏名(keynum)替换宏体(10)。 bool BOOL = false; while(low=high) /找到该命令关键字的内部识别码mid=(low+high)/2;if (strcmp(buffer,KWORDmid)=0) low=mid+1;if(strcmp(buffer,KWORDmid)=0) BOOL = true; break;if(!BOOL)coutnbuffer|cmdi= )i+;/过滤空格键和buffer0=0;Execute(i,len,cmdset); /调用Execute函数,并传参给它,使其执行该命令。 /-void CreatFile()/在当前用户目录下创建文件FILE *fp; curuser-filepoint=true;if(fp=fopen(buffer,r)=NULL) /如果没有跟用户输入文件名相同的文件 if(fp=fopen(buffer,w)=NULL) coutn创建文件失败!;/fclose(fp); return;fclose(fp);else /用户要创建的文件已经存在coutch;switch(ch)case Y:case y:coutbuffer;strcat(buffer,.txt);fclose(fp); if(fp=fopen(buffer,w)=NULL) coutusername);strcat(user,.exe);curfile = getspace(UFD);strcpy(curfile-filename,buffer); /文件名curfile-length=0; /该文件长度为零curfile-safecode=30; /设置该文件的默认权限 /11 00,文件主有读和写权,其他用户没有读写权if(fp=fopen(user,ab)=NULL)coutn错误:你可能不是合法用户。endl;getch();elsefwrite(curfile,sizeof(UFD),1,fp);/将该文件信息写入用户文件信息管理模块中coutn文件 filename 创建成功!;fclose(fp);/-void DeleteFile() /删除当前目录下一个文件的操作char ch;FILE *infile,*outfile;coutn确定要删除文件:buffer Y/Nch; /提示用户确认删除switch(ch)case Y:case y: /更新用户文件信息管理模块,这里同样使用缓冲区模块来更新,方法与上面讲到的类似。 char out50,in50; strcpy(out,outfilelocate.exe);strcpy(in,curuser-username);strcat(in,.exe); if(infile=fopen(in,rb)=NULL)/打开该用户的文件信息管理模块 coutn保存错误。; /fclose(infile);return; else if(outfile=fopen(out,wb+)=NULL) coutfilename,buffer)=0) /要进行更新的信息continue; else fwrite(ufd,sizeof(UFD),1,outfile);/写入新模块 fclose(infile);fclose(outfile); remove(i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024中铝投资发展有限公司招聘2人笔试参考题库附带答案详解
- 2024中国船舶集团有限公司招聘4家成员单位总会计师4人笔试参考题库附带答案详解
- 大气环境法律法规重点基础知识点
- 【欧睿咨询】2025全球五大尼古丁行业趋势
- 绿色餐饮革命
- 2025广告公司合同范本
- 2025济南市商业租赁合同
- 2025建筑智能化工程施工合同书
- 2025航空国际商标许可合同
- 部编版道德与法治五年级下册第7课《不甘屈辱 奋勇抗争》精美课件送期末复习(第2课时)
- 弦理探索-洞察分析
- 工务安全生产管理系统运用
- 【MOOC】固体物理学-北京交通大学 中国大学慕课MOOC答案
- 心衰病人的观察与护理
- 爱护环境主题班会课件
- 手术病人术中低体温的预防与护理2
- 《天润乳业公司偿债能力存在的问题及对策9000字》
- 2024年消防月全员消防安全知识培训
- 连续梁线型控制技术交底
- 林业专业知识考试试题及答案
- 项目一任务一《家宴菜单设计》课件浙教版初中劳动技术八年级下册
评论
0/150
提交评论