图书管理系统.docx
- 文档编号:29586181
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:14
- 大小:76.47KB
图书管理系统.docx
《图书管理系统.docx》由会员分享,可在线阅读,更多相关《图书管理系统.docx(14页珍藏版)》请在冰豆网上搜索。
图书管理系统
程序实践报告
姓名:
张涛
班级:
电子1202
学号:
20123684
1、功能概述
图书信息的增加和删除:
允许在此管理系统中增加一新的图书信息,包括书号,书名,作者名,出版社以及入库数,若新增图书为库中已有,则使现库存和总库存加1,在成功后显示入库成功信息;并可通过输入已入库图书的书号删除该图书信息,删除后显示删除成功信息。
图书的查找:
可以通过图书的书号查找图书信息,当查找成功时输出图书的信息,包括书号,书名,作者名,出版社,现库存和总库存以及借此书的借书证号(若被借阅),当查找失败时返回查找失败信息。
也可通过书名以及作者名查找图书信息,当查找成功时输出图书的信息,包括书号,书名,作者名,出版社,现库存和总库存。
当查找失败时返回空信息。
图书的借阅:
在查找到想要借阅的图书的书号后,输入书号,再输入借阅者的图书证号,并在同时输入图书的归还日期实现图书借阅,返回借阅成功的信息,现库存量减1,同一证号不能重复借阅同一本书。
输入无效的书号不能借阅成功。
图书的归还:
输入要归还的书的书号,并输入借书的借书证号,只有两个信息都输入正确时才能成功归还,返回归还成功信息,现库存量加1。
否则返回归还失败信息。
借阅者借书信息查询:
通过输入借书证号查询该借书证借阅的书籍书号,若某证号没有借阅行为,则返回证号不存在信息。
超期未还图书查询:
输入当前日期,查找超期未还图书信息,包括书号,借书证号,应归还日期,若没有超期未还图书,返回空信息。
2功能实现
图书信息查找流程图
用以下函数实现查找功能
voidSearchByNum(ook&boo,charSeaNum[])
按书号查找
voidSearchByName(ook&boo)
按书名查找
voidSearchByAuth(ook&boo)
按作者查找
图书借阅模块流程图
voidBorrow(ook&boo,lend&Lin,charBorrowNum[],charCaNum[])
借阅:
如果一种书的现库存量大于零,则借出一本书,将现库存量减1,并登记借阅者的图书证号和归还期限。
调试程序关键部分。
#include
#include
#include
//
#defineMAXSIZE100//最大值定义为100
#defineLIST_INIT_SIZE100//图书证使用者最大值定义为100
//借书人的结构体
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
{//每种图书需要登记的内容包括书号ISBN、书名、作者、出版社、总库存量和现库存量。
charnum[20];//书号
charname[20];//书名
charauth[20];//作者
charpub[20];//出版社
intTotNum;//总库存
intNowNum;//现库存
LinkList*next;//借了该书的人
}ook[MAXSIZE];
//
intRetotal;//读者数量
inttotal;//定义外部变量.书的种类数
//
//结构体初始化
voidInitBo(ook&boo)//初始化图书信息
{total=0;
for(inti=0;i { boo[i].NowNum=0; boo[i].TotNum=0; boo[i].next=NULL; } } voidInitRe(lend&Lin)//初始化借阅者信息 { for(inti=0;i Lin[i].next=NULL; } // intmid=0;//外部函数mid,用来返回查找到的位置 boolBinarySearch(ookboo,charSearchNum[])//二分法查找比较书号 {//用bool函数,但由于函数不能有两个返回值,所以设置一个外部变量mid,用来返回查找到的位置 intl=0; for(inti=0;i { if(strcmp(boo[i].num,SearchNum)==0)//如果书名一样 { mid=i; l=1; returntrue;//查找成功 }//显示符合信息的所有书籍的信息 } if(l==0) returnfalse;//查找失败 } voidBuy(ook&boo,charBuyNum[]) 借阅: 如果一种书的现库存量大于零,则借出一本书,将现库存量减1, //并登记借阅者的图书证号和归还期限。 intl=1; Bor*p,*q; LinkList*m,*n; if(total==0)//如果没有找到此书 printf("书库里没有书。 \n");//如果没有书 elseif(! BinarySearch(boo,BorrowNum)) printf("书库里没这书。 \n");//如果有这书 else//书库里有 { if(boo[mid].NowNum>0)//看现库存是否大于0 { 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)//遍历到最后一个结点 { if(strcmp(m->CardNum,CaNum)==0)//一个学生只准借一类书的一本 { l=0; break; } n=m; m=m->next; } if(l==0) { printf("你已经借过此书,请还书后再借! \n"); return; } m=(LinkList*)malloc(sizeof(LNode));//分配 n->next=m;//m变为图书信息中的链表的最后一个结点 strcpy(m->CardNum,CaNum); m->next=NULL;//m后一个结点为空 } boo[mid].NowNum--;//借出一本,少1 inti=0; for(i=0;i { if(! strcmp(Lin[i].CNum,CaNum))//如果已经有该图书证的信息 { p=Lin[i].next; while(p->next)p=p->next;//遍历到最后一个结点 q=(Bor*)malloc(sizeof(Boro));//分配空间 p->next=q; strcpy(q->BNum,BorrowNum);//记录书号 printf("输入归还日期: "); scanf("%s",&(q->RetDate)); q->next=NULL; printf("借阅成功.\n"); break;//找到证了就跳出循环 } } if(i==Retotal)//如果没有这张证的信息 { strcpy(Lin[i].CNum,CaNum);//记录证号 p=(Bor*)malloc(sizeof(Boro));//分配空间 Lin[i].next=p; strcpy(p->BNum,BorrowNum); printf("输入归还日期: "); scanf("%s",&p->RetDate); p->next=NULL; Retotal++;//借阅证号信息总数加1 printf("借阅成功.\n"); } } elseprintf("借阅失败.该书现在库存为0.\n"); } } voidSearchByName(ook&boo) {//BYNAME根据书名查找 charSeaName[20]; printf("输入想查找的书的书名: \n"); scanf("%s",&SeaName); printf("找到符合该书名的书的详细信息如下: \n"); for(inti=0;i { if(strcmp(SeaName,boo[i].name)==0)//如果书名一样 { printf("书号: %s\n书名: %s\n作者: %s\n出版社: %s\n总库存量: %d\n现库存量: %d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum); }//显示符合信息的所有书籍的信息 } } voidSearchByAuth(ook&boo) {//BYAUTH根据作者查找 charSeaAuth[20]; printf("输入想查找的书的作者: \n"); scanf("%s",&SeaAuth); printf("找到符合该作者的书的详细信息如下: \n"); for(inti=0;i { if(strcmp(SeaAuth,boo[i].auth)==0)//如果作者一样 { printf("书号: %s\n书名: %s\n作者: %s\n出版社: %s\n总库存量: %d\n现库存量: %d\n\n",boo[i].num,boo[i].name,boo[i].auth,boo[i].pub,boo[i].TotNum,boo[i].NowNum); }//显示符合信息的所有书籍的信息 } } 查看: 可查看某图书证号的借阅者借阅的全部图书,可查看全部超期未还的图书。 voidViewCard(ook&boo,lend&Lin) {//查看某图书证号的借阅者借阅的全部图书 charNum[20]; printf("请输入您所想要查看的图书证号: \n"); scanf("%s",&Num); Bor*p; intqqq=0; for(inti=0;i { if(strcmp(Lin[i].CNum,Num)==0)//找到该证 { printf("这个证借的书有: \n"); p=Lin[i].next; while(p) { printf("%s",p->BNum);//书号 p=p->next; } printf("\n"); qqq=1; break; } } if(qqq==0) printf("该证不存在.\n"); } 4.调试分析 图书查找界面 第五章结束语 经过两个多月的学习和工作,我终于完成了《图书管理系统》的论文。 从开始接到论文题目到系统的实现,再到论文文章的完成,每走一步对我来说都是新的尝试与挑战,这是我在大学其间完成的最大的项目。 在这段时间里我学到了很多知识也有很多感受。 从对access的很不了解的状态,,我开始独立的学习和试验,查看相关的资料和书籍,让自己头脑中模糊的概念逐渐清晰,使自己非常稚嫩作品一步步完善起来,每一次改进都是我学习的收获,每一次试验的成功都会让我兴奋好长一段时间。 虽然我的论文作品不是很成熟,还有很多不足之处,但我可以自豪的说,这里面的每一段代码。 都有我的劳动。 当看着自己的程序,自己成天相半的系统能够健康的运行,真实莫大的幸福和欣慰。 我相信其中的酸甜苦辣都最终会化为甜美的甘泉。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 系统