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

📄 main.c

📁 一个实现基本目录操作的操作系统
💻 C
📖 第 1 页 / 共 2 页
字号:
           if(d==1)
               k=k->rightsibling;
       }
    if(k==NULL)
     printf("\n不存在此文件!");
    else  {
     d=1;
     s=k;
     b=q;
     for(z=0;z<=19;z++)                       /*查询当前用户是否为文件创建者*/
     {
       if(k->creator[z]!=p->name[z])
        d=0;
     }
     if(d==0)                                     /*不是文件创建者*/
       printf("\n你没有权限移动此文件!");
     else   {
      while(e!=3)
        {
          printf("\n请选择目的路径:1.到上一层目录  2.到下一层目录  3.在此目录下\n");   /*选择目的目录*/
           scanf("%d",&e);
          if(e==1)
           returncatalog();
          else if(e==2)
            opencatalog();
          else if(e>3)
            printf("\n输入错误!\n");
          else if(e==3)
            {
             k=q->leftchild;
             d=1;
             while(k!=NULL && d==1)            /*查询在新的目录下是否存在相同命名的文件*/
             {
              d=0;
               for(z=0;(z<=19 && named[z]!='\0') || (k->name[z]!='\0' && z<=19);z++)
               if(named[z]!=k->name[z])
                d=1;
               if(d==1)
                k=k->rightsibling;
             }
             if(k!=NULL)
             printf("\n已存在此文件名!");
             else {
              k=q->leftchild;
               while(s!=NULL && d==1)                    /*找到原来的文件结点*/
                {
                 d=0;
                  for(z=0;(z<=19 && named[z]!='\0') || (s->name[z]!='\0' && z<=19);z++)
                   if(named[z]!=s->name[z])
                     d=1;
                    if(d==1)
                     {
                      t=s;
                       s=s->rightsibling;
                     }
                }
              if(t==b)
               b->leftchild=s->rightsibling;
              else
               t->rightsibling=s->rightsibling;           /*在新的目录下创建相同的文件*/
                s=(Catalog*)malloc(sizeof(Catalog));
                 for(z=0;z<=19;z++)
                  s->name[z]=named[z];
                 if(q->leftchild==NULL)
                   q->leftchild=s;
                 else {
                   t=q->leftchild;
                 while(t->rightsibling!=NULL)
                    t=t->rightsibling;
                     t->rightsibling=s;
                   }
              for(z=0;z<=19;z++)
               s->creator[z]=p->name[z];
                s->parent=q;
                 s->leftchild=NULL;
                  s->rightsibling=NULL;
                     s->struction=0;
               printf("\n操作成功!");
           }
         }
       }
     }
   }
  }
}
      print(q);
}

/**********************************************************************************/

deletefile()                       /*删除文件函数*/
{
 Catalog *k=q->leftchild,*l=q;
 int z,b=0,d=1;
 char named[20];
 print(q);
 if(q->leftchild==NULL)                       /*最左子树为空时*/
  printf("\n没有可以删除的文件");
 else {
   while(k!=NULL && k->struction==1)         /*查询目录下是否存在文件*/
     k=k->rightsibling;
   if(k==NULL)
    printf("\n没有可以删除的文件");
   else  {
    k=q->leftchild;
    printf("\n输入要删除的文件名:");
    scanf("%s",named);
     while(k!=NULL && d==1)                 /*查询是否存在要删除的文件*/
      {
      d=0;
       for(z=0;(z<=19 && named[z]!='\0') || (k->name[z]!='\0' && z<=19);z++)
          if(named[z]!=k->name[z])
             d=1;
           if(d==1)
           {
              l=k;
              k=k->rightsibling;
            }
       }
    if(k==NULL)
     printf("\n不存在此文件!");
    else   {
    for(z=0;z<=19;z++)                              /*查询当前用户是否为文件创建者*/
     {
       if(k->creator[z]!=p->name[z])
        b=1;
     }
     if(b==1)                                         /*当不是文件创建者*/
       printf("\n你没有权限删除此文件!");
     else  {
      if(l==q)                                           /*删除文件*/
        q->leftchild=k->rightsibling;
      else
        l->rightsibling=k->rightsibling;
     printf("\n删除文件成功!\n");
     print(q);
   }
  }
 }
 }
}

/**********************************************************************************/

login()                                       /*用户注册函数*/
{
 int z,t,d=1;
 char named[20];
 Usernode *w;
 printf("\n输入你的用户名:\n");
 scanf("%s",named);
 w=head;
  while(w!=NULL && d==1)                     /*查询是否存在相同命名的用户*/
  {
    d=0;
     for(z=0;(z<=19 && named[z]!='\0') || (w->name[z]!='\0' && z<=19);z++)
       if(named[z]!=w->name[z])
         d=1;
         if(d==1)
            w=w->next;
             }
  if(w!=NULL)
     printf("已存在此用户!");
  else  {
  w=head;
  p=(Usernode*)malloc(sizeof(Usernode));
  printf("\n输入你的用户属性:");
  printf("\n1.管理员?\t 0.普通用户?\n");            /*选择用户属性*/
  scanf("%d",&t);
  if(head==NULL)                               /*当当前没有用户时*/
  {
   p->next=NULL;
   for(z=0;z<=19;z++)
   p->name[z]=named[z];
   p->struction=t;
   head=p;
   printf("\n当前的用户为:%s",p->name);
  }
  else  {
       while(w->next!=NULL)                    /*插入用户*/
        w=w->next;
           for(z=0;z<=19;z++)
            p->name[z]=named[z];
            p->struction=t;
              p->next=NULL;
               w->next=p;
                w=w->next;
             printf("\n当前的用户为:%s",p->name);
     }
   }
}

