数据结构课程设计图书管理系统Word文档格式.docx
《数据结构课程设计图书管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计图书管理系统Word文档格式.docx(23页珍藏版)》请在冰豆网上搜索。
(9)StrCat(S,T)
(10)SubString(Sub,S,pos,len)
(11)StrIndex(S,pos,T)
(12)StrReplace(S,T,V)
(13)StrDestroy(S)
}ADTString
●系统中的子程序和功能说明:
InitBo(Book&
boo);
初始化图书信息
InitRe(lend&
Lin);
初始化借阅者信息
BinarySearch(Bookboo,charSearchNum[]);
二分法查找比较书号
Buy(Book&
boo,charBuyNum[]);
新书采编入库系统
Delete(Book&
boo,charDeleteNum[]);
清除图书信息系统
Borrow(Book&
boo,lend&
Lin,charBorrowNum[],charCaNum[]);
借阅图书处理系统
Return(Book&
Lin,charReturnNum[],charBorrowerNum[]);
归还图书系统
SearchByNum(Book&
boo,charSeaNum[]);
按书号查找系统
SearchByName(Book&
按书名查找系统
SearchByAuth(Book&
按作者查询系统
Menu();
主菜单显示系统
Search();
查询系统子菜单
main();
主函数
●系统程序功能结构图
三详细设计
●功能实现过程
boolBinarySearch(Bookboo,charSearchNum[])//二分法查找比较书号
{
while(low<
=high)
{
计算中间点;
if(查找到书号相同的)
{
返回值true;
}
if(查找书号不相同)
用二分法进一步进行查找;
}
if(库中没有所要查找的书)
返回值false;
}
voidBuy(Book&
boo,charBuyNum[])/*采编入库*/
if(书库中有此书)
总库存加1;
现库存加1;
if(书库中无此书)
for(i=total;
i>
mid&
&
total;
i--)/*将新采购的书插在适合位置,保持有序*/
空出插入位置;
输入新购书籍的相关信息:
书号、书名、作者、出版社;
boo[i].next=NULL;
total++;
/*总量加1*/
voidDelete(Book&
boo,charDeleteNum[])/*清除图书信息*/
if(书库中没有此书)
输出“无此书”;
if(书库中有此书)
strcpy(连续两本书的相关信息);
现存量减1;
库存量减1;
else输出“此书已有借阅者,无法删除!
”;
voidBorrow(Book&
Lin,charBorrowNum[],charCaNum[])/*借阅图书信息*/
if(没有找到此书)输出“书库中无此书!
if(书库中有此书)
借出一本书后,该书的现存量减1;
并在借阅记录链表中插入该条记录;
再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;
如果无该读者证号信息,申请新单链表存放借阅记录。
else输出“该书现存量为0”;
voidReturn(Book&
Lin,charReturnNum[],charBorrowerNum[])/*归还图书信息
*/
if(书库中无此书)
输出“无此书记录”;
查找图书文件,修改图书的现存量;
查找记录借阅信息的单链表,填入还书日期,删除借阅信息;
查找记录读者信息的单链表,删除证号信息。
voidSearchByNum(Book&
boo,charSeaNum[])/*按书号查找*/
if(书库中无此书信息)/*用二分法查找*/
输出“无此书”;
else/*书库中有此书信息*/
输出与此书有关的相关信息;
voidSearchByName(Book&
boo)/*按书名查找*/
输入想要查找书的书名;
用顺序查找法查找;
if(查找到需要查找的书)
输出与此书相关的信息;
建议画出主要模块流程图。
四设计与调试分析
1、这个程序设计中要注意定义两个结构体:
图书结构体、借阅人结构体。
其中定义数组存放图书信息,申请链表存放借阅记录和读者信息记录。
2、程序中运用到大多的插入与删除,所以申请链表比较方便插入与删除。
但应前期需求分析的准备工作不充分,导致程序运行功能不全,比如查找时关于此书的信息不能全部显示出来,并且添加删除时库存的变化不能直接显示出来。
程序的健壮性不能达到预期的结果,这些都是需要改进的。
3、在程序中的函数调用是个非常重要的部分,也是经常需要用到的,在编写程序过程中,因为函数调用不准确,使得循环进不去,后来改变函数的调用关系,才达到了预期结果。
4、程序中还定义了全局变量,之前没定义全局变量,在下面的编写过程,同样性质的地方需要重复定义,比较麻烦,定义全局变量使得程序比较简明一点。
五用户手册
【使用说明】
1、进入图书馆管理系统主页面
2、若有新书要新编入库,选择1,进入新书入库系统,输入入库书的书号,若书库中无该书,则设立新书目,输入新书信息。
若书库中已有该书,则输入新信息覆盖修改原书库中该书号对应书的信息。
3、若有书籍信息需要删除,选择2,进入清空库存系统,输入想要删除书的书号,则此书信息就已删除。
4、若要借阅图书,选择3,进入图书借阅系统,输入需要借阅书的书号以及读者证号,并输入还书日期,则借书成功。
5、若要归还图书,选择4,进入图书归还系统,输入需要归还图书的书号以及读者证号,则还书成功。
6、若要查找信息,选择5,进入查找信息子系统。
若要按书号查找,则选择子系统中的1,输入需要查找的书的书号,若按书名查找,则选择子系统中的2,输入需要查找的书名,若按作者查找,输入需要查找书的作者进行查找,若查找结束,则按0退出。
7、若系统使用结束,按0退出。
【程序中的头文件】
#include<
stdio.h>
string.h>
stdlib.h>
#defineMAXSIZE100
#defineLIST_INIT_SIZE100
intRetotal;
/*定义的全局变量*/
inttotal;
六测试成果
1、采编入库
2、清空库存
3、图书借阅
4、图书归还
5、图书查找
七附录(源程序清单)
typedefstructBoro
charBNum[20];
charRetDate[8];
structBoro*next;
}Bor;
typedefstructLinkBook
{
Bor*next;
charCNum[20];
intTotal;
}lend[LIST_INIT_SIZE];
typedefstructLNode
charCardNum[20];
structLNode*next;
}LinkList;
typedefstructbook
charnum[20];
charname[20];
charauth[20];
charpub[20];
intTotNum;
intNowNum;
LinkList*next;
}Book[MAXSIZE];
voidInitBo(Book&
boo)
for(inti=0;
i<
MAXSIZE;
i++)
boo[i].NowNum=0;
boo[i].TotNum=0;
boo[i].next=NULL;
voidInitRe(lend&
Lin)
LIST_INIT_SIZE;
Lin[i].next=NULL;
intmid=0;
boolBinarySearch(Bookboo,charSearchNum[])
intlow=0,high=total;
intfound=0;
mid=(low+high)/2;
if(strcmp(boo[mid].num,SearchNum)==0)
found=1;
returntrue;
if(strcmp(boo[mid].num,SearchNum)!
=0)
high=mid-1;
else
low=mid+1;
if(found==0)
returnfalse;
voidBuy(Book&
boo,charBuyNum[])
inti;
if(BinarySearch(boo,BuyNum))
{
boo[mid].TotNum++;
boo[mid].NowNum++;
printf("
入库成功.\n"
);
已更改书库中该书的信息。
\n"
编号:
%s书名:
%s"
boo[mid].num,boo[mid].name);
作者:
%s出版社:
%s"
boo[mid].auth,boo[mid].pub);
if(!
BinarySearch(boo,BuyNum))
i--)
boo[i]=boo[i-1];
该书在书库中不存在,设立新书目!
strcpy(boo[i].num,BuyNum);
该书购入的数量是:
"
scanf("
%d"
&
boo[i].NowNum);
boo[i].TotNum=boo[i].NowNum;
该书的名字是:
%s"
boo[i].name);
该书的作者是:
boo[i].auth);
该书的出版社是:
boo[i].pub);
total++;
已增加该书的信息!
boo[i].num,boo[i].name);
boo[i].auth,boo[i].pub);
boo,charDeleteNum[])
if(BinarySearch(boo,DeleteNum)==false||total==0)
书库中没有该书.\n"
if(BinarySearch(boo,DeleteNum))
if(!
boo[mid].next)
intj;
for(j=mid;
j<
j++)
boo[j]=boo[j+1];
strcpy(boo[j].num,boo[j+1].num);
strcpy(boo[j].name,boo[j+1].name);
strcpy(boo[j].auth,boo[j+1].auth);
strcpy(boo[j].pub,boo[j+1].pub);
boo[j].TotNum=boo[j+1].TotNum;
boo[j].NowNum=boo[j+1].NowNum;
printf("
已成功删除该书.\n"
该书有借阅者,无法删除。
Lin,charBorrowNum[],charCaNum[])
Bor*p,*q;
LinkList*m,*n;
BinarySearch(boo,BorrowNum)||total==0)
书库里没这书。
if(BinarySearch(boo,BorrowNum))
if(boo[mid].NowNum>
0)
{
boo[mid].NowNum--;
if(boo[mid].next==NULL)
{
m=(LinkList*)malloc(sizeof(LNode));
boo[mid].next=m;
strcpy(m->
CardNum,CaNum);
m->
next=NULL;
}
else
m=boo[mid].next;
while(m->
next)
m=m->
next;
n=(LinkList*)malloc(sizeof(LNode));
next=n;
strcpy(n->
n->
inti=0;
for(i=0;
Retotal;
if(!
strcmp(Lin[i].CNum,CaNum))
{
p=Lin[i].next;
while(p->
next)p=p->
q=(Bor*)malloc(sizeof(Boro));
p->
next=q;
strcpy(q->
BNum,BorrowNum);
printf("
输入归还日期:
scanf("
q->
RetDate);
q->
借阅成功.\n"
break;
}
if(i==Retotal)
strcpy(Lin[i].CNum,CaNum);
p=(Bor*)malloc(sizeof(Boro));
Lin[i].next=p;
strcpy(p->
p->
Retotal++;
}
else
printf("
借阅失败.该书现在库存为0.\n"
Lin,charReturnNum[],charBorrowerNum[])
intflag=0;
BinarySearch(boo,ReturnNum)||!
total)
printf("
书库中无此书.\n"
if(BinarySearch(boo,ReturnNum))
m=boo[mid].next;
strcmp(m->
CardNum,BorrowerNum))
boo[mid].NowNum++;
boo[mid].next=m->
free(m);
else
while(m->
if(!
next->
n=m->
next=n->
free(n);
boo[mid].NowNum++;
break;
m=m->
}
strcmp(Lin[i].CNum,BorrowerNum))
p=Lin[i].next;
if(!
strcmp(p->
BNum,ReturnNum))
Lin[i].next=p->
free(p);
成功归还该书.\n"
flag=1;
break;
while(p->
q=p->
next=q->
free(q);
flag=1;
p=p->
for(intk=0;
k<
k++)
Lin[k].next)
for(j=k;
Lin[j]=Lin[j+1];
strcpy(Lin[j].CNum,"
"
Retotal--;
}
if(flag==0)
无该证信息.\n"
boo,charSeaNum[])
LinkList*p;
p=boo[mid].next;
if(BinarySearch(boo,SeaNum)==true)
书号:
%s\n"
boo[mid].num);
书名:
boo[mid].name);
作者名:
boo[mid].auth);
出版社:
boo[mid].pub);
现存量:
boo[mid].NowNum);
库存量:
boo[mid].TotNum);
\n"
else
对不起,未找到您想查找的书。
boo)
charSeaName[20];
输入想查找的书的书名:
scanf("
SeaName);
此书存在!
if(strcmp(SeaName,boo[i].name)==0)
编号:
总库存量:
boo[i].TotNum);
现库存量:
boo[i].NowNum);
}
voidSearchByAuth(Book&
charSeaAuth[20];
输入想查找的书的作者:
SeaAuth);
printf