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

📄 main.c

📁 是对文件管理的一种模拟演示
💻 C
📖 第 1 页 / 共 2 页
字号:
            {
                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
            {
                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.到上一层目录  ");
                        printf("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);
}

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

void 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);
                }
            }
        }
    }
}

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

void 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);
        }
    }
}

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

void 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);
    }
}

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

void 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无法删除当前用户!");             /*当要删除的用户是当前用户时*/
    }
}

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

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

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

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

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

void 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");
}

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

void choose()                                  /*选择功能函数*/
{
    int choice;
    printf("\n请选择你需要的操作:\n");
    printf("\n************************************************************");
    printf("\n   1.创建目录    2.删除目录    3.打开目录     4.创建文件");
    printf("\n   5.删除文件    6.移动文件    7.文件重命名   8.用户登陆");
    printf("\n   9.删除用户   10.用户注册   11.返回上一层  12.返回根目录");
    printf("\n       13.查看文件信息           14.退出系统          ");
    printf("\n************************************************************");
    printf("\n");
    scanf("%d",&choice);
    switch(choice)
    {
        case 1:		creatcatalog();break;
        case 2:		deletecatalog();break;
        case 3:		opencatalog();break;
        case 4:		creatfile();break;
        case 5:		deletefile();break;
        case 6:		movefile();break;
        case 7:		renamefile();break;
        case 8:		land();break;
        case 9:		deleteuser();break;
        case 10:	login();break;
        case 11:	returncatalog();break;
        case 12:	returnroot();break;
        case 13:	checkfile();break;
        case 14:	exit(0);break;
        default:	printf("\n选择错误!");exit(0);break;
    }
    choose();
}

/**********************************************************************************/
main()               /*主函数*/
{
    int i;
    char named[20]="root";
    printf("      软件工程2    3104006984   陈志光\n");
    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();
}

⌨️ 快捷键说明

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