数据结构-图书管理系统
图书管理系统数据结构
struct book /*图书信息*/{int num; /*书号*/char name[10]; /*书名*/char where[10]; /*所在书库*/char author[15]; /*作者*/char pub[20]; /*出版社*/int count; /*数量*/struct book *next;};/*输出模块*/void print(struct book *p0){struct book *p;p=p0->next;printf("\n\n\t\t^^^^^^^^^^^^^^图书信息表^^^^^^^^^^^^^^");printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); while(p!=NULL){printf(PT);p=p->next;}getch();}/*输入模块*/struct book *creat(){struct book *head,*p1,*p2;int i=0;head=p2=(struct book *)malloc(N);head->next=NULL;printf("\n\n\t\t录入图书信息");printf("\n\t---------------------------------------");while(1){ p1=(struct book *)malloc(N);printf("\n 请输入图书编号(书号为0结束): ");scanf("%d",&p1->num);if(p1->num!=0){printf("\n\n书名所在书库作者出版社图书数量\n");scanf("%s%s%s%s%d",p1->name,p1->where,p1->author,p1->pub,&p1->count); p2->next=p1;p2=p1;i++;}elsebreak;}p2->next=NULL;free(p1);printf("\n\t\t----------------------------------------");printf("\n\t\t %d 种书录入完毕",i);getch();return head;}/*查找模块*/void find(struct book *p0){char name[10];int flag=1;struct book *p;p=p0->next;printf("请输入要查找的书名:\n");scanf("%s",name);for(p=p0;p;p=p->next)if(strcmp(p->name,name)==0){printf("\n\n图书编号---图书名称---所在书库----作者----出版社---数量\n"); printf(PT);flag=0;break;}if(flag) printf("\n 暂无此图书信息\n");getch();}/*删除模块*/void del(struct book *p0){char name[10];int flag=1;struct book *p;p=p0;printf("请输入要删除的书名:\n");scanf("%s",name);while(p!=NULL){if(strcmp(p->name,name)==0){p0->next=p->next; /*后续节点连接到前驱节点之后*/free(p);printf("\t该书资料已删除.");flag=0;break;}p0=p;p=p->next;}if(flag) printf("\n\t无此图书信息。
数据结构_图书馆管理系统
湖南科技大学课程设计报告题目: 图书管理基本业务模拟院系:计算机科学与工程学院专业班级:计算机科学与技术一班学号: 0905010119学生姓名:张杰指导教师:李峰2010年12月31日一、问题分析图书馆基本业务模拟包含多方面的操作,其中本程序描述的是图书馆的新书入库、读者注册、图书馆借阅、归还、信息查询(含书籍信息查询和读者信息查询)等功能。
1)新书入库功能:新到书籍入库包含几方面的操作:查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和书籍总量,若不存在,则新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书名(字符串类型)、该书作者名(字符串类型)、该书出版社信息(字符串类型)、出版日期(长整型)、该书的现存量(整型)、该书的总量(整型)。
输入该信息之后,将该节点插入到书籍信息链表中去。
该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。
2)读者注册功能没有账号和密码读者和管理员都不能登录系统,本系统默认第一个注册系统的是系统管理员,借阅号为1000,权限是1,并输入自己基本信息,默认可借本数为10,并将所借书信息区全部置零。
不是第一个注册的读者,借阅号从1000往后顺延,自己设置密码,权限为0.,其余信息与管理员相同,但是登陆之后的界面,管理员可以看到“入库”菜单选项,普通读者不能看到该选项。
3)借阅功能书籍借阅主要涉及存书库和读者信息库双方的更新。
用户首先登陆系统,查询(3种查询方式)该书是否存在,该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。
若以上条件都满足,则将该书编号存入该读者的借阅信息区,将该读者的可借书数量减一,该存书的可借数量减一。
4)归还功能读者登录后按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,则从读者的借书区删除该书籍,读者的课结束数量加一,将该书的可借数量增加一,然后返回。
5)信息查询功能信息查询分为读者信息查询和书籍信息查询,读者信息查询是在读者登录之后,可以显示本人的基本信息以及借书状况(所借书的本数、可借书本书以及所借书的信息),还可查询书籍信息,可根据书籍的编号来查找书籍、根据书名来查找书籍、根据作者名来查询书籍。
数据结构课程设计-图书管理系统
用C++语言实现图书管理系统摘要图书管理系统主要是对图书的录入、读者借阅、读者归还等功能进行实现.本课程设计的系统开发平台为Windows XP,程序设计语言为C++,程序运行平台为Windws98/2000/XP/Seven。
在程序设计中采用了B-树方法提高书籍的查找速度。
关键词程序设计;图书管理系统;C++;数据结构;B-树1 索引1.1课程设计目的设计一个小型的图书管理系统,可以实现新增图书,读者借阅,读者归还等功能。
1。
2。
系统性能要求能较快的查到所要查找的图书;能准确统计当前每种书的库存,以确定此书是否可以外借;并且对外借的图书进行管理,记录借出时间、应还时间等。
1.3。
功能的实现1)新书入库:确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;2) 借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;3)归还:注销对借阅者的登记,改变该书的现存量.2 系统详细设计及实现1.所用的知识体系在整个程序的设计过程当中,用到了C++的一些基础知识,面向对象的思想和结构化的程序设计思想.数据结构的B—树建立索引,用索引提高查找的效率等。
2。
系统功能组成框图3 . 系统功能模块划分4。
流程图 4。
1录入图书信息4.2借阅图书4。
3归还图书输入图书和读者信息处理归还图书功能,清读者的借阅记录,将图书的在库数加一5 功能实现5.1 运行程序的主界面图5—1 操作界面5。
2 新书入库功能的操作界面图5—2新书入库5.3 查询数据的界面图5-3查询书籍5。
4 查询所有书籍的界面图 5—4显示库存5.5 图书借阅的界面图5-5借阅书籍5。
6 还书的界面图5—6还书3 参考文献[1]谭浩强C语言设计(第三版)清华大学出版社[2] 严蔚敏吴伟民数据结构(C语言版)清华大学出版社[3] 谭浩强 C++ 程序设计清华大学出版社[4]参考网址/manual/zh/function。
数据结构课程设计图书管理系统
数据结构课程设计图书管理系统在当今数字化的时代,图书管理系统对于图书馆的高效运作和管理至关重要。
作为数据结构课程设计的一部分,设计一个功能齐全、操作便捷的图书管理系统,不仅能够巩固我们所学的数据结构知识,还能提高我们解决实际问题的能力。
一、需求分析一个完善的图书管理系统应具备以下基本功能:1、图书信息管理:包括图书的书名、作者、出版社、出版年份、ISBN 号、分类号、库存数量等信息的录入、修改、查询和删除。
2、读者信息管理:记录读者的姓名、性别、身份证号、联系电话、借阅证号、借阅记录等,同时支持读者信息的增删改查。
3、借阅管理:实现读者的借书、还书操作,能够记录借阅日期和应还日期,并自动计算逾期天数和罚款金额。
4、图书查询:提供多种查询方式,如按书名、作者、出版社、分类号等进行精确或模糊查询,以便读者快速找到所需图书。
5、统计分析:能够统计图书的借阅次数、热门图书排行、读者借阅情况等,为图书馆的管理决策提供数据支持。
二、数据结构选择为了实现上述功能,我们需要选择合适的数据结构来存储和管理图书和读者的信息。
1、图书信息和读者信息可以使用结构体数组来存储。
结构体可以包含图书或读者的各项属性,数组则方便进行批量操作和遍历。
2、对于图书的分类和索引,可以使用二叉查找树或哈希表。
二叉查找树可以保证有序性,便于中序遍历获取排序后的图书信息;哈希表则能够快速定位特定的图书或读者,提高查询效率。
3、借阅记录可以使用链表来存储,便于动态地添加和删除借阅信息。
三、系统功能模块设计1、登录模块系统管理员和读者分别拥有不同的登录入口和权限。
管理员可以进行所有操作,读者只能进行查询和借阅相关操作。
2、图书管理模块图书录入:管理员输入图书的详细信息,将其添加到图书信息数组中。
图书修改:根据图书的 ISBN 号或其他唯一标识,修改图书的相关信息。
图书删除:按照指定条件删除图书记录。
图书查询:提供多种查询条件,快速检索图书信息。
数据结构 图书管理系统说明书
课程设计说明书1设计目的(小标题黑体五号字)《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。
进行数据结构课程设计要达到以下目的:⏹了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;⏹初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;⏹提高综合运用所学的理论知识和方法独立分析和解决问题的能力;训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
2.设计内容和要求设计内容:设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选择退出为止。
(1) 每种书的登记内容包括书号、书名、著作者、现存量和库存量;(2) 对书号建立索引表(线性表)以提高查找效率;(3) 要实现入库、借阅、归还等基本功能。
设计要求:(1) 符合课题要求,实现相应功能;(2) 要求界面友好美观,操作方便易行;(3) 注意程序的实用性、安全性。
3.本设计所采用的数据结构一个完整的图书信息管理系统包括各种各样的信息,如登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
所以每组信息必须先定义数组的元素。
C语言允许指定一种数据结构,这种类型的数据结构称为结构体。
由于数组存储是采用顺序存放,在内存空间中占用连续空间,所以若干图书信息的管理实质是对顺序存储的线性表的管理。
4.功能模块详细设计一、系统功能1、系统总功能此程序提供了图书管理的功能。
随着图书馆的书籍日益增多,对图书进行系统的管理,减轻图书管理员的工作负担显得越来越迫在眉睫。
本程序为登记及查询图书信息提供了极大的方便。
2、系统总框架4.1 详细设计思想学了一学期的c语言课,感觉到自己掌握的不多,又很少去上机实践。
在课程设计中,需要自己做一个系统,刚开始的时候,真的头都大了,发现以前自以为懂的,用起来好却并不是那么一回事,只好一点一点的学习。
数据结构课程设计图书管理系统
数据结构课程设计图书管理系统设计图书管理系统一、引言图书管理系统是为了方便图书馆进行图书的管理、借阅和归还而开发的软件系统。
本文将详细介绍设计一个图书管理系统所需的标准格式文本。
二、系统概述本图书管理系统旨在提供一个高效、便捷的图书管理平台,帮助图书馆实现图书的分类、借阅、归还、查询等功能。
系统主要包括以下模块:图书管理模块、借阅管理模块、读者管理模块、系统管理模块。
三、图书管理模块1. 图书录入功能a. 系统管理员可以录入新书籍的相关信息,包括书名、作者、出版社、ISBN 号、价格等。
b. 系统应提供图书信息的校验功能,确保录入的图书信息准确无误。
c. 系统应提供图书封面图片上传功能,以便读者更直观地了解图书。
2. 图书查询功能a. 读者和管理员可以根据关键字、作者、出版社等条件进行图书查询。
b. 系统应提供模糊查询和精确查询两种方式,以满足不同用户的需求。
3. 图书借阅功能a. 读者可以通过系统查询图书的借阅情况,并选择借阅。
b. 系统应记录借阅信息,包括借阅时间、归还时间等。
4. 图书归还功能a. 读者在归还图书时,系统应自动计算借阅天数,并生成相应的借阅费用。
b. 系统应提供归还图书的操作记录,以便管理员查看。
四、借阅管理模块1. 借阅记录查询功能a. 管理员可以查询所有借阅记录,并根据条件进行筛选。
b. 系统应提供按照借阅时间、归还时间等进行排序的功能,方便管理员进行统计分析。
2. 借阅统计功能a. 系统应提供借阅数量、借阅率等统计功能,方便管理员对图书馆的借阅情况进行分析。
五、读者管理模块1. 读者注册功能a. 读者可以通过系统进行注册,并填写个人信息。
b. 系统应提供校验功能,确保读者信息的准确性。
2. 读者信息修改功能a. 读者可以通过系统修改个人信息,如联系方式、密码等。
3. 读者信息查询功能a. 读者可以查询自己的借阅记录、借阅情况等。
六、系统管理模块1. 管理员管理功能a. 系统管理员可以管理其他管理员的账号和权限。
数据结构课程设计图书管理系统
数据结构课程设计图书管理系统Revised on November 25, 2020数据结构课程设计图书管理系统一需求分析该程序是模拟图书馆管理系统,实现图书采编入库、借书、还书、查询等基本业务。
此程序规定:(1) 管理员能够向系统中输入每种书的基本信息,包括书号、书名、作者、现存量和库存量、借阅记录,并保存记录;(2) 用户(读者)能够按书号、书名、作者查询图书信息;(3) 管理员能够实现图书采编入库(新购入一本书,经分类和确定书号之后登记到图书账目中去。
如果这种书在帐中已有,则只将总库存量增加)、借阅(如果书的现存量大于0,则借出一本,登记借阅者的图书证号和归还期限)、归还(删除对借阅者的登记,改变该书的现存量)、销毁(将图书从账目中删除)等操作。
二概要设计系统用到的抽象数据类型定义:1、ADT LinearList{数据元素:D={a i|a i∈D0,i=1,2,…,n,n≥0,D0为某一数据对象}关系:S={<a i,a i+1>|a i,a i+1∈D0,i=1,2,…,n-1}基本操作:(1)InitList(L)(2)DestroyList(L)(3)ClearList(L)(4)EmptyList(L)(5)ListLength(L)(6)Locate(L,e)(7)GetData(L,i)(8)InsList(L,i,e)(9)DelList(L,i,&e) }ADT LinearList2、ADT String{数据对象:D={ai |ai∈CharacterSet,i=1,2,…,n;n≧0}数据关系:R={<ai-1,ai>|ai-1,ai∈D,i=2,…,n;n≧0}基本操作:(1) StrAsign(S,chars)(2) StrInsert(S,pos,T)(3) StrDelete(S,pos,len)(4) StrCopy(S,T)(5) StrEmpty(S)(6) StrCompare(S,T)(7) StrLength(S)(8) StrClear(S)(9) StrCat(S,T)(10)SubString(Sub,S,pos,len)(11)StrIndex(S,pos,T)(12)StrReplace(S,T,V)(13)StrDestroy(S)}ADT String系统中的子程序和功能说明:InitBo(Book &boo);初始化图书信息InitRe(lend &Lin);初始化借阅者信息BinarySearch(Book boo,char SearchNum[]);二分法查找比较书号Buy(Book &boo, char BuyNum[]);新书采编入库系统Delete(Book &boo,char DeleteNum[]);清除图书信息系统Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[]);借阅图书处理系统Return(Book &boo,lend &Lin,char ReturnNum[],char BorrowerNum[]);归还图书系统SearchByNum(Book &boo,char SeaNum[]);按书号查找系统SearchByName(Book &boo);按书名查找系统SearchByAuth(Book &boo);按作者查询系统Menu();主菜单显示系统Search();查询系统子菜单main();主函数●系统程序功能结构图三详细设计●功能实现过程bool BinarySearch(Book boo,char SearchNum[]) ext=NULL;total++;/*总量加1*/}}void Delete(Book &boo,char DeleteNum[])/*清除图书信息*/{if(书库中没有此书)输出“无此书”;if(书库中有此书){strcpy(连续两本书的相关信息);现存量减1;库存量减1;}else 输出“此书已有借阅者,无法删除!”;}void Borrow(Book &boo,lend &Lin,char BorrowNum[],char CaNum[])/*借阅图书信息*/{if(没有找到此书) 输出“书库中无此书!”;if(书库中有此书){借出一本书后,该书的现存量减1;并在借阅记录链表中插入该条记录;再对应读者信息记录链表,如果已有该读者证号信息,直接在该链表中插入此次借阅记录;如果无该读者证号信息,申请新单链表存放借阅记录。
数据结构-图书管理系统
课程设计说明书课程名称: 数据结构课程设计班级: 11--电科1班姓名: 张海琴学号: 1111121132设计题目: 图书管理系统一、设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。
【基本要求】1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
【进一步完成内容】1)系统功能的进一步完善;2)索引表采用树表。
3)设计内容4)程序流程图5)源程序6)软件测试报告(包括所用到的数据及结果)二、概要设计有八个模块1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。
2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。
3)添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4)借书模块读者输入读书证号,证号存在输入要借的图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。
5)还书模块归还已借的图书,要先输入读者书证号,书证号存在继续输入要还的图书编号,图书编号存在并且借来此书,归还成功。
6)查询图书信息7)查询读者信息可查询读者姓名书证号,借了几本书,都是什么书和还书日期,还可以借几本书。
8)退出退出读书管理系统并保存读者和图书信息。
三、算法设计进入系统后首先进行图书初始化,输入图书的信息。
初始化之后,进入系统,显示功能列表,可选择任意系统,但在借书之前先要输入读者信息。
1)采编入库否2)输入读者信息3)借阅图书4)归还图书5)查询图书信息6)查询读者信息四、运行结果和调试分析图书信息初始化同一本新书入库的运行结果图不同的新书采编入库采编入库后查询图书信息的运行结果图登记读者信息借书借书后查询图书信息的运行结果图借同一本书的运行结果图借不同的书借两本书后查询读者信息的运行结果图还书运行结果图还书之后再查询读者信息的运行结果图还书后查询图书信息退出五、总结体会虽然这次的程序是通过上网查出来的,但是通过这次的实验使我知道了图书管理系统的流程,知道了一些以前不知道的知识,在运行程序时也遇到了一些问题,借书时只能借一本书,再借书就不能显示是借了还是不能借,把最多能借书的数量改了一下还是不行,最后在每一个判断输出之后都加了goto END借书,就能正常借书了。
数据结构——图书管理系统
石河子大学信息科学与技术学院计算机科学与技术专业课程设计报告二、结构图1.功能结构图2.主流程图图书管理系统新增图书信息的输入查询在架的图书信息恢复被删除图书信息为读者办理借书注册办理借书手续办理还书手续退出系统三、程序设计的想法和具体思路图书管理系统分为图书管理和会员管理两大部分。
设计一个图书类Book ,包括一本图书的基本管理功能,具有以下私有数据:int tag;//删除标记 1:已删 0:未删int no;//图书编号 char name[20];//书名int onshelf;//是否再架 1:再架 2:已借设计一个图书库类BDatabase ,具有以下私有数据:让用户选择要实行的操作.设置选择变量choiceStart输出提示借书 功能 Choice=1 还书 功能 Choice=2 图书 维护 Choice=3 读者 维护 Choice=4 退出 系统 Choice=0StopChoice =‘其它数值’提示输入错误int top; //图书记录指针Book book[Maxb]; //图书记录在其构造函数中,将bo ok.txt文件的所有录入读到book[]中。
处理完毕,在析构函数中将book[]中的所有未删除记录笑道book.txt文件中,中间的处理是对book[]进行的。
设计一个读者类Reader,包括一个读者的基本管理功能,具有以下私有数据:int tag; //删除标记 1:已删 0:未删int no; //读者编号char name[10]; //读者姓名int borbook[Maxbor];//所借图书设计一个读者库类RDatabase,具有以下私有数据:int top; //读者记录指针Reader read[Maxr];//读者记录在其构造函数中,将reader.txt文件的所有记录读到read[]中。
处理完毕,在析构函数中将read[]中的所有未删除记录写到reader.txt文件中,中间的处理都是对reader[]进行的。
数据结构课程设计--图书管理系统
1绪论
当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。
尤其对于复杂的信息管理,计算机能够充分发挥它的优越性。计算机进行信息管理与信息管理系统的开发密切相关,系统的开发是系统管理的前提。本系统就是为了管理好图书馆信息而设计的。
基于这此问题,有必要建立一个图书管理系统,使图书管理工作规范化,系统化,程序化,避免图书管理的随意性,提高信息处理的速度和准确性,能够及时、准确、有效的查询和修改图书情况。
2系统功能介绍
2.1系统设计
本次设计的图书信息管理系统采用数据结构语言模式,通过内部网络处理和信息交换,开发结构、解决数据共享问题。主要用于对图书馆日常工作的管理,主要任务是用计算机图书各种信息进行日常的管理,如录入、列表、查询、借阅、归还图书的管理等。本系统实现了图书馆的信息自动化管理,完成了图书管理系统的基本功能,该系统主要包括管理员子系统和书籍管理子系统退出子系统两个部分。其书籍管理子系统的主要功能是用于书籍信息的管理,如新书的入库、图书查询、借阅图书、归还图书等。
3.1添加图书
该模块主要实现对新入库的图书进行信息录入,录入信息包括:图书编号、名称、状态、借阅次数等。
运行界面如图2所示,运行成功提示如图 :
图3-1添加图书
3.2列表图书
该模块主要实现对所有登记的图书进行信息列表。
运行界面如图3.2所示,运行成功提示如图:
图3-2列表图书
3.3查询图书
该模块实现对图书的信息查询功能,查询方式包括:“按名查找”、“按类型查找”。
数据结构课程设计-图书管理系统
一、需求分析1. 图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。
B树(2-3树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;B树查找结果类型定义:节点指针、关键字序号和查找标志变量为整型。
2. 演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。
该演示系统,没有使用文件,全部数据放在内存存放。
四项基本业务都以书号为关键字进行的,采用了B树(2-3树)对书号建立索引,以提高效率。
3.图书管理系统实现功能:①采编入库:新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示B树现状。
②清除库存:实现某本书的全部信息删除操作,每清除一个书号则已以凹入表的形式显示B树现状。
③图书借阅:如果书的库存量大于零时则执行出借,登记借阅者的图书证号和姓名,系统自动抓取当前借阅时间和计算归还时间。
④图书预约:如果某书库存为零,则记录预约者姓名和证号,系统自动抓取当前预约时间和取书时间。
⑤图书归还:注销借阅者信息,并改变该书的现存量。
⑥作者专区:输入作者名字,系统将查找相应作者全部著作并显示出来。
⑦图书信息:可以根据书号查阅此书基本信息、借阅信息和预约信息,亦可以查找全部图书基本信息。
二、概要设计1.抽象数据类型B树定义:ADT BTree{数据对象:D是具有相同特性的数据元素的集合。
各个数据元素均含有类型相同,可惟一标识数据元素的关键字。
数据关系:数据元素同属于一个集合并且:一棵m阶的B树,或为空,或为满足下列特性的m叉树:树中每个结点至多有m棵子树;若根结点不是叶子结点,则至少有两棵子树;除根之外的所有非终端结点至少有m/2(取上限)棵子树;所有的非终端结点包含下列信息数据:(n,A0,K1,A1,K2,A2,K3,……,Kn,An)其中:Ki(i=1,2,……n)为关键字,且Ki<Ki+1(i=1,2,……n-1);Ai(i=0,……n)为指向子树根结点的指针,且指针Ai-1所指子树中所有结点的关键字均小于Ki(i=1,2,……n),An所指子树中所有结点的关键字均大于Kn,n(m/2(取上限)-1<=n<=m-1)为关键字的个数基本操作:SearchBTree(T ,key);初始条件:B树T存在,key为和关键字类型相同的给定值。
数据结构图书管理系统
一.实验目的巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生能够熟练应用数据结构的知识写程序。
通过本课程的学习,能熟练掌握几种基本数据结构的基本操作。
针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的正确求解过程并编写代码实现。
二.实验内容图书管理系统主要完成以下几方面的功能:输入信息——enter();显示信息———display( );查找以书名作为关键字———search( );删除信息———delete( );存盘———save ( );装入———load( ) ;三.实验步骤(可选)1.数据结构设计:添加,查找,删除图书信息,用链式存储比较方便,由于查找,删除都是以书名或电话号码为关键字进行的,因此要用到双向链表,效率高,以实现各种功能。
由此重点和难点是双向链表的建立,查找,删除等基本操作。
2.算法的设计流程图:3.主要函数代码:dlink *enter(dlink *h);// 输入图书信息函数int menu_select();//菜单选择函数dlink *add(dlink *h);//增加读者信息函数void search(dlink *h) ;//查找图书函数dlink *deletebyB_name(dlink *h);// 以书名为关键字删除dlink *deletebyno(dlink *h) ;//以图书编号为关键字删除void output(dlink *h);// 输出图书信息函数void searchbyB_name(dlink *h) //按书名查找void searchbyno(dlink *h) //按编号查找void save(dlink *h) //保存图书信息到文件struct information{string B_name;string B_author;string B_no;string B_pub;string B_sum;};struct information a[120]; //建立图书信息结构体typedef struct doublelink //定义双向链表{struct information data;struct doublelink *Llink,*Rlink;}dlink;dlink *enter(dlink *h) //输入图书信息函数{ dlink *head,*r,*p,*q;head=h;r=h;q=h->Rlink;system("cls");//新建用户信息p=new dlink;cout<<"\n\t\t**************** 请输入图书信息****************"<<endl;cout<<"请输入书名:"<<endl;cin>>p->data.B_name;cout<<"请输入作者名: "<<endl;cin>>p->data.B_author;cout<<"请输入编号名: "<<endl;cin>>p->data.B_no;cout<<"请输入出版社: "<<endl;cin>>p->data.B_pub;cout<<"请输入馆藏量名: "<<endl;cin >>p->data.B_sum;p->Rlink=NULL;while(q!=NULL){r=q;q=q->Rlink;}p->Llink=r;r->Rlink=p;r=p;num++;char z;cout<<" 是否要继续插入新图书信息? (Y/N):"<<endl;cin>>z;if((z=='y')||(z=='Y'))head=insert(head);return head;}void searchbyB_name(dlink *h) //按书名查找{if(num==0){cout<<"\n\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t*****无法执行查找操作!!!!******"<<endl;cout<<endl;}else{dlink *head,*p,*q;string nam;head=h;p=h->Rlink;int i,j=1,k=1,mark=0;system("cls");cout<<"请输入要查找的图书书名:"<<endl;cin>>nam;for(i=k;i<=num;i++,p=p->Rlink){while(p&&p->data.B_name!=nam){q=p;p=p->Rlink;j++;}if(p){cout<<"您要查找的图书信息为:"<<endl;cout<<"*************************************************************************** ****"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*************************************************************************** ****"<<endl;cout<<endl;mark=1;if(p->Rlink==NULL){cout<<"\n\t已无重名信息"<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;}}if(p==NULL){if(mark==1){if(q->data.B_name!=nam){cout<<"\n\t已无重名信息"<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;}}else{cout<<"\n\t\t^^^^^搜索的图书不存在!!!!!^^^^^^"<<endl;cout<<endl;cout<<"\n\t您是否继续下一个查找???(Y/N)"<<endl;char z;cin>>z;if((z=='y')||(z=='Y'))search(head);else break;;}}dlink *deletebyB_name(dlink *h) //按书名删除图书信息{dlink *head,*p,*q;if(num==0){ cout<<"\n\t\t当前通讯录没有任何联系人信息!!!"<<endl;cout<<"\n\t\t\t\t删除操作无法执行!!!!!!!!!"<<endl;}else{string nam;int flag=1,k=1,i,j=1;head=h;p=h->Rlink;system("pause");system("cls");cout<<"请输入要删除的图书书名:"<<endl;cin>>nam;for(i=k;i<=num;i++,p=p->Rlink){while(p&&p->data.B_name!=nam){q=p;p=p->Rlink;j++;} //whileif(p) //waiif{cout<<"您要删除的图书信息为:"<<endl;cout<<"weiyu"<<j+1<<"weizhi"<<endl;cout<<"*************************************************************************** ****"<<endl;cout<<"\n\t书名: "<<p->data.B_name<<endl;cout<<"\n\t作者名: "<<p->data.B_author<<endl;cout<<"\n\t编号名: "<<p->data.B_no<<endl;cout<<"\n\t出版社: "<<p->data.B_pub<<endl;cout<<"\n\t馆藏量: "<<p->data.B_sum<<endl;cout<<"*************************************************************************** ****"<<endl;char z;cout<<"您确定要删除该图书信息吗?(Y/N)"<<endl;cin>>z;if((z=='y')||(z=='Y')){if(num==1){p->Llink->Rlink=NULL;free(p);num--;}elseif(p->Llink==head){ p->Rlink->Llink=head;p->Llink->Rlink=p->Rlink;free(p);num--;}else if(p->Rlink==NULL){p->Llink->Rlink=NULL;free(p);num--;}else{ p->Rlink->Llink=p->Llink;q->Rlink=p->Rlink;free(p);num--;}cout<<"\n\t\t已删除成功!"<<endl;break;/*char s;cout<<"\n您是否继续删除相同书名的图书???(Y/N)"<<endl;cin>>s;if((s=='y')||(s=='Y'))continue;else break; */}else {cout<<"\n\t已放弃删除!!"<<endl;//有问题char d;cout<<"\n您是否继续删除相同书名的图书???(Y/N)"<<endl;cin>>d;if((d=='y')||(d=='Y'))continue;else break;}}//waiifelse {cout<<"没有此图书信息"<<endl;char a;cout<<"\n您是否要继续删除???(Y/N)"<<endl;cin>>a;if((a=='y')||(a=='Y'))head=deletebyB_name(head);elsebreak;}}//for}//elsecout<<endl;return head;}//wai四.实验的结果及分析。
数据结构课程设计——图书管理信息系统
图书管理信息系统一、课程设计题目:图书管理信息系统二、课程设计内容:实现图书管理信息系统的设计。
这是一个数据结构的综合使用,涉及的知识比较全面,特别是对文件的使用更为全面。
进入系统后,操作员可进行系统维护、读者管理、图书管理、图书流通、退出系统等操作。
系统维护:有“初始化”和“读盘”两个重要操作。
第一次开始运行时,必须选择“初始化”,使有关文件指针、计数器等初始化为0;而在以后的每次操作开始时,选择“读盘”,将保存过的相关图书信息磁盘文件读入,以便进行各类操作。
读者管理:可实现读者信息的追加一项输入。
需要输入读者号、读者名、可借书数。
输入“y”可连续输入信息,若输入“n”则结束输入,退出读者管理。
图书管理:有“图书信息输入”和“图书信息查询”两个重要操作。
若选“图书信息输入”,就进入相关子模块,在输入信息的同时建立相应的索引及索引文件和索引链头文件,输入书号、书名、作者名、出版社、分类号、藏书量等信息,根据提示输入“y”实现连续输入,若输入“n”则结束输入,退出图书管理;有了图书信息数据之后,就可以进行图书信息的查询以及图书借阅等操作了。
若选“图书信息查询”,可根据提示按书号、书名、作者、出版社等进行查询,系统会将查询结果输出。
图书流通:有“借书处理”和“还书处理”两个重要操作。
当选择“借书处理”,系统接受输入信息后,首先查询读者文件。
若没查到,显示“非法读者!”,若查到,则再检查该读者书是否已借满,如果未借满,则继续检查图书文件;否则显示“书已借满!”。
检查图书文件如发现书号不存在或书已借出,都会提示读者“非法书号!”或“书已借出”,否则,进行借出处理,修改借阅文件、读者文件以及图书主文件的相关数据项,并显示“借书成功!”。
当选择“还书处理”,系统在接受输入信息之后,首先用书号查询借还书文件,若找到,则填入还书日期,然后再用书号查询图书主文件,修改借出数,用读者号查找读者文件,修改读者的借书数,而后显示“还书成功!”,否则显示“非法书号!”并返回主控菜单。
数据结构课程设计-图书管理
数据结构课程设计-图书管理---1. 引言本文档是数据结构课程设计的项目文档,主题为图书管理系统。
该系统旨在通过使用数据结构和算法,实现对图书的管理和查询功能。
本文档将详细说明系统的需求分析、系统设计、开发和测试。
2. 需求分析在这一章节中,我们将对图书管理系统的需求进行详细分析。
2.1 功能需求本系统主要包含以下功能:- 图书录入:管理员可以通过系统添加新的图书信息。
- 图书查询:用户可以根据不同的条件查询图书信息。
- 图书借阅:用户可以借阅图书,并进行相应的借阅和归还操作。
- 图书管理:管理员可以对图书进行管理,如修改图书信息、删除图书等。
- 用户管理:管理员可以管理系统用户的信息,包括添加新用户、删除用户等。
2.2 性能需求系统需要保证以下性能指标:- 响应时间:系统对用户的请求需要在合理的时间范围内进行响应,尽量避免长时间等待。
- 并发能力:系统需要支持多个用户同时使用,同时对于查询和借阅等高频操作需要有良好的并发处理能力。
- 数据存储和管理:系统需要能够高效地存储和管理大量的图书信息和用户信息。
2.3 界面需求系统的用户界面应该简洁、直观,易于使用,并且具有良好的用户体验。
界面设计需要考虑到不同用户的需求,并提供相应的功能入口和导航。
3. 系统设计在这一章节中,我们将对图书管理系统进行整体设计和模块划分。
3.1 总体架构图书管理系统的总体架构包括以下模块:- 用户管理模块:负责用户的注册、登录以及个人信息管理。
- 图书管理模块:负责图书的录入、查询、借阅和管理。
- 数据库管理模块:负责与数据库的交互,包括数据的读取和存储。
3.2 模块设计在本节中,我们将对各个模块进行详细设计。
3.2.1 用户管理模块该模块包括以下功能:- 注册:用户可以通过用户名和密码进行注册。
- 登录:注册成功后,用户可以使用用户名和密码进行登录。
- 个人信息管理:登录后,用户可以修改个人信息,包括用户名、密码、联系方式等。
数据结构_c语言_图书管理系统
图书借阅管理是图书馆一个最基本的工作,这里用C语言的知识设计开发一个简单的图书借阅管理系统,系统主要实现图书信息和学生信息的管理,图书查询及图书借阅管理。
系统设计要求系统主要实现以下六个功能:①用户登录。
系统用户分为管理员和学生。
管理员登录时必须输入密码,密码正确才能进入系统;学生登录时无需密码,输入学号即可。
②图书信息管理。
图书信息包括:书号、书名、作者、图书分类、出版社、出版时间、单价、总量和库存量。
图书信息管理包括:输入图书信息(从键盘或从文件)、保存图书信息、修改图书信息、增加图书信息、删除图书信息和输出图书信息。
③学生信息管理。
学生信息包括:学号、姓名、借书卡(借阅标记、书号、借阅时间)。
学生信息管理包括:输入学生信息(从键盘或从文件)、保存学生信息、修改学生信息、增加学生信息、删除学生信息和输出学生信息。
④图书查询功能。
图书查询分为:按书名查询、按作者查询、按图书分类查询、按出版社查询和按出版时间查询。
⑤借书功能。
借书时,先判断学生是否有空闲的借书卡,若没有则应输出提示信息;若有空闲的借书卡,则要求学生输入所借图书的书号,若该书库存量不为0,则将该书借出,同时在借书卡上记录该书的书号和借阅时间,并修改该书的库存量。
⑥还书功能。
还书时,先检查学生的借书卡,若借书卡都为空,则不能进行还书操作,若有借书卡不为空,则可以还书,此时要求学生输入所还图书的书号,将对应借书卡上的记录清零,并修改该书的库存量。
数据结构设计系统共定义了四个结构体类型,包括日期类型、借书卡类型、图书类型和学生类型,其中在图书类型中要使用日期类型,而在学生类型中要使用日期和借书卡类型,定义如下:typedef struct date //日期类型{ short year; //年short month; //月short day; //日}SDATE;typedef struct library_card //借书卡类型{ Short flag; //是否借阅标记Char ISBN[20]; //所借图书的书号SDATE bor_time; //借阅时间}SLCARD;typedef struct student //学生类型{ char num[15]; //学号char name[20]; //姓名SLCARD card[5]; //借书卡(规定每人最多有5张)}SSTUD;typedef struct book //图书类型{ char ISBN[20]; //书号char bookname[40]; //书名char author[20]; //作者char publisher[30]; //出版社char bookclass[20]; //图书分类short total_num, stock_num; //总量,库存量float price; //单价SDATE publish_time; //出版时间}SBOOK;系统定义了两个全局变量数组,分别存放图书信息和学生信息,因数组大小是固定的,为使用方便在系统中定义两个符号常量,具体定义如下:#define BOOKNUM 1000 // BOOKNUM为系统允许的最大图书数量#define STUDNUM 100 // STUDNUM为系统允许的最多学生人数SSTUD student[STUDNUM]={0}; //学生数组,初始化为0SBOOK book[BOOKNUM]={0}; //图书数组,初始化为03. 功能模块设计(1) main函数的设计:由于图书信息和学生信息都保存在文件中,系统运行的第一个工作是从文件中将图书信息和学生信息读入到内存数组book和数组student中,在读入信息的过程中同时统计出目前图书的数量和学生的人数,并将数据分别存放在整型变量bn和sn中,bn为图书数量,sn为学生人数。
数据结构图书管理系统
数据结构课程设计说明书年月日1设计目的(小标题黑体五号字)设计一个计算机管理系统完成图书管理基本业务(数据可以存储在一个数据文件中,数据结构、具体数据自定)。
2.设计内容和要求具体功能有:1)每种书的登记内容包括书号、书名、著作者、出版单位、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;4)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;5)归还:注销对借阅者的登记,改变该书的现存量。
3.本设计所采用的数据结构所用数据结构:线性表、查找、排序链表:用一组地址任意的存储单元存放线性表中的数据元素。
以元素(数据元素的映象) + 指针(指示后继元素存储位置)= 结点(表示数据元素或数据元素的映象)以“结点的序列”表示线性表称作线性链表(单链表)单链表是一种链式存取的结构,为找第 i 个数据元素必须先找到第 i-1 个数据元素。
因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 和 i。
(1)malloc(size)在内存的动态存储区申请一个长度为size字节的连续空间。
(2)calloc(n,size)在内存的动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。
若此函数未被成功执行,函数返回值为0。
(3)free(p)释放由指针p所指向的存储单元,而存储单元的大小是最近一次调用malloc()或calloc()函数时所申请的存储空间。
运用了单链表的插入、删除、排序、修改等一些操作!4.功能模块详细设计4.1 详细设计思想(一)基本思想:(二)图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。
(三)程序中的主要函数有:void main() //主函数int CreateListR(LinkList *L) //尾插法建表void LocateElem(LinkList *L) //查询int Sort(LinkList *L) //递增有序排序(直接插入排序法)void Display(LinkList *L) //输出排序结果ModifyList(LinkList *L) //修改int ListDelete(LinkList *L) //删除void Borrow(LinkList *L) //借阅void Return(LinkList *L) //归还4.2 核心代码#include <stdio.h> #include <string.h> #include<stdlib.h>#include<malloc.h>typedef struct {int num;char name[20];char author[20];char press[20];int count;char price[10];} ElemType;typedef struct LNode //定义单链表结点类型{ElemType data;struct LNode *next;} LinkList;void InitList(LinkList *L) //初始化线性表{L = (LinkList *) malloc(sizeof(LinkList)); //创建头结点L->next = NULL;}int CreateListR(LinkList *L) //尾插法建表{int i, n;LinkList *s, *q, *p;p = L;while (p->next != NULL )p = p->next;printf("请输入需要录入的图书信息的个数:n=");scanf("%d", &n);for (i = 1; i < n + 1; i++) {s = (LinkList *) malloc(sizeof(LinkList));printf("书号书名作者出版社名称存馆数量定价\n");scanf("%d%s%s%s%d%s", &s->data.num, s->, s->data.author, s->data.press, &s->data.count, s->data.price);q = L->next;if (q == NULL ) {p->next = s;p = s;p->next = NULL;printf("录入成功!\n");continue;}while (q != NULL ) {if (strcmp(s->, q->) == 0) {printf("此图书已存在!");printf("请重新输入:\n");scanf("%d%s%s%s%d%s", &p->data.num, p->,p->data.author, p->data.press, &p->data.count,p->data.price);}q = q->next;}p->next = s;p = s;p->next = NULL;printf("录入成功!\n");}return 0;}void LocateElem(LinkList *L) //查询{LinkList *p = L->next; //p指向第一个数据结点int c;int x = 0;char name1[10], author1[10], press1[10];printf(" 1 按书名查询:\n");printf(" 2 按作者名查询:\n");printf(" 3 按出版社名称:\n");printf(" 4 返回\n");printf(" 请选择1--4进行操作:\n");scanf("%d", &c);if (c > 4 || c < 1) {printf("您的输入有误!\n");scanf("%d", &c);}switch (c) {case 1:printf("请输入图书书名: \n");scanf("%s", name1);while (p != NULL ) {if (strcmp(name1, p->) != 0) //查找图书书名p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data.num, p->,p->data.author, p->data.press, p->data.count,p->data.price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 2:printf("请输入图书作者:\n");scanf("%s", author1);while (p != NULL ) {if (strcmp(author1, p->data.author) != 0) //查找图书作者p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data.num, p->,p->data.author, p->data.press, p->data.count,p->data.price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 3:printf("请输入图书的出版社名称: \n");scanf("%s", press1);while (p != NULL ) {if (strcmp(press1, p->data.press) != 0) //查找图书出版社名称p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d %s %s %s %d %s",p->data.num, p->, p->data.author,p->data.press, p->data.count, p->data.price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起!不存在此图书\n");break;case 4:break;}}int Sort(LinkList *L) //递增有序排序(直接插入排序法){LinkList *p = L->next, *q, *r; //p指向第一个数据结点if (p != NULL ) //若原单链表中有一个或以上的数据结点{r = p->next; //r保存*p结点直接后继结点的指针p->next = NULL; //构造只含一个数据结点的有序表p = r;while (p != NULL ) {r = p->next; //r保存*p结点的直接后继结点的指针q = L;while (q->next != NULL && q->next->data.num < p->data.num)q = q->next; //在有序表中找插入*p的直接前驱结点*q的位置p->next = q->next; //将*p插入到*q之后q->next = p;p = r; //扫描原单链表余下的结点}}return 0;}void Display(LinkList *L) //输出排序结果{LinkList *p = L->next;while (p != NULL ) {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d \t %s \t %s\t %s\t%d\t %s", p->data.num,p->, p->data.author, p->data.press, p->data.count,p->data.price);printf("\n");p = p->next;}}int ModifyList(LinkList *L) //修改{LinkList *p = L;char name1[10];printf("请输入要修改的图书的书名:\n");scanf("%s", name1);while (p != NULL ) {if (strcmp(name1, p->) == 0) //查找所要修改的书名{printf("请输入修改后的信息!\n");printf("书号书名作者出版社名称存馆数量定价\n");scanf("%d%s%s%s%d%s", &p->data.num, p->, p->data.author,p->data.press, &p->data.count, p->data.price);printf("修改成功!\n");return 0;}p = p->next;}printf("不存在此图书\n");return 0;}int ListDelete(LinkList *L) //删除{LinkList *p = L->next, *q = L;char name1[10];if (p != NULL ) {printf("请输入要删除的书名:");scanf("%s", name1);}while (p->next != NULL && strcmp(p->, name1) != 0) {p = p->next;q = q->next;}if (p->next != NULL ) //如果p此时不是最后一个节点,说明此时已经找到书{q->next = p->next;printf("删除成功!\n");return 0;}if (p->next == NULL && strcmp(name1, p->) != 0) //如果p此时为最后一个结点并且没有找到与之相符的书名{printf("你输入的书名不存在,请核实后重新输入!\n");} else {q->next = NULL;printf("删除成功!\n");}return 0;}void Borrow(LinkList *L) //借阅{LinkList *p = L->next;char name1[10];printf("请输入要借阅的图书的书名:\n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->) != 0)p = p->next;if (p->next == NULL && strcmp(name1, p->) != 0)printf("此图书不存在!\n");else if (p->data.count < 1)printf("此书已借完!\n");else if (strcmp(name1, p->) == 0) {printf("借书成功!\n");p->data.count--;}}void Return(LinkList *L) //归还{LinkList *p = L->next;char name1[10];printf("输入归还书的书名: \n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->) != 0)p = p->next;if (p->next == NULL && strcmp(name1, p->) != 0)printf("错误!此图书不存在!\n");else if (strcmp(name1, p->) == 0) {printf("该书归还成功!\n");p->data.count++;}}void menu() { //菜单函数printf("---------------------------------------------------------- \n");printf(" 欢迎光临图书管理系统! \n");printf("----------------------------------------------------------- \n");printf("1.图书信息录入添加功能:\n");printf("2.图书信息查询功能:\n");printf("3.图书信息排序功能:\n");printf("4.图书的修改功能:\n");printf("5.图书的删除功能:\n");printf("6.图书借阅功能:\n");printf("7.图书归还功能:\n");printf("0.退出系统:\n");printf("请选择你需要的操作:\n");}int main() //主函数{int s;LinkList *L;L = (LinkList *) malloc(sizeof(LinkList));InitList(L);menu();printf("请输入编号:\n");scanf("%d", &s);while (s != 0) {switch (s) {case 1:CreateListR(L);break;case 2:LocateElem(L);break;case 3:Sort(L);Display(L);break;case 4:ModifyList(L);break;case 5:ListDelete(L);break;case 6:Borrow(L);break;case 7:Return(L);break;case 0:printf("谢谢使用\n");break;}scanf("%d", &s);}return 0;}(此页附在说明书后,请在验收前填好)。
数据结构——图书管理系统
数据结构——图书管理系统图书管理系统是一种用于管理图书馆藏书和读者借阅情况的软件系统。
它通过建立一个数据库来存储图书的相关信息,并提供了一系列的功能来方便图书管理员进行图书管理和读者借阅操作。
一、图书管理功能:1. 图书入库:管理员可以通过系统将新购买的图书录入到系统中,包括图书的书名、作者、出版社、ISBN号、价格等信息。
2. 图书查询:管理员可以根据图书的关键词进行查询,以便快速找到所需图书的详细信息。
3. 图书借还:系统可以记录读者的借书和还书情况,包括借书日期、还书日期等信息。
管理员可以根据读者的借书卡号或者图书的ISBN号进行借还操作,并更新图书的可借数量。
4. 图书续借:读者可以在借书期限到期前申请续借,管理员可以在系统中进行续借操作,并更新借书日期。
5. 图书预约:读者可以通过系统预约已被借出的图书,当图书归还后,系统会自动通知预约者前来借阅。
二、读者管理功能:1. 读者注册:读者可以通过系统进行注册,填写个人信息并获得借书卡号。
2. 读者信息管理:管理员可以对读者的个人信息进行管理,包括修改个人信息和删除读者信息。
3. 读者查询:管理员可以根据读者的借书卡号或者关键词进行查询,以便快速找到读者的详细信息。
4. 读者借阅情况统计:系统可以记录读者的借阅情况,包括借阅次数、借阅图书的种类等信息。
管理员可以通过系统生成借阅报表,用于分析读者的借阅情况。
三、系统管理功能:1. 用户权限管理:系统可以设置不同的用户权限,包括管理员和普通用户。
管理员具有对系统的所有功能进行操作的权限,而普通用户只能进行图书查询和预约操作。
2. 数据备份与恢复:系统可以定期进行数据备份,以防止数据丢失。
同时,系统也提供了数据恢复功能,可以在数据丢失时恢复到最近的备份点。
3. 系统日志记录:系统可以记录管理员和读者的操作日志,包括登录日志、图书借还日志等,以便管理员进行操作审计和故障排查。
以上是一个基本的图书管理系统的功能描述,实际的系统还可以根据实际需求进行扩展和定制。
数据结构-图书管理系统
数据结构-图书管理系统数据结构图书管理系统在当今数字化的时代,图书管理系统扮演着至关重要的角色。
无论是学校的图书馆、城市的公共图书馆还是企业内部的资料室,都需要一个高效、便捷且可靠的图书管理系统来满足人们对于知识获取和信息管理的需求。
图书管理系统的核心在于对数据的有效组织和管理,而这就离不开数据结构的运用。
数据结构就像是图书馆的书架,为图书的存放和检索提供了有序的方式。
常见的数据结构如数组、链表、栈、队列、树和图等,在图书管理系统中都有着各自独特的应用。
首先,让我们来谈谈数组。
数组是一种线性的数据结构,它可以用来存储固定数量的相同类型元素。
在图书管理系统中,可以用数组来存储图书的基本信息,如书名、作者、ISBN 码等。
由于数组的存储是连续的,所以在读取和写入数据时具有较高的效率。
但它也有局限性,那就是在插入和删除元素时,需要移动大量的数据,操作相对较为复杂。
链表则是另一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
链表在图书管理系统中的优势在于插入和删除操作比较简单,只需要修改指针即可。
例如,当需要删除一本图书的信息时,只需要将相关节点的指针调整,而无需像数组那样移动大量数据。
然而,链表在随机访问元素时效率较低,因为需要从头开始依次遍历节点才能找到目标元素。
栈和队列也是图书管理系统中常用的数据结构。
栈遵循“后进先出”的原则,就像一叠盘子,最后放上去的盘子最先被拿走。
在图书管理系统中,栈可以用于保存用户的操作记录,以便在需要时进行回退。
队列则遵循“先进先出”的原则,类似于排队买票的人群,先来的先得到服务。
可以用队列来处理图书借阅的排队请求,保证公平性和有序性。
接下来是树结构,二叉树和二叉搜索树在图书管理系统中应用广泛。
二叉搜索树的特点是左子树的节点值小于根节点值,右子树的节点值大于根节点值。
这使得在查找特定图书时能够大大提高效率,时间复杂度为 O(log n)。
此外,还可以使用平衡二叉树(如 AVL 树、红黑树等)来保证树的平衡性,进一步提高查找、插入和删除操作的效率。
数据结构课程设计——图书借阅管理系统
数据结构课程设计——图书借阅管理系统图书借阅管理系统是一个用于管理图书借阅和归还的系统,它可以帮助图书馆或其他类似机构更有效地管理图书资源,提供给用户更方便的借阅和归还服务。
本文将介绍图书借阅管理系统的设计和功能。
一、系统概述图书借阅管理系统是一个基于数据结构的软件系统,它主要包括图书管理、借阅管理、归还管理和用户管理等功能模块。
通过该系统,用户可以查询图书信息、借阅图书、归还图书以及管理个人信息等操作,实现了图书借阅流程的自动化和信息化。
二、系统设计1. 数据库设计系统使用关系型数据库存储图书信息、用户信息、借阅记录等数据。
数据库中的表包括图书表、用户表、借阅记录表等。
图书表包含图书的基本信息,如图书编号、书名、作者、出版社等;用户表包含用户的基本信息,如用户编号、姓名、性别、联系方式等;借阅记录表包含借阅的相关信息,如借阅编号、借阅日期、归还日期等。
2. 界面设计系统的用户界面采用图形化界面,方便用户操作和交互。
主要界面包括登录界面、主界面、图书查询界面、借阅界面、归还界面和个人信息管理界面等。
登录界面用于用户身份验证,主界面是系统的入口,其他界面用于具体的功能操作。
3. 功能设计(1) 图书管理功能该功能主要包括图书的添加、删除、修改和查询。
管理员可以通过图书管理界面对图书进行管理,包括添加新的图书、删除不需要的图书、修改图书的信息以及查询图书的详细信息。
(2) 借阅管理功能该功能主要包括借阅图书和归还图书。
用户可以通过借阅界面查询图书并借阅,系统会记录借阅信息并更新图书的可借数量。
用户在归还界面归还图书时,系统会更新借阅记录并将图书的可借数量恢复。
(3) 用户管理功能该功能主要包括用户信息的管理和查询。
管理员可以通过用户管理界面添加新用户、删除用户、修改用户信息以及查询用户的详细信息。
(4) 个人信息管理功能该功能主要包括用户个人信息的修改和查询。
用户可以通过个人信息管理界面修改自己的个人信息,如姓名、性别、联系方式等。
书籍信息管理系统系统数据结构设计
书籍信息管理系统系统数据结构设计
书籍信息管理系统的数据结构设计可以包括以下几个方面的数据结构:
1. 书籍信息数据结构:包含书籍的基本信息,如书名、作者、出版社、出版日期、ISBN等。
可以使用一个书籍对象来表示,或者使用一个包含这些信息的数据结构,如字典或者结构体。
2. 书籍库存数据结构:记录每本书的库存信息,如当前库存数量、进货价格、销售价格等。
可以使用一个库存对象来表示,或者使用一个包含这些信息的数据结构,如字典或者结构体。
3. 图书馆数据结构:记录所有的书籍信息和库存信息。
可以使用一个图书馆对象来表示,其中包括一个书籍信息的集合和一个库存信息的集合。
可以使用列表、数组、哈希表等数据结构来存储这些信息。
4. 读者信息数据结构:记录读者的基本信息,如姓名、年龄、性别、借书数量等。
可以使用一个读者对象来表示,或者使用一个包含这些信息的数据结构,如字典或者结构体。
5. 借阅记录数据结构:记录读者借阅书籍的相关信息,如借阅日期、归还日期、借阅状态等。
可以使用一个借阅记录对象来表示,或者使用一个包含这些信息的数据结构,如字典或者结构体。
这些数据结构可以相互关联,实现书籍信息的管理和查询功能。
在具体实现中,可以根据系统需求和编程语言的特性选择合适的数据结构来表示和存储这些信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书课程名称: 数据结构课程设计班级: 11--电科1班姓名: 张海琴学号: 1111121132设计题目: 图书管理系统一、设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。
【基本要求】1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;2)对书号建立索引表(线性表)以提高查找效率;3)系统主要功能如下:*采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;*借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;*归还:注销对借阅者的登记,改变该书的现存量。
【进一步完成内容】1)系统功能的进一步完善;2)索引表采用树表。
3)设计内容4)程序流程图5)源程序6)软件测试报告(包括所用到的数据及结果)二、概要设计有八个模块1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。
2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。
3)添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4)借书模块读者输入读书证号,证号存在输入要借的图书编号,不能借同一本书,如果借书数量以达到最大也不能借书。
5)还书模块归还已借的图书,要先输入读者书证号,书证号存在继续输入要还的图书编号,图书编号存在并且借来此书,归还成功。
6)查询图书信息7)查询读者信息可查询读者姓名书证号,借了几本书,都是什么书和还书日期,还可以借几本书。
8)退出退出读书管理系统并保存读者和图书信息。
三、算法设计进入系统后首先进行图书初始化,输入图书的信息。
初始化之后,进入系统,显示功能列表,可选择任意系统,但在借书之前先要输入读者信息。
1)采编入库否2)输入读者信息3)借阅图书4)归还图书5)查询图书信息6)查询读者信息四、运行结果和调试分析图书信息初始化同一本新书入库的运行结果图不同的新书采编入库采编入库后查询图书信息的运行结果图登记读者信息借书借书后查询图书信息的运行结果图借同一本书的运行结果图借不同的书借两本书后查询读者信息的运行结果图还书运行结果图还书之后再查询读者信息的运行结果图还书后查询图书信息退出五、总结体会虽然这次的程序是通过上网查出来的,但是通过这次的实验使我知道了图书管理系统的流程,知道了一些以前不知道的知识,在运行程序时也遇到了一些问题,借书时只能借一本书,再借书就不能显示是借了还是不能借,把最多能借书的数量改了一下还是不行,最后在每一个判断输出之后都加了goto END借书,就能正常借书了。
程序有点长,本来一个函数就能完成一个功能,他用了两个函数就我把自己能改成一个的改了。
借书系统比较复杂,不容易懂,和同学交流了一下自己看了看才明白。
这次的实验还让我复习了数据结构的一些知识,如数组,while语句,switch 语句,链表,还知道了如何使用system("cls")清屏,还知道了strcmp是用来比较字符串s1和s2大小的,strcpy使用来把字符串s2的值赋给s1的。
这次的实验增加了我们自己动手动脑的能力,希望多做一些这样的实验,很有意义,和现实生活结合的程序增加了我的兴趣。
源代码#include<stdio.h>#include <string.h>#include <stdlib.h>#include<conio.h>#define Max 4typedef struct book{char book_num[10];char book_name[20];char book_writer[10];int book_xy;int book_kc;struct book *next;}BK;typedef struct borrow{char borrow_book_num[10];char limit_date[8];}BO;typedef struct reader{char reader_num[10];char reader_name[10];int right;BO borrow[Max];struct reader *next;}RD;BK *h_book;RD *h_reader;void Login();int Menu();void Init();void Init_book();void Menu_select();void Insert_New_Book();void Find_Book();void add_reader();void Print_reader();void Print_book();void Borrow_Book();void Return_Book();void Save();void Save_Book();void Save_Reader();void Load();void Load_Reader();void Load_Book();void Login(){system("cls");printf("\n\n\n\t\t***************************************\n"); printf("\n\n\n\t\t\t欢迎使用图书管理系统\n");printf("\n\n\n\t\t***************************************\n"); printf("\n\n\t\t本程序制作人学号:\n\n\n\n\n\n\n");printf("\n\n\n\t\t 按任意键进入系统...");getch(); system("cls");}int Menu() /*主菜单*/{ int dm;printf("\n\t\t图书管理系统主菜单\n");printf("=================================================\n"); printf("*\t0----退出系统 \n");printf("*\t1----采编入库 \n");printf("*\t2----登记读者 \n");printf("*\t3----借阅登记 \n");printf("*\t4----还书管理 \n");printf("*\t5----查询图书信息 \n");printf("*\t6----查询读者信息 \n");printf("=================================================\n"); printf("请选择相应的代码:");for(;;){ scanf("%d",&dm); //dm输入的数字if(dm<0||dm>6)printf("\n错误!请重新输入:");else break;}return dm;}void Menu_select()/*主菜单选择函数*/{for(;;){switch(Menu()) /*功能选择*/{ case 0:system("cls");Save();printf("\n\n\t文件保存成功!\n");printf("\n\n\t欢迎下次使用本系统!\n");getch();exit(0);case 1:Insert_New_Book();break;case 2:add_reader();break;case 3:Borrow_Book();break;case 4:Return_Book();break;case 5:Print_book();break;case 6:Print_reader();break;default:printf("\n错误!");exit(0);}}}void Init() /*初始化*/{printf("\n图书初始化开始,请输入图书信息..\n包括编号.书名.数量..\n");p0=(BK*)malloc(sizeof(BK));h_book=p0;printf("\n请输入图书信息:\n");printf("图书编号:"); /*输入图书编号(唯一)*/scanf("%s",p0->book_num);printf("图书名称:"); /*输入图书名称*/scanf("%s",p0->book_name);printf("图书作者:"); /*输入图书作者*/scanf("%s",p0->book_writer);printf("图书数量:"); /*输入图书数量*/scanf("%d",&p0->book_kc);p0->book_xy=p0->book_kc; /*开始时图书现有量和库存量相等*/p0->next=NULL;printf("\n图书信息初始化完毕!按任意键继续下一步操作..\n");getch();system("cls");}void Insert_New_Book()/*新书入库*/{BK *p,*p0,*p1;p=p1=h_book;printf("\n新书入库模块...\n");printf("\n请输入新书信息..\n包括书号.书名.数量..\n");p0=(BK *)malloc(sizeof(BK));printf("图书编号:");scanf("%s",p0->book_num);while(strcmp(p0->book_num,p1->book_num)!=0&&p1->next!=NULL)p1=p1->next;if(strcmp(p0->book_num,p1->book_num)==0) /*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/{printf("\n此编号图书已存在!!直接入库!\n");printf("图书数量:");scanf("%d",&p0->book_kc);p1->book_kc+=p0->book_kc;p1->book_xy+=p0->book_kc;}else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/printf("图书名称:");scanf("%s",p0->book_name);printf("图书作者:");scanf("%s",p0->book_writer);printf("图书数量:");scanf("%d",&p0->book_kc);//库存数量while(p->next){ p=p->next; }if(h_book==NULL) h_book=p0; /*此处分两种情况,链表中没有数据,head 直接指向p0处*/else p->next=p0; /*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/p0->next=NULL;p0->book_xy=p0->book_kc;}printf("\n新书入库完毕!按任意键继续下一步操作..\n");getch();system("cls");}void add_reader()/*添加读者*/{ RD *p0;int i;printf("\n读者初始化开始,请输入读者信息..\n包括书证号.姓名..\n"); p0=(RD*)malloc(sizeof(RD)); /*申请新结点存储空间*/h_reader=p0;printf("\n请输入读者的信息:\n");printf("读者书证号:");scanf("%s",p0->reader_num);printf("读者姓名:");scanf("%s",p0->reader_name);p0->right=0;for(i=0;i<Max;i++){strcpy(p0->borrow[i].borrow_book_num,"0"); /*所借图书直接置为(即没有借书)*/strcpy(p0->borrow[i].limit_date,"0");}p0->next=NULL;printf("\n读者信息初始化完毕!按任意键继续下一步操作..\n");getch();system("cls");}void Borrow_Book() /*借书模块*/{BK *p0; RD *p1;char bo_num[10],rea_num[10],lim_date[8];int i;p0=h_book; p1=h_reader;printf("\n借书模块...\n");printf("\n请输入借书的读者书证号:");scanf("%s",rea_num);while(p1->next!=NULL&&strcmp(rea_num,p1->reader_num)!=0)p1=p1->next;if(p1->next==NULL&&strcmp(rea_num,p1->reader_num)!=0){printf("\n此读者编号不存在!按任意键返回..\n");goto END;}printf("\n请输入你要借的书的编号:");scanf("%s",bo_num);while(strcmp(bo_num,p0->book_num)!=0&&p0->next!=NULL)p0=p0->next;if(p0->next==NULL&&strcmp(bo_num,p0->book_num)!=0){printf("\n此图书编号不存在!按任意键返回..\n");goto END;}else if(p0->book_xy<=0){printf("\n抱歉,此书已借完!请等待新书的到来!!\n按任意键返回...."); goto END;}else if(p1->right>Max||p1->right==Max){printf("\n不好意思,借书数目已满!不能借书!\n按任意键返回....");goto END;}else if(strcmp(p1->borrow[0].borrow_book_num,"0")!=0){for(i=0;i<Max;i++){if(strcmp(p1->borrow[i].borrow_book_num,bo_num)==0){printf("\n抱歉!同一个读者不能同借两本相同的书!\n按任意键返回....");goto END;}else if(strcmp(p1->borrow[i].borrow_book_num,"0")==0){printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num); strcpy(p1->borrow[p1->right-1].limit_date,lim_date);p0->book_xy--;p0->book_kc--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);goto END;}}}else{printf("\n请输入你要归还图书的日期:");scanf("%s",lim_date);strcpy(p1->borrow[p1->right++].borrow_book_num,bo_num);strcpy(p1->borrow[p1->right-1].limit_date ,lim_date );p0->book_xy--;p0->book_kc--;printf("\n读者编号%s借书完毕!按任意键继续下步操作..",p1->reader_num);}END:getch(); system("cls");}void Return_Book() /*还书模块*/{BK *p; RD *q;int i,j,find=0;char return_book_num[10],return_reader_num[10];p=h_book; q=h_reader;printf("\n还书模块...\n");printf("\n请输入要还书的读者编号:");scanf("%s",return_reader_num);while(q->next!=NULL&&strcmp(return_reader_num,q->reader_num)!=0)q=q->next;if(q->next==NULL&&strcmp(return_reader_num,q->reader_num)!=0){find=2;printf("\n此读者编号不存在!按任意键返回..\n");goto end;}printf("\n请输入读者还书的编号:");scanf("%s",return_book_num);while(p->next!=NULL&&strcmp(return_book_num,p->book_num)!=0)p=p->next;if(p->next==NULL&&strcmp(return_book_num,p->book_num)!=0){find=2;printf("\n错误!此图书编号不存在!按任意键返回..\n");goto end;}for(i=0;i<Max;i++)if(strcmp(return_book_num,q->borrow[i].borrow_book_num)==0) /*如果此读者借了此书*/{find=1;for(j=i;j<Max-1;j++){strcpy(q->borrow[j].borrow_book_num,q->borrow[j+1].borrow_book_num); strcpy(q->borrow[j].limit_date,q->borrow[j+1].limit_date);}strcpy(q->borrow[Max-1].borrow_book_num,"0");strcpy(q->borrow[Max-1].limit_date,"0");p->book_xy++;p->book_kc++;q->right--;printf("\n编号%s的读者还书完毕!按任意键继续下步操作..",return_reader_num);}if(find==0)printf("\n错误!此读者未借此书!按任意键返回..\n");end: getch(); system("cls");}void Print_book() /*查询图书信息*/{BK *p;p=h_book;printf("\n图书信息如下:\n\n");printf("图书编号\t图书名称\t图书作者\t现有\t\t库存\n");while(p!=NULL){printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",p->book_num,p->book_name,p->book_w riter,p->book_xy,p->book_kc);p=p->next;}printf("\n图书信息打印完毕!按任意键继续下一步操作..");getch();system("cls");}void Print_reader() /*查询读者信息*/{RD *p;int i;p=h_reader;printf("\n读者信息如下:\n\n");printf("读者书证号\t\t读者姓名\n");printf("\n");while(p!=NULL){printf("\t%s\t\t%s",p->reader_num,p->reader_name);for(i=0;i<Max;i++){printf("\n");printf("图书编号",i+1);printf("\t还书日期",i+1);printf("\n");printf("\t%s",p->borrow[i].borrow_book_num);printf("\t\t%s",p->borrow[i].limit_date);}printf("\n");p=p->next;}printf("\n读者信息打印完毕!按任意键继续下一步操作..");getch();system("cls");}void Save() /*保存信息*/{Save_Reader();Save_Book();}void Save_Reader() /*保存读者信息*/{FILE *fp_reader;RD *p,*p0;p=h_reader;if((fp_reader=fopen("Reader.txt","wb"))==NULL) /*创建文件,进行保存*/ {printf("\n文件保存失败!\n请重新启动本系统...\n");exit(0);}while(p!=NULL){if(fwrite(p,sizeof(RD),1,fp_reader)!=1) /*将链表中的信息写入文件中*/printf("\n写入文件失败!\n请重新启动本系统!\n");p0=p;p=p->next;free(p0); /*释放所有结点*/}h_reader=NULL;fclose(fp_reader); /*关闭文件*/}void Save_Book() /*保存图书信息*/{FILE *fp_book; /*创建文件型指针*/BK *p,*p0;p=h_book;if((fp_book=fopen("Book.txt","wb"))==NULL) /*创建文件,进行保存*/ {printf("\n文件保存失败!\n请重新启动本系统...\n");exit(0);}while(p!=NULL){if(fwrite(p,sizeof(BK),1,fp_book)!=1) /*将链表中的信息写入文件中*/printf("\n写入文件失败!\n请重新启动本系统!\n");p0=p;p=p->next;free(p0);}h_book=NULL;fclose(fp_book); /*关闭文件*/}void Load() /*加载信息*/{Load_Reader();Load_Book();}void Load_Reader() /*加载读者信息*/{RD *p1,*p2,*p3;FILE *fp; /*创建文件型指针*/fp=fopen("book.txt","rb"); /*打开文件*/p1=(RD *)malloc(sizeof(RD));fread(p1,sizeof(RD),1,fp);h_reader=p3=p2=p1;while(! feof(fp)) /*读出信息,重新链入链表*/{ p1=(RD *)malloc(sizeof(RD));fread(p1,sizeof(RD),1,fp);p2->next=p1;p3=p2;p2=p1;}p3->next=NULL;free(p1);fclose(fp); /*关闭文件*/}void Load_Book() /*加载图书信息*/{BK *p1,*p2,*p3;FILE *fp; /*创建文件型指针*/fp=fopen("Book.txt","rb"); /*打开文件*/p1=(BK *)malloc(sizeof(BK));fread(p1,sizeof(BK),1,fp);h_book=p3=p2=p1;while(! feof(fp)) /*读出信息,重新链入链表*/{ p1=(BK *)malloc(sizeof(BK));fread(p1,sizeof(BK),1,fp);p2->next=p1;p3=p2;p2=p1;}p3->next=NULL;free(p1);fclose(fp); /*关闭文件*/}void main(){FILE *fp_book,*fp_reader; /*创建文件型指针*/Login();if((fp_book=fopen("Book.txt","rb"))==NULL||(fp_reader=fopen("Reader.txt" ,"rb"))==NULL){ Init(); }else Load();Menu_select(); /*调用主菜单*/}(注:文档可能无法思考全面,请浏览后下载,供参考。