📄 main.c
字号:
{
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 + -