图书馆管理系统 数据结构大作业

合集下载

北邮大二下数据结构大作业-模拟图书馆管理系统

北邮大二下数据结构大作业-模拟图书馆管理系统

北京邮电大学课程设计报告注:评语要体现每个学生的工作情况,可以加页。

目录设计任务的描述 (3)功能需求说明及分析 (3)总体方案设计说明 (5)数据结构说明和数据字典 (6)各模块设计说明 (10)读者模块 (10)借还模块 (11)日志文件模块: (12)图书信息模块 (13)主模块用来模拟时间和调用函数 (13)预约模块 (14)测试报告 (15)各项功能测试: (15)设计任务的描述学校图书馆有很多图书,每个教师、学生有多种不同的借书权限和借书数量,建立图书馆管理系统,包括图书的购入、编码、借出、还回、统计、查询等功能。

功能需求说明及分析1.编写目的:模拟实现图书馆的一些基本功能和整个运行过程,建成图书馆模型2.任务目标:建立图书馆管理系统,实现包括图书的购入、编码、借出、返还、统计、查询等功能。

其中主要有读者、图书两类对象,对它们进行处理以实现上述功能。

3.需求规定:3.1 功能要求:每种图书包括图书编号、书名、作者、出版社、简介、购入时间、数量等信息•图书馆在购书时可根据图书的信息自动生成编码•教师、学生包括姓名、工作证(学生证)号、所在学院、借书权限、借书数量等信息•借书时填写借书单,还书时填写借书单还书项,并记录入日志文件,借书超期要罚款•基本功能有:建立图书基本信息文件、读者基本信息文件、图书入库(编码)、借书(预约)、还书、查询等•查询、统计功能有:1、读者可根据图书的名称、编码、作者、出版社等信息查询图书的其他信息;也可根据图书的分类等信息查询图书的具体信息等,包括某图书库中尚存多少本2、查询教师、学生已借出的图书情况,读者的借书诚信情况(是否有过超期的情况)等3、图书的借阅率等•对于库中已借完的图书,读者可预约,待库中有还回时能提示通知该读者•模拟系统以时间为轴向前推移,每10秒左右向前推进一天(有键盘或鼠标操作时不计时)•建立日志文件,对图书借阅情况进行记录•不得使用数据库3.2 模块划分:主模块:接收键盘(鼠标)键入命令,分析该命令并调用相应的模块,并以时间为轴向前推进。

数据结构上机实验之(图书管理)

数据结构上机实验之(图书管理)

数据结构实验报告实验题目:简单个人图书管理系统一.问题描述学生在自己的学习和生活中会有很多书籍(包括电子出版物),对所购买的书籍进行分类和统计是一种良好的习惯。

如果以文件来存储相关书籍的各种信息,包括分类、书名、作者、购买日期、价格、简介等,辅之以程序来使用这些文件,并加以维护,从而使图书管理工作变得轻松而有趣。

1.基本要求(1)能够以文件存储书籍的各种相关信息。

(2)提供查询工作:可按照一种或多种关键字查找需要的书籍;(3)提供排序功能:可按照一种或多种关键字对所有书籍进行排序,比如按价格进行排序,并输出排序结果。

(4)提供图书信息维护:初始化、增加、删除、修改、打印输出。

(5)提供登录认证工作:具有户头、密码认证。

(6)使用界面要适当美观、便捷。

二.算法分析1.整体设计图书管理系统的基本功能是借书与还书,并且包含图书与读者两个类及其数据库。

图书类的功能在于存放及维护图书的基本信息,包括图书编号,书名,在架情况等等。

图书数据库的功能在于实现对图书的相关操作,例如,增加图书,删除图书,更改图书,查找图书,显示图书等功能。

读者类的功能在于存放及维护读者的基本信息,例如读者编号,读者姓名,读者密码等等。

读者数据库的功能在于实现对读者的相关操作,包括增加读者,更改读者,删除读者,查找读者,显示读者信息等功能。

就此,主界面设计为(1)借书.(2)还书(3)图书信息管理(4)读者信息管理2.(1)系统层次结构图:(2)借书流程图:借书失败借书失败的情况为: 1. 读者编号不存在时; 2. 密码错误时; 3.图书不存在时;4. 图书已被借出时其余正常情况均为借书成功(3)还书流程图 还书失败还书失败的情况为:1.读者编号不存在时.。

