图书馆ADT.docx
- 文档编号:29305390
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:11
- 大小:19.22KB
图书馆ADT.docx
《图书馆ADT.docx》由会员分享,可在线阅读,更多相关《图书馆ADT.docx(11页珍藏版)》请在冰豆网上搜索。
图书馆ADT
题目:
小型图书管理系统
班级:
00090B5班
组别:
第一组
组长:
xx学号:
28
组员:
xx学号:
31
xx学号:
15
xx学号:
13
xx学号:
39
完成日期:
2002年7月10日
一、需求分析:
1、程序的输入:
只需按系统提示输入整型数字或英文字母即可。
每次数据的输入均以回车符作为结束标志。
2、程序的输出:
每一项数据输出均有汉字的提示,输出格式均为整型或字符串。
3、程序的系统功能:
(1)、图书库系统管理;
(2)、借阅者信息的管理;
(3)、日常借书还书操作;
(4)、根据需要提供对图书所需的查询方式。
4、测试数据(后附)。
二、概要设计:
1:
本系统包括两个抽象数据:
图书库链表和借书者链表。
(1)定义图书链表类型为:
ADTAbook
数据对象D={bi|bi=Booktype,i=1……nn>=o}
数据关系R={
基本操作:
Insert(n)
操作结果:
建立一个长度为n的链表或插入n个新结点。
Del(n)
操作结果:
从已建立链表中删除n个结点。
Print()
操作结果:
输出已建立链表。
Search()
操作结果:
按要求查找并输出已建立链表中的结点。
Borrow()
操作结果:
按要求改变已建立链表中某一结点的相关信息。
return()
操作结果:
按要求改变已建立链表中某一结点的相关信息。
(2)定义图书链表类型为:
ADTAborrow
数据对象D={ri|ri|borrowtype,i=1……nn>=1}
数据关系R={
基本操作:
creat(n)
操作结果:
建立一个长度为n的链表。
Insert(n)
操作结果:
插入n个新结点到已建立链表中。
Remove(n)
操作结果:
从已建立链表中删除n个结点。
2:
主程序的流程:
(见附图)
借书Lendbook()
1、根据借阅者
Look_for_borrower()
2、根据书名
Look_for_name()
3、根据出版社
Look_for_press()
4、根据作者
Look_for_auther()
5、自定义查找
Look_for_word()
调入界面
还书Returnbook()
查询Search()
1、新书入库
Insert()
2、旧书删除
Del()
3、查询库内藏书
Print()
图书库管理Kucaozuo()
1、登记
2、注销
借阅者管理
退出
三、详细设计:
1:
图书类型
structbooktype
{
intbooknumber;/*书号*/
charbookname[20];/*书名*/
charauther[20];/*作者*/
charpress[50];/*出版单位*/
intprice;/*定价*/
intpagenumber;/*页数*/
intnownumber;/*当前册数*/
time_tborrowtime;/*借书时间*/
time_treturntime;/*还书时间*/
charborrowernum;/*借书人证号*/
structbooktype*next;
}*g_book_list;
2:
借阅者类型:
structborrowertype
{
intcardnumber;/*借书证号*/
charname[20];/*姓名*/
charsex[10];/*性别*/
chartel[10];/*联系电话*/
charunit[80];/*工作单位*/
intlendnumber;/*借书数目*/
intbooknumber;/*所借书号*/
structborrowertype*next;
structborrowertype*prev;
}
四、调试分析
1在最初进行模块划分是未将借书人信息管理作为一个单独摸块,致使调试时无法明确管理结借书者信息,造成借书者链表混乱,重新分配后解决了这个问题
2原先想进行中文书名及人命输入输出,但由于未能找到相关信息资料,无法完成该操作,最终放弃该设计
3最初我们曾规定了一些变量以及结构体,但随着设计的进行深化,最初的结构体及变量无法满足需要,致使调试时出现不少混乱,后来我们重新规定了一下,解决了这些问题;
4程序的串联我们采取了循环控制与选择结构相结合的结构很好地解决了系统长时间运行及循环执行命令的问题,使演示系统现实化。
五、测试结果:
1、在DOS状态下,2、执行library.exe文件,3、进入系统操作界面。
4、选择ManageofBook选项,5、进行图书库管理操作。
进入后根据提示信息可进行:
1、新书入库2、删除旧书3、查询库存图书操作。
选择1:
根据相应提示信息输入书号、书名、作者、出版单位、价格、页数,即可进行入库操作,并输出库内图书的资料和库存图书存量。
按提示操作可进行循环操作。
输入数据如下:
进行何种操作?
1、新书入库2、删除旧书3、查询库存图书1
是否进行新书入库操作?
1、是2、否1
请输入书号:
00001
请输入书名:
Shujujiegou
请输入作者:
YanHuiming
请输入出版社:
TSINGHUACOMPUTER
请输入价格:
18
请输入页数:
216
是否继续进行新书入库操作?
1、是2、否1
请输入书号:
00003
请输入书名:
Shujujiegotiji
请输入作者:
YanHuiming
请输入出版社:
TSINGHUACOMPUTER
请输入价格:
16
请输入页数:
256
是否继续进行新书入库操作?
1、是2、否1
请输入书号:
00002
请输入书名:
Clanuage
请输入作者:
TanHaoqiang
请输入出版社:
TSINGHUACOMPUTER
请输入价格:
19
请输入页数:
398
是否继续进行新书入库操作?
1、是2、否1
请输入书号:
00004
请输入书名:
CollageEnglish
请输入作者:
MrWilliam
请输入出版社:
ZHEJIANGCOLLAGE
请输入价格:
49
请输入页数:
582
是否继续进行新书入库操作?
1、是2、否2
是否继续进行图书库管理操作?
1、是2、否2
进行何种操作?
1、新书入库2、删除旧书3、查询库存图书3
以下为库存图书:
书号:
00001书名:
Shujujiegou作者:
YanHuiming出版社:
TSINGHUACOMPUTER价格:
18页数:
216
书号:
00002书名:
Clanuage作者:
TanHaoqiang出版社:
TSINGHUACOMPUTER价格:
19页数:
398
书号:
00003书名:
Shujujiegoutiji作者:
YanHuiming出版社:
TSINGHUACOMPUTER价格:
16页数:
256
书号:
00004书名:
CollageEnglish作者:
MrWilliam出版社:
ZHEJIANGCOLLAGE价格:
49页数:
582
删除操作雷同。
选择2:
根据相应提示信息输入要删除图书的书号,即可进行删除操作,并输出库内图书的资料和库存图书量。
按提示操作可进行循环操作。
选择3:
输出库内图书的资料和库内图书存量。
*/
退回界面选择manageofborrower选项
退回界面选择borrower选项,出现如下提示:
请输入借书证号:
00012
请输入要借书书号:
00002;
借书操作成功!
是否继续进行借书操作?
1是/2否1
请输入借书证号:
001100
对不起!
该借书证号不存在
借书操作失败!
是否继续进行借书操作?
1是//2否2
退回界面选择Returnbook选项,出现如下提示:
请输入还书者借书证号:
00012
还书操作成功!
是否继续进行还书操作?
1是/2否1
请输入还书者借书证号:
001100
对不起借书证号不存在!
还书操作失败!
退回界面选择search选项,出现以下提示:
请选择你要查找的方式:
1,按书名查找;
2,按作者查找;
3,按出版单位查找;
4,按借阅者查找;
5,自定义查找;
6,退出。
;
选择1
请输入您想要查找的书名,按回车结束.
Shujujiegou
该书的书号为:
00001
该书的书名为:
Shujujiegou
该书出版单位为:
TSINGHUACOMPUTER
该书作者为:
Yanhuiming
该书页数为:
216
该书定价为:
18
该书当前册数为:
1
如果库内没有这本书则输出
对不起,库内没有图书!
是否继续进行查找操作?
1、是,2、否2
是否继续进行查找操作?
1、是,2、否1
以下操作雷同。
是否继续进行查找操作?
1、是,2、否2
退回界面。
六、用户使用说明书:
首先欢迎您使用本图书馆管理系统。
本系统主要面向中、小型的图书馆的管理人员。
运行主程序后,您将能够看到一个带有欢迎界面的窗口,上面有您所能进行的操作,您可以在这里选择。
当选中相应菜单条的时候,文字会由白色变为蓝色,按下Enter(回车键)开始进行操作。
1本程序的运行环境为纯dos操作系统,执行文件为library.exe.
2借书:
在菜单中选择Borrow项,按下Enter(回车键)进行借书操作。
进入后按照提示操作,
以Enter(回车键)作为结束。
3还书:
在菜单中选择Return项,按下Enter(回车键)进行还书操作。
4查询:
在菜单中选择Search项,按下Enter(回车键)进行查找操作。
5图书管理:
在菜单中选择Manageofbook项,按下Enter(回车键)进行书库操作。
按提示操作可进行循环操作。
5、借阅者管理:
在菜单中选择Manageofborrow项,按下Enter(回车键)进行借阅者资料库操作。
6、退出:
在菜单中选择Exit项,按下Enter(回车键)退出本系统。
另外您可以在任何图形界面下按ALT_X键或ESC键退出系统。
(附)源程序:
structbooktype
{
intbooknumber;/*书号*/
charbookname[20];/*书名*/
charauther[20];/*作者*/
charpress[50];/*出版单位*/
intprice;/*定价*/
intpagenumber;/*页数*/
intnownumber;/*当前册数*/
time_tborrowtime;/*借书时间*/
time_treturntime;/*还书时间*/
charborrowernum;/*借书人证号*/
structbooktype*next;
}*g_book_list;
structborrowertype
{
intcardnumber;/*借书证号*/
charname[20];/*姓名*/
charsex[10];/*性别*/
chartel[10];/*联系电话*/
charunit[80];/*工作单位*/
intlendnumber;/*借书数目*/
intbooknumber;/*所借书号*/
structborrowertype*next;
structborrowertype*prev;
}*g_borrower_list;
intm;
structk
{intnumber;
charname[16];
structk*new;
}k;
voidprint(head)/*输出库存资料*/
structbooktype*head;
{structbooktype*p;
printf("以下为库存图书:
\n");
p=head;
if(head!
=NULL)
{do
{printf("书号:
%d",p->booknumber);
printf("书名:
%s",p->bookname);
printf("作者:
%s",p->auther);
printf("出版单位:
%s",p->press);
printf("价格:
%d",p->price);
printf("页数:
%d\n",p->pagenumber);
p=p->next;
}while(p!
=NULL);
}
elseprintf("库内没有图书!
\n");
}
structbooktype*del(head,num)/*删除旧书*/
longnum;
structbooktype*head;
{structbooktype*p1,*p2;
if(head==NULL)
{printf("库内没有图书,无法进行删除操作!
\n");
gotoend;
}
p1=head;
while(num!
=p1->booknumber&&p1->next!
=NULL)
{p2=p1;
p1=p1->next;
}
if(num==p1->booknumber)
{if(p1==head)
head=p1->next;
else
{p2->next=p1->next;
m=m-1;
}
}
else
printf("库中没有该图书!
\n");
end:
return(head);
}
structbooktype*insert(head,newbook)/*新书入库操作*/
structbooktype*newbook,*head;
{structbooktype*p0,*p1,*p2;
p1=head;
p0=newbook;
if(head==NULL)
{head=p0;p0->next=NULL;}
else
{while((p0->booknumber>p1->booknumber)&&(p1->next!
=NULL))
{p2=p1;p1=p1->next;}
if(p0->booknumber
{if(head==p1)
head=p0;
else
{p2->next=p0;p0->next=p1;}}
else
{p1->next=p0;p0->next=NULL;}}
m=m+1;
return(head);
}
kucaozuo(head)/*书库管理*/
structbooktype*head;
{structbooktype*book;
longdel_num;
intu,v,w,x,y,z;
head=NULL;
do
{printf("进行何种操作?
1.新书入库2.旧书删除3.查询库内图书\n");
scanf("%d",&v);
if(v==1)
{printf("是否进行新书入库操作?
1.是2.否\n");
scanf("%d",&w);
if(w==1)
{do
{book=(structbooktype*)malloc(LEN);
printf("请输入新书数据:
\n");
printf("请输入书号:
");
scanf("%d",&book->booknumber);
printf("请输入书名:
");
scanf("%s",&book->bookname);
printf("请输入作者:
");
scanf("%s",&book->auther);
printf("请输入出版单位:
");
scanf("%s",&book->press);
printf("请输入图书价格:
");
scanf("%d",&book->price);
printf("请输入页数:
");
scanf("%d",&book->pagenumber);
head=insert(head,book);
print(head);
printf("是否继续进行新书入库操作?
1.是2.否\n");
scanf("%d",&x);
}while(x==1);
}
}
else
{if(v==2)
{printf("是否进行删除操作?
1.是2.否\n");
scanf("%d",&y);
if(y==1)
{do
{printf("请输入要删除的书号:
\n");
scanf("%ld",&del_num);
head=del(head,del_num);
print(head);
printf("是否继续进行删除操作?
1.是2.否\n");
scanf("%d",&z);
}while(z==1);
}
}
else
{printf("库内图书资料:
\n");
print(head);
printf("库内图书数目为:
%d\n",m);
}
}
printf("是否继续进行书库管理操作?
1.是2.否\n");
scanf("%d",&u);
}while(u==1);
return(head);
}
/************************************************************************************/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书馆 ADT