文件操作与管理Word格式.docx
《文件操作与管理Word格式.docx》由会员分享,可在线阅读,更多相关《文件操作与管理Word格式.docx(28页珍藏版)》请在冰豆网上搜索。
111
允许写允许读允许执行
如对应位为0,则不允许。
(3)程序中使用的主要数据结构如下:
主文件目录和用户文件目录
打开文件目录
(4)程序框图如图所示。
2、任务的设计与实现(分别给出系统总控和本人负责实现的算法流程图与说明)
1.整个程序运行过程如下:
输入用户名—>
在MFD中查找—>
显示UFD文件链表—>
初始化AFD运行文件表
—>
输入操作命令—>
执行操作命令—>
保存文件目录—>
打印文件目录—>
结束
2.voidCreate()创建一个文件
选择CREATE命令后,查看该用户的UFD链表内是否还有空闲结点:
(1)若有则设置该结点的内容,然后打开、修改AFD;
(2)若无则报错并退出。
(3)
3.voidRead()读一个文件
读文件的关键是保护码的判断。
选择了READ命令后,输入需要读的文件名,在UFD中搜索是否有该文件名:
(1)若有,但该文件没被打开,则报错;
(2)若有,且已被打开,此处要分两种情况:
●如果保护码的读位为“0”,则不能对该文件进行读操作。
●否则,就通过文件号来读文件,即通过AFD中的point指针来查找该文件。
(3)
4.VoidNowshow()显示当前用户目录
程序运行结果
3操作过程和结果分析
用户验证
创建文件
写文件
读文件
显示当前用户目录
关闭与删除
更改用户
四、《操作系统》课程设计小结(收获、不足与建议)
这次实验是写一个控制用户和用户目录下的文件的管理的程序,要求虽然很简单,但实际上要写出来其实需要很多知识,对于一个刚入门的人来说还是很有难度的,虽然项目是小组完成,但实际上还是很有难度,每个人对项目的理解不同,所以要整合程序也是一个难题,每个人只负责一小块内容,但是为了默契配合,必须在小组中进行大量的交流,但是难度也意味着收获,本次项目的过程让我对C类语言进一步理解,也让我自己了解到自己还需要学习很多很多,对于这次的项目,我们小组做的程序很好的满足了要求,但是容错能力比较差,输入的参数需要正确,保存的内容也极其有限,在我看来,我们小组还是很出色的,毕竟在那么短时间内基本完成了项目要求。
5、附录(主要源程序和运行结果的清单)
#include<
iostream>
stdio.h>
#include<
memory.h>
string>
cstring>
iomanip>
usingnamespacestd;
stringa[10]={"
a"
"
b"
c"
d"
e"
f"
g"
h"
i"
j"
};
stringcommand[9]={"
CREATE"
DELETE"
OPEN"
CLOSE"
READ"
WRITE"
CHANGE"
NOWSHOW"
BYE"
structUFD
{
stringfilename;
intpro[3];
intcodel;
UFD*next;
structMFD
stringusername;
UFD*file;
MFD*next;
structAFD
intfilenum;
charfilepro[3];
UFD*point;
AFD*next;
AFD*openfile=NULL;
MFD*user=NULL;
MFD*thisuser;
//当前用户
voidinit()//初始化函数
intx=0;
for(inti=0;
i<
10;
i++)
{
MFD*p;
p=newMFD;
p->
username=a[x];
UFD*fhead=NULL;
for(intj=0;
j<
j++)
{
UFD*q;
q=newUFD;
q->
filename="
******"
;
for(inta=0;
a<
3;
a++)
{q->
pro[a]=0;
}
codel=0;
q->
next=fhead;
fhead=q;
p->
file=fhead;
if(j==9)//变成循环链表
{
UFD*r=fhead;
while(r->
next!
=NULL)
{r=r->
next;
r->
}
}
p->
next=user;
user=p;
x++;
}
//AFD的初始化
for(intk=0;
k<
5;
k++)
AFD*f;
f=newAFD;
f->
filenum=5-k;
{f->
filepro[j]=0;
point=NULL;
next=openfile;
openfile=f;
if(i==4)//打开文件链表设为循环链表
AFD*p=openfile;
while(p->
{p=p->
intcheckUser(stringusername)
MFD*p;
for(p=user;
p!
=NULL;
p=p->
next)
if(p->
username==username){break;
if(p!
{thisuser=p;
return1;
else{return0;
voidshow()
cout<
<
"
YOURFILEDIRECTORY"
endl;
setw(20)<
setiosflags(ios:
:
left)<
setfill('
'
)<
FILENAME"
PROTECTION"
CODELENGTH"
MFD*p=thisuser;
UFD*q=p->
file;
cout<
q->
filename;
pro[0]<
pro[1]<
pro[2];
"
codel<
q=q->
voidOpenMode(UFD*p,stringname)
AFD*f=openfile;
inti;
for(i=0;
if(f->
point!
=NULL&
&
f->
point->
filename==name){cout<
THISFILEISALREADYOPENED!
return;
f=f->
f=openfile;
point==NULL)break;
if(i==5){cout<
ERROR!
YOUCAN'
TOPENTHISFILE,NUMBERMUST<
=5!
else
ENTERTHEOPENMODE?
stringprotect;
cin>
>
protect;
intj;
for(j=0;
if(p->
pro[j]!
=protect[j]-48)break;
if(j!
=3){cout<
ERROR,OPENMODEISWRONG!
else
cout<
THISFILEISOPENED,ITSOPENNUMBERIS"
filenum<
f->
point=p;
for(intj=0;
{f->
filepro[j]=p->
pro[j];
}
voidCreate()
THENEWFILESNAME(LESSTHAN9CHARS)?
stringname;
cin>
name;
THENEWFILE'
SPROTECTIONCODE?
stringprotect;
UFD*p=thisuser->
UFD*q=p;
intn;
for(n=0;
n<
n++)
if(q->
filename=="
)break;
if(n==10)
{cout<
CREATFAILED!
!
THEREISNOSPACE,FILENUMBERMUST<
=10!
filename=name;
for(inti=0;
pro[i]=protect[i]-48;
THENEWFILEISCREATED."
OpenMode(q,name);
return;
voidOpen()
FILENAMETOBEOPENED?
filename==name)break;
if(n==10){cout<
THISFILEISNOTEXISTS!
OpenMode(q,name);
voidClose1(AFD*f)
f->
{f->
filepro[i]=0;
SUCCESS!
THISFILEISCLOSED!
return;
voidClose()
CLOSETHEFILE'
SNAME:
CAN'
TFINDTHISFILE!
AFD*f=openfile;
if(f->
point==q)break;
f=f->
if(n==5){cout<
THISFILEISNOTOPENED!
}\
Close1(f);
voidDelete()
DELETEFILENAME?
inti;
point==q)
cout<
THISFILEISOPENED!
CLOSEDIT?
(Y/N)"
chary;
cin>
y;
if(y=='
Y'
){Close1(f);
break;
elsereturn;
for(intx=0;
x<
x++)
{q->
pro[x]=0;
THISFILEISBEDELETED!
voidRead()
OPENFILENUMBER?
intnum;
num;
filenum==num&
=NULL)break;
filepro[0]==1){cout<
READING!
else{cout<
THISFILECAN'
TREADWITHREADINGRIGHTLIMITED!
voidWrite()
filepro[1]==1)
HOWMANYCHARACTERSTOBEWRITTENINTOTHATFILE?
intcode;
cin>
code;
codel=code;
TWRITEWITHWRITINGRIGHTLIMITED!
voidChange()
while(x==0)
YOURNAME?
stringusername;
username;
x=checkUser(username);
if(x==0)cout<
YOURNAMEISNOTINTHEUSERNAMETABLE,TRYAGAIN."
}show();
voidNowshow(intb)
{inta=1;
intc;
c=a-b;
if(c!
=0)
show();
voidFileWork(intcom)
if(com==1){Create();
}//执行create
if(com==2){Delete();
}//执行delete
if(com==3){Open();
}//执行open
if(com==4){Close();
}//执行close
if(com==5){Read();
}//执行read
if(com==6){Write();
}//执行write
if(com==7){Change();
}//执行Change
if(com==8){inth=3;
Nowshow(h);
}//执行Nowshow
//执行bye
intmain()
RUN"
init();
//初始化
intx=1;
Nowshow(x);
Change();
intcom=0;
while(com!
=9)
COMMANDNAME?
strings;
s;
for(i=0;
9;
if(s==command[i]){com=i+1;
if(i==9)
COMMANDNAMEGIVENISWRONG!
ITSHOULDBEONEOFFOLLOWING:
CREATE,DELETE,OPEN,CLOSE,READ,WRITE,CHANGE,NOWSHOW,BYE.TRYAGAIN"
continue;
else{FileWork(com);
return0;