严蔚敏版数据结构之图书管理系统实现
用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",¶ms); //这里很容易造成死循环 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; }
执行:

浙公网安备 33010602011771号