数据结构图书管理系统方案.docx

上传人:b****2 文档编号:516061 上传时间:2022-10-10 格式:DOCX 页数:14 大小:47.50KB
下载 相关 举报
数据结构图书管理系统方案.docx_第1页
第1页 / 共14页
数据结构图书管理系统方案.docx_第2页
第2页 / 共14页
数据结构图书管理系统方案.docx_第3页
第3页 / 共14页
数据结构图书管理系统方案.docx_第4页
第4页 / 共14页
数据结构图书管理系统方案.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构图书管理系统方案.docx

《数据结构图书管理系统方案.docx》由会员分享,可在线阅读,更多相关《数据结构图书管理系统方案.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构图书管理系统方案.docx

数据结构图书管理系统方案

 

数据结构

课程设计说明书

 

 

 

学生:

学号:

学院:

专业:

题目:

成绩

指导教师

 

 

 

 

 年月日

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详细设计思想

(1)基本思想:

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

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

voidmain()//主函数

intCreateListR(LinkList*L)//尾插法建表

voidLocateElem(LinkList*L)//查询

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

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

ModifyList(LinkList*L)//修改

intListDelete(LinkList*L)//删除

voidBorrow(LinkList*L)//借阅

voidReturn(LinkList*L)//归还

 

4.2核心代码

#include

#include

#include

#include

typedefstruct{

intnum;

charname[20];

charauthor[20];

charpress[20];

intcount;

charprice[10];

}ElemType;

typedefstructLNode//定义单链表结点类型

{

ElemTypedata;

structLNode*next;

}LinkList;

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

{

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

L->next=NULL;

}

intCreateListR(LinkList*L)//尾插法建表

{

inti,n;

LinkList*s,*q,*p;

p=L;

while(p->next!

=NULL)

p=p->next;

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

n=");

scanf("%d",&n);

for(i=1;i

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

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

scanf("%d%s%s%s%d%s",&s->data.num,s->data.name,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->data.name,q->data.name)==0){

printf("此图书已存在!

");

printf("请重新输入:

\n");

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

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");

}

return0;

}

voidLocateElem(LinkList*L)//查询

{

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

intc;

intx=0;

charname1[10],author1[10],press1[10];

printf("1按书名查询:

\n");

printf("2按作者名查询:

\n");

printf("3按名称:

\n");

printf("4返回\n");

printf("请选择1--4进行操作:

\n");

scanf("%d",&c);

if(c>4||c<1){

printf("您的输入有误!

\n");

scanf("%d",&c);

}

switch(c){

case1:

printf("请输入图书书名:

\n");

scanf("%s",name1);

while(p!

=NULL){

if(strcmp(name1,p->data.name)!

=0)//查找图书书名

p=p->next;

else{

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

printf("%d\t%s\t%s\t%s\t%d\t%s",p->data.num,p->data.name,

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

p->data.price);

printf("\n");

p=p->next;

x++;

}

}

if(p==NULL&&x==0)

printf("对不起,不存在此图书!

\n");

break;

case2:

printf("请输入图书作者:

\n");

scanf("%s",author1);

while(p!

=NULL){

if(strcmp(author1,p->data.author)!

=0)//查找图书作者

p=p->next;

else{

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

printf("%d\t%s\t%s\t%s\t%d\t%s",p->data.num,p->data.name,

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

p->data.price);

printf("\n");

p=p->next;

x++;

}

}

if(p==NULL&&x==0)

printf("对不起,不存在此图书!

\n");

break;

case3:

printf("请输入图书的名称:

\n");

scanf("%s",press1);

while(p!

=NULL){

if(strcmp(press1,p->data.press)!

=0)//查找图书名称

p=p->next;

else{

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

printf("%d%s%s%s%d%s",

p->data.num,p->data.name,p->data.author,

p->data.press,p->data.count,p->data.price);

printf("\n");

p=p->next;

x++;

}

}

if(p==NULL&&x==0)

printf("对不起!

不存在此图书\n");

break;

case4:

break;

}

}

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

{

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

if(p!

=NULL)//若原单链表中有一个或以上的数据结点

{

r=p->next;//r保存*p结点直接后继结点的指针

p->next=NULL;//构造只含一个数据结点的有序表

p=r;

while(p!

=NULL){

r=p->next;//r保存*p结点的直接后继结点的指针

q=L;

while(q->next!

=NULL&&q->next->data.numdata.num)

q=q->next;//在有序表中找插入*p的直接前驱结点*q的位置

p->next=q->next;//将*p插入到*q之后

q->next=p;

p=r;//扫描原单链表余下的结点

}

}

return0;

}

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

{

LinkList*p=L->next;

while(p!

=NULL){

printf("书号书名作者名称存馆数量

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1