1、 河南城建学院课程设计报告书专 业: 计算机信息管理与信息系统课程设计名称:数据结构课程设计题 目:图书借阅管理系统班 级:信管二班设 计 者 学 号:083215203设 计 者 姓 名:耿晓业同 组 人 员:刘利指 导 老 师:张延红完 成 时 间:2016年6月10日摘 要随着信息技术的迅猛发展,信息化已经渗透到社会生活的各个领域和各个层面,并日益成为提高效率,消除差错,节约成本的有效途径。20世纪60年代以来,在微电子技术和通信技术迅速发展的推动下,图书馆图书借阅管理也充分利用软件来进行管理,其目标是借助先进的信息处理技术和计算机网络技术来提高图书管理的效率和质量,将管理与办公活动纳入
2、到自动化,现代化的轨道中。各大中小学图书馆中传统的图书借阅管理模式也越来越不能满足现代教育发展的需要。对于一个有着成百上千的学生的学校来说,用手工管理数以千计图书的借阅以及归还,是一项非常繁琐的工作,而相应的阶段性盘点图书、图书查询等,其工作量都让人望而生畏,而且还极易出错。所以我们提出了开发图书馆图书借阅管理系统,采取会员制的方式进行会员管理,包括增加会员,查询会员,删除会员,会员借书信息等。另外采取图书流通借还管理,对图书查询借阅,增加图书,删除图书等功能进行统一管理,为各大中小学实现图书馆信息化管理提供有效工具。本系统采用数据结构,C+程序设计语言,系统开发平台为Windows XP,使
3、用Visual C+6.0进行程序设计开发,本系统是各大中小学实现图书馆信息化管理的有效工具,同时本系统中采用的新技术可作为其他信息系统构建时的参考。关键词:数据结构;算法设计;C+程序设计语言;1目 录目 录 .1第一章 开发环境和开发工具 31.1 C+简介 .31.2 开发背景 .31.3 开发环境 .4第二章 算法思想 .52.1 系统需求分析 .52.1.1会员管理功能 .52.1.2图书管理功能 .62.2 系统总体设计 .62.2.1 系统设计目标 .62.2.2 开发设计思想 .72.2.3 系统功能模块设计 .72.3 算法思想描述 .11第三章 算法实现 123.1 数据结
4、构 .123.2 程序模块 .133.3 各模块之间的调用关系 .143.4 源程序代码 .14第四章 测试与分析 324.1 测试数据选择 .324.2 测试结果分析 .32总 结 .36心得体会 .372参 考 文 献 383第一章 开发环境和开发工具1.1 C+简介C+是一种面向对象的开发语言,是一种使用非常广泛的计算机编程语言。他是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C+支持静态数据类型检查的,支持多重编程范式的通用程序设计语言,支持过程化程序设计、数据抽象、面向对象程序设计、制作图标等等泛型程序设计等多种程序设计风格。语言灵活,运算符的数据结构丰富、具有结构化控制语
5、句、程序执行效率高,而且同时具有高级语言与汇编语言的优点,与其它语言相比 ,可以直接访问物理地址,与汇编语言相比又具有良好的可读性和可移植性。其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,且支持封装、继承、多态等特性!1.2 开发背景随着科学技术的不断发展,计算机科学日渐成熟,计算机知识的普及使更多用户懂得利用计算机为自己的工作,生活提供方便。计算机其强大的功能已为人们所深刻认识,它己进入人类社会的各个领域并发挥着越来越重要的作用。采用计算机进行信息化管理已成为衡量高校图书管理科学化和现代化的重要标志,而图书馆图书借阅管理的全面自动化、信
6、息化则是其中重要的组成部分。本系统是以建立一个以通过计算机数据管理图书借阅系统为目的,以用户浏览图书信息的网站系统。本系统具有灵活、方便、快捷、界面友好等优点,更加方便的在线了解图书信息,以及借阅图书。本系统研究的课题主要意义是通过完成这个图书管理系统,方便管理者的管理以及用户所需要查询的书籍,使大家在尽可能短的时间内完成对所需要图书的借阅。大大的方便了用户的需求在很大程度上提升了高校的教学水平。因此,本文所研究的图书馆借阅管理信息系统具有一定的使用价值和现实意义。41.3 开发环境软件平台是信息系统开发和运行所需的集成软件环境,设计和选择高效、实用、方便、功能齐全的软件平台,对信息系统的开发
7、具有十分重要的意义。在结合实际开发的需要并充分考虑各种软件平台的性能及适用范围和对软件平台的使用能力,本系统的软件平台选择如下: (1)操作系统操作系统是计算机系统中最重要的系统软件,目前在微机上使用的桌面操作系统有Windows 95/98/2000/me/xp/2003server等,可运行于前面所列举的各种操作系统,但建议使用Windows 2000以上系统。本系统在Windows XP操作系统下进行开发。 (2)支撑软件 支撑软件是协助人们开发和维护软件的工具和环境软件,包括编辑程序,数据库系统,集成开发环境等,本系统的支撑软件如下: 系统运行环境:visual C+6.0系统编程语言
8、:C/C+程序设计语言5第二章 算法思想随着计算机技术的飞速发展,采用计算机进行信息化管理已成为衡量高校图书管理科学化和现代化的重要标志。为了减少工作人员的工作量,提高各个环节的工作效率,优化人师生的学习环境,我们需要研究一个高效快捷的图书借阅管理系统。本系统是以建立一个以通过计算机数据管理图书借阅系统为目的,以用户浏览图书信息的系统。该系统的功能强大,其具有良好的界面,操作方便灵活、简洁高效。具有良好的健壮性,以会员制为主要借还书手段,各种功能设置方便图书管图书借阅管理。2.1 系统需求分析2.1.1会员管理功能(1)添加会员:输入会员编号、会员姓名,进行会员添加,添加成功显示添加完毕。此功
9、能可连续添加。新用户经注册方可登录系统并使用读者服务功能。(2)查询会员:输入查询的会员编号,如果存在该会员,则会显示该会员信息,包括会员编号,会员姓名,已借出的图书数为几本;如果查询的会员编号不存在,则显示没找到指定会员。(3)删除会员:请输入要删除的会员的编号,如果输入的会员编号不存在,则显示没有找到要删除的会员编号。系统会提示你还有会员要删除吗?输入Y,则可以继续输入想要删除的会员编号,并进行删除,如果不想在进行删除的话,可以选择N,进行删除会员结束操作,退回主界面。(4)载入数据:实现数据载入功能。(5)保存功能:能将记录保存在任何自定义的文件中。(6)退出程序:如果想要退出程序,系统
10、会提示警告: 程序结束后未存储的数据将消失确定要退出吗?(Y/N),选择y,则直接退出程序。62.1.2图书管理功能(1)增加图书:增加新的图书资料,同时需检查新书的图书编号是否已存在于原图书资料中,若已存在则显示这类书已有库存,可输入图书的入库量进行添加图书操作;如果该类图书为第一次进行添加,则应该输入该图书的图书编号,图书的名称,以及图书的入库量,输入完毕则图书添加完毕,可继续选择是否继续添加。(2)查询图书:查询图书时需要输入查询的图书编号,如果该图书存在则会显示该图书的图书编号,图书名称,该图书的库存量以及图书的借出量。其中图书的库存量以及图书的借出量均可以累加。如果该图书已经被借出,
11、则查询结果显示图书库存量以及图书的借出量。(3)删除图书:通过图书编号查询该图书资料,若该编号存在,允许删除,否则提示没有找到你所要的图书。删除对象包括该图书资料以及“图书状态”和“借阅人”中与此书相关的所有记录。一旦进行删除成功,则所有该图书信息都将不存在。(4)借书处理:如果需要进行借书操作,则必须保证该借书者已经进行过会员注册,借书操作需要输入要借出的书号,以及会员编号,如果会员编号输入错误,则显示会员编号输入错误,外借失败;如果输入要借出的书号进行借书操作,则系统会显示该编号图书的现有库存量,如果没有查询到该图书的编号则显示没有找到要借出的图书,如果借出成功,显示外借成功。(5)还书处
12、理: 如果需要进行还书操作,则必须保证该借书者是会员,还书操作需要输入要借出的书号,以及会员编号,如果会员编号输入错误,则显示会员编号输入错误,还书失败;如果输入要借出的书号进行借书操作,则系统会显示该编号图书的现有库存量,如果没有查询到该图书的编号则显示没有找到要借出的图书,如果还书成功,而显示归还成功。72.2 系统总体设计2.2.1 系统设计目标本文研究开发的图书借阅管理系统用于支持高校完成图书馆图书借阅工作,有如下三个方面的目标:支持图书馆实现规范化的管理。支持图书馆高效率完成图书馆增加图书以及会员借还书管理的日常业务,包括图书借阅管理系统的两大功能:(1)图书管理(增加图书、查询图书
13、、删除图书、图书借阅、还书)(2)会员管理(增加会员、查询会员、删除会员、借书信息) 支持图书馆实现无纸化办公,方便快捷,提高图书馆的管理效率,便利师生进入图书馆进行学习。2.2.2 开发设计思想基于以上系统设计目标,本文在图书馆图书借阅管理系统时遵循了以下开发设计思想:采用现有的软硬件环境及先进的管理系统开发方案,从而达到充分利用现有资源,提高系统开发水平和应用效果的目的。尽量达到操作过程中的直观、方便、实用、安全等要求。系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。系统应具备数据维护功能,及时根据用户需求进行数据的添加、删除、修改、备
14、份等操作。82.2.3 系统功能模块设计 本系统开发的意图是借由网络化的管理减轻图书馆工作人员的工作量,全面提高图书馆的管理效率及服务质量。实现两方面的功能,这两个方面分别是图书管理和会员管理。(1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书);(2)会员管理(增加会员、查询会员、删除会员、借书信息)。图书借阅管理系统主要包括以下功能模块,如图所示。系统功能模块图进入系统后需要先进行会员注册,才可以进行图书管理和会员管理。如图2.2.19开始会员注册 ,输入会员编号姓名进入系统图 2.2.1进行进入系统,显示功能列表,可选择任意系统,但在操作之前先要进行增加图书。如图2.2.2添加
15、图书信息判断添加图书已有记录在原有的纪录上加上现有的图书数量是向系统中加入新纪录 , 添加新书信息否图2.2.2如果会员注册完毕,新书添加完毕,读者可以进行借书操作。如图2.2.310输入会员编号判断该会员是否存在输入要借的图书编号是该会员不存在 。 外借失败否判断库存是否有该书借出成功 , 库存数量减少 。 并询问是否继续借书是借出失败 , 询问是否继续借书否是图2.2.3查询图书操作。如图2.2.4输入图书编号判断该图书是否存在显示该图书的编号 , 书名 , 库存量以及借出量是该图书编号不存在 。 显示没有找到该图书否图2.2.411删除会员操作。如图2.2.5输入会员编号判断该会员是否存
16、在删除会员并且系统会提示你还有会员要删除吗 ? 输入 Y, 则可以继续输入想要删除的会员编号 ,并进行删除 , 如果不想在进行删除的话 ,可以选择 N , 进行删除会员结束操作 , 退回主界面 。是输入的会员编号不存在 , 则显示没有找到要删除的会员编号否图2.2.52.3 算法思想描述本项目的实质是完成对学生成绩信息的建立、查找、插入、修改、删除等功能,可以首先定义项目的数据结构,然后将每个功能写成一个函数来完成对数据的操作,最后完成主函数以验证各个函数功能并得出运行结果。该程序的由多种函数实现,每个函数具有不同的功能,主要有主菜单函数,插入功能子菜单函数,查找功能子菜单函数,会员信息录入函
17、数,显示函数,排序函数,插入函数以及查找函数。在每个区域中会调用不同的函数来实现主要的功能比如,在新增功能里调用子菜单函数;在显示信息时调用排序函数先对需要输出的信息进行排序,然后再输出;在查找功能里会调用查找函数来进行查找。而最主要的函数有添加图书:考虑到图书的信息较多,所以用结构体对其定义。又考虑到图书量大,所以添加后要保存到文件中去。图书查询:用所学过的顺序查找法来写。删除图书:把保存到文件中的内容写到链表中去,用链表删除结点的方法来删除图书。我们所学过的指针这时正好用上。最后把各函数同主函数相连,12用主函数调用它们,主要函数如下:插入函数,它用插入排序来实现;查找函数,用顺序查找法;
18、删除函数, 用链表删除结点的方法第三章 算法实现3.1 数据结构要完成这个题目,主要是建立解决图书和会员的信息的存储,解决的方法是建立两个带头结点的单链表,分别用于存储图书和会员。解决了这个问题后就是如何建立这两个链表的联系了,解决的方法是在图书结点中设一个借书人编号,在会员结点中设一个数组用于存会员借的书。解决了这两个问题,剩下的工作就简单了。只需按链表的操作就可以了。以会员管理为例,本项目的数据是一组会员的借阅信息,每条学生的借阅信息由会员编号、会员姓名和组成,这组会员的借阅信息具有相同特性,属于同一数据13对象,相邻数据元素之间存在序偶关系。由此可以看出,这些数据具有线性表中数据元素的性
19、质,所以该系统的数据采用线性表来存储。 顺序表是线性表的顺序存储结构,是指用一组连续的内存单元依次存放线性表的数据元素。在顺序存储结构下,逻辑关系相邻的两个元素在物理位置上也相邻,这是顺序表的特点。本项目可以采用顺序表的线性表顺序存储结构。 若一个数据元素仅占一个存储单元,第i个数据元素的地址为Loc(ai)=loc(a1)+(i-1) 假设线性表中每个元素占用k个存储单元,那么在顺序表中,线性表的第i个元素的存储位置与第1个元素的存储位置的关系是 Loc(ai)=loc(a1)+(i-1)*k 这里Loc(ai)是第i个元素的存储位置,loc(a1)是第1个元素的存储位置,也称为线性表的基址
20、。显然,顺序表便于进行随机访问,故线性表的顺序存储结构是一种随机存储结构。 顺序表适宜于做查找这样的静态操作;顺序存储的优点是存储密度大,存储空间利用率高。缺点是插入或删除元素时不方便。 由于C语言的数组类型也有随机存储的特点,一维数组的机内表示就是顺序结构。因此,可用C语言的一维数组实现线性表的顺序存储。数组实现线性表的顺序存储的优点是可以随机存取表中任一元素O(1),存储空间使用紧凑;缺点是在插入,删除某一元素时,需要移动大量元素O(n),预先分配空间需按最大空间分配,利用不充分,表容量难以扩充。用结构体类型定义每个会员数据,故该数组中的每个数据的结构可描述为:typedef struct
21、 MemberInfo/会员结构long m_Code; /会员编号char m_Name20; /会员名字int l_Codes6; /已借书的编号,最多5 MemberInfo* nextmember; /下一会员MemberInfo; 143.2 程序模块头文件及散列定义关键字#include #include #include #define NULL 0 定义图书结构类型typedef struct BookInfo/图书结构int b_Code; /图书编号char b_Name20; /名称int b_Total; /总数int b_Out; /借出数BookInfo* next
22、book; /下一类图书BookInfo;3.3 各模块之间的调用关系模块内部的具体算法,包括输入、处理和输出,相当于c+语言的过程或函数设计。整体算法描述:建立一个结构来存放学生信息,再将这个结构存放在文件中,按要求通过调用各个函数对文件内的数据进行操纵及处理。各个分函数算法描述:由主函数调用建立一个新的文件用于存储图书以及会员记录。153.4 源程序代码#include #include #include #define NULL 0 typedef struct BookInfo/图书结构int b_Code; /图书编号char b_Name20; /名称int b_Total; /总
23、数int b_Out; /借出数16BookInfo* nextbook; /下一类图书BookInfo; typedef struct MemberInfo/会员结构long m_Code; /会员编号char m_Name20; /会员名字int l_Codes6; /已借书的编号,最多5 MemberInfo* nextmember; /下一会员MemberInfo; typedef struct System/管理系统结构 BookInfo* BI; MemberInfo* MI; int BookTotal; /图书类库存量int MemberTota; /会员数量System; S
24、ystem* InitSystem();/ 系统初始化 void AddBook(System*);/增加图书BookInfo* SearchBook(System*,int);/查询图书信息void DelBook(System*);/删除图书void BrrowBook(System*);/借书处理void TurnBackBook(System*);/还书处理void AddMember(System*);/添加会员void DelMember(System*);/删除会员MemberInfo* SearchMember(System*,int);/查询会员信息void StoreDat
25、a(System*); /定义一个空的数据存储(系统)void LoadData(System*); /加载所有数据void ExitSystem(); /退出程序void main() 17 System* S=InitSystem(); int sel; docoutsel; if(sel=1 /图书信息初始化,sizeof是C/C+中的一个操作符(operator ),简单的说其作用就是返回一个对象或者类型所占的内存字节数S-BookTotal=0; /图书数量初始为0S-BI-nextbook=NULL; /下一类图书信息初始为空S-MI=(MemberInfo*)malloc(siz
26、eof(MemberInfo); /初始化会员信息S-MemberTota=0; /图书总数初始为0 S-MI-nextmember=NULL; /下一个会员信息初始为空return S; 19void AddBook(System* S) /添加图书模块 int Tempcode; /图书编号char sel; /查询该图书编号是否已存在BookInfo* p=S-BI; /p指向图书结构BookInfo* t; /添加的图书库存没有BookInfo* m; /添加的图书库存已有int num; /入库量do coutTempcode; if(m=SearchBook(S,Tempcode)
27、 /图书编号库存已有 coutnum; m-b_Total+=num; /*图书数量累加。 m-b_Total间接引用运算符,表达式m-b_Total引用了指针m指向的结构体的成员 b_Total。*/ else t=(BookInfo*)malloc(sizeof(BookInfo); /在图书信息中定义一个t的内存空间t-b_Code=Tempcode; /*添加的图书编号与库存已有。间接引用运算符,表达式t-b_Code引用了指针t指向的结构体的成员b_Code。*/coutt-b_Name; coutt-b_Total; 20t-b_Out=0; /图书借出量为0 t-nextbook
28、=p-nextbook; p-nextbook=t; S-BookTotal+; /图书总数 coutsel; if(sel=n|sel=N) coutBI-nextbook; /下一本图书int bookcode; /图书编号if(code=-1) coutbookcode; /输入图书编号 else bookcode=code; while(bi /判断输入图书编号于库存中的某个编号是否相等if(code=-1) 21if(!bi)/如果库存中没有此编号coutb_Codeb_Nameb_Totalb_OutBI;/定义一个系统中指向图书管理的plMemberInfo* memi; /会员
29、结构中定义一个 memichar sel; int tempcode; /输入的图书编号int i; do pl=S-BI; /间接引用运算符,表达式 S-BI引用了指针 s指向的结构体的成员BI。bi=pl-nextbook; /下一本图书 memi=S-MI-nextmember; /下一个会员couttempcode;/输入要删除的图书编号 while(bi) 22if(bi-b_Code=tempcode)/图书存在直接删除coutnextbook; if(bi=0)/图书编号不存在coutnextbook=bi-nextbook; S-BookTotal-; while(memi)
30、for(i=1;il_Codes0;i+)if(memi-l_Codesi=tempcode)break; if(il_Codes0) for(;il_Codes0;i+)memi-l_Codesi=memi-l_Codesi+1; memi-l_Codes0-; memi=memi-nextmember; free(bi); coutsel; 23if(sel=N|sel=n) coutBI-nextbook; BookInfo* p; char sel; int memcode; MemberInfo* mp; int tempcode; do couttempcode; p=Search
31、Book(S,tempcode); if(!p) coutb_Total-p-b_Out)b_Total-p-b_Out)coutmemcode; mp=SearchMember(S,memcode); if(!mp)coutl_Codes0=5)coutb_Out+; mp-l_Codes+mp-l_Codes0=tempcode; coutsel; if(sel=N|sel=n) coutBI-nextbook; BookInfo* p; MemberInfo* mp; int membercode; int tempcode; int i; char sel; do couttempco
32、de; p=SearchBook(S,tempcode); if(!p) coutb_Total-p-b_Out)membercode; if(!(mp=SearchMember(S,membercode)coutb_Out-; 26for(i=1;il_Codes0;i+) if(mp-l_Codesi=tempcode)break; while(il_Codes0) mp-l_Codesi=mp-l_Codesi+1; i+; mp-l_Codes0-; coutsel; if(sel=N|sel=n) coutMI; MemberInfo* t; do 27coutTempcode; t
33、=(MemberInfo*)malloc(sizeof(MemberInfo); t-m_Code=Tempcode; coutt-m_Name; t-l_Codes0=0; t-nextmember=p-nextmember; p-nextmember=t; S-MemberTota+; coutsel; if(sel=n|sel=N) coutMI-nextmember; int membercode; int i; if(code=-1) coutmembercode; else membercode=code; 28while(bi if(code=-1) if(!bi)coutm_Codem_Namel_Codes0l_Codes0;i+) coutl_CodesiMI-nextmember; pl=S-MI;