数据库课程设计——校园二手运动用品租借系统

  • 一、概述
  1. 项目背景

     随着社会对健康生活方式的重视和对体育锻炼需求的增加,校园内的运动器械成为学生们进行体育锻炼的重要资源。然而,许多学生可能无法购买自己喜欢的全部运动器械。因此,建立一个校园运动器械租借系统的想法应运而生。该系统旨在为学生提供一个方便、安全和经济的途径,以租借校园内的运动器械。通过租借系统,学生可以根据自己的需要选择所需的器械,并在规定的时间内租借使用。

   通过建立校园运动器械租借系统,可以促进学生们更加积极参与体育锻炼,改善他们的健康状况,并为校园内的体育教育提供更好的支持和资源

健康状况,并为校园内的体育教育提供更好的支持和资源

    2.编写目的

  系统旨在为学生提供一个方便、快捷、安全和经济的途径,以租借校园内的运动器械,让学生可以更加方便地享受校园内的运动器械资源。系统可以集中管理校园内的运动器械,实现对器械的分类、储存、调配、维护等管理,从而最大化地利用校园内的运动器械资源。

    3.开发环境

     数据库:MySQL8.0、Navicat Premium 12

     Java:JDK1.8.0 eclipse4.16.0

     JDBC:mysql-connector-java-8.0.19.jar

      html:Dreamweaver、eclipse

二、需求分析

  1. 需要完成的功能

  用户登录:学生可以通过学号和手机号登录进入自己的个人中心;

  用户查询:学生可以通过关键字或学号进行搜索,以获得所需的器械信息。

  用户发布:学生可以在个人中心为出租品注册编号并将数据存入数据库

       2.ER模型图

      三.数据库逻辑设计

由ER模型图转换为关系表

四、软件功能设计

  1. 用户登录

通过html中的action=”login.jsp”把用户提交的参数放到login中验证是否正确,验证过程中需要调用数据库中的数据,若参数正确则进入用户个人中心界面,即跳转到xingxing.jsp,若参数不正确则回到login.html登录界面。

Html中使用表单来接收数据,具体html代码来自login.html如下:

<!DOCTYPE html>

<html>

<head></head>

<style>

body {

  display: flex;

  justify-content: center;

  align-items: center;

  height: 100vh;

  background-image: url("背景.jpg");

  background-repeat: no-repeat;

  background-size: cover;

  backdrop-filter: blur(1px);

}

#ziti {

  font-size: 23px;

}

#ziti2 {

  font-size: 23px;

}

#ziti1 {

  font-size: 30px;

}

form {

  text-align: center;

  background-color: #F5F5F5;

  border-collapse: collapse;

  border: 1px solid #F5F5F5;

  padding: 20px;

}

th,

td {

  padding: 8px;

  border: 1px solid #F5F5F5;

}

#login {

  display: flex;

  justify-content: center;

  margin-top: 20px;

}

#login input[type="submit"],

#login input[type="reset"] {

  margin: 10px;

  padding: 8px 16px;

  color: white;

  border: none;

  cursor: pointer;

}

</style>

</head>

<body>

  <form method="post" onSubmit="return validate(this)" action="login.jsp">

    <div id="ziti1">

      <p><b>用户登录</b></p>

    </div>

    <table>

      <tr>

        <td id="ziti"><b>学生学号:</b></td>

        <td><input type="text" name="sno"></td>

      </tr>

      <tr>

        <td id="ziti2"><b>学生手机号:</b></td>

        <td><input type="password" name="sphone"></td>

      </tr>

    </table>

    <div id="login">

      <input type="submit" value="登录">

      <input type="reset" value="重置">

    </div>

  </form>

</body>

</html>

用户登录后界面会显示用户个人信息,通过xingxing.jsp从数据库调取数据,具体代码来自xingxing.jsp如下:

<%@ page import="java.sql.*"%>

 <%

        Connection conn = null;

        Statement stmt = null;

        ResultSet rs = null;

        String url = "jdbc:mysql://localhost:3306/crs";

        String user = "root";

        String password = "131505";

        String sphone= request.getParameter("sphone");

        String sno= request.getParameter("sno");

        try {

            Class.forName("com.mysql.cj.jdbc.Driver");

            conn = DriverManager.getConnection(url,user, password);

            stmt = conn.createStatement();

            rs = stmt.executeQuery("select * from student where sphone='"+sphone+"' or sno='"+sno+"'");

        } catch (Exception e) {

            e.printStackTrace();

        }

        if (rs != null && rs.next()) {

    %>

        <table id="user">

            <tr>

                <th>用户学号</th>

                <th>用户姓名</th>

                <th>用户专业</th>

                <th>用户手机号</th>

            </tr>

    <%

            do {

    %>

            <tr>

                <td><%= rs.getString("sno") %></td>

                <td><%= rs.getString("sname") %></td>

                <td><%= rs.getString("sdept") %></td>

                <td><%= rs.getString("sphone") %></td>

            </tr>

    <%

            } while (rs.next());

    %>

        </table>

    <%

        } else {

    %>

        <p>No results found.</p>

    <%

        }

        if (rs != null) {

            try {

                rs.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        if (stmt != null) {

            try {

                stmt.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    %>

2.用户发布

用户查询和用户发布的html页面都放在了xingxing.jsp中,通过表单获取参数,传给对应的jsp文件。

用户发布表单接收的参数传给Newcheck.jsp,在Newcheck.jsp中连接数据库,通过sql语言进行插入并判断是否插入成功,若插入成功则跳转到success.jsp,对插入结果进行输出操作;

若插入失败则跳转到faliure.jsp提醒用户插入操作失败;

用户发布功能的主要html代码如下,来自xingxing.jsp:

  <div id="menu">

            <b>出租物品填写</b><br>

            <form method="post" action="Newcheck.jsp" onSubmit="return validate(this)"accept-charset="UTF-8">

                   <p> <label for="sno">学号:</label>

                    <input type="text" id="sno" name="sno" required>

                </p>

                <p>

                    <label for="rid">出租物品ID:</label>

                    <input type="text" id="rid" name="rid" required>

                </p>

                <p>

                    <label for="text">出租运动器械名:</label>

                    <input type="text" id="rname" name="rname" required>

                <input type="submit" value="提交" id="submit-button"></p>

            </form>       

           

        </div>

用户发布的内容检查代码来自Newcheck.jsp,关键代码如下:

request.setCharacterEncoding("utf-8");

String sno = request.getParameter("sno");

String rid = request.getParameter("rid");

String rname= request.getParameter("rname");

System.out.println(rname);

try {

String sql = "insert into rental_item(sno,rid,rname) values('"+sno+"','"+rid+"','"+rname+"')";

Class.forName(DBDRIVER);

conn = DriverManager.getConnection(DBURL);

pstmt = conn.prepareStatement(sql);

int result = pstmt.executeUpdate();

if (result > 0) {

flag = true;

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (pstmt != null) {

pstmt.close();

}

if (conn != null) {

conn.close();

}

} catch (Exception e) {

e.printStackTrace();

}

}

%>

<%

if (flag) { // 注册成功,应该跳转到 success.jsp

%>

<jsp:forward page="success.jsp" />

<%

} else { // 注册失败,跳转到 failure.jsp

%>

<jsp:forward page="failure.jsp" />

<%

}

%>

用户发布成功的界面代码如下,来自success.jsp:

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ page import="java.sql.*" %>

<!DOCTYPE html>

<html>

<head>

    <meta charset="UTF-8">

    <title>商品出租信息发布成功</title>

    <style type="text/css">

     body {

            background-color:#f0f0f0;

            background-repeat: no-repeat;

            background-size:auto;

            backdrop-filter: blur(1px);

        }

    </style>

</head>

<body>

    <h1>商品出租信息发布成功</h1>

    <%

       //数据库连接,因为涉及密码故不展开

        request.setCharacterEncoding("utf-8");

        String rid= request.getParameter("rid");

        String sno= request.getParameter("sno");

        String rname= request.getParameter("rname");

        try {

            Class.forName("com.mysql.cj.jdbc.Driver");

            conn = DriverManager.getConnection(url,user, password);

            stmt = conn.createStatement();

            rs = stmt.executeQuery("select * from rental_item where rid='"+rid+"' and sno='"+sno+"'");

        } catch (Exception e) {

            e.printStackTrace();

        }

        if (rs != null && rs.next()) {

    %>

        <table>

            <tr>

                <th>出租者学号</th>

                <th>商品</th>

                <th>商品id</th>

            </tr>

    <%

            do {

    %>

            <tr>

                <td><%= rs.getString("sno") %></td>

                <td><%= rs.getString("rname") %></td>

                <td><%= rs.getString("rid") %></td>

            </tr>

    <%

            } while (rs.next());

    %>

        </table>

    <%

        } else {

    %>

        <p>没有发现</p>

    <%

        }

        if (rs != null) {

            try {

                rs.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        if (stmt != null) {

            try {

                stmt.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

        if (conn != null) {

            try {

                conn.close();

            } catch (SQLException e) {

                e.printStackTrace();

            }

        }

    %>

</body>

</html>

用户发布商品失败的代码如下,来自failure.jsp:

<%@ page language="java" contentType="text/html; charset=utf-8"

    pageEncoding="utf-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Insert title here</title>

</head>

<body>

<p>注册失败!该商品ID与他人重合</p>

</body>

</html>

3.用户查询

用户查询表单接收的参数传给Newcheck22.jsp,在Newcheck22.jsp中连接数据库,通过sql语言进行查询并判断是否查询到内容,若查询到内容则跳转到success2.jsp,对查询结果进行输出操作;

若查询失败则跳转到faliure1.jsp提醒用户查询操作失败;

用户查询功能的html代码来自xingxing.jsp如下:

 <div id="content">

            查询心动的运动好物

            <form method="post" action="Newcheck22.jsp" onSubmit="return validate(this)" accept-charset="UTF-8">

                <p>

                    <label for="rnametxt">运动好物:</label>

                    <input type="text" id="rnametxt" name="rnametxt" >

                </p>

                <p><br><br><br></p>

                <p>

                    <label>出租者学号:</label>

                    <input type="text" name="sno">

                    <input type="submit" value="查询" id="submit-button">

                </p>

                

            </form>

        </div>

用户查询功能的Newcheck22.jsp的关键代码如下:

try {

String sql ="select sno, rname from rental_item where rname = ? or sno = ?";

Class.forName(DBDRIVER);

conn = DriverManager.getConnection(DBURL);

pstmt = conn.prepareStatement(sql);

pstmt.setString(1, rnametxt);

pstmt.setString(2, sno);

rs = pstmt.executeQuery();

if (rs.next()) {

// 如果有内容,则此处执行,表示查询出来,合法用户

flag = true;

}

} catch (Exception e) {

} finally {

try {

conn.close(); // 连接一关闭,所有的操作都将关闭

} catch (Exception e) {

}

}

%>

<%

if (flag) {

%>

<jsp:forward page="success2.jsp" />

<%

} else {

%>

<jsp:forward page="failure1.jsp" />

<%

}

%>

用户查询成功跳转到的success2.jsp的关键代码如下:

try {

            Class.forName("com.mysql.cj.jdbc.Driver");

            conn = DriverManager.getConnection(url,user, password);

            stmt = conn.createStatement();

            rs = stmt.executeQuery("select sno,rname from rental_item where rname='"+rnametxt+"' or sno='"+sno+"'");

        } catch (Exception e) {

            e.printStackTrace();

        }

        if (rs != null && rs.next()) {

    %>

        <table>

            <tr>

                <th>出租者学号</th>

                <th>商品</th>

            </tr>

    <%

            do {

    %>

            <tr>

                <td><%= rs.getString("sno") %></td>

                <td><%= rs.getString("rname") %></td>

            </tr>

    <%

            } while (rs.next());

    %>

        </table>

    <%

        } else {

    %>

        <p>No results found.</p>

用户查询失败的主要failure.jsp的代码如下:

<meta charset="utf-8">

<title>查询失败</title>

<style type="text/css">

body {

            background-image: url("true.jpg");

            background-repeat: no-repeat;

            background-size: cover;

            font-family: Arial, sans-serif;

        }  

        #con{text-align: center;

        }

</style>

</head>

<body>

<div id="con">非常抱歉,我们会继续增加商品种类的</div>

</body>

五、界面设计

用户登录界面

用户个人中心

用户发布成功界面success.jsp

用户发布失败界面failure.jsp界面

用户查询成功界面success2.jsp

用户查询失败界面failure1.jsp

六、心得和改进方向

  1. 心得

关于表单参数在输入中文时总是乱码的问题:

解决:

第一步:在form表单中添加accept-charset="UTF-8"

第二步:在接收表单数据的jsp中添加:request.setCharacterEncoding("utf-8");

关于一个系统的建立:

首先建立数据库,再写html页面,对应html呈现的功能通过jsp与数据库进行连接;

2、改进方向

第一个改进方向:社区发布页面

类似淘宝首页,任何人都可以看到:相关商品,出租状态和时间,图片
第二个改进方向:用户个人中心

用户可以发布商品,管理自己的出租商品,查看自己的请求订单
第三个改进方向:管理员个人中心

管理员可以审核用户发布的信息,可以增删商品

改进完的系统流程大致为:

  • 29
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值