书籍检索系统,其根本在于书,按数学的观点而言,是一个数的集合。
因此,首先应分析基于书的各种信息,众所周知,书的信息基本包括:书号、书名、作者、出版社、定价等。
显然我们可以建立一个基于书的数据结构:
struct bookinfor
{
char *ID;
char *Name;
char *Author;
char *Publisher;
float Price;
};
书的顺序存储链表结构:
struct book
{
struct bookinfor book;
int length;
int size;
};
基于书籍的操作:添加、删除、查找、赋值、读取、书籍集合中书的数量等等
鉴于时间关系,不再进行详细的文字描述,下面给出具体的程序实现。
#include <stdio.h>
#include <conio.h>
#include <string.h>
#define BookSize 100
#define TRUE 1
#define FALSE -1
/* 对应一本书的信息 */
struct bookinfor
{
char ID[20];
char Name[100];
char Author[50];
char Publisher[50];
float Price;
};
typedef struct bookinfor BookInfor;
/**/
struct book
{
BookInfor book[BookSize];
int length;
};
typedef struct book Book;
/*------------------------------------------------------------------------------*/
/*--- 该区域内的函数是系统应用子函数 ---*/
/*------------------------------------------------------------------------------*/
int BookCopy(BookInfor *source , BookInfor *target);
{
strcpy(source ->ID, target ->ID);
strcpy(source -> Name, target -> Name);
strcpy(source -> Author, target -> Author);
strcpy(source -> Publisher, target -> Publisher);
source -> Price = target -> Price;
return TRUE;
}
int ReadBookInfor(BookInfor *bkif)
{
printf(“\n Please Input Book Information:”);
printf(“\n Book ID:”);
scanf(“%20s”, bkif-> ID);
printf(“\n Book Name:”);
scanf(“%100s”, bkif-> Name);
printf(“\n Book Author:”);
scanf(“%50s”, bkif-> Author);
printf(“\n Book Publisher:”);
scanf(“%50s”, bkif-> Publisher);
printf(“\n Book Price:”);
scanf(“%f”, bkif-> Price);
return TRUE;
}
int BookInforDisp(BookInfor *target);
{
printf(“ ID=%s”, target ->ID);
printf(“ Name =%s”, target -> Name);
printf(“ Author =%s”, target -> Author);
printf(“ Publisher =%s”, target -> Publisher);
printf(“ Price =%f\n”, target -> Price);
return TRUE;
}
int DisplayAllBook(Book *bk)
{
int tmpidx;
for (tmpidx=1;tmpidx<=bk->length;tmpidx++)
BookInforDisp(bk.BookInfor[tmpidx]);
return TRUE;
}
int WaitKey(void)
{
printf(“\nPress any key for continue!\n”);
getch();
}
int DisplayNumOfBook(Book *bk)
{
printf(“\n\nThe num of books is %d \n”, BookInforLength(bk));
return TRUE;
}
/*------------------------------------------------------------------------------*/
/*--- 该区域内的函数是系统操作子函数 ---*/
/*------------------------------------------------------------------------------*/
int BookInit(Book *bk)
{
bk=( Book * ) malloc(sizeof(Book));
if (bk==NULL) return FALSE;
bk. Length=0;
return TRUE;
}
/* BOOK 释放*/
int BookFree(Book *bk)
{
if(bk==NULL) return FALSE;
free(bk);
return TRUE;
}
/* 在bk 中的第index 添加一个 bkif ,*/
/* index 从1开始 */
/* 在最后一个附加, index=已包含书籍数量+1 */
/* 即 index= bk.Length+1 */
int BookInsert(Book *bk, BookInfor *bkif,int index)
{
BookInfor *tmpBk;
int tmpidx;
if(index <1 || index >bk.Length+1) return FALSE;
if(index > BookSize) return FALSE;
tmpidx=bk.length ;
While (tmpidx>=index)
{
BookCopy(&bk.book[tmpidx-1], &bk.book[tmpidx]);
tmpidx--;
}
/* 将要添加的书籍信息放入index 位置中*/
BookCopy(bkif, &bk.book[index-1]);
bk.Length++;
return TRUE;
}
/* 在bk 中的第index 删除一个BookInfor */
/* index 从1开始 */
int BookDelete(Book *bk, int index)
{
BookInfor *tmpBk;
int tmpidx;
if(index <1 || index >bk.Length) return FALSE;
tmpidx=index -1;
While (tmpidx<= bk.Length -1)
{
BookCopy(&bk.book[tmpidx+1], &bk.book[tmpidx]);
tmpidx++;
}
bk.length--;
return TRUE;
}
int BookInforLength(Book *bk)
{
If (bk==NULL) return 0;
return bk. Length;
}
/*------------------------------------------------------------------------------*/
/*--- 系统主操作函数 ---*/
/*------------------------------------------------------------------------------*/
main()
{
Book *bk;
BookInfor *bkif;
if (!BookInit(bk)) exit(0);
/* 读入第一本书籍信息*/
ReadBookInfor(bkif);
BookInsert(bk, bkif,1);
/* 读入第二本书籍信息*/
ReadBookInfor(bkif);
BookInsert(bk, bkif,2);
/* 读入第三本书籍信息*/
ReadBookInfor(bkif);
BookInsert(bk, bkif,3);
/* 显示书籍数量*/
clrscr();
DisplayNumOfBook(bk);
/* 显示全部书籍信息*/
DisplayAllBook(bk);
WaitKey();
/* 删除第二本书籍信息*/
BookDelete(bk,,2);
clrscr();
/* 显示书籍数量*/
DisplayNumOfBook(bk);
/* 显示全部书籍信息*/
DisplayAllBook(bk);
WaitKey();
BookFree(bk);
/* 显示书籍数量*/
DisplayNumOfBook(bk);
WaitKey();
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。