文件管理系统设计.docx
《文件管理系统设计.docx》由会员分享,可在线阅读,更多相关《文件管理系统设计.docx(19页珍藏版)》请在冰点文库上搜索。
**大学
计算机科学与技术学院
课程设计报告
(2006 ~2007 学年度 第2学期)
课程名称 操作系统课程设计项目名称 文件管理系统设计
姓名 学号
专业 班级
地点 教师
xx计算机科学与技术学院
课程设计报告
1.题目内容:
文件管理系统设计:
设计和调试一个简单的文件系统,通过模拟文件操作命令的执行,来模拟文件管理,对主要文件操作命令的实质和执行过程有比较深入的了解,掌握它们的基本实施方法.
2.设计任务及主要技术:
设计任务:
1.设计一个支持n个用户的文件系统,每个用户可拥有多个文件.
2.采用二级或二级以上的多级文件目录管理.
主要技术:
1.对文件应设置存取控制保护方式,如“允许读”、“允许写”等.
2.系统的外部特征应接近于真实系统,可设置下述文件操作命令:
建立文件、修改属性、删除文件、读文件、写文件、复制文件、查询目录.
3.通过键盘使用该文件系统,系统应显示操作命令的执行结果.
3.设计方案及论证结果
设计方案:
本系统一共建立了Administrator 和Guest两个用户,每个用户拥有一个结构体数
组为structFliefa[8]和structFliefg[8]每个用户最多可一建立8个文件,每个文件对应一个文件模块;
文件模块:
structFlie
{
inted; //判断是否正存放文件charf_name[8]; //文件名
charf_c[8]; //存放文件内容
intatt; //文件属性0为只读1为只写
};
文件模块示意图:
ed
f_name[8]
att
f_c[8]
函数设计和功能分析:
系统调用原型
功能
主要参数说明
voidcheck()
密码认证
admin为函数出口
intinit()
初始化操作界面
返回i执行相应的操作
voidcreatefile()
创建文件
name[]为文件名->fa[].f_name[]
voiddeletefile()
删除文件
voidopenfile()
打开文件
voidexit()
退出系统
voidwritefile()
书写文件
c[]为文件内容->fa[].f_c[]
voidcopyfile()
复制文件
voidmodifyfile()
修改属性
a为文件属性->fa[].att
voidcatalogue()
目录管理
Main()函数的流程图:
开始
Y
退出
N
N
成功?
Y
N
消注?
结束
解析命令
接收命令
用户登陆
实现命令
选择用户
Y
Administrator
Guest
4.系统的原理框图:
flie1
flie2
…
…
flie1
flie2
…
…
ed
f_name[]
att
f_c[]
ed
f_name[]
att
f_c[]
文件名
文件属性
文件内容
判断存储状
5.设计程序:
#include
#include /*不容易归类的标准函数库*/#include
structFlie
{
inted; //判断是否正存放文件charf_name[8]; //文件名
charf_c[8]; //存放文件内容
intatt; //文件属性0为只读1为只写 //用于指向文件内容模块
}fa[8],fg[8];
intx; //全局钥匙voidcheck()//密码认证
{
intcheck,a=1;
charpin1[]="admin";//此处设定用户口令charpin[20];
while(a)
{
printf("****************************\n");printf(" * 文件管理系统用户登录*\n");printf("****************************\n");
printf("请选择用户:
\n");
printf(" 1.Administrator 2.Guest 3.退出系统\n");scanf("%d",&x);
getchar();if(x==3)
{
system("cls");break;
}
printf("密 码:
");
scanf("%s",pin);
check=strcmp(pin,pin1);if(check!
=0)
{
}
else
{
}
}
system("cls");
printf("\n密码错误!
请重新输入:
\n");
system("cls");a=0;
}
voidcreatefile()/*创建文件操作*/
{
inthandle=1,a,check,i,j,h;charname[8],pin[8];while
(1)
{
printf("****************************\n");printf(" * 创建文件*\n");
printf("****************************\n");
printf("请输入所要创建的文件名称:
\n");scanf("%s",name);
if(x==1)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fa[i].f_name[j];
check=strcmp(pin,name);if(check!
=0){}
else
{
printf("\n创建错误!
文件已经存在!
");
handle=0;
getchar();break;
}
}
if(handle==1)
{
for(h=0;h<8;h++)if(fa[h].ed==0)
{
strcpy(fa[h].f_name,name);while
(1)
{
printf("\n请选择文件属性(0.只读-1.只写):
");
scanf("%d",&a);
getchar();if(a==0||a==1)
{
fa[h].att=a;
printf("\n创建文件成功.\n");fa[h].ed=1;
break;
}
else
printf("错误!
请重新输入:
\n");
}
}
getchar();break;
}
}
break;
if(x==2)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fg[i].f_name[j];
check=strcmp(pin,name);if(check!
=0){}
else
{
printf("\n创建错误!
文件已经存在!
");
handle=0;
break;
}
}
if(handle==1)
{
for(h=0;h<8;h++)if(fa[h].ed==0)
{
strcpy(fg[h].f_name,name);while
(1)
{
printf("\n请选择文件属性(0.只读-1.只写):
");
scanf("%d",&a);
getchar();
if(a==0||a==1)
{
}
else
fg[h].att=a;
printf("\n创建文件成功.\n");fg[h].ed=1;
getchar();break;
}
break;
}
printf("错误!
请重新输入:
\n");
}
break;
}
}
}
voiddeletefile() /*删除文件的操作*/
{
intstatus=0,j=0,i,check,choice;charname[8],pin[8];
while
(1)
{
system("cls");
printf("****************************\n");printf(" * 删除文件*\n");
printf("****************************\n");
if(x==1)
{
printf("请输入所要删除的文件名称:
\n");
scanf("%s",name); /*输入要删除的文件名*/
printf("\n请确认(0-1):
");scanf("%d",&choice);
getchar();if(choice==1)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fa[i].f_name[j];
check=strcmp(pin,name);if(check!
=0){}
else
{
status=1;
if(fa[i].att==0) /*获取文件的状态,是否存在并且是否只读*/j=1;
if(j==1)
{
printf("\n删除错误!
文件为只读文件!
");//只读文件
}
elseif(j!
=0) //从目录中删除一个文件
{
strcpy(fa[i].f_name," ");
strcpy(fa[i].f_c," ");fa[i].ed=0;
printf("\n删除文件成功.");
}
getchar();break;
}
}
if(status!
=1)
{
printf("\n删除错误!
所要删除的文件不存在!
\n");/*文件不存在*/
getchar();
}
}
break;
}
if(x==2)
{
printf("请输入所要删除的文件名称:
\n");
scanf("%s",name); /*输入要删除的文件名*/
printf("\n请确认(0-1):
");scanf("%d",&choice);
getchar();if(choice==1)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fg[i].f_name[j];
check=strcmp(pin,name);if(check!
=0){}
else
{
status=1;
if(fg[i].att==0) /*获取文件的状态,是否存在并且是否只读*/j=1;
if(j==1)
{
printf("\n删除错误!
文件为只读文件!
");//只读文件
}
elseif(j!
=0) //从目录中删除一个文件函数
{
strcpy(fg[i].f_name," ");
strcpy(fg[i].f_c," ");fg[i].ed=0;
printf("\n删除文件成功.");
break;
}
getchar();break;
}
}
if(status!
=1)
{
printf("\n删除错误!
所要删除的文件不存在!
");/*文件不存在*/
getchar();
}
}
}
break;
}
}
voidopenfile() /*打开文件操作*/
{
inti,a=0,j,check;charname[8],pin[8];
printf("****************************\n");printf(" * 打开文件*\n");
printf("****************************\n");
printf("请输入您所要打开文件的名称:
\n");scanf("%s",name);
getchar();if(x==1)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fa[i].f_name[j];check=strcmp(pin,name);if(check!
=0){}
else
{
}
}
if(a!
=1)
printf("%s",fa[i].f_c);a=1;
printf("文件不存在!
");
getchar();
}
elseif(x==2)
{
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fg[i].f_name[j];check=strcmp(pin,name);if(check!
=0){}
else
{
}
}
if(a!
=1)
printf("%s",fg[i].f_c);a=1;
printf("文件不存在!
");
getchar();
}
}
voidwritefile()/*书写文件*/
{
inti,j,check,b=1;
charch=0,a=0,name[8],c[8],pin[8];while(b)
{
printf("****************************\n");printf(" * 书写文件*\n");
printf("****************************\n");
printf("请输入要书写的文件的名称:
\n");scanf("%s",name);
if(x==1)
{
for(i=0;i<8;i++) /*获取文件的状态,是否存在
*/
{
for(j=0;j<8;j++)pin[j]=fa[i].f_name[j];check=strcmp(pin,name);
if(check!
=0){}else
{
if(fa[i].att==0)
{
printf("书写错误!
只读文件!
\n");
a=1;
getchar();getchar();break;
}
printf("请输入文件的内容:
\n");
scanf("%s",c);
strcpy(fa[i].f_c,c);
printf("书写文件成功.\n");a=1;
b=0;
getchar();getchar();break;
}
break;
}
if(a!
=1)
{
printf("文件不存在!
");
getchar();
getchar();break;
}
break;
}
getchar();if(x==2)
{
for(i=0;i<8;i++) /*获取文件的状态,是否存在
*/
{
for(j=0;j<8;j++)pin[j]=fg[i].f_name[j];check=strcmp(pin,name);
if(check!
=0){}else
{
if(fa[i].att==0)
{
printf("书写错误!
只读文件!
\n");
a=1;
getchar();break;
}
printf("请输入文件的内容:
\n");
scanf("%s",c);
strcpy(fg[i].f_c,c);
printf("书写文件成功.\n");a=1;
getchar();getchar();break;
}
}
if(a!
=1)
{
printf("文件不存在!
");
break;
}
}
break;
}
}
voidcopyfile()//复制文件操作
{
inti,j,k,l,check,p;
charname[8],name1[8],pin[8];
printf("****************************\n");printf(" * 复制文件*\n");
printf("****************************\n");
if(x==1)
{
printf("请输入要复制的文件的名称:
\n");
scanf("%s",name);
getchar();
printf("请输入要复制到的文件的名称:
\n");scanf("%s",name1);
getchar();
for(i=0;i<8;i++) //获取文件的状态,是否存在
{
for(j=0;j<8;j++)
pin[j]=fa[i].f_name[j];check=strcmp(pin,name);
if(check!
=0){}else
{
for(k=0;k<8;k++) //获取文件的状态,是否存在
{
for(l=0;l<8;l++)pin[l]=fa[k].f_name[l];
check=strcmp(pin,name1);if(check!
=0){}
else
{
for(p=0;p<8;p++)
{
fa[k].f_c[p]=fa[i].f_c[p];
}
printf("复制成功\n");
}
}
}
}
}
if(x==2)
{
printf("请输入要复制的文件的名称:
\n");
scanf("%s",name);
getchar();
printf("请输入要复制到的文件的名称:
\n");scanf("%s",name1);
getchar();
for(i=0;i<8;i++) //获取文件的状态,是否存在
{
for(j=0;j<8;j++)
pin[j]=fg[i].f_name[j];check=strcmp(pin,name);
if(check!
=0){}else
{
for(k=0;k<8;k++) //获取文件的状态,是否存在
{
for(l=0;l<8;l++)pin[l]=fg[k].f_name[l];
check=strcmp(pin,name1);if(check!
=0){}
else
{
for(p=0;p<8;p++)
{
fa[k].f_c[p]=fa[i].f_c[p];
}
printf("复制成功\n");
getchar();
}
}
}
}
}
getchar();
}
voidmodifyfile()/*修改属性操作*/
{
intstatus=0,a,i,j,check;charchoice,name[8],pin[8];while
(1)
{
printf("****************************\n");printf(" * 修改属性*\n");
printf("****************************\n");
if(x==1)
{
printf("请输入所要修改属性的文件的名称:
\n");
scanf("%s",name);
getchar();
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fa[i].f_name[j];
check=strcmp(pin,name);if(check!
=0){}
else
{
printf("<0.只读--1.只写>\n");
printf("请选择文件属性:
");while
(1)
{
scanf("%d",&a);getchar();if(x==1||x==2)break;
else
printf("错误!
请重新输入:
\n");
}
fa[i].att=a;
printf("修改属性成功.\n");status=1;
break;
}
} /*获取文件的状态*/
if(status!
=1)
{
printf("错误!
文件不存在!
");
getchar();
printf("是否重新输入?
(Y-N)\n");scanf("%c",&choice);
getchar();if(choice=='N'||choice=='n')
break;
}
getchar();break;
}
if(x==2)
{
printf("请输入所要修改属性的文件的名称:
\n");
scanf("%s",name);
getchar();
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)pin[j]=fg[i].f_name[j];
check=strcmp(pin,name);if(check!
=0){}
else
{
printf("<0.只读--1.只写>\n");
printf("请选择文件属性:
");while
(1)
{
scanf("%d",&a);getchar();if(x==1||x==2)break;
else
printf("错误!
请重新输入:
\n");
}
fg[i].att=a;
printf("修改属性成功.\n");break;
}
if(i==7)
{
status=1;break;
}
} /*获取文件的状态*/
if(status=1)
{
printf("错误!
文件不存在!
");
getchar();
printf("是否重新输入?
(Y-N)\n");scanf("%c",&choice);
getchar();if(choice=='N'||choice=='n')
break;
}
getchar();
}
}
}
voidcatalogue() /*目录管理子程序*/
{
intx,a=1;charname[8];
while(a) /*目录管理操作*/
{
printf("**************