找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3197|回复: 0
收起左侧

SQLServer数据库图书管理系统设计 基于Java的源码

[复制链接]
ID:823873 发表于 2020-11-29 14:07 | 显示全部楼层 |阅读模式
  •           项目环境
    • Windows2000或以上版本;
    • SQLServer 2005或以上版本。
  •           项目目的
    掌握数据库设计的基本方法,了解C/S与B/S结构应用系统的特点与适用场合,了解C/S与B/S结构应用系统的不同开发设计环境与开发设计方法,综合运用前面实验掌握的数据库知识与技术设计某小型数据库应用系统。
  •           项目要求
完成实验指导书中p255 (2)。
  •           项目设计开发过程及参考源代码
  • 需求分析
实现需要我们能够对图书数据进行管理,开发图书管理系统,简化管理以及借阅图书信息的步骤。
功能分析:
  •           登录功能(包括管理员登录,读者登录)
  •           注册功能(自主注册)
  •           读者功能模块
  •           管理员功能模块
  •           管理员对图书信息的管理(包括增删改,查询,浏览图书信息)
  •           管理员对读者信息的管理(包括浏览,修改读者信息,以及添加读者信息)
  •           读者功能(包括浏览图书信息,以及借阅图书,查询图书信息)
  •           管理员对借阅记录的管理(保存借阅记录,查看借阅记录)
  •           管理员对还书记录的管理(保存还书记录,归还图书,超期判断)
  • 数据库概念结构设计

  • 数据库逻辑结构设计
下画线为主码
GUL_LOGIN   (  SNAME,  PASSWORD ) 管理员登录表。

BORROW     (BNO ,RNO, BNAME,BRNUM, BOTIME) 借阅表,包括图书号,读者编号,图书名称,借阅时间。

BOOK_LIST  (BNO, BNAEM, PRICE, AUTHOR. INTIME, BNUM ,BWHERE, ISBORROW)图书表,包括图书编号、图书名称,价格,入库时间,藏书位置,是否被借阅。

BACK_LIST   (BNO , RNO , BNAME, BACKTIME, PRISE)还书表,包括图书号,读者编号,图书名称,还书时间,超期金额。
REDER_LIST  (RNO, RNAME, RSEX, RGRADE, DEPNAME, CLASS,PASSWODE,BNUM,BMAX) 读者信息表,包括读者编号,读者姓名,性别,年级,所在系别,班级,密码, 借阅数量,最大借阅数量。
  • 表及视图的创建代码

  • 存储过程和触发器的设计
当归还图书或是借阅图书时,图书信息表中要更改相应的借出或未借出记录。
借书时同步更改图书表,更改属性ISBORROW。
this.sql=
        "CREATE TRIGGER DB_BOOKBOOK_INSERT2 ON BORROW_LIST\n" +
        "AFTER INSERT AS\n" +
        "DECLARE @bno varchar(30);\n" +
        "SELECT @bno =bno \n" +
        "FROM inserted \n" +
        "\n" +
        "BEGIN\n" +
        "UPDATE BOOK_LIST \n" +
        "SET ISBORROW ='已借出'\n" +
        "WHERE BNO=@bno\n" +
        "END";
rs = stat.executeQuery(this.sql);

还书时同步更改图书表,更改属性ISBORROW。
this.sql=
        "CREATE TRIGGER DB_BACK_LIST_INSERT1 ON BACK_LIST\n" +
                "AFTER INSERT AS\n" +
                "DECLARE @bno varchar(30);\n" +
                "SELECT @bno =bno \n" +
                "FROM inserted \n" +
                "\n" +
                "BEGIN\n" +
                "UPDATE BOOK_LIST \n" +
                "SET ISBORROW ='未借出'\n" +
                "WHERE BNO=@bno\n" +
                "END";
rs = stat.executeQuery(this.sql);

设置借阅数量不能大于限制总数
String sql=
        " CREATE TRIGGER BorUPDETE\n" +
                " ON REDER_LIST\n" +
                " AFTER UPDATE\n" +
                " AS\n" +
                " DECLARE @ABN INT\n" +
                "  DECLARE @MBN INT\n" +
                " SELECT @ANUM = BNUM,@MNUMN=BMAX FROM INSERTED\n" +
                " IF(@ANUM>@MNUMN)\n" +
                "  BEGIN\n" +
                " RAISERROR('已达到最大可借书数量',17,1)\n" +
                " rollback transaction\n" +
                " END";
rs = stmt.executeQuery(sql);

借阅书籍时自动更新学生借阅数量
String sql=
        " CREATE TRIGGER rnumUPDETE\n" +
                " ON BORROW_LIST\n" +
                " AFTER INSERT\n" +
                " AS\n" +
                " DECLARE @NUN INT\n" +
                  " SELECT @NUM = BNUM FROM INSERTED\n" +
              
                "  BEGIN\n" +
                " UPDATE REDER_LIST\n" +
                " SET BNUM=@BNUM+1\n" +
                " END";
rs = stmt.executeQuery(sql);

设置还书时间大于借阅时间。

String sql=
        " CREATE TRIGGER \n" +
                "            ON BACK_LIST\n" +
                "            AFTER INSERT\n" +
                "            AS\n" +
                "            DECLARE @BOTIME1 DATE\n" +
                "            DECLARE @BACKTIME1  DATE\n" +
                "            SELECT @BOTIME1 = INSERTED.BOTIME ,@BACKTIME1 = INSERTED.@BACKTIME FROM INSERTED\n" +
                "            IF(@BOTIME1> @BACKTIME1 OR (SELECT YEAR(@BOTIME1) AS YEAR FROM INSERTED)!=(SELECT YEAR( @BACKTIME1) AS YEAR FROM INSERTED))\n" +
                "            BEGIN\n" +
                "            RAISERROR('输入日期不正确!',17,1)\n" +
                "            rollback transaction\n" +
                "            END";
