前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于线性链表的书籍检索系统-数组顺序存储方式

基于线性链表的书籍检索系统-数组顺序存储方式

原创
作者头像
鲁郭大侠
修改2020-03-09 11:19:12
5390
修改2020-03-09 11:19:12
举报
文章被收录于专栏:高级程序设计高级程序设计

书籍检索系统,其根本在于书,按数学的观点而言,是一个数的集合。

介绍

因此,首先应分析基于书的各种信息,众所周知,书的信息基本包括:书号、书名、作者、出版社、定价等。

显然我们可以建立一个基于书的数据结构:

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;

}

/* BOOK 链表初始化*/

/*------------------------------------------------------------------------------*/

/*--- 该区域内的函数是系统操作子函数 ---*/

/*------------------------------------------------------------------------------*/

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;

}

/* BOOK 添加一本书*/

/* 在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;

}

/* BOOK 删除一本书*/

/* 在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;

}

/* 获取BOOK中书籍的数量*/

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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • // 基本程序头内容
  • //代码使用结构
  • /* 两个书籍信息的赋值 */
  • //读取书信息
  • /* 显示一本书籍信息*/
  • /* 显示全部书籍信息*/
  • /* 提示信息,按任意键继续 */
  • /* 显示当前书库中书籍的数量 */
  • /* BOOK 链表初始化*/
  • /* BOOK 添加一本书*/
  • /* BOOK 删除一本书*/
  • /* 获取BOOK中书籍的数量*/
  • //主函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档