图书管理系统

  • 一、需求文档
    • 【项目前提】
    • 【项目说明】
    • 【项目内容】
      • 【项目功能】
  • 二、数据库表的定义与创建
  • 三、IDEA
    • 接口定义
    • 实体类
    • 工具类
      • 配置文件
      • JDBCUtils

一、需求文档

【项目前提】

  • 掌握java基本语法
  • 熟悉使用流程控制
  • 理解面向对象思想
  • 熟练封装,继承,多态
  • 熟悉使用接口,异常
  • 熟悉使用集合
  • 熟悉掌握I/o流相关操作
  • 熟悉数据库操作
  • 了解三层架构和常用设计模式
  • 熟悉使用Git工具

【项目说明】

  • 长期以来,人们使用传统的人工方式管理图书馆的日常业务,其操作流程比较烦琐。在借书时,读者首先将要借的书和借阅证交给工作人员,然后工作人员将每本书的信息卡片和读者的借阅证放在一个小格栏里,最后在借阅证和每本书贴的借阅条上填写借阅信息。在还书时,读者首先将要还的书交给工作人员,工作人员根据图书信息找到相应的书卡和借阅证,并填好相应的还书信息。太过于繁琐了!所以,我们需求设计一个图书管理系统来方便学生的借书和图书馆管理书籍。
  • 本系统在项目2基础上进行重构操作,调整了基本流程,增加了管理员和操作员不同角色的操作图书馆的功能。
  • 本系统首先需要进行登录或者注册,根据不同身份操作不同的功能。
  • 管理员主要负责对操作员的基本信息管理和相关逾期金额的设定和查看。
  • 操作员主要负责对读者的信息进行管理和相关图书进行管理。
  • 本项目还会利于数据库进行数据的读取和存储。

【项目内容】

项目功能流程结构图:

【项目功能】

(1)登录模块: 包括登录功能(根据两种身份(管理员或者操作员)进行登录),如果没有用户信息,则需要进入注册功能进行注册。(登录用户信息的读取和存储都应连通数据库表操作)还需要提供忘记密码,查看登录日志记录(日志可通过I/O流放在相对应的文件里),修改密码等基本功能。
(2)管理员模块: 管理员主要包含四大基本功能:员工工作日志记录(记录了每个操作员的登录时间和各种操作信息,日志可通过I/O流放在相对应的文件里),图书借阅金额设定,对操作员信息进行管理(增删改查),图书逾期罚金总账单查询(该账单记录了所有预期的图书的逾期金额明细和最后图书馆所有书的逾期总金额数)。
(3)操作员模块
(1)读者信息管理:包括读者信息添加和读者信息查询与修改功能。用户登录成功之后,可以浏览所有读者的信息,也可以检索特定读者的信息;同时,可以对读者信息进行维护,包括增加、删除及修改。具体信息包括读者类型(读者的类型决定着他可以借到书的最大数量和最大归还天数)、读者姓名、出生日期、性别、电话、所在院系、注册日期等。(相关存储数据,通过数据库存储,JDBC进行操作)
(2)图书信息管理:包括图书信息添加和图书信息查询与修改功能。用户登录成功之后,可以浏览所有图书信息和检索特定图书的信息;也可以对图书信息进行维护。包括添加图书、删除图书以及修改图书信息。具体信息包括:图书ISBN、图书名称、作者、出版社、出版日期、印刷次数、单价、图书类别等。(相关存储数据,通过数据库存储,JDBC进行操作)
(3)图书借阅管理:包括图书借阅和图书归还功能。图书借阅功能,先输入读者的编号,然后输入要借阅的图书的信息,记录系统当前时间即借阅时间;图书归还功能,输入读者的编号,选择其名下已借阅的图书,判断当前日期即归还日期与借阅日期的差值是否超过了规定的期限,计算罚金,从而进行图书的归还操作。具体信息包括:借阅日期、归还日期、罚金。由于要计算罚金,故需要知道该读者的读者类型,根据类型判断其可借图书天数、可借图书数量等。(相关存储数据,通过数据库存储,JDBC进行操作)
(4)基础信息维护:包括图书类别设置、读者类别设置及罚金设置。图书类别设置,可以对图书的类别进行增加、删除、修改和查询;读者类别设置可以对读者的类别进行增加、删除、修改和查询;罚金设置,可以指定超期一天的罚金标准。(相关存储数据,通过数据库存储,JDBC进行操作)

二、数据库表的定义与创建



三、IDEA

接口定义

接口:Admin_Operator_PasswordInter

  • 方法:
    Add(String name,String password,long phone);

    UpdatePassword(String name,String oldpassword,String newpassword) throws Exception;

    ForgetPassword(String name,long phone,String newpassword);