rs = stmt.executeQuery(sql);

判断超期金额:
String sql=
        " CREATE TRIGGER \n" +
     "            ON BACK_LIST\n" +
     "            AFTER INSERT\n" +
     "            AS\n" +
     "            DECLARE @NUMDAY  DATE\n"+

     "            SELECT @NUMDAY =Z.TD" +
                "SELECT  TOTALDAY  TD --得到借书时间与还书时间之间相差多少天,使用内嵌视图\n" +
                "FROM\n" +
                "(\n" +
                "SELECT DAY(X.PDATE)-DAY(Y.NDATE) TOTALDAY\n" +
                "FROM \n" +
                "\n" +
                "(SELECT RNO,BOTIME PDATE \n" +
                "FROM BORROW_LIST)X,\n" +
                "\n" +
                "(SELECT RNO ,BACKTIME NDATE\n" +
                "FROM BACK_LIST)Y\n" +
                "\n" +
                "WHERE X.RNO =Y.RNO \n" +
                ")Z\n" +
     "            IF(NUMDAY>=60)\n" +
     "            BEGIN\n" +
     "            RAISERROR('已超期!',17,1)\n" +
     "           UPDATE BACK_LIST\n" +
     "           SET PRISE=(NUMDAY-60)*2" +
                "END";
rs = stmt.executeQuery(sql);




前台系统连接数据库代码
String JDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";// SQL数据库引擎
String connectDB = "jdbc:sqlserver://127.0.0.1:0;DatabaseName=db_tsgl";
try {

    Class.forName(JDriver);// 加载数据库引擎,返回给定字符串名的类
    user = "sa";// 你自己创建的用户名字和密码!!!!!!!!!!!!
    password1 = "123456";
    ct = DriverManager.getConnection(connectDB,user,password1);// 连接数据库对象
pstmt = ct.prepareStatement(strsql);

} catch (Exception arg1) {
    arg1.printStackTrace();
} finally {
    try {
        if (rs != null) {
            rs.close();
            rs = null;
        }
        if (pstmt != null) {
            pstmt.close();
            pstmt = null;
        }
        if (ct != null) {
            ct.close();
            ct = null;
        }
    } catch (Exception arg2) {
        arg2.printStackTrace();
    }


  • 具体实现

首先在数据库中建立基本信息。在通过系统来操控其中数据。
学生登录表基本信息
管理员登录基本信息:
以及图书基本信息:

以及读者基本信息:
  • 登录模块
1)管理员登录
输入相应的用户名,以及密码。系统在数据库中调取管理员登录信息表,匹配其中的用户名以及密码是否匹配。

若不匹配,则提示输入错入,累计三次输入错误,自动退出。

  • 学生登录

输入相应的用户名,以及密码。系统在数据库中调取学生登录信息表,匹配其中的用户名以及密码是否匹配。

若不匹配,则提示输入错入,累计三次输入错误,自动退出。

  • 注册
若之前数据库中没有,相应的记录,则输入相应的用户名,密码,以及所属权限。入下图:
注册之后数据插入数据库的学生登录表。


  • 管理员模块
通过管理员账号登录

  • 浏览图书信息
点击按钮浏览,在界面显示图书信息。
  •   查询图书信息
输入图书号,查询结果会显示在界面。
3)添加图书信息
点击添加按钮,在弹出来的界面输入相应信息后,再次点击添加。

结果显示:成功添加。并显示出来。

数据库中图书表中也添加相应的数据

4)修改图书信息
点击修改按钮,提示如下:
点击确定,后显示如下

再次点击确定,即可修改数据
如将图书价格改为100.
点击修改,提示修改成功
显示如下:

数据库中相应也同步修改,结果显示修改成100.
5)删除功能
点击删除按钮,提示
点击确定,提示

点击确定 ,如删除刚才修改的数据。
显示界面:
未显示其信息:
成功删除。
数据库同步删除:
6)借阅功能
点击借阅按钮,提示

点击确定:输入信息
点击借阅,在界面中显示,借阅的相关信息

再次浏览图书信息显示编号为1 的图书已被借出

假如再次借同一本书(已借出的书)
  • 还书功能
借书记录如下:

图书基本信息如下:编号为1 2 3的图书已借出

点击还书按钮,提示
点击确定,归还图书编号为1 的图书。

归还后在还书记录界面,显示所还记录。

再次浏览图书信息。发现编号为1的图书已被自动归还,更新借出记录。之前为已借出,现在改为未借出。

  • 查看读者信息

10)修改读者信息
点击修改读者信息按钮,
点击确定

修改名字为张飞9的读者信息,更改其名字为岳飞。
更改成功
数据库中也做出同步修改

  •   学生模块

通过相应的用户名和密码,系统调取数据库中的学生登录信息表,匹配其中信息。若正确则显示如下:
  • 查询图书信息
查询图书号为1的图书信息。
  • 借阅
借阅编号为4的图书。
再次查看图书信息,图书编号为4的图书已被借出,符合实际逻辑。
  • 浏览图书信息
点击浏览按钮即可看到图书信息。

  • 项目总结
通过此次综合性,加强对数据库的理解与运用以及贯通java,实现数据库和前端的连接。利用图形用户界面,实现用户交互,进行图书信息管理。可以完成对数据库的操作。满足实际需求。

以上的Word格式文档51黑下载地址:
先哥 图书管理子系统.doc (1.97 MB, 下载次数: 17)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表