2.图书不存在时.3.该图书已还回时其余正常情况均能还书成功.3.详细设计(部分).图书类Book{①私有成员:inttag;//是否存在判断:0:存在,1:已删int no;//图书编号char name[20];//书名intonshelf;//是否在架判断:0:已被借,1:在架②公有成员:void setname(char na[]);//设置书名;void delbook();//删除图书;void addbook(intn,char *na);//增加图书;intborrowbook();//借书;void retbook();//还书;void disp();//显示;}图书库类BDatabase{①私有成员:int top; //图书记录指针Book book[Maxb]; //图书记录②公有成员:BDatabase();//构造函数;~BDatabase();//析构函数;intaddbook(intn,char *na) //增加图书;Book *query(intbookid) // 排序;void disp() //显示;void bookdata();//图书信息管理的实现}读者类Reader{②私有成员:int tag; //是否存在判断:0:存在,1:已删int key;//读者密码;int no; //读者编号;char name[10]; //读者姓名;intborbook[Maxbor];读者记录;③公有成员:void setname(char na[]);//设置读者姓名void delreader();//删除读者void addreader(intn,char *na,int Key);//增加读者void borrowbook(intbookid);//读者借书intretbook(intbookid);//读者还书void disp();//显示读者}读者库类RDatabase:{①私有成员:int top; //读者记录指针;Reader read[Maxr];读者记录;②公有成员:RDatabase();//构造函数;~RDatabase();//析构函数;intaddreader(intn,char *na,int Key); //添加读者;Reader *query(intreaderid) ; //读者排序void disp(); //显示读者;readerdata();//读者信息管理的实现}三.主要实验结果:主页面图书信息维护:选择3进入图书信息管理主页面选择1 新增图书选择5 显示图书选择2 更改图书信息选择5,显示更改后的结果图书排序输出在依次输入编号为789,456的两本书后,选择7图书信息管理其他功能不赘言.读者信息管理:主页面选择4,进入读者信息管理主页面选择1,新增读者选择5,显示读者因为还未借书,所以借书编号为空选择4,查找读者选择3,删除读者删除后的信息显示:图书馆基本功能的实现1.借书:如果密码正确密码错误书已被借出时此时图书信息为读者信息为2.还书还书成功还书后图书信息为还书后再还相同的书如果读者编号不存在退出系统四.设计总结在选择这个实验题目后,我们小组经过多次对实验需求的讨论,并且到图书馆及网上查阅相关资料后,终于确定下来程序的主要结构。

图书馆管理系统 数据结构大作业

图书馆管理系统 数据结构大作业

封面数据结构课程设计报告图书管理信息系统二〇一三年十二月本程序是图书管理信息系统的实现,具体功能包括读者注册、登录、新书增添、图书查询、图书搜索、借还书、读存盘等。

程序流程如下:任务分析:1.新书入库:新到书籍入库包含几方面的操作:首先查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和总库存量,若不存在,则新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书名(字符串类型)、作者名(字符串类型)、出版社信息(字符串类型)、出版日期(整型)、该书的现存量(整型)、该书的总量(整型)。

输入该信息之后,将该节点插入到书籍信息链表中去。

该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。

2.读者注册:没有账号和密码读者和管理员都不能登录系统,系统默认第一个注册系统的是系统管理员,借阅号为1000,权限是1,并输入密码000000及基本信息,并将所借书信息区全部置零。

不是第一个注册的读者,借阅号从1000往后顺延,自己设置密码,权限为0,其余信息与管理员相同,因此登陆之后,管理员可以看到“入库”菜单选项,普通读者不能看到该选项。

3.借书:书籍借阅主要涉及存书库和读者信息库的更新。

用户首先登陆系统,通过3种查询方式查询该书是否存在,并判断该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。

若以上条件都满足,则将该书编号存入该读者的借阅信息区,将该读者的可借书数量减1,该存书的可借数量减1。

4.还书:读者登录后按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,则从读者的借书区删除该书籍,读者的可借书数量加1,将该书的可借数量增加1,然后返回。

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

北京理工大学-数据结构实验报告-实验四--图书管理系统

北京理工大学-数据结构实验报告-实验四--图书管理系统

实验四图书管理系统姓名:任子龙学号:1120140167 班级:05111451一。

需求分析(1)问题描述有一个小型书库保管了大量图书,关于图书有大量信息需要处理,这些信息包括图书的分类、书名、作者名、购买日期、价格等。

现要求编写一个程序以便于对图书的管理。

(2)基本要求:a.建立图书信息.b.提供查找功能,按照多种关键字查找需要的书籍。

例如按书名查找,输入书名后,将显示出该图书的所有信息,或显示指定信息。

c.提供排序功能,按照多种关键字对所有的书籍进行排序,例如按出版日期进行排序。

d.提供维护功能,可以对图书信息进行添加、修改、删除等功能。

(3)数据结构与算法分析将每一本书看作是一个基本单元。

由于涉及添加、修改操作,这里使用了链表作为数据存储结构;同时,考虑到排序功能,尝试使用双向链表。

其中,每本书作为一个结点,数据域包含char 型变量,指针域含有左右指针left和right。

二.概要设计1。

抽象数据类型的定义为实现上述功能,程序中使用了双向链表,只需要定义一种数据类型:typedef struct book{char number[10];char title[20];char author[10];char date[15];char price[10];struct book *right;struct book *left;}BK;注意结点的指针域有left和right两个。

2.本程序包含两个模块(1)主程序模块主函数只包含了Menu_select()函数。

目的是进入主菜单界面,进行功能选择;直到输入操作码0,退出系统;(2)双向链表单元模块——实现书籍信息的链式存储的抽象数据类型.各函数之间的调用关系:三。

详细设计1。

结点类型typedef struct book{char number[10];char title[20];char author[10];char date[15];char price[10];struct book *right;struct book *left;}BK;2.子函数(1)功能菜单调用函数Menu_select()使用户进入主菜单界面,进行功能选择;先进入无限循环,输入操作码进行系统管理工作,直到输入操作码0,退出系统;(2)各种功能函数Initialize()//初始化图书系统信息;Insert()//添加新的图书信息;Sort()//对图书进行排序,本程序可以实现按“图书编号”、“出版日期"、“图书价格”多种关键字进行排序;Search()//实现对图书的查找功能,本程序可以实现按“图书编号"、“出版日期”、“图书价格”多种关键字进行查找;deletebook()//删除无效的图书信息;Print_book()//打印全部图书信息。

数据库综合作业(图书管理系统)

数据库综合作业(图书管理系统)

图书馆数据管理系统一、图书馆数据管理系统的描述1、概念模型(E-R图)2、关系模式(1)书籍类别(种类编号、种类名称)(2)读者(借书证编号,读者姓名、读者性别、读者种类、登记时间)(3)书籍(书籍编号、书籍名称、书籍类别、书籍作者、出版社名称、出版日期、登记日期)!(4)借阅(借书证编号、书籍编号、读者借书日期)(5)还书(借书证编号、书籍编号、读者还书时间)(6)罚款(借书证编号、读者姓名、书籍编号、读者借书时间、读者还书日期)二、图书馆数据库的建立--(1)书本类别表create table book_style(bookstyleno varchar(30)primary key,--种类编号bookstyle varchar(30))--种类名称:go--(2)书库表create table system_books(bookid varchar(20)primary key,--书籍编号bookname varchar(30)not null,--书籍名称bookstyleno varchar(30)not null,--书籍种类bookauthor varchar(30),--书籍作者bookpub varchar(30),--出版社。

bookpubdate datetime,--出版日期bookindate datetime,--登记日期isborrowed varchar(2),--是否借出foreign key(bookstyleno)references book_style(bookstyleno)) go--(3)借书证表create table system_readers(readerid varchar(9)primary key,--读者借书证号,readername varchar(9)not null,--读者姓名readersex varchar(2)not null,--读者性别readertype varchar(10),--读者种类regdate datetime)--登记日期go--(4)借书记录表create table borrow_record(bookid varchar(20)primary key,--书籍编号·readerid varchar(9),--读者借书证编号borrowdate datetime,--读者借书时间foreign key(bookid)references system_books(bookid), foreign key(readerid)references system_readers(readerid)) go--(5)还书记录表create table return_record(bookid varchar(20)primary key,--书籍编号!readerid varchar(9),--读者借书证编号returndate datetime,--读者还书时间foreign key(bookid)references system_books(bookid), foreign key(readerid)references system_readers(readerid)) go--(6)罚款单表create table reader_fee(readerid varchar(9)not null,--读者借书证号<readername varchar(9)not null,--读者姓名bookid varchar(20)primary key,--书籍编号bookname varchar(30)not null,--书籍名称bookfee varchar(30),--罚款金额borrowdate datetime,--借书时间foreign key(bookid)references system_books(bookid), foreign key(readerid)references system_readers(readerid)) go数据库的表的截图:三、图书馆数据库数据的添加use library--书籍类别导入book_style表中insert into book_style(bookstyleno,bookstyle)values('1','恐怖小说')insert into book_style(bookstyleno,bookstyle)values('2','穿越小说')insert into book_style(bookstyleno,bookstyle)values('3','恐怖小说') <insert into book_style(bookstyleno,bookstyle)values('4','都市小说')insert into book_style(bookstyleno,bookstyle)values('5','科幻小说')insert into book_style(bookstyleno,bookstyle)values('6','仙侠小说')insert into book_style(bookstyleno,bookstyle)values('7','言情小说')--已有书籍导入system_books表中insert intosystem_books(bookid,bookname,bookstyleno,bookauthor,bookpub,bookpubda te,bookindate,isborrowed)values('901','飘邈之旅','1','萧乾','向往','2015-09-01','2018-03-25','1'),insert intosystem_books(bookid,bookname,bookstyleno,bookauthor,bookpub,bookpubda te,bookindate,isborrowed)values('902','明朝那些事儿','2','多一半','新星出版社','2015-05-09','2018-05-23','1')insert intosystem_books(bookid,bookname,bookstyleno,bookauthor,bookpub,bookpubda te,bookindate,isborrowed)values('903','鬼吹灯','3','天下霸唱','安徽文艺出版社','2014-09-18','2018-05-27','1')insert intosystem_books(bookid,bookname,bookstyleno,bookauthor,bookpub,bookpubda te,bookindate,isborrowed)values('904','盛夏晚晴天','4','顾漫','中国海关出版社','2015-09-01','2018-05-28','1')insert intosystem_books(bookid,bookname,bookstyleno,bookauthor,bookpub,bookpubda te,bookindate,isborrowed)values('905','三体','5','刘慈欣','凤凰出版社','2015-10-11','2018-05-29','1')/insert intosystem_books(bookid,bookname,bookstyleno,bookauthor,bookpub,bookpubda te,bookindate,isborrowed)values('906','凡人修仙传','6','三十','凡人出版社','2013-04-21','2018-05-30','1')insert intosystem_books(bookid,bookname,bookstyleno,bookauthor,bookpub,bookpubda te,bookindate,isborrowed)values('907','霸道总裁爱上我','7','桐华','民族出版社','2012-06-20','2018-05-31','1')--将已有图书证的读者加入system_readers表中insert intosystem_readers(readerid,readername,readersex,readertype,regdate) values('Q','白一','男','学生','2018-01-18 12:20')insert intosystem_readers(readerid,readername,readersex,readertype,regdate) /values('Q','白二','男','学生','2018-01-19 13:15')insert intosystem_readers(readerid,readername,readersex,readertype,regdate) values('Q','白三','男','学生','2018-01-20 13:33')insert intosystem_readers(readerid,readername,readersex,readertype,regdate) values('Q','白四','男','学生','2018-01-21 12:01')insert intosystem_readers(readerid,readername,readersex,readertype,regdate) values('Q','白五','男','学生','2018-01-22 15:23')insert intosystem_readers(readerid,readername,readersex,readertype,regdate))values('201005','黑五','男','教师','2018-01-23 18:50')insert intosystem_readers(readerid,readername,readersex,readertype,regdate) values('201006','黒六','男','教师','2018-01-24 18:25')insert intosystem_readers(readerid,readername,readersex,readertype,regdate) values('GL001','空一','女','管理','2018-01-01 16:20')--添加已借书读者的记录导入borrow_record表中,同时将在已借出的标记0 insert into borrow_record(bookid,readerid,borrowdate)。

