图书管理系统.docx

上传人:b****5 文档编号:7429757 上传时间:2023-01-23 格式:DOCX 页数:23 大小:19.11KB
下载 相关 举报
图书管理系统.docx_第1页
第1页 / 共23页
图书管理系统.docx_第2页
第2页 / 共23页
图书管理系统.docx_第3页
第3页 / 共23页
图书管理系统.docx_第4页
第4页 / 共23页
图书管理系统.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

图书管理系统.docx

《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(23页珍藏版)》请在冰豆网上搜索。

图书管理系统.docx

图书管理系统

/*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

{

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1