圖書館管理系統(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("請輸入需錄入圖書的編號、名字、做者姓名、出版社:\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("一、根據圖書編號進行查找:\n");
    printf("二、根據做者姓名進行查找:\n");
    printf("三、根據出版社進行查找:\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;
}
相關文章
相關標籤/搜索