# include & ltstdio.h & gt
# include & ltmalloc.h & gt
# include & ltconio.h & gt
# include & ltstring.h & gt
# include & ltstdlib.h & gt
#定義LEN sizeof(結構書目)
# define len 2 sizeof(struct member list)
#定義LEN3 sizeof(結構讀取器)
Typedef結構讀取器//借用信息結構
{
char name[30];//借款人姓名
結構讀取器* next2
}讀者;
//圖書信息結構
typedef結構書單
{
字符編號[20];//圖書編號
char name[30];//書名
char關註點[50];//按下
char date[20];//出版日期
char作者[20];//作者
int頁面;//頁面
int價格;//價格
信息;//剩余圖書數量
讀者* a;//借款人
struct booklist * next
}書;
void creat list();//創建新的圖書信息
作廢打印(書*頭);//打印圖書信息
作廢保存(書*頭);//存儲圖書信息
void AddBook();//添加圖書信息
void del book();//刪除圖書信息
書*讀();//閱讀書籍信息
void manager();//管理員操作
void book consult();//圖書查詢
int Borrow();//借書
int Return();//還書
書*排序(書*頭);//圖書信息按書號排序。
void信息();//系統信息
Book *head=NULL,*p1=NULL,* p2 = NULL
//創建新的圖書信息
void creatlist()
{
int i,n;
Printf("要創建的圖書數量");
scanf("%d ",& ampn);
p2 = head =(Book *)malloc(LEN);//創建壹個有頭節點的鏈表
p2->;a=(讀者*)馬洛克(EN3);
p2->;a-& gt;next2 = NULL
p2->;next = NULL
Printf("請輸入書的信息:\ n ");
for(I = 1;我& lt= n;i++)
{
p 1 =(Book *)malloc(LEN);
printf(" ISBN:");scanf("%s ",p 1->;num);
printf(" Title:");scanf("%s ",p 1->;姓名);
printf(" publisher:");scanf("%s ",p 1->;關註);
Printf("出版日期:");scanf("%s ",p 1->;日期);
Printf("作者:");scanf("%s ",p 1->;作者);
Printf("書中頁數:");scanf("%d ",& ampp 1->;頁面);
Printf("書價(元):");scanf("%d ",& ampp 1->;價格);
p 1->;a=(讀者*)馬洛克(EN3);
p 1->;a-& gt;next2 = NULL
p 1->;信息= 10;
p 1->;next = NULL
p2->;next = p 1;
p2 = p 1;
如果(我& ltN) printf("下本書:\ n ");
}
head=sort(頭);
保存(頭);
打印(頭);
}
//打印圖書信息
作廢打印(書*頭)
{
Book * p = NULL
reader * p0 = NULL
p = head-& gt;接下來;
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
而(p!=空)
{
Printf("書號:% s \ n書名:% s \ n出版商:% s \ n出版日期:% s \ n作者:% s \ n頁數(頁數):% d \ n圖書價格(元):% d \ n剩余數量:% d \ n ",頁碼,P-& gt;姓名,p-& gt;關心,p-& gt;日期,p-& gt;作者,p-& gt;第頁,p-& gt;價格,p-& gt;信息);
Printf("借書的人:");
如果(p->;a-& gt;Next2 = = null) printf (" -無借書人!");
其他
{
for(P0 = p-& gt;a-& gt;next2p0!= NULLp0=p0->下壹步2)
{
printf("%s ",P0-& gt;姓名);
}
}
p = p-& gt;接下來;/* p向後移動壹個節點*/
printf(" \ n ");
printf(" \ n ");
}
}
//圖書信息按書號排序。
書籍*排序(書籍*標題)
{
Book *p1=NULL,*p2=NULL,*p3=NULL,*min=NULL,*min2=NULL,* head 2 = head-& gt;接下來;
p 1 = head 2;
while(p 1->;下壹個!=空)
{
min = p2 = p 1;/*將第壹個節點作為最小值*/
而(p2->下壹個!=空)
{
if(strcmp(min-& gt;num,p2->下壹個-& gt;num)>0) /*第壹個節點和下壹個節點之間的比較*/
{
min2 = p2
min = p2-& gt;接下來;
}
p2 = p2-& gt;接下來;
}
如果(min!=p1)
{
min 2->;next = min-& gt;接下來;/*刪除最小的節點*/
min->;next = p 1;/*插入最小節點*/
if(p 1 = = head 2)head 2 = min;
否則P3->;next = min/*p3是min之前的節點指針*/
p3 =最小值;
}
其他
{
P3 = p 1;
p 1 = p 1->;接下來;
}
}
head->;next = head2
返回(頭);
}
//存儲圖書信息
作廢保存(書*頭)
{
FILE *fp,* fp2
Book * p = NULL
reader * q = NULL
Fp=fopen("圖書信息。txt”、“WB”);//printf("無法打開文件!\ n ");
Fp2=fopen("借閱信息。txt”、“WB”);//printf("無法打開文件!\ n ");
p =頭部;
而(p!=空)
{
fwrite(p,LEN,1,FP);/*逐節點寫入文件*/
for(q = p-& gt;a;q!= NULLq = q-& gt;下壹步2)
{fwrite(q,LEN3,1,fp2);}
p = p-& gt;接下來;
}
fclose(FP);
fclose(fp2);
}
//添加圖書信息
void AddBook()
{
FILE *fp,* fp2
Book * addbook = NULL
reader * p0 = NULL
Fp=fopen("圖書信息。txt”、“ab”);//通過追加打開文件
Fp2=fopen("出借信息。txt”、“ab”);
addbook =(Book *)malloc(LEN);
Printf("輸入圖書信息:\ n ");
printf(" ISBN:");scanf("%s ",addbook-& gt;num);
printf(" Title:");scanf("%s ",addbook-& gt;姓名);
printf(" publisher:");scanf("%s ",addbook-& gt;關註);
Printf("出版日期:");scanf("%s ",addbook-& gt;日期);
Printf("作者:");scanf("%s ",addbook-& gt;作者);
Printf("書中頁數:");scanf("%d ",& ampaddbook-& gt;頁面);
Printf("書價(元):");scanf("%d ",& ampaddbook-& gt;價格);
p0=(讀者*)馬洛克(EN3);
P0->;next2 = NULL
addbook-& gt;a = p0
addbook-& gt;信息= 10;
addbook-& gt;next = NULL
fwrite(addbook,LEN,1,FP);/*塊寫入*/
fwrite(p0,LEN3,1,fp2);
fclose(FP);
fclose(fp2);
}
//閱讀書籍信息
書*讀()
{
FILE *fp,* fp2
Book *p=NULL,*p1=NULL,* head = NULL
reader *p0=NULL,* p2 = NULL
If((fp=fopen("圖書信息。txt "," rb"))==NULL) printf("無法打開文件或文件不存在!\ n ");
If((fp2=fopen("借用信息。txt "," rb"))==NULL) printf("無法打開文件或文件不存在!\ n ");
head =(Book *)malloc(LEN);
fread(head,LEN,1,FP);
p 1 =頭;
p0=(讀者*)馬洛克(EN3);
fread(p0,LEN3,1,fp2);
P0->;next2 = NULL
head->;a = p0
head->;next = NULL
p =(Book *)malloc(LEN);
While (Fread (p,len,1,FP))/*逐節點讀取*/
{
p 1->;next = p;
p 1 = p 1->;接下來;
p0=(讀者*)馬洛克(EN3);
p 1->;a = p0
while(fread(p0,LEN3,1,fp2))
{
如果(P0-& gt;next2==NULL)
{
p2 = p0
p0=(讀者*)馬洛克(EN3);
打破;
}
p2 = p0
p0=(讀者*)馬洛克(EN3);
p2->;next2 = p0
}
免費(P0);
p2->;next2 = NULL
p =(Book *)malloc(LEN);
}
p 1->;next = NULL
免費(p);
fclose(FP);
fclose(fp2);
head=sort(頭);
如果(頭!=NULL)返回(head);
其他
{
Printf("文件是空的!\ n ");
返回0;
}
}
//刪除圖書信息
void DelBook()
{
Book *head=NULL,*p=NULL,* q = NULL
char bookname[30];
head = read();
Printf("輸入要刪除的標題:");
scanf("%s ",圖書名稱);
p =頭部;
而(p!=NULL)/*按名稱查找要刪除的圖書*/
{
if(strcmp(p-& gt;name,bookname)==0)
{
if(p==head)
{
head = head-& gt;接下來;
打破;
}
其他
{
q->;next = p-& gt;接下來;
打破;
}
}
q = p;
p = p-& gt;接下來;
}
保存(頭);
}
//管理員操作
無效管理器()
{
int n,i=0,k = 1;
while(k==1)
{
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
Printf("請選擇您需要的操作\ n ");
Printf(" ◎ 1。創建新書信息\ n ");
Printf(" ◎ 2。插入圖書信息\ n ");
Printf(" ◎ 3。刪除圖書信息\ n ");
Printf(" ◎ 4。閱讀所有書籍信息\ n ");
Printf(" ◎ 5。閱讀指定書籍信息\ n”);
Printf(" ◎ 6。返回父目錄\ n ");
Printf(" ◎ 7。保存並退出\ n ");
Printf("請輸入:");
scanf("%d ",& ampn);
開關(n)
{
案例1:creat list();打破;
案例二:AddBook();打破;
案例三:del book();打破;
案例四:head = read();系統(“CLS”);打印(頭);打破;
案例五:系統(“CLS”);book consult();打破;
情況6:k = 0;打破;
默認:k = 0;打破;
}
}
}
//圖書查詢
無效預訂咨詢()
{
int n,m=1,sign = 0;
Book *p=NULL,*p1=NULL,*p0=NULL,* head = NULL
reader * p2 = NULL
char a[30],b[20],c[20];
head = read();
while(m==1)
{
Printf("請選擇您想要查詢書籍的方式:1。按標題2。按下第三本書。按作者4。退出查詢\ n ");
printf(" input = ");
scanf("%d ",& ampn);
開關(n)
{
Case 1: printf("請輸入標題:");
scanf("%s ",a);
p0 =壓頭;
而(p0!=空)
{
if(strcmp(a,P0-& gt;name)==0)
{
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
Printf("書號:% s \ n書名:% s \ n出版商:% s \ n出版日期:% s \ n作者:% s \ n頁數(頁數):% d \ n圖書價格(元):% d \ n剩余數量:% d \ n ",P0。num,p0->名稱,P0-& gt;關註點,p0->日期,P0-& gt;作者,P0-& gt;第頁,p0->價格,P0-& gt;信息);
Printf("借書的人:");
如果(P0-& gt;a-& gt;Next2 = = null) printf (" -無借書人!\ n ");
其他
{
for(p2 = P0-& gt;a;(p2 = p2-& gt;接下來2)!= NULL)
{printf("%s ",p2-& gt;姓名);}
}
printf(" \ n ");
sign = 1;
p0=p0->接下來;
}
否則P0 = P0-& gt;接下來;
}
If(sign==0) printf("沒有關於這本書的信息。\ n ");
打破;
案例二:printf("請輸入書號:");
scanf("%s ",b);
p0 =壓頭;
而(p0!=空)
{
if(strcmp(b,P0-& gt;num)==0)
{
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
Printf("書號:% s \ n書名:% s \ n出版商:% s \ n出版日期:% s \ n作者:% s \ n頁數(頁數):% d \ n圖書價格(元):% d \ n剩余數量:% d \ n ",P0。num,p0->名稱,P0-& gt;關註點,p0->日期,P0-& gt;作者,P0-& gt;第頁,p0->價格,P0-& gt;信息);
Printf("借書的人:");
如果(P0-& gt;a-& gt;Next2 = = null) printf (" -無借書人!\ n ");
其他
{
for(p2 = P0-& gt;a;(p2 = p2-& gt;接下來2)!= NULL)
{printf("%s ",p2-& gt;姓名);}
}
printf(" \ n ");
打破;
}
否則P0 = P0-& gt;接下來;
}
If(p0==NULL) printf("沒有關於這本書的信息。\ n ");
打破;
案例三:printf("請輸入書的作者:");
scanf("%s ",c);
p0 =壓頭;
而(p0!=空)
{
if(strcmp(c,P0-& gt;作者)==0)
{
打印函數
(“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);
Printf("書號:% s \ n書名:% s \ n出版商:% s \ n出版日期:% s \ n作者:% s \ n圖書頁數(頁數):% d \ n圖書價格(元)% d \ n剩余數量:% d \ n ",P0-。num,p0->名稱,P0-& gt;關註點,p0->日期,P0-& gt;作者,P0-& gt;第頁,p0->價格,P0-& gt;信息);
Printf("借書的人:");
如果(P0-& gt;a-& gt;Next2 = = null) printf (" -無借書人!\ n ");
其他
{
for(p2 = P0-& gt;a;(p2 = p2-& gt;接下來2)!= NULL)
{printf("%s ",p2-& gt;姓名);}
}
printf(" \ n ");
sign = 1;
p0=p0->接下來;
}
否則P0 = P0-& gt;接下來;
}
If(sign==0) printf("沒有關於這本書的信息。\ n ");
打破;
默認值:m = 0;打破;
}
}
}
//借書
int Borrow()
{
char a[30],b[30],c;
書* p0 =空,*頭=空;
reader *p2=NULL,* p3 = NULL
head = read();
Printf("請輸入所借圖書的書號:");
scanf("%s ",a);
P0 = head->;接下來;
而(p0!=空)
{
if((strcmp(a,P0-& gt;num))==0)
{
如果(P0-& gt;信息& gt0)
{
Printf("書在圖書館,可以外借。妳確定要去看看嗎?y '或' n ' \ n ");
c = getchar();
scanf("%c ",& ampc);
if(c=='y ')
{
Printf("請再次輸入您的用戶名:");
scanf("%s ",b);
P3 =(reader *)malloc(EN3);
strcpy(P3-& gt;姓名,b);
如果(P0-& gt;a-& gt;next2==NULL)
{
P0->;a-& gt;next2 = p3
P3->;next2 = NULL
}
其他
{
for(p2 = P0-& gt;a;p2->;next2!= NULLp2 = p2-& gt;next 2);
p2->;next2 = p3
P3->;next2 = NULL
}
-P0->;信息;
保存(頭);
Printf("手術完成後,妳就可以把書拿走了。\ n ");
返回1;
打破;
}
其他
{
返回0;
打破;
}
}
Else printf("抱歉,書不在圖書館。\ n ");返回0;打破;
}
否則P0 = P0-& gt;接下來;
}
if(p0==NULL)
{
Printf("抱歉,沒有這本書。\ n ");
返回0;
}
否則返回2;
}
//還書
int Return()
{
書* p0 =空,*頭=空;
reader *p2=NULL,* p3 = NULL
char c[20],b[30];
head = read();
Printf("請輸入要歸還的書的書號:");
scanf("%s ",& ampc);
P0 = head->;接下來;
而(p0!=空)
{
if((strcmp(c,P0-& gt;num))==0)
{
Printf("請輸入您的用戶名:");
scanf("%s ",& ampb);
如果(P0-& gt;a-& gt;Next2==NULL) {printf("這本書不是妳借的!\ n ");打破;}
其他
{
p3=p0->a;
p2 = P3->;next2
而(p2!=空)
{
if(strcmp(p2-& gt;name,b)==0)
{
如果(p2->next 2 = = NULL){ P3-& gt;next2 = NULL免費(p2);打破;}
其他
{
P3->;next 2 = p2-& gt;next2
免費(p2);
打破;
}
}
其他
{
p3 = p2
p2 = p2-& gt;next2
}
}
If(p2==NULL) printf("這本書不是妳借的!\ n ");
}
++p0->信息;
保存(頭);
Printf("書已歸還圖書館,操作完成。\ n ");
返回1;
打破;
}
否則P0 = P0-& gt;接下來;
}
if(p0==NULL)
{
Printf("沒有這樣的書。\ n ");
返回0;
}
否則返回2;
}
//借閱信息
無效信息()
{
printf(" \\\\\\\\\" n ");
Printf("※歡迎使用我們的圖書管理系統!※以下是對這個系統的描述:\ n”);
Printf("※本系統主要功能是管理圖書,可以新建、插入、刪除和※\n "圖書信息);
printf("※query;在操作上,主要通過阿拉伯數字選擇相應的菜單功能,選擇時‘y’表示‘是’);
printf(“※用‘n’表示‘不是’。操作的時候會有相應的操作提示。※n ");
printf(" \\\\\\\\\" n ");
}
主()
{
int n,k = 1;
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
printf(" \ n \ n ");
Printf("歡迎使用我們的圖書館管理系統!\ n ");
printf(" \ n \ n ");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
while(k==1)
{
Printf("請選擇您的操作:1。管理員操作2。系統信息3。退出系統\ n ");
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");
Printf("妳的選擇是");
scanf("%d ",& ampn);
系統(“CLS”);
開關(n)
{
案例1:經理();打破;
情況二:信息();打破;
默認:printf ("++++++++++++歡迎再次使用我們的系統!++ ++++++++++++++++++ ++ n ");k = 0;打破;
}
}
}