数据库课程设计:图书借阅管理系统(控制台交互)

该博客介绍了如何使用Java和MySQL实现一个简单的图书借阅管理系统。系统包含学生和管理员两种账户,支持登录、借书、还书、检索图书、查看借阅信息等功能。管理员可进行学生和书籍信息的维护,包括增删改查操作。博客中提供了数据库连接工具类、时间获取工具类以及CRUD方法封装类的部分代码示例。
摘要由CSDN通过智能技术生成

问题描述

实现简易版图书借阅管理系统,学生(读者)在系统里可以检索图书,借阅图书,归还图书,修改密码,查看个人借阅信息等功能;

管理员有书籍信息,学生(读者)信息,借阅信息维护等功能

在这里插入图片描述

需求分析

  1. 系统分为管理员账户,学生(读者)账户
  2. 管理员账户可以进行书籍,学生(读者)信息的维护(CRUD)
  3. 学生(读者)账户可以借书,还书,检索图书,个人借阅信息浏览

要点

开发语言:Java (jdk版本12+)

数据库:MySQL (版本8.0+)

工具:JDBC

交互场景:控制台

软件:IDEA(推荐),Navicat

项目构建:maven

数据库设计

实体关系:

image-20220609212959987

数据库表设计:

注意:所有表的主键记得勾上自增

管理员表:

image-20220609213126684

书籍表:

image-20220609213301006

学生表:

image-20220609213230589

借书表:

image-20220609213328973

程序运行效果

学生(读者):


-----------------
   图书管理系统     
   1.学生登录       
   2.管理员登录     
-------------------
请输入身份:1
请输入账号:666
请输入密码:666

登录成功!
---------------
1.借书
2.还书
3.检索
4.退出
---------------
请选择:
1
检索方式:1.书名  2.ISBN码
请选择:
2
请输入图书ISBN:3232
查找结果如下:
id  isbn  书名  作者  出版社  馆藏数量
2  3232  数据库设计  小A  上海出版社  6
-------1.借阅  2.重新输入查询  3.返回------
请选择:1
--借书登记--
借阅成功!
---------------
1.借书
2.还书
3.检索
4.退出
---------------
请选择:
2
----我要还书----
当前借阅记录:
id  isbn  书名  作者  出版社
2  3232  数据库设计  小A  上海出版社
-------1.还书   2.返回------
请选择:2
---------------
1.借书
2.还书
3.检索
4.退出
---------------
请选择:
3
检索方式:1.书名  2.ISBN码
请选择:
1
请输入书名:西游记
--------------------
查找结果如下:
id  isbn  书名  作者  出版社  馆藏数量
1  2132131  西游记  吴承恩  清华  7
-------1.重新输入查询  2.返回------
2
---------------
1.借书
2.还书
3.检索
4.退出
---------------
请选择:

管理员操作:

-----------------
   图书管理系统     
   1.学生登录       
   2.管理员登录     
-------------------
请输入身份:2
请输入账号:admin
请输入密码:admin

登录成功!
--------------
1.学生管理
2.书籍管理
3.图书借阅一览
4.退出
--------------
请选择:
3
学生账号  学生姓名  书ISBN  书名  借出时间  应还时间  
3  3  2132131  西游记  2022-06-08 09:41:43  2022-07-08 09:41:43
666  程序员小李  3232  数据库设计  2022-06-09 09:56:22  2022-07-09 09:56:22
---------------
--------------
1.学生管理
2.书籍管理
3.图书借阅一览
4.退出
--------------
请选择:
3
学生账号  学生姓名  书ISBN  书名  借出时间  应还时间  
3  3  2132131  西游记  2022-06-08 09:41:43  2022-07-08 09:41:43
666  程序员小李  3232  数据库设计  2022-06-09 09:56:22  2022-07-09 09:56:22
---------------
--------------
1.学生管理
2.书籍管理
3.图书借阅一览
4.退出
--------------
请选择:
1
---------------
1.所有学生信息
2.查询学生信息
3.修改学生信息
4.删除学生信息
5.添加学生信息
6.返回
----------------
请选择:
2
请输入学生账号:
666
查询结果如下:
---------------
id 账号  姓名
8 666  程序员小李
---------------
1.所有学生信息
2.查询学生信息
3.修改学生信息
4.删除学生信息
5.添加学生信息
6.返回
----------------
请选择:
1
所有学生信息如下:
id 账号  姓名
1 123456  小红
2 222  小王
4 1  1
6 3  3
7 5  5
8 666  程序员小李
---------------
1.所有学生信息
2.查询学生信息
3.修改学生信息
4.删除学生信息
5.添加学生信息
6.返回
----------------
请选择:
6
--------------
1.学生管理
2.书籍管理
3.图书借阅一览
4.退出
--------------
请选择:
2
----------------
1.所有图书信息
2.添加图书信息
3.删除图书信息
4.修改图书信息
5.返回
----------------
请选择:
1
id  isbn  书名  作者  出版社  馆藏数量
1  2132131  西游记  吴承恩  清华  7
2  3232  数据库设计  小A  上海出版社  5
3  43423423  Java进价  小张  深圳出版社  50
6  5  5  5  8  6
------------
----------------
1.所有图书信息
2.添加图书信息
3.删除图书信息
4.修改图书信息
5.返回
----------------
请选择:
5
--------------
1.学生管理
2.书籍管理
3.图书借阅一览
4.退出
--------------

部分程序

数据库连接工具类

package com.tushu.utils;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ConnDB {
   // 获取连接通道
   // Connection 
   public static Connection getConnection() {
      Connection conn = null;
      // 1.加载驱动类
      try {
         // Mysql驱动
         Class.forName("com.mysql.cj.jdbc.Driver");
         // 获取连接通道
         String url ="jdbc:mysql://localhost:3306/bm?useSSL=false&serverTimezone=Asia/Shanghai";
         String user = "root";
         String password = "xxxxx";
         conn = DriverManager.getConnection(url,user,password);
      } catch (ClassNotFoundException  e) {
         // 1.类名错误 2.外部jar没有引用
         e.printStackTrace();
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
      return conn;
   }
   // 关闭资源
   public  static void closeDB(ResultSet rs,Statement pst,Connection conn) {
      try {
         if(rs!=null) {
            rs.close();
         }
         if(pst!=null) {
            pst.close();
         }
         if(conn!=null) {
            conn.close();
         }
      } catch (SQLException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
   }
   public static void main(String[] args) {
      System.out.println(ConnDB.getConnection());
   }
}

时间获取工具类

package com.tushu.utils;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class TimeTools {
   public static String  getTime() {
      Date date = new Date();
      SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
      return dateFormat.format(date);
   }
   
   //获取当前时间往后一个月的时间
   public static String  getTime2() {
      Date date = new Date();
      Calendar calendar = Calendar.getInstance();
      calendar.setTime(date);
      calendar.add(Calendar.MONTH, +1);
      SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
      return dateFormat.format(calendar.getTime());
   }
}

CRUD方法封装类

package com.tushu.dao;
import com.tushu.utils.ConnDB;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public abstract class BaseDAO {
   // 共通的增删改方法
      public int update(String sql,Object[] arr) {
         Connection conn = ConnDB.getConnection();
         PreparedStatement pst = null;
         try {
            pst = conn.prepareStatement(sql);
            //对占位符赋值
            for (int i = 0; i < arr.length; i++) {
               pst.setObject(i+1, arr[i]);
            }
            int row = pst.executeUpdate();
            return row;
         } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }finally {
            ConnDB.closeDB(null, pst, conn);
         }
         return 0;
      }
      // 共通查询
      public <T>T select(String sql,Object[] arr){
         Connection conn = ConnDB.getConnection();
         PreparedStatement pst = null;
         ResultSet rs = null;
         T t = null;
         try {
            pst= conn.prepareStatement(sql);
            for (int i = 0; i < arr.length; i++) {
               pst.setObject(i+1, arr[i]);
            }
            rs = pst.executeQuery();
            // 对结果集的收集
            if(rs.next()) {
               // 收集对象的属性
               t = this.rowMapper(rs);
            }
         } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }finally {
            ConnDB.closeDB(null, pst, conn);
         }
         return t;
      }
      // 查询结果集合
      public <T> List<T> selectAll(String sql,Object[] arr){
         List<T> list = new ArrayList<>();
         Connection conn = ConnDB.getConnection();
         PreparedStatement pst = null;
         ResultSet rs = null;
         
         try {
            pst= conn.prepareStatement(sql);
            for (int i = 0; i < arr.length; i++) {
               pst.setObject(i+1, arr[i]);
            }
            rs = pst.executeQuery();
            T t = null;
            // 对结果集的收集
            while(rs.next()) {
               // 收集对象的属性
               t = this.rowMapper(rs);
               // 添加到集合
               list.add(t);
            }
         } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
         }finally {
            ConnDB.closeDB(null, pst, conn);
         }
         return list;
      }
      // 定义方法  每个查询的结果集获取对应的属性
      public  abstract <T> T rowMapper(ResultSet rs) throws SQLException;
}

篇幅有限,就不在这里展示全部代码了。


源码获取

👉更多项目合集,点我~查看😀

  • 16
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
该代码文件用于本科生计算机科学与技术专业数据库课程设计,图书借阅管理子系统,数据库用户名sa,密码gsw,数据库名名称BookManageSystem,这些都可以在DButil.java文件中修改。功能有学生账号注册登录借书还书,罚款计算,同时设有管理员,账号固定在login.Java代码中为administrator,密码password,可自行在代码中修改,管理员可查询图书情况,学生账户情况,修改图书信息等等功能,内容十分简单,十分适合大二大三本科生参考 设计本系统模拟学生在图书馆借阅图书的管理内容,包括查询图书、借书、借阅后的查询、统计、超期罚款等的处理情况,简化的系统需要管理的情况如下: 1、可随时查询出可借阅图书的详细情况,如图书编号(BNO)、图书名称(BNA)、出版日期(BDA)、图书出版社(BPU)、图书存放位置(BPL)、图书总数量(BNU)等,这样便于学生选借。 2、学生查询图书情况后即可借阅所需图书,可借阅多种图书,每种图书一般只借一本,若已有图书超期请交清罚金后,才能开始本次借阅; 3、为了唯一标识每一学生,图书室办借书证需如下信息:学生姓名(SNA)、学生系别(SDE)、学生所学专业(SSP)、借书上限数(SUP)及唯一的借书证号(SNO)。 4、每学生一次可借多本书,但不能超出该生允许借阅上限数,每个学生可多次借阅,允许重复借阅同一本书。规定借书期限为二个月,超期每天罚二分。 5、学生可以进行借阅、续借、归还和查询书籍。借阅时要登记相应的借书日期;归还时要记录还书日期;续借相当于归还书后重新借阅。 根据以上信息完成如下要求: 1、请认真作系统需求分析,设计出反映本系统的E-R图(需求分析、概念设计)。 2、写出已设计E-R图相应的关系模式,根据设计需要还可增加辅助关系模式,并找出各关系模式的关键字(逻辑设计)。 3、在已设计的关系模式基础上开发设计功能子系统,要求子系统能完成如下功能要求(物理设计、设施与试运行): 1)在某数据库管理系统中建立各关系模式对应的库表,并设计所需的视图、索引等。 2)能对各库表进行输入、修改、删除、添加、查询、打印等基本操作。 3)能根据学生要求借阅图书库中有的书,并完成一次借阅任务后汇总已借书本总数,报告还可借书量,已超期的需付清罚款金额后才可借书。 4)能明细查询某学生的借书情况及图书的借出情况。 5)能统计出某图书的总借出数量与库存量及某学生借书总数,当天为止总罚金。 6)其他你认为子系统应有的查询、统计功能。
2.2 主要功能说明: 一.欢迎界面:改界面主要是作为本系统的封面,程序运行后该界面会出 现在屏幕中间,操作者可以点击该界面即可计入下一个窗体。 二.入口:本系统中权限的设置主要是靠入口,选择不同的登录身份进入 系统后将会得到不一样的执行权限。若选择退出系统,则将会退出整个软件。 三. 读者登陆界面:该窗体主要是给一般读者登陆系统执行图书的查询和借阅功能的,当读者输入的编号和密码正确后即可进入系统,当用户输入用户名和密码出现错误后,系统会提示用户重新输入。当用户三次输入均出现错误时,系统会自动关闭。 四.管理员登陆界面:该窗体主要是提供给系统管理员进入系统进行操作的,其中用法和读者登陆界面一样,不同的是进入系统后具有的操作权限不同。管理员具有全部权限。 五.图书管理:(1)图书信息录入界面:此界面主要用于首次录入图书信 息,因此该界面应该具有输入图书所有信息的元素, 如图书编号,书名,书号,作者…. (2)图书信息修改界面:此界面主要是用于已经存在馆里的图书的信息的修改,因此该界面应该有查找和修改的功能,所以除了具有图书信息录入界面的元素外,还应该有上一条,下一条,查询等元素。 六.读者管理:(1)读者注册界面:此界面主要是用于录入新读者的信息, 因此此界面应该具有读者的所有信息,另外应该还具 有赋予读者一个进入系统的密码的元素。 (2)读者信息修改:此界面主要用于对已经注册过本系统 的读者的信息的修改,包括密码等等元素。 七.图书服务:(1)图书查询界面:此界面主要是用于查询,借阅,预 约图书,查询时可按图书的书名,作者,出版社来 查询,查询到的图书用表格显示,并且可以显示图书 的借阅情况。 (2)借书还书界面:该界面主要是用于读者的借书和还 书的情况,并且读者可以归还图书。 八.数据安全:(1)数据备份界面:该界面主要用于对本系统的重要数 据进行备份,以便不小心失去数据后可以恢复数据 提高系统的安全性。 (2)数据恢复界面:该界面是和数据备份界面配合使用的,当需要恢复已经备份的数据时,即可使用该窗体。 九.系统管理:(1)帮助和相关界面:该界面主要是向使用本系统的读者或者管理员提供相应的提示和帮助,同时显示一些关于本系统的相关信息。 (2)密码设置界面:该界面主要是用于管理员的注册和密码修改,注册界面可以注册新的管理员,密码修改界面可以对已经存在的管理员的信息的修改。 (3)退出本系统界面:该界面主要是用来安全退出整个软件,包括退出了vfp软件 (4)恢复vfp系统界面:该界面主要是用来退出当前运行的图书管理系统,恢复到vfp系统继续进行操作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员-小李

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值