📄 fcb.cpp
字号:
// ddf.cpp : Defines the entry point for the console application.
//
#include "stdio.h"
#include "conio.h"
#include <string.h>
int jp=0,flag=0; /*flag为当前系统是否有用户登录的标记,jp保存当前用户的号数*/
char name[10];
struct ufd{char filename[10]; /*用户文件目录*/
char pcode[4];
char type[5];
char length[5];
}file[10][10];
typedef struct ufd UFD;
struct mfd{char username[12]; /*用户主目录*/
UFD *link;
}user[10];
typedef struct mfd MFD;
struct afd{char aname[10]; /*正在运行文件目录*/
char pcode[4];
char type[5];
char state[2];
}afile[5];
typedef struct afd AFD;
void init() /*对系统初始化*/
{int i=0;
for(i=0;i<10;i++) /*初始化主目录*/
{user[i].link=file[0];
strcpy(user[0].username,"user1");
strcpy(user[1].username,"user2");
strcpy(user[2].username,"user3");
strcpy(user[3].username,"user4");
strcpy(user[4].username,"user5");
strcpy(user[5].username,"user6");
strcpy(user[6].username,"user7");
strcpy(user[7].username,"user8");
strcpy(user[8].username,"user9");
strcpy(user[9].username,"user0");
}
for(i=0;i<10;i++) /*初始化用户文件*/
{ strcpy(file[i][0].filename,"f1"); /*初始化文件名*/
strcpy(file[i][1].filename,"f2");
strcpy(file[i][2].filename,"f3");
strcpy(file[i][3].filename,"f4");
strcpy(file[i][4].filename,"f5");
strcpy(file[i][5].filename,"f6");
strcpy(file[i][6].filename,"f7");
strcpy(file[i][7].filename,"f8");
strcpy(file[i][8].filename,"");
strcpy(file[i][9].filename,"");
strcpy(file[i][0].pcode,"434"); /*初始化保护码*/
strcpy(file[i][1].pcode,"054");
strcpy(file[i][2].pcode,"662");
strcpy(file[i][3].pcode,"667");
strcpy(file[i][4].pcode,"333");
strcpy(file[i][5].pcode,"885");
strcpy(file[i][6].pcode,"998");
strcpy(file[i][7].pcode,"777");
strcpy(file[i][8].pcode,"");
strcpy(file[i][9].pcode,"");
strcpy(file[i][0].type,"jpg"); /*初始化文件类型*/
strcpy(file[i][1].type,"cc");
strcpy(file[i][2].type,"jsp");
strcpy(file[i][3].type,"obj");
strcpy(file[i][4].type,"docx");
strcpy(file[i][5].type,"psf");
strcpy(file[i][6].type,"png");
strcpy(file[i][7].type,"exl");
strcpy(file[i][8].type,"");
strcpy(file[i][9].type,"");
strcpy(file[i][0].length,"2"); /*初始化文件长度*/
strcpy(file[i][1].length,"4");
strcpy(file[i][2].length,"2");
strcpy(file[i][3].length,"6");
strcpy(file[i][4].length,"5");
strcpy(file[i][5].length,"6");
strcpy(file[i][6].length,"1");
strcpy(file[i][7].length,"8");
strcpy(file[i][8].length,"");
strcpy(file[i][9].length,"");
}
}
void printMFD() /*打印输出系统全部用户*/
{
int i;
printf("\n--------------------------------系统中的全部用户--------------------------------");
for(i=0;i<10;i++)
{
printf("%d.%s\t\t",i,user[i].username);
}
printf("--------------------------------------------------------------------------------");
}
void printUFD(int n) /*打印输出当前用户全部文件及其状态*/
{ int i;
printf("\n------------------------------用户%s目录下的文件-----------------------------\n",user[jp].username);
printf("文件名\t 保护码\t 文件类型\t 文件长度\n");
for(i=0;i<10;i++)
{
printf("%d.%s\t",i,file[n][i].filename);
printf(" %s\t ",file[n][i].pcode);
printf("%s\t\t ", file[n][i].type);
printf("%s\n", file[n][i].length);
}
printf("--------------------------------------------------------------------------------");
}
void printAFD() /*打印输出正在运行的文件及其状态*/
{int i;
printf("\n-------------------------------运行文件目录-------------------------------------");
printf("文件名\t 保护码\t 类型\t 状态\n");
for(i=0;i<5;i++)
{
printf("%d.%s\t",i,afile[i].aname);
printf(" %s\t",afile[i].pcode);
printf(" %s\t ",afile[i].type);
printf("%s\n",afile[i].state);
}
printf("--------------------------------------------------------------------------------");
}
void printExcel() /*打印输出操作功能选项表*/
{
printf("\n-----------------------------------命令选项表-----------------------------------");
printf("1.create\t\t2.delete\t\t3.open\t\t4.bye\t\t5.close\t\t\t6.read\t\t\t7.write\t\t8.print\n");
printf("--------------------------------------------------------------------------------");
}
checkFilename(int i) /*当创建新文件时,检查是否重名*/
{int j=0;
for(j=0;j<i;j++)
{if(strcmp(file[jp][i].filename,file[jp][j].filename)==0)
{strcpy(file[jp][i].filename,"");
printf("输入的文件名已有,请重新输入\n");
scanf("%s",file[jp][i].filename);
j=0;
}
}
}
void Create() /*创建用户文件*/
{
int n,i,flag1=0;
for(i=0;i<10;i++)
{if(strcmp(file[jp][i].filename,"")==0) /*如当前用户创建的文件还没有10个,则在末尾建立新文件*/
{printf("请输入要创建的文件的文件名:");
scanf("%s",file[jp][i].filename);
checkFilename(i); /*检查所输入的文件名是否与原文件名重名*/
printf("输入保护码:");
scanf("%s",file[jp][i].pcode); /*输入保护码*/
printf("输入文件类型:");
scanf("%s",file[jp][i].type);
printf("输入文件的长度:");
scanf("%s",file[jp][i].length); /*输入文件长度*/
flag1=1;
}
if(flag1==1)break;
}
if(flag1==1)printUFD(jp);
if(flag1==0)printf("不能创建文件,当前用户文件目录已满!\n"); /*若文件满10个,则输出出错信息*/
}
void Delete() /*删除文件*/
{
int n,p,i,j,flag2=0;
printUFD(jp);
printf("请输入要删除的文件名");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
p=i;
break;
}
}
if(i==10)
{
printf("无此文件\n");
return;
}
if(strcmp(file[jp][p].filename,"")!=0) /*若所选用户文件非空,则删除所选文件*/
{flag2=1;
for(i=0;i<5;i++) /*若所选文件在AFD中,则删除AFD中的所选文件*/
{if(strcmp(afile[i].aname,file[jp][p].filename)==0)
{strcpy(afile[i].aname,"");
strcpy(afile[i].pcode,"");
strcpy(afile[i].state,"");
for(j=i;j<4;j++) /*AFD中在删除文件之后的文件前移*/
{afile[j]=afile[j+1];
strcpy(afile[j+1].aname,"");
strcpy(afile[j+1].pcode,"");
strcpy(afile[j+1].type,"");
strcpy(afile[j+1].state,"");
}
}
}
strcpy(file[jp][p].filename,"");
strcpy(file[jp][p].pcode,"");
strcpy(file[jp][p].length,"");
for(i=p;i<9;i++) /*删除文件之后,所删除文件之后的文件前移*/
{file[jp][i]=file[jp][i+1];
strcpy(file[jp][i+1].filename,"");
strcpy(file[jp][i+1].pcode,"");
strcpy(file[jp][i+1].length,"");
}
}
if(flag2==1)printUFD(jp);
if(flag2==0) printf("\n没有该文件\n"); /*当前用户无该文件,出错*/
}
void Open() /*打开文件*/
{
int n=0,i=0,flag3=0;
printUFD(jp);
printf("请输入你要打开的文件名:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("无此文件\n");
return;
}
for(i=0;i<5;i++)
{if(strcmp(afile[i].aname,"")==0) /*如AFD没满5个文件,把文件放进AFD*/
{strcpy(afile[i].aname,file[jp][n].filename);
strcpy(afile[i].pcode,file[jp][n].pcode);
strcpy(afile[i].type,file[jp][n].type);
strcpy(afile[i].state,"O");
flag3=1;
}
if(flag3==1)break;
}
if(flag3==0)printf("不能打开此文件,当前运行文件目录已满!\n"); /*满5个则出错*/
if(flag3==1)printAFD();
}
void Read() /*读文件*/
{int n=0,i=0,flag4=0;
printUFD(jp); /*打印用户文件列表*/
printf("请输入要读的文件名:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("无此文件\n");
return;
}
if(file[jp][n].pcode[0]=='1') /*若有读的权限并且AFD没满5个文件,则把文件放`进AFD*/
{for(i=0;i<5;i++)
{if(strcmp(afile[i].aname,"")==0)
{strcpy(afile[i].aname,file[jp][n].filename);
strcpy(afile[i].pcode,file[jp][n].pcode);
strcpy(afile[i].type,file[jp][n].type);
strcpy(afile[i].state,"R");
flag4=1 ;
}
if(flag4==1)break;
}
if(flag4==0)printf("不能读此文件,当前运行文件目录已满!\n"); /*若满5个则出错*/
}
else if(file[jp][n].pcode[0]=='0') /*无读的权限,出错信息*/
printf("你没有权利读该文件\n");
if(flag4==1)printAFD();
}
void Write() /*写文件*/
{
int n=0,i=0,flag5=0;
printUFD(jp); /*打印用户文件列表*/
printf("请输入你要写的文件名:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(file[jp][i].filename,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("无此文件\n");
return;
}
if(file[jp][n].pcode[1]=='1') /*若有写的权限,则把文件写进AFD*/
{for(i=0;i<5;i++)
{if(strcmp(afile[i].aname,"")==0)
{strcpy(afile[i].aname,file[jp][n].filename);
strcpy(afile[i].pcode,file[jp][n].pcode);
strcpy(afile[i].type,file[jp][n].type);
strcpy(afile[i].state,"W");
flag5=1;
}
if(flag5==1)break; printAFD();
}
if(flag5==0)printf("不能写此文件,当前运行文件目录已满!\n"); /*若满5个则出错*/
}
else if(file[jp][n].pcode[1]=='0') /*无写的权限,出错信息*/
printf("你没有权利写该文件\n");
if(flag5==1)printAFD();
}
void Close() /*关闭文件*/
{int n=0,i=0;
printAFD();
printf("你要关闭的文件是:");
scanf("%s",name);
for(i=0;i<10;i++)
{
if (strcmp(afile[i].aname,name)==0)
{
n=i;
break;
}
}
if(i==10)
{
printf("无此文件");
return;
}
if(strcmp(afile[n].aname,"")!=0) /*若AFD中有文件,则关掉选择的文件*/
{strcpy(afile[n].aname,"");
strcpy(afile[n].pcode,"");
strcpy(afile[n].type,"");
strcpy(afile[n].state,"");
for(i=n;i<4;i++) /*AFD中在所关闭文件之后的正在运行的文件前移*/
{afile[i]=afile[i+1];
strcpy(afile[i+1].aname,"");
strcpy(afile[i+1].pcode,"");
strcpy(afile[n+1].type,"");
strcpy(afile[i+1].state,"");
}
printAFD();
}
else printf("当前没该文件在运行\n"); /*AFD中无该文件,出错信息*/
}
void Bye() /*退出系统*/
{ char m;
int i=0;
printf("你是否要退出系统:(y/n)");
getchar();
scanf("%c",&m);
if(m=='y'||m=='Y') /*选择退出,则退出程序*/
{
printf("欢迎下次登录!\n");
flag=1;
}
else /*否则不退出程序*/
{for(i=0;i<5;i++)
{strcpy(afile[i].aname,"");
strcpy(afile[i].pcode,"");
strcpy(afile[i].state,"");
}
}
}
void main(){ int i,l=0; /*l为输入命令是否合法的标志*/
char m[10];
char n[12];
char temp[8][8];
strcpy(temp[0],"create");
strcpy(temp[1],"delete");
strcpy(temp[2],"open");
strcpy(temp[3],"bye");
strcpy(temp[4],"close");
strcpy(temp[5],"read");
strcpy(temp[6],"write");
strcpy(temp[7],"print");
init(); /*初始化文件系统*/
printf(" 欢迎使用文件管理系统\n");
printMFD(); /*打印输出全部用户*/
printf("请输入您要进入的用户名:");
scanf("%s",n);
for(i=0;i<10;i++)
{
if (strcmp(user[i].username,n)==0)
{
jp=i;
break;
}
}
if(i==10)
{
printf("无此用户\n");
return;
}
printUFD(jp);
while(flag==0)
{
getchar();
printExcel();
while(1)
{if(l==1) break;
printf("请输入命令名:");
scanf("%s",m);
for(i=0;i<8;i++)
{
if (strcmp(temp[i],m)==0) {l=1;break;}
}
}
switch(i+1) /*选择功能操作*/
{case 1:Create();{l=0;break;}
case 2:Delete();{l=0;break;}
case 3:Open();{l=0;break;}
case 4:Bye();{l=0;break;}
case 5:Close();{l=0;break;}
case 6:Read();{l=0;break;}
case 7:Write();{l=0;break;}
case 8:printUFD(jp);{l=0;break;}
default:flag=1;break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -