图书管理基本业务(数据结构课)程设计报告

更新时间:2024-06-14 17:58:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

某大学某学院

数据结构课程课程设计

设计题目: 图书管理基本业务 姓 名: X X 学 号: 0123456789 专业班级: 12级软件工程(1)班 院 系: 信息工程学院 设计时间: 2012-2013学年第2学期 设计地点: 计算机中心公共机房B区

成绩:

指导教师签名:

年 月 日

安徽新华学院12级数据结构课程设计

目 录

1 绪 论 ........................................................... 1

1.1 课程设计的目的 .............................................. 1 1.2课题设计的意义 ............................................... 1 2 需求分析 .......................................................... 2

2.1 课程设计要求 ................................................ 2 2.2 课程设计任务 ................................................ 2 2.3分析用例 ..................................................... 2 3 设计思路 .......................................................... 3 4 详细设计 .......................................................... 4 5 数据测试 .......................................................... 9 6 总结体会 ......................................................... 13 参考文献 ........................................................... 14 附录源代码 ......................................................... 15

某大学12级数据结构课程设计

1 绪 论

改革开放以来,随着我国经济水平的提高,计算机知识在我国得到了越来越大的普及。计算机也在各个领域发挥着越来越大的作用。科技的提高,让我们的生活、工作越来越离不开计算机。随着时代的发展,人们越来越离不开书本。每个学校都有自己的图书馆,班级也会有班级的书库,相信大家都有自己的书库。对于普通微小型用户来说,自己的书库不大,也没有多余的资金来购买专业的操作复杂的价格昂贵的图书管理系统。以往的图书借阅手段效率低,操作复杂,为了便于图书资料的管理需,减轻工作人员的工作量,方便用户对书籍的查找、借阅、归还,用户应具有一套完善的图书借阅管理系统。在这种情况下,一个免费,高效,简单,实用的图书管理系统就非常适合于这类普通微小型用户。

1.1 课程设计的目的

设计一个免费,高效,简单,实用的图书管理系统。

1.2课题设计的意义

让普通微小型用户可以更好的管理自己的书库。免于购买专业的操作复杂的价格昂贵的图书管理系统,节约资金以免造成浪费。此系统以“免费,高效,简单,实用”为核心,倾心倾力为普通微小型用户量身打造!所以简便易用,高效实用改善普通微小型用户书库环境。

1

某大学12级数据结构课程设计

2 需求分析

2.1 课程设计要求

(1)用C语言实现程序设计;

(2)利用结构体、单链表的基本操作进行相关信息处理; (3)画出查询模块的流程图;

(4)系统的各个功能模块要求函数的形式实现; (5)界面友好(良好的人机交互),程序要有注释。

2.2 课程设计任务

设计一个计算机管理系统完成图书管理基本业务。

1) 馆藏图书信息。每种书的登记内容包括书号、书名、著作者、现存量和库存量;

2) 图书查询。对书号查找,并显示所查找图书的所有信息,包括书号、书名、著作者、现存量、库存量和借阅者姓名; 3)系统主要功能如下:

①采编入库:新购一种书确定书号后,登记到图书帐目表中,如果表中已有,则将库存量和现存量增加;

②读者借阅:若一种书的现存量大于0,则借出一本,登记借阅者的姓名,改变现存量,若一种书的现存量为0,则提示该书库存不足,读者无法借阅; ③读者归还:注销对借阅者的登记,改变该书的现存量。

2.3分析用例

书号 1 2 3 4 5

2

书名 高等数学 数字电路 大学英语 基本算法 三言二拍 著作者 同济大学 清华大学 蔡基刚等 戴燕等著 冯梦龙等 现存量 5 3 0 3 5 库存量 5 3 0 3 5 借阅者姓名 NULL NULL NULL NULL NULL 某大学12级数据结构课程设计

3 设计思路

本程序是以单链表的基本操作为基础,进行改造升级,而形成的图书管理基本操作程序。图书馆基本业务模拟包含多方面的操作,其中本程序描述的是图书馆的新书入库、图书馆借阅、归还、信息查询(书籍信息查询)等功能。 1)新书入库功能:

