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

📄 btree12.c

📁 本系统完成了要求的所有功能
💻 C
📖 第 1 页 / 共 2 页
字号:
			{
				r=q->nptr[j-1];      /*把双亲中的信息及待删结点的相关信息移入左树中*/
				r->keynum++;
				r->key[r->keynum]=q->key[j];
				r->eptr[r->keynum]=q->eptr[j];
				q->keynum--;
		        move=j;
				while(move<=q->keynum)
				{
					q->key[move]=q->key[move+1];
					q->eptr[move]=q->eptr[move+1];
					q->nptr[move]=q->nptr[move+1];
					move++;
				}
				q->key[move]=0;
				q->eptr[move]=NULL;
                q->nptr[move]=NULL;
				r->nptr[r->keynum]=p->nptr[0];
				if(p->nptr[0]!=NULL)
                p->nptr[0]->parent=r;
                free(p);
			}
			else if((j+1)>=0)/*右树并*/
			{
				r=q->nptr[j+1];
				r->keynum++; 
				move=r->keynum;
				while(move>1)/*调整右节点*/
				{
					r->key[move]=r->key[move-1];  /*把双亲中的信息及待删结点的相关信息移入右树中*/
					r->eptr[move]=r->eptr[move-1];
					r->nptr[move]=r->nptr[move-1];
					r->nptr[move-1]=r->nptr[move-2];
					move--;
				}
                r->key[1]=q->key[j+1];
				r->eptr[1]=q->eptr[j+1];
				r->nptr[0]=p->nptr[p->keynum+1];
				if(p->nptr[p->keynum+1]!=NULL)

				p->nptr[p->keynum+1]->parent=r;
				q->keynum--;
				move=j+1;/*调整爸爸结点*/
				while(move<=q->keynum)
				{
					q->key[move]=q->key[move+1];
					q->eptr[move]=q->eptr[move+1];
                    q->nptr[move-1]=q->nptr[move];
					q->nptr[move]=q->nptr[move+1];
					move++;
				}
				q->key[move]=0;
				q->eptr[move]=NULL;
			}
			if(q->keynum<min)
			{
				if(q->parent==NULL)
				{T=r;
				r->parent=NULL;
				
				}
				p=q;
				q=q->parent;
										
			}
		    else break;	
		if(q==NULL)break;	
		
	}	
  }
    return 1;
}

display(NodeType *tt)/*层次遍历显示树*/
{
	NodeType *p1,*p2;
    int i=0,j,d=1,dd,c1=0,c2=0;
	int c[100];
	pq->front=pq->rear=0;
	printf("(");
    for(j=1;j<=tt->keynum;j++)
		printf("%d ",tt->key[j]);
	printf(")");
	printf("\n");
    pq->items[pq->rear]=tt;
	pq->rear=(pq->rear+1)%MAXSIZE;c[0]=1;
	while(pq->rear!=pq->front)/*队列非空*/
	{
        p1=pq->items[pq->front];
		pq->front=(pq->front+1)%MAXSIZE;c2++;
		while(p1->nptr[i]!=NULL)
		{
			
			p2=p1->nptr[i];
			printf("(");
			for(j=1;j<=p2->keynum;j++)
	 	       printf("%d ",p2->key[j]);
			printf(")");
            pq->items[pq->rear]=p2;
	        pq->rear=(pq->rear+1)%MAXSIZE;
			i++;c1++;
           
		}
		c[d]=c1;dd=d;d++;
        i=0;
		if(c[d-2]==c2)printf("\n");c1=c2=0;
   	}
  printf("\n");
  return;
}

menu1()
{
	printf("\n\n\n\n");
	printf("                       welcome to our library!\n");
	printf("                          1.add books.\n");
	printf("                          2.delete books.\n");
	printf("                          3.borrow books.\n");
	printf("                          4.give back books.\n");
	printf("                          5.display the B-tree.\n");
	printf("                          6.exit.\n");
	printf("                        please input your choice:");
}

add()/*入库*/
{

	int a,b;
	pq=(queue *)malloc(sizeof(queue));
	while(1){
	printf("\n\tinput 0 means to stop!\n");
	printf("\tplease input the book id:");
	scanf("%d",&a);
   	if(0==a)break;
	fflag=1;
	t=(BookType *)malloc(sizeof(BookType));
	t->booknum=a;
	t->sum=0;t->left=0;/*总量先设为0*/
    printf("\n\tbook name:");
	scanf("%s",t->name);
	printf("\n\tbook writer:");
	scanf("%s",t->writer);
	b=InsertBtree(T,t);
	}
    return;
}


