多级文件目录清单地文件管理目标系统.doc

上传人:一*** 文档编号:813218 上传时间:2019-07-17 格式:DOC 页数:31 大小:146.50KB
返回 下载 相关 举报
多级文件目录清单地文件管理目标系统.doc_第1页
第1页 / 共31页
多级文件目录清单地文件管理目标系统.doc_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《多级文件目录清单地文件管理目标系统.doc》由会员分享,可在线阅读,更多相关《多级文件目录清单地文件管理目标系统.doc(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、山东理工大学计算机学院课课 程程 设设 计计(操作系统)班 级姓 名学 号指导教师二一一 年 六 月二十四日课程设计任务书及成绩评定课题名称基于多级文件目录的文件管理系统设计基于多级文件目录的文件管理系统设计、题目的目的和要求: 巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。、设计进度及完成情况日 期内 容6.13-6.15选取参考书,查阅有关文献资料,完成课程设计说明 书内容 1 部分。 完成课程设计说明书内容 2-4 部

2、分6.166.20创建相关数据结构,录入源程序6.216.22调试程序并记录调试中的问题,完成课程设计说明书 第 5 部分。6.23系统测试,演示设计成果,考核成绩。6.24整理课程设计说明书,上午 11 时,由学习委员交课 程设计说明书(计算机科学系 9#213 或直接交给指导 教师)、主要参考文献及资料1 汤子赢等.计算机操作系统(第二版).西安电子科技大学出版社, 2006.8 2 冯耀霖等.操作系统,西安电子科技大学出版社.1992 3 张尧学等.计算机操作系统教程(第 2 版).清华大学出版社,2001.4 4 谭耀铭.操作系统.中国人民大学出版社,2003.4 5 刘坤起. 操作系

3、统学习辅导与习题详解M. 北京: 电子工业出版社, 2003:58-67 6孙钟秀等编著,操作系统教程M,高等教育出版社,2003:46-78、成绩评定:设计成绩: (教师填写)指导老师: (签字)二一一 年 六 月二十四日目 录第一章 概述1第二章 系统分析2第三章 系统设计3第四章 程序设计流程图或 N-S 图6第五章 调试过程中的问题及系统测试情况7第六章 结束语9附录10第一章 概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。计算机操作系

4、统一门重要的专业课,是开发操作系统和软件系统的理论和应用基础。本课程设计要求设计一个基于多级文件目录的文件管理系统。通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。第二章 系统分析1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多级文件目录的文件管理系统。2.文件物理结构可采用显式链接或其他方法。4.文件目录结构采用多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为 1.2。5.设计一个较实用的用户界面

5、,方便用户使用。要求提供以下相关文件操作:第三章 系统设计1.1.文件的操作文件的操作(1)文件的创建:(2)文件的打开:(3)文件的读:read(4)文件的写:write(5)文件关闭:close2.2.数据结构体数据结构体1).文件夹数据结构体:typedef struct MFD /主文件目录 char username100;char password100;FILE *fp; /文件目录指针MFD;2).用户文件数据结构体:typedef struct UFD /用户文件目录 char filename256;char protect; /保护码int length; /文件长度UF

6、D;3).功能实现命令数据结构体:typedef struct COMM /命令串char string256; /用户命令串struct COMM *next; /后继指针:指向命令各参数所在的结点COMM;MFD mainfdN; /主文件目录数组UFD userfdM; /用户文件目录数组OFD openfdL; /打开文件目录数组COMM *command; /命令串指针int next;DISK;3.3.主要模块组成主要模块组成1).头文件:#include #include /里面有 clrscr()清屏函数 #include #include #include /内存分配函数#i

7、nclude #include #define N 30 /用户数#define M 20 /一个用户可保存 M 个文件#define L 5 /用户只能一次打开 L 个文件2).功能模块实现函数:void init(); /初始化主文件目录数组void init_ufd(char *username); /初始化用户文件目录void mesg(char *str); /输出函数char *getuser(); /设置用户函数声明char *getpass(); /设置口令函数声明COMM *readcommand(); /读命令串函数声明void login(); /用户登录void set

8、pass(); /设置口令void create(); /创建用户文件void mydelete(); /删除void myread(); /读void myopen(); /打开void myclose(); /关闭void mywrite(); /写void help(); /帮助第四章 程序设计流程图或 N-S 图开始输入用户判断是否存在YESNO删 除 文 件创 建 子 目 录改 变 子 目 录列 出 子 目 录关 闭 文 件打 开 文 件创 建 文 件读 文 件写 文 件是否退出结束NOYE S图 1 程序流程图第五章 调试过程中的问题及系统测试情况1.运行后主界面显示图 2 主界面