新到书籍入库包含几方面的操作:查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和书籍总量,若不存在,则新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书名(字符串类型)、该书作者名(字符串类型)、该书的现存量(整型)、该书的总量(整型)。输入该信息之后,将该节点插入到书籍信息链表中去。该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。 2)借阅功能

书籍借阅主要涉及存书库和读者信息库双方的更新。用户首先使用系统,查询该书是否存在,该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。若以上条件都满足,则将该读者的可借书数量减一,该存书的可借数量减一。 3)归还功能

按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,删除该书的读者借阅信息(姓名),然后返回。 4)信息查询功能

信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可借书本书以及所借书的信息),还可查询书籍信息,可根据书籍的编号来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。查询到该书籍后显示是否借阅该书籍。

3

某大学12级数据结构课程设计

4 详细设计

首先定义一个定义一个单链表的结点

typedef struct node { int num;//书号 char title[50];//书名 char author[50];//著作者 int num1;//现存量 int num2;//库存量 char name[50];//借阅者姓名 struct node *link; }linklist;

此结点包括书号,书名,著作者,现存量,库存量,借阅者姓名。 linklist* creatnull(linklist *l)//建立一个带头的结点; {

l=(linklist*)malloc(sizeof(linklist)); l->link=NULL; return l; }

馆藏图书信息模块

void print(linklist *l)//输出所有图书的信息 { linklist *p; p=l->link; printf(\输出所有图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ while(p) { printf(\or,p->num1,p->num2,p->name); p=p->link; //指针指向下一个 } }

通过对单链表的输出来完成对馆藏图书信息的输出;

采编入库模块

void creat(linklist *l)//采编入库 { int i,n; linklist *p,*tail,*q;

4

某大学12级数据结构课程设计

