图书管理系统数据结构.docx
《图书管理系统数据结构.docx》由会员分享,可在线阅读,更多相关《图书管理系统数据结构.docx(6页珍藏版)》请在冰豆网上搜索。
![图书管理系统数据结构.docx](https://file1.bdocx.com/fileroot1/2023-1/23/323c3ed4-463a-4080-94d6-1ee1267980aa/323c3ed4-463a-4080-94d6-1ee1267980aa1.gif)
图书管理系统数据结构
structbook/*图书信息*/
{
intnum;/*书号*/
charname[10];/*书名*/
charwhere[10];/*所在书库*/
charauthor[15];/*作者*/
charpub[20];/*出版社*/
intcount;/*数量*/
structbook*next;
};
/*输出模块*/
voidprint(structbook*p0)
{
structbook*p;
p=p0->next;
printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
while(p!
=NULL)
{
printf(PT);
p=p->next;
}
getch();
}
/*输入模块*/
structbook*creat()
{
structbook*head,*p1,*p2;
inti=0;
head=p2=(structbook*)malloc(N);
head->next=NULL;
printf("\n\n\t\t录入图书信息");
printf("\n\t---------------------------------------");
while
(1)
{p1=(structbook*)malloc(N);
printf("\n请输入图书编号(书号为0结束):
");
scanf("%d",&p1->num);
if(p1->num!
=0)
{
printf("\n\n书名所在书库作者出版社图书数量\n");
scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count);
p2->next=p1;
p2=p1;
i++;
}
else
break;
}
p2->next=NULL;
free(p1);
printf("\n\t\t----------------------------------------");
printf("\n\t\t%d种书录入完毕",i);
getch();
returnhead;
}
/*查找模块*/
voidfind(structbook*p0)
{
charname[10];
intflag=1;
structbook*p;
p=p0->next;
printf("请输入要查找的书名:
\n");
scanf("%s",name);
for(p=p0;p;p=p->next)
if(strcmp(p->name,name)==0)
{
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
printf(PT);
flag=0;
break;
}
if(flag)printf("\n暂无此图书信息\n");
getch();
}
/*删除模块*/
voiddel(structbook*p0)
{
charname[10];
intflag=1;
structbook*p;
p=p0;
printf("请输入要删除的书名:
\n");
scanf("%s",name);
while(p!
=NULL)
{
if(strcmp(p->name,name)==0)
{
p0->next=p->next;/*后续节点连接到前驱节点之后*/
free(p);
printf("\t该书资料已删除.");
flag=0;
break;
}
p0=p;
p=p->next;
}
if(flag)printf("\n\t无此图书信息。
");
getch();
}
/*增加模块*/
voidinsert(structbook*p0)
{
structbook*p;
p=(structbook*)malloc(N);
while
(1)
{
printf("\n请输入要增加的图书编号(书号为0退出):
");
scanf("%d",&p->num);
if(p->num!
=0)
{
if(p0->next!
=NULL&&p0->next->num==p->num)/*找到重号*/
{
p=p->next;
free(p);
printf("\t该书已存在");
}
else
{printf("\n\n书名所在书库作者出版社图书数量\n");
scanf("%s%s%s%s%d",p->name,p->where,p->author,p->pub,&p->count);
p->next=p0->next;
p0->next=p;
printf("\t已成功插入.");
}
}
else
break;
}
getch();
}
/*修改模块*/
voidmodify(structbook*p0)
{
charname[10];
intflag=1;
intchoice;
structbook*p;
p=p0->next;
printf("请输入要修改的书名:
\n");
scanf("%s",name);
while(p!
=NULL&&flag==1)
{
if(strcmp(p->name,name)==0)
{
printf("\n\t请选择要修改的项:
");
printf("\n\t1.修改图书编号\n");
printf("\n\t2.修改图书所在书库\n");
printf("\n\t3.修改图书作者\n");
printf("\n\t4.修改图书出版社\n");
printf("\n\t5.修改图书库存量\n");
scanf("%d",&choice);
switch(choice)
{
case1:
{printf("\n请输入新的图书编号:
");
scanf("%d",p->num);break;
}
case2:
{printf("\n请输入新的图书书库:
");
scanf("%s",p->where);break;
}
case3:
{printf("\n请输入新的图书作者:
");
scanf("%s",p->author);break;
}
case4:
{printf("\n请输入新的图书出版社:
");
scanf("%s",p->pub);break;
}
case5:
{printf("\n请输入新的图书库存量:
");
scanf("%d",p->count);break;
}
}
printf("\n\t该项已成功修改。
\n\t新的图书信息:
");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
printf(PT);
flag=0;
}
p0=p;
p=p0->next;
}
if(flag)printf("\n\t暂无此图书信息。
");
getch();
}
/*读文件*/
structbook*read_file()
{
inti=0;
structbook*p,*p1,*head=NULL;
FILE*fp;
if((fp=fopen("library.txt","rb"))==NULL)
{printf("\n\n\n\n\n\t********库文件不存在,请创建!
**********");
getch();
returnNULL;
}
head=(structbook*)malloc(N);
p1=head;
head->next=NULL;
printf("\n已有图书信息:
");
printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n");
while(!
feof(fp))
{
p=(structbook*)malloc(N);/*开辟空间以存放的取得信息*/
while(fscanf(fp,"%d%s%s%s%s%d",&p->num,p->name,p->where,p->author,p->pub,&p->count)!
=EOF)
{
printf(PT);
i++;
}
p1->next=p;
p1=p;
}
p1->next=NULL;
fclose(fp);
printf("\n共种%d图书信息",i);
printf("\n\n\n文件中的信息以正确读出。
按任意键进入主菜单。
");
getch();
return(head);
}
/*保存文件*/
voidsave(structbook*head)
{
FILE*fp;
structbook*p;
fp=fopen("library.txt","wb");/*以只写方式打开二进制文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n=====>打开文件失败!
\n");
getch();
return;
}
else
for(p=head->next;p!
=NULL;p=p->next)
fprintf(fp,"%d%s%s%s%s%d\n",p->num,p->name,p->where,p->author,p->pub,p->count);
fclose(fp);
printf("\n\t保存文件成功!
\n");
}
voidmain()
{
structbook*head=NULL;
intchoice=1;
head=read_file();
if(head==NULL)
{
printf("\n\t\t**********");
getch();
head=creat();
}
do
{
system("cls");
printf("\t\t----------Welcome---------\n");
printf("\n\n\t欢迎您,图书管理员.\n");
printf("\n\n\n\n\n");
printf("\n\t请选择:
");
printf("\n\t1.查询图书信息\n");
printf("\n\t2.修改图书信息\n");
printf("\n\t3.增加图书信息\n");
printf("\n\t4.删除图书信息\n");
printf("\n\t5.显示所有图书信息\n");
printf("\n\t0.退出系统\n");
scanf("%d",&choice);
switch(choice)
{
case1:
find(head);break;
case2:
modify(head);break;
case3:
insert(head);break;
case4:
del(head);break;
case5:
print(head);break;
case0:
system("cls");
printf("\n\n\n\n\n\t^^^^^^^^^^谢谢使用,再见^^^^^^^^^^!
\n\n");
break;
}
}while(choice!
=0);
save(head);
}