接口: Booklnter

  • 方法:
    Add(String isbn,String bookname,String author,String press,Date pressdate,int amount,float price,String typename);

    Delete(String isbn);

    Update(String isbn,String bookname,String author,String press,Date pressdate,int amount,float price,String typename);

    Query(String s);

接口:BooktypeInter

  • 方法:
    Add(String typename);

    Delete(int id);

    Update(int id,String newtypename);

    Query(int id);

接口:BorrowbookInter

  • 方法:
    selectBorrowBook();

    BorrowBook(int readerid, String isbn,Date date);

    ReturnBook(int readerid, String isbn,Date date);

接口:OperatorInter

  • 方法:
    add(String oname,String opassword,long ophone);

    delete(String oname);

    Uptate(String oname,String opassword,long ophone);

    Query(String oname);

    Query();

接口:ReaderInter

  • 方法:
    Add(String readername,Date birthday,String sex,long phone,String faculty,Date regdate,String typename);

    Delete(int readerid);

    Update(int readerid,String readername,Date birthday,String sex,long phone,String faculty,Date regdate,String typename);

    Query(int readerid);

    Query(String readername);

接口:ReadertypeInter

  • 方法:
    Add(String typename,int days,float fine);

    Delete(int id);

    Update(int id,String typename,int days,float fine);

    Query(int id);

实体类

  • 根据数据库建立各种对应数据表的实体类

工具类

配置文件

  • 加载驱动并链接本地数据库

JDBCUtils

