2 baidu 41596796 baidu_41596796 于 2018.01.07 13:48 提问

简单目录管理系统的设计与实现 20C

我怎么弄都无法设计好头文件 ****哪位大佬帮忙看看 头文件所处位置在#号标记的地方
typedef struct CTNode
{
int child;

struct CTNode *next;
}childnode,*childptr;

typedef struct
{
elemtype name[20];

int number;

int parent;

int sign;

childptr firstchild;
}CTbox;

typedef struct
{
CTbox nodes[maxsize];
int n;

int r;

}CTree;

void linkcreat(childptr &L) //带头结点的链表的建立
{
childnode *p,*q;
L=(childptr)malloc(sizeof(childnode));
L->next=NULL;
p=L;
printf("一次性输入子目录在数组中的位置(数据之间空格),输入-2结束\n");
//p->child=getchar(); //输入字符会转换成ASCII值存储
std::cin>>p->child;
while(p->child!=-2)
{
q=p;
p=(childptr)malloc(sizeof(childnode));
//printf("输入子目录位置:");
//p->child=getchar();
std::cin>>p->child;
p->next=q;
}
L=p; //以上采用了倒序插入结点法建立链表
}

(2)void creatTree(CTree &T)//将目录系统画成树形结构,然后树的层序建立目录系统
{
int i,j,n;
printf("开始建立级数为4的目录系统:\n");
printf("目录的个数为:");
std::cin>>T.n;
T.r=0; //主目录存放在数组的首地址

for(i=0;i {
printf(" ");
printf("请输入目录的编号:");
std::cin>>T.nodes[i].number;
printf(" ");
printf("请输入目录的名称:");
std::cin>>T.nodes[i].name;
printf(" ");
printf("该目录所在级数为(1~4)");
std::cin>>T.nodes[i].sign;

printf(" ");

printf("该目录的上级目录所在位置(若没有则输入-1):");
std::cin>>T.nodes[i].parent;
printf("\n");
//system ("cls");
}
//接下来各目录的子目录链表
for(j=0;j<T.n;j++)
{
printf("第%d个目录的子目录的建立:\n",j+1);
linkcreat(T.nodes[j].firstchild);
//system ("cls");
}
printf("简单的(4级)目录系统已建好,可以使用!\n");

}

(3)int searchname(CTree &T,elemtype data[]) //返回数据data在系统中的位置,不在其中返回-1
{
int i,a=-1;

for(i=0;i<T.n;i++)
{
if(strcmp(T.nodes[i].name,data)==0) //data在系统中
a=i;
}
return a;
}

(4)void search(CTree &T) //查询目录信息
{
elemtype data[20];
int i,j,m,n;
childnode *p,*q;

if(T.nodes[0].firstchild==NULL)
printf("系统为空,请先建立系统!\n");
else

{printf("请输入您要查询的目录名称:");
std::cin>>data;
if(searchname(T,data)==-1)
printf("对不起,您输入的目录不在本系统中\n");
else
{
printf("您要查询的信息为:\n");
n=searchname(T,data);
printf(" %s的编号为%d \n",T.nodes[n].name,T.nodes[n].number);
printf(" 该目录的上级目录为:");
if(n==0)
printf(" 该目录已为主目录,无上级目录\n");
else
{
m=T.nodes[n].parent;
printf("%s\n",T.nodes[m].name);

}
printf(" 该目录的子目录为:");
if(T.nodes[n].firstchild->next==NULL)
printf("没有子目录\n");
else
{
p=T.nodes[n].firstchild->next;
while(p!=NULL)
{
j=p->child;
printf("%s ",T.nodes[j].name);
p=p->next;

}
}

printf("\n");

}
}

}

(5)void changename(CTree &T) //更改目录名称
{
elemtype dname[20],chname[20];
int m,n;
if(T.nodes[0].firstchild==NULL)
printf("系统为空,请先建立系统!\n");
else

{
printf("请输入您要修改的目录名称(即修改对象):");
std::cin>>dname;
n=searchname(T,dname);
if(n==-1)
printf("对不起,您所输入的目录不在系统中\n");
else
{
printf("更改该目录名称为:");
std::cin>>chname;
strcpy(T.nodes[n].name,chname);

}

}

}

//按上下级关系输出,即输出某目录带其子目录
(6)void oncetravel(CTree &T,int j)//第j级目录的子目录输出
{
int i,m,n;
childnode *p;
for(i=0;i {
if(T.nodes[i].sign==j)
{
p=T.nodes[i].firstchild->next;
if(p!=NULL)
{
while(p!=NULL)
{
m=p->child;
n=T.nodes[m].sign;
printf("\n %s (%d)-------- %s (%d) ",T.nodes

[n].name,T.nodes[n].sign,T.nodes[m].name,T.nodes[m].sign);
p=p->next;

}
}

}
}

}

(7)void firsttravel(CTree &T) //默认主目录为0,输出主目录的子目录
{
int i,j,k,m=T.r;
childnode *p;
p=T.nodes[m].firstchild->next;
while(p!=NULL)
{
m=p->child;
printf("\n %s (%d)-------- %s (%d) ",T.nodes[T.r].name,T.nodes

[T.r].sign,T.nodes[m].name,T.nodes[m].sign);
p=p->next;
}
//printf(" hello!");
}
(8)void travel(CTree &T) //按上下级关系输出
{
if(T.nodes[0].firstchild==NULL)
printf("系统为空,请先建立系统!\n");
else

{ int n=M,e,j,k,m;
printf(" **********输出目录菜单***************\n\n");

printf(" ****** 1.一级子目录输出 ******\n");
printf(" ****** 2.二级子目录输出 ******\n");
printf(" ****** 3.三级子目录输出 ******\n");
printf(" *************************************\n\n");
printf(" 您选择:");
std::cin>>e;
printf("\n");
while(e!=-1)

{
switch(e)
{
case 1: printf("一级子目录输出: ");
firsttravel(T);
printf("\n");
break;
case 2: printf("二级子目录输出: ");
oncetravel(T,2);
printf("\n");
break;
case 3: printf("三级子目录输出: ");
oncetravel(T,3);
printf("\n");
break;
}

printf(" \n请输入选择(-1结束)\n");
std::cin>>e;
}
}
}

(9)void leveltravel(CTree &T) //按树的层序输出
{
if(T.nodes[0].firstchild==NULL)
printf("系统为空,请先建立系统!\n");
else

{
for(int i=0;i {
printf(" 目录名:%s ,",T.nodes[i].name);
printf(" 编号: %d ",T.nodes[i].number);
printf("\n");
}
}
}
(10)void deletelink(childnode *&L) //销毁链表
{
childnode *p,*q;
p=L;
q=p;
while(q!=NULL)
{
q=p->next;
free(p);
p=q;
}

}
(11)void deletesystem(CTree &T) //销毁树,即销毁已建的目录系统
{
if(T.nodes[0].firstchild==NULL)
printf("系统为空,请先建立系统!\n");
else

{ for(int a=0;a<T.n;a++)
{
deletelink(T.nodes[a].firstchild);//先消除子目录链表
T.nodes[a].firstchild;
}
printf("该目录系统已删除,可以重新创建系统\n");
}
}
void menu()
{
printf(" ****************************************************\n");
printf(" ************* 简单目录管理系统 *************\n");
printf(" ***** ****\n");
printf(" ****** *****请选择您的操作(0~6) **** ******** \n \n");
printf(" ****** 1.新建目录系统 ********* \n");
printf(" ****** 2.查询目录信息 ********* \n");
printf(" ****** 3.修改目录名称 ********* \n");
printf(" ****** 4.按上下级关系输出目录 ********* \n");
printf(" ****** 5.按树的层序输出目录 ********* \n");
printf(" ****** 6.删除目录系统 ********* \n");
printf(" ****** 0.退出系统 ********* \n");
printf(" ****************************************************\n");
printf(" ****************************************************\n");
//printf("请输入你的选择:\n");

}

# # # # # ## include

# # # # # ## # ## # #include

# # # # # ## #include

# # # # # ## int main()

{
CTree CT;
CT.r=0;
CT.nodes[CT.r].firstchild=NULL;
int e;
menu();
printf("请输入你的选择:");
std::cin>>e;
do{

switch(e)
{
case 1:printf(" 您选择了新建系统\n");
creatTree(CT);
system("pause");
system("cls");
menu();
break;
case 2:printf(" 您选择了查询目录\n");
search(CT);
system("pause");
system("cls");
menu();
break;

case 3:printf(" 您选择了修改目录\n");
       changename(CT);
       system("pause"); 
       system("cls"); 
       menu();;
       break;

case 4:system("cls"); 
       printf(" 您选择了按上下级关系输出目录\n");
       travel(CT);
       system("pause"); 
       system("cls"); 
       menu();
       break;

case 5:printf(" 您选择了按树的层序输出目录\n");
       leveltravel(CT);
       system("pause"); 
       system("cls"); 
       menu();
       break;

case 6:deletesystem(CT);
       system("pause"); 
       system("cls"); 
       menu();
       break;
case 0:exit(0);           
       break;

}

printf("请输入您的选择:");
std::cin>>e;
}
while(e>=0&&e<7);
system("pause");
return 0;
}

2个回答

caozhy
caozhy   Ds   Rxr 2018.01.07 17:16

这样贴代码很难看明白你哪里不对,因为本身代码就是少了很多东西的。
先采纳本回答,将代码上传到网盘,帮你分析。

lixiaozhen007
lixiaozhen007   2018.01.08 23:25

直接选择easyUI插件把,这个插件虽然丑,但是挺好用的,看着太费劲;

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!