圖書館管理系統(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("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;
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM