《数据结构》第8次上机作业:图书管理系统

#include<stdio.h>
#include<string.h>
#define ENDKEY '#'

typedef struct node
{
	char name[20];
	char writer[20];
	float price;
	struct node *lchild,*rchild; 
}BSTNode,*BSTree;

//二叉排序树插入 
void InsertBST(BSTree *bst,char* name,char* writer,float price)
{
	BSTree s;
	if(*bst==NULL)//树为空 
	{
		s=(BSTree)malloc(sizeof(BSTNode));
		strcpy(s->name,name);
		strcpy(s->writer,writer);
		s->price=price;
		s->lchild=NULL;
		s->rchild=NULL;
		*bst=s; 
	}
	else if(strcmp((*bst)->name,name)>0)
	 InsertBST(&((*bst)->lchild),name,writer,price);
	else if(strcmp((*bst)->name,name)<0)
	 InsertBST(&((*bst)->rchild),name,writer,price);
}
//创建二叉排序树
void CreateBST(BSTree *bst)
{
	char name[20];
	char writer[20];
	float price;
	*bst=NULL;
	printf("请输入书籍信息(书名 作者 价格):\n");
	scanf("%s %s %f",name,writer,&price);
	fflush(stdin);
	while(strcmp(name,"#")!=0)
	{
		fflush(stdin);
		InsertBST(bst,name,writer,price);
		printf("请输入书籍信息(书名 作者 价格):\n");
	    scanf("%s %s %f",name,writer,&price);
	}
}
//中序遍历二叉树
void InOrder(BSTree bst)
{
	if(bst!=NULL)
	{
		InOrder(bst->lchild);
	    printf("%s %s %f\n",bst->name,bst->writer,bst->price);
	    InOrder(bst->rchild);
	}
} 
//查找
BSTree SearchBST(BSTree bst,char* name)
{
	if(!bst) return NULL;
	else if(strcmp(bst->name,name)==0)
	{
		printf("您要查找的信息如下:\n");
		printf("%s %s %f",bst->name,bst->writer,bst->price);
		return bst;//查找成功
	}
		else if(strcmp(bst->name,name)>0)
		 return SearchBST(bst->lchild,name);
		else
		 return SearchBST(bst->rchild,name); 
} 
BSTree SearchBST_1(BSTree bst,char* writer)
{
	if(!bst) return NULL;
	else if(strcmp(bst->writer,writer)==0)
	{
		printf("您要查找的信息如下:\n");
		printf("%s %s %f",bst->name,bst->writer,bst->price);
		//return bst;//查找成功
	}
		else if(strcmp(bst->writer,writer)>0)
		 return SearchBST_1(bst->lchild,writer);
		else
		 return SearchBST_1(bst->rchild,writer); 
} 
BSTree SearchBST_2(BSTree bst,char* name,char* writer)
{
	if(!bst) return NULL;
	else if(strcmp(bst->name,name)==0&&strcmp(bst->writer,writer)==0)
	{
		printf("您要查找的信息如下:\n");
		printf("%s %s %f",bst->name,bst->writer,bst->price);
		return bst;
	}
		else if(strcmp(bst->name,name)>0)
		 return SearchBST_2(bst->lchild,name,writer);
		else
		 return SearchBST_2(bst->rchild,name,writer); 
} 
void main()
{
	char choice;
	char name[20];
	char writer[20];
	
	BSTree bst;
	CreateBST(&bst);
	InOrder(bst); 
	
	printf("/欢迎使用斯丢匹得图书管理系统//\n");
	printf("请选择查找方式:\n");
	printf("A.按书名查找\n");
	printf("B.按作者查找\n");
	printf("C.按书名+作者名查找\n");
	printf("/您的选择是\n");
	fflush(stdin);
	scanf("%c",&choice);

	switch(choice)
	{
		case 'A':printf("请输入您要查找的图书名:\n");scanf("%s",name);SearchBST(bst,name);break; 
		case 'B':printf("请输入您要查找的作者名:\n");scanf("%s",writer);SearchBST_1(bst,writer);break; 
		case 'C':printf("请输入您要查找的图书名和作者名,以空格隔开:\n");scanf("%s %s",name,writer);SearchBST_2(bst,name,writer);break; 
	}
	
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值