基于JavaWEB+MySQL的二手闲置物品交易网站系统

目录
第一章  前言 3
1.1课题的来源及意义 3
1.2网络校园二手市场发展现状 3
1.3 可行性研究 3
第二章 相关技术介绍 5
2.1 JSP技术简介 5
2.2 JSP工作原理 5
2.3 JSP体系结构 5
2.4 JSP的特点 6
2.5 MYSQL数据库 7
2.6 系统数据库连接 8
第三章 系统分析 13
3.1 系统功能分析 13
3.2 需求分析 14
3.3 业务流分析 19
3.4 数据流分析 20
3.5 数据字典 21
3.6 需求分析复审 21
第四章 系统总体设计 22
4.1 系统总体功能结构图 22
4.2 系统ER图 22
4.3 系统功能设计目标 23
4.4 系统功能模块划分 24
4.5 系统的体系结构 24
第五章 数据库设计 26
5.1 数据库系统概述 26
5.2 数据库表设计 26
第六章 程序设计 31
6.1 程序说明 31
6.2 具体模块划分 31
第七章 软件安装与调试 39
7.1 软件的安装与配置 39
7.2 系统编码风格 39
7.3 软件测试 40
结 论 45
参考文献 46
第三章 系统分析

为了最终实现目标系统,设计一个针对盐鱼的物品交易网站,用户可以在该网站浏览信息进行物品选购、查看个人信息以及历史订单。管理员账户可以对已注册用户进行查询、对订单进行查询、审核。目标是建立一个人人可自由发布商品的平台,甚至对“宿舍超市”提供良好的支持(暂不讨论是否违规)。
注意网站的目标:仅仅是提供一个交易、信息浏览平台,因此不会提供任何对交易纠纷的处理,最大限度的问题解决方式也只是封禁、删除某些账号而已。
这是一个典型的 浏览器(B)/服务器(S) 模式,因此客户只需要一个浏览器,我们则要实现一个服务端。
3.1 系统功能分析
首先对现有系统进行分析,现有系统是信息的重要来源。分析已有系统的功能和实现,从而确定新系统的设计目标和模型。由于条件有限,调研主要是在网上进行。即通过在网上已有的二手交易网站注册成会员来了解其具备的功能。
1.从用户角度来看:
注意:概述提到这是一个“人人可自由发布”的网站,因此不会区分买家账户和卖家账户,所有的普通用户都是一样的,下面只是把功能分开说。
注册及登录,应当支持若干时间内的自动登录。
买家功能:

  • 浏览商品,提供搜索功能、分类查看

  • 购物车功能,一次购买多个商品

  • 浏览个人信息页,包含订单历史、收藏的订单

  • 浏览用户信息页,可查看任一用户的公开信息

  • 对商品进行购买(创建一笔订单)

  • 购买完成后关闭订单
    关于支付的一些说明:概述提到过网站目标,因此支付由用户在线下自行完成。另外的考虑是第三方线上支付或者自己实现支付系统的复杂性、难以测试性会使整个项目的开发中心偏移。而使用站内虚拟货币又没有什么实际意义。
    卖家功能:

  • 提交一个商品,包含商品必要信息 (交给管理员审核,通过即可被浏览)

  • 查看我发布的商品,应标记出审核状态

  • 提醒:我的某商品被购买

  • 取消订单
    2.从网站的角度看:
    对于后台数据处理,有 真-服务器管理员可以直接操作数据库,所以并没有什么必要对管理员账户作过多的功能开发,但为了方便管理,管理员应该在浏览器上可以:

  • 普通用户的所有功能,管理员首先是一个用户。

  • 审核商品,为了防止出现恶意破坏网站和不合规定的商品,每个商品都必须通过审核。

  • 人工添加用户、删除用户、查询用户和任何商品、订单信息
    3.2 需求分析
    需求分析的任务是通过详细调查现实世界要处理的对象,充分了解系统的工作概况,明确用户的各种需求,本文转载自http://www.biyezuopin.vip/onews.asp?id=15092然后在此基础上确定新系统的功能。新系统必须充分考虑今后可能的扩充和改变。
    括号内为说明
    首页(不同分类的商品展示)
    登录页
    注册页
    个人页
    个人资料
    收藏页
    正在进行的订单页
    历史订单页(购买、售出)
    站内消息页(系统、用户)
    购物车(支持移除个别商品)
    我的商品
    正在审核的商品
    用户资料页(所有公开信息)
    商品详情页(发布日期、作者、作者信息)
    购买结果页
    订单详情页(订单号、发布信息)
    搜索结果页(不同排序方式)
    后台管理页
    商品审核
    订单查找
    用户管理
    对数据的安全性、完整性要求:用户信息保密,只有管理员可见(可查),但不能任意修改。确保网上支付安全。商品信息、用户信息必须保证其完整性。防止恶意删改。以下是系统性能需求:
    (1)准确性和可靠性高
    (2)页面友好,功能齐全,且可以使用
    (3)系统便于维护和升级。
    (4)数据库访问效率高
    数据流图:是一种描述软件系统逻辑模型的图形符号。这种图形表示即可以从本质上描述计算机软件系统的工作情况,又适合非计算机专业人员学习和掌握,在需求分析中是一种很好的交流和表达工具。

