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;
    }
  • 相关阅读:
    BZOJ 4199: [Noi2015]品酒大会 后缀自动机+逆序更新
    BZOJ 3676: [Apio2014]回文串 回文自动机
    Remember the Word UVALive
    [APIO2012]派遣 可并堆(左偏树)
    BZOJ 2555: SubString 后缀自动机 + LCT
    力扣题目汇总(转换成小写字母,唯一摩尔斯密码,有序数组平方)
    力扣题目汇总(加一,旋转数组,整数反转)
    力扣题目汇总(存在重复,合并两个有序数组,搜索插入位置)
    力扣题目汇总(买卖股票的最佳时机,最大连续1的个数,缺失的数字)
    力扣题目汇总(最长特殊序列,回文数,移动零)
  • 原文地址:https://www.cnblogs.com/tslDream/p/4457594.html
Copyright © 2011-2022 走看看