9、2.输入 login 命令 用户登陆,当用户账号不存在时,即可创建:图 3 创建用户3.创建用户下文件功能实现:图 4 创建用户4.打开文件 open 命令功能的实现图 5 打开文件5.读文件 read 命令功能实现图 6.读文件6. 写文件 write 命令功能实现,及对内容中添加实现图 7 写文件8.退出文件 logout 操作图 8 退出文件第六章 结束语这次操作系统课程设计,在编写过程中,遇到很多难题,特别是在操 作系统实验中不曾注意到的问题,也有许多新的问题,在实际反复调试运 行中,不断加深了对操作系统的理解,也很大地程度上提高了编程的能力, 由于对重要概念的把握程度还不够深入,在实

10、际理解编写时遇到很多不该 发生的问题。不过,都很好的解决并牢牢地掌握住了。通过做多级目录文 件系统,我知道了多级目录文件系统的工作原理,在打开文件时系统是如 何进行操作的,并加深了理解。希望在以后的学习中,继续保持这份昂扬 的斗志,继续努力学习计算机方面的知识,永不懈怠。 通过这次课程设计,不仅让我了解了多级目录文件系统,更重要的还 让我学会了、或者说是验证了“做事一定要有次序和对事物的总体把握” 这句话。开始我一味的进行调试,急切的想侥幸调试出来,但由于没有进 行深入的考虑,我调试了很久都没没有成功,我仔细的分析题目,分析材 料,在原由的基础上我进行了改正,我最后还是调试成功了,虽然还是经

11、过了一翻努力,当然汗水还是留的很值,这次操作系统实习,不仅让我对 操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握, 还给了我今后做事的启示。做事要塌实,不能想着一步登天,要有计划, 有目的的进行做事。盲目真的不应该再在我们新一代的大学生身上出现了, 我们应该认真找到自己的缺点并且及时改正。在这里,我如果不说感谢的 话,不知道要说些什么好;首先感谢学校和父母,然后更重要的是感谢老 师的教导。“活到老,学到老”,这也是我整个学习过程中的一次经验、 一次总结,我相信它肯定会给我今后的学习有所启示和指导作用。附录:源程序代码源程序代码: #include #include /里面有

12、clrscr()清屏函数 #include #include #include /内存分配函数 #include #include #define N 30 /用户数 #define M 20 /一个用户可保存 M 个文件 #define L 5 /用户只能一次打开 L 个文件 typedef struct MFD /主文件目录 char username100;char password100;FILE *fp; /文件目录指针 MFD; typedef struct UFD /用户文件目录 char filename256;char protect; /保护码int length; /文件

13、长度 UFD; typedef struct OFD /打开文件目录 char filename256;char opencode; /打开保护码int *fp; /读写指针 OFD; typedef struct COMM /命令串 char string256; /用户命令串struct COMM *next; /后继指针:指向命令各参数所在的结点 COMM; MFD mainfdN; /主文件目录数组 UFD userfdM; /用户文件目录数组 OFD openfdL; /打开文件目录数组 COMM *command; /命令串指针 char username100; int user

14、num,savenum,opennum; int workfile; void init(); /初始化主文件目录数组 void init_ufd(char *username); /初始化用户文件目录 void mesg(char *str); /输出函数char *getuser(); /设置用户函数声明 char *getpass(); /设置口令函数声明COMM *readcommand(); /读命令串函数声明 void login(); /用户登录 void setpass(); /设置口令 void create(); /创建用户文件 void mydelete(); /删除 v