<%@page import="com.luna.saltfish.tools.*" %>
<%@page import="com.luna.saltfish.dao.UserHandle,com.luna.saltfish.constant.*" %>
<%@page import="org.w3c.dom.UserDataHandler" %>
<%@page import="com.luna.saltfish.dao.GoodsHandle" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8" %>
<%@ page language="java" %>
<%@ page
        import="java.text.SimpleDateFormat,java.sql.*,java.lang.Math,com.luna.saltfish.tools.*,javax.servlet.http.HttpSession,java.util.*,com.luna.saltfish.entity.*" %>
<%@ page import="com.luna.saltfish.entity.Goods" %>
<%@ page import="com.luna.saltfish.entity.User" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
    // http://127.0.0.1:8080/salt-fish/
%>
<%
    //显示第几页
    int pn = 1;
    //每页显示几条?
    int perPage = StaticVar.PERPAGE_GOODS;
    int ceta = 0;
    String tmpString = request.getParameter("pn");
    //获取pn参数
    if (tmpString != null && tmpString.length() != 0) {
        if (Integer.parseInt(tmpString) > 0) {
            pn = Integer.parseInt(tmpString);
        }
    }
    //获取类别参数
    tmpString = request.getParameter("ceta");
    if (tmpString != null && tmpString.length() != 0) {
        if (Integer.parseInt(tmpString) > 0) {
            ceta = Integer.parseInt(tmpString);
        }
    }
    int limitMin = (pn - 1) * perPage;
    GoodsHandle goodHandle = new GoodsHandle();
    UserHandle userHandle = new UserHandle();
    List<Goods> list = null;
    IntHolder num = new IntHolder(0);
%>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <base href="<%=basePath%>">
    <jsp:include page="site/head.jsp"/>
    <title>物品交易-盐鱼-首页</title>
</head>
<body>
    <jsp:include page="site/header.jsp"/>
    <div class="container">
        <div class="row">
            <div class="col-md-3">
                <div class="row">
                    <div class="col-md-12">
                        <div class="list-group">
                            <span class="list-group-item list-group-item-info">分类</span> <a
                                href="index.jsp?ceta=0"
                                class="list-group-item <%=ceta == 0 ? "active" : ""%>"><span
                                class="badge"> <!-- 这里写数量,暂时搁置 -->
							</span>全部</a> <a href="index.jsp?ceta=2"
                                             class="list-group-item <%=ceta == 2 ? "active" : ""%>"><span
                                class="badge"></span>生活出行</a> <a href="index.jsp?ceta=1"
                                                                 class="list-group-item <%=ceta == 1 ? "active" : ""%>"><span
                                class="badge"></span>书籍</a> <a href="index.jsp?ceta=5"
                                                               class="list-group-item <%=ceta == 5 ? "active" : ""%>"><span
                                class="badge"></span>体育运动</a> <a href="index.jsp?ceta=4"
                                                                 class="list-group-item <%=ceta == 4 ? "active" : ""%>"><span
                                class="badge"></span>电子产品</a> <a href="index.jsp?ceta=3"
                                                                 class="list-group-item <%=ceta == 3 ? "active" : ""%>"><span
                                class="badge"></span>衣物鞋包</a> <a href="index.jsp?ceta=6"
                                                                 class="list-group-item <%=ceta == 6 ? "active" : ""%>"><span
                                class="badge"></span>其他</a>
                        </div>
                    </div>
                </div>
            </div>
            <div class="col-md-8">
                <div class="list-group">
                    <%
                        switch (ceta) {
                            case 0:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-全部</span>");
                                list = goodHandle.findAll(num, limitMin, perPage);
                                break;
                            case 1:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-书籍</span>");
                                list = goodHandle.findByCeta(1, num, limitMin, perPage);
                                break;
                            case 2:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-生活出行</span>");
                                list = goodHandle.findByCeta(2, num, limitMin, perPage);
                                break;
                            case 3:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-衣物鞋包</span>");
                                list = goodHandle.findByCeta(3, num, limitMin, perPage);
                                break;
                            case 4:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-电子产品</span>");
                                list = goodHandle.findByCeta(4, num, limitMin, perPage);
                                break;
                            case 5:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-体育运动</span>");
                                list = goodHandle.findByCeta(5, num, limitMin, perPage);
                                break;
                            case 6:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-其他</span>");
                                list = goodHandle.findByCeta(6, num, limitMin, perPage);
                                break;
                            default:
                                out.println("<span class=\"list-group-item list-group-item-info\">分类-全部</span>");
                                list = goodHandle.findAll(num, limitMin, perPage);
                                break;
                        }
                        if (list.size() != 0) {
                            for (Goods good : list) {
                                if (good.getProducterId() == null) {
                                    continue;
                                }
                                User user = userHandle.findById(good.getProducterId());
                    %>
                    <div class="list-group-item">
                        <div class="row">
                            <div class="goods-img col-md-2">
                                <img class="img-rounded img-item-goods"
                                     src="<%=good.getImage()%>"/>
                            </div>
                            <div class="col-md-10">
                                <div class="row detail-goods lead">
                                    <a href="goods/info.jsp?goodsId=<%=good.getId()%>"><%=good.getName()%>
                                    </a>
                                </div>
                                <div class="row detail-goods">
                                    ¥<span class="text-danger"><%=Math.round(good.getPrice())%></span>
                                    <span class="detail-goods text-muted"> 发布者:<%
                                        if (user.getName() != null) {
                                    %>
                                        <%=user.getName()%> <%
                                        } else {
                                        %><%=user.getEmail()%> <%
                                            }
                                        %>
									</span> <span class="detail-goods text-muted"> 时间:
                                    <%
                                        java.util.Date date = good.getCreateDate();
                                        SimpleDateFormat myFmt = new SimpleDateFormat("yyyy年MM月dd日 HH:mm");
                                        String dateStr = myFmt.format(date);
                                        out.print(dateStr);
                                    %>
									</span>
                                </div>
                            </div>
                        </div>
                    </div>
                    <%
                        }
                    } else {
                    %>
                    <div class="list-group-item">此分类下暂无物品或页数已经到达最大!</div>
                    <%
                        }
                    %>
                </div>
                <%
                    int maxPage = num.value % perPage == 0 ? num.value / perPage : num.value / perPage + 1;
                %>
                <nav>
                    <ul class="pager">
                        <li class=""><a class="page-cut-btn"
                                        href="index.jsp?ceta=<%=ceta%>&pn=<%=pn <= 1 ? pn : pn - 1%>"><span
                                aria-hidden="true"></span><%=pn > 1 ? "上一页" : "位于首页"%>
                        </a></li>
                        <li style=""><span style="border: 0"> 第<span
                                style="color: red; border: 0"><%=pn%></span>页
						</span></li>
                        <li class=""><a class="page-cut-btn"
                                        href="index.jsp?ceta=<%=ceta%>&pn=<%=pn < maxPage ? pn + 1 : pn%>"><%=pn < maxPage ? "下一页" : "位于末页"%>
                            <span aria-hidden="true"></span></a></li>
                    </ul>
                </nav>
            </div>
        </div>
    </div>
    <jsp:include page="site/footer.jsp"/>
