图书馆系统.docx
《图书馆系统.docx》由会员分享,可在线阅读,更多相关《图书馆系统.docx(13页珍藏版)》请在冰豆网上搜索。
![图书馆系统.docx](https://file1.bdocx.com/fileroot1/2022-11/16/e541df46-9aed-4f16-9cef-42f595faba8c/e541df46-9aed-4f16-9cef-42f595faba8c1.gif)
图书馆系统
目录
一.问题描述································
二.基本要求·······························
三.算法思想································
四.数据结构·································
五.源程序代码····································
六.测试结果····································
七.流程图····································
八.实验总结····································
一.问题描述
小型图书管理系统
创建一个图书管理系统,可以进行图书信息录入,图书信息查询,所有图书信息浏览,图书信息修改,图书信息删除,退出系统等操作。
二.基本要求
(1)所有信息存储在一个带头结点的单向链表中,每个结点存储一条图书记录,即结构体(book),其中各域为:
书名、作者、出版社、定价、ISBN,以及指针域。
(2)系统初始时图书记录为空,由用户录入相关的信息,进行插入,查找,删除等等操作。
(3)如输入有错,给出错误提示。
三.算法思想
根据实验要求,该系统需要设置6个选项,分别为图书信息的录入,浏览,查询,修改,删除和退出系统。
首先建立单链表,节点存储图书的属性,在用模块化的思维方式编写程序,要哦来过到if,break等语法知识。
四.数据结构
基本抽象数据类型:
建立线性表的链式存储结构:
你用链式存储结构建立一单向循环链表!
typedefstruct
{
charauthor[10];
charname[20];
charpub[20];
floatprice;
charISBN[10];
}DataType;
typedefstructnode
{
DataTypedata;
structnode*next;
}Book;
voidListinitiate(Book**head)
{
*head=(Book*)malloc(sizeof(Book));
(*head)->next=NULL;
}
五.源程序代码
#include
#include
#include
#include
typedefstruct
{
charauthor[10];
charname[20];
charpub[20];
floatprice;
charISBN[10];
}DataType;
typedefstructnode
{
DataTypedata;
structnode*next;
}Book;
voidListinitiate(Book**head)
{
*head=(Book*)malloc(sizeof(Book));
(*head)->next=NULL;
}
intluru(Book*head)阿
{
Book*p,*s;
chartag='Y';
p=head;
while(p->next!
=NULL)
{
p=p->next;
}
while(tag=='Y'||tag=='y')
{
s=(Book*)malloc(sizeof(Book));
printf("请输入图书的名称:
\n");
scanf("%s",s->data.name);
printf("请输入图书的作者:
\n");
scanf("%s",&s->data.author);
printf("请输入图书的出版社:
\n");
scanf("%s",&s->data.pub);
printf("请输入图书的价格:
\n");
scanf("%f",&s->data.price);
printf("请输入图书的ISBN:
\n");
scanf("%s",&s->data.ISBN);
fflush(stdin);
s->next=NULL;
p->next=s;
p=s;
printf("------------添加图书信息成功!
--------------\n");
printf("-------还继续添加图书信息吗?
YORN-----------\n");
scanf("%c",&tag);
printf("\n");
if(tag=='Y'||tag=='y')continue;
elseif(tag=='N'||tag=='n')break;
}
return1;
}
intchaxun(Book*head)
{
Book*p;
inttag=0;
charnam[20];
printf("请输入您想查找的图书名称!
");
scanf("%s",nam);
for(p=head;p!
=NULL;p=p->next)
{
if(strcmp(p->data.name,nam)==0)
{
printf("图书的相关信息如下:
\n");
printf("-----图书的名称为:
%s\n",p->data.name);
printf("-----图书的作者为:
%s\n",p->data.author);
printf("-----图书的出版社为:
%s\n",p->data.pub);
printf("-----图书的价格为:
%.2f\n",p->data.price);
printf("-----图书的ISBN为:
%s\n",p->data.ISBN);
tag=1;
}
}
if(tag==0)
{
printf("没有您查找的图书的相关信息!
\n");
}
return1;
}
intliuluan(Book*head)
{
Book*p;
p=head;
while(p->next!
=NULL)
{
p=p->next;
printf("图书的相关信息如下:
\n");
printf("-----图书的名称为:
%s\n",p->data.name);
printf("-----图书的作者为:
%s\n",p->data.author);
printf("-----图书的出版社为:
%s\n",p->data.pub);
printf("-----图书的价格为:
%.2f\n",p->data.price);
printf("-----图书的ISBN为:
%s\n",p->data.ISBN);
}
return1;
}
intchange(Book*head)
{
Book*p;
charnam[20];
printf("请输入要修改的图书的名称!
");
scanf("%s",nam);
for(p=head;p!
=NULL;p=p->next)
{
if(strcmp(p->data.name,nam)==0)
{
printf("请输入图书的新名称为:
");
scanf("%s",p->data.name);
printf("请输入图书的新作者为:
");
scanf("%s",p->data.author);
printf("请输入图书的新出版社为:
");
scanf("%s",p->data.pub);
printf("请输入图书的新价格为:
");
scanf("%f",&p->data.price);
printf("请输入图书的ISBN为:
");
scanf("%s",p->data.ISBN);
}
}
return1;
}
intdel(Book*p0)
{
charnam[20];
intflag=1;
Book*p;
p=p0;
printf("请输入要删除的书名:
\n");
scanf("%s",&nam);
while(p!
=NULL)
{
if(strcmp(p->data.name,nam)==0)
{
p0->next=p->next;
free(p);
printf("\t该书资料已删除\n");
break;
}
p0=p;
p=p->next;
}
return1;
}
voidcaidan()
{
printf("====================================================\n");
printf("欢迎进入图书馆管理系统\n");
printf("[1]图书信息录入\n");
printf("[2]图书信息浏览\n");
printf("[3]图书信息查询\n");
printf("[4]图书信息修改\n");
printf("[5]图书信息删除\n");
printf("[6]退出系统\n");
printf("请选择:
");
fflush(stdin);
}
intmain()
{
Book*head;
charchoice;
Listinitiate(&head);
for(;;)
{
caidan();
scanf("%c",&choice);
if(choice=='1'){luru(head);}
elseif(choice=='2'){liuluan(head);}
elseif(choice=='3'){chaxun(head);}
elseif(choice=='4'){change(head);}
elseif(choice=='5'){del(head);}
elseif(choice=='6')
{
printf("====================================================\n");
printf("\n感谢使用图书管理系统!
\n");break;
}
else
{
printf("=================输入错误,请重新输入!
====================\n");
}
}
}
六.测试结果
1.录入信息
2.浏览信息
3.信息查询
4.修改信息
5.浏览信息
6.删除信息
7.浏览信息
七.流程图
八.实验总结
试验中遇到了很多问题,使我明白了自己的很多不足之处,让我意识到了知识是在平时的积累中产生的,在选择操作时,对很多语法知识大多很模糊,但最终通过各种途径还是解决了,特别是容易忽略的=和==的区别,尤其要注意。
经过本次的学习,使我对链表的存储结构和应用能力有了显著的提高,对fflush(stdin)的用法有了比较清晰的认知。