⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcb.cpp

📁 数据结构课程设计
💻 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 + -