16、];
char sex;
char password[16];
int residue;
long borrowed[10][2];
int limit;
struct READER *next;
}reader;
char *lc(int i);
char *sc(char p);
voidshowR(reader *tr,book *bhead);
voidshowB(book *p);
book *S_name(book *head,char name[]);
voidS_author(book *head);
keynode *initindex(book
17、*head);
voiddelkey(keynode *keyhead);
book *S_number(long num,book *bhead);
reader *S_reader(reader *rhead,longnum);
book *Bload();
reader *Rload();
voidBsave(book *Bhead);
voidRsave(reader *Rhead,book *bhead);
void insert(book *bhead);
voidreg(reader *head);
reader *login(reader *rhead,bo
18、ok *bhead);
void borrow(reader *temp,book *Bhead);
voidreturnbook(book *bhead,reader *temp);
void style();
voidintpsd(char *psd);
void menu(struct BOOK *Bhead,reader *Rhead);
void menu2(reader *temp,reader *rhead,book *bhead);
longbacktime();
#endif
借還書文件borrow_return.cpp
#include"library.
19、h”
void borrow(reader *temp,book *Bhead)
{
style();
longnum;
int i;
chart,k,name[30];
book *Bbook;
getch();
system("cls");
while(1)
{
printf("\n ┏━━━━━━━━━━┓ ”);
printf(”\n█━━━━━━━━━━━┫借書┣━━━━━━━━━━━█”);
printf(”\n ┗
20、━━━━━━━━━━┛ ");
printf(”\n請輸入您要查找借閱書籍的方式:”);
printf("\n 1、按書號(hào)查找\n");
printf(”\n 2、按作者查找\n");
printf(”\n 3、按書名查找\n");
printf("\n 4、返回主菜單\n");
t=getch();
switch(t)
{
21、
case ’1:
{
printf("\n請輸入您要查找的書籍編號(hào):”);
scanf("%d",&num);
if((Bbook=S_number(num,Bhead))!=NULL)
{
showB(Bbook);
printf(”\n請問你是否要借閱該書籍?Y/N");
k=getch();
if(k==Y’||k==y’)
goto borrow;
else
break;
}
else
break;
}
case 2’:
{
S_author(Bhead);
break;
}
case ’3’:
{
printf("\
22、n請輸如您要查找的書籍名:");
scanf(”%s”,name);
if((Bbook=S_name(Bhead,name))!=NULL)
{
showB(Bbook);
printf(”\n請問你是否要借閱該書籍?Y/N”);
k=getch();
if(k==’Y||k==’y)
goto borrow;
else
break;
}
else
continue;
break;
}
default:
return;
borrow: if(Bbook!=NULL&&temp—〉residue〉0&&Bbook—>exist>0)
{
t
23、emp->residue--;
Bbook—〉exist——;
for(i=0;i〈10;i++)
{
if(temp->borrowed[i][0]==0)
{
temp->borrowed[i][0]=Bbook-〉number;
temp-〉borrowed[i][1]=backtime();
break;
}
}
printf(”\n 借閱成功!”);
}
else
if(!(temp—〉residue>0))
printf("\n您只能借閱10本書籍!");
else
if(!(Bbook—〉ex
24、ist〉0))
printf(”\n該書沒有庫存,請借閱其他書籍!”);
printf(”\n您要繼續(xù)借閱書籍嗎?Y/N”);
t=getch();
if(t==y||t==’Y)
continue;
else
break;
}
}
}
voidreturnbook(book *bhead,reader *temp)
{
longnum;
inti,j=0;
char t;
book *p;
printf("\n ┏━━━━━━━━━━┓ ");
p
25、rintf(”\n█━━━━━━━━━━━┫還書┣━━━━━━━━━━━█");
printf("\n ┗━━━━━━━━━━┛ ”);
printf(”\n\n請輸入您所還書的編號(hào):”);
scanf("%d",&num);
for(i=0;i<10;i++)
{
if(num==temp->borrowed[i][0])
j=1;
}
p=S_number(num,bhead);
if(p!=NULL&&j==1)
{
printf("\n┌────┬──────┬
26、───────┬────┬───────┐”);
printf("\n│書本編號(hào)│書籍名稱│出版社名稱│出版時(shí)間│作者│”);
printf("\n├────┼──────┼───────┼────┼───────┤");
printf("\n│%8d│%12s│%14s│%8d│%14s│",p—〉number,p—〉name,p-〉press,p—〉presstime,p—〉author);
printf("\n└────┴──────┴───────┴────┴───────┘\n");
printf("\n確認(rèn)歸還該書籍?Y/N");
t=getch();
if(t==
27、’Y’||t==y’)
{
p-〉exist++;
temp-〉residue++;
for(i=0;i〈10;i++)
{
if(temp->borrowed[i][0]==num)
{
temp->borrowed[i][0]=0;
temp->borrowed[i][1]=0;
break;
}
}
}
else return;
}
else
{
printf(”\n編號(hào)有誤,請仔細(xì)檢查!");
}
}
新書入庫insert.cpp
#include ”library.h”
void insert(book *bhe
28、ad)
{
style();
long t;
book *temp1,*temp,*temp2;
temp1=bhead-〉next;
printf(”\n ┏━━━━━━━━━━┓ ");
printf("\n█━━━━━━━━━━━┫入庫┣━━━━━━━━━━━█");
printf(”\n ┗━━━━━━━━━━┛ ”);
while(1)
{
printf("\n請輸入您給定書的
29、編號(hào)(6位以內(nèi)的正整數(shù)):");
scanf(”%d",&t);
if(t〈=0||t〉999999)
{
printf(”\n您的編號(hào)不在處理范圍(1~999999)之內(nèi)!”);
fflush(stdin);
continue;
}
else
{
temp2=S_number(t,bhead);
if(temp2==NULL)
{
break;
}
else
{
temp2—>total++;
temp2—>exist++;
printf(”\n編號(hào)為%d的書已存在,入庫成功!”,t);
return;
}
}
}
te
30、mp=(book*)malloc(sizeof(book));
temp->number=t;
printf(”\n請輸入書名:");
scanf("%s”,temp-〉name);
printf("\n請輸入本書作者:");
scanf("%s",temp—>author);
printf(”\n請輸入本書出版社:”);
scanf(”%s”,temp-〉press);
printf("\n請輸入本書出版時(shí)間:”);
scanf(”%d”,&temp->presstime);
temp—>next=NULL;
temp->total=1;
temp—>exist=1;
31、
if(bhead->next==NULL)
bhead->next=temp;
else
{
while(temp1—>next!=NULL&&temp1-〉number〈temp->number)
temp1=temp1-〉next;
temp—〉next=temp1->next;
temp1->next=temp;
}
printf(”\n ┏━━━━━━━━━━┓ ");
printf(”\n█━━━━━━━━━━━┫入庫成功┣━━━━━━━━━━━█");
pr
32、intf("\n ┗━━━━━━━━━━┛ ");
}
voidreg(reader *head)
{
style();
long i=1000;
int j;
char t1[16],t2[16];
reader *temp=head—>next;
reader *p;
p=new(reader);
printf("\n ┏━━━━━━━━━━┓ ”);
printf(”\n█
33、━━━━━━━━━━━┫注冊┣━━━━━━━━━━━█”);
printf(”\n ┗━━━━━━━━━━┛ ");
printf("\n 請輸入姓名:”);
scanf(”%s",p—〉name);
fflush(stdin);
while(1)
{
printf("\n 請輸入性別:\n M:男性:\n
34、 F:女性:”);
p-〉sex=getchar();
if(p—>sex==’F||p—〉sex==’f’||p—>sex==M||p-〉sex==m)
break;
else
printf("\n 閣下既非男,又非女,莫非來自泰國?”);
}
while(1)
{
while(1)
{
printf("\n 請輸入您的密碼:”);
intpsd(t1);
if(strlen(t1)〈=4)
printf(”\n 您設(shè)置的密碼過于簡單,請重新設(shè)置:"
35、);
else
break;
}
printf("\n 請確認(rèn)您的密碼:”);
intpsd(t2);
if(strcmp(t1,t2)==0)
{
strcpy(p->password,t1);
break;
}
else
printf(”\n 您兩次輸入的密碼不一致!");
}
p—〉residue=10;
p-〉next=NULL;
for(j=0;j<10;j++)
{
p->borrowed[j][0]=0;
p—〉borrowed[j][1]=0;
36、
}
if(temp==NULL)
{
p—〉number=i;
head->next=p;
p-〉limit=1;
}
else
{
++i;
while(temp-〉next!=NULL)
{
++i;
temp=temp-〉next;
}
p-〉number=i;
p—>limit=0;
temp—〉next=p;
}
showR(p,NULL);
}
reader *login(reader *rhead,book *bhead)
{
longnum;
char pass[16];
int i=5;
reade
37、r *reader;
style();
printf(”\n ┏━━━━━━━━━━┓ ”);
printf("\n█━━━━━━━━━━━┫登錄┣━━━━━━━━━━━█");
printf(”\n ┗━━━━━━━━━━┛ ”);
while(1)
{
printf(”\n 請輸入您的借閱證號(hào):");
scanf("%d”,&num);
if(
38、(reader=S_reader(rhead,num))==NULL)
{
printf(”\n 沒有找到您所在編號(hào)的讀者?!保?
getch();
return NULL;
}
else
break;
}
while(i>0)
{
printf(”\n 請輸入密碼:”);
intpsd(pass);
if(strcmp(pass,reader—〉password)==0)
return reader;
else
{
printf(”\n
39、 密碼錯(cuò)誤");
return NULL;
}
}
}
文件讀、寫load_save。cpp
#include "library.h"
book *Bload()
{
FILE *p;
book *Bhead=(book*)malloc(sizeof(book));
book *temp,*temp1;
Bhead->next=NULL;
if((p=fopen("book.txt",”r”))==NULL)
{
printf(”\n打開文件book.txt失敗,請檢查.。.");
returnBhead;
}
else
{
40、
fgetc(p);
if(!feof(p))
{
printf("\n非空");
rewind(p);
temp=(book*)malloc(sizeof(book));
fscanf(p,”%14d%12s%18s%8d%14s%4d%4d\n",&temp->number,temp-〉name,temp—>press,&temp—>presstime,temp—>author,&temp-〉total,&temp->exist);
temp—>next=NULL;
Bhead-〉next=temp;
}
while(!feof(p))
{
temp1=
41、(book*)malloc(sizeof(book));
fscanf(p,"%14d%12s%18s%8d%14s%4d%4d\n",&temp1—>number,temp1—〉name,temp1->press,&temp1—〉presstime,temp1-〉author,&temp1->total,&temp1—〉exist);
temp1—〉next=NULL;
temp—〉next=temp1;
temp=temp—〉next;
}
printf(”\n書籍信息讀取成功。。.");
returnBhead;
}
}
reader *Rload()
42、{
FILE *p;
int i;
reader *temp,*temp1;
reader *Rhead=(reader*)malloc(sizeof(reader));
Rhead-〉next=NULL;
if((p=fopen(”reader。txt”,"r"))==NULL)
{
printf(”\n打開文件reader.txt失敗,請檢查”);
returnRhead;
}
else
{
fgetc(p);
if(!feof(p))
{
rewind(p);
temp=(reader*)malloc(sizeof(reader));
fs
43、canf(p,"%12d%10s%3c%8d%2d%12s”,&temp—>number,temp—〉name,&temp-〉sex,&temp—>residue,&temp-〉limit,temp-〉password);
for(i=0;i〈10;i++)
{
fscanf(p,"%6d”,&temp->borrowed[i][0]);
fscanf(p,"%10d”,&temp—〉borrowed[i][1]);
}
temp—〉next=NULL;
Rhead-〉next=temp;
}
while(!feof(p))
{
printf("\a");
t
44、emp1=(reader*)malloc(sizeof(reader));
fread(temp1,sizeof(reader),1,p);
temp1-〉next=NULL;
temp—>next=temp1;
temp=temp-〉next;
}
printf("\n讀者信息讀取成功。..”);
returnRhead;
}
}
voidBsave(book *Bhead)
{
FILE *p;
book *temp=Bhead->next;
if(temp==NULL)
return;
else
{
if((p=fopen(”book.t
45、xt","w”))==NULL)
printf("\n打開book。txt失敗...”);
while(temp!=NULL)
{
showB(temp);
fprintf(p,”%14d%12s%14s%8d%14s%4d%4d\n",temp—>number,temp-〉name,temp->press,temp—>presstime,temp—〉author,temp—>total,temp—〉exist);
temp=temp—〉next;
}
printf(”\n存儲(chǔ)書籍成功...");
}
}
voidRsave(reader *Rhead,boo
46、k *Bhead)
{
FILE *p;
int i;
reader *temp=Rhead-〉next;
if(temp==NULL)
return;
else
{
if((p=fopen("reader.txt",”w"))==NULL)
printf(”\n打開reader。txt失敗.。?!?;
while(temp!=NULL)
{
Sleep(1000);
showR(temp,Bhead);
fprintf(p,”%12d%10s%3c%8d%2d%12s”,temp—>number,temp->name,temp—>sex,temp—>
47、residue,temp—〉limit,temp—>password);
for(i=0;i<10;i++)
{
fprintf(p,”%6d",temp—>borrowed[i][0]);
fprintf(p,"%10d”,temp—>borrowed[i][1]);
}
temp=temp—〉next;
}
printf("\n存儲(chǔ)讀者成功。.。");
}
}
圖書搜索search.cpp
#include”library。h”
book *S_name(book *head,char name[])
{
book *temp=head->next
48、;
if(temp==NULL)
printf("\n書庫中還沒有書籍,請入庫!”);
else
{
while(temp!=NULL)
{
if(strcmp(temp->name,name)==0)
{
printf(”\n書名為<<%s〉〉的書存在!”,name);
break;
}
else
temp=temp-〉next;
}
}
return temp;
}
voidS_author(book *head)
{
char author[30];
book *temp=head—>next;
if(temp==NULL)
49、printf(”\n書庫中還沒有書籍,請入庫!”);
else
{
printf("\n請輸入您要查找的作者名:”);
scanf(”%s”,author);
while(temp!=NULL)
{
if(strcmp(author,temp—>author)==0)
showB(temp);
temp=temp->next;
}
}
getch();
}
keynode *initindex(book *head)
{
int i;
book *temp=head->next;
keynode *tempkey,*p;
printf("\n初
50、始化索引表開始。。。”);
keynode *keyhead=(keynode*)malloc(sizeof(keynode));
keyhead—>next=NULL;
tempkey=keyhead—〉next;
if(temp!=NULL)
{
p=(keynode*)malloc(sizeof(keynode));
p-〉key=temp—>number;
p—〉adress=temp;
p-〉next=NULL;
keyhead—〉next=p;
tempkey=keyhead->next;
}
while(temp!=NULL)
{
for(i
51、=0;i〈5&&temp—>next!=NULL;i++)
{
temp=temp—〉next;
}
if(i<4)
returnkeyhead;
else
{
p=(keynode*)malloc(sizeof(keynode));
p—〉key=temp—〉number;
p—〉adress=temp;
p—〉next=NULL;
tempkey->next=p;
tempkey=tempkey->next;
}
}
getch();
returnkeyhead;
}
voiddelkey(keynode *keyhead)
{
k
52、eynode *temp;
if(keyhead->next==NULL)
{
free(keyhead);
}
else
{
while(keyhead!=NULL)
{
temp=keyhead;
keyhead=keyhead—〉next;
free(temp);
}
}
printf("\n索引表清空!”);
}
book *S_number(long num,book *bhead)
{
int i;
book *p;
keynode *keyhead=initindex(bhead);
keynode *tempkey=ke
53、yhead-〉next;
if(tempkey==NULL)
{
printf(”\n書庫無記錄,請輸入!");
delkey(keyhead);
return NULL;
}
else
{
while(tempkey->next!=NULL)
{
if(tempkey—〉keykeynext;
else break;
}
if(tempkey==NULL)
{
printf("沒有找到編號(hào)為%d的書籍!",num);
delkey(keyhead);
54、return NULL;
}
else
{
p=tempkey—〉adress;
for(i=0;i<5&&p!=NULL;i++)
{
if(p—〉number==num)
{
showB(p);
delkey(keyhead);
return p;
}
else
p=p—>next;
}
delkey(keyhead);
return NULL;
}
}
}
reader *S_reader(reader *rhead,longnum)
{
reader *temp=rhead—〉next;
if(temp==NULL
55、)
{
printf("\n文件中沒有數(shù)據(jù)導(dǎo)入,請檢查修復(fù)系統(tǒng)!”);
return NULL;
}
else
{
while(temp)
{
if(temp—>number==num)
return temp;
else
temp=temp—>next;
}
return temp;
}
}
顯示圖書及讀者信息showing.cpp
#include"library.h"
voidshowR(reader *tr,book *bhead)
{
int i;
book *p;
printf("\n
56、 ╔════════╗");
printf(”\n╔══════════╣讀者信息╠══════════╗”);
printf("\n║╚════════╝║");
printf("\n╠══════╦═════╦═══╦════╦════╦═══╣");
printf("\n║借閱證號(hào)║姓名║性別║剩余可借║已借本數(shù)║權(quán)限║");
printf("\n╠══════╬═════╬═══╬════╬════╬═══╣");
printf(”\n║%12d║%10s║%6s║%8d║%8d║%6s║",tr->number,tr—>name,sc(tr—〉sex),tr-〉re
57、sidue,10-tr->residue,lc(tr-〉limit));
printf("\n╚══════╩═════╩═══╩════╩════╩═══╝");
printf("\n 以下為所借書籍信息:\n");
for(i=0;i<10;i++)
{
if(tr-〉borrowed[i][0]==0)
continue;
else
{
printf(”\n %d”,tr->borrowed[i][0]);
p=S_number(tr->borrowed[i][0],bhead);
printf("\n┌───
58、─┬──────┬───────┬────┬───────┬────┬────┐”);
printf("\n│書本編號(hào)│書籍名稱│出版社名稱│出版時(shí)間│作者│借書日期│可借時(shí)間│");
printf(”\n├────┼──────┼───────┼────┼───────┼────┼────┤");
printf(”\n│%8d│%12s│%14s│%8d│%14s│%8d│ 2個(gè)月│”,p—〉number,p—>name,p—〉press,p-〉presstime,p->author,tr->borrowed[i][1]);
printf("\n└────┴──────┴──────
59、─┴────┴───────┴────┴────┘\n”);
}
}
}
voidshowB(book *p)
{
printf(”\n┌────┬──────┬───────┬────┬───────┬──┬──┐");
printf("\n│書本編號(hào)│書籍名稱│出版社名稱│出版時(shí)間│作者│共計(jì)│可借│");
printf("\n├────┼──────┼───────┼────┼───────┼──┼──┤”);
printf(”\n│%8d│%12s│%14s│%8d│%14s│%4d│%4d│”,p->number,p—>name,p—>press,p—〉pr
60、esstime,p-〉author,p—>total,p-〉exist);
printf("\n└────┴──────┴───────┴────┴───────┴──┴──┘\n");
}
char *sc(char p)
{
if(p==’F||p==’f’)
return "女";
else
return "男";
}
char *lc(int i)
{
if(i==1)
return "管理員";
else
return ”讀者”;
}
菜單menu。cpp
#include "library.h”
void style()
61、{
system("mode con cols=90 lines=30");
system(”color 0f");
system("cls");
}
voidintpsd(char *psd)
{
int i=0; char c;
while((c=getch())!=13)
{
if (c!=’\b&&c!=’\t&&i〈20)
{
psd[i]=c;
putchar(*’);
i++;
}
if(c==’\b’&&i〉0)
{
printf("\b \b");
i——;
}
}
psd[i]=’\0;
return;
62、}
void menu(book *Bhead,reader *Rhead)
{
reader *tempr;
style();
charm;int i;
while(1)
{
printf("\n\t ┏━━━━━━━━━━┓ ");
printf("\n\t◢━━━━━━━━━━━┫長安大學(xué)圖書館┣━━━━━━━━━━◣”);
printf(”\n\t┃┗━━━━━━━━━━┛┃”);
printf("\n\t┃┏━━━━━━━━┓┃”);
printf("\n\t┃┃
63、┃┃");
printf(”\n\t┃┃┃┃");
printf("\n\t┃┃ 1﹑登陸┃┃");
printf("\n\t┃┃┃┃");
printf("\n\t┃┃ 2﹑注冊┃┃”);
printf(”\n\t┃┃┃┃");
printf(”\n\t┃┃┃┃”);
printf(”\n\t┃┃┃┃");
printf(”\n\t┃┗━━━━━━━━┛━〉按任意鍵退出〈━┃”);
printf("\n\t◥━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◤\n”);
fflush(stdin);
m=getch();
if(m==
64、’2’)
{
char message[] = "\n正在進(jìn)入請稍候.... ";
for(i=0;i〈strlen(message);i++)
{
printf(”%c”,message[i]);
Sleep(50);
}
system(”cls”);
reg(Rhead);
}
else
if(m==’1)
{
char message[] = "\n正在進(jìn)入請稍候...。 ";
for(i=0;i
65、 }
system(”cls”);
tempr=login(Rhead,Bhead);
if(tempr==NULL) continue;
menu2(tempr,Rhead,Bhead);
}
else
{
system("cls”);
Rsave(Rhead,Bhead);
Bsave(Bhead);
exit(0);
}
}
}
void menu2(reader *temp,reader *rhead,book *bhead)
{
style();
char i;
getch();
system(”cls");
while(1)
66、
{
printf("\n ┏━━━━━━━━┓ ");
printf(”\n◢━━━━━━━━━━━┫圖書館菜單┣━━━━━━━━━━━◣");
printf(”\n┃┗━━━━━━━━┛┃”);
printf("\n┃┏━━━━━━━━┓┃");
printf("\n┃┃請選擇您的操作: ┃┃”);
printf(”\n┃┃┃┃");
printf(”\n┃┃ 1﹑借書┃┃”);
printf("\n┃┃ 2﹑還書┃┃”);
printf("\n┃┃ 3﹑個(gè)人信息┃┃");
printf(”\n┃┃ 4﹑返回上級(jí)┃┃");
printf(”\n┃┃ 5﹑退出系統(tǒng)┃┃");
if(temp—>limit==1) printf(”\n┃┃ 6﹑入庫┃┃”);else ;
printf("\n┃┗━━━━━━━━┛┃”);
printf("\n◥━━━━━━━━━━━━━━━━━