图书管理基本业务数据结构课程设计报告.docx
- 文档编号:8552704
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:22
- 大小:326.14KB
图书管理基本业务数据结构课程设计报告.docx
《图书管理基本业务数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《图书管理基本业务数据结构课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。
图书管理基本业务数据结构课程设计报告
图书管理基本业务(数据结构课)程设计报告
某大学某学院
数据结构课程课程设计
设计题目:
图书管理基本业务
姓名:
XX
学号:
0123456789
专业班级:
12级软件工程
(1)班
院系:
信息工程学院
设计时间:
2012-2013学年第2学期
设计地点:
计算机中心公共机房B区
指导教师签名:
年月日
2需求分析
2.1课程设计要求
(1)用C语言实现程序设计;
(2)利用结构体、单链表的基本操作进行相关信息处理;
(3)画出查询模块的流程图;
(4)系统的各个功能模块要求函数的形式实现;
(5)界面友好(良好的人机交互),程序要有注释。
2.2课程设计任务
设计一个计算机管理系统完成图书管理基本业务。
1)馆藏图书信息。
每种书的登记内容包括书号、书名、著作者、现存量和库存量;
2)图书查询。
对书号查找,并显示所查找图书的所有信息,包括书号、书名、著作者、现存量、库存量和借阅者姓名;
3)系统主要功能如下:
采编入库:
新购一种书确定书号后,登记到图书帐目表中,如果表中已有,则将库存量和现存量增加;
②读者借阅:
若一种书的现存量大于0,则借出一本,登记借阅者的姓名,改变现存量,若一种书的现存量为0,则提示该书库存不足,读者无法借阅;
③读者归还:
注销对借阅者的登记,改变该书的现存量。
2.3分析用例
书号
书名
著作者
现存量
库存量
借阅者姓名
1
高等数学
同济大学
5
5
NULL
2
数字电路
清华大学
3
3
NULL
3
大学英语
蔡基刚等
0
0
NULL
4
基本算法
戴燕等著
3
3
NULL
5
三言二拍
冯梦龙等
5
5
NULL
3设计思路
本程序是以单链表的基本操作为基础,进行改造升级,而形成的图书管理基本操作程序。
图书馆基本业务模拟包含多方面的操作,其中本程序描述的是图书馆的新书入库、图书馆借阅、归还、信息查询(书籍信息查询)等功能。
1)新书入库功能:
新到书籍入库包含几方面的操作:
查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和书籍总量,若不存在,则新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书名(字符串类型)、该书作者名(字符串类型)、该书的现存量(整型)、该书的总量(整型)。
输入该信息之后,将该节点插入到书籍信息链表中去。
该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。
2)借阅功能
书籍借阅主要涉及存书库和读者信息库双方的更新。
用户首先使用系统,查询该书是否存在,该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。
若以上条件都满足,则将该读者的可借书数量减一,该存书的可借数量减一。
3)归还功能
按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,删除该书的读者借阅信息(姓名),然后返回。
4)信息查询功能
信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可借书本书以及所借书的信息),还可查询书籍信息,可根据书籍的编号来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。
查询到该书籍后显示是否借阅该书籍。
4详细设计
首先定义一个定义一个单链表的结点
typedefstructnode
{
intnum;//书号
chartitle[50];//书名
charauthor[50];//著作者
intnum1;//现存量
intnum2;//库存量
charname[50];//借阅者姓名
structnode*link;
}linklist;
此结点包括书号,书名,著作者,现存量,库存量,借阅者姓名。
linklist*creatnull(linklist*l)//建立一个带头的结点;
{
l=(linklist*)malloc(sizeof(linklist));
l->link=NULL;
returnl;
}
馆藏图书信息模块
voidprint(linklist*l)//输出所有图书的信息
{
linklist*p;
p=l->link;
printf("\n输出所有图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
while(p)
{
printf("\n%d\t%s\t%s\t%d\t%d\t%s",p->num,p->title,p->author,p->num1,p->num2,p->name);
p=p->link;//指针指向下一个
}
}
通过对单链表的输出来完成对馆藏图书信息的输出;
采编入库模块
voidcreat(linklist*l)//采编入库
{
inti,n;
linklist*p,*tail,*q;
tail=l;if(l->link!
=NULL)q=l->link;elseq=l;
while(tail->link!
=NULL){tail=tail->link;};
printf("\n请输入入库图书的数量:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(linklist*)malloc(sizeof(linklist));
printf("\n请输入入库图书的书号:
");
scanf("%d",&p->num);
while(q->num!
=p->num&&q->link!
=NULL){q=q->link;}
if(q->num==p->num)
{
q->num1=q->num1+1;
q->num2=q->num2+1;
printf("\n该图书已在图书库存在,已自动增加图书数量");}
else{
printf("\n请输入入库图书的书名:
");
scanf("%s",&p->title);
printf("\n请输入入库图书的著作者:
");
scanf("%s",&p->author);
printf("\n请输入入库图书的现存量:
");
scanf("%d",&p->num1);
printf("\n请输入入库图书的库存量:
");
scanf("%d",&p->num2);
strcpy(p->name,"NULL");
tail->link=p;
tail=p;
tail->link=NULL;};
};
}
首先先判断该结点是否为空,若不为空,指针指向下一个结点。
若该结点为空,输入入库图书的数量,通过for循环依次输入书号,书名,著作者,现存量,库存量等信息。
其中while(q->num!
=p->num&&q->link!
=NULL){q=q->link;}
if(q->num==p->num)
{
q->num1=q->num1+1;
q->num2=q->num2+1;
printf("\n该图书已在图书库存在,已自动增加图书数量。
");}
根据输入的书号(入库的图书)与库存的书号(本库的图书)是否相同,若相同,不用输入该书的相关信息,便自动完成图书库存和现存量的增加。
并提示“该图书已在图书库存在,已自动增加图书数量。
”
根据书号查找图书模块
voidlocat(linklist*l,inti)//根据书号查找图书
{
linklist*p;
p=l->link;
while(p->num!
=i)
{
p=p->link;
};
If(p->limk!
=NULL)
{printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);}
elseprintf("该图书不在此书库!
");
}
通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息。
若不相同,则指针指向下一个结点,直到指向为NULL,结束并提示“该图书不在此书库!
”。
借阅模块
voidborrowbook(linklist*l)//借阅
{
linklist*p;inti;
printf("\n借阅的图书书号:
");
scanf("%d",&i);
p=l->link;
while(p->num!
=i)
{
p=p->link;
};
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);
if(p->num1<=0){printf("\n该书库存不足,读者无法借阅.");}
else{p->num1=p->num1-1;
printf("\n请输入借阅者的姓名:
");
scanf("%s",&p->name);
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);};
}
通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息,若库存不大于零,提示“该书库存不足,读者无法借阅.”,相反,则提示“请输入借阅者的姓名:
”,记录借阅者的姓名,现存量和库存量各减一个。
若不同,则指针指向下一个结点。
归还模块
voidreturnbook(linklist*l)//归还
{
linklist*p;inti;
printf("\n请输入归还图书的书号:
");
scanf("%d",&i);
p=l->link;
while(p->num!
=i)
{
p=p->link;
};
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);
p->num1=p->num1+1;
strcpy(p->name,"NULL");
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);
}
通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息。
若不同,则指针指向下一个结点。
Main函数模块
intmain()
{
linklistl,*head;
head=creatnull(&l);
printf("┌*********************************┐\n");
printf("│欢迎使用图书管理系统│\n");
printf("└*********************************┘\n");
printf("免费高效简单实用\n");
printf("\n\n\n\n");
intflag=1,a;
while(flag)
{
printf("1:
馆藏图书信息\n2:
采编入库\n3:
图书查询\n4:
读者借阅\n5:
读者归还\n6:
退出图书管理系统\n请输入您的选项:
");
scanf("%d",&a);
switch(a)
{
{
case6:
flag=0;
printf("┌*********************************┐\n");
printf("│已退出图书管理系统│\n");
printf("└*********************************┘\n");
break;
case1:
flag=1;
print(head);
printf("\n\n\n");
break;
case2:
flag=1;
creat(head);
printf("\n\n\n");
break;
case3:
flag=1;
intnumber;//书号
printf("\n请输入要查找的图书书号:
");
scanf("%d",&number);
locat(head,number);
printf("\n\n\n");
break;
case4:
flag=1;
borrowbook(head);
printf("\n\n\n");
break;
case5:
flag=1;
returnbook(head);
printf("\n\n\n");
break;
}
}
};
system("pause");
return1;
首先,定义一个该类型的结点和一个指向该类型的指针。
用creatnull()函数创建一个头结点,且指针指向该头结点。
然后输出用户界面,通过while循环和switchcase语句进行选择。
把各个功能模块都编辑在main函数。
5数据测试
(1)开始界面
图5.1开始界面
(2)采编入库模块
图5.2采编入库
图5.3采编入库
图5.4采编入库
图5.5采编入库
(3)根据书号查找图书模块
图5.6根据书号查找图书
图5.7根据书号查找图书
(4)借阅模块
图5.8读者借阅
图5.9读者借阅
(5)归还模块
图6.0读者归还
(6)退出模块
6.1退出界面
6总结体会
通过本次课程设计,让我对数据结构这门学科对有了进一步的认识,掌握了单链表的基本操作和应用。
以前对该课程不再那么恐惧,任何事情没有做不到只有愿不愿意去做。
之后凭借那闪现在眼前的点点思路,慢慢在琢磨,终于想出了大体的程序内容。
然后一个一个函数的思考,一步一步的编写,调试,做起来也就越来越顺手了。
通过我的反复思考,程序中的错误得到了解决。
函数功能也得到了进一步的完善。
并且在本次课程设计的过程中,让我知道一个人的力量真的好有限,即使个人能力再强,做一个大点的项目,也会力不从心。
所以遇到问题要学会去问同学,问老师,只有这样才能将事顺利办得越快越好。
通过这次课程设计,会为我们以后进入社会提供一定的经验。
我相信在今后的学习真的我会更加努力,积累经验。
使自己在编程等各方面得到提高。
参考文献
[1]孙玉方,张乃孝.实用C语言程序设计[M].北京:
北京大学出版(简体版),1989;台湾儒林出版公司(繁体版),1992.
[2]许卓群,张乃孝,杨冬青,等.数据结构[M].北京:
高等教育出版社,1987
[3].郭有强,C++面向对象程序设计[J].清华大学出版社,2009;
[4]朱晓龙,Java语言程序设计,北京邮电大学出版社,2011;
[5]WirthN.Algorithms+DataStructures=Programs[M].[S.I].Prentice
Hall.1976.
附录源代码
#include
#include
#include
typedefstructnode
{
intnum;//书号
chartitle[50];//书名
charauthor[50];//著作者
intnum1;//现存量
intnum2;//库存量
charname[50];//借阅者姓名
structnode*link;
}linklist;
linklist*creatnull(linklist*l)
{
l=(linklist*)malloc(sizeof(linklist));
l->link=NULL;
returnl;
}
voidcreat(linklist*l)//采编入库
{
inti,n;
linklist*p,*tail,*q;
tail=l;if(l->link!
=NULL)q=l->link;elseq=l;
while(tail->link!
=NULL){tail=tail->link;};
printf("\n请输入入库图书的数量:
");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
p=(linklist*)malloc(sizeof(linklist));
printf("\n请输入入库图书的书号:
");
scanf("%d",&p->num);
while(q->num!
=p->num&&q->link!
=NULL){q=q->link;}
if(q->num==p->num)
{
q->num1=q->num1+1;
q->num2=q->num2+1;
printf("\n该图书已在图书库存在,已自动增加图书数量");}
else{
printf("\n请输入入库图书的书名:
");
scanf("%s",&p->title);
printf("\n请输入入库图书的著作者:
");
scanf("%s",&p->author);
printf("\n请输入入库图书的现存量:
");
scanf("%d",&p->num1);
printf("\n请输入入库图书的库存量:
");
scanf("%d",&p->num2);
strcpy(p->name,"NULL");
tail->link=p;
tail=p;
tail->link=NULL;};
}
}
voidprint(linklist*l)//输出所有图书的信息
{
linklist*p;
p=l->link;
printf("\n输出所有图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
while(p)
{
printf("\n%d\t%s\t%s\t%d\t%d\t%s",p->num,p->title,p->author,p->num1,p->num2,p->name);
p=p->link;
}
}
voidlocat(linklist*l,inti)//根据书号查找图书
{
linklist*p;
p=l->link;
while(p->num!
=i&&p->link!
=NULL)
{
p=p->link;
};
if(p->link!
=NULL)
{printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);}
elseprintf("该图书不在此书库!
");
}
voidborrowbook(linklist*l)//借阅
{
linklist*p;inti;
printf("\n借阅的图书书号:
");
scanf("%d",&i);
p=l->link;
while(p->num!
=i)
{
p=p->link;
};
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);
if(p->num1<=0){printf("\n该书库存不足,读者无法借阅.");}
else{p->num1=p->num1-1;
printf("\n请输入借阅者的姓名:
");
scanf("%s",&p->name);
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);};
}
voidreturnbook(linklist*l)//归还
{
linklist*p;inti;
printf("\n请输入归还图书的书号:
");
scanf("%d",&i);
p=l->link;
while(p->num!
=i)
{
p=p->link;
};
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);
p->num1=p->num1+1;
strcpy(p->name,"NULL");
printf("\n输出图书的信息:
\n书号\t书名\t著作者\t现存量\t库存量\t借阅者姓名");
printf("\n%d\t%s\t%s\t%d\t%d\t%s\n",p->num,p->title,p->author,p->num1,p->num2,p->name);
}
intmain()
{
linklistl,*head;
head=creatnull(&l);
printf("┌*********************************┐\n");
printf("│欢迎使用图书管理系统│\n");
printf("└*********************************┘\n");
printf("免费高效简单实用\n");
printf("\n\n\n\n");
intflag=1,a;
whi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 管理 基本 业务 数据结构 课程设计 报告