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

/*    实现的功能
*    @ 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("请输入需录入图书的编号、名字、作者姓名、出版社:
");
    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("图书信息录入完成!
");
            break;
        }
        length ++;
        p1->next = p2;
        p2->next = NULL;
        p1 = p1->next;
    }
    return ;
}

//显示图书信息
void display()
{
    book *p1 = head->next;
    printf("所有的图书信息如下:
");
    while(p1 != NULL)
    {
        printf("%d    %s    %s    %s    %s
",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、根据图书编号进行查找:
");
    printf("2、根据作者姓名进行查找:
");
    printf("3、根据出版社进行查找:
");
    printf("请选择查找的功能:");
    scanf("%d",&x);
    switch(x)
    {
    case 1:
        {
            printf("请输入待查找的图书编号:");
            scanf("%d",&num);

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

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

            while(p != NULL)
            {
                if(strcmp(p->press,press) == 0)
                {
                    flag2++;
                    printf("出版社为%s的图书如下:
");
                    printf("%d    %s    %s    %s
",p->book_id,p->book_name,p->name,p->press);
                }
                p = p->next;
            }
            if(flag2 == 0)
            {
                printf("该图书馆没有该出版社的图书!
");
            }
        }
    default:
        {
            printf("选择有误!
");
        }
        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("删除成功!
");
            return ;
        }
        p = p->next;
        q = q->next;
    }
    if(p == NULL)
    {
        printf("该图书馆没有该编号的图书!
");
        return ;
    }
}
//选择的菜单
void menu()
{
    printf("-----------------------------------------
");
    printf("|		图书馆管理系统		|
");
    printf("|		0. 退出系统		|
");
    printf("|		1. 录入图书信息		|
");
    printf("|		2. 显示图书信息		|
");
    printf("|		3. 查询图书信息		|
");
    printf("|		4. 删除图书信息		|
");
    printf("-----------------------------------------
");
}

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("该图书馆没有录入图书,请先录入!
");
                    menu();
                }
            }
            break;
        case 3:
            {
                if(head != NULL)
                {
                    search();
                    menu();
                }
                else
                {
                    printf("该图书馆没有录入图书,请先录入!
");
                    menu();
                }
            }
            break;
        case 4:
            {
                if(head != NULL)
                {
                    Delete();
                    menu();
                }
                else
                {
                    printf("该图书馆没有录入图书,请先录入!
");
                    menu();
                }
            }
            break;
        default:
            {
                printf("选择有误!
");
                menu();
            }
            break;
        }
    }

    return 0;
}
原文地址:https://www.cnblogs.com/tslDream/p/4457594.html