操作系统文件系统管理实验.docx
《操作系统文件系统管理实验.docx》由会员分享,可在线阅读,更多相关《操作系统文件系统管理实验.docx(29页珍藏版)》请在冰豆网上搜索。
操作系统文件系统管理实验
昆明理工大学信息工程与自动化学院学生实验报告
(2010—2011学年第二学期)
课程名称:
操作系统开课实验室:
信自楼4442011年5月28日
年级、专业、班
学号
姓名
成绩
实验项目名称
文件系统管理实验
指导教师
教师评语
教师签名:
年月日
一、实验目的
通过编写文件管理系统的算法,设计多用户,以密码进入。
在每个用户下建立文件,根据其结构体的元素有属性,名字,内容。
利用这些元素去模拟文件的创建,删除,打开,修改属性。
达到提高编程能力的目的。
二、实验原理及基本技术路线图(方框原理图)
用C语言或C++语言开发。
在设计该文件管理系统时,设计多用户,以密码进入。
在每个用户下建立文件,根据其结构体的元素有属性,名字,内容。
利用这些元素去模拟文件的创建,删除,打开,修改属性。
系统设计
voidcheck()//密码认证
voidcreatefile()/*创建文件操作*/
voiddeletefile()//删除文件
voidopenfile()//打开文件
voidmodifyfile()/修改文件
voidcopyfile()//复制
voidcatalogue()/*目录管理子程序*/
intinit()/*初始化操作界面函数*/
数据结构说明
本系统一共建立了Administrator和Guest两个用户,每个用户拥有结构体数组为structFliefa[8]和structFliefg[8]每个用户最多可建立8个文件,每个文件对应一个文件模块;
文件模块:
structFlie
{
inted;//判断是否正存放文件
charf_name[8];//文件名
charf_c[8];//存放文件内容
intatt;//文件属性0为只读1为只写//用于指向文件内容模块
}fa[8],fg[8];
各核心模块设计及实现主函数
通过switch(i),
当case1:
/*创建文件*/case2:
/*删除文件*/
case3:
//打开文件
case4:
//修改文件
case5:
//复制、粘贴文件
case6:
/*文件目录管理*/
三、所用仪器、材料(设备名称、型号、规格等)。
所用仪器:
计算中心201;操作系统:
MicrosoftVisualC++;软件平台:
MicrosoftVisualC++
四、实验方法、步骤
#include
#include/*不容易归类的标准函数库*/
#include
#include
#include
structFlie{
inted;//判断是否正存放文件
charf_name[8];//文件名
charf_c[8];//文件内容模块
intatt;//文件属性0为只读1为只写//用于指向文件内容模块
}fa[8],fg[8];
intx,k=0;//全局钥匙
voidcheck()//密码认证
{
intcheck,a=1;
charpin1[]="wangji";//此处设定用户口令
charpin[20];
while(a)
{
printf("****************************\n");
printf("*文件管理系统用户登录*\n");
printf("****************************\n");
printf("请选择用户:
\n");
printf("1.Administrator2.Guest3.退出系统\n");
scanf("%d",&x);
getchar();
if(x==3)
{
system("cls");
break;
}
printf("密码:
");
scanf("%s",pin);
check=strcmp(pin,pin1);
if(check!
=0)
{
system("cls");
printf("\n密码错误!
请重新输入:
\n");
}
else
{
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");
printf("请输入所要创建的文件名称:
");
scanf("%s",name);
if(x==1)
{
for(i=0;i<8;i++)
{
for(h=0;h<8;h++)
pin[h]=fa[i].f_name[h];
check=strcmp(pin,name);
if(check!
=0){}
else
{
printf("\n创建错误!
..........................文件已经存在!
\n");
Sleep(1000);
handle=0;
getchar();
}
break;
}
if(k>=8)
{printf("已经超过8个文件!
");
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;
k=k+1;
printf("K=%d\n",k);
break;
}
else
printf("错误!
请重新输入:
\n");
}
printf("请输入文件内容:
");
scanf("%s",fa[h].f_c);
printf("输入内容成功!
\n");
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)
{
fg[h].att=a;
printf("\n创建文件成功.\n");
fg[h].ed=1;
k=k+1;
printf("K=%d\n",k);
break;
}
else
printf("错误!
请重新输入:
\n");
}
printf("请输入文件内容:
");
scanf("%s",fg[h].f_c);
printf("输入内容成功!
");
break;
}
}
break;
}
}
}
voiddeletefile()//删除文件;
{
charname[8],same[8];
inti,check,h;
while
(1)
{
if(x==1)
{
printf("请输入要删的文件名:
");
scanf("%s",name);
for(i=0;i<8;i++)
{
for(h=0;h<8;h++)
same[h]=fa[i].f_name[h];
check=strcmp(same,name);
if(check!
=0)
{printf("文件不存在!
\n");
break;
}
else
{strcpy(fa[i].f_name,"");
strcpy(fa[i].f_c,"");
fa[i].ed=0;
printf("删除成功!
\n");
getchar();
break;
}
}
break;
}
if(x==2)
{
printf("请输入要删的文件名:
");
scanf("%s",name);
for(i=0;i<8;i++)
{
for(h=0;h<8;h++)
same[h]=fg[i].f_name[h];
check=strcmp(same,name);
if(check!
=0)
{printf("文件不存在!
\n");
break;
}
else
{strcpy(fg[i].f_name,"");
strcpy(fg[i].f_c,"");
fg[i].ed=0;
printf("删除成功!
\n");
getchar();
break;
}
}
}
break;
}
}
voidopenfile()//打开文件
{
while
(1)
{inti;
if(x==1)
{
printf("请输入K的值:
");
scanf("%d",&i);
if(i<=k)
printf("文件%s:
%s\n",fa[i].f_name,fa[i].f_c);
else
printf("请重新输入I");
break;
}
if(x==2)
{
printf("请输入i的值:
");
scanf("%d",&i);
if(i<=k)
printf("文件%s:
%s\n",fg[i].f_name,fg[i].f_c);
else
printf("请重新输入I");
break;
}
}
getchar();
}
voidmodifyfile()//修改文件;
{
inti,h,j;
charname[8],name1[8];
printf("1.修改文件名称\n2.修改文件属性\n");
scanf("%d",&i);
if(x==1)
{
for(h=0;hprintf("文件名为:
%s\n",fa[h].f_name);
printf("文件属性:
%d\n",fa[h].att);
if(i==1)
{
printf("请输入要修改的文件名称:
");
scanf("%s",name);
for(h=0;h{if(strcmp(name,fa[h].f_name)==0)
{
printf("请输入新的文件名:
");
scanf("%s",name1);
strcpy(fa[h].f_name,name1);
printf("修改成功!
\n");
Sleep(1000);
break;
}
else
printf("没找到相应的文件!
");
}
}
if(i==2)
{
printf("请输入要修改的文件名称:
");
scanf("%s",name);
for(h=0;h{if(strcmp(name,fa[h].f_name)==0)
{Sleep(1000);
printf("请选择:
1.只读/2.只写\n");
scanf("%d",&j);
if(j==1)
fa[h].att=0;
else
fa[h].att=1;
printf("修改成功!
\n");
Sleep(1000);
break;
}
}
}
}
if(x==2)
{
for(h=0;hprintf("文件名为:
%s\n",fg[h].f_name);
printf("文件属性:
%d\n",fg[h].att);
if(i==1)
{
printf("请输入要修改的文件名称:
");
scanf("%s",name);
for(h=0;h{if(strcmp(name,fg[h].f_name)==0)
{printf("请输入新的文件名:
");
scanf("%s",name1);
strcpy(fg[h].f_name,name1);
printf("修改成功!
\n");
Sleep(1000);
break;
}
else
printf("没找到相应的文件!
\n");
}
}
if(i==2)
{
printf("请输入要修改的文件名称:
");
scanf("%s",name);
for(h=0;h{if(strcmp(name,fg[h].f_name)==0)
{
printf("请选择:
1.只读/2.只写\n");
scanf("%d",&j);
if(j==1)
fg[h].att=0;
else
fg[h].att=1;
printf("修改成功!
\n");
Sleep(1000);
break;
}
else
printf("没找到相应的文件!
\n");
}
}
}
}
voidcopyfile()//复制//粘贴文件;
{
inth,j;
charname[8];
if(x==1)
{
for(h=0;h{
printf("文件名为:
%s\n",fa[h].f_name);
printf("文件属性:
%d\n",fa[h].att);
printf("文件内容:
%s\n",fa[h].f_c);
printf("*********************************\n");
}
printf("请输入需要复制的文件名:
");
scanf("%s",name);
for(h=0;h{if(strcmp(name,fa[h].f_name)==0)
printf("复制文件成功!
\n");
if(k<8)
{printf("进行粘贴吗?
请选择:
1.YES2.N0T\n");
scanf("%d",&j);
if(j==1)
{
fa[k].att=fa[h].att;
fa[k].ed=fa[h].ed;
strcpy(fa[k].f_c,fa[h].f_c);
strcpy(fa[k].f_name,fa[h].f_name);
printf("粘贴成功:
\n");
k=k+1;
Sleep(1000);
for(h=0;h{
printf("文件名为:
%s\n",fa[h].f_name);
printf("文件属性:
%d\n",fa[h].att);
printf("文件内容:
%s\n",fa[h].f_c);
printf("文件状态:
%d\n",fa[h].ed);
printf("------------------------------\n");
Sleep(2000);
}
break;
}
}
}
}
if(x==2)
{
for(h=0;h{
printf("文件名为:
%s\n",fg[h].f_name);
printf("文件属性:
%d\n",fg[h].att);
printf("文件内容:
%s\n",fg[h].f_c);
printf("**********************************\n");
}
printf("请输入需要复制的文件名:
");
scanf("%s",name);
for(h=0;h{if(strcmp(name,fg[h].f_name)==0)
printf("复制文件成功!
\n");
if(k<8)
{printf("进行粘贴吗?
请选择:
1.YES2.N0T\n");
scanf("%d",&j);
if(j==1)
{
fg[k].att=fg[h].att;
fg[k].ed=fg[h].ed;
strcpy(fg[k].f_c,fg[h].f_c);
strcpy(fg[k].f_name,fg[h].f_name);
printf("粘贴成功:
\n");
Sleep(1000);
k=k+1;
for(h=0;h{
printf("文件名为:
%s\n",fg[h].f_name);
printf("文件属性:
%d\n",fg[h].att);
printf("文件内容:
%s\n",fg[h].f_c);
printf("文件状态:
%d\n",fg[h].ed);
printf("-------------------------------\n");
Sleep(3000);
}
break;
}
}
}
}
}
voidcatalogue()/*目录管理子程序*/
{
intx,a=1,h;
while(a)/*目录管理操作*/
{
printf("-----------------------------\n");
printf("*目录管理*\n");
printf("*****************************\n");
printf("1.显示目录2.退出\n");
printf("-----------------------------\n");
printf("请选择:
");
scanf("%d",&x);
while(x<1||x>2)
{
printf("\n错误!
请重新输入:
");
scanf("%d",&x);
}
switch(x)
{
case1:
/*显示目录操作*/
{
system("cls");
printf("\n文件目录为:
\n");
for(h=0;h{if(x==1)
printf("文件Administrator/%s\n",fa[h].f_name);
printf("...........");
if(x==2)
printf("\nGuest/%