1、书号书名指针1作者指针2出版社指针3分类藏书量借出数1 1021数据库小云人民邮电821014小洋中国科学013631106操作系统许海平1741108一清华大学51203程序设计220123600030a)图书主索引文件链头地址长度b)书名索引链头文件 c) 作者索引链头文件 d)出版社索引链头文件 二、设计容设计一个计算机管理系统完成图书管理基本业务。(1)每种书的登记容包括书号、书名、著作者、现存量和库存量;(2)对书号建立索引表(线性表)以提高查找效率;(3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;(4)借阅:如果一种书的现存量大于0,则借
2、出一本,登记借阅者的书证号和还期限,改变现存量;(5)归还:注销对借阅者的登记,改变该书的现存量。三、概要设计:确定所需模块及模块间调用关系分析:首先应该定义借书人的结构体信息和图书结构体信息,为了便于查找图书和借书人,分别对其建立单链表。然后定义buy(),SearchByNum (),SearchByName(), borrow(),return()五个函数分别实现图书采编入库的功能,按书号查询的功能,按书名查找的功能,借书功能和还书功能。.根据任务的要求,先定义头文件。然后写出借书人和图书的结构体信息。为了便于查找图书和存储借书人的信息,分别对借书人和图书采用链表的形式存放。/头文件的声
3、明 #include string.hstdlib.h#define MAXSIZE 100 /最大值定义为100 #define LIST_INIT_SIZE 100/图书证使用者最大值定义为100 /借书人的结构体 typedef struct Boro/借书记录 char BNum20;/所借书的书号 char BorDate8;/借书日期 char RetDate8;/归还日期 struct Boro *next;Bor;typedef struct LinkBook Bor *next;/该图书证的借书记录 char CNum20;/图书证号 int Total;/借书的数量 len
4、dLIST_INIT_SIZE;/借书人数组 /图书的结构体信息 typedef struct LNode char CardNum20;struct LNode *next;LinkList; /借书人 typedef struct book /每种图书需要登记的容包括书号、书名、作者、出版社、总库存量和现库量。char num20;/书号 char name20;/书名 char auth20;/作者 char pub20;/出版社 int TotNum;/总库存 int NowNum;/现库存 LinkList *next;/借了该书的人 ook;1、新图书采编入库的设计方案 采编入库:
5、新购入一种书,如果该书在图书账目中已经存在,则将其库存量增加(包括总库存量和现库存量),如果该书不存在,则在图书账目中增加一种书,总库存量和现库存量均为1。为了便于查找,另外定义了一个专门用于查找的函数BinarySearch(),使用的是折半查找法。(1)折半查找法查找书号 int mid=0;/外部函数mid,用来返回查找到的位置 int BinarySearch(ook boo,char SearchNum) /二分法查找比较书号 由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置 int low=0,high=total-1; int found=0; whil
6、e(lowmid&total;i-) /插在适合位置 保持有序 booi=booi-1; /空出插入位置 该书在书库中不存在。设立新书目,请补全书的详细信息。 strcpy(booi.num,BuyNum);该书购入的数量是: scanf( %d,&booi.NowNum); booi.TotNum=booi.NowNum;该书的名字是: %sbooi.name);该书的作者是:booi.auth);该书的出版社是:booi.pub);/补全信息 booi.next=NULL; total+;/总量+1 已增加该书的信息。编号 %s 的书 %s 作者是 %s ,出版社是 %s ,目前的总库存是
7、 %d ,现库存是 %d 。booi.num,booi.name,booi.auth,booi.pub,booi.TotNum,booi.NowNum);3、查找图书的设计方案 为了更便于查找,这里设计了两种查找方案,按书号查找和按书名查找。在按书号查找中使用了折半查找法的查找函数。按书号查找方案中都显示图书的所有状态,包括是在库还是借出,如果借出,并显示何人借走。(1).按书号查找 void SearchByNum(ook &boo,char SeaNum) /BY NUM 根据书号查找 LinkList *p; p=boomid.next; if(BinarySearch(boo,SeaN
8、um)=false)printf(对不起,未找到您想查找的书。/二分查找 没找到 else/找到了的话 printf( 书号 书名 作者 出版社 现库存 总库存 n-n%10s%10s%10s%10s%10d%10dnboomid.num,boomid.name,boomid.auth,boomid.pub,boomid.NowNum,boomid.TotNum);if(boomid.next!=NULL) printf( 已借该书的 n 图书证号 n while(p) %14sn,p-CardNum); p=p-next; %s /在按书号查找的函数里也显示借了这本书的借阅者的证号 n /显示查找的书籍的信息 (2).按书名查找 void SearchByName(ook &boo) /BY NAME 根据书名查找 char SeaName20;输
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1