图书管理系统——大作业

图书管理系统——大作业

图书管理系统第一部分:1.创建该数据库,该数据库包含以下各表,并根据描述指定合适的数据类型及字段大小:表1 图书表(tb_book)的结构表2 图书详细表(tb_bookdet)的结构表3 读者表(tb_student)的结构表4 借出信息表(tb_read)的结构表5 工作人员表(tb_worker)的结构第二部分:1. 对每个表添加符合条件的数据。

2. 从读者表中查询院系名称为“信息工程学院”的借书证编号、姓名、欠款状态,并保存成cona.sql脚本文件。

3. 从图书表中查询清华大学出版社的图书信息,并保存成bookco.sql脚本文件。

4.查询2009年三月借书的书名和借书人姓名,并保存成sel_1.sql脚本文件。

5.查询借书证号及统计每个读者借书的次数,并保存成sel_2.sql脚本文件。

6.使用子查询显示没有还书记录的读者姓名,并保存成sel_3.sql脚本文件。

7.在借出信息表上创建名为bor_view_1的视图。

通过该视图显示2009年3月份以后借书的借书证号、图书编号、借书日期、应还日期。

8.通过视图bor_view_1 修改借出信息表的数据。

将4月份借书的应还书日期延长10天,将该修改语句保存成Up_view_1.sql脚本文件。

第三部分:1.创建一个用户,登录名和用户名为:“图书管理员”,SQL Server身份验证。

分配给该用户在该数据库中具有创建表和视图的权限并具有查看和修改该数据库所有用户表数据的权限。

2.创建一个用户,登录名和用户名为:“学生”,SQL Server身份验证。

分配给该用户在该数据库中只有查看所有用户表的权限。

第四部分:1.创建一个存储过程cal_proc_1,这个存储过程接受借书证号并显示该借书人的姓名、所借书的书籍编号、借书日期,应还日期。

2.创建名为bor_trigg_1 的触发器,它将检查在借出信息表中输入的每一个借书记录请求。

如果所借书不在库,则取消该借书记录输入,并提示信息“对不起所借书目前不在库”。

图书馆管理系统需求分析大作业

图书馆管理系统需求分析大作业

图书馆管理系统需求分析刘威1103710109目录目录 (2)1.引言 (3)1.1、编写目的 (3)1.2、背景说明 (3)1.3、术语定义 (3)1.4、参考资料 (4)2.任务概述 (4)2.1、用户特点 (4)2.2、假定与约束 (4)3.需求规定 (4)3.1、对功能的规定 (4)3.2、对性能的规定 (5)3.3、输入输出的要求 (6)3.3.1、读者管理 (6)3.3.2、采编管理 (6)3.3.3、流通管理 (6)3.3.4、统计管理 (7)3.3.5、查询管理 (7)3.4、数据库管理能力的要求 (8)3.4.1、数据流图: (8)3.4.2、数据库设计 (8)3.4.3、图书管理的数据库表结构 (9)3.5、故障处理要求 (11)3.6、其他专门要求 (11)4.运行环境设定 (11)4.1、设备 (11)4.2、支持软件 (11)4.3、控制 (11)1.引言1.1、编写目的立足于校园实际,着眼于未来发展,建成符合标准化协议、通用性较强、实用的系统,以提高图书信息的现代化管理水平,实现信息资源的共享。

图书管理系统是一种基于集中统一规划的数据库数据管理新模式。

在对图书、读者的管理,其实是对图书、读者数据的管理。

本系统的建成无疑会为管理者对图书管理系统提供极大的帮助。

使用该系统之后,图书馆管理人员可以管理读者的登记、图书的购入、借出、归还以及注销等;还可以查询某位读者、某本图书的借阅情况,对当前借阅情况给出一些统计,给出统计表格,以全面掌握图书的流通情况。

本系统的宗旨是提高图书管理工作的效率,减少相关人员的工作量,使学校的图书管理工作真正做到科学、合理的规划,系统、高效的实施。

1.2、背景说明目前相类似的管理系统已广泛的应用在各行各业,成为各行各业提高相关管理效率的重要手段。

图书信息管理系统也在日益广泛地应用于各图书馆的管理中,大大提高了图书管理的相关管理效率,其在图书管理中所起的作用是显而易见的。

2023年语言大作业图书馆管理系统

2023年语言大作业图书馆管理系统

C语言课程设计汇报题目: 图书馆管理系统学号: ****学生姓名: ********专业年级: ****************指导教师: ************** 系****年*月*日目录摘要................................................... 错误!未定义书签。

前言.................................................... 错误!未定义书签。

1 需求分析............................................. 错误!未定义书签。

2 系统描述及界面设计..................................... 错误!未定义书签。

2.1 数据描述: (5)2.2 数据库描述 .................................................................................................... 错误!未定义书签。

2.3 数据流图和数据词典 ......................................................................................... 错误!未定义书签。

2.4数据采集............................................................................................................ 错误!未定义书签。

2.5界面设计............................................................................................................ 错误!未定义书签。

数据库大作业--图书管理系统

数据库大作业--图书管理系统

图书管理系统需求分析❖信息需求:为了加强图书的管理,设计图书管理系统,方便用户借阅、管理员管理,减少管理员的工作量。

1)主要信息需求1.图书信息:简介、出版日期、出版社、作者、书名、书号2.读者信息:姓名、性别、读者编号、所在系、联系电话3.借阅信息:借书日期、还书日期、工作号、书号、是否续借、读者编号4.管理员信息:姓名、性别、电话、工资、工作号5.管理_书籍信息:工作号、书号、添加时间、是否在馆6.管理_读者信息:工作号、读者编号、借还确认、违章情况、累计借书2)信息间的主要联系1.一个读者可以借阅多本书籍(1:m)2.一本图书可以被一个读者借阅(1:1)3.一个图书管理员可以管理多个读者(1:n)4.一个读者信息只能被一个图书管理员管理(1:1)5.一本图书可以被多个图书管理员管理(1:n)6.一个图书管理员可以管理多本图书(1:m)❖处理需求:1.借阅功能:可以方便地借阅图书、续借图书、归还图书2.查询功能:按图书编号查找图书、按图书名称查找图书、按图书作者查找图书、能够按照自己的图书证编号查询自己的状态信息3.读者注册功能:能够对新的读者进行登记,或注销读者的信息4.图书录入功能:能够将新到的图书信息输入到系统的图书信息库中5.统计功能:按图书编号统计书籍数量、按图书名称统计数量、按作者统计书籍数量❖安全性需求1.管理员的权限最高,可以查询、修改借阅关系表、管理员_书籍表、管理员_读者表2.读者,可以查看图书基本信息、个人自己的借阅信息。

不可以对其中的信息进行添加、修改等操作。

❖完整性需求1.在图书管理信息表中,书号、书名、作者、出版社、出版日期、简介输入信息的时候都有类型、长度要求。

书号、书名、作者不能为空,其中书号为主码2.在读者信息表中,其中的各类信息都有类型、长度要求。

读者编号、读者姓名、读者性别、所在系不能为空,读者编号为主码3.在管理员信息表中,其中的各类信息都有类型、长度要求。

数据结构图书管理系统实验报告

数据结构图书管理系统实验报告

竭诚为您提供优质文档/双击可除数据结构图书管理系统实验报告篇一:数据结构-图书管理系统实验报告数据结构课程设计报告课程名称_________题目名称学生学院专业班级学号学生姓名指导教师20XX年7月8日一、需求分析1.图书管理系统中图书管理模块包括图书类型定义:书号、现存量、总存量,出版时间为整型,定价为浮点型,书名、著者名为字符型,借阅指针、预约指针为读者类型;读者类型定义:证号为整型、姓名为字符型,另外借阅类型和预约类型组合成其中的共用体类型。

b树(2-3树)类型定义:关键字个数和关键字数组为整型、另外还有指向双亲的指针、指向子树的指针、记录单元指针;b树查找结果类型定义:节点指针、关键字序号和查找标志变量为整型。

2.演示程序以用户和计算机的对话方式进行,在计算机终端上显示“提示信息”之后,由用户在键盘上输入演示程序中规定的运算命令,相应的输入数据和运算结果显示在后面。

该演示系统,没有使用文件,全部数据放在内存存放。

四项基本业务都以书号为关键字进行的,采用了b树(2-3树)对书号建立索引,以提高效率。

3.图书管理系统实现功能:①采编入库:新书购入,将书号、书名、著者、册数、出版时间添加入图书账目中去,如果这种书在帐中已有,则只将总库存量增加,每新增一个书号则以凹入表的形式显示b树现状。

②清除库存:实现某本书的全部信息删除操作,每清除一个书号则已以凹入表的形式显示b树现状。

③图书借阅:如果书的库存量大于零时则执行出借,登记借阅者的图书证号和姓名,系统自动抓取当前借阅时间和计算归还时间。

④图书预约:如果某书库存为零,则记录预约者姓名和证号,系统自动抓取当前预约时间和取书时间。

⑤图书归还:注销借阅者信息,并改变该书的现存量。

⑥作者专区:输入作者名字,系统将查找相应作者全部著作并显示出来。

⑦图书信息:可以根据书号查阅此书基本信息、借阅信息和预约信息,亦可以查找全部图书基本信息。

二、概要设计1.抽象数据类型b树定义:ADTbTree{数据对象:D是具有相同特性的数据元素的集合。

数据结构_图书馆管理系统实验报告

数据结构_图书馆管理系统实验报告

实验报告题目:图书管理一,需求分析1.每种书的信息包括了书号书名,作者显存量和总库存等。

2.要实现的主要操作有,在B-树上的插入删除操作,并且在这些B-树的操作的基础上的图书馆借阅归还入库清除等操作。

3.每插入或删除一个关键字后就要显示B-树的状态。

也可以显示图书的相关借阅的信息。

4.借阅的信息链接在相应的那种数的记录之后。

2.两种抽象数据类型:Btree和Library。

3. 测试数据入库书号:35,16,18,70,5,50,22,60,13,17,12,45,25,42,15然后清除:45,50,22,42,90二.概要设计ADT BTree{数据对象:D={ai |ai E BTNode,I=2,3,……n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai E D, I=2,3……N}基本操作:void InitBTree(BTree &T);int Search(BTree p,int k);Result SearchBTree(BTree T,int k);void split(BTree &q,int s,BTree &ap);void Insert(BTree &q,int i,KeyType x,BTree ap);void NewRoot(BTree &T,BTree q,KeyType x,BTree ap);Status InsertBTree(BTree &T,KeyType k,BTree q,int i);void FindSmallest(BTree p,BTree &q);int Parent(BTree p);void RightBrother(BTree p,BTree &right);void LeftBrother(BTree p,BTree &left);void LeftMove(BTree &p,int loc);Status DeleteBTree(BTree &T,int k);void PrintBTree(BTree T);}ADT Library{数据对象:D={ai |ai E RecordI=2,3,……n,n>=0}数据关系:R1={<ai-1,ai>|ai-1,ai E D, I=2,3……N}基本操作:void GetInformation(Record &book);void PrintBookInfomation(Record *book);void Procurement(BTree &T);void DeleteBook(BTree &T,int k);void Lending(BTree &T,int k,char librarynum[10],char data[10]); void Return(BTree &T,int k,char *librarynum);}3.程序的几个模块1)主程序模块void main(){接受命令初始化处理命令}2)B-树模块-------实现B-树的抽象数据类型3)图书馆模块-------实现图书馆的抽象数据类型调用关系如下:主程序模块图书馆模块-三.详细设计(在源代码上通过注释的方式来说明)1、基本结构typedef struct{int booknum;char name[20];char writer[20];int total;int current;char librarynum[MAX][MAX];char returndate[MAX][MAX];}Record;typedef struct{int k;Record *recptr;}KeyType;typedef struct BTNode{int keynum;struct BTNode *parent;KeyType *key[M+1];struct BTNode *ptr[M+1];}BTNode,*BTree;typedef struct{BTNode *pt;int i;int tag;}Result;2、源代码1)主函数#include "head.h"#include "head.h"void main(){BTree T;int order=0,booknum;char returndate[10],librarynum[10];Result result;InitBTree(T);printf("\n******************************************************************* *****\n");printf("Welcome to the library system!\n");while(order!=6){printf("\n******************************************************************* *****\n");printf("请选择服务: 1.采编入库 2.清除库存 3.借阅 4.归还 5.显示 6.退出.\n");scanf("%d",&order);switch(order){case 1:Procurement(T);PrintBTree(T);break;case 2:printf("请输入要删除的书的编号。

UML大作业图书管理系统

UML大作业图书管理系统

团队成员:图书管理系统建模一:实验名称图书管理系统详细设计。

二: 需求分析图书馆中存在大量的图书信息,在以前图书信息的记录都是建立在手工记录上,这样一来对借阅者的借阅权限以及借阅天数等采用人工计算、手抄进行,数据信息处理工作量大,容易出错和丢失。

因此,建立一个智能化、系统化、信息化的图书资料库是十分重要的。

使用计算机软件对图书进行管理,是计算机应用的一部分。

充分利用计算机的功能,实现对读者管理、书籍管理等自动化控制,将会使图书资料库的工作强度大大减弱,可以实现图书检索迅速、可靠性高、存储量大、寿命长、成本低,能最大限度地提高图书管理的效率,也是图书管理信息化、正规化管理的必然趋势。

在本系统中主要满足借书者、图书管理员和系统管理员三方面的需求。

对借书者来说主要是查询个人信息、查询图书信息、预定当前正在被别人借阅的图书、借阅图书和返还图书等;图书管理员是系统的主要使用者,负责借书处理和还书处理,当读者预定的图书借出给定预定者后取消图书预定;系统管理员主要负责系统的维护工作,涉及到读者信息管理,图书信息管理,系统状态维护等。

三、系统模型图书管理系统的参与者及其介绍系统管理员系统管理员为系统的管理者,系统管理员主要有以下权限:读者信息管理,图书信息管理,系统维护。

图书管理员图书管理员为图书馆工作人员,图书管理员主要有以下权限:分类管理,借书处理,还书处理,解除预定。

图书借阅者图书借阅者是系统中数量最多也是最重要的参与者。

图书借阅者主要有以下权限:查询个人信息,查询图书信息,预定图书,借阅图书,返还图书。

1、创建系统用例模型图a图书借阅者用例图借阅者能够通过该系统进行如下活动及活动内容和要求查询个人信息借阅者可以在查询界面了解自己的详细信息查询图书信息借阅者可以在查询界面了解图书馆中所有的图书信息,及是否被借出预定图书借阅者可以通过预定界面预定图书馆中借出的图书借阅图书借阅者可以在图书馆中借阅未被借出和已预约的图书返还图书借阅者在相应的时间内免费还书,如逾期按照相应规定还书a.系统管理员用例图。

