zoukankan      html  css  js  c++  java
  • 图书馆管理系统(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;
    }
  • 相关阅读:
    bzoj1015星球大战(并查集+离线)
    bzoj1085骑士精神(搜索)
    bzoj1051受欢迎的牛(Tarjan)
    左偏树学习
    hdu1512 Monkey King(并查集,左偏堆)
    左偏树(模板)
    PAT (Basic Level) Practice (中文) 1079 延迟的回文数 (20分) (大数加法)
    PAT (Basic Level) Practice (中文) 1078 字符串压缩与解压 (20分) (字符转数字——栈存放)
    PAT (Basic Level) Practice (中文) 1077 互评成绩计算 (20分) (四舍五入保留整数)
    PAT (Basic Level) Practice (中文) 1076 Wifi密码 (15分)
  • 原文地址:https://www.cnblogs.com/tslDream/p/4457594.html
Copyright © 2011-2022 走看看