多级文件目录的文件管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
山东理工大学计算机学院
课程设计
(操作系统)
班级
姓名
学号
指导教师
二○一一年六月二十四日
课程设计任务书及成绩评定
课题名称基于多级文件目录的文件管理系统设计
Ⅰ、题目的目的和要求:
巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。
Ⅱ、设计进度及完成情况
Ⅲ、主要参考文献及资料
[1] 汤子赢等.计算机操作系统(第二版).西安电子科技大学出版社,
[2] 冯耀霖等.操作系统,西安电子科技大学出版社.1992
[3] 张尧学等.计算机操作系统教程(第2版).清华大学出版社,
[4] 谭耀铭.操作系统.中国人民大学出版社,
[5] 刘坤起. 操作系统学习辅导与习题详解[M]. 北京: 电子工业出版社, 2003:58-67
[6]孙钟秀等编着,操作系统教程[M],高等教育出版社,2003:46-78
Ⅳ、成绩评定:
设计成绩:(教师填写)
指导老师:(签字)
二○一一年六月二十四日
目录
第一章概述 (1)
第二章系统分析 (2)
第三章系统设计 (3)
第四章程序设计流程图或N-S图 (6)
第五章调试过程中的问题及系统测试情况 (7)
第六章结束语 (9)
附录 (10)
第一章概述
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。
课程设计是让同学对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。
《计算机操作系统》一门重要的专业课,是开发操作系统和软件系统的理论和应用基础。
本课程设计要求设计一个基于多级文件目录的文件管理系统。
通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。
第二章系统分析
1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多级文件目录的文件管理系统。
2.文件物理结构可采用显式链接或其他方法。
4.文件目录结构采用多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。
目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为。
5.设计一个较实用的用户界面,方便用户使用。
要求提供以下相关文件操作:
第三章系统设计1.文件的操作
(1)文件的创建:
(2)文件的打开:
(3)文件的读:read
(4)文件的写:write
(5)文件关闭:close
2.数据结构体
1).文件夹数据结构体:
typedef struct MFD 户文件数据结构体:typedef struct UFD 能实现命令数据结构体:typedef struct COMM 要模块组成
1).头文件:
#include <>
#include <> 能模块实现函数:void init();
行后主界面显示
图2主界面
2.输入login命令用户登陆,当用户账号不存在时,即可创建:
图3创建用户
3.创建用户下文件功能实现:
图4创建用户
4.打开文件open命令功能的实现
图5打开文件
5.读文件read命令功能实现
图6.读文件
6. 写文件write命令功能实现,及对内容中添加实现
图7写文件
8.退出文件logout操作
图8退出文件
第六章结束语
这次操作系统课程设计,在编写过程中,遇到很多难题,特别是在操作系统实验中不曾注意到的问题,也有许多新的问题,在实际反复调试运行中,不断加深了对操作系统的理解,也很大地程度上提高了编程的能力,由于对重要概念的把握程度还不够深入,在实际理解编写时遇到很多不该发生的问题。
不过,都很好的解决并牢牢地掌握住了。
通过做多级目录文件系统,我知道了多级目录文件系统的工作原理,在打开文件时系统是如何进行操作的,并加深了理解。
希望在以后的学习中,继续保持这份昂扬的斗志,继续努力学习计算机方面的知识,永不懈怠。
通过这次课程设计,不仅让我了解了多级目录文件系统,更重要的还让我学会了、或者说是验证了“做事一定要有次序和对事物的总体把握”这句话。
开始我一味的进行调试,急切的想侥幸调试出来,但由于没有进行深入的考虑,我调试了很久都没没有成功,我仔细的分析题目,分析材料,在原由的基础上我进行了改正,我最后还是调试成功了,虽然还是经过了一翻努力,当然汗水还是留的很值,这次操作系统实习,不仅让我对操作系统这门课程有了更深入的研究、对很多重要的概念有了巩固和掌握,还给了我今后做事的启示。
做事要塌实,不能想着一步登天,要有计划,有目的的进行做事。
盲目真的不应该再在我们新一代的大学生身上出现了,我们应该认真找到自己的缺点并且及时改正。
在这里,我如果不说感谢的话,不知道要说些什么好;首先感谢学校和父母,然后更重要的是感谢老师的教导。
“活到老,学到老”,这也是我整个学习过程中的一次经验、一次总结,我相信它肯定会给我今后的学习有所启示和指导作用。
附录:
源程序代码:
#include <>
#include <> sername,tempname); assword,temppass);
ilename,tempfile); rotect=tempprot; ength=templength; sername,tempname)==0)
break; n 登陆失败!");
else
{
strcpy(mainfd[usernum].username,tempname);
assword,password);
usernum++;
strcpy(username,tempname);
mesg("创建新用户!\n 登陆成功恭喜!");
init_ufd(username); sername,fp);
fputs("\n",fp);
fputs(mainfd[i].password,fp);
fputs("\n",fp);
}
fclose(fp);
}
}
else assword,password)!=0) mesg("登陆失败!输入密码错误!");
else
{
mesg("登陆成功恭喜你!");
strcpy(username,tempname);
init_ufd(username);
}
}
}
void setpass() sername,username)==0)
break;
if(strcmp(mainfd[i].password,oldpass)!=0) mesg("旧密码错误!");
else
{
printf("\n 新密码:");
strcpy(newpass,getpass());
printf("\n 确认密码:");
strcpy(confirm,getpass());
if(strcmp(newpass,confirm)!=0)
mesg("密码修改错误! 确认密码错误.请重新输入");
else
{
strcpy(mainfd[i].password,newpass);
mesg("Password changed!");
fp=fopen("","w+");
for(i=0;i<usernum;i++) sername,fp); fputs("\n",fp);
fputs(mainfd[i].password,fp);
fputs("\n",fp);
}
fclose(fp);
}
}
}
}
void create()
{
mesg("File open success!");
}
void myopen() ilename)==0)
break;
if(i>=savenum)
mesg("File not existed!");
else ilename)==0)
break;
if(i<opennum) pencode!=tempcode)
{
openfd[i].opencode=tempcode;
mesg("File permission changed!");
}
}
else if(opennum>=L) ilename,tempfile);
openfd[opennum].opencode=tempcode;
workfile=opennum;
opennum++;
mesg("File open success!");
}
}
}
}
}
void myclose() ilename,tempfile)==0)
break;
if(i>=savenum) ilename,tempfile)==0)
break;
if(j>=opennum) ilename,"");
openfd[j].opencode=' ';
opennum--;
mesg("文件关闭成功!");
}
}
}
}
}
void mydelete() ilename,tempfile)==0)
break;
tempsave=i;
if(tempsave>=savenum) ilename,tempfile)==0)
break;
if(j<opennum) ilename,"");
userfd[tempsave].protect=' ';
userfd[tempsave].length=0;
savenum--;
for(i=tempsave;i<=savenum;i++) ilename,userfd[i+1].filename);
userfd[i].protect=userfd[i+1].protect;
userfd[i].length=userfd[i+1].protect;
}
mesg("File delete!");
fp=fopen(username,"w+"); ilename,fp);
fputs("\n",fp);
fprintf(fp,"%c\n%d\n",userfd[i].protect,userfd[i].length);
}
fclose(fp);
}
}
}
}
}
void myread() ilename)==0)
break;
if(i>=savenum)
mesg("文件不存在!");
else
{
tempsave=i;
for(i=0;i<opennum;i++)
if(strcmp(tempfile,openfd[i].filename)==0)
break;
if(i>=opennum)
mesg("文件没有打开!");
else
{
if(userfd[tempsave].length<1000)
printf("\n The file size is %d B",userfd[tempsave].length);
else
if(userfd[tempsave].length=1000)
printf("\n The file size is 1000 B");
else
printf("\n The file size is %d,%d KB",
userfd[tempsave].length/1000,userfd[tempsave].length%1000);
mesg("文件读取成功!");
}
}
}
}
void mywrite() ilename)==0)
break;
if(i>=savenum)
mesg("文件不存在!");
else
{
tempsave=i;
for(i=0;i<opennum;i++)
if(strcmp(tempfile,openfd[i].filename)==0)
break;
if(i>=opennum)
mesg("文件没有打开!");
else
{
if(userfd[tempsave].length<1000)
printf("\n The file size is %d KB",userfd[tempsave].length);
else
if(userfd[tempsave].length=1000)
printf("\n The file size is 1000KB");
else
printf("\n The file size is %d,%d KB",
userfd[tempsave].length/1000,userfd[tempsave].length%1000);
mesg("文件写成功!");
}
}
}
}
void help() ,
"解说:修改用户密码.",
"解说:用户退出多用户多级目录文件系统.",
"解说:创建新文件.",
"解说:/r--只读 [deflaut] \n\t /w--读和修改 \n\t /d--读、修改和删除.",
"解说:读文件.",
"解说:修改新文件.",
"解说:删除新文件.",
"解说:/u--列出用户账号\n\t /o--列出打开文件 \n\t /f --列出用户文件[deflaut]",
"解说:<command>--列出命令详细格式和解说.\n\t [deflaut] 列出命令.",
"解说:退出文件系统",
"解说:复制一个文件到另一个文件",
"解说:修改文件名."};
int helpnum=13;
int i;
if(command->next==NULL)
{
mesg(cmdhlp[9]);
mesg(detail[9]);
mesg("步骤1:用login命令登陆");
printf("\t 输入用户名是旧用户就直接登陆,否则就创建新用户");
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;i<helpnum;i++)
{
if(i%4==0)
printf("\n");
printf("%-10s",cmd[i]);
}
}
else if(command->next->next!=NULL)
mesg("参数太多");
else
{
for(i=0;i<helpnum;i++)
if(strcmp(command->next->string,cmd[i])==0)
break;
if(i>=helpnum)
mesg("这命令不存在!");
else
{
mesg(cmdhlp[i]);
mesg(detail[i]);
}
}
}。