#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define MaxSize 100
typedef struct
{
char isbn[30];//书号
char name[30];//书名
char writer[30];//作者
char producter[30];//出版社
int num;//馆存数量
char price[30];//价格
}ElemType;
typedef struct
{
ElemType data[MaxSize],data1[MaxSize];
int length;
}SqList;
void InitList(SqList*&L)//初始化线性表
{
L=(SqList*)malloc(sizeof(SqList));
L->length=0;
}
int ListEmpty(SqList *L)
{
return(L->length==0);
}
void AddBook(SqList *&L)//添加图书
{
int bz=0;
printf("请输入图书信息!\n");
printf("书号\t书名\t作者\t出版社\t馆存数量(整型)\t价格\n");
scanf("%s %s %s %s %d %s",L->data[L->length].isbn,L->data[L->length].name,L->data[L->length].writer,L->data[L->length].producter,&L->data[L->length].num,L->data[L->length].price);
printf("\n");
for(int i=0;i<L->length;i++)
{
if(strcmp(L->data[i].isbn,L->data[L->length].isbn)==0)
{
L->data[i].num++;
bz=1;
break;
}
}
if(bz==0)
{
L->length++;
printf("添加图书成功!\n");
}
}
void Search_i(SqList*&L)//按书号查询
{
printf("请输入你想要查找图书的书号:");
char isbn[50];
scanf("%s",&isbn);
int i=0;
while(i<L->length&&strcmp(L->data[i].isbn,isbn)!=0)
{
i++;
}
if(i>=L->length)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
void Search_n(SqList*&L)//按书名查询
{
printf("请输入你想查找图书的书名:");
char name[50];
scanf("%s",&name);
int i=0,b=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].name,name)==0)
b++;
}
if(b==0)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(i=0;i!=L->length;i++)
{
if(strcmp(L->data[i].name,name)==0)
{
printf("%s\t《%s》\t%s\t%s\t%d册\t%s元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
}
}
void Search_w(SqList*&L)//按作者查询
{
printf("请输入你想要查找图书的作者:");
char writer[50];
scanf("%s",&writer);
int i=0,b=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].writer,writer)==0)
b++;
}
if(b==0)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("%s的作品共有%d本,信息如下:\n",writer,b);
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(i=0;i<L->length;i++)
{
if(strcmp(L->data[i].writer,writer)==0)
{
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
}
}
void Search_p(SqList*&L)//按出版社查询
{
printf("请输入你想要查找图书的出版社:");
char producter[50];
scanf("%s",&producter);
int i=0,c=0;
for(i;i!=L->length;i++)
{
if(strcmp(L->data[i].producter,producter)==0)
c++;
}
if(c==0)
{
printf("图书馆没有此图书!\n");
}
else
{
printf("%s的作品共有%d本,信息如下:\n",producter,c);
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(i=0;i<L->length;i++)
{
if(strcmp(L->data[i].producter,producter)==0)
{
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
}
}
void Revise_i(SqList*&L)//按书号修改图书
{
printf("请输入你要修改图书的书号:");
char isbn[30];
scanf("%s",&isbn);
printf("你要修改的图书信息如下:\n");
int i=0,v=0;
while(i<L->length&&strcmp(L->data[i].isbn,isbn)!=0)
i++;
if(i>=L->length)
printf("图书馆没有此图书!\n");
else
{
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
printf("请输入图书信息!\n");
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
scanf("%s %s %s %s %d %s",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("修改图书信息成功!\n");
}
}
void Revise_n(SqList*&L)//按书名修改图书
{
printf("请输入你要修改图书的书名:");
char name[30];
scanf("%s",&name);
printf("你要修改的图书信息如下:\n");
int i=0,a=0;
for(i;i<L->length;i++)
{
if(strcmp(L->data[i].name,name)==0)
a++;
}
if(a==0)
{
printf("图书馆没有此图书!:\n");
}
else
{
char isbn2[30];
printf("符合条件的图书共有%d本,信息如下:\n",a);
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(int o=0;o<L->length;o++)
{
if(strcmp(L->data[o].name,name)==0)//书名相同时按书号删除
printf("%s\t《%s》\t%s\t%s\t%d册\t%s元",L->data[o].isbn,L->data[o].name,L->data[o].writer,L->data[o].producter,L->data[o].num,L->data[o].price);
printf("\n");
}
printf("请输入你想要修改的书籍的书号:");
scanf("%d",&isbn2);
int t=0,e=0;
for(t;t<L->length;t++)
{
if(strcmp(L->data[t].isbn,isbn2)==0)
{
e=t;
}
}
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
printf("%s\t《%s》\t%s\t%s\t%d册\t%s元",L->data[e].isbn,L->data[e].name,L->data[e].writer,L->data[e].producter,L->data[e].num,L->data[e].price);
for(t=0;t<L->length;t++)//判断修改后的书籍,是否有相同书籍已存在于图书馆内
{
if(strcmp(L->data[t].isbn,L->data[i].isbn)==0)
{
L->data[t].num++;
L->length--;
}
}
printf("\n");
printf("修改图书信息成功!\n");
}
}
void Delete_i(SqList*&L)//按书号删除图书
{
printf("请输入你要删除图书的序号:\n");
char isbn[30];
scanf("%s",&isbn);
int i =0;
while(i<L->length&&strcmp(L->data[i].isbn,isbn)!=0)
i++;
if(i>=L->length)
printf("图书馆没有此图书!\n");
else{
int j;
printf("isbn: %s的图书%s已成功删除!\n",L->data[i].isbn,L->data[i].name);
for(j=i;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
}
}
void Delete_n(SqList*&L)//按书名删除图书
{
printf("请输入你要删除图书的书名:\n");
char name[30];
scanf("%s",&name);
int i =0,a=0,e=0;
for(i;i<L->length;i++)
{
if(strcmp(L->data[i].name,name)==0)
a++;
}
if(a==0)
printf("图书馆没有此图书!\n");
else
{
char isbn2[30];//书名相同时按书号删除
printf("符合条件的图书共有%d本,信息如下:\n",a);
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(int o=0;o<L->length;o++)
{
if(strcmp(L->data[o].name,name)==0)
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[o].isbn,L->data[o].name,L->data[o].writer,L->data[o].producter,L->data[o].num,L->data[o].price);
printf("\n");
}
printf("请输入你想要删除书籍的书号:");
scanf("%d",&isbn2);
int t=0;
for(t;t<L->length;t++)
{
if(strcmp(L->data[t].isbn,isbn2)==0)
e=t;
}
int j;
printf("isbn:%s的图书%s已成功删除!\n",L->data[e].isbn,L->data[e].name);
for(j=e;j<L->length-1;j++)
L->data[j]=L->data[j+1];
L->length--;
}
}
void BorrowBook(SqList*&L)//图书借阅
{
printf("请输入你想要借的图书的书号:");
char isbn[30];
scanf("%s",&isbn);
int i=0;
while(i<L->length&&strcmp(L->data[i].isbn,isbn)!=0)
{
i++;
}
if(i>=L->length)
{
printf("图书馆内没有此图书!\n");
}
else
{
if(L->data[i].num==0)
{
printf("该图书已经全部借出!\n");
}
else
{
printf("图书%s借阅成功!\n",L->data[i].name);
L->data[i].num--;
}
}
}
void BackBook(SqList*&L)//图书归还
{
printf("请输入你想要归还的图书的书号:");
char isbn[30];
scanf("%s",&isbn);
int i=0;
while(i<L->length&&strcmp(L->data[i].isbn,isbn)!=0)
{
i++;
}
if(i>=L->length)
{
printf("这本图书不是我们图书馆所藏!\n");
}
else
{
printf("图书%s归还成功!\n",L->data[i].name);
L->data[i].num++;
}
}
void Sort_i(SqList*&L)//按书号排序
{
for(int i=0;i<L->length-1;i++)
{
for(int j=0;j<L->length-1-i;j++)
{
if(strcmp(L->data[j].isbn,L->data[j+1].isbn)>0)
{
strcpy(L->data1[j].isbn,L->data[j].isbn);
strcpy(L->data[j].isbn,L->data[j+1].isbn);
strcpy(L->data[j+1].isbn,L->data1[j].isbn);
strcpy(L->data1[j].name,L->data[j].name);
strcpy(L->data[j].name,L->data[j+1].name);
strcpy(L->data[j+1].name,L->data1[j].name);
strcpy(L->data1[j].writer,L->data[j].writer);
strcpy(L->data[j].writer,L->data[j+1].writer);
strcpy(L->data[j+1].writer,L->data1[j].writer);
strcpy(L->data1[j].producter,L->data[j].producter);
strcpy(L->data[j].producter,L->data[j+1].producter);
strcpy(L->data[j+1].producter,L->data1[j].producter);
L->data1[j].num=L->data[j].num;
L->data[j].num=L->data[j+1].num;
L->data[j+1].num=L->data1[j].num;
strcpy(L->data1[j].price,L->data[j].price);
strcpy(L->data[j].price,L->data[j+1].price);
strcpy(L->data[j+1].price,L->data1[j].price);
}
}
}
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(int i=0;i<L->length;i++)
{
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
void Sort_n(SqList*&L)//按书名排序
{
for(int i=0;i<L->length-1;i++)
{
for(int j=0;j<L->length-1-i;j++)
{
if(strcmp(L->data[j].writer,L->data[j+1].writer)>0)
{
strcpy(L->data1[j].isbn,L->data[j].isbn);
strcpy(L->data[j].isbn,L->data[j+1].isbn);
strcpy(L->data[j+1].isbn,L->data1[j].isbn);
strcpy(L->data1[j].name,L->data[j].name);
strcpy(L->data[j].name,L->data[j+1].name);
strcpy(L->data[j+1].name,L->data1[j].name);
strcpy(L->data1[j].writer,L->data[j].writer);
strcpy(L->data[j].writer,L->data[j+1].writer);
strcpy(L->data[j+1].writer,L->data1[j].writer);
strcpy(L->data1[j].producter,L->data[j].producter);
strcpy(L->data[j].producter,L->data[j+1].producter);
strcpy(L->data[j+1].producter,L->data1[j].producter);
L->data1[j].num=L->data[j].num;
L->data[j].num=L->data[j+1].num;
L->data[j+1].num=L->data1[j].num;
strcpy(L->data1[j].price,L->data[j].price);
strcpy(L->data[j].price,L->data[j+1].price);
strcpy(L->data[j+1].price,L->data1[j].price);
}
for(int t=0;t<L->length-1;t++)
{
if(strcmp(L->data[t].writer,L->data[t+1].writer)==0)
{
if(strcmp(L->data[t].isbn,L->data[t+1].isbn)>0)
{
strcpy(L->data1[t].isbn,L->data[t].isbn);
strcpy(L->data[t].isbn,L->data[t+1].isbn);
strcpy(L->data[t+1].isbn,L->data1[t].isbn);
strcpy(L->data1[t].name,L->data[t].name);
strcpy(L->data[t].name,L->data[t+1].name);
strcpy(L->data[t+1].name,L->data1[t].name);
strcpy(L->data1[t].writer,L->data[t].writer);
strcpy(L->data[t].writer,L->data[t+1].writer);
strcpy(L->data[t+1].writer,L->data1[t].writer);
strcpy(L->data1[t].producter,L->data[t].producter);
strcpy(L->data[t].producter,L->data[t+1].producter);
strcpy(L->data[t+1].producter,L->data1[t].producter);
L->data1[t].num=L->data[t].num;
L->data[t].num=L->data[t+1].num;
L->data[t+1].num=L->data1[t].num;
strcpy(L->data1[t].price,L->data[t].price);
strcpy(L->data[t].price,L->data[t+1].price);
strcpy(L->data[t+1].price,L->data1[t].price);
}
}
}
}
}
printf("书号\t书名\t作者\t出版社\t馆存数量\t价格\n");
for(int i=0;i<L->length;i++)
{
printf("%s\t 《 %s 》 \t%s\t%s\t%d 册 \t%s 元",L->data[i].isbn,L->data[i].name,L->data[i].writer,L->data[i].producter,L->data[i].num,L->data[i].price);
printf("\n");
}
}
int menu(SqList*&L);
void menu1(SqList*&L)
{
printf("\n\t--------------------------\n");
printf("\t 1.按书名进行查询 \n\n");
printf("\t 2.按作者名进行查询 \n\n");
printf("\t 3.按出版社进行查询 \n\n");
printf("\t 0.返回主菜单 \n");
printf("\n\t--------------------------\n");
printf("请选择功能(0~3):");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Search_n(L);system("pause");system("cls");break;
case 2:Search_w(L);system("pause");system("cls");break;
case 3:Search_p(L);system("pause");system("cls");break;
case 0:system("cls");menu(L);break;
default:printf("输入有误,请重新输入!");system("pause");system("cls");
}
menu1(L);
}
void menu2(SqList*&L)
{
printf("\n\t--------------------------\n");
printf("\t 1.按书号进行图书的修改 \n\n");
printf("\t 2.按书名进行图书的修改 \n\n");
printf("\t 0.返回主菜单 \n");
printf("\n\t--------------------------\n");
printf("请选择功能(0~2):");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Revise_i(L);system("pause");system("cls");break;
case 2:Revise_n(L);system("pause");system("cls");break;
case 0:system("cls");menu(L);break;
default:printf("输入有误,请重新输入!");system("pause");system("cls");
}
menu2(L);
}
void menu3(SqList*&L)
{
printf("\n\t--------------------------\n");
printf("\t 1.按书号进行图书的删除 \n\n");
printf("\t 2.按书名进行图书的删除 \n\n");
printf("\t 0.返回主菜单 \n");
printf("\n\t--------------------------\n");
printf("请选择功能(0~2):");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Delete_i(L);system("pause");system("cls");break;
case 2:Delete_n(L);system("pause");system("cls");break;
case 0:system("cls");menu(L);break;
default:printf("输入有误,请重新输入!");system("pause");system("cls");
}
menu3(L);
}
void menu4(SqList*&L)
{
printf("\n\t--------------------------\n");
printf("\t 1.按书号进行图书的排序 \n\n");
printf("\t 2.按书名进行图书的排序 \n\n");
printf("\t 0.返回主菜单 \n");
printf("\n\t--------------------------\n");
printf("请选择功能(0~2):");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Sort_i(L);system("pause");system("cls");break;
case 2:Sort_n(L);system("pause");system("cls");break;
case 0:system("cls");menu(L);break;
default:printf("输入有误,请重新输入!");system("pause");system("cls");
}
menu4(L);
}
void menu5(SqList*&L)
{
printf("\n\t--------------------------\n");
printf("\t 1.图书借阅 \n\n");
printf("\t 2.图书归还 \n\n");
printf("\t 0.返回主菜单 \n");
printf("\n\t--------------------------\n");
printf("请选择功能(0~2):");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:Delete_i(L);system("pause");system("cls");break;
case 2:Delete_n(L);system("pause");system("cls");break;
case 0:system("cls");menu(L);break;
default:printf("输入有误,请重新输入!");system("pause");system("cls");
}
menu5(L);
}
int menu(SqList*&L)
{system("cls");
printf("\n\t\t **简易图书管理系统** ");
printf("\n\t--------------------------\n");
printf("\t| 1.图书信息录入 |\n\n");
printf("\t| 2.图书信息查询 |\n\n");
printf("\t| 3.图书信息排序 |\n\n");
printf("\t| 4.图书信息修改 |\n\n");
printf("\t| 5.图书信息删除 |\n\n");
printf("\t| 6.图书借阅归还 |\n\n");
printf("\t| 0.退出 |\n\n");
printf("\n\t--------------------------\n");
printf("请选择功能(0~6):");
int choice;
scanf("%d",&choice);
switch(choice)
{
case 1:AddBook(L);system("pause");break;
case 2:system("cls");menu1(L);break;
case 3:system("cls");menu4(L);break;
case 4:system("cls");menu2(L);break;
case 5:system("cls");menu3(L);break;
case 6:system("cls");menu5(L);break;
case 0:printf("您已成功退出!");return 0;break;
default:printf("输入有误,请重新输入!");system("pause");system("cls");
}
return 1;
}
void main()
{
SqList*L;
InitList(L);
while(menu(L));
}