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

📄 aaa.txt

📁 模拟的资源管理器; 可以显示文件的目录
💻 TXT
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#define maxsize 100


//定义目录树的结构
typedef struct mu_lu{
	char wenjian_name[80];
	struct mu_lu *firstchild;
	struct mu_lu *nextsibling;
}ziyuan,*mulu;

typedef struct  {
	char str[80];
}elemtype;
//定义一个存放父结点的栈
typedef struct father{ 
	elemtype *base;
	elemtype *top;
}fathername,*father_name;

//初始化栈
int Init(fathername &S){
	S.top = S.base =new elemtype[maxsize];
	if (!S.base) {
		printf("空间申请失败!\n");
		return 0;
	}
	return 1;
}

//数据进栈
int push(fathername &S,char *str){
	if (S.top - S.base >= maxsize) {
		printf("\n\n栈满!无法继续增加数据!\n\n");
		return 0;
	}
	strcpy(S.top->str , str);
	++S.top;
	return 1;
}

//数据出栈
int pop(fathername &S){
	if (S.top == S.base) {
		printf("栈空!\n");
		return 0;
	}
	--S.top;
	return 1;
}


//打印出栈内路径
void Printstack(fathername S){

	elemtype *q;
	printf("\n\n");
	for(q = S.base;q <S.top-1; q++) 
		printf("%s\\",q->str);
	printf("%s\n\n",(S.top-1)->str);
}



//创建目录树的函数
void Creat_mulu(mulu &T){
	char *wenjian_name = new char[80];
	scanf("%s",wenjian_name);
	if (*wenjian_name == '^') { 
		T = NULL;
		return ;
	}
	T = new ziyuan;
	if (!T) {
		printf("空间申请失败!\n");
		return ;
	}
	else{
		strcpy(T->wenjian_name , wenjian_name);
		T->firstchild = NULL;
		T->nextsibling = NULL;
	}

	Creat_mulu(T->firstchild);// 构造左子树
	Creat_mulu(T->nextsibling);// 构造右子树
	
}

//输出目录树
void Disp_mulu(mulu T,int times){
    if (T == NULL)
        return;
	for (int i = 1; i < times; ++i)
        printf("      ");
	if(times>1){
		printf("|------");
	}
    printf("%s\n", T->wenjian_name);
    Disp_mulu(T->firstchild, times + 1);
    Disp_mulu(T->nextsibling, times);	
}

//查找要插入的目录的父节点
void find(mulu T,mulu &parent,char *parentname,int &findname){

	if (T != NULL)
		if (strcmp(parentname , T->wenjian_name) == 0) {
			parent = T;
			findname = 1;
			return;
		}
		else{
			find(T->firstchild,parent,parentname,findname);
			find(T->nextsibling,parent,parentname,findname);
		}
}

//查找新的目录名是否已经存在
void FIND(mulu child,char *childname,int &FINDname){

	if (child)
	{
		if (strcmp(child->wenjian_name,childname) == 0){
			FINDname = 1;
			return;
		}
		else FIND(child->nextsibling,childname,FINDname);
	}
	return;

}

//插入新目录的函数
void Inser_mulu(mulu &T,char *parentname){

	char *childname =new char[80];
	mulu parent,child;
	int findname = 0,FINDname = 0;
	find(T,parent,parentname,findname);
	if (findname) {
		printf("\n\n请输入新目录的名:");
		scanf("%s",childname);
		FIND(parent->firstchild,childname,FINDname);
		if (FINDname) {
			printf("\n\n该目录名已经存在!\n");
			return;
		}
		child = new ziyuan;
		if (!child) {
			printf("空间申请失败!\n");
			return;
		}
		strcpy(child->wenjian_name , childname);
		child->nextsibling = parent->firstchild;
		child->firstchild = NULL;
		parent->firstchild = child;
		printf("\n\n>>>已成功插入!\n\n");
	}
	else printf("\n\n要插入的目录名不存在!\n\n");

}

//显示目录的路径
void Path(mulu T,fathername &S, char *name)
{
	mulu p;
	if(T==NULL) return;
	else{
		if(strcmp(T->wenjian_name,name)==0)
			Printstack(S);
		else{
			push(S, T->wenjian_name);
			Path(T->firstchild, S, name);
			pop(S);
			p=T->nextsibling;
			while(p){
				Path(p, S, name);
				p=p->nextsibling;
			}
		}
	}
}
  