/**********************************************************************************/

land()                                       /*用户登录函数*/
{
 int d=1,z;
 char named[20];
 p=head;
 printf("\n输入你的用户名:");
 scanf("%s",named);
   while(p!=NULL && d==1)                      /*查询是否存在要登录的用户*/
   {
      d=0;
        for(z=0;(z<=19 && named[z]!='\0') || (p->name[z]!='\0' && z<=19);z++)
          if(named[z]!=p->name[z])
            d=1;
             if(d==1)
              p=p->next;
             }
 if(p==NULL)
  printf("\n不存在此用户!");
 else
  {
   printf("\n用户登陆成功!");
   printf("\n当前用户为:%s",p->name);
  }
}

/**********************************************************************************/

deleteuser()                                       /*删除用户函数*/
{
 Usernode *user1,*user2;
 char named[20];
 int z,d=0;
 printf("\n当前的所有用户:\n");                      /*输出当前注册过的所有用户*/
 for(user1=head;user1!=NULL;user1=user1->next)
   printf("%s   ",user1->name);
 if(p->struction==0)                            /*如果当前用户不是管理员*/
   printf("\n你没有权力删除用户!\n");
 else  {
   printf("\n输入你要删除的用户名:");
   scanf("%s",named);
   for(z=0;(z<=19 && named[z]!='\0') || (p->name[z]!='\0' && z<=19);z++)       /*查询要删除的用户是否为当前用户*/
    if(p->name[z]!=named[z])
      d=1;
   if(d==1)
   {
     user1=head;
     user2=head;
   while(user1!=NULL && d==1)
      {
      d=0;
       for(z=0;(z<=19 && named[z]!='\0') || (user1->name[z]!='\0' && z<=19);z++)     /*查询是否存在要删除的用户*/
        if(named[z]!=user1->name[z])
           d=1;
         if(d==1)
          {
             user2=user1;
              user1=user1->next;
          }
      }
   if(user1==NULL)
    printf("\n没有你要删除的用户!\n");
   else   {
    if(user1==head)                                     /*删除用户操作*/
     head=head->next;
    else
     user2->next=user1->next;
     printf("\n删除用户成功!\n");
     }
   }
   else
    printf("\n无法删除当前用户!");             /*当要删除的用户是当前用户时*/
  }
}

/**********************************************************************************/

returncatalog()                              /*返回上一层目录函数*/
{
  if(q==root)
   printf("\n当前目录为根目录!\n");
  else
   q=q->parent;
     print(q);
}

/**********************************************************************************/

returnroot()                                 /*返回根目录函数*/
{
 q=root;
  print(q);
}

/**********************************************************************************/

print(Catalog *now)                   /*输出函数*/
{
 Catalog *m,*n;
 int j=0;
 now=q;
 printf("\n当前的目录为:%s",now->name);
 printf("\n其子目录有:");
 m=now->leftchild;
 if(now->leftchild!=NULL)
   {                                       /*输出所有子目录*/
     while(m!=NULL)
     {
      if(m->struction==1)
       {
        j=1;
        printf("%s    ",m->name);
         m=m->rightsibling;
        }
      else
        m=m->rightsibling;
      }
   }
  m=now->leftchild;
  if(m==NULL || j==0)
     printf("无\n");
     j=0;
 printf("\n此目录下的文件有:");
  n=now->leftchild;
 if(now->leftchild!=NULL)                       /*输出所有文件*/
   {
     while(n!=NULL)
     {
      if(n->struction==0)
      {
       j=1;
       printf("%s     ",n->name);
       n=n->rightsibling;
       }
      else
        n=n->rightsibling;
      }
   }
  n=now->leftchild; 
  if(n==NULL || j==0)
     printf("无\n");
 }

/**********************************************************************************/



main()               /*主函数*/
{
 int num,i;
 char named[20]="root";

 root=(Catalog*)malloc(sizeof(Catalog));
 q=(Catalog*)malloc(sizeof(Catalog));
 head=(Usernode*)malloc(sizeof(Usernode));

 for(i=0;i<=19;i++)
  root->name[i]=named[i];
 root->parent=NULL;
  root->leftchild=NULL;
   root->rightsibling=NULL;
    root->struction=1;
 q=root;
 head=NULL;

 printf("\n用户注册\n");
  login();

 choose();
 scanf("%d",&num);
 while(num<=14)
  {
    if(num==1)
      creatcatalog();
     if(num==2)
       deletecatalog();
      if(num==3)
        opencatalog();
       if(num==4)
         creatfile();
        if(num==5)
          deletefile();
         if(num==6)
           movefile();
          if(num==7)
           renamefile();
           if(num==8)
            land();
            if(num==9)
             deleteuser();
              if(num==10)
               login();
               if(num==11)
                returncatalog();
                if(num==12)
                 returnroot();
                 if(num==13)
                  checkfile();
                  if(num==14)
                   exit(0);
                   if(num>14)
                    printf("\n选择错误!");
    choose();
    scanf("%d",&num);
  }
getch();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -