用mysql数据库实现的C++图书管理系统
- 格式:docx
- 大小:32.23 KB
- 文档页数:65
图书管理系统数据库设计说明书图书管理系统数据库设计说明书1、引言本文档旨在对图书管理系统的数据库设计进行详细说明,包括数据库架构、表结构设计、数据流图等内容,以便于系统开发人员进行系统开发和维护。
2、数据库架构设计2.1 数据库类型本系统将采用关系型数据库,具体使用的数据库管理系统为MySQL。
2.2 数据库服务器架构本系统将采用分布式数据库架构,包括一个主数据库服务器和多个副本数据库服务器。
2.3 数据库服务器部署主数据库服务器和副本数据库服务器将部署在不同的物理机器上,以实现数据的冗余备份和负载均衡。
3、数据库表设计3.1 用户表(User)字段:用户ID、用户名、密码、姓名、年龄、性别、联系方式、电子邮箱、注册时间3.2 图书表(Book)字段:图书ID、图书名称、作者、出版社、出版日期、图书类别、价格、库存数量3.3 图书借阅表(Borrow)字段:借阅ID、用户ID、图书ID、借阅日期、归还日期、借阅状态3.4 图书类别表(Category)字段:类别ID、类别名称、类别描述3.5 出版社表(Publisher)字段:出版社ID、出版社名称、联系方式、地质4、数据流图设计4.1 用户注册流程图描述用户注册过程,包括用户输入信息、系统验证信息、保存用户信息等流程。
4.2 用户借阅图书流程图描述用户借阅图书的过程,包括用户查找图书、用户借阅图书、系统更新库存数量等流程。
4.3 用户归还图书流程图描述用户归还图书的过程,包括用户查找借阅记录、用户归还图书、系统更新借阅状态等流程。
5、附件本文档附带的相关附件包括:- 数据库表结构设计文档- 数据流图设计文档- ER图设计文档6、法律名词及注释本文档涉及的法律名词及其注释如下:- 数据库管理系统(Database Management System,简称DBMS):是一种管理和整理数据库的软件系统。
- 关系型数据库(Relational Database):是一种基于关系模型的数据库,采用表格来组织和管理数据。
大工14秋《软件工程》图书管理系统--可直接上交随着计算机技术的飞速发展,各个领域都在不断地应用计算机技术来提高工作效率。
然而,我校图书馆仍然采用传统的手工管理方式,效率低下,易出错,手续繁琐,耗费大量人力。
为了提高图书馆的管理效率,我们特别编写了这个图书管理系统软件。
本需求的编写目的是为了研究图书管理系统软件的开发途径和应用方法,并为项目策划、概要设计和详细设计提供基础,同时也为维护人员进行内部维护、信息更新、验收和测试提供依据。
本需求的预期读者包括与图书管理系统软件开发有联系的决策人、开发组成员和软件验证者。
2.需求分析2.1功能需求本系统主要包括以下功能模块:图书信息管理模块、读者信息管理模块、借还书管理模块、系统管理模块和统计查询模块。
2.1.1图书信息管理模块该模块主要用于实现对图书信息的录入、修改、查询和删除等操作。
其中,图书信息包括图书编号、图书名称、作者、出版社、出版日期、价格、分类号、馆藏数量等。
2.1.2读者信息管理模块该模块主要用于实现对读者信息的录入、修改、查询和删除等操作。
其中,读者信息包括读者编号、姓名、性别、年龄、联系方式等。
2.1.3借还书管理模块该模块主要用于实现对借阅信息的录入、修改、查询和删除等操作。
其中,借阅信息包括借阅编号、读者编号、图书编号、借阅日期、应还日期、归还日期等。
2.1.4系统管理模块该模块主要用于实现对系统用户、权限、日志等信息的管理。
2.1.5统计查询模块该模块主要用于实现对图书、读者、借阅等信息的统计查询功能,包括图书借阅排行榜、读者借阅排行榜、借阅信息统计等。
2.2性能需求本系统应满足以下性能需求:2.2.1响应时间系统在任何时候都应该有较快的响应速度,用户在进行各种操作时不应该出现明显的卡顿现象。
2.2.2并发处理能力系统应该具有较强的并发处理能力,能够同时处理多个用户的请求。
2.2.3数据安全性系统应该具有较高的数据安全性,能够保护图书馆的图书、读者和借阅等信息不被非法获取、篡改或破坏。
数据库课程设计报告专业:微电子技术系班级:2940710820姓名:指导教师:成绩:2011年12月12日一、课程设计概述1.课程设计背景某大学图书馆开发一个图书管理系统,要求在读者登记处可以将读者的信息添加,信息系统中保存,当读者信息发生变化,对计算机内容进行修改,当读者办理退卡手续要删除此读者信息,图书管理负责图书和出版社的管理,读书借还处进行借书管理,还书管理,罚款处理,库存查询,图书排行榜,生成超期未还书的读者,进行通知.给不同用户设置不同权限,供用户访问数据库.2.编写目的让学生熟练掌握mysql中的创建数据库、创建表、显示、查询、select语句、视图、存储过程、创建检索、对表的添加、删除、修改和用户权限的设置等基本运用,并通过编写这个图书管理系统,来实际演练,达到融会贯通的效果。
3.软件定义Mysql是目前最流行的开源的中小型关系数据管理系统,目前被广泛的应用于internet 上得中小型网站中,它由mysql AB公司开发、发布并支持。
本实验用的是mysql 5.1版本4.开发环境本实验用的是mysql 5.1版本,windows2007二、需求分析1.问题的提出1:怎么通过mysql和信息之间的关系来创建图书管理系统的数据库及表?2:怎样来实现对插入读者信息并保存、修改及删除?3:怎么来实现对图书的管理?4:怎样实现对借书后在读书借还处添加读者借书信息和还书后删除读者借还处中的借书信息且更新图书管理处的图书数量?5:怎么实现对超期读者进行罚款操作和生成这些读者的名单,以方便通知?6:怎样实现图书的借书排行榜和查看库存书量?7:怎么样来根据不同用户对数据库的等级的不同来设置这些用户的权限?2.需要完成的功能及各部分功能概述1:读者登记建卡处的功能是对读者基本信息进行登记,读者信息发生变化对读者基本信息进行修改,读者要求退还借书卡时对读者信息进行删除等操作2:图书管理处的功能是对图书和出版社、作者、书价,数量,剩余书量进行管理更新。
图书管理系统数据库设计一、系统概述1、系统简介图书管理是每个图书馆都需要进行的工作。
一个设计良好的图书管理系统数据库能够给图书管理带来很大的便利。
2、需求分析图书管理系统的需求定义为:1.学生可以直接通过借阅终端来查阅书籍信息,同时也可以查阅自己的借阅信息。
2.当学生需要借阅书籍时,通过账号密码登陆借阅系统,借阅系统处理学生的借阅,同时修改图书馆保存的图书信息,修改被借阅的书籍是否还有剩余,同时更新学生个人的借阅信息。
3.学生借阅图书之前需要将自己的个人信息注册,登陆时对照学生信息。
4.学生直接归还图书,根据图书编码修改借阅信息5.管理员登陆管理系统后,可以修改图书信息,增加或者删除图书信息6.管理员可以注销学生信息。
通过需求定义,画出图书管理系统的数据流图:数据流图二、系统功能设计画出系统功能模块图并用文字对各功能模块进行详细介绍。
三、数据库设计方案图表1、系统E-R模型2、设计表给出设计的表名、结构以及表上设计的完整性约束。
student:book_sort:ticket_fee float null 处罚金额列名数据类型是否为空/性质说明manager_id varchar not null / PK 管理员编号manager_name varchar not null 管理员姓名manager_age varchar not null 管理员年龄manager_phone varchar not null 管理员电话3、设计索引给出在各表上建立的索引以及使用的语句。
student:1.为stu_id创建索引,升序排序sql:create index index_id on student(stu_id asc);2.为stu_name创建索引,并且降序排序sql:alter table student add index index_name(stu_name, desc);插入索引操作和结果如下所示:mysql> create index index_id on student(stu_id asc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> alter table student add index index_name(stu_name desc);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql>book:1.为book_id创建索引,升序排列sql:create index index_bid on book(book_id);2.为book_record创建索引,以便方便查询图书的登记日期信息,升序:sql:create index index_brecord on book(book_record);插入索引的操作和结果如下所示:mysql> create index index_bid on book(book_id);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0mysql> create index index_brecord on book(book_record);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0borrow:1.为stu_id和book_id创建多列索引:sql:create index index_sid_bid on borrow(stu_id asc, book_id asc);插入索引的操作和结果如下所示:mysql> create index index_sid_bid on borrow(stu_id asc, book_id asc); Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0return_table:1.为stu_id和book_id创建多列索引:sql:create index index_sid_bid on return_table(stu_id asc, book_id asc);插入索引的操作和结果如下所示:mysql> create index index_sid_bid_r on return_table(stu_id asc, book_id asc); Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0ticket:1. 为stu_id和book_id创建多列索引:sql:create index index_sid_bid on ticket(stu_id asc, book_id asc);插入索引的操作和结果如下所示:mysql> create index index_sid_bid on ticket(stu_id asc, book_id asc); Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 0manager:1.为manager_id创建索引:sql:create index index_mid on manager(manager_id);插入索引的操作和结果如下所示:mysql> create index index_mid on manager(manager_id);Query OK, 0 rows affectedRecords: 0 Duplicates: 0 Warnings: 04、设计视图给出在各表上建立的视图以及使用的语句。
摘要随着计算机网络和Internet的普及,运用先进的管理信息系统及软件开发平台,对信息进行科学化和网络化管理,已经成为当今时代的发展趋势。
世纪是一个信息化的时代,获取信息是现在最重要的事情。
开发基于jsp的图书管理系统主要是基于软件开发的软件工程的原理,结合面向视觉语言来实现的教训对象,根据以往的工作经验,开发自己的系统。
该系统的MyEclipse作为功能强大的开发工具和MySQL数据库设计的背景下,整个系统具有简单,干净的界面展现出来,就这么简单,可行,易于使用的用户,操作简单。
该系统采用了上流社会更先进的技术来建立一个三层MVC的性能,可扩展性和强大的信息管理系统。
关键词:图书管理;MyEclipse;MySQL;jspAbstractWith the popularity of computer network and Internet, the use of advanced management information system and software development platform, to carry on the scientific and the information network management, has become a development trend in today's world. Century is an era of information, access to information is the most important thing now.Development based on JSP household goods sales site is mainly based on the principle of software engineering software development, the visual language to realize the teaching object oriented, based on past experience, develop their own systems. The system MyEclipse as a powerful development tools and design under the background of the MySQL database, the system has a simple, clean interface, it's that simple, feasible and easy to use user, the operation is simple. The system USES a society more advanced technology to set up a three-tier MVC performance, scalability and powerful information management system.Key words: book management; MyEclipse; MySQL; jsp目录1 前言 (1)1.1 课题背景及意义 (1)1.2 管理信息系统发展现状 (1)1.3 课题的研究方法、技术路线 (3)2 相关技术简介 (4)2.1 Jsp技术介绍 (4)2.2 MyEclipse简介 (4)2.3 Tomcat简介 (4)2.4 MySQL数据库 (5)3 系统分析 (7)3.1 系统设计目标 (7)3.2 系统可行性分析 (7)3.4 系统设计规则 (8)3.5 运行环境 (9)4 系统设计 (10)4.1 架构设计 (10)4.2 功能模块设计 (11)4.3 技术架构 (11)4.4 数据库结构设计 (12)4.4.1 数据库设计规范 (12)4.4.2 数据库概念模型 (13)4.4.3 数据表字段设计 (13)4.5 系统架构类图 (16)4.6 系统交互图 (16)5 详细设计 (18)5.1 数据库连接配置 (18)5.2 功能模块实现 (19)5.2.1 登陆界面 (19)5.2.2 管理员主界面 (20)5.2.3 管理员信息维护界面 (20)5.2.4 借书界面 (21)5.2.5 借阅人管理界面 (21)5.2.6 借阅人主界面 (22)5.2.7 图书管理界面 (22)5.2.8 图书类别管理界面 (23)5.2.9业绩管理界面 (23)6 系统的测试 (25)6.1 程序调试 (25)6.2 程序的测试 (25)6.2.1 测试的重要性及目的 (25)6.2.2 测试的步骤 (26)6.2.3 测试的主要内容 (27)总结 (29)致谢 (30)参考文献 (31)1 前言1.1 课题背景及意义如今网络的发展越来越迅猛,人们上网的途径也是越来越方便,网络在人们生活中的应用也越来越广泛,使得在网络上进行图书的管理成为目前深受学校喜欢的一种管理方式。
一、实验目的通过本次实验,使学生了解数据库管理系统的基本概念、原理和操作方法,掌握数据库设计、创建、查询、更新和删除等基本操作,提高数据库应用能力。
二、实验环境1. 操作系统:Windows 102. 数据库管理系统:MySQL 8.03. 开发工具:MySQL Workbench三、实验内容1. 数据库设计(1)分析图书销售管理系统的需求,确定实体和实体属性。
实体:图书、读者、借阅记录、图书类别、出版社、作者实体属性:- 图书:图书编号、书名、作者、出版社、出版日期、价格、库存数量- 读者:读者编号、姓名、性别、年龄、电话、邮箱- 借阅记录:借阅记录编号、图书编号、读者编号、借阅日期、归还日期、罚款金额- 图书类别:类别编号、类别名称- 出版社:出版社编号、出版社名称- 作者:作者编号、姓名、性别、国籍(2)根据实体和实体属性,绘制E-R图。
(3)利用PowerDesigner数据库软件系统进行系统物理数据模型设计。
2. 数据库创建(1)打开MySQL Workbench,创建新数据库。
(2)根据E-R图,创建图书、读者、借阅记录、图书类别、出版社、作者等关系表。
3. 数据库查询(1)使用SQL语句进行简单查询,如查询所有图书信息。
SELECT FROM 图书;(2)使用SQL语句进行复杂查询,如查询特定图书类别下的图书信息。
SELECT FROM 图书 WHERE 类别编号 = (SELECT 类别编号 FROM 图书类别 WHERE 类别名称 = '计算机');4. 数据库更新(1)使用SQL语句进行数据插入。
INSERT INTO 读者 (读者编号, 姓名, 性别, 年龄, 电话, 邮箱) VALUES ('R001', '张三', '男',25,'138****8000','********************');(2)使用SQL语句进行数据修改。
基于PHP+MySQL图书管理系统设计与实现一、引言随着信息技术的快速发展,图书管理系统在图书馆及各类图书机构中发挥着重要的作用。
采用计算机技术构建图书馆管理系统能够提高管理效率,减轻工作负担,并且便于读者查找所需图书资源。
本文将介绍一种基于PHP+MySQL的图书管理系统的设计与实现。
二、系统需求分析1. 功能需求本图书管理系统需要包含以下基本功能:(1) 图书信息管理:包括图书的录入、修改、删除和查询等操作。
(2) 读者信息管理:包括读者的注册、登录、修改个人信息等操作。
(3) 图书借阅管理:包括图书借阅、归还、续借等操作,并能记录借阅历史。
(4) 图书馆管理员管理:包括管理员的注册、登录、权限管理等操作。
(5) 报表统计功能:能够统计图书借阅情况、读者借阅排行等数据。
2. 性能需求系统应具备以下性能要求:(1) 快速响应:系统具备快速响应读者和管理员的请求,保证系统流畅运行。
(2) 数据安全性:系统需要采用安全机制,保护图书和读者的信息。
(3) 扩展性:系统应具备良好的扩展性,以便后续对功能进行拓展。
三、系统设计与实现1. 开发环境本系统采用PHP语言作为开发语言,结合MySQL数据库进行数据存储。
开发环境采用Apache服务器,支持HTTP协议。
2. 数据库设计(1) 图书表(Book):包含图书的编号、名称、作者、出版社等属性。
(2) 读者表(Reader):包含读者的编号、姓名、性别、年龄等属性。
(3) 借阅表(Borrow):包含借阅记录的编号、图书编号、读者编号、借阅日期、归还日期等属性。
(4) 管理员表(Admin):包含管理员的编号、用户名、密码等属性。
3. 页面设计(1) 登录页面:读者和管理员可以分别通过用户名和密码登录系统。
(2) 图书查询页面:包含图书名称、作者等查询条件,可以根据条件查询所需图书。
(3) 借阅页面:读者可以查询和借阅图书,并记录借阅信息。
(4) 归还页面:读者可以查询自己借阅的图书,并进行归还操作。
实操考核:用C#开发一个图书管理系统引言图书管理系统是一个常见的管理系统,在图书馆、学校和其他机构中被广泛使用。
通过使用C#语言开发一个图书管理系统,我们能够练习和巩固我们在C#编程方面的知识和技能。
本文将引导你从头开始构建一个基本的图书管理系统,并提供一些相关的代码示例和实操建议。
1. 项目概述1.1 项目背景图书管理系统主要用于记录和管理图书的信息,包括书名、作者、出版社、ISBN等。
用户可以通过系统进行图书的借阅、归还、查询等操作。
这个系统需要能够在存储和管理大量图书信息的同时,提供快速和准确的查询结果。
1.2 项目目标本项目的目标是通过C#语言开发一个简单但功能完整的图书管理系统。
系统应具备以下基本功能: - 记录和管理图书信息:包括书名、作者、出版社、ISBN等; - 借阅和归还图书:用户能够借阅和归还图书,并记录借阅和归还的时间; -查询图书信息:用户能够通过书名、作者、ISBN等关键字查询图书信息; - 统计和报表功能:系统能够生成各种统计信息和报表,如借阅次数、出版社统计等。
2. 系统设计2.1 数据模型设计在开发图书管理系统之前,我们首先需要设计系统的数据模型。
数据模型定义了系统中的实体及其之间的关系。
在本系统中,我们可以定义以下几个实体:- 图书(Book):包括书名、作者、出版日期、出版社、ISBN等属性; - 用户(User):包括用户名、密码、角色等属性; - 借阅记录(BorrowRecord):包括借阅时间、归还时间、借阅状态等属性。
2.2 系统架构设计系统架构设计是指确定系统的整体结构和组成部分。
在本项目中,我们可以采用三层架构设计,将系统分为表示层、业务逻辑层和数据访问层。
•表示层(Presentation Layer):负责与用户进行交互,接收用户的输入和展示查询结果等。
•业务逻辑层(Business Logic Layer):负责处理系统的业务逻辑,例如借阅、归还、查询等操作。
.#include<fstream>#include<iostream>#include<stdlib.h>#include<ctime>#include<cmath>#include<termios.h>#include <sstream>#include<string.h>#include<assert.h>#include<mysql/mysql.h>//改变字体颜色#define NONE "\033[m"#define RED "\033[0;32;31m"#define GREEN "\033[0;32;32m"#define BLUE "\033[0;32;34m"#define YELLOW "\033[1;33m"#define LIGHT_RED "\033[1;31m"#define LIGHT_GREEN "\033[1;32m"#define LIGHT_BLUE "\033[1;34m"/*在编译程序之前,请先开启mysql服务器(命令为sudo mysqld_safe &),然后再登录mysql客户端(命令为mysql -u root -p)建立数据库stu;建立数据表reader,book;具体操作语句如下:create database stu;create table reader(stu_name varchar(20),stu_phone varchar(15),stu_password varchar(10),stu_num int,debt float,lend_time double,back_time double,count int);create table book(book_name varchar(40),book_aut varchar(40),book_pre varchar(40),book_num int,book_mux int,book_con int);编译时用如下命令:g++ $(mysql_config --cflags) 110.cpp -o t $(mysql_config --libs)*///定义mysql数据库变量MYSQL mysql;MYSQL_RES * results;MYSQL_FIELD *fileds;MYSQL_ROW rows;char strHost[] = "localhost";char strUser[] = "root";char strPasswd[] = "3335599";char strDb[] = "stu";char strSQL[200];unsigned int num_fields;/*程序导读:1.程序中对书的操作,可通过书名,编号来进行,flag=0按书名来操作,flag=1按书编号来操作2.程序中对用户的操作,也可通过姓名,用户ID号或编号两种方式来进行,flag=0按姓名来操作,flag=1按用户ID号或编号来操作3.本程序分5个部分,具体已标识如(1)图书管理...4.本程序即可实现将数据保存至本地即stu.txt,book.txt,又可将数据保存至mysql数据库,只需稍加修改,具体如何修改,在此就不做说明*/using namespace std;class Book{public:string book_name;string book_num;//编号string book_pre;//出版社string book_aut;//作者int book_con;//这样的书还有几本int book_mux;//这样的书总共有几本public:Book(){book_con=0;book_mux=0;}void show_book();};/****************************************(1)图书管理*******************************************/void Book::show_book(){cout<<"书名:"<<book_name<<endl;cout<<"出版社:"<<book_pre<<endl;cout<<"此书的作者:"<<book_aut<<endl;cout<<"ISBN编号:"<<book_num<<endl;cout<<"此书共有"<<book_mux<<"本"<<endl;cout<<"还有"<<book_con<<"本书未借出!"<<endl;}class BookNode{public:Book book;BookNode *next;};BookNode *headbook=NULL;void savebook(BookNode *p);//保存图书信息到数据库void del_sql_book(BookNode *p);//将图书信息从数据库中删除class BookManage{public:int totolbook;public:BookManage(){totolbook=0;}void addbook();void delbook(string s,int num,int flag);void findbook(string s,int flag);//查询图书};void BookManage::addbook(){string h;cout<<"添加输入0,退出输入-1"<<endl; cin>>h;if(h=="-1")return;else if(h=="0")while(1){if(h=="-1")break;else if(h=="0"){string na,nu,p1,aut;int con;BookNode *p=new BookNode;cout<<"请输入书名:"<<endl;cin>>na;p->book.book_name=na;cout<<"请输入ISBN编号:"<<endl;cin>>nu;p->book.book_num=nu;cout<<"请输入出版社:"<<endl;cin>>p1;p->book.book_pre=p1;cout<<"请输入此书的作者:"<<endl;cin>>aut;p->book.book_aut=aut;cout<<"请输入此书共有几本:"<<endl;cin>>con;p->book.book_con=con;p->book.book_mux=con;p->next=headbook;headbook=p;savebook(p);//添加至数据库BookManage::totolbook+=con;cout<<"继续添加输入0,取消添加输入-1"<<endl;cin>>h;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}void BookManage::delbook(string s,int num,int flag){BookNode *p=headbook;if(headbook!=NULL){switch(flag){case 0:if(headbook->book.book_name==s){if(headbook->book.book_con>1){headbook->book.book_con-=num;headbook->book.book_mux-=num;} else{headbook=p->next;totolbook-=num;del_sql_book(p);//从数据库中删除//delete p;}}else if(p->next){for(p=headbook;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->book.book_name==s){if(p->next->book.book_con>1){p->next->book.book_con-=num;headbook->book.book_mux-=num;break;}else{p->next=p->next->next;totolbook-=num;del_sql_book(p->next);//从数据库中删除//delete p->next;break;}}}if(p->next==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;}break;case 1:if(headbook->book.book_num==s){if(headbook->book.book_con>1){headbook->book.book_con-=num;headbook->book.book_mux-=num;} else{headbook=p->next;totolbook-=num;del_sql_book(p);//从数据库中删除//delete p;}}else if(p->next){for(p=headbook;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->book.book_num==s){if(p->next->book.book_con>1){p->next->book.book_con-=num;headbook->book.book_mux-=num;break;}else{p->next=p->next->next;totolbook-=num;del_sql_book(p->next);//从数据库中删除//delete p->next;break;}}}if(p->next==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;}break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}}void BookManage::findbook(string s,int flag){BookNode *p; int h=0;switch(flag){case 0:for(p=headbook;p!=NULL;p=p->next)//先查看是否有此书{if(p->book.book_name==s)break;}if(NULL==p)cout<<YELLOW"此书不存在!"NONE<<endl;for(p=headbook;p!=NULL;p=p->next)//查看名为s的图书共有几本{if(p->book.book_name==s)h++;}if(h>0)cout<<GREEN"这种名字的书共有"<<h<<"本"NONE<<endl;for(p=headbook;p!=NULL;p=p->next)//查看图书,把所有名为s的图书的信息都打印出来{if(p->book.book_name==s){p->book.show_book();//显示出图书的基本信息if(p->book.book_con==0)cout<<YELLOW"该书已全被借出!"NONE<<endl;cout<<endl;}}break;case 1:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_num==s){p->book.show_book();if(p->book.book_con==0)cout<<YELLOW"该书已全被借出!"NONE<<endl;break;}}if(NULL==p)cout<<YELLOW"此书不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}/****************************************(2)用户管理*******************************************/class Admin//管理员{public:string adm_name;//帐号string adm_passw;//密码public:Admin(){adm_name="adm";adm_passw="123";}};class LendBook{public:string bookname[3];int count;//借多少本数time_t lend_time;time_t back_time;LendBook(){count=0;}};class Stu{public:string stu_name;string stu_phone;//联系方式string stu_num;//学号(登录帐号)string password;//密码float debt;//欠费额LendBook lendbook;//用户借书信息public:void show_stu();//把此人所有信息(包括借书)显示出来};void Stu::show_stu(){cout<<"姓名:"<<stu_name<<endl;cout<<"联系电话:"<<stu_phone<<endl;cout<<"ID:"<<stu_num<<endl;cout<<"欠费额:"<<debt<<endl;cout<<"已借书"<<lendbook.count<<"本"<<endl;}class StuNode{public:Stu stu;StuNode *next;};StuNode *headstu=NULL;void savestu(StuNode *p);//保存读者信息到数据库void del_sql_stu(StuNode *p);//将读者信息从数据库中删除class StuManage:public BookManage{private:int totolstu;//用户总数public:StuManage(){totolstu=0;}void addstu();//增加用户void delstu(string s,int flag);//删除用户void findstu(string s,int flag);//查找用户void lendbook(string ss,string s,int flag);//借书void backbook(string ss,string s,int flag);//还书void paydebt(string s);//还款void mux_stu_book();//查询图书管总的图书量与总的用户量};void StuManage::addstu(){string h;cout<<"添加输入0,退出输入-1"<<endl;cin>>h;if(h=="-1")return;else if(h=="0")while(1){if(h=="-1")break;else if(h=="0"){string na,num,p1,pa,pa1,pa2;StuNode *p=new StuNode;cout<<"请输入姓名:"<<endl;cin>>na;p->stu.stu_name=na;cout<<"请输入联系电话:"<<endl;cin>>p1;p->stu.stu_phone=p1;cout<<"请输入ID:"<<endl;cin>>num;p->stu.stu_num=num;p->stu.lendbook.lend_time=0;p->stu.lendbook.back_time=0;while(1){cout<<"请输入六位密码:"<<endl;cin>>pa1;cout<<"请确认六位密码:"<<endl;cin>>pa2;if(pa1==pa2){pa=pa2;p->stu.password=pa;break;}elsecout<<YELLOW"两次密码不一样,请重行输入!"NONE<<endl;}p->stu.debt=0;p->next=headstu;headstu=p;savestu(p);//保存至数据库(StuManage::totolstu)++;//用户总数加一cout<<"继续添加输入0,取消添加输入-1"<<endl;cin>>h;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}elsecout<<YELLOW"输入字符无效!"NONE<<endl;}void StuManage::delstu(string s,int flag){StuNode *p=headstu;if(headstu!=NULL){switch(flag){case 0:if(headstu->stu.stu_name==s)//当要删除的用户位于链表的头结点位置{headstu=p->next;StuManage::totolstu--;del_sql_stu(p);//从数据库中删除delete p;}else if(p->next)//非头结点位置{for(p=headstu;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->stu.stu_name==s){p->next=p->next->next;totolstu--;del_sql_stu(p->next);//从数据库中删除//delete p->next;break;}}if(p->next==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;}break;case 1:if(headstu->stu.stu_name==s){headstu=p->next;totolstu--;del_sql_stu(p);//从数据库中删除delete p;}else if(p->next){for(p=headstu;p->next!=NULL&&p!=NULL;p=p->next){if(p->next->stu.stu_name==s){p->next=p->next->next;totolstu--;del_sql_stu(p->next);//从数据库中删除//delete p->next;break;}}if(p->next==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;}break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}}void StuManage::findstu(string s,int flag){StuNode *p; int h=0,m=1;switch(flag){case 0:for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_name==s)break;}if(p==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_name==s)h++;}if(h>0)cout<<GREEN"这种名字的用户共有"<<h<<"个"NONE<<endl;for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_name==s){p->stu.show_stu();if(p->stu.lendbook.count>=3){cout<<YELLOW"sorry,您已借满3本书,不能再借了!!!"NONE<<endl;int i=p->stu.lendbook.count;if(i>0)cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<endl;}else{int i=p->stu.lendbook.count;if(i>0)cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<"您已借了"<<p->stu.lendbook.count<<"本书!"<<endl;cout<<"您还可以借"<<3-p->stu.lendbook.count<<"本书!"<<endl;cout<<endl;}}}break;case 1:for(p=headstu;p!=NULL;p=p->next){if(p->stu.stu_num==s){p->stu.show_stu();if(p->stu.lendbook.count>=3){cout<<YELLOW"sorry,您已借满3本书,不能再借了!!!"NONE<<endl;int i=p->stu.lendbook.count;cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){ //输出用户所借书的名字cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<endl;}else{int i=p->stu.lendbook.count;cout<<"所借书的名字为:"<<endl;//输出用户所借书的名字while(i){ //输出用户所借书的名字cout<<"\t("<<m++<<"):"<<p->stu.lendbook.bookname[i-1]<<endl;i--;}cout<<"您已借了"<<p->stu.lendbook.count<<"本书!"<<endl;cout<<"您还可以借"<<3-p->stu.lendbook.count<<"本书!"NONE<<endl;cout<<endl;}break;}}if(p==NULL)cout<<YELLOW"此用户不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}}void StuManage::mux_stu_book(){StuNode *p;BookNode *q;int i=0,j=0,h=0;for(p=headstu;p!=NULL;p=p->next)i++;cout<<"当前图书馆注册用户数为:"<<i<<endl;for(q=headbook;q!=NULL;q=q->next){h+=q->book.book_mux;j+=q->book.book_con;}cout<<"当前图书馆库存的总书数为:"<<j<<endl;cout<<"已借出图书总数为:"<<h-j<<endl;}void StuManage::lendbook(string ss,string s,int flag)//借书{BookNode *p; StuNode *q;for(q=headstu;q!=NULL;q=q->next){if(q->stu.stu_num==ss){del_sql_stu(q);break;}//丛数据库中删除}if(q==NULL){cout<<YELLOW"此用户不存在!"NONE<<endl;return;}switch(flag){case 0:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_name==s){del_sql_book(p);//从数据库中删除int i=q->stu.lendbook.count;if(i>=3||q->stu.debt>0){if((i>=3)&&(q->stu.debt==0)){cout<<YELLOW"对不起,您借书已超过3本,不能再借!"NONE<<endl;}if((i<3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您因为所借图书超期已欠费,请速交清欠费再借!"NONE<<endl;}if((i>=3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您借书已超过3本且有欠费,不能再借!"NONE<<endl;}}else{//记录下所借书的名字存入用户信息中q->stu.lendbook.bookname[i]=p->book.book_name;time_t now;time(&now);q->stu.lendbook.lend_time=time(&now);//保存借书时间q->stu.lendbook.count++;//所借书数目加一p->book.book_con--;//同样的书的个数减一}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;case 1:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_num==s){del_sql_book(p);//从数据库中删除int i=q->stu.lendbook.count;if(i>=3||q->stu.debt>0){if((i>=3)&&(q->stu.debt==0)){cout<<YELLOW"对不起,您借书已超过3本,不能再借!"NONE<<endl;}if((i<3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您因为所借图书超期已欠费,请速交清欠费再借!"NONE<<endl;}if((i>=3)&&(q->stu.debt>0)){cout<<YELLOW"对不起,您借书已超过3本且有欠费,不能再借!"NONE<<endl;}}else{q->stu.lendbook.bookname[i]=p->book.book_name;time_t now;time(&now);q->stu.lendbook.lend_time=time(&now);q->stu.lendbook.count++;p->book.book_con--;//同样的书的个数减一}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}savestu(q);savebook(p);}void StuManage::backbook(string ss,string s,int flag)//还书{BookNode *p; StuNode *q;for(q=headstu;q!=NULL;q=q->next){if(q->stu.stu_num==ss){del_sql_stu(q);break;}//丛数据库中删除}if(q==NULL){cout<<YELLOW"此用户不存在!"NONE<<endl;return;}switch(flag){case 0:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_name==s){del_sql_book(p);//从数据库中删除time_t now;time(&now);q->stu.lendbook.back_time=time(&now);q->stu.lendbook.count--;p->book.book_con++;//同样的书的个数加一time_ts=difftime(q->stu.lendbook.lend_time,q->stu.lendbook.back_time);if(s>2592000)//2592000为一个月的秒数{int t=ceil((s-2592000)/86400);q->stu.debt=t*0.1;}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;case 1:for(p=headbook;p!=NULL;p=p->next){if(p->book.book_num==s){del_sql_book(p);//从数据库删除time_t now;time(&now);q->stu.lendbook.back_time=time(&now);q->stu.lendbook.count--;p->book.book_con++;//同样的书的个数加一//计算借用图书的时间,超过一个月,开始计费time_ts=difftime(q->stu.lendbook.lend_time,q->stu.lendbook.back_time);if(s>2592000)//2592000为一个月的秒数{int t=ceil((s-2592000)/86400);q->stu.debt=t*0.1;}break;}}if(p==NULL)cout<<YELLOW"此书不存在!"NONE<<endl;break;default:cout<<YELLOW"输入数字无效!"NONE<<endl;break;}savestu(q);savebook(p);}void StuManage::paydebt(string s){StuNode *p;for(p=headstu;p!=NULL;p=p->next)//查找用户{if(p->stu.stu_num==s){p->stu.debt=0;cout<<RED"缴费成功!"NONE<<endl;break;}}if(p==NULL)cout<<YELLOW"该用户不存在!"NONE<<endl;}/****************************************(3)数据保存与下载*******************************************/char stu_str[50];char *change_char(string result){stringstream stream;stream << result; //将string输入流stream >> stu_str; //从i中抽取前面插入的string值return stu_str;}void savestu(StuNode *p)//保存读者信息到数据库{memset((void*)strSQL,0,200);sprintf(strSQL,"insert into reader values(%s,%s,%s,%s,%f,%ld,%ld,%d)",change_char(p->stu.stu_name),change_char( p->stu.stu_phone),change_char(p->stu.password),change_char(p->stu.stu_num),p->stu.debt,(long)(p->stu.lendbook.lend_time),(long)(p->stu.lendbook.back_time),p ->stu.lendbook.count);if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录插入失败!\n");}void savebook(BookNode *p)//保存图书信息到数据库{memset((void*)strSQL,0,200);sprintf(strSQL,"insert into book values(%s,%s,%s,%s,%d,%d)",change_char(p->book.book_name),change_char(p-> book.book_aut),change_char(p->book.book_pre),change_char(p->book.book_nu m),p->book.book_mux,p->book.book_con);if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录插入失败!\n");}void del_sql_stu(StuNode *p)//将读者信息从数据库中删除{memset((void*)strSQL,0,200);sprintf(strSQL,"delete from reader where stu_name='%s'",change_char(p->stu.stu_name));if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录删除失败!\n");}void del_sql_book(BookNode *p)//将图书信息从数据库中删除{memset((void*)strSQL,0,200);sprintf(strSQL,"delete from book where book_name='%s'",change_char(p->book.book_name));if(mysql_real_query(&mysql,strSQL,strlen(strSQL)) != 0)printf("记录删除失败!\n");}/*void savestu()//保存读者信息文件{ofstream outfile("./stu.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;return;}StuNode *p;for(p=headstu;p!=NULL;p=p->next)//数据写入文件{outfile<<p->stu.stu_name<<" "<<p->stu.stu_phone;outfile<<" "<<p->stu.password<<" "<<p->stu.stu_num;outfile<<" "<<p->stu.debt;outfile<<" "<<p->stu.lendbook.lend_time;outfile<<" "<<p->stu.lendbook.back_time;outfile<<" "<<p->stu.lendbook.count;outfile<<" "<<endl;}outfile.close();}void savebook()//保存图书信息文件{ofstream outfile("./book.txt",ios::out);if(!outfile){cerr<<"open error!"<<endl;return;}BookNode *p;for(p=headbook;p!=NULL;p=p->next)//数据写入文件{outfile<<p->book.book_name<<" "<<p->book.book_num;outfile<<" "<<p->book.book_pre<<" "<<p->book.book_aut;outfile<<" "<<p->book.book_mux;outfile<<" "<<p->book.book_con;outfile<<" "<<endl;}outfile.close();}*/void loadstu()//从学生数据数据库reader中读取{int i = 0;memset((void*)strSQL,0,100);strcpy(strSQL,"select * from reader");mysql_query(&mysql,strSQL); //查询results = mysql_store_result(&mysql); //获取记录num_fields = mysql_num_fields(results); //获取字段数fileds = mysql_fetch_fields(results); //获取字段数组while((rows = mysql_fetch_row(results)) != NULL) //循环显示{while(i < num_fields){StuNode *p=new StuNode;p->stu.stu_name = (rows[i]?rows[i++]:"NULL");p->stu.stu_phone = (rows[i]?rows[i++]:"NULL");p->stu.password = (rows[i]?rows[i++]:"NULL");p->stu.stu_num = (rows[i]?rows[i++]:"NULL");p->stu.debt = atof(rows[i]?rows[i++]:"NULL");p->stu.lendbook.lend_time = (time_t)(rows[i]?rows[i++]:"NULL");p->stu.lendbook.back_time = (time_t)(rows[i]?rows[i++]:"NULL");p->stu.lendbook.count = atoi(rows[i]?rows[i++]:"NULL");p->next=headstu;//建立用户链表headstu=p;}i = 0;}}void loadbook()//从书数据库中读取{int i = 0;memset((void*)strSQL,0,100);strcpy(strSQL,"select * from book");mysql_query(&mysql,strSQL); //查询results = mysql_store_result(&mysql); //获取记录num_fields = mysql_num_fields(results); //获取字段数fileds = mysql_fetch_fields(results); //获取字段数组while((rows = mysql_fetch_row(results)) != NULL) //循环显示{while(i < num_fields){BookNode *p=new BookNode;p->book.book_name = (rows[i]?rows[i++]:"NULL");p->book.book_aut = (rows[i]?rows[i++]:"NULL");p->book.book_pre = (rows[i]?rows[i++]:"NULL");p->book.book_num = (rows[i]?rows[i++]:"NULL");p->book.book_mux = atoi(rows[i]?rows[i++]:"NULL");p->book.book_con = atoi(rows[i]?rows[i++]:"NULL");p->next=headbook;//建立用户链表headbook=p;}i = 0;}}/*void loadstu()//从学生数据文件读取{ifstream infile("./stu.txt",ios::in);if(!infile){cout<<YELLOW"数据文件不存在,请先建立该文件"NONE<<endl;return;}if(infile.eof()){cout<<YELLOW"数据库为空,请添加数据"NONE<<endl;infile.close();}else{while(infile.peek()!=EOF)//数据从文件读出{StuNode *p=new StuNode;infile>>p->stu.stu_name>>p->stu.stu_phone;infile>>p->stu.password>>p->stu.stu_num;infile>>p->stu.debt>>p->stu.lendbook.lend_time;infile>>p->stu.lendbook.back_time>>p->stu.lendbook.count;if(p->stu.stu_name!=""){p->next=headstu;//建立用户链表headstu=p;}elsedelete p;}infile.close();}}void loadbook()//从书数据文件读取{ifstream infile("./book.txt",ios::in);if(!infile){cout<<YELLOW"数据文件不存在,请先建立该文件"NONE<<endl;return;}if(infile.eof()){cout<<YELLOW"数据库为空,请添加数据"NONE<<endl;infile.close();}else{while(infile.peek()!=EOF)//数据从文件读出{BookNode *p=new BookNode;infile>>p->book.book_name>>p->book.book_num;infile>>p->book.book_pre>>p->book.book_aut;infile>>p->book.book_mux>>p->book.book_con;if(p->book.book_name!=""){p->next=headbook;//建立图书链表headbook=p;}elsedelete p;}infile.close();}}*//****************************************(4)界面部分*******************************************/void MenuAdmin(){cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎来到图书管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 1 增加新书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 2 删除书目$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 3 借书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 4 还书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 5 查询图书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 6 增加读者$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 7 删除读者$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 8 查询用户$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 9 用户交费$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 10 查询用户总数与图书总数$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 0 退出$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>[请选择(输入相应数字)]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;}void MenuStu(){cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>>>欢迎来到图书管理系统<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 1 借书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 2 还书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 3 查询图书$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 4 个人信息$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN"$ 0 退出$"NONE<<endl;cout<<GREEN"$$"NONE<<endl;cout<<GREEN">>>>>>>>>>>>>>>>>>>>>>>>>>[请选择(输入相应数字)]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<"NONE<<endl;}int getch()//密码不回显函数1{int c=0;struct termios org_opts, new_opts;int res=0;//----- store old settings -----------。