import java.io.InputStream;
import java.lang.reflect.Field;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;public class JDBCUtils{public static Connection getConnection() throws Exception {//读取配置文件中的4个基本信息InputStream is1 = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.propertices");// FileInputStream fis=new FileInputStream("src//jdbc.propertices");Properties pro=new Properties();pro.load(is1);String user = pro.getProperty("user");String url = pro.getProperty("url");String password = pro.getProperty("password");String driver = pro.getProperty("driver");//加载驱动Class.forName(driver);//获取连接Connection conn = DriverManager.getConnection(url, user, password);return conn;}public static void closeResource(Connection conn, Statement s){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}try {s.close();} catch (SQLException throwables) {throwables.printStackTrace();}}public static void closeResource(Connection conn, Statement s, ResultSet rs){try {conn.close();} catch (SQLException throwables) {throwables.printStackTrace();}try {s.close();} catch (SQLException throwables) {throwables.printStackTrace();}try {rs.close();} catch (SQLException throwables) {throwables.printStackTrace();}}//通用增删改操作public static void update(String sql, Object... args) {Connection conn = null;PreparedStatement ps = null;try {InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.propertices");Properties p = new Properties();p.load(is);//获取连接conn = JDBCUtils.getConnection();//预编译sql语句,返回Preparedstatement的实例ps = conn.prepareStatement(sql);//填充占位符for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}//执行ps.execute();} catch (Exception e) {e.printStackTrace();} finally {//关闭资源JDBCUtils.closeResource(conn, ps);}}//对任意一个表进行任意行数的数据查询public static <T> List<T> query(Class<T> clazz, String sql, Object...args){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = JDBCUtils.getConnection();ps = conn.prepareStatement(sql);for (int i = 0; i < args.length; i++) {ps.setObject(i + 1, args[i]);}rs = ps.executeQuery();//获取结果集ResultSetMetaData rsmd = rs.getMetaData();//获取结果集的元数据int columnCount = rsmd.getColumnCount();//通过ResultSetMetaData获取结果集中的列数ArrayList<T> list = new ArrayList<>();while (rs.next()) {//rs有值返回trueT t = clazz.newInstance();//处理一行数据中的每一个列for (int i = 0; i < columnCount; i++) {Object value = rs.getObject(i + 1);//获取每一个列具体值// String columnName = rsmd.getColumnName(i + 1);//获取每个列的列名。(不推荐使用)String columnLabel = rsmd.getColumnLabel(i + 1);//获取每个列的别名,没起别名默认取到列名//给book对象指定的columnName属性,赋值为columnValue:通过反射Field field = clazz.getDeclaredField(columnLabel);field.setAccessible(true);field.set(t, value);}list.add(t);}return list;} catch (Exception e) {e.printStackTrace();} finally {JDBCUtils.closeResource(conn, ps, rs);}return null;}
}

图书管理系统(IDEA与数据库交互版)相关推荐

  1. java计算机毕业设计vue图书管理系统源码+数据库+系统+lw文档

    java计算机毕业设计vue图书管理系统源码+数据库+系统+lw文档 java计算机毕业设计vue图书管理系统源码+数据库+系统+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 ...

  2. 图书管理系统python pycharm 数据库

    目   录 目   录 第1章 引言 1 1.1课题的研究背景 1 1.2研究意义 1 第2章 系统分析 3 2.1可行性分析 3 2.2分析需求 3 2.3功能需求 3 2.4系统性能需求 4 第3 ...

  3. 基于SSM实现的图书管理系统-JAVA【数据库设计、源码、开题报告】

    1绪论 1.1项目研究的背景 随着计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现图书信息的管理势在必行.目前图书管理的借阅工作部分大多数还是手工管理,工作效率很低,并且不能及时了解 ...

  4. 图书管理系统-GUI Mysql 数据库课程设计-更新版

    图书管理系统GUI 更新说明 之前的GUI经别人反馈,借书记录存在bug,其次缺少注销按钮,缺失还书功能. 因时间原因,除还书功能,大部分bug都已修复,注销按钮也增加了. 前言 环境:jdk1.8, ...

  5. php+mysql实现简单的图书管理系统(简单的数据库操作)

    php+mysql实现简单的图书管理系统 ps:前端页面设计得有点丑,将就着用,哈哈哈.不具备用户和管理员功能,如要实现只需将首页的功能根据数据库中账号信息选择性使用就可以了.数据库关系设计什么的完全 ...

  6. java swing 管理系统源码 网盘_java swing 图书管理系统(含数据库脚本)

    大小: 3.09M 文件类型: .zip 金币: 1 下载: 0 次 发布日期: 2020-12-27 资源简介 1.执行数据库脚本文件 生成数据库 2. 修改  ibraryManager\src\ ...

  7. JavaWeb 图书管理系统(数据库综合实验)

    <数据库系统综合实验>设计报告 分工我负责了图书管理系统中整个数据库的设计与实现,编写与整理了数据库相关方面的文档.梳理了概念设计,对于实体,实体对应的属性,各实体间的关联,E-R(实体联 ...

  8. 一个简单图书管理系统TSGL的应用数据库

    简单图书管理系统的应用数据库 一.摘要 这个项目是学校结课要求的项目,所以采用的是SQL sever2008来完成的,并不是mysql来完成的,SQL sever2008与mysql就基础知识没有什么 ...

  9. 图书管理系统——C语言版

    图书管理系统: 只是一个简易版的.只是完成一些简单的增删改查的功能. 设计要求 把图书表抽象成一个线性表,每本图书(包括ISBN.书名.定价)作为线性表中的一个元素.在图书信息管理信息系统中要求实现查 ...

最新文章

  1. excel随机抽取_Excel条件格式,扮靓你的报表
  2. hdu-2544(简单djikstra)
  3. java 修改win7系统时间_win7如何禁止更改系统时间
  4. 理解数据库设计范式【转】
  5. ArcGIS中属性域的使用
  6. 清华姚班毕业生开发新特效编程语言,99行代码实现《冰雪奇缘》,网友:大神碉堡!创世的快乐...
  7. WPS插件开发流程(1)
  8. 大数据第一季--Hadoop(day7)-徐培成-专题视频课程
  9. 14.Veeam BR14 配置信息备份与恢复
  10. cpu超线程优缺点_CPU有无超线程重要吗?i7 10700K与9700K对比测试
  11. Android基站定位详解
  12. 开源数据分析平台Countly
  13. 时区提示:Local time zone must be set--see zic manual page 2018的解决办法
  14. 什么是CDN?什么又是高防CDN?
  15. 震撼!自动化|从收货、入库、出库、分拣、输送……
  16. 怎么让python播放音频_用Python播放音频
  17. java计时器脚本_在倒数计时器脚本中跳过很多秒
  18. java hid 协议,USB HID协议问题
  19. 《VSTO开发入门教程》配套资源下载
  20. 恶魔奶爸语法1-3课

热门文章

  1. mysql查询商品销售额_MySql查询:获取销售额 =特定百分比的商品
  2. 【二分--分堆】-LeetCode-2226. 每个小孩最多能分到多少糖果
  3. java schtasks 不生效,自动化测试之Windows计划定时任务命令schtasks及语法
  4. python 使用scipy中的curve_fit拟合自定义曲线
  5. 【2022年马上开课了】手撕永磁同步电机FOC矢量控制培训讲座
  6. java+ssm基于微信小程序的食堂线上订餐点菜系统 uniapp 小程序
  7. Java中易混知识点
  8. C++11多线程 内存屏障(fence/atomic_thread_fence)
  9. RTD1296PB在NAS市场中的优势及应用实例
  10. 【Ogre编程入门与进阶】第八章 地形、天空与雾化效果