图书馆信息系统的大作业报告

图书馆信息系统的大作业报告

图书馆信息系统的大作业报告信息系统分析与设计课程设计目录一图书馆图书借阅管理系统规划1.1绪论 (3)1.2图书馆系统分析及功能论述 (3)1.3 图书借阅系统可行性分析 (4)二图书管理系统分析2.1 系统组织结构与功能分析 (5)2.2 业务流程分析 (5)2.3 数据流程分析 (6)三图书管理系统设计3.1 系统设计的任务及原则 (9)3.2 代码设计 (9)3.3 数据库设计 (10)3.4输入输出设计 (11)3.5物理配置方案设计 (13)四系统评价4.1图书管理系统系统优点 (14)4.2图书管理系统缺点 (14)五总结一图书管理系统规划1.1绪论2010年的今天是一个信息高度发达的时代,伴随着科技的进步,文化的汲取,人们对于图书信息的了解与掌握也达到了一定的高度。

尤其是学生对于知识的渴求更是与日俱增。

图书馆作为学生学习知识的重要场所,作为信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理。

介于这一现象,我们对于图书馆的借阅管理系统进行了全面的分析处理,在信息高速发展的今天,促使图书馆管理运用网络技术,通过信息系统的开发,在图书馆之间互通有无,有利于提高图书的利用率。

本次系统分析设计以中国计量学院的图书馆为原型对其图书其中的借阅系统进行分析,逐步体现图书馆的信息管理现状,及其日后的改进方案的提供。

1.2图书馆系统分析“图书馆借阅管理信息系统”的主要功能有:读者登陆、图书借阅、图书采编、读者信息管理和系统维护。

系统功能如下图1.2.1:图书管理信读者登陆系统维护图书采编图书借阅用户管理口令修改图书编目图书典藏图书征订图1.2.1 系统组织结构图各子系统功能如下所述:读者登陆读者访问系统时系统将检验读者的名字和密码,经过注册的读者允许进入系统。

图书借阅系统读者查找到所需图书后,在图书保留期内到图书馆办理借阅手续。

图书借阅系统处理图书借阅、还书、续借等手续。

图书采编体统图书采购入库,经过编目等处理后,将其目录信息存入数据库,提供给读者检索适用。

使用数据结构解决实际问题的案例分析

使用数据结构解决实际问题的案例分析

使用数据结构解决实际问题的案例分析数据结构是计算机科学中重要的一门学科,它研究如何组织和存储数据,以便有效地访问和操作。

在实际生活中,数据结构的应用广泛,可以帮助我们解决各种问题。

本文将通过几个案例分析,介绍数据结构在实际问题中的应用。

案例一:图书馆图书管理系统图书馆是一个典型的需要处理大量数据的场所。

为了方便读者查阅和借阅图书,图书馆一般都会采用图书管理系统。

在这个系统中,常用的数据结构有链表和树。

链表可以用来存储读者信息和图书信息,树可以用来构建图书的分类体系。

通过合理地组织和使用这些数据结构,可以高效地实现图书的借阅、归还和检索等功能。

案例二:导航系统导航系统是现代人生活中必不可少的利器。

导航系统中经常使用的数据结构是图和栈。

图可以用来表示地理关系,并通过最短路径算法计算出最佳路线。

而栈则可以用来实现回溯功能,例如导航系统中的"返回"按钮。

不同的数据结构相互配合,帮助用户快速找到目的地,提供便捷的导航服务。

案例三:社交网络社交网络是大家日常生活中常用的应用程序之一。

社交网络中最常见的数据结构是图和哈希表。

图用来表示人际关系网络,每个人表示为一个节点,而边表示人与人之间的关系。

图的遍历和搜索算法可以用来寻找用户之间的社交关系。

哈希表用来存储用户的基本信息,以支持快速的用户搜索和数据更新。

案例四:物流管理系统物流管理系统是保证商品准时送达的关键。

在物流管理系统中,数据结构主要应用于路径规划和货物跟踪。

路径规划常用的数据结构是图和优先队列。

图可以用来表示运输网络,而优先队列则可以用来实现最优路径的选择。

货物跟踪系统一般采用树结构,通过树的遍历算法,可以实时监控货物的位置和状态。

通过以上几个案例的分析,我们可以看到数据结构在实际问题中的应用之广泛。

无论是图书馆管理、导航系统、社交网络,还是物流管理系统,都离不开数据结构的支持。

合理地选择和使用数据结构,可以提高系统的运行效率和用户体验,解决实际问题,为人们的生活带来便利和便捷。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

封面数据结构课程设计报告图书管理信息系统二〇一三年十二月本程序是图书管理信息系统的实现,具体功能包括读者注册、登录、新书增添、图书查询、图书搜索、借还书、读存盘等。

程序流程如下:任务分析:1.新书入库:新到书籍入库包含几方面的操作:首先查询该书名的书籍在图书馆信息中是否已经存在,若存在,则增加可借数量和总库存量,若不存在,则新增加概述信息,从界面输入书籍的编号(0~999999的长整型)、书名(字符串类型)、作者名(字符串类型)、出版社信息(字符串类型)、出版日期(整型)、该书的现存量(整型)、该书的总量(整型)。

输入该信息之后,将该节点插入到书籍信息链表中去。

该节点的插入位置根据查找,找到合适的位置插入,这样可以保证整个数据都是有序的,方便查找。

2.读者注册:没有账号和密码读者和管理员都不能登录系统,系统默认第一个注册系统的是系统管理员,借阅号为1000,权限是1,并输入密码000000及基本信息,并将所借书信息区全部置零。

不是第一个注册的读者,借阅号从1000往后顺延,自己设置密码,权限为0,其余信息与管理员相同,因此登陆之后,管理员可以看到“入库”菜单选项,普通读者不能看到该选项。

3.借书:书籍借阅主要涉及存书库和读者信息库的更新。

用户首先登陆系统,通过3种查询方式查询该书是否存在,并判断该书的剩余数量是否大于零,最后查询该读者是否已经借满书籍。

若以上条件都满足,则将该书编号存入该读者的借阅信息区,将该读者的可借书数量减1,该存书的可借数量减1。

4.还书:读者登录后按书名号来归还所借书籍,若书名号正确并且确认归还该书籍,则从读者的借书区删除该书籍,读者的可借书数量加1,将该书的可借数量增加1,然后返回。

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

查询到该书籍后显示是否借阅该书籍。

算法设计:1、查找查找分按书名查找、按作者查找和按书号查找。

按书名查找是采用遍历线性链表的方式,从首元结点开始向下遍历,检查输入的书名和已存的书名是否匹配,如果匹配,则将该书籍的指针返回,然后查找结束。

若直到最后也没找到,则返回空。

按作者查找则根据输入的作者名,从书籍链表的首元结点开始遍历,检查记录中的读者信息和输入的是否匹配,若找到匹配的,则输出该书籍信息,然后继续向下遍历,直到链表尾部,查找结束。

按书号查找则是根据建立的索引表来查找记录。

2、读者信息存储读者信息采用线性单链表存储,设置头结点,头结点不存储数据,初始化时头结点->next 设置为空,然后每从文件中读取一组数据,则将该数据存入新开辟的空间,链接到读者信息链表中,再将该数据的next置空。

3、图书信息存储书籍信息存储采用单链表存储,设置头结点,头结点不存储数据,头结点的next为空,初始化时,从文件中读取一个格式化的数据,则将该数据存入新开辟的空间,并将该节点链接到链表中去,将next置空。

程序主要函数:1.增加图书:v oid insert(book *bhead);输入书号,判断是否合法,然后输入图书信息。

流程图如下2. 借书:void borrow(reader *temp, book *Bhead);通过书号、书名、作者三种查找方式查询借书,借书成功后,该书的可借书量减1,读者借书量减1。

