资源简介
本演示程序利用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
- 上一篇:图像匹配、图像配准、图像校正
- 下一篇:基于51单片机的测量放大电路,简单实用
评论
共有 条评论