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

📄 tushuguan2.c

📁 我编写的一个
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -