#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;
}
}