图书管理系统.docx
- 文档编号:7429757
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:23
- 大小:19.11KB
图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(23页珍藏版)》请在冰豆网上搜索。
图书管理系统
/*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(i =NULL) { s=n; while(j =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(i =NULL) { s=n; while(j =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 {
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统