tail=l;if(l->link!=NULL) q=l->link; else q=l; while(tail->link!=NULL){tail=tail->link;}; printf(\请输入入库图书的数量:\ scanf(\ for(i=1;i<=n;i++) {

p=(linklist*)malloc(sizeof(linklist)); printf(\请输入入库图书的书号:\ scanf(\ 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(\该图书已在图书库存在,已自动增加图书数量\ else { printf(\请输入入库图书的书名:\ scanf(\

printf(\请输入入库图书的著作者:\ scanf(\

printf(\请输入入库图书的现存量:\ scanf(\

printf(\请输入入库图书的库存量:\ scanf(\ strcpy(p->name,\ 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(\该图书已在图书库存在,已自动增加图书

根据输入的书号(入库的图书)与库存的书号(本库的图书)是否相同,若相同,不用输入该书的相关信息,便自动完成图书库存和现存量的增加。并提示“该图书已在图书库存在,已自动增加图书数量。”

根据书号查找图书模块

5

某大学12级数据结构课程设计

void locat(linklist *l,int i)//根据书号查找图书 { linklist *p; p=l->link; while(p->num!=i) { p=p->link; }; If(p->limk!=NULL) {printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name);} else printf(\该图书不在此书库!\}

通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息。若不相同,则指针指向下一个结点,直到指向为NULL,结束并提示“该图书不在此书库!”。 借阅模块

void borrowbook(linklist *l)//借阅 { linklist *p;int i; printf(\借阅的图书书号:\ scanf(\ p=l->link; while(p->num!=i) { p=p->link; }; printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name); if(p->num1<=0) {printf(\该书库存不足,读者无法借阅.\ else{p->num1=p->num1-1; printf(\请输入借阅者的姓名:\ scanf(\ printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name);}; }

通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息,若库存不大于零,提示“该书库存不足,读者无法借阅.”,相反,则提示“请输入借阅者的姓名:”,记录借阅者的姓名,现存量和库存量各减一个。若不同,则指针指向下一个结点。

6

某大学12级数据结构课程设计

归还模块

void returnbook(linklist *l)//归还 { linklist *p;int i; printf(\请输入归还图书的书号:\ scanf(\ p=l->link; while(p->num!=i) { p=p->link; }; printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name); p->num1=p->num1+1; strcpy(p->name,\ printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\

printf(\->num2,p->name);

}

通过指针所指书号与查找图书的书好进行比较,若相同则输出该图书的所有信息。若不同,则指针指向下一个结点。

Main函数模块

int main() { linklist l,*head; head=creatnull(&l); printf(\ ┌*********************************┐\\n\ printf(\ │ 欢迎使用图书管理系统 │\\n\

printf(\ └*********************************┘\\n\ printf(\ 免费 高效 简单 实用\\n\

printf(\ int flag=1,a; while(flag) {

printf(\馆藏图书信息\\n2:采编入库\\n3:图书查询\\n4:读者借阅\\n5:读者归还\\n6:退出图书管理系统\\n请输入您的选项:\ scanf(\ switch(a)

7

某大学12级数据结构课程设计

{ { case 6:flag=0; printf(\ ┌*********************************┐\\n\ printf(\ │ 已退出图书管理系统 │\\n\

printf(\

└*********************************┘\\n\ break; case 1:flag=1; print(head); printf(\ break; case 2:flag=1; creat(head); printf(\ break; case 3:flag=1; int number;//书号 printf(\请输入要查找的图书书号:\ scanf(\ locat(head,number); printf(\ break; case 4:flag=1; borrowbook(head); printf(\ break; case 5:flag=1; returnbook(head); printf(\ break; } } }; system(\ return 1;

首先,定义一个该类型的结点和一个指向该类型的指针。用creatnull()函数创建一个头结点,且指针指向该头结点。然后输出用户界面,通过while循环和switch case语句进行选择。把各个功能模块都编辑在main函数。

8

某大学12级数据结构课程设计

5 数据测试

(1)开始界面

图5.1开始界面

(2)采编入库模块

图5.2采编入库

9

某大学12级数据结构课程设计

图5.3采编入库

图5.4采编入库

图5.5采编入库

10

某大学12级数据结构课程设计

(3)根据书号查找图书模块

图5.6根据书号查找图书

图5.7根据书号查找图书

(4)借阅模块

图5.8读者借阅

11

某大学12级数据结构课程设计

图5.9读者借阅

(5)归还模块

图6.0读者归还

(6)退出模块

6.1退出界面

12

某大学12级数据结构课程设计

6 总结体会

通过本次课程设计,让我对数据结构这门学科对有了进一步的认识,掌握了单链表的基本操作和应用。以前对该课程不再那么恐惧,任何事情没有做不到只有愿不愿意去做。

之后凭借那闪现在眼前的点点思路,慢慢在琢磨,终于想出了大体的程序内容。然后一个一个函数的思考,一步一步的编写,调试,做起来也就越来越顺手了。通过我的反复思考,程序中的错误得到了解决。函数功能也得到了进一步的完善。

并且在本次课程设计的过程中,让我知道一个人的力量真的好有限,即使个人能力再强,做一个大点的项目,也会力不从心。所以遇到问题要学会去问同学,问老师,只有这样才能将事顺利办得越快越好。通过这次课程设计,会为我们以后进入社会提供一定的经验。

我相信在今后的学习真的我会更加努力,积累经验。使自己在编程等各方面得到提高。

13

某大学12级数据结构课程设计

参考文献

[1] 孙玉方,张乃孝.实用C语言程序设计[M].北京:北京大学出版(简体版),1989;台湾儒林出版公司(繁体版),1992.

[2] 许卓群,张乃孝,杨冬青,等.数据结构[M].北京:高等教育出版社,1987 [3]. 郭有强 ,C++面向对象程序设计[J] .清华大学出版社 ,2009; [4] 朱晓龙,Java语言程序设计,北京邮电大学出版社,2011;

[5] Wirth N.Algorithms + Data Structures = Programs[M].[S.I].Prentice Hall.1976.

14

某大学12级数据结构课程设计

附录源代码

#include #include #include typedef struct node { int num;//书号 char title[50];//书名 char author[50];//著作者 int num1;//现存量 int num2;//库存量 char name[50];//借阅者姓名 struct node *link; }linklist;

linklist* creatnull(linklist *l) {

l=(linklist*)malloc(sizeof(linklist)); l->link=NULL; return l; }

void creat(linklist *l)//采编入库 { int i,n; linklist *p,*tail,*q; tail=l;if(l->link!=NULL) q=l->link; else q=l; while(tail->link!=NULL){tail=tail->link;}; printf(\请输入入库图书的数量:\ scanf(\ for(i=1;i<=n;i++) {

p=(linklist*)malloc(sizeof(linklist)); printf(\请输入入库图书的书号:\ scanf(\ 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(\该图书已在图书库存在,已自动增加图书数量\ else { printf(\请输入入库图书的书名:\ scanf(\

printf(\请输入入库图书的著作者:\ scanf(\

printf(\请输入入库图书的现存量:\ scanf(\

15

某大学12级数据结构课程设计

printf(\请输入入库图书的库存量:\ scanf(\ strcpy(p->name,\ tail->link=p; tail=p; tail->link=NULL;}; } }

void print(linklist *l)//输出所有图书的信息 { linklist *p; p=l->link; printf(\输出所有图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ while(p) { printf(\or,p->num1,p->num2,p->name); p=p->link; } }

void locat(linklist *l,int i)//根据书号查找图书 { linklist *p; p=l->link; while(p->num!=i&&p->link!=NULL) { p=p->link; }; if(p->link!=NULL) {printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name);} else printf(\该图书不在此书库!\}

void borrowbook(linklist *l)//借阅 { linklist *p;int i; printf(\借阅的图书书号:\ scanf(\ p=l->link; while(p->num!=i) { p=p->link; }; printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量

16

某大学12级数据结构课程设计

\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name); if(p->num1<=0) {printf(\该书库存不足,读者无法借阅.\ else{p->num1=p->num1-1; printf(\请输入借阅者的姓名:\ scanf(\ printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name);}; }

void returnbook(linklist *l)//归还 { linklist *p;int i; printf(\请输入归还图书的书号:\ scanf(\ p=l->link; while(p->num!=i) { p=p->link; }; printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name); p->num1=p->num1+1; strcpy(p->name,\ printf(\输出图书的信息:\\n书号\\t书名\\t著作者\\t现存量\\t库存量\\t借阅者姓名\ printf(\thor,p->num1,p->num2,p->name); }

int main() { linklist l,*head; head=creatnull(&l); printf(\ ┌*********************************┐\\n\ printf(\ │ 欢迎使用图书管理系统 │\\n\

printf(\ └*********************************┘\\n\ printf(\ 免费 高效 简单 实用\\n\

printf(\ int flag=1,a;

17

某大学12级数据结构课程设计

while(flag) {

printf(\馆藏图书信息\\n2:采编入库\\n3:图书查询\\n4:读者借阅\\n5:读者归还\\n6:退出图书管理系统\\n请输入您的选项:\ scanf(\ switch(a) { { case 6:flag=0; printf(\ ┌*********************************┐\\n\ printf(\ │ 已退出图书管理系统 │\\n\

printf(\

└*********************************┘\\n\ break; case 1:flag=1; print(head); printf(\ break; case 2:flag=1; creat(head); printf(\ break; case 3:flag=1; int number;//书号 printf(\请输入要查找的图书书号:\ scanf(\ locat(head,number); printf(\ break; case 4:flag=1; borrowbook(head); printf(\ break; case 5:flag=1; returnbook(head); printf(\ break; } } }; system(\ return 1;

18

注:

1, 因本人能力有限,该图书管理基本业务有一些漏洞,敬请谅解。 2, 此程序及此数据结构报告为本人原创,请网友尊重本人劳动及知识产权。

本文来源:https://www.bwwdw.com/article/3ly3.html

Top