图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
![图书管理系统.docx](https://file1.bdocx.com/fileroot1/2023-1/23/ff3ace69-6fd3-480b-a79d-228ea7b39d25/ff3ace69-6fd3-480b-a79d-228ea7b39d251.gif)
图书管理系统
/*1.简易图书管理系统(线性表、查找、排序)
图书管理系统的设计主要是实现对图书的管理和相关操作。
基本功能如下:
(1)图书信息录入、添加功能:
包括书号(即ISBN号,不可重复)、书名
(多书可重名)、作者、出版社名称、存馆数量、定价等。
(2)图书信息查询功能:
①按书名进行查询。
②按作者名进行查询。
③按出版社进行查询。
(3)排序:
①按书号的升序进行排序;②按作者的升序进行排序,作者相同时按书号的升序再进行排序
(4)图书的修改、删除功能:
①按书号进行图书的修改、删除
②按书名进行图书的修改、删除(同样的书名多于1本书时,再指定具体修改和删除的书号)。
(5)图书借阅、归还功能:
如果一种书的现存量大于0,可以借出,
借出相应数量后改存馆数量;归还时改变该书的存馆数量。
*/
#include
#include
#include
#include
#definemax10//添加图书种类最多为10种
//定义结构点数据信息
typedefstruct
{
intISBN;//书号
charname1[10];//书名
intname2;//作者
charname3[10];//出版社名称
intnum;//存馆数量这个问题有待解决
floatprice;//价格
}ElemType;
//定义双链表结构
typedefstructBook
{
ElemTypedata;
structBook*prior;
structBook*next;
}LinkList;
intListLength(LinkList*L)//求线性表长度,没动
{
LinkList*p=L;intn=0;
while(p->next!
=NULL)
{
n++;
p=p->next;
}
return(n);
}
voidLintlist(LinkList*&L)//初始化双链表
{
L=(LinkList*)malloc(sizeof(LinkList));
L->next=L->prior=NULL;
}
voidAddList(LinkList*&L)//图书信息的添加
{
LinkList*p,*q;
LinkList*t=L->next;
p=(LinkList*)malloc(sizeof(LinkList));
intn;
do
{
printf("请输入您要添加图书的信息!
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
scanf("%d%s%d%s%d%f",&p->data.ISBN,p->data.name1,&p->data.name2,p->data.name3,&p->data.num,&p->data.price);
if(t==NULL)//添加第一个
{
p->next=L->next;
p->prior=L;
L->next=p;
printf("图书已成功添加到馆中!
\n");
return;
}
else//不是添加第一个
{
while(t!
=NULL)
{
if(t->data.ISBN==p->data.ISBN)
{
printf("该书号已存在,请确认后重新输入!
\n");
n=1;
break;
}
else
{
n=0;
q=t;
t=t->next;
}
}
}
}while(n==1);
p->next=q->next;
p->prior=q;
q->next=p;
printf("图书已成功添加到馆中!
\n");
printf("\n");
}
voidChaXun1(LinkList*L)//按书名进行查询
{//书名相同只能为一种
charname1[10];
LinkList*s=L->next;
printf("请输入您要查找的书名:
");
scanf("%s",name1);
while(s!
=NULL)
{
if(strcmp(name1,s->data.name1)==0)
{
printf("您查找的书详细信息如下:
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
printf("%d%s%d%s%d%5.0f\n",s->data.ISBN,s->data.name1,s->data.name2,s->data.name3,s->data.num,s->data.price);
printf("\n");
return;
}
else
{
s=s->next;
}
}
if(s==NULL)
{
printf("图书馆中无此种书!
\n");
printf("\n");
}
}
voidChaXun2(LinkList*L)//按作者名进行查询
{//作者相同的可能有多种书
intname;
intn=0;//表示判断是否存在此作者的书
LinkList*s=L->next;
printf("请输入您要查找的作者名:
");
scanf("%d",&name);
printf("您查找的书详细信息如下:
\n");
while(s!
=NULL)
{
if(name==s->data.name2)
{
printf("书号书名作者出版社名称存馆数量定价\n");
printf("%d%s%d%s%d%5.0f\n",s->data.ISBN,s->data.name1,s->data.name2,s->data.name3,s->data.num,s->data.price);
printf("\n");
n=1;
}
s=s->next;
}
if(n==0)
{
printf("图书馆中无与此作者相关的书!
\n");
printf("\n");
}
}
voidChaXun3(LinkList*L)//按出版社进行查询
{//出版社相同的可能有多种书
charname[10];
intn=0;//表示判断是否存在此出版社的书
LinkList*s=L->next;
printf("请输入您要查找的出版社名:
");
scanf("%s",name);
while(s!
=NULL)
{
if(strcmp(name,s->data.name3)==0)
{
printf("您查找的信息如下:
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
printf("%d%s%d%s%d%5.0f\n",s->data.ISBN,s->data.name1,s->data.name2,s->data.name3,s->data.num,s->data.price);
printf("\n");
n=1;
}
s=s->next;
}
if(n==0)
{
printf("图书馆中无与此出版社相关的书!
\n");
printf("\n");
}
}
voidChaXun(LinkList*L)//总的查询
{
if(L->next==NULL)
{
printf("图书馆中没有藏书!
\n");
printf("\n");
return;
}
while
(1)
{
printf("\n");
printf("1、按书名进行查询\n");
printf("2、按作者名进行查询\n");
printf("3、按出版社进行查询\n");
printf("4、返回主菜单\n");
printf("请输入你要进行操作的选择项:
");
intn;
scanf("%d",&n);
switch(n)
{
case1:
ChaXun1(L);break;
case2:
ChaXun2(L);break;
case3:
ChaXun3(L);break;
case4:
return;
default:
printf("您输入有误!
\n");
}
}
}
/*voidBubbleSort(RecTypeR[],intn)
{
inti,j;
RecTypetmp;
for(i=0;i{
for(j=n-1;j>i;j--)
{
if(R[j].key{
tmp=R[j];
R[j]=R[j-1];
R[j-1]=R[j];
}
}
}
}*/
voidPaixu1(LinkList*&L)//按书号的升序进行排序(冒泡算法)
{
inti=0,j=0,p,t=1;
p=ListLength(L);
LinkList*n=L->next,*s;
ElemTypetemp;
LinkList*r=L->next;
while(inext!
=NULL)
{
s=n;
while(jnext!
=NULL)
{
if(s->data.ISBN>s->next->data.ISBN)
{
temp=s->data;
s->data=s->next->data;
s->next->data=temp;
t=0;
}
s=s->next;
j++;
}
while(t!
=0)
{
break;
}
s=L->next;//还原s的初值为L->next,继续循环
j=0;//还原j以便执行大循环
p--;
i++;
}
printf("排序后书显示如下:
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
while(r!
=NULL)
{
printf("%d%s%d%s%d%5.0f\n",r->data.ISBN,r->data.name1,r->data.name2,r->data.name3,r->data.num,r->data.price);
r=r->next;
}
printf("\n");
}
voidPaixu2(LinkList*&L)//按作者的升序进行排序,作者相同时按书号的升序再进行排序
{
inti,j,p,t=1;
p=ListLength(L);
LinkList*n=L->next,*s;
ElemTypetemp;
while(inext!
=NULL)
{
s=n;
while(jnext!
=NULL)
{
if(s->data.name2>s->next->data.name2)
{
temp=s->data;
s->data=s->next->data;
s->next->data=temp;
t=0;
}
else
{
if(s->data.name2==s->next->data.name2)
{
if(s->data.ISBN>s->next->data.ISBN)
{
temp=s->data;
s->data=s->next->data;
s->next->data=temp;
t=0;
}
}
}
s=s->next;
j++;
}
while(t!
=0)
{
break;
}
s=L->next;//还原s的初值为L->next,继续循环
j=0;//还原j以便执行大循环
p--;
i++;
}
LinkList*r=L->next;
printf("排序后显示如下:
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
while(r!
=NULL)
{
printf("%d%s%d%s%d%5.0f\n",r->data.ISBN,r->data.name1,r->data.name2,r->data.name3,r->data.num,r->data.price);
r=r->next;
}
printf("\n");
}
voidPaixu(LinkList*&L)//总的排序
{
if(L->next==NULL)
{
printf("图书馆没有藏书!
\n");
return;
}
while
(1)
{
printf("\n");
printf("1、按书号升序进行排序\n");
printf("2、按作者进行排序(作者名相同按书号进行排序)\n");
printf("3、返回主菜单\n");
printf("请输入您要进行操作的选项号:
");
intn;
scanf("%d",&n);
switch(n)
{
case1:
Paixu1(L);break;
case2:
Paixu2(L);break;
case3:
return;
default:
printf("您的输入有误!
\n");
}
}
}
voidXiuGai(LinkList*&L)//按书号进行图书的修改
{
intn;
if(L->next==NULL)
{
printf("图书馆中没有藏书!
\n");
printf("\n");
return;
}
LinkList*s=L->next;
printf("请输入您要查找的书号:
");
scanf("%d",&n);
while(s!
=NULL)
{
if(n==s->data.ISBN)
{
printf("您查找的书详细信息如下:
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
printf("%d%s%d%s%d%5.0f\n",s->data.ISBN,s->data.name1,s->data.name2,s->data.name3,s->data.num,s->data.price);
printf("请选择您要修改的项(1、书号2、书名3、作者4、出版社名称5、存馆数量6、定价7、全部修改):
");
intn;
scanf("%d",&n);
switch(n)
{
case1:
{
LinkList*t=L->next;
intj;
intP;
do
{
printf("请输入新的书号:
");
scanf("%d",&P);
while(t!
=NULL)
{
if(t->data.ISBN==P)
{
printf("该书号已存在,请确认后重新输入!
\n");
j=1;
break;
}
else
{
j=0;
t=t->next;
}
}
}while(j==1);
s->data.ISBN=P;
printf("修改成功!
\n");
printf("\n");
break;
}
case2:
printf("请输入新的书名:
");
scanf("%s",s->data.name1);
printf("修改成功!
\n");
printf("\n");
break;
case3:
printf("请输入您要新的作者:
");
scanf("%d",&s->data.name2);
printf("修改成功!
\n");
printf("\n");
break;
case4:
printf("请输入您要新的出版社:
");
scanf("%s",s->data.name3);
printf("修改成功!
\n");
printf("\n");
break;
case5:
printf("请输入您要新的存馆数量:
");
scanf("%d",&s->data.num);
printf("修改成功!
\n");
printf("\n");
break;
case6:
printf("请输入新的价格:
");
scanf("%f",&s->data.price);
printf("修改成功!
\n");
printf("\n");
break;
case7:
printf("书号书名作者出版社名称存馆数量定价\n");
scanf("%d%s%d%s%d%f",&s->data.ISBN,s->data.name1,&s->data.name2,s->data.name3,&s->data.num,&s->data.price);
printf("修改成功!
\n");
printf("\n");
break;
case8:
return;
default:
printf("您的输入有误!
\n");
}
return;
}
else
{
s=s->next;
}
}
if(s==NULL)
{
printf("图书馆中无此种书!
\n");
printf("\n");
}
}
voidShanChu(LinkList*&L)//按书号进行图书的删除
{
if(L->next==NULL)
{
printf("图书馆无藏书!
\n");
printf("\n");
return;
}
intn;
LinkList*s=L;
printf("请输入您要删除的书号:
");
scanf("%d",&n);
for(inti=0;i{
s=s->next;
if(n==s->data.ISBN)
{
printf("您即将删除书详细信息如下:
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
printf("%d%s%d%s%d%5.0f\n",s->data.ISBN,s->data.name1,s->data.name2,s->data.name3,s->data.num,s->data.price);
printf("确认删除请输入1、否请输入2:
");
intm;
scanf("%d",&m);
if(m==1)
{
if(ListLength(L)==1)//该结点为头结点
{
L->next=NULL;
free(s);
printf("该书已删除!
\n");
printf("\n");
return;
}
else//不为头结点
{
if(i{
s->prior->next=s->next;
s->next->prior=s->prior;
free(s);
printf("该书已删除!
\n");
printf("\n");
return;
}
else
{
if(i==ListLength(L)-1)
{
s->prior->next=NULL;
free(s);
printf("该书已删除!
\n");
printf("\n");
return;
}
}
}
}
if(m==2)
{
printf("删除操作已取消!
\n");
printf("\n");
return;
}
}
}
if(i==ListLength(L))
{
printf("图书馆中无此种书!
\n");
printf("\n");
}
}
voidJieYue(LinkList*&L)//借阅图书,以书名借阅
{
charname1[10];
if(L->next==NULL)
{
printf("图书馆中没有藏书!
\n");
printf("\n");
return;
}
LinkList*s=L->next;
printf("请输入您要借阅的书名:
");
scanf("%s",name1);
while(s!
=NULL)
{
if(strcmp(name1,s->data.name1)==0)
{
printf("您查找的书详细信息如下:
\n");
printf("书号书名作者出版社名称存馆数量定价\n");
printf("%d%s%d%s%d%5.0f\n",s->data.ISBN,s->data.name1,s->data.name2,s->data.name3,s->data.num,s->data.price);
if(s->data.num>0)
{
s->data.num--;
printf("您已借阅此书,请注意使用,保护图书!
\n");
printf("\n");
}
else
{