一.功能简介
图书管理系统主要分为三个客户端登陆,分别是借书还书的读者、图书的管理员,每个客户端的功能是不同的。在此之外,还提供一个超级用户admin,这个用户不仅可以对读者信息操作,还可以对图书管理者的信息进行管理。这三个客户端的登陆拥有自己的功能实现。下面三个图分别是三个客户端的功能模块图。
二.数据库设计
系统全局E-R图:
各个数据表的表结构设计:
表 数据库表清单
数据库表名 | 关系模式名称 | 备注 |
books | 图书 | 图书表 |
type | 图书类型 | 图书类型表 |
readers | 读者 | 读者表 |
manager | 管理者 | 管理者表 |
borrowed | 借阅 | 借阅表 |
mange_book | 图书管理 | 图书管理表 |
login | 登陆 | 登陆表 |
fine | 罚款 | 罚款表 |
表 登陆表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
user_name | varchar | 15 | 是 | 否 | 登陆ID |
user_password | varchar | 15 | 否 | 否 | 登陆密码 |
user_type | varchar | 15 | 否 | 否 | 登陆类型 |
表 读者表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
reader_ID | varchar | 15 | 是 | 否 | 读者编号 |
reader_name | varchar | 30 | 否 | 否 | 读者姓名 |
reader_sex | varchar | 2 | 否 | 否 | 读者性别 |
reader_phone | number | 11 | 否 | 否 | 读者联系电话 |
reader_getDate | date | 否 | 否 | 读者登记时间 | |
reader_email | varchar | 30 | 否 | 否 | 读者邮箱 |
表 管理员表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
manager_ID | varchar | 15 | 是 | 否 | 工作编号 |
manager_name | varchar | 30 | 否 | 否 | 管理员姓名 |
manager_sex | varchar | 2 | 否 | 否 | 管理员性别 |
manager_phone | varchar | 11 | 否 | 否 | 管理员联系电话 |
manager_address | varchar | 50 | 否 | 否 | 管理员住址 |
manager_salary | decimal | 6,2 | 否 | 否 | 管理员工资 |
表 借阅表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
reader_ID | varchar | 15 | 是 | 否 | 读者编号 |
book_ID | varchar | 15 | 是 | 否 | 图书编号 |
manager_ID | varchar | 15 | 是 | 否 | 工作编号 |
is_Borrowed | boolean | 否 | 否 | 是否续借 | |
borrow_getDate | date | 否 | 否 | 借书日期 | |
borrow_retDate | date | 否 | 否 | 还书日期 |
表 图书表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
ISBN | varchar | 15 | 是 | 否 | 图书编号 |
book_name | varchar | 30 | 否 | 否 | 图书姓名 |
book_type | varchar | 15 | 否 | 否 | 图书类型 |
book_author | varchar | 15 | 否 | 否 | 作者 |
book_company | varchar | 30 | 否 | 否 | 出版社 |
book_date | date | 30 | 否 | 否 | 出版时间 |
book_number | Int | 否 | 否 | 数量 | |
book_intro | varchar | 100 | 否 | 否 | 简介 |
表 管理图书表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
ISBN | varchar | 15 | 是 | 否 | 图书编号 |
manager_ID | varchar | 15 | 是 | 否 | 工作编号 |
add_time | date | 否 | 否 | 添加时间 | |
is_exit | boolean | 否 | 否 | 是否在馆 |
表处罚表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
reader_ID | varchar | 15 | 是 | 否 | 读者编号 |
book_ID | varchar | 30 | 是 | 否 | 图书编号 |
last_time | date | 否 | 否 | 逾期时间 | |
money | number | 6,2 | 否 | 否 | 罚款金额 |
表 图书类型表
字段名称 | 数据类型 | 字段大小 | 是否主键 | 是否为空 | 说明 |
type_ID | varchar | 15 | 是 | 否 | 类型编号 |
type_name | varchar | 30 | 否 | 否 | 类型名称 |
type_intro | varchar | 100 | 否 | 否 | 类型描述 |
三.界面设计
1、系统登陆界面
- 读者界面
3、图书查询
4、图书借阅
5、归还图书
6、个人信息管理
7、修改密码
8、逾期罚款
四.程序设计
/**
* 图书添加
*/
public static int add(Connection con,books book)throws Exception{
String sql="insert into books values(?,?,?,?,?,?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, book.getIBSN());
pstmt.setString(2, book.getBookName());
pstmt.setString(3, book.getBookType());
pstmt.setString(4, book.getAuthor());
pstmt.setString(5, book.getBookCompany());
//转换日期格式
java.text.SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
java.util.Date ud = df.parse(book.getBookDate());
java.sql.Date sd=new java.sql.Date(ud.getTime());
pstmt.setDate(6, sd);
pstmt.setInt(7, Integer.valueOf(book.getBookNum()));
pstmt.setString(8, book.getBookIntro());
return pstmt.executeUpdate();
}
/**
* 图书修改
*/
public static int updatebook(Connection con,books book)throws Exception{
String sql="update books set book_name = ?, book_type = ?, book_author = ?, book_company = ?,"
+ " book_date = ?, book_number = ?, book_intro = ? where isbn="+book.getIBSN();
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, book.getBookName());
pstmt.setString(2, book.getBookType());
pstmt.setString(3, book.getAuthor());
pstmt.setString(4, book.getBookCompany());
//转换日期格式
java.text.SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
java.util.Date ud = df.parse(book.getBookDate());
java.sql.Date sd=new java.sql.Date(ud.getTime());
pstmt.setDate(5, sd);
pstmt.setInt(6, Integer.valueOf(book.getBookNum()));
pstmt.setString(7, book.getBookIntro());
return pstmt.executeUpdate();
}
/**
* 图书删除
*/
public static int deletebook(Connection con,String ID)throws Exception{
System.out.println(ID);
String sql = "delete books where isbn ="+ID+" ";
PreparedStatement pstmt=con.prepareStatement(sql);
return pstmt.executeUpdate();
}
/**
* 图书信息查询
*/
public static ResultSet list(Connection con,books book)throws Exception{
StringBuffer sql=new StringBuffer("select * from v_book where v_book.isbn = v_book.isbn");
if(StringUtil.isNotEmpty(book.getBookName())){ //书名模糊查找
sql.append(" and 书名 like '%"+book.getBookName()+"%'");
}
if(StringUtil.isNotEmpty(book.getIBSN())){ //IBSN
sql.append(" and v_book.isbn = "+book.getIBSN());
}
if(StringUtil.isNotEmpty(book.getAuthor())){ //作者模糊查找
sql.append(" and 作者 like '%"+book.getAuthor()+"%'");
}
if(StringUtil.isNotEmpty(book.getBookType())){ //图书类型查找
sql.append(" and 图书类型 like '%"+book.getBookType()+"%'");
}
PreparedStatement pstmt=con.prepareStatement(sql.toString());
return pstmt.executeQuery();
}
/**
* 图书类型添加
*/
public static int addtype(Connection con,bookType booktype)throws Exception{
String sql="insert into book_type values(?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1, booktype.getTypeID());
pstmt.setString(2, booktype.getTypeName());
pstmt.setString(3, booktype.getTypeDesc());
return pstmt.executeUpdate();
}
测试与说明
测试添加图书类别:
在页面输入图书类别名称输入11,图书类别描述也输入11,然后点击添加,然后弹出添加成功