严蔚敏版数据结构之图书管理系统实现

用C语言实现了数据结构一书的图书管理系统,代码中有很多不完善甚至BUGs丛生。

#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#define MAX_BOOKS 10000

struct BOOK {
    const char *ISBN;
    const char *bookname;
    unsigned int price;
};

static unsigned index1=0;
static struct BOOK booklist[MAX_BOOKS];


int init_booklist()
{    
    return 0;
}
int insert_book(char ISBN[],char bookname[],unsigned int price)
{
    booklist[index1].ISBN=ISBN;
    booklist[index1].bookname=bookname;
    booklist[index1].price=price;
    index1++;
    return 0;
}
int deletebook_byISBN(char ISBN[])
{
    int i,flag;
    for(i=0;i<MAX_BOOKS;i++)
    {    
        flag=strcmp(ISBN,booklist[i].ISBN);
        if(flag==0)
        {
            booklist[i].ISBN="";
            booklist[i].bookname="";
            booklist[i].price=0;
            if(i==MAX_BOOKS-1)
                ;
            else
            {
                for(;i<MAX_BOOKS-1;i++)
                {
                    booklist[i]=booklist[i+1];
                }

            }
            break;
        }
        else
        {
            continue;
        }

    }
    if(i==MAX_BOOKS)
        puts("not find correct ISBN ,please check your input\n");    
    return 0;        
    
}
int deletebook_bybookname(char bookname[])
{
    int i;
    for(i=0;i<MAX_BOOKS;i++)
        if(strcmp(bookname,booklist[i].bookname)==0)
        {
            booklist[i].ISBN="";
            booklist[i].bookname="";
            booklist[i].price=0;
        }
        
    return 0;    
}
int editbook_byISBN(char ISBN[],char bookname[],unsigned int price)
{
    return 0; //未实现的函数
}
int editbook_bybookname()
{
    return 0;
}
int sortbook_byprice()
{
    return 0;
}
int count_totalbooks()
{
    int i,count=0;
    for(i=0;i<MAX_BOOKS;i++)
        if(booklist[i].price>0)
            count++;
    printf("total books=%d\n",count);
    return 0;
}
void op_input()
{
    char *ISBN,*bookname;
    ISBN=(char*)malloc(sizeof(char)*10);                      //内存泄露?
    bookname=(char*)malloc(sizeof(char)*10);
    int price;
    puts("----------添加一本书----------\n");
    puts("input ISBN bookname price\n");
    scanf("%s %s %d",ISBN,bookname,&price);
    insert_book(ISBN,bookname,price);
}
void op_output()
{
    puts("----------打印书库----------\n");
    count_totalbooks();
    int i;
    for(i=0;i<MAX_BOOKS;i++)
        if(booklist[i].price!=0)
        {
            printf("ISBN=%s bookname=%s price=%d\n",booklist[i].ISBN,booklist[i].bookname,booklist[i].price);
        }
}
void op_delete()
{
        char *delete_ISBN;
    delete_ISBN=(char *)malloc(sizeof(char)*10);
    puts("----------删除一本书----------\n");
    puts("----------输入待删除的ISBN----------\n");
    scanf("%s",delete_ISBN);
    deletebook_byISBN(delete_ISBN);
    free(delete_ISBN);
}
void usage_library()         //使用界面
{
    puts("1.录入书籍\n");
    puts("2.删除书籍\n");
    puts("3.打印书库\n");
    puts("4.退出程序\n");
}
int main()
{
    int params;
    init_booklist();
        loop: usage_library();
    puts("请输入选项\n");
    
    scanf("%d",&params);      //这里很容易造成死循环
    fflush(stdin);
    switch(params)
    {
        case 1: op_input();break;
        case 2: op_delete();break;
        case 3: op_output();break;
        case 4: exit(0);
    }
    goto loop;
        return 0;
    
}

执行:

 

posted @ 2022-01-18 20:39  UNkey  阅读(315)  评论(0)    收藏  举报