15、oid myread(); /读 void myopen(); /打开 void myclose(); /关闭 void mywrite(); /写 void help(); /帮助 void main() init(); printf(“ntt 计科 0804 班 0812103773 张超 “); printf(“ntt “); printf(“ntt 多级文件目录的文件管理系统 “); printf(“ntt “); printf(“ntt 选择命令: “); printf(“ntt login setpass create “); printf(“ntt open read write

16、 delete“); printf(“ntt help exit copy rename“); printf(“ntt 首次使用请输入 help 命令请求帮助 “); printf(“ntt 使用中欢迎以 help 请求帮助 “);while(1) readcommand();if(strcmp(command-string,“create“)=0) create(); else if(strcmp(command-string,“delete“)=0) mydelete();else if(strcmp(command-string,“open“)=0)myopen();else if(st

17、rcmp(command-string,“close“)=0)myclose();else if(strcmp(command-string,“read“)=0)myread();else if(strcmp(command-string,“write“)=0)mywrite();else if(strcmp(command-string,“login“)=0)login();else if(strcmp(command-string,“setpass“)=0)setpass();else if(strcmp(command-string,“help“)=0)help();else if(st

18、rcmp(command-string,“exit“)=0) break;else mesg(“Bad command!“); void mesg(char *str) printf(“n %sn“,str); void init() /初始化主文件目录数组 FILE *fp; /文件指针char tempname20,temppass20;usernum=0; /全局变量初始化savenum=0;opennum=0;strcpy(username,“); /用户使用时,建立一个 mainfile.txt 文件,包括每个用户的用户名和口令/然后,才能运行此程序if(fp=fopen(“main

19、file.txt“,“r“)!=NULL)/以读方式打开文件 mainfile.txtwhile(!feof(fp)/若不是文件尾 strcpy(tempname,“); /清空数组操作fgets(tempname,20,fp); /读用户名if(strcmp(tempname,“)!=0) fgets(temppass,20,fp);tempnamestrlen(tempname)-1=0; /设置串结束符temppassstrlen(temppass)-1=0;strcpy(mainfdusernum.username,tempname); /生成 mainfd 数组strcpy(main

20、fdusernum.password,temppass); /生成 userfd 数组usernum+; /生成 usernum 的值 if(usernum=N) break;fclose(fp); void init_ufd(char *username) /初始化用户文件目录 FILE *fp;char tempfile100,tempprot;int templength;savenum=0;opennum=0;workfile=-1;if(fp=fopen(username,“r+“)!=NULL) while(!feof(fp) strcpy(tempfile,“);fgets(te

21、mpfile,50,fp);if(strcmp(tempfile,“)!=0) fscanf(fp,“%c“,fscanf(fp,“%d“,tempfilestrlen(tempfile)-1=0;strcpy(userfdsavenum.filename,tempfile); /文件名userfdsavenum.protect=tempprot; /保护码userfdsavenum.length=templength; /文件长度savenum+;fgets(tempfile,50,fp); char *getuser() /设置用户函数声明 char username20;char tem

22、p;int i;username0=0;for(i=0;i“);gets(line); /输入一个命令串 for(i=0;i0) /对命令行中的子串进行处理 tempend=0;newp=(COMM*)malloc(sizeof(COMM*);strcpy(newp-string,temp);newp-next=NULL;if(command=NULL) command=newp; /把各子串链成一个链表else p=command;while(p-next!=NULL) p=p-next;p-next=newp; p=command;return command; void login()

23、/用户注册 FILE *fp;int i;char password20,confirm20,tempname20;if(command-next=NULL) printf(“n User Name:“);strcpy(tempname,getuser(); /输入用户名并且返回之else if(command-next-next!=NULL) mesg(“Too many parameters!“); return; else strcpy(tempname,command-next-string);for(i=0;i=usernum) /新用户 printf(“n 新用户账号,输入你的密码

24、两次!“);printf(“n 密码:“);strcpy(password,getpass(); /输入口令并且返回之 printf(“n 密码:“);strcpy(confirm,getpass(); /第二次输入口令if(strcmp(password,confirm)=0) /两次输入的口令是否相同的处理情 况 if(usernum=N) /用户数不能超过 N mesg(“创建新账号错误!用户账号字符超过限制.n 登陆失败!“);else strcpy(mainfdusernum.username,tempname); /把新用户和口令填 入 mainfd 中strcpy(mainfdu

25、sernum.password,password); usernum+;strcpy(username,tempname);mesg(“创建新用户!n 登陆成功恭喜!“);init_ufd(username); /初始化用户文件 目录fp=fopen(“mainfile.txt“,“w+“); /把新用户填入 mainfile.txt 文件中for(i=0;inext=NULL) mesg(“Too few parameters!“); else /存在 2 个或 3 个参数的处理 strcpy(tempfile,“); tempcode=r;if(strcmp(command-next-st

26、ring,“/r“)=0) tempcode=r; type=1; else if(strcmp(command-next-string,“/w“)=0) tempcode=w; type=1; else if(strcmp(command-next-string,“/d“)=0) tempcode=d;type=1; else if(command-next-string0=/) mesg(“Error! /r /w /d request!“);else if(command-next-next!=NULL) mesg(“Too many parameters!“); else strcpy

27、(tempfile,command-next-string); if(type=1) /三个参数的情况补充 if(command-next-next!=NULL) if(command-next-next-next!=NULL) mesg(“Too many parameters!“); else strcpy(tempfile,command-next-next-string); else mesg(“Too few parameters!“); if(strcmp(tempfile,“)!=0) for(i=0;i=savenum) mesg(“File not existed!“); e

28、lse /文件存在的情况 for(i=0;i=L) /打开的文件已经占满了 5 个名额 mesg(“Error! cannot open file! nimber of opened files limited!“); else /打开处理 strcpy(openfdopennum.filename,tempfile); openfdopennum.opencode=tempcode; workfile=opennum; opennum+;mesg(“File open success!“); void myclose() /关闭文件 int i,j; char tempfile100; if

29、(strcmp(username,“)=0) mesg(“No user login!“);else if(command-next=NULL) mesg(“Too few parameters!“);else if(command-next-next!=NULL) mesg(“Too many parameters!“);else strcpy(tempfile,command-next-string); for(i=0;i=savenum) /文件不存在 mesg(“文件不存在!“); else for(j=0;j=opennum) /文件存在了但是没有打开 mesg(“文件存在了但是没有

30、打开!“);else /文件存在并且打开 strcpy(openfdj.filename,“);openfdj.opencode= ;opennum-;mesg(“文件关闭成功!“); void mydelete() /删除文件 int i,j; int tempsave; /用于确定被删除文件在数组 userfdM中的位置 char tempfile100; FILE *fp; if(strcmp(username,“)=0) mesg(“没有用户登陆!“);else if(command-next=NULL) mesg(“Too few parameters!“);else if(comm

31、and-next-next!=NULL) mesg(“太多参数导致错误!“);else strcpy(tempfile,command-next-string); for(i=0;i=savenum) /文件不存在 mesg(“the file donot existed!“); else for(j=0;jnext=NULL) mesg(“参数太少导致错误!“); else if(command-next-next!=NULL) mesg(“参数太多导致错误!“); else strcpy(tempfile,command-next-string); for(i=0;i=savenum) m

32、esg(“文件不存在!“); else tempsave=i; for(i=0;i=opennum) mesg(“文件没有打开!“); else if(userfdtempsave.lengthnext=NULL) mesg(“参数太少导致错误!“); else if(command-next-next!=NULL) mesg(“参数太多导致错误“); else strcpy(tempfile,command-next-string); for(i=0;i=savenum) mesg(“文件不存在!“); else tempsave=i; for(i=0;i=opennum) mesg(“文件

33、没有打开!“); else if(userfdtempsave.length“,“命令格式:setpass“,“命令格式:create “,“命令格式:open /r|/w|/d “,“命令格式:read “,“命令格式:write “,“命令格式 t:delete “,“命令格式:help “,“命令格式:exit“,“命令格式:copy “,“命令格式:rename “; static char *detail=“解说:用户进入多用户多级目录文件系统.“,“解说:修改用户密码.“,“解说:用户退出多用户多级目录文件系统.“,“解说:创建新文件.“,“解说:/r-只读 deflaut nt

34、/w-读和修改 nt /d-读、修改和 删除.“,“解说:读文件.“,“解说:修改新文件.“,“解说:删除新文件.“,“解说:/u-列出用户账号nt /o-列出打开文件 nt /f -列出用 户文件deflaut“,“解说:-列出命令详细格式和解说.nt deflaut 列出命令.“,“解说:退出文件系统“,“解说:复制一个文件到另一个文件“,“解说:修改文件名.“; int helpnum=13;int i;if(command-next=NULL) mesg(cmdhlp9);mesg(detail9);mesg(“步骤 1:用 login 命令登陆“);printf(“t 输入用户名是旧

35、用户就直接登陆,否则就创建新用户“);mesg(“步骤 2:打开(open 命令)文件再读(read 命令),写(write 命令),删 除(delete 命令)“);printf(“ 你可以打开一个或多个文件,一个命令能打开一个文件“);mesg(“步骤 3:读(read 命令),写(write 命令)或删除(delete 命令)一些文 件“);printf(“ 你可以操作打开文件中的一个,一个命令能操作一个文件“);mesg(“步骤 4:关闭(close 命令)打开文件“);printf(“ 你能关闭(close 命令)一个打开的文件,一个命令能打开一 个文件“);mesg(“步骤 5:用户退出 关闭所有用户打开的文件“);printf(“ n 可输入的命令清单:“);for(i=0;inext-next!=NULL) mesg(“参数太多“);else for(i=0;inext-string,cmdi)=0) break;if(i=helpnum) mesg(“这命令不存在!“);else mesg(cmdhlpi); mesg(detaili);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com