数据结构图书管理系统

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构

课程设计说明书

年月日

1设计目的(小标题黑体五号字)

设计一个计算机管理系统完成图书管理基本业务(数据可以存储在一个数据文件中,数据结构、具体数据自定)。

2.设计内容和要求

具体功能有:1)每种书的登记内容包括书号、书名、著作者、出版单位、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;4)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;5)归还:注销对借阅者的登记,改变该书的现存量。

3.本设计所采用的数据结构

所用数据结构:线性表、查找、排序

链表:用一组地址任意的存储单元存放线性表中的数据元素。

以元素(数据元素的映象) + 指针(指示后继元素存储位置)

= 结点(表示数据元素或数据元素的映象)

以“结点的序列”表示线性表称作线性链表(单链表)

单链表是一种链式存取的结构,为找第 i 个数据元素必须先找到第 i-1 个数据元素。

因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 和 i。

(1)malloc(size)

在内存的动态存储区申请一个长度为size字节的连续空间。

(2)calloc(n,size)

在内存的动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。若此函数未被成功执行,函数返回值为0。

(3)free(p)

释放由指针p所指向的存储单元,而存储单元的大小是最近一次调用malloc()或calloc()函数时所申请的存储空间。

运用了单链表的插入、删除、排序、修改等一些操作!

4.功能模块详细设计

4.1 详细设计思想

(一)基本思想:

(二)图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。

(三)程序中的主要函数有:

void main() //主函数

int CreateListR(LinkList *L) //尾插法建表

void LocateElem(LinkList *L) //查询

int Sort(LinkList *L) //递增有序排序(直接插入排序法)

void Display(LinkList *L) //输出排序结果

ModifyList(LinkList *L) //修改

int ListDelete(LinkList *L) //删除

void Borrow(LinkList *L) //借阅

void Return(LinkList *L) //归还

4.2 核心代码

#include

#include

#include

#include

typedef struct {

int num;

char name[20];

char author[20];

char press[20];

int count;

char price[10];

} ElemType;

typedef struct LNode //定义单链表结点类型{

ElemType data;

struct LNode *next;

} LinkList;

void InitList(LinkList *L) //初始化线性表

{

L = (LinkList *) malloc(sizeof(LinkList)); //创建头结点

L->next = NULL;

}

int CreateListR(LinkList *L) //尾插法建表

{

int i, n;

LinkList *s, *q, *p;

p = L;

while (p->next != NULL )

p = p->next;

printf("请输入需要录入的图书信息的个数:n=");

scanf("%d", &n);

for (i = 1; i < n + 1; i++) {

s = (LinkList *) malloc(sizeof(LinkList));

printf("书号书名作者出版社名称存馆数量定价\n");

scanf("%d%s%s%s%d%s", &s->data.num, s->, s->data.author, s->data.press, &s->data.count, s->data.price);

q = L->next;

if (q == NULL ) {

p->next = s;

p = s;

p->next = NULL;

printf("录入成功!\n");

continue;

}

while (q != NULL ) {

if (strcmp(s->, q->) == 0) {

printf("此图书已存在!");

printf("请重新输入:\n");

scanf("%d%s%s%s%d%s", &p->data.num, p->,

p->data.author, p->data.press, &p->data.count,

p->data.price);

}

q = q->next;

}

p->next = s;

p = s;

p->next = NULL;

printf("录入成功!\n");

}

return 0;

}

void LocateElem(LinkList *L) //查询

{

LinkList *p = L->next; //p指向第一个数据结点

int c;

int x = 0;

char name1[10], author1[10], press1[10];

printf(" 1 按书名查询:\n");

printf(" 2 按作者名查询:\n");

printf(" 3 按出版社名称:\n");

printf(" 4 返回\n");

printf(" 请选择1--4进行操作:\n");

相关文档
最新文档