📄 cpp1.c
字号:
#include "stdio.h"
#include "conio.h"
#include "string.h"
#include "stdlib.h"
#define L 6 /* the most numbers of files*/
#define N 5 /* the most numbers of users*/
char MFD[N][20]={"abc","xyz"};
int U;
static int memo[128]={10,20,30,40,50,60,70,80,90};
struct FCB
{
char filename[20];
char access;
int length;
int flag;
int write;
int address[5];
int p[5];
};
struct UOF
{
char filename[20];
char access;
int length;
int flag;
int write;
int cre_clo; /*1 is creat;0 is close*/
};
struct FCB UFD[N][L]={{
{"a.txt",'w',3,1,3,{10,20,30},{10,20,30}},
{"b.txt",'r',3,1,3,{40,50,60},{40,50,60}},
{"c.txt",'w',3,1,3,{70,80,90},{70,80,90}}}};
struct UOF UOF[20];
void creat()
{
int j,le,i,address;
int m;
char s[20];
char ac;
printf("请输入文件名。\n");
scanf("%s",s);
for(j=0;j<L;j++)
if(strcmp(UFD[U][j].filename,s)==0)
{
printf("文件名相同不能创建。\n");
break;
}
if(j==L)
{
printf("输入长度。\n");
scanf("%d",&le);
getchar();
printf("输入状态。\n");
scanf("%c",&ac);
getchar();
printf("输入第一个模块号地址。\n");
scanf("%d",&address);
for(j=0;j<128;j++)
{
if(memo[j]==0)
{
memo[j]=address;
break;
}
}
for(i=0;i<L;i++)
{
if(UFD[U][i].flag==0)
{
strcpy(UFD[U][i].filename,s);
UFD[U][i].access=ac;
UFD[U][i].length=le;
UFD[U][i].flag=1;
UFD[U][i].address[0]=address;
UFD[U][i].p[0]=UFD[U][i].address[0];
m=i;
break;
}
}
for(i=0;i<5;i++)
{
if(UOF[i].flag==0)
{
strcpy(UOF[i].filename,s) ;
UOF[i].length=le;
UOF[i].access=ac;
UOF[i].cre_clo=1;
UOF[i].flag=1;
break;
}
}
printf("\n文件创建成功。\n");
}
}
void close(char name[20])
{
int i;
for(i=0;i<L;i++)
if(strcmp(UOF[i].filename,name)==0)
{
UOF[i].cre_clo=0;
strcpy(UOF[i].filename,"");
UOF[i].access=' ';
UOF[i].length=0;
UOF[i].write=0;
UOF[i].flag=0;
printf("文件关闭成功。\n");
break;
}
if(i==L)
printf("找不到文件!");
}
void del(char name[20])
{
int i,j,address=0;
for(i=0;i<L;i++)
if(strcmp(UFD[U][i].filename,name)==0)
{
strcpy(UFD[U][i].filename,"");
UFD[U][i].access=' ';
UFD[U][i].length=0;
UFD[U][i].write=0;
UFD[U][i].flag=0;
for(j=0;j<5;j++){ UFD[U][i].address[j]=address; }
if(strcmp(UOF[i].filename,name)==0)
{
UOF[i].cre_clo=0;
strcpy(UOF[i].filename,"");
UOF[i].access=' ';
UOF[i].length=0;
UOF[i].write=0;
UOF[i].flag=0;
}
printf("文件撤销成功。\n");
break;
}
if(i==L)
printf("文件已经被撤销!");
}
void read(char name[20])
{
int i,b,k;
printf("输入要读的长度。!\n");
scanf("%d",&b);
for(i=0;i<L;i++)
if(strcmp(UOF[i].filename,name)==0)
{
if(b>UOF[i].length)
printf("长度超出了文件的最大长度!");
else if(strcmp(UFD[U][i].filename,name)==0)
{
for(k=0;k<b;k++)
{
printf("第%d个地址是%d\n",k,UFD[U][i].address[k]);
}
printf("文件读成功。\n");
}
if(i==L)
printf("文件没打开,不能进行读操作!");
}
}
void open()
{
char na[20];
char c;
int x,m,j,i;
printf("请输入要打开的文件名。\n");
getchar();
gets(na);
printf("请输入您要进行的文件操作(W or R)。\n");
c=getchar();
getchar();
for(i=0;i<L;i++)
{
if(strcmp(UFD[U][i].filename,na)==0)
{
m=i;
for(j=0;j<20;j++)
{
if(strcmp(UOF[j].filename,na)==0)
{
if(UOF[j].cre_clo==1)
{
printf("文件为创建属性,不能打开。\n");
break;
}
else
{
printf("文件已经打开。\n");
break;
}
}
}
if(j==20)
{
if(UFD[U][m].access==c)
{
for(x=0;x<20;x++)
if(UOF[x].flag==0)
{
strcpy(UOF[x].filename,UFD[U][m].filename);
UOF[x].length=UFD[U][m].length;
UOF[x].access=UFD[U][m].access;
UOF[x].cre_clo=0;
UOF[x].flag=1;
UOF[x].write=UFD[U][m].write;
printf("文件打开成功。\n");
break;
}
}
else
{
printf("操作错误。\n");
}
}
break;
}
}
if(i==L)
{
printf("文件不存在。\n");
}
}
void write()
{
char nam[20];
int i,j,n,b,x,t,e,k;
int a;
int m;
static int ad[5];
printf("请输入要写的文件名。 \n");
getchar();
gets(nam);
for(x=0;x<6;x++)
{
if(strcmp(UFD[U][x].filename,nam)==0)
{
a=x;
for(i=0;i<20;i++)
{
if(strcmp(UOF[i].filename,nam)==0)
{
if(UOF[i].cre_clo==1&&UFD[U][a].access!='r')
{
m=i;
for(e=0;e<UFD[U][a].length;e++)
{
printf("输入第%d个地址。\n",e);
scanf("%d",&ad[e]);
for(k=0;k<20;k++)
if(ad[e]==memo[k])
{
printf("地址%d块号重复,请输入新的块号。\n",e);
scanf("%d",&ad[e]);
break;
}
for(j=0;j<20;j++)
{
if(memo[j]==0)
{
memo[j]=ad[e];
break;
}
}
UFD[U][a].address[e]=ad[e];
}
UFD[U][a].p[1]=UFD[U][a].address[1];
UFD[U][a].p[2]=UFD[U][a].address[2];
UFD[U][a].p[3]=UFD[U][a].address[3];
UFD[U][a].p[4]=UFD[U][a].address[4];
{
for(j=0;j<UFD[U][a].length;j++)
UFD[U][a].p[UOF[m].write++]=UFD[U][a].address[j];
}
for(j=0;j<UFD[U][m].length;j++)
{
if(UFD[U][a].address[j]!=0)
UFD[U][a].write++;
}
break;
}
else
{
if(UFD[U][x].access=='r')
{
printf("文件不能进行写操作。\n");
break;
}
else
{
printf("您要进行顺序修改还是选择修改(1/0,1为顺序修改,0为选择修改。)?\n");
scanf("%d",&n);
if(n==1)
{
for(e=0;e<UFD[U][x].length;e++)
{
printf("输入第%d个地址。\n",e+1);
scanf("%d",&ad[e]);
for(k=0;k<128;k++)
{
if(ad[e]==memo[k])
{
printf("第个%d地址块号重复,请输入新的块号。\n",e);
scanf("%d",&ad[e]);
break;
}
}
for(j=0;j<128;j++)
{
if(memo[j]==0)
{
memo[j]=ad[e];
break;
}
}
}
for(t=0;t<5;t++)
{
UFD[U][x].address[t]=ad[t];
}
for(t=0;t<5;t++)
UFD[U][x].p[t]=UFD[U][x].address[t];
printf("写文件成功。");
break;
}
else
{
printf("请输入你要修改的记录地址。\n");
scanf("%d",&b);
if(b<5)
{
printf("第 %d 个记录是 %d",b,UFD[U][x].p[b]);
printf("\n输入新地址。\n");
for(j=0;j<L;j++)
{
if(UFD[U][x].p[b]==UFD[U][x].address[j])
{
if(b<UFD[U][x].length)
{
scanf("%d",&UFD[U][x].address[j]);
break;
}
if(b>=UFD[U][x].length)
{
scanf("%d",&UFD[U][x].address[j]);
UFD[U][x].length++;
UOF[x].length++;
break;
}
}
}
printf("写文件成功。\n");
break;
}
else printf("找不到记录。");
break;
}
}
}
}
}
if(i==20)
printf("文件未打开,不能进行写操作。\n");
break;
}
}
if(x==6)
{
printf("文件未创建,不能进行写操作。 \n");
}
}
void print_UFD()
{
int i ;
printf("num filename access length flag ad1 ad2 ad3 ad4 ad5 \n ");
for(i=0;i<5;i++)
{
printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",i,UFD[U][i].filename,UFD[U][i].access,UFD[U][i].length,UFD[U][i].flag,UFD[U][i].address[0],UFD[U][i].address[1],UFD[U][i].address[2],UFD[U][i].address[3],UFD[U][i].address[4]);
}
}
void print_UOF()
{
int i;
printf("num filename access length flag write cre_clo.\n ");
for(i=0;i<5;i++)
{
printf("\n%d\t%s\t%c\t%d\t%d\t%d\t%d\n",i,UOF[i].filename,UOF[i].access,UOF[i].length,UOF[i].flag,UOF[i].write,UOF[i].cre_clo);
}
}
main()
{
char name[20];
char na[20];
int i,a;
printf("-------欢迎进入文件系统-------\n");
printf("\n请输入用户名。\n") ;
scanf("%s",name);
getchar();
for(i=0;i<N;i++)
{
if(strcmp(MFD[i],name)==0)
{
U=i;
while(1)
{
printf("\n------------欢迎使用-------------\n");
printf("----1:创建文件。 ----\n");
printf("----2:打开文件。 ----\n");
printf("----3:读文件。 ----\n");
printf("----4:写文件。 ----\n");
printf("----5:关闭文件。 ----\n");
printf("----6:撤销文件。 ----\n");
printf("----7:打印显示UFD。 ----\n");
printf("----8:打印显示UOF。 ----\n");
printf("----9:重新选择用户。 ----\n");
printf("----0:退出。 ----\n");
printf("--------------------------------\n");
printf("\n请输入你的选择。(0-9)\n");
scanf("%d",&a);
switch(a)
{
case 1: creat();
break;
case 2: open();
break;
case 3: printf("请输入你要读的文件。\n");
scanf("%s",na);
read(na);
break;
case 4: write();
break;
case 5: printf("请输入你要写的文件。\n");
scanf("%s",na);
close(na);
break;
case 6: printf("请输入你要撤销的文件。\n");
scanf("%s",na);
del(na);
break;
case 7: print_UFD();
break;
case 8: print_UOF();
break;
case 9: return main();
break;
case 0: exit(0);
default: printf("指令错误!/n");
return main();
break;
}
}
}
}
if(i==N)
printf("\n用户不存在。\n") ;
return main();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -