# include & ltstring.h & gt
# include & ltconio.h & gt
# include & ltstdlib.h & gt
#定義N sizeof(結構書)
# define PT " %-5d % 10s % 6s % 6s % 8s % 3d \ n ",p-& gt;num,p->姓名,p-& gt;其中,p-& gt;作者,p-& gt;pub,p-& gt;數數
結構圖書/*圖書信息*/
{
int num/* ISBN */
字符名稱[10];/*標題*/
char where[10];/*在圖書館*/
char作者[15];/*作者*/
char pub[20];/*按*/
int計數;/*數量*/
struct book * next
};
/*輸出模塊*/
無效打印(結構書*p0)
{
結構書* p;
p = P0-& gt;接下來;
Printf ("\ n \ n \ t \ t圖書信息表");
printf(" \ n \ n書號-書名-圖書館-作者-出版社-數量\ n ");
而(p!=空)
{
printf(PT);
p = p-& gt;接下來;
}
getch();
}
/*輸入模塊*/
結構書*創建()
{
struct book *head,*p1,* p2
int I = 0;
head = p2 =(struct book *)malloc(N);
head->;next = NULL
printf(" \ n \ n \ t \ t輸入圖書信息");
printf(" \ n \ t-");
while(1)
{ p 1 =(struct book *)malloc(N);
printf(" \ n請輸入書號(書號以0結尾):");
scanf("%d ",& ampp 1->;num);
if(p 1->;num!=0)
{
printf(" \ n \ n書名所在書庫和作者出版社的圖書數量\ n ");
scanf("%s%s%s%s%d ",p 1-& gt;名稱,p 1->;其中,p 1->;作者,p 1->;酒吧& ampp 1->;計數);
p2->;next = p 1;
p2 = p 1;
i++;
}
其他
打破;
}
p2->;next = NULL
免費(p 1);
printf(" \ n \ t \ t-");
Printf("\n\t\t已輸入%d本書",I);
getch();
回程頭;
}
/*查找模塊*/
無效查找(結構書*p0)
{
字符名稱[10];
int flag = 1;
結構書* p;
p = P0-& gt;接下來;
Printf("請輸入妳要找的書的書名:\ n ");
scanf("%s ",名稱);
for(p = P0;p;p = p-& gt;下壹個)
if(strcmp(p-& gt;name,name)==0)
{
printf(" \ n \ n書號-書名-圖書館-作者-出版社-數量\ n ");
printf(PT);
flag = 0;
打破;
}
if(flag)printf(" \ n沒有關於這本書的信息\ n ");
getch();
}
/*刪除模塊*/
void del(結構書*p0)
{
字符名稱[10];
int flag = 1;
結構書* p;
p = p0
Printf("請輸入要刪除的標題:\ n ");
scanf("%s ",名稱);
而(p!=空)
{
if(strcmp(p-& gt;name,name)==0)
{
P0->;next = p-& gt;接下來;/*在後繼節點連接到前趨節點之後*/
免費(p);
printf(" \ t這本書已被刪除。");
flag = 0;
打破;
}
P0 = p;
p = p-& gt;接下來;
}
if(flag)printf(" \ n \ t沒有關於這本書的信息。);
getch();
}
/*添加模塊*/
空插入(結構書*p0)
{
結構書* p;
p =(struct book *)malloc(N);
while(1)
{
printf(" \ n請輸入要添加的書號(書號為0退出):");
scanf("%d ",& ampp->;num);
如果(p->;num!=0)
{
如果(P0-& gt;下壹個!= NULL & amp& ampP0->;下壹個-& gt;num = = p-& gt;Num) /*發現重復的數字*/
{
p = p-& gt;接下來;
免費(p);
printf(" \ t這本書已經存在");
}
其他
{ printf(" \ n \ n書庫中的圖書數量以及書名所在的作者出版社\ n ");
scanf("%s%s%s%s%d ",p-& gt;姓名,p-& gt;其中,p-& gt;作者,p-& gt;酒吧& ampp->;計數);
p->;next = P0-& gt;接下來;
P0->;next = p;
printf(" \ t成功插入。);
}
}
其他
打破;
}
getch();
}
/*修改模塊*/
無效修改(結構書*p0)
{
字符名稱[10];
int flag = 1;
int選擇;
結構書* p;
p = P0-& gt;接下來;
Printf("請輸入要修改的書名:\ n ");
scanf("%s ",名稱);
而(p!= NULL & amp& ampflag==1)
{
if(strcmp(p-& gt;name,name)==0)
{
printf(" \ n \ t請選擇要修改的項目:");
Printf("\n\t 1。修改書號\ n”);
Printf("\n\t 2。修改書所在的圖書館\ n ");
Printf("\n\t 3。修改圖書作者\ n”);
Printf("\n\t 4。修改圖書出版社\ n”);
Printf("\n\t 5。修改圖書庫存\ n ");
scanf("%d ",& amp選擇);
開關(選擇)
{
案例1:{ printf(" \ n請輸入新的書號:");
scanf("%d ",p-& gt;num);打破;
}
案例2:{ printf(" \ n請輸入壹個新庫:");
scanf("%s ",p-& gt;哪裏);打破;
}
案例3:{ printf(" \ n請輸入新書作者:");
scanf("%s ",p-& gt;作者);打破;
}
案例4:{ printf(" \ n請輸入新書出版商:");
scanf("%s ",p-& gt;pub);打破;
}
案例5:{ printf(" \ n請輸入新書庫存:");
scanf("%d ",p-& gt;計數);打破;
}
}
printf(" \ n \ t該項已被成功修改。\ n \新書信息:“);
printf(" \ n \ n書號-書名-圖書館-作者-出版社-數量\ n ");
printf(PT);
flag = 0;
}
P0 = p;
p = P0-& gt;接下來;
}
if(flag)printf(" \ n \ t沒有關於這本書的信息。);
getch();
}
/*讀取文件*/
struct book *read_file()
{
int I = 0;
struct book *p,*p1,* head = NULL
FILE * fp
if((fp=fopen("library.txt "," Rb ")= = NULL)
{ printf(" \ n \ n \ n \ n \ t * * * * * *庫文件不存在,請創建!**********");
getch();
返回NULL
}
head =(struct book *)malloc(N);
p 1 =頭;
head->;next = NULL
printf(" \ n現有圖書信息:");
printf(" \ n \ n書號-書名-圖書館-作者-出版社-數量\ n ");
而(!feof(fp))
{
p =(struct book *)malloc(N);/*開辟空間存儲獲得的信息*/
while(fscanf(fp," %d%s%s%s%s%d ",& ampp->;num,p->姓名,p-& gt;其中,p-& gt;作者,p-& gt;酒吧& ampp->;數數)!=EOF)
{
printf(PT);
i++;
}
p 1->;next = p;
p 1 = p;
}
p 1->;next = NULL
fclose(FP);
Printf("\n ***種%d圖書信息",I);
printf(" \ n \ n \ n可以正確讀取文件中的信息。按任意鍵進入主菜單。”);
getch();
返回(頭);
}
/*保存文件*/
無效保存(結構書*頭)
{
FILE * fp
結構書* p;
fp=fopen("library.txt "," WB ");/*以只寫方式打開二進制文件*/
If(fp==NULL) /*無法打開文件*/
{
printf(" \ n = = = = = & gt;無法打開文件!\ n ");
getch();
返回;
}
其他
for(p = head-& gt;接下來;p!= NULLp = p-& gt;下壹個)
fprintf(fp," %d %s %s %s %s %d\n ",p-& gt;num,p->姓名,p-& gt;其中,p-& gt;作者,p-& gt;pub,p-& gt;計數);
fclose(FP);
printf(" \ n \ t文件保存成功!\ n ");
}
void main()
{
struct book * head = NULL
int choice = 1;
head = read _ file();
if(head==NULL)
{
printf(" \ n \ t \ t * * * * * * * *);
getch();
head = creat();
}
做
{
系統(“cls”);
printf(" \ t \ t-Welcome-\ n ");
printf(" \ n \ n \ t歡迎,圖書管理員。\ n ");
printf(" \ n \ n \ n \ n ");
printf(" \ n \ t請選擇:");
Printf("\n\t 1。查詢圖書信息\ n ");
Printf("\n\t 2。修改圖書信息\ n ");
Printf("\n\t 3。添加圖書信息\ n”);
Printf("\n\t 4。刪除圖書信息\ n ");
Printf("\n\t 5。顯示所有圖書信息\ n ");
Printf("\n\t 0。退出系統\ n ");
scanf("%d ",& amp選擇);
開關(選擇)
{
案例1:查找(頭);打破;
情況二:修改(頭);打破;
案例三:插入(頭);打破;
案例四:德爾(頭);打破;
案例五:打印(頭);打破;
案例0:系統(“cls”);
printf(" \ n \ n \ n \ n \ t感謝您的使用,再見!\ n \ n ");
打破;
}
}while(選擇!=0);
保存(頭);
}