数据库课程设计:图书借阅系统(Java+MySQL)

应粉丝要求,出个借阅系统swing版的,时间有些赶,可能还存在一些bug,不过不要紧,发现bug提给我,我逐个去修复与完善程序。

在这里插入图片描述

问题描述

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

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

需求分析

  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.登录验证:分读者与管理员两个身份,输入账号密码,校验通过即可进入系统,否则弹窗提示操作结果。

img

2.首页:读者进入系统后,首先看到的是首页,可在此处设置公告,书目推荐等信息。

img

3.检索:读者通过输入要查书本的ISBN或者书名即可查询

img

4.借还书籍:在表单输入要借图书的ISBN,点确认即可,会先确认该书是否还有库存,如果无,不能借阅成功,反之可以;表格显示的是当前登录用户的借阅信息,鼠标指针选中一行,点击右下角的还书,即可归还书籍。

img

5.个人信息:读者在此可以查看自己的个人信息,修改密码。

img

6.学生管理:管理员可以对学生(读者)信息进行多条件查询,新增,修改,删除。

img

\7. 书籍管理:管理员可以对书籍信息进行多条件查询,新增,修改,删除。

img

8.借阅一览:查看系统内部的借阅信息,可选中行删除记录。

img

9.数据汇总:重要指标数据汇总,如读者数量,书籍种类数量,库存总数等,可根据实际来调整。

img

部分程序

数据库连接工具类

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;
}

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


完整源码=》
https://gitee.com/yan-sheng-li/lend-system-win

本次分享到这!!!
下期见!!
拜拜!

  • 10
    点赞
  • 117
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
2.2 主要功能说明: 一.欢迎界面:改界面主要是作为本系统的封面,程序运行后该界面会出 现在屏幕中间,操作者可以点击该界面即可计入下一个窗体。 二.入口:本系统中权限的设置主要是靠入口,选择不同的登录身份进入 系统后将会得到不一样的执行权限。若选择退出系统,则将会退出整个软件。 三. 读者登陆界面:该窗体主要是给一般读者登陆系统执行图书的查询和借阅功能的,当读者输入的编号和密码正确后即可进入系统,当用户输入用户名和密码出现错误后,系统会提示用户重新输入。当用户三次输入均出现错误时,系统会自动关闭。 四.管理员登陆界面:该窗体主要是提供给系统管理员进入系统进行操作的,其中用法和读者登陆界面一样,不同的是进入系统后具有的操作权限不同。管理员具有全部权限。 五.图书管理:(1)图书信息录入界面:此界面主要用于首次录入图书信 息,因此该界面应该具有输入图书所有信息的元素, 如图书编号,名,号,作者…. (2)图书信息修改界面:此界面主要是用于已经存在馆里的图书的信息的修改,因此该界面应该有查找和修改的功能,所以除了具有图书信息录入界面的元素外,还应该有上一条,下一条,查询等元素。 六.读者管理:(1)读者注册界面:此界面主要是用于录入新读者的信息, 因此此界面应该具有读者的所有信息,另外应该还具 有赋予读者一个进入系统的密码的元素。 (2)读者信息修改:此界面主要用于对已经注册过本系统 的读者的信息的修改,包括密码等等元素。 七.图书服务:(1)图书查询界面:此界面主要是用于查询,借阅,预 约图书,查询时可按图书名,作者,出版社来 查询,查询到的图书用表格显示,并且可以显示图书借阅情况。 (2)借界面:该界面主要是用于读者的借和还 的情况,并且读者可以归还图书。 八.数据安全:(1)数据备份界面:该界面主要用于对本系统的重要数 据进行备份,以便不小心失去数据后可以恢复数据 提高系统的安全性。 (2)数据恢复界面:该界面是和数据备份界面配合使用的,当需要恢复已经备份的数据时,即可使用该窗体。 九.系统管理:(1)帮助和相关界面:该界面主要是向使用本系统的读者或者管理员提供相应的提示和帮助,同时显示一些关于本系统的相关信息。 (2)密码设置界面:该界面主要是用于管理员的注册和密码修改,注册界面可以注册新的管理员,密码修改界面可以对已经存在的管理员的信息的修改。 (3)退出本系统界面:该界面主要是用来安全退出整个软件,包括退出了vfp软件 (4)恢复vfp系统界面:该界面主要是用来退出当前运行的图书管理系统,恢复到vfp系统继续进行操作。
好的,针对您的数据库课程设计题目,我可以为您提供以下建议: 1.需求分析:明确图书信息管理系统的目的和功能,梳理出数据实体、属性和关系。例如,可以将图书、读者、借阅记录等作为数据实体,对应的属性包括名、作者、出版社、借阅者姓名、借阅日期等,借阅记录和图书、读者之间的关系可以采用外键来建立。 2.数据库设计:根据需求分析,设计出数据库的表结构、数据字典和数据关系图。例如,可以设计出图书表、读者表、借阅记录表,每个表包含相应的字段和关系。 3.数据库实现:使用MySQL数据库管理系统,创建数据库、表和字段,进行数据导入和数据备份。例如,可以使用CREATE DATABASE、CREATE TABLE、INSERT INTO等命令进行数据库的创建和数据导入。 4.数据库应用:基于数据库实现相应的应用程序,实现数据的增删改查等功能。例如,可以使用Java、Python等编程语言编写图书信息管理系统的应用程序,通过数据库实现相关的数据操作。 在实现过程中,需要注意以下几点: 1. 数据库的设计应尽可能符合范式要求,避免冗余和不一致性。 2. 数据库的安全性要求高,需要对用户进行身份认证和权限控制。 3. 数据库的性能要求高,需要合理地设计索引和优化查询语句。 希望以上建议能够对您的数据库课程设计有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员-小李

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

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

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

打赏作者

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

抵扣说明:

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

余额充值