baidu_41596796 2018-01-07 05:48 采纳率: 0%
浏览 2408
已结题

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

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

  • 写回答

4条回答

  • gggg达 2018-11-25 13:48
    关注

    include 《stdio.h》

    #include《stdlib.h》 //函数malloc() ,system("pause");
    #include《string.h》 //data ,strcmp函数
    #include 《iostream》 //std::cin
    #define maxsize 100
    typedef char elemtype;
    把上面的《》改一下
    但是代码还要修改才能执行")

    评论

报告相同问题?

悬赏问题

  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug