1、1图书馆管理系统目 录一、问题描述 :二、系统需求分析:1 功能要求 :2 技术要求 :3 方案分析 :三、概要设计:四、详细设计与程序代码:五、运行结果与测试:六、设计体会与总结2一、问题描述 图书借阅管理系统是一个学校不可缺少的部分,它的内容对于学校的管理者和读者来说都至关重要,直接关系到图书的借用率,所以开发图书管理系统能够为管理员和读者提供充足的信息和快捷的查询手段。 编写程序系统主要实现图书馆的增加图书、查询图书、删除图书、借阅图书、还书;增加会员、查询会员、删除会员、借书信息、到期书催还等智能化管理过程。图书管理者只需略懂电脑知识就可以简易的操作该图书借阅管理系统。 二、 系统需求
2、分析 图书借阅管理系统主要分为两大功能: (1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书到期书催还) ; (2)会员管理(增加会员、查询会员、删除会员、借书信息); 要完成这个题目,主要是建立解决图书和会员的信息的存储,解决的方法是建立两个带头结点的单链表,分别用于存储图书和会员。解决了这个问题后就是如何建立这两个链表的联系了,解决的方法是在图书结点中设一个借书人编号,在会员结点中设一个数组用于存会员借的书。解决了这两个问题,剩下的工作就简单了。只需按链表的操作就可以了。 1 功能要求 在图书借阅管理程序中须实现以下功能: (1)图书修改功能:能对图书借阅系统存储的信息进行修改。
3、提供两种修改方式,如按照图书编号修改、按照书名修改。图书编号是图书记录的自然顺序编号。 (2)图书删除功能:能对图书借阅系统的图书信息进行删除。删除时以记录为单位,能一次删除一条记录。 (3)借书功能:能对借出的图书作记录信息,能一次借出一本图书。 (4)还书功能:能将被借出的图书信息还原,能一次借出一本图书。 (5)保存功能:能将记录保存在任何自定义的文件中,如保存在:c:books 、c:lenders。 (6)通信录管理结束后,能够正常退出图书借阅管理程序。 2 技术要求 (1)每个借阅者记录至少包括如下信息:姓名、学号、姓别等。每本图书记录至少包括如下信息:编号、书名、作者、价格等。
4、(2)图书、借阅者信息以磁盘文件的形式存储,存储位置、文件名、文件格式由设计者确定。 (3)对于图书借阅系统功能中数据输入、显示、查询、修改、删除、保存等功能,要求编写功能独立的函数或主控函数予以实现,其所属的各项功能尽量由独立的函数实现。 (4)以菜单方式实现功能选择控制。 3(5)本图书借阅管理程序能够实现 100 条记录的管理。 3 方案分析 此题是设计一个图书借阅管理系统,根据需要应包含图书管理和会员管理。其中对图书和会员的增加、查询和删除都是基本操作。在图书管理中对图书的借阅和归还是重点,这两个操作也是整个系统关键。在会员管理中增加了会员借书信息的查询和对到期书的催还信息。实现这些操
5、作的关键在于建立的两个带头结点的单链,分别用于存储图书和会员的基本信息。在这两个链表之间还应建立起相互的联系,便于查询的操作的实现。另外,在美观方面,需要设计一个操作界面供用户选择使用。 4三、概要设计登陆系统新书入库借书还书修改用户信息删除图书删除用户信息添加用户信息查询修改图书管理员用户用户信息修改操作员信息添加操作员信息删除操作员信息查询操作员信息操作员信息图书信息借出信息查询用户信息通过需求分析,设计出本程序的总体功能设计框图。分为七个方面:1、选择检查类型;2、编辑图书的信息;3、查询图书的信息;4、编辑读者的信息;5、查询读者的信息;6、借阅书刊;7、还书。连线之间说明了他们之间的
6、相互联系以及设计时的要求。 4.2.2 图书管理系统简略功能框图 5图书管理系统登陆模块 图书馆管理员模块图书借阅/归还模块图书管理模块图书查询模块用户登陆管理员登陆超期提示新书入库操作员登陆添加操作员删除操作员修改操作员查询操作员读者借阅信息读者归还信息管理员登陆管理员登陆查询图书信息删除图书信息修改图书信息五、详细设计与程序代码:#include#include#include#define NULL 06typedef struct BookInfo /图书结构int b_Code; /图书编号char b_Name20; /名称int b_Total; /总数int b_Out; /借
7、出数BookInfo* nextbook; /下一类图书BookInfo;typedef struct MemberInfo /会员结构long m_Code; /会员编号char m_Name20; /会员名字int l_Codes6; /以借书的编号,最多 5MemberInfo* nextmember; /下一会员MemberInfo;typedef struct System /管理系统结构BookInfo* BI; MemberInfo* MI;int BookTotal; /图书类库存量int MemberTota; /会员数量System;System* InitSystem()
8、;/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 StoreData(System*);void LoadData(S
9、ystem*);void ExitSystem();void main()System* S=InitSystem();7int sel;docoutsel;if(sel=1S-BookTotal=0;S-BI-nextbook=NULL;S-MI=(MemberInfo*)malloc(sizeof(MemberInfo);S-MemberTota=0;S-MI-nextmember=NULL;return S;void AddBook(System* S)int Tempcode;8char sel;BookInfo* p=S-BI;BookInfo* t;BookInfo* m;int
10、num;docoutTempcode;if(m=SearchBook(S,Tempcode)coutnum;m-b_Total+=num;elset=(BookInfo*)malloc(sizeof(BookInfo);t-b_Code=Tempcode;coutt-b_Name;coutt-b_Total;t-b_Out=0;t-nextbook=p-nextbook;p-nextbook=t;S-BookTotal+;coutsel;if(sel=n|sel=N)coutBI-nextbook;int bookcode;if(code=-1)coutbookcode;else bookco
11、de=code;while(biif(code=-1)9if(!bi)coutb_Codeb_Nameb_Totalb_OutBI;MemberInfo* memi;char sel;int tempcode;int i;dopl=S-BI;bi=pl-nextbook;memi=S-MI-nextmember;couttempcode;while(bi)if(bi-b_Code=tempcode)break;pl=bi;bi=bi-nextbook;if(bi=0)coutnextbook=bi-nextbook;S-BookTotal-;while(memi)for(i=1;il_Code
12、s0;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);10coutsel;if(sel=N|sel=n)coutBI-nextbook;BookInfo* p;char sel;int memcode;MemberInfo* mp;int tempcode;docouttempcode;p=SearchBook(S,tempcode);if(!p)coutb_To
13、tal-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)11coutBI-nextbook;BookInfo* p;MemberInfo* mp;int membercode;int tempcode;int i;char sel;docouttempcode;p=SearchBook(S,tempcode);if(!p)coutb_Tota
14、l-p-b_Out)membercode;if(!(mp=SearchMember(S,membercode)coutb_Out-;for(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;docoutTempcode;t=(MemberInfo*)malloc(sizeof(MemberInfo);t-m_Code=Tempcode;coutt-m
15、_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;while(biif(code=-1)if(!bi)coutm_Codem_Namel_Codes0l_Codes0;i+)coutl_CodesiMI-nextmember;pl=S-MI;couttempcode;while(bi
16、)if(bi-m_Code=tempcode)break;pl=bi;bi=bi-nextmember;if(!bi)coutnextmember=bi-nextmember;S-MemberTota-;for(i=1;il_Codes0;i+)if(!(book=SearchBook(S,bi-l_Codesi)coutb_Out-;book-b_Total-;free(bi);coutsel;14if(sel=N|sel=n)coutBI-nextbook;if(!(fp=fopen(“BookSys“,“wb“)coutBookTotal),sizeof(int),1,fp);while
17、(bi)fwrite(bi,sizeof(BookInfo),1,fp);bi=bi-nextbook;MemberInfo* mi=S-MI-nextmember;fwrite(while(mi)fwrite(mi,sizeof(MemberInfo),1,fp);mi=mi-nextmember;fclose(fp);void LoadData(System* S)FILE* fp;if(!(fp=fopen(“BookSys“,“rb“)coutBI;BookInfo* tempbi;fread(for(int i=1;iBookTotal;i+)tempbi=(BookInfo*)ma
18、lloc(sizeof(BookInfo);fread(tempbi,sizeof(BookInfo),1,fp);bi-nextbook=tempbi;bi=tempbi;bi-nextbook=NULL;MemberInfo* mi=S-MI;MemberInfo* tempmi;15fread(for(i=1;iMemberTota;i+)tempmi=(MemberInfo*)malloc(sizeof(MemberInfo);fread(tempmi,sizeof(MemberInfo),1,fp);mi-nextmember=tempmi;mi=tempmi;mi-nextmemb
19、er=NULL;fclose(fp);void ExitSystem()char select;coutselect;if(select=y|select=Y)exit(0);if(select=n|select=N)return;五、运行结果与测试:1617六、设计体会与总结:这次基础强化训练的课程设计对于我们来说,有一定的难度。因为他要求我们较完整的去实现一个比较可行的程序。将其应用到实际的生活中去。我被分配到的题目是图书借阅系统的实现与设计。这个题目相对来说贴近生活,比较容易理解。但是设计一个较为完整的程序却不是这么简单的。 首先我分析了相关的题目内容,并由此而进行了相关资料和书籍的查询
20、工作然后才开始正式进行设计。一开始不知从何下手但后来分析了一下题目,并结合这学期所学的知识,再加上相关提示我决定用指针、链表和文件的内容来编写程序。图书管理主要就是有一些操作来完成,这些操作包括:新进图书基本信息的输入、图书基本信息的查询、对撤消图书信息的删除、为借书人办理注册、办理借书手续(非注册会员不能借书) 、办理还书手续等等。我想这正好用 C+的知识来实现函数:添加图书,图书查询,删除图书,增加会员,会员查询,删除会员,借阅图书,归还图书,借书信息,到期书催还。最后编写退出系统的函数。在具体编写程序时考虑到图书的相关操作与会员基本相同,所以实际上只要编写前三个函数,后面的函数把相应变量
21、改变就可以了。添加图书:考虑到图书的信息较多,所以用结构体对其定义。又考虑到图书量大,所以添加后要保存到文件中去。图书查询:用所学过的顺序查找法来写。删除图书:把保存到文件中的内容写到链表中去,用链表删除结点的方法来删除图书。我们所学过的指针这时正好用上。最后把各函数同主函数相连,用主函数调用它们,编写好好看的界面就可以了。 同时通过这几天的程序及报告编写,我也发现了自己的很多不足,自己知识的很多漏洞,看到了自己的实践经验还是比较缺乏,理论联系实际的能力还是比较脆弱。尤其是编写大型的程序所要拥有的知识和技能比较缺乏。程序编好了,还要经过调试和修改,这步也很关键,好的程序是经过了无数次的修改18和调试才产生的。我的程序基本上能够满足要求,但还有一些地方需要改进,在今后我应该在多看书的同时还要加强实践的练习。才能进一步提高自己的编程能力。