</body>
</html>
<%

%>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

系统主要面向于大学校园网用户,依托校园网提供给这些用户一个发布和交流二手商品信息的平台。在大学校园里,存在着很多的二手商品,但是由于信息资源的不流通以及传统二手商品信息交流方式的笨拙,导致了很多仍然具有一定价值或者具有非常价值的二手商品的囤积,乃至被当作废弃物处理。现在通过校园网进入到本系统,可以方便快捷的发布和交流任何二手商品的信息,并且可以通过留言方式进行深一步的交流。由于每个大学的校园网都基本篇布校园的每一个地方,因此,只要宣传得当,理论上来说,每一个人都可以让他所发布的信息让全校所了解,争取到了信息资源的最大化利用。 系统完成的主要功能有:用户设置功能、发布信息功能、信息管理功能、搜索信息功能,留言功能,及系统管理功能,具体业务功能包括如下: 用户注册:学生可利用自已学号进行注册,注册实现实名制。 用户登录:只有登录用户才能进行信息发布。管理员登录后可以进行系统管理。 发布信息:普通用户和管理员登录后都可以发布信息。 修改信息:普通用户可以修改自己发布的信息,管理员可以修改所有信息。 删除信息:普通用户可以删除自己发布的信息,管理员可以删除所有信息。 浏览信息:游客、普通用户和管理员可以浏览所有发布的信息。 搜索信息:游客、普通用户和管理员可以用关键字搜索所有发布的信息。普通用户可以搜索自己发布的所有信息。 发表留言:普通用户和管理员登录后都可以对发布信息进行留言。 查看留言:游客、普通用户和管理员都可以查看发布信息的留言。 删除留言:管理员可以删除留言。 添加二手指南:管理员可以添加二手指南。 查看二手指南:游客、普通用户和管理员都可以查看二手指南。 修改二手指南:管理员可以修改二手指南。 删除二手指南:管理员可以删除二手指南。 3.1.2 系统界面要求 由于系统主要面向大学生,系统界面要求不能过古板,要能体现大学校园的自由,创新。系统界面设计应体现人性化,界面清晰简捷,操作简单流畅,提高管理效果。不需要任何专业培训,不需要配备专门的电脑操作人员,无电脑知识一样运用自如。关键在于系统的框架式设计简单明晰。 3.2 概要设计 3.2.1 系统体系结构设计 本系统是一个典型的三层应用——浏览器通过Web服务器实现对数据库的各种操作。图3-1 展示了整个系统的体系结构。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shejizuopin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值