sub()/*清库*/
{
	int a,i;
	int flag;/*标记删除是否成功*/
	NodeType *p1,*p2;
	result re;
	printf("\tbegin to delete:(0 means stop inputing!)\n");
	while(1){/*开始删除*/
    scanf("%d",&a);
	if(0==a)break;
    re=SearchBtree(T,a);/*查找所删除的号码*/
	if(!re.tag)printf("\tcann't find%d\n",a);
	else
	{
		if(re.pt->nptr[0]==NULL)/*删除的为最底层结点*/
		{flag=delete1(re.pt,re.i);
		printf("\tdelete successfully!\n");
		printf("\n\tnew btree:\n");showbtree(T);}
		else/*删除的不是最底层结点*/
		{
			p1=re.pt;
			i=re.i;
			do{
				p2=p1;
			    p1=p1->nptr[i];
			    i=0;
			}while(p1!=NULL);/*p2为找到的结点位置*/
			p1=re.pt;
			i=re.i;
			p1->key[i]=p2->key[1];
			flag=delete1(p2,1);
            printf("\tdelete successfully!\n");
			printf("\n\tnew btree:\n");showbtree(T);
		
		}

	}
    printf("\tcoutinue to detlte(0 means to stop)\n");
	}
    return;
}


borrow1() /*借书*/
{
	int a;
	int cou=1;/*标记借书证*/
	result re;
	struct date d;
	getdate(&d);
	while(1){
	printf("\tthe id of the book:");
	scanf("%d",&a);
	if(a==0)break;
	fflag=2;/* 标记借书*/
    re=SearchBtree(T,a);
	if(re.tag){
		       if(re.pt->eptr[re.i]->left>0)
			   {
		      	  
			   printf("\tplease input your card number:");
               scanf("%d",&(re.pt->eptr[re.i]->borrow[cou]));
               /*re.pt->eptr[re.i]->data[cou]="05.4.6";*/
			   		 
			   system("cls");
			   printf("\tyour personal information:\n\n");
               printf("\tyour reading card:");
			   printf("%d\n",re.pt->eptr[re.i]->borrow[cou]);
			   printf("\tyou have borrowed book %d\n",a);
               printf("\tbook name:");
			   printf("%s\n",re.pt->eptr[re.i]->name);
			   printf("\tbook writer:");
			   printf("%s\n",re.pt->eptr[re.i]->writer);
               printf("\tyou must return the book before:%d,%d,%d",d.da_year,d.da_mon+1,d.da_day);
	           re.pt->eptr[re.i]->date[cou][0]=d.da_year;
			   re.pt->eptr[re.i]->date[cou][1]=d.da_mon;
			   re.pt->eptr[re.i]->date[cou][2]=d.da_day;
			   cou++;
			   printf("\n\tcontinue to input!\n");

			   }
			   else
				printf("\tthe book has been borrowed!\n");
	}
	else 
		printf("\tsorry,we don't have this book!\n");
	}
    return;
}

back() /*还书*/
{
	int a,j=1;
	result re;
	while(1){
	printf("\tback:\n");
	printf("\tbook id:");
	scanf("%d",&a);
	if(a==0)break;
	fflag=3;/* 标记借书*/
    re=SearchBtree(T,a);
	if(re.tag){
		       
			   printf("\tbook name:");
		       printf("%s\n",re.pt->eptr[re.i]->name);
			   printf("\tbook writer:");
			   printf("%s\n",re.pt->eptr[re.i]->writer);
			   printf("\tplease input your card number:");
               scanf("%d",&a);
			   while(a!=re.pt->eptr[re.i]->borrow[j])j++;
               re.pt->eptr[re.i]->borrow[j]=0;
			   re.pt->eptr[re.i]->date[j][0]=0;
			   re.pt->eptr[re.i]->date[j][1]=0;
			   re.pt->eptr[re.i]->date[j][2]=0;
	  }
	else printf("\n\tyour have return the wrong book!\n");
	
	}
    return;
}
menu2()
{   printf("\n\n\n\n\n\n\n");
	printf("              *************************************************\n");
	printf("                           the library system \n\n");
	printf("                           made by:Liang Xiaoqiu\n");
	printf("                           class:Computer 3\n");
	printf("                           number: 2003374315\n");
	printf("                           guided by: Miss Sun\n");
	printf("              **************************************************\n");
	printf("                            press any key to continue!");
}


main()
{

	int mm;
	menu2();
	getch();
	system("cls");
	menu1();
	while(1)
	{
		scanf("%d",&mm);system("cls");
	    switch(mm)
		{
		case 1:add();
			   printf("press any key to continue!\n");
			   getch();
			   system("cls");menu1();
			   break;
		case 2:sub();
			   printf("press any key to continue!\n");
			   getch();
			   system("cls");menu1();
			   break;
		case 3:borrow1();
			   printf("press any key to continue!\n");
			   getch();
			   system("cls");menu1();
			   break;
		case 4:back();
			   printf("press any key to continue!\n");
			   getch();
			   system("cls");menu1();
			   break;
		case 5: showbtree(T);/*display(T);*/
			   printf("press any key to contiune!\n");
			   getch();
			   system("cls");menu1();
			   break;
		case 6:exit(0);
		}
	}

}




⌨️ 快捷键说明

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