• 大小: 40KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签:

资源简介

本演示程序利用B树作为索引,实现了图书管理功能,可以进行采编入库、清除库存及图书借阅、图书归还、图书预约、列出某著者全部著作名、列出某种书的状态、每次插入或删除一个关键字后以凹入表显示B树的状态等操作。

资源截图

代码片段和文件信息

# include 
# include 
# include 
# include 
# include 
#define m 3
#define OK 1
#define ERROR 0
#define MAX 20
typedef int Status;
typedef int keytype;
typedef struct ReaderNode
{
 unsigned long int cardnum;
 char     name[MAX+1];
 struct ReaderNode *next;
 int    time;
}ReaderNode*ReaderType;

typedef struct BookNode{
   char title[MAX+1];
   char author[MAX+1];
   int  currenttotal;
   ReaderType reader;
   ReaderType bespeaker;    
}BookNode*BookType;

typedef struct BTNode{
   int    keynum;
   struct BTNode *parent;
   int    key[m];
   BookNode book[m];
   struct BTNode *ptr[m+1];
   int    leaf;
}BTNode*BTree;
int x0;
int y0;
short x=8;

void head()
{
 printf(“ *--------------------------------------------------------------------------*\n“);
 printf(“ |  编号  |        书名        |       作者名       |  总库存量 |  现库存量 |\n“);
 printf(“ *--------------------------------------------------------------------------*\n“);  
}
void Visit(BTree T)
{
 int i=0;
 while(ikeynum)
 {
  printf(“ |%8d|%20s|%20s|    %4d   |    %4d   |\n“T->key[i]T->book[i].titleT->book[i].authorT->book[i].totalT->book[i].current);
  printf(“ *--------------------------------------------------------------------------*\n“); 
  i++;
 }
}
 
void BTreeTraverse(BTree T)//历遍函数
{
 int i;
 if(!T) return ;
 Visit(T);
 for(i=0;i<=T->keynum; i++)
 BTreeTraverse(T->ptr[i]);
}
 
void ShowBTree(BTree Tshort x)//以凹入表形式输出B树
{
 int i;
 if(!T) return;
 printf(“\n“);
 for(i=0;i<=x;i++) putchar(‘ ‘);
 for(i=0;ikeynum;i++)
 {
  printf(“%d“T->key[i]);
 }
 for(i=0 ;i<=T->keynum;i++)
 ShowBTree(T->ptr[i]x+7);
}

void gotoxy(int xint y){
 COORD coord;
 coord.X=x;
 coord.Y=y;
 SetConsoleCursorPosition( GetStdHandle( STD_OUTPUT_HANDLE ) coord );
}

Status EmptyNode(BTNode *ptrint i)//书结点初始化
{
  ptr->book[i].current=0;
  ptr->book[i].total=0;
  ptr->book[i].reader=NULL;
  ptr->book[i].bespeaker=NULL;
  ptr->book[i].title[0]=‘\0‘;
  ptr->book[i].author[0]=‘\0‘;
 return OK;
}

Status InputChar(char *a)//输入字符串,并检验合法性
{
 int i=0;
 char k;
 while(1)
 {
  k=getch();
  if(i>=MAX)
  {
   printf(“\n输入数据超出允许范围请重新输入!“);
   i=0;
   continue;
  }
  if(k==13)/*输入的是回车就结束*/
  {
   if(i==0)
   {
    printf(“\n输入不能为空请重新输入!\n“);
    continue;
   }
   a[i]=‘\0‘;
   break;
  }
  if(k==8)/*输入的是回格就删除上一个数*/
  {
   putchar(‘\b‘);
   putchar(32);
   putchar(‘\b‘);
   if(i>0)
   i--;
   continue;
  }
  putch(k);
  a[i]=k;
  i++;
 }
 return OK;
}

Status AddNum(BTNode *ptrint jint k)//输入整数,并检验合法性
{
 int i;
 while(1)
 {
  scanf(“%d“&i);
  fflush(stdin);
  if(i) break;
  else
  printf(“\n输入数目不允许为空!请重新输入:“);
  continue; 
 }
 if(k)
 {
  ptr->book[j].current+=i;
  ptr->book[j].total+=i;
 }
 else
 {
  ptr->book[j].current=i;
  ptr->book[j].total=i;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     192555  2010-07-09 00:15  图书管理.exe

     文件      17132  2010-07-09 00:15  图书管理.c

----------- ---------  ---------- -----  ----

               209687                    2


评论

共有 条评论

相关资源