我怎么弄都无法设计好头文件 ****哪位大佬帮忙看看 头文件所处位置在#号标记的地方
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;
}