//销毁目录树
void Destroy_mulu(mulu &T){
	if(T!=NULL){
		Destroy_mulu(T->firstchild);
		Destroy_mulu(T->nextsibling);
		delete T;
		T = NULL;
	}
}

//删除文件
void Delete_mulu(char *delete_name,mulu &T){

	mulu p;
	if (T == NULL)
		return;
	else if (T->firstchild&&strcmp(T->firstchild->wenjian_name,delete_name) == 0) {
		
		p = T->firstchild;
		T->firstchild = p->nextsibling;
		p->nextsibling = NULL;
		Destroy_mulu(p);
		return;

	}
	else if (T->nextsibling&&strcmp(T->nextsibling->wenjian_name,delete_name) == 0) {
		p = T->nextsibling;
		T->nextsibling = p->nextsibling;
		p->nextsibling = NULL;
		Destroy_mulu(p);
		return ;

	}
	Delete_mulu(delete_name,T->firstchild);
	Delete_mulu(delete_name,T->nextsibling);
	

}

//主函数
int main (void){
	mulu T;
	fathername S;
	char *mulu_name = new char[80];
	char *parentname = new char[80];
	char sz[80];
	int times = 1;
	int chioce;
	while (1) {
		printf("\t***********************资源管理器*************************\n");
		printf("\t※(1)*****创    建\t\t\t(2)*****显示目录※\n");
		printf("\t※                \t\t\t                ※\n");
		printf("\t※(3)*****显示路径\t\t\t(4)*****插    入※\n");
		printf("\t※               \t\t\t                ※\n");
		printf("\t※(5)*****删    除\t\t\t(6)*****销    毁※\n");
		printf("\t\t\t     ※(0)*****退出※\n");
		printf("\t**********************************************************\n");
		printf("\n>>>>>>>>请输入选择(0~6):");
		scanf("%d",&chioce);
		switch(chioce){
		case 1:
			printf("\n请输入目录:");
			getchar();
			Creat_mulu(T);
			printf("\n》》》目录树创建成功!\n\n");
			break;
		case 2:printf("\n\n");
			if (T == NULL)
				printf(">>>>>目录为空!\n\n");
			else{	
				printf("********目录如下*******\n\n");
				Disp_mulu(T,times);
			}
			printf("\n");
			break;
		case 3:Init(S);
			printf("\n\n请输入目录名: ");
			scanf("%s",sz);
			Path(T,S,sz);
			break;
		case 4:printf("\n\t>>>1.在根目录下插入新文件\n\n");
			printf("\t>>>2.在子目录下插入新文件\n\n");
			printf("*******请选择:");
			scanf("%d",&chioce);
			if(chioce == 1){
				printf("\n\n请输入新目录的名:");
				getchar();
			    gets(sz);
				mulu p;
				p = new ziyuan;
				if(!p){
					printf("空间申请失败!\n");
					break;
				}
				strcpy(p->wenjian_name , sz);
				p->nextsibling = T->nextsibling;
				T->nextsibling = p;
				p->firstchild = NULL;
				printf("\n\n>>>已成功插入!\n\n");
			}
			else if(chioce == 2)
			{
				printf("请输入父目录的名:");
				getchar();
				gets(sz);
				Inser_mulu(T,sz);
			}
			else printf("选择错误!\n\n");
			
			break;
		case 5:
			if(T==NULL) printf("\n\n>>>>>目录为空!\n\n");
			else {
				printf("请输入要删除的文件名:");
				getchar();
				gets(mulu_name);
				if (strcmp(T->wenjian_name,mulu_name) == 0)
					Destroy_mulu(T);
				else Delete_mulu(mulu_name,T);
				printf("\n\n》》删除成功!\n\n");
			}
			break;
		case 6:Destroy_mulu(T);
			printf("\n\n》》》》目录销毁成功!\n\n");
			break;
		case 0 :exit(0);
		default:printf("输入错误!\n");
			break;
		}
	}

	return 0;
}
//大学课程 数学 练习 作业题目 ^ 考试题目 ^ ^ ^ 数据结构 专业课设 ^ ^ ^ ^

//英语

⌨️ 快捷键说明

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