流程图如下:3. 还书:void return book(book *bhead,reader *temp);输入书号,查询是否存在,然N进入查找按书名查找 按书号查找 按作者查找进入输入书名 继续借书退出输入书号 输入作者未找到找到借书 找到借书成功YNYYN继续输入 N 结束输入后还书,该书的可借书量加1,读者借书量加1。

流程图如下:详细程序模块1、 头文件定义头文件library.h 定义了3个结构体:书籍结构体、读者结构体和索引表结构体, 书籍结构体的定义如下: typedef struct READER{ long number;//借阅号 char name[15];//读者姓名 char sex;//读者性别char password[16];//读者的密码int residue;//读者的剩余可借书籍数量long borrowed[10];//读者已经借阅的书籍编号 int limit;//读者权限 struct READER *next; }reader;读者结构体的定义如下: typedef struct BOOK{ long number;//书籍编号 char name[30];//书名 char author[30];//作者char press[30];//出版社信息进入还书输入书号存在 还书 还书成功退出Y NY Nlong presstime;//出版日期int exist;//在库数量int total;//总数量struct BOOK *next;}book;索引表结构体的定义如下:typedef struct KEY{long key;book *adress;struct KEY *next;}keynode;头文件还包含一些系统头文件的声明:#include"stdio.h"#include"string.h"#include"conio.h"#include"windows.h"还有一些函数的声明,用#ifndef、#endif来包含,以免重复包含。

2、插入模块插入模块分为书籍入库、注册、登陆3大块,分3个函数,声明如下:void insert(book*bhead);//入库void reg(reader*head);//注册reader* login(reader*rhead,book*bhead);//登陆这3个函数分别实现新书入库、读者注册、登陆等功能,入库功能只有管理员才能调用,其余函数均可以调用。

3、读写模块此模块主要实现向文件写入、读取数,主要是2个文件:reader.txt、book.txt,分为4个函数:读者读写函数,书籍读写函数。

定义如下:book* Bload();//书籍链表读取reader*Rload();//读者链表读入void Bsave(book*Bhead);//书籍链表写入void Rsave(reader*Rhead,book*bhead);//读者链表写入读者和书籍链表的初始化就由读取函数完成,若文件为空则返回空指针,若不为空,则将文件里面的信息写入到链表中,每读出一个数据,分配一个空间,将该信息输入。

4、查找模块查找模块分书籍查找模块、读者查找模块,书籍查找模块分线性链表查询、遍历查询、索引表查询,读者查询直接遍历读者链表,查找该读者,若存在,返回指针,不存在则返回NULL。

查找模块的定义如下:book*S_name(book*head,char name[]);//按书籍名查找函数void S_author(book*head);//按作者查找keynode*initindex(book*head);//初始化建立索引表book*S_number(long num,book*bhead);//按书号查找reader*S_reader(reader*rhead,long num);//查找读者5、显示模块根据给出的节点指针,显示该节点所包含的信息,显示分为读者显示和书籍信息显示,读者信息显示包含书籍信息显示,以便显示读者所借书的信息。

这两个函数的声明如下:void showR(reader*tr,book*bhead);//显示读者信息函数void showB(book*p);//显示书籍信息函数这个模块还有2个小函数,用于将存入的性别’F’、’M’转化成汉字,将存的权限“1”、“0”转化成“管理员”、“读者”输出,这两个函数的定义如下:char*sc(char p){if(p=='F'||p=='f')return "女";elsereturn "男";}char*lc(int i){if(i==1)return "管理员";elsereturn "读者";}程序运行结果1.登录界面:2.入库界面:3.借书界面:4.还书界面:5.个人信息查询界面:体会这次的大作业让我复习并实际运用本学期学的数据结构的有关知识,例如数据的存储、排序、调用、查找等,加深了对数据结构和C语言的理解,总的来说,收获颇丰。

代码头文件library.h#ifndef LIBRARY_INCLUDE#define LIBRARY_INCLUDE#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#include<windows.h>#include<time.h>typedef struct BOOK{long number;char name[30];char author[30];char press[30];long presstime;int exist;int total;struct BOOK *next;}book;typedef struct KEY{long key;book *adress;struct KEY *next;}keynode;typedef struct READER{long number;char name[15];char sex;char password[16];int residue;long borrowed[10][2];int limit;struct READER *next;}reader;char *lc(int i);char *sc(char p);void showR(reader *tr,book *bhead);void showB(book *p);book *S_name(book *head,char name[]);void S_author(book *head);keynode *initindex(book *head);void delkey(keynode *keyhead);book *S_number(long num,book *bhead);reader *S_reader(reader *rhead,long num);book *Bload();reader *Rload();void Bsave(book *Bhead);void Rsave(reader *Rhead,book *bhead);void insert(book *bhead);void reg(reader *head);reader *login(reader *rhead,book *bhead);void borrow(reader *temp,book *Bhead);void returnbook(book *bhead,reader *temp);void style();void intpsd(char *psd);void menu(struct BOOK *Bhead,reader *Rhead);void menu2(reader *temp,reader *rhead,book *bhead); long backtime();#endif借还书文件borrow_return.cpp#include"library.h"void borrow(reader *temp,book *Bhead){style();long num;int i;char t,k,name[30];book *Bbook;getch();system("cls");while(1){printf("\n ┏━━━━━━━━━━┓");printf("\n█━━━━━━━━━━━┫借书┣━━━━━━━━━━━█");printf("\n ┗━━━━━━━━━━┛");printf("\n请输入您要查找借阅书籍的方式:");printf("\n 1、按书号查找\n");printf("\n 2、按作者查找\n");printf("\n 3、按书名查找\n");printf("\n 4、返回主菜单\n");t=getch();switch(t){case '1':{printf("\n请输入您要查找的书籍编号:");scanf("%d",&num);if((Bbook=S_number(num,Bhead))!=NULL){showB(Bbook);printf("\n请问你是否要借阅该书籍?Y/N");k=getch();if(k=='Y'||k=='y')goto borrow;elsebreak;}elsebreak;}case '2':{S_author(Bhead);break;}case '3':{printf("\n请输如您要查找的书籍名:");scanf("%s",name);if((Bbook=S_name(Bhead,name))!=NULL){showB(Bbook);printf("\n请问你是否要借阅该书籍?Y/N");k=getch();if(k=='Y'||k=='y')goto borrow;elsebreak;}elsecontinue;break;}default:return;borrow:if(Bbook!=NULL&&temp->residue>0&&Bbook->exist>0) {temp->residue--;Bbook->exist--;for(i=0;i<10;i++){if(temp->borrowed[i][0]==0){temp->borrowed[i][0]=Bbook->number;temp->borrowed[i][1]=backtime();break;}}printf("\n 借阅成功!");}elseif(!(temp->residue>0))printf("\n您只能借阅10本书籍!");elseif(!(Bbook->exist>0))printf("\n该书没有库存,请借阅其他书籍!");printf("\n您要继续借阅书籍吗?Y/N");t=getch();if(t=='y'||t=='Y')continue;elsebreak;}}}void returnbook(book *bhead,reader *temp){long num;int i,j=0;char t;book *p;printf("\n ┏━━━━━━━━━━┓");printf("\n█━━━━━━━━━━━┫还书┣━━━━━━━━━━━█");printf("\n ┗━━━━━━━━━━┛");printf("\n\n请输入您所还书的编号:");scanf("%d",&num);for(i=0;i<10;i++){if(num==temp->borrowed[i][0])j=1;}p=S_number(num,bhead);if(p!=NULL&&j==1){printf("\n┌────┬──────┬───────┬────┬───────┐");printf("\n│书本编号│书籍名称│出版社名称│出版时间│作者│");printf("\n├────┼──────┼───────┼────┼───────┤");printf("\n│%8d│%12s│%14s│%8d│%14s│",p->number,p->name,p->press,p->presstime,p->author);printf("\n└────┴──────┴───────┴────┴───────┘\n");printf("\n确认归还该书籍?Y/N");t=getch();if(t=='Y'||t=='y'){p->exist++;temp->residue++;for(i=0;i<10;i++){if(temp->borrowed[i][0]==num){temp->borrowed[i][0]=0;temp->borrowed[i][1]=0;break;}}}else return;}else{printf("\n编号有误,请仔细检查!");}}新书入库insert.cpp#include "library.h"void insert(book *bhead){style();long t;book *temp1,*temp,*temp2;temp1=bhead->next;printf("\n ┏━━━━━━━━━━┓");printf("\n█━━━━━━━━━━━┫入库┣━━━━━━━━━━━█");printf("\n ┗━━━━━━━━━━┛");while(1){printf("\n请输入您给定书的编号(6位以内的正整数):");scanf("%d",&t);if(t<=0||t>999999){printf("\n您的编号不在处理范围(1~999999)之内!");fflush(stdin);continue;}else{temp2=S_number(t,bhead);if(temp2==NULL){break;}else{temp2->total++;temp2->exist++;printf("\n编号为%d的书已存在,入库成功!",t);return;}}}temp=(book*)malloc(sizeof(book));temp->number=t;printf("\n请输入书名:");scanf("%s",temp->name);printf("\n请输入本书作者:");scanf("%s",temp->author);printf("\n请输入本书出版社:");scanf("%s",temp->press);printf("\n请输入本书出版时间:");scanf("%d",&temp->presstime);temp->next=NULL;temp->total=1;temp->exist=1;if(bhead->next==NULL)bhead->next=temp;else{while(temp1->next!=NULL&&temp1->number<temp->number)temp1=temp1->next;temp->next=temp1->next;temp1->next=temp;}printf("\n ┏━━━━━━━━━━┓");printf("\n█━━━━━━━━━━━┫入库成功┣━━━━━━━━━━━█");printf("\n ┗━━━━━━━━━━┛");}void reg(reader *head){style();long i=1000;int j;char t1[16],t2[16];reader *temp=head->next;reader *p;p=new(reader);printf("\n ┏━━━━━━━━━━┓");printf("\n█━━━━━━━━━━━┫注册┣━━━━━━━━━━━█");printf("\n ┗━━━━━━━━━━┛");printf("\n 请输入姓名:");scanf("%s",p->name);fflush(stdin);while(1){printf("\n 请输入性别:\n M:男性:\n F:女性:");p->sex=getchar();if(p->sex=='F'||p->sex=='f'||p->sex=='M'||p->sex=='m')break;elseprintf("\n 阁下既非男,又非女,莫非来自泰国?");}while(1){while(1){printf("\n 请输入您的密码:");intpsd(t1);if(strlen(t1)<=4)printf("\n 您设置的密码过于简单,请重新设置:");elsebreak;}printf("\n 请确认您的密码:");intpsd(t2);if(strcmp(t1,t2)==0){strcpy(p->password,t1);break;}elseprintf("\n 您两次输入的密码不一致!");}p->residue=10;p->next=NULL;for(j=0;j<10;j++){p->borrowed[j][0]=0;p->borrowed[j][1]=0;}if(temp==NULL){p->number=i;head->next=p;p->limit=1;}else{++i;while(temp->next!=NULL){++i;temp=temp->next;}p->number=i;p->limit=0;temp->next=p;}showR(p,NULL);}reader *login(reader *rhead,book *bhead){long num;char pass[16];int i=5;reader *reader;style();printf("\n ┏━━━━━━━━━━┓");printf("\n█━━━━━━━━━━━┫登录┣━━━━━━━━━━━█");printf("\n ┗━━━━━━━━━━┛");while(1){printf("\n 请输入您的借阅证号:");scanf("%d",&num);if((reader=S_reader(rhead,num))==NULL){printf("\n 没有找到您所在编号的读者.");getch();return NULL;}elsebreak;}while(i>0){printf("\n 请输入密码:");intpsd(pass);if(strcmp(pass,reader->password)==0)return reader;else{printf("\n 密码错误");return NULL;}}}文件读、写load_save.cpp#include "library.h"book *Bload(){FILE *p;book *Bhead=(book*)malloc(sizeof(book));book *temp,*temp1;Bhead->next=NULL;if((p=fopen("book.txt","r"))==NULL){printf("\n打开文件book.txt失败,请检查...");return Bhead;}else{fgetc(p);if(!feof(p)){printf("\n非空");rewind(p);temp=(book*)malloc(sizeof(book));fscanf(p,"%14d%12s%18s%8d%14s%4d%4d\n",&temp->number,temp->name,temp->press, &temp->presstime,temp->author,&temp->total,&temp->exist);temp->next=NULL;Bhead->next=temp;}while(!feof(p)){temp1=(book*)malloc(sizeof(book));fscanf(p,"%14d%12s%18s%8d%14s%4d%4d\n",&temp1->number,temp1->name,temp1->pr ess,&temp1->presstime,temp1->author,&temp1->total,&temp1->exist);temp1->next=NULL;temp->next=temp1;temp=temp->next;}printf("\n书籍信息读取成功...");return Bhead;}}reader *Rload(){FILE *p;int i;reader *temp,*temp1;reader *Rhead=(reader*)malloc(sizeof(reader));Rhead->next=NULL;if((p=fopen("reader.txt","r"))==NULL){printf("\n打开文件reader.txt失败,请检查");return Rhead;}else{fgetc(p);if(!feof(p)){rewind(p);temp=(reader*)malloc(sizeof(reader));fscanf(p,"%12d%10s%3c%8d%2d%12s",&temp->number,temp->name,&temp->sex,&temp-> residue,&temp->limit,temp->password);for(i=0;i<10;i++){fscanf(p,"%6d",&temp->borrowed[i][0]);fscanf(p,"%10d",&temp->borrowed[i][1]);}temp->next=NULL;Rhead->next=temp;}while(!feof(p)){printf("\a");temp1=(reader*)malloc(sizeof(reader));fread(temp1,sizeof(reader),1,p);temp1->next=NULL;temp->next=temp1;temp=temp->next;}printf("\n读者信息读取成功...");return Rhead;}}void Bsave(book *Bhead){FILE *p;book *temp=Bhead->next;if(temp==NULL)return;else{if((p=fopen("book.txt","w"))==NULL)printf("\n打开book.txt失败...");while(temp!=NULL){showB(temp);fprintf(p,"%14d%12s%14s%8d%14s%4d%4d\n",temp->number,temp->name,temp->press,te mp->presstime,temp->author,temp->total,temp->exist);temp=temp->next;}printf("\n存储书籍成功...");}}void Rsave(reader *Rhead,book *Bhead){FILE *p;int i;reader *temp=Rhead->next;if(temp==NULL)return;else{if((p=fopen("reader.txt","w"))==NULL)printf("\n打开reader.txt失败...");while(temp!=NULL){Sleep(1000);showR(temp,Bhead);fprintf(p,"%12d%10s%3c%8d%2d%12s",temp->number,temp->name,temp->sex,temp->resid ue,temp->limit,temp->password);for(i=0;i<10;i++){fprintf(p,"%6d",temp->borrowed[i][0]);fprintf(p,"%10d",temp->borrowed[i][1]);}temp=temp->next;}printf("\n存储读者成功...");}}图书搜索search.cpp#include"library.h"book *S_name(book *head,char name[]){book *temp=head->next;if(temp==NULL)printf("\n书库中还没有书籍,请入库!");else{while(temp!=NULL){if(strcmp(temp->name,name)==0){printf("\n书名为<<%s>>的书存在!",name);break;}elsetemp=temp->next;}}return temp;}void S_author(book *head){char author[30];book *temp=head->next;if(temp==NULL)printf("\n书库中还没有书籍,请入库!");else{printf("\n请输入您要查找的作者名:");scanf("%s",author);while(temp!=NULL){if(strcmp(author,temp->author)==0)showB(temp);temp=temp->next;}}getch();}keynode *initindex(book *head){int i;book *temp=head->next;keynode *tempkey,*p;printf("\n初始化索引表开始...");keynode *keyhead=(keynode*)malloc(sizeof(keynode));keyhead->next=NULL;tempkey=keyhead->next;if(temp!=NULL){p=(keynode*)malloc(sizeof(keynode));p->key=temp->number;p->adress=temp;p->next=NULL;keyhead->next=p;tempkey=keyhead->next;}while(temp!=NULL){for(i=0;i<5&&temp->next!=NULL;i++){temp=temp->next;}if(i<4)return keyhead;else{p=(keynode*)malloc(sizeof(keynode));p->key=temp->number;p->adress=temp;p->next=NULL;tempkey->next=p;tempkey=tempkey->next;}}getch();return keyhead;}void delkey(keynode *keyhead){keynode *temp;if(keyhead->next==NULL){free(keyhead);}else{while(keyhead!=NULL){temp=keyhead;keyhead=keyhead->next;free(temp);}}printf("\n索引表清空!");}book *S_number(long num,book *bhead){int i;book *p;keynode *keyhead=initindex(bhead);keynode *tempkey=keyhead->next;if(tempkey==NULL){printf("\n书库无记录,请输入!");delkey(keyhead);return NULL;}else{while(tempkey->next!=NULL){if(tempkey->key<num&&tempkey->next->key<num)tempkey=tempkey->next;else break;}if(tempkey==NULL){printf("没有找到编号为%d的书籍!",num);delkey(keyhead);return NULL;}else{p=tempkey->adress;for(i=0;i<5&&p!=NULL;i++){if(p->number==num){showB(p);delkey(keyhead);return p;}elsep=p->next;}delkey(keyhead);return NULL;}}}reader *S_reader(reader *rhead,long num){reader *temp=rhead->next;if(temp==NULL){printf("\n文件中没有数据导入,请检查修复系统!");return NULL;}else{while(temp){if(temp->number==num)return temp;elsetemp=temp->next;}return temp;}}显示图书及读者信息showing.cpp#include"library.h"void showR(reader *tr,book *bhead){int i;book *p;printf("\n ╔════════╗");printf("\n╔══════════╣读者信息╠══════════╗");printf("\n║╚════════╝║");printf("\n╠══════╦═════╦═══╦════╦════╦═══╣");printf("\n║借阅证号║姓名║性别║剩余可借║已借本数║权限║");printf("\n╠══════╬═════╬═══╬════╬════╬═══╣");printf("\n║%12d║%10s║%6s║%8d║%8d║%6s║",tr->number,tr->name,sc(tr->sex),tr->residue,10-tr->residue,lc(tr->limit));printf("\n╚══════╩═════╩═══╩════╩════╩═══╝");printf("\n 以下为所借书籍信息:\n");for(i=0;i<10;i++){if(tr->borrowed[i][0]==0)continue;else{printf("\n %d",tr->borrowed[i][0]);p=S_number(tr->borrowed[i][0],bhead);printf("\n┌────┬──────┬───────┬────┬───────┬────┬────┐");printf("\n│书本编号│书籍名称│出版社名称│出版时间│作者│借书日期│可借时间│");printf("\n├────┼──────┼───────┼────┼───────┼────┼────┤");printf("\n│%8d│%12s│%14s│%8d│%14s│%8d│2个月│",p->number,p->name,p->press,p->presstime,p->author,tr->borrowed[i][1]);printf("\n└────┴──────┴───────┴────┴───────┴────┴────┘\n");}}}void showB(book *p){printf("\n┌────┬──────┬───────┬────┬───────┬──┬──┐");printf("\n│书本编号│书籍名称│出版社名称│出版时间│作者│共计│可借│");printf("\n├────┼──────┼───────┼────┼───────┼──┼──┤");printf("\n│%8d│%12s│%14s│%8d│%14s│%4d│%4d│",p->number,p->name,p->press,p->presstime,p->author,p->total,p->exist);printf("\n└────┴──────┴───────┴────┴───────┴──┴──┘\n");}char *sc(char p){if(p=='F'||p=='f')return "女";elsereturn "男";}char *lc(int i){if(i==1)return "管理员";elsereturn "读者";}菜单menu.cpp#include "library.h"void style(){system("mode con cols=90 lines=30");system("color 0f");system("cls");}void intpsd(char *psd){int i=0; char c;while((c=getch())!=13){if (c!='\b'&&c!='\t'&&i<20){psd[i]=c;putchar('*');i++;}if(c=='\b'&&i>0){printf("\b \b");i--;}}psd[i]='\0';return;}void menu(book *Bhead,reader *Rhead) {reader *tempr;style();char m;int i;while(1){printf("\n\t ┏━━━━━━━━━━┓");printf("\n\t◢━━━━━━━━━━━┫长安大学图书馆┣━━━━━━━━━━◣");printf("\n\t┃┗━━━━━━━━━━┛┃");printf("\n\t┃┏━━━━━━━━┓┃");printf("\n\t┃┃┃┃");printf("\n\t┃┃┃┃");printf("\n\t┃┃1﹑登陆┃┃");printf("\n\t┃┃┃┃");printf("\n\t┃┃2﹑注册┃┃");printf("\n\t┃┃┃┃");printf("\n\t┃┃┃┃");printf("\n\t┃┃┃┃");printf("\n\t┃┗━━━━━━━━┛━>按任意键退出<━┃");printf("\n\t◥━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◤\n");fflush(stdin);m=getch();if(m=='2'){char message[] = "\n正在进入请稍候.... ";for(i=0;i<strlen(message);i++){printf("%c",message[i]);Sleep(50);}system("cls");reg(Rhead);}elseif(m=='1'){char message[] = "\n正在进入请稍候.... ";for(i=0;i<strlen(message);i++){printf("%c",message[i]);Sleep(50);}system("cls");tempr=login(Rhead,Bhead);if(tempr==NULL) continue;menu2(tempr,Rhead,Bhead);}else{system("cls");Rsave(Rhead,Bhead);Bsave(Bhead);exit(0);}}}void menu2(reader *temp,reader *rhead,book *bhead){style();char i;getch();system("cls");while(1){printf("\n ┏━━━━━━━━┓");printf("\n◢━━━━━━━━━━━┫图书馆菜单┣━━━━━━━━━━━◣");printf("\n┃┗━━━━━━━━┛┃");printf("\n┃┏━━━━━━━━┓┃");printf("\n┃┃请选择您的操作: ┃┃");printf("\n┃┃┃┃");printf("\n┃┃1﹑借书┃┃");printf("\n┃┃2﹑还书┃┃");printf("\n┃┃3﹑个人信息┃┃");printf("\n┃┃4﹑返回上级┃┃");printf("\n┃┃5﹑退出系统┃┃");if(temp->limit==1) printf("\n┃┃6﹑入库┃┃");else ;printf("\n┃┗━━━━━━━━┛┃");printf("\n◥━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━◤\n");i=getch();switch(i){case '1':borrow(temp,bhead);break;case '2':returnbook(bhead,temp);break;case '3':showR(temp,bhead);break;case '4':menu(bhead,rhead);break;case '5':Rsave(rhead,bhead);Bsave(bhead);exit(0);case '6':insert(bhead);break;default:break;}}}long backtime(){long t;time_t timep;struct tm *p;time(&timep);p=localtime(&timep);t=(1900+p->tm_year)*10000+(1+p->tm_mon)*100+p->tm_mday;return t;}主函数main.cpp#include"library.h"void main(){book *Bhead;reader *Rhead; Bhead=Bload(); Rhead=Rload(); menu(Bhead,Rhead); Rsave(Rhead,Bhead); Bsave(Bhead); getch();}。

相关文档
最新文档