图书馆管理系统(C语言)

时间:2022-08-07 17:48:05
/*    实现的功能
* @ 1. 录入图书的信息
* @ 2. 给定图书的编号,显示该图书的详细信息
* @ 3. 给定作者的姓名,可以显示该作者所有的书
* @ 4. 给定出版社,可以显示该出版社出版的图书
* @ 5. 给定图书的编号,可以删除该图书的信息
* @ 6. 可以提供一些统计图书信息的功能
*/

#include
<stdio.h>
#include
<stdlib.h>
#include
<string.h>

typedef
struct _Book
{
int book_id; //图书编号
char book_name[20]; //树名
char name[20]; //作者姓名
char press[20]; //出版社
struct _Book *next;
}book;

book
*head = NULL; //为了方便,本人采用全局变量的形式,但不安全,需要改进
int length; //链表的长度

//录入图书的信息
void create()
{
book
*p1,*p2;
length
= 0;
p1
= (book *)malloc(sizeof(book));
p1
->book_id = -1;
if(head == NULL)
{
head
= p1;
}
printf(
"请输入需录入图书的编号、名字、作者姓名、出版社:\n");
while(1) //当图书的编号为0时,代表录入完成
{
p2
= (book *)malloc(sizeof(book));
scanf(
"%d %s %s %s",&p2->book_id,p2->book_name,p2->name,p2->press);
fflush(stdin);
//每次清空缓冲区,以便本次输入对下次输入造成影响

if(p2->book_id == 0)
{
printf(
"图书信息录入完成!\n");
break;
}
length
++;
p1
->next = p2;
p2
->next = NULL;
p1
= p1->next;
}
return ;
}

//显示图书信息
void display()
{
book
*p1 = head->next;
printf(
"所有的图书信息如下:\n");
while(p1 != NULL)
{
printf(
"%d %s %s %s %s\n",p1->book_id,p1->book_name,p1->name,p1->press);
p1
= p1->next;
}
return ;
}

//查找
void search()
{
int num,x,flag1 = 0,flag2 = 0;
char name[20],press[20];
book
*p = head->next;
printf(
"1、根据图书编号进行查找:\n");
printf(
"2、根据作者姓名进行查找:\n");
printf(
"3、根据出版社进行查找:\n");
printf(
"请选择查找的功能:");
scanf(
"%d",&x);
switch(x)
{
case 1:
{
printf(
"请输入待查找的图书编号:");
scanf(
"%d",&num);

while(p != NULL)
{
if(p->book_id == num)
{
printf(
"编号为%d的图书信息如下:\n");
printf(
"%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press);
return ;
}
p
= p->next;
}
if(p == NULL)
{
printf(
"该图书馆没有该图书的编号!\n");
}
}
break;
case 2:
{
printf(
"请输入待查找的图书的作者姓名:");
gets(name);

while(p != NULL)
{
if(strcmp(p->name,name) == 0)
{
flag1
++;
printf(
"作者为%s的图书信息如下:\n");
printf(
"%d %s %s%是\n",p->book_id,p->book_name,p->name,p->press);
}
p
= p->next;
}
if(flag1 == 0)
{
printf(
"该图书馆没有该作者的图书!\n");
}
}
case 3:
{
printf(
"请输入待查找图书的出版社:");
gets(press);

while(p != NULL)
{
if(strcmp(p->press,press) == 0)
{
flag2
++;
printf(
"出版社为%s的图书如下:\n");
printf(
"%d %s %s %s\n",p->book_id,p->book_name,p->name,p->press);
}
p
= p->next;
}
if(flag2 == 0)
{
printf(
"该图书馆没有该出版社的图书!\n");
}
}
default:
{
printf(
"选择有误!\n");
}
break;
}
return ;
}
//按编号进行删除
void Delete()
{
int num;
book
*p,*q;
q
= head;
p
= head->next;
printf(
"请输入待删除的图书编号:");
scanf(
"%d",&num);

while(p != NULL)
{
if(p->book_id == num)
{
q
->next = p->next;
free(p);
length
--;
printf(
"删除成功!\n");
return ;
}
p
= p->next;
q
= q->next;
}
if(p == NULL)
{
printf(
"该图书馆没有该编号的图书!\n");
return ;
}
}
//选择的菜单
void menu()
{
printf(
"-----------------------------------------\n");
printf(
"|\t\t图书馆管理系统\t\t|\n");
printf(
"|\t\t0. 退出系统\t\t|\n");
printf(
"|\t\t1. 录入图书信息\t\t|\n");
printf(
"|\t\t2. 显示图书信息\t\t|\n");
printf(
"|\t\t3. 查询图书信息\t\t|\n");
printf(
"|\t\t4. 删除图书信息\t\t|\n");
printf(
"-----------------------------------------\n");
}

int main(void)
{
int a;
menu();
while(1)
{
printf(
"请输入你选择的功能:");
scanf(
"%d",&a);

switch(a)
{
case 0:
return ;
case 1:
{
create();
menu();
}
break;
case 2:
{
if(head != NULL)
{
display();
menu();
}
else
{
printf(
"该图书馆没有录入图书,请先录入!\n");
menu();
}
}
break;
case 3:
{
if(head != NULL)
{
search();
menu();
}
else
{
printf(
"该图书馆没有录入图书,请先录入!\n");
menu();
}
}
break;
case 4:
{
if(head != NULL)
{
Delete();
menu();
}
else
{
printf(
"该图书馆没有录入图书,请先录入!\n");
menu();
}
}
break;
default:
{
printf(
"选择有误!\n");
menu();
}
break;
}
}

return 0;
}