# include & ltstdlib.h & gt
# include & ltstdio.h & gt
# include & ltconio.h & gt
#包含“graphics.h”
#包含“math.h”
#定義m 1
結構數據
{ int年;
int月;
int日;
};
結構讀取器節點
{
字符編號[20];
結構數據bro
將數據結構化回;
};
結構書節點
{
char title[15];
char writer[15];
int currentnum
int totalnum
char brief[30];
結構讀取器節點讀取器[20];
};
結構樹節點
{
int n;
struct TreeNode * prt
int key[2 * m];
struct book node * rec[2 * m];
struct TreeNode * link[2 * m+1];
};
struct book node * input node();
struct TreeNode * MB search(struct TreeNode * BTH,int x,int *k,int * flag);
struct TreeNode * mbinsert(struct TreeNode * BTH);
struct TreeNode * MB del(struct TreeNode * BTH);
void output node(struct TreeNode * BTH);
void borrow(struct TreeNode * BTH);
void return(struct TreeNode * BTH);
char菜單(void);
struct TreeNode * MB search(struct TreeNode * BTH,int x,int *k,int *flag)
{
struct TreeNode *p,* q;
p = bth* flag = 0;q = p;
而((p!= NULL)& amp;& amp(*flag==0))
{
* k = 1;q = p;
while((* k & lt;q->;n)& amp;& amp(問->;key[* k-1]& lt;x))* k = * k+1;
如果(q->;key[* k-1]= = x)* flag = 1;
else if((* k = = q-& gt;n)& amp;& amp(問->;key[* k-1]& lt;x)){ p = q-& gt;link[* k];p->;PRT = q;}
else { p = q-& gt;鏈接[* k-1];p->;PRT = q;* k = * k-1;}
}
返回(q);
}
struct TreeNode * mbinsert(struct TreeNode * BTH)
{
int flag,j,k,t;
int y,x,z;
結構TreeNode *p,*q,*u,* s;
struct BookNode *r,* l;
clr SCR();
printf(" \ n \ t請輸入您要插入的圖書:");
scanf("%d ",& ampx);
q=mbsearch(bth,x,& ampk & amp;旗幟);
if(flag==1)
{
printf(" \ n \ t已有%d本這種書,是否要添加另壹本?(y/n)\n ",(q-& gt;rec[k-1])-& gt;total num);
z = getch();
if(z=='y'||z=='Y ')
{
(問->;rec[k-1])-& gt;total num++;(問->;rec[k-1])-& gt;current num++;
printf(" \ n \ t現在總共有%d本這種書,",(q-& gt;rec[k-1])-& gt;total num);
printf(" \ n \ t當前在庫中有%d。,(q-& gt;rec[k-1])-& gt;current num);
}
返回(BTH);
}
r =輸入節點(BTH);
if(bth==NULL)
{
BTH = p =(struct TreeNode *)malloc(size of(struct TreeNode));
p->;n = 1;p->;key[0]= x;p->;rec[0]= r;p->;prt = NULL
for(j = 1;j & lt= 2 * m+1;j++)p-& gt;link[j-1]= NULL;
返回(p);
}
p = NULLt = 0;
while(t==0)
{
if(k = = q-& gt;n){ y = x;l = r;u = p;}
其他
{
y = q-& gt;鍵[q->;n-1];l = q-& gt;rec[q->;n-1];u = q-& gt;鏈接[q-& gt;n];
for(j =(q-& gt;n)-1;j & gt= k+1;j -)
{
q->;key[j]= q-& gt;鍵[j-1];q->;rec[j]= q-& gt;rec[j-1];q->;link[j+1]= q-& gt;link[j];
}
q->;key[k]= x;q->;rec[k]= r;q->;link[k+1]= p;
如果(p!= NULL)p-& gt;PRT = q;
}
如果(q->;n & lt2 *米)
{
q->;n =(q-& gt;n)+1;
t = 1;
q->;鍵[(q->;n)-1]= y;q->;rec[(q-& gt;n)-1]= l;q->;鏈接[q-& gt;n]= u;
如果(u!= NULL)u-& gt;PRT = q;
}
其他
{
p =(struct TreeNode *)malloc(sizeof(struct TreeNode))。
p->;n = m;q->;n = m;p->;PRT = q-& gt;prt
x = q-& gt;鍵[m];r = q-& gt;建議[m];
for(j = 1;j & lt= m-1;j++)
{
p->;key[j-1]=q->key[m+j];p->;rec[j-1]=q->rec[m+j];p->;link[j-1]=q->link[m+j];
如果(q->;鏈接[m+j]!= NULL)(q-& gt;link[m+j])-& gt;PRT = p;
}
p->;link[m-1]=q->link[2 * m];
p->;link[m]= u;
p->;key[m-1]= y;
p->;rec[m-1]= l;
如果(u!= NULL)u-& gt;PRT = p;
for(j = m+2;j & lt= 2 * m+1;j++)
{
q->;link[j-1]= NULL;p->;link[j-1]= NULL;
}
如果(q->;prt==NULL)
{
s =(struct TreeNode *)malloc(sizeof(struct TreeNode))。
s-& gt;key[0]= x;s-& gt;rec[0]= r;
s-& gt;link[0]= q;s-& gt;link[1]= p;
s-& gt;n = 1;s-& gt;prt = NULLq->;PRT = s;p->;PRT = s;
for(j = 3;j & lt= 2 * m+1;j++)s-& gt;link[j-1]= NULL;
BTH = s;t = 1;
}
其他
{
q = q-& gt;prtk = 1;
而((k & lt= q->;n)& amp;& amp(問->;key[k-1]& lt;x))k = k+1;
k = k-1;
}
}
}
返回(BTH);
}
結構樹節點*mbdel(結構樹節點*bth)
{
int flag,j,k,t;
int x,y;
結構TreeNode *u,*s,*p,* q;
struct BookNode *r,* l;
clr SCR();
printf(" \ n \ t請輸入您要刪除的圖書:");
scanf("%d ",& ampx);
q=mbsearch(bth,x,& ampk & amp;旗幟);
if(flag = = 0){ printf(" \ n \ t該書不存在!\ n ");返回(BTH);}
p = q-& gt;link[k];
如果(p!=空)
{
while(p->;鏈接[0]!= NULL)p = p-& gt;鏈接[0];
q->;key[k-1]=p->鍵[0];
q->;rec[k-1]=p->rec[0];
k = 1;q = p;
}
for(j = k;j & lt= q->;n-1;j++)
{
q->;key[j-1]=q->鍵[j];
q->;rec[j-1]=q->建議[j];
}
q->;n = q-& gt;n-1;
而((q!= BTH)& amp;& amp(問->;n & ltm))
{
p = q-& gt;prtj = 1;
while(p->;鏈接[j-1]!= q)j = j+1;
如果((j & lt= p->;n)& amp;& amp((p->;link[j])-& gt;n & gtm))
{
s = p-& gt;link[j];
y = s-& gt;鍵[0];
l = s-& gt;rec[0];
u = s-& gt;鏈接[0];
for(k = 1;k & lt= s-& gt;n-1;k++)
{
s-& gt;key[k-1]= s-& gt;鍵[k];
s-& gt;rec[k-1]=s->rec[k];
s-& gt;link[k-1]= s-& gt;link[k];
}
s-& gt;link[s-& gt;n-1]=s->link[s-& gt;n];
s-& gt;link[s-& gt;n]= NULL;
s-& gt;n = s-& gt;n-1;q->;n = q-& gt;n+1;
q->;鍵[q->;n-1]= p->;鍵[j-1];
q->;rec[q->;n-1]= p->;rec[j-1];
q->;鏈接[q-& gt;n]= u;
p->;key[j-1]= y;
p->;rec[j-1]= l;
如果(u!= NULL)u-& gt;PRT = q;
}
else if((j & gt;1);& amp((p->;link[j-2])-& gt;n & gtm))
{
s = p-& gt;鏈接[j-2];
q->;n = q-& gt;n+1;
q->;鏈接[q-& gt;n]= q-& gt;鏈接[q-& gt;n-1];
for(k = q-& gt;n-1;k & gt=1;k -)
{
q->;key[k]= q-& gt;key[k-1];
q->;rec[k]= q-& gt;rec[k-1];
q->;link[k]= q-& gt;鏈接[k-1];
}
q->;key[0]= p-& gt;鍵[j-2];
q->;rec[0]= p-& gt;建議[j-2];
u = s-& gt;link[s-& gt;n];
q->;link[0]= u;
如果(u!= NULL)u-& gt;PRT = q;
p->;key[j-2]= s-& gt;鍵[s->;n-1];
p->;rec[j-2]=s->rec[s-& gt;n-1];
s-& gt;link[s-& gt;n]= NULL;
s-& gt;n = s-& gt;n-1;
}
其他
{
if(j = = p-& gt;n+1)
{ q = p-& gt;鏈接[j-2];s = p-& gt;鏈接[j-1];j = j-1;}
else s = p-& gt;link[j];
q->;鍵[q->;n]= p-& gt;鍵[j-1];
q->;rec[q->;n]= p-& gt;rec[j-1];
t = q-& gt;n+1;
for(k = 1;k & lt= s-& gt;n;k++)
{ q->;key[t+k-1]= s-& gt;key[k-1];
q->;rec[t+k-1]= s-& gt;rec[k-1];
u = s-& gt;鏈接[k-1];
q->;link[t+k-1]= u;
如果(u!= NULL)u-& gt;PRT = q;
}
u = s-& gt;link[s-& gt;n];q->;link[t+s->;n]= u;
如果(u!= NULL)u-& gt;PRT = q;
q->;n = 2 * m;
免費;
for(k = j;k & lt= p->;n-1;k++)
{
p->;key[k-1]=p->鍵[k];
p->;rec[k-1]=p->rec[k];
p->;link[k]= p-& gt;鏈接[k+1];
}
p->;n = p-& gt;n-1;s = q;q = p;
}
}
if((q = = BTH)& amp;& amp(問->;n==0))
{免費(BTH);BTH = s;BTH-& gt;prt = NULL
if(s-& gt;n = = 0){ BTH = NULL;免費;}
}
printf(" \ n \ t該書已被刪除!");
返回(BTH);
}
struct BookNode *InputNode()
{
struct book node * p;
int I;
p =(struct BookNode *)malloc(sizeof(struct BookNode));
clr SCR();
fflush(stdin);
printf(" \ n \ t輸入標題:");
獲取(p-& gt;標題);
printf(" \ n \ t輸入編寫器:");
獲取(p-& gt;作家);
printf(" \ n \ t輸入賬面當前金額:");
scanf("%d ",& ampp->;current num);
printf(" \ n \ t輸入賬面總金額:");
scanf("%d ",& ampp->;total num);
fflush(stdin);
printf(" \ n \ t輸入圖書簡要說明:");
獲取(p-& gt;簡短);
for(I = 0;我& lt20;i++)
(p->;讀者[我])。num[0]= ' \ 0 ';
返回(p);
}
void output node(struct TreeNode * BTH)
{
struct TreeNode * q;
struct book node * p;
int k;
int x;
int標誌;
clr SCR();
printf(" \ n \ t請輸入您要搜索的圖書:");
scanf("%d ",& ampx);
q=mbsearch(bth,x,& ampk & amp;旗幟);
if(flag==1)
{
p = q-& gt;rec[k-1];
printf("\n\tTitle: %s ",p-& gt;標題);
printf("\n\tWriter: %s ",p-& gt;作家);
printf("\n\tCurrentAmount: %d ",p-& gt;current num);
printf("\n\tTotalAmount: %d ",p-& gt;total num);
printf(" \ n \ tbrief introduction:% s \ n ",p-& gt;簡短);
}
else printf(" \ n \ t這本書不存在!");
}
void borrow(struct TreeNode *bth)
{
struct TreeNode * q;
struct book node * p;
結構reader node * r;
int i,k,x,flag,t;
clr SCR();
printf(" \ n \ t請輸入您想借的書:");
scanf("%d ",& ampx);
q=mbsearch(bth,x,& ampk & amp;旗幟);
if(flag==1)
{
p = q-& gt;rec[k-1];
printf(" \ n \ t您想要這本書嗎?(y/n)");
printf("\n\tTitle: %s ",p-& gt;標題);
printf("\n\tWriter: %s ",p-& gt;作家);
printf("\n\tCurrentAmount: %d ",p-& gt;current num);
printf("\n\tTotalAmount: %d ",p-& gt;total num);
printf(" \ n \ tbrief introduction:% s ",p-& gt;簡短);
t = getch();
if(t=='y'||t=='Y ')
{
如果((p-& gt;current num)= = 0)printf(" \ n \ t抱歉,這本書已全部借出...");
其他
{
clr SCR();
for(I = 0;我& lt20;i++)if((p-& gt;讀者[我])。num[0]= = ' \ 0 ')break;
printf(" \ n \ t請輸入您的證書號:");
scanf("%s ",(p-& gt;讀者[我])。num);
printf(" \ n \ t請輸入借用數據:");
printf(" \ n \ tYear:");
scanf("%d ",& amp((p->;reader[I]). bro . year);
printf(" \ t month:");
scanf("%d ",& amp((p->;reader[I]). bro . month);
printf(" \ tDay:");
scanf("%d ",& amp((p->;reader[I]). bro . day);
printf(" \ n \ t請輸入回報數據:");
printf(" \ n \ tYear:");
scanf("%d ",& amp((p->;reader[I]). back . year);
printf(" \ t month:");
scanf("%d ",& amp((p->;reader[I]). back . month));
printf(" \ tDay:");
scanf("%d ",& amp((p->;reader[I]). back . day));
p->;current num-;
printf(" \ n \ t您已經借了這本書。);}
}
}
else printf(" \ n \ t這本書不存在!");
}
void回收(struct TreeNode *bth)
{
struct TreeNode * q;
struct book node * p;
int i,k,x,flag,t,j;
int年,月,日,d;
浮動薪酬;
充電溫度[20];
clr SCR();
printf(" \ n \ t請輸入您想要償還的圖書:");
scanf("%d ",& ampx);
q=mbsearch(bth,x,& ampk & amp;旗幟);
if(flag==1)
{
p = q-& gt;rec[k-1];
printf(" \ n \ t您想償還這本書嗎?(y/n)");
printf("\n\tTitle: %s ",p-& gt;標題);
printf("\n\tWriter: %s ",p-& gt;作家);
printf("\n\tCurrentAmount: %d ",p-& gt;current num);
printf("\n\tTotalAmount: %d ",p-& gt;total num);
printf(" \ n \ tbrief introduction:% s ",p-& gt;簡短);
t = getch();
if(t=='y'||t=='Y ')
{
如果((p-& gt;currentnum)>=(p->;總計數量) )
printf(" \ n \ t您想提供更多圖書\ n ");
其他
{
clr SCR();
printf(" \ n \ t請輸入您的證書號:");
scanf("%s ",temp);
j = 0;
for(I = 0;我& lt20;i++)
{
如果(!(strcmp(temp,(p-& gt;讀者[我])。num)){ j = 1;打破;}
}
if(j = = 0){ printf(" \ n \ t您沒有借這本書。");返回;}
printf(" \ n \ t今天是:");
printf(" \ n \ tYear:");
scanf("%d ",& amp年份);
printf(" \ t month:");
scanf("%d ",& amp月);
printf(" \ tDay:");
scanf("%d ",& amp天);
d = 0;
如果(年份& lt(p->;reader[I]). back . year)d = 1;
如果(年份& lt=(p->;讀者[我])。& amp月份& lt(p->;reader[I]). back . month)d = 1;
如果(年份& lt=(p->;讀者[我])。& amp月份& lt=(p->;讀者[i]),back.month & amp& ampday & lt(p->;reader[I]). back . day)d = 1;
如果(d==0)
{
clr SCR();
工資=(年-(p-& gt;reader[i]).back.year)*365+(月-(p-& gt;reader[I]). back . month)* 30+(day-(p-& gt;讀者[我]). back . day);
printf(" \ n \ t您在%d-%d-%d "中借了這本書,(p-& gt;reader[i]).bro.year,(p-& gt;reader[I])bro . month,(p-& gt;reader[I]). bro . day);
printf(" \ n \ t應該在%d-%d-%d "內償還,(p-& gt;reader[i]).back.year,(p-& gt;reader[i]).back.month,(p-& gt;讀者[我]). back . day);
printf(" \ n \ t今天是%d-%d-%d ",年、月、日);
printf(" \ n \ n \ t所以妳已經走出了償還日");
printf(" \ n \ t您必須支付%2.1f元。",0.1 *付);
}
(p->;讀者[我])。num[0]= ' \ 0 ';
p->;current num++;
printf(" \ n \ t您已經償還了這本書。");
}
}
}
else printf(" \ n \ t您想要歸還壹本不存在的書嗎?");
}
東華()
{ int graphdriver = VGA
int graphmode = VGAHI
int i,j;
registerbgidriver(EGA VGA _ driver);
init graph(& amp;graph driver & amp;graphmode,“”;
clr SCR();
for(I = 0;我& lt=150;i+=5)
{ set color(I);
textbackground(紅色);
settextstyle(0,0,2);
outtextxy(100,i+140,“圖書館管理系統”);
延時(1000000);
clr SCR();
}
setcolor(紅色);
outtextxy(50,200,“加載”);
延時(10000000000);
outtextxy(50,200,“加載中。”);
延時(10000000000);
outtextxy(50,200,“加載中..”);
延時(10000000000);
outtextxy(50,200,"正在加載...");
延時(10000000000);
outtextxy(50,200,“正在加載…”);
延時(10000000000);
outtextxy(50,200,“正在加載.....”);
延時(10000000000);
outtextxy(50,200,“正在加載……”);
延時(10000000000);
outtextxy(50,200,“正在加載.......”);
延時(10000000000);
outtextxy(50,200,"正在加載.......");
延時(10000000000);
outtextxy(50,200,"加載......");
延時(10000000000);
outtextxy(50,200,"加載.......");
延時(10000000000);
outtextxy(50,200,“加載..........”);
outtextxy(50,200,“加載..........”);
延時(10000000000);
for(I = 0;我& lt=10;i++)
延時(10000000000);
clr SCR();
}
字符菜單(無效)
{
clr SCR();
窗口(1,1,80,25);
textmode(單聲道);
textbackground(黑色);
text color(5);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *****歡迎使用圖書館管理系統* * * * *);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *1。加壹本書*);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *2。刪除壹本書* ";
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *3。搜壹本書*);
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *4。借書*”;
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t *5。《還書*》;
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf(" \ n \ t * 0 . exit * ");
printf(" \ n \ t * * * * * * * * * * * * * * * * * * * * * * * *);
printf("\n\t請選擇:");
返回getch();
}
東方東華
{ int graphdriver = VGA
int graphmode = VGAHI
int i,j;
char c;
registerbgidriver(EGA VGA _ driver);
init graph(& amp;graph driver & amp;graphmode,“”;
/* * * * * * * * * * * * * *石富方博董華?**************/
printf:{ set color(RED);
settextstyle(3,0,5);
outtextxy(100,30,“方博東華?”);
outtextxy(150,80,“是”);
outtextxy(300,80,“否”);
c = getch();
if(c=='Y'||c=='y ')
{東華();
menu();
}
其他
if(c=='N'||c=='n ')
menu();
其他
{setcolor(綠色);
settextstyle(3,0,8);
outtextxy(200,240,"錯誤!");
延時(1000000000);
clr SCR();
goto printf
}
}
/**************************************/
}
void main()
{
char c,t;
int x;
int k,flag,p = 1;
struct TreeNode * bth = NULL
博方東華();
while(1)
{
c = menu();
putch(c);
getch();
開關(c)
{
case ' 1 ':BTH = mbinsert(BTH);
打破;
情況' 2 ':BTH = MB del(BTH);
打破;
情況“3”:output node(BTH);
打破;
情況“4”:借入(BTH);
打破;
案例‘5’:回報(BTH);
打破;
案例“0”:clrscr();
printf(" \ n \ t是否要返回?(y/n)");
t = getch();
if(t = = ' Y ' | | t = = ' Y ')exit(0);
打破;
def ult:break;
}
printf(" \ n \ t按任意鍵進入主菜單...");
getch();
}
}