📄 tushuguan2.c
字号:
#include <iomanip.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#define Maxr 100; //最多的读者
#define Maxb 100; //最多的图书
#define Maxbor 5; //每位读者最多借5本书
#define m 3//B-树的阶,暂时设为3
#define FALSE 0
#define TRUE 1
//#define NULL
//#define NULL
typedef struct
{
int tag; //删除标记0:已删1:未删
int bookid; //图书编号
char bookname[20]; //书名
char editname[20];//编者
int nowno;//现存量
int total;//总库存量
int onshelf; //是否在架1:在架0:已借
}booktype;
typedef struct
{
int readerid; //读者编号
char readename[20]; //书名
booktype book[5];//所借书信息
}readertype;
typedef struct book
{
int keynum;//节点中关键字个数,即节点大小
booktype *key[m+1];//关键字向量,0号单元未用
struct book *link[m+1];//子树指针向量
struct book *parent;//指向双亲节点
booktype*recptr[m+1];//记录指针向量,0号单元未使用
}booknode;//B-树节点和B-树类型
typedef struct
{
booknode *pt;//指向找到的节点
int i;//1...M.在节点中的关键字序号
int tag;//1,查找成功,0,查找失败
}resulttype;//B-树的查找结果类型
main()
{
int choice=1,bookid,readerid;
int top,i; //图书记录指针
booknode *book; //图书记录
booktype *b;
readertype *r;
booknodeInitiate(&book);
while(choice!=0)
{
printf("1:借书2:还书3:图书维护4:读者服务0:离开=>");
scanf("%d",&choice);
switch (choice)
{
case 1:
// printf(" 借书读者编号:");
// scanf("%d",&readerid);
printf(" 图书编号:");
scanf("%d",&bookid);
b=searchbook(bookid,book);
if(b->nowno!=0)
{
b->nowno--;
printf("借出后图书信息:书号 %d 编者名 %s 书名 %s 现存量 %d 是否在架 %d 是否已删 %d 总库存量 %d \n",b->bookid,b->editname,b->bookname,b->nowno,b->onshelf,b->tag,b->total);
}
else
{
printf("该图书已经全部借出!\n\n");
b->onshelf=0;
}
break;
case 2:
// printf(" 还书读者编号:");
// scanf("%d",&readerid);
printf(" 图书编号:");
scanf("%d",&bookid);
b=searchbook(bookid,book);
b->nowno++;
printf("还书后图书信息:书号 %d 编者名 %s 书名 %s 现存量 %d 是否在架 %d 是否已删 %d 总库存量 %d \n",b->bookid,b->editname,b->bookname,b->nowno,b->onshelf,b->tag,b->total);
break;
case 3:
bookdata(top,book);
break;
case 4:
readerdata();
break;
}
}
}
/********************************************************************///主函数调用函数
booknodeInitiate(booknode **h)
{
int i;
if((*h=(booknode*)malloc(sizeof(booknode)))==NULL) return 0;
(*h)->keynum=0;
for(i=0;i<m+1;i++)
{
booktypeInitiate(&(*h)->key[i]);
(*h)->link[i]=NULL;//printf("aaaa=%d",(*h)->link[i]->keynum);
//(*h)->link[i]->keynum=0;
}
(*h)->parent=NULL;
return 1;
}
booktypeInitiate(booktype **h)
{
int i;
if((*h=(booktype*)malloc(sizeof(booktype)))==NULL) return 0;
(*h)->bookid=-32767;
for(i=0;i<19;i++)
{
(*h)->bookname[i]='0';
//printf("%c\n",(*h)->bookname[i]);
// (*h)->editname[i]='a';
}
// puts((*h)->bookname);
(*h)->nowno=0;
(*h)->onshelf=0;
(*h)->tag=0;
(*h)->total=0;
return 1;
}
readerdata()
{
}
bookdata(int top,booknode *book)
{
int choose=1;
char bname[20];
char ename[20];
int bookdataid;
booktype *b;
while (choose!=0)
{
printf("图书维护1:新增2:更改3:删除4:查找5:显示6:全删0:退出=>");
scanf("%d",&choose);
switch (choose)
{
case 1:
printf(" 输入图书编号:");
scanf("%d",&bookdataid);
printf(" 输入图书书名:");
scanf("%s",&bname);
printf(" 输入图书著者:");
scanf("%s",&ename);
addbook(bookdataid,bname,ename,top,book);
break;
case 2:
printf(" 输入图书编号:");
scanf("%d",&bookdataid);
// b=searchbook(bookdataid,book);
/* b=query(bookdataid);
if (b==NULL)
{
printf(" 该图书不存在\n");
break;
}
printf(" 输入新的书名:");
scanf("%d",&bname);*/
// setname(bname);
break;
case 3:
printf(" 输入图书编号:");
scanf("%d",&bookdataid);
delbook(bookdataid,book);//printf("aaa==%d",book->key[1]->bookid);
// b=searchbook(bookdataid,book);
/* b=query(bookid);
if (b==NULL)
{
printf(" 该图书不存在\n");
break;
}
delbook();
*/
break;
case 4:
printf(" 输入图书编号:");
scanf("%d",&bookdataid);
searchbook(bookdataid,book);
// disp();
break;
case 5:
disp();
break;
case 6:
clear();
break;
}
}
}
ReaderDBquery(int readerid)
{
}
BookDBquery(int bookid)
{
}
/*************************************************///子函数调用函数
addbook(int n,char *na,char *ename,int top,booknode *book) //增加图书
{
int i,i1,i2,i3,j=0;
booktype *book1;
booknode *book2,*book3;
resulttype *result;
booktypeInitiate(&book1);
booknodeInitiate(&book2);
booknodeInitiate(&book3);
book1->bookid=n;
strcpy(book1->bookname,na);
strcpy(book1->editname,ename);
if(book->parent==NULL/*&&book->link[2]==NULL&&book->link[3]==NULL*/&&book->keynum<=2)//&&book->key[i1]==NULL)
{
if(book->key[1]->bookid==-32767&&book->key[2]->bookid==-32767)
{
book->key[1]=book1;book->keynum++;
book->key[1]->nowno++;book->key[1]->onshelf=1;
book->key[1]->tag=1;book->key[1]->total++;
printf("图书信息:书号 %d 书名 %s 编者名 %s 现存量 %d 是否在架 %d 是否已删 %d 总库存量 %d \n",book->key[1]->bookid,book->key[1]->editname,book->key[1]->bookname,book->key[1]->nowno,book->key[1]->onshelf,book->key[1]->tag,book->key[1]->total);
printf("\n"); return 0;
}
if(book->key[1]->bookid!=-32767&&book->key[2]->bookid==-32767&&book1->bookid>book->key[1]->bookid)
{
book->key[2]=book1;book->keynum++;
book->key[2]->nowno++;book->key[2]->onshelf=1;
book->key[2]->tag=1;book->key[2]->total++;
printf("图书信息:书号 %d 书名 %s 编者名 %s 现存量 %d 是否在架 %d 是否已删 %d 总库存量 %d \n",book->key[2]->bookid,book->key[2]->editname,book->key[2]->bookname,book->key[2]->nowno,book->key[2]->onshelf,book->key[2]->tag,book->key[2]->total);
printf("\n");return 0;
}
if(book->key[1]->bookid!=-32767&&book1->bookid<book->key[1]->bookid)
{
book3->key[1]=book1;book->link[1]=book3;
book->link[1]->parent=book;book->link[1]->keynum++;
book->link[1]->key[1]->nowno++;book->link[1]->key[1]->onshelf=1;
book->link[1]->key[1]->tag=1;book->link[1]->key[1]->total++;
printf("图书信息:书号 %d 书名 %s 编者名 %s 现存量 %d 是否在架 %d 是否已删 %d 总库存量 %d \n",book->key[1]->bookid,book->link[1]->key[1]->editname,book->link[1]->key[1]->bookname,book->link[1]->key[1]->nowno,book->link[1]->key[1]->onshelf,book->link[1]->key[1]->tag,book->link[1]->key[1]->total);
printf("\n");return 0;
}
for(i1=1;i1<3;i1++)
if(book->key[1]->bookid!=-32767/*&&book->key[2]->bookid==-32767*/&&book1->bookid==book->key[i1]->bookid)
{
book->key[i1]->nowno++;book->key[i1]->onshelf=1;
book->key[i1]->tag=1;book->key[i1]->total++;
printf("图书信息:书号 %d 书名 %s 编者名 %s 现存量 %d 是否在架 %d 是否已删 %d 总库存量 %d \n",book->key[i1]->bookid,book->key[i1]->editname,book->key[i1]->bookname,book->key[i1]->nowno,book->key[i1]->onshelf,book->key[i1]->tag,book->key[i1]->total);
printf("\n");return 0;
}
for(i2=1;i2<3;i2++)
{
if(book->key[1]->bookid!=-32767&&book->key[2]->bookid!=-32767&&book1->bookid<book->key[i2]->bookid)
{
if(book->link[i2]!=NULL&&book->link[i2]->key[1]->bookid==book1->bookid)
{
book->link[i2]->key[1]->nowno++;book->link[i2]->key[1]->onshelf=1;
book->link[i2]->key[1]->tag=1;book->link[i2]->key[1]->total++;
printf("图书信息:书号 %d 编者名%s 书名 %s 现存量 %d 是否在架 %d 是否已删 %d 总库存量 %d \n",book->link[i2]->key[1]->bookid,book->link[i2]->key[1]->editname,book->link[i2]->key[1]->bookname,book->link[i2]->key[1]->nowno,book->link[i2]->key[1]->onshelf,book->link[i2]->key[1]->tag,book->link[i2]->key[1]->total);
printf("\n");return 0;
}
else
if(book->link[i2]==NULL)
{
book3->key[1]=book1;book->link[i2]=book3;
book->link[i2]->parent=book;book->link[i2]->keynum++;
book->link[i2]->key[1]->nowno++;book->link[i2]->key[1]->onshelf=1;
book->link[i2]->key[1]->tag=1;book->link[i2]->key[1]->total++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -