0、效果展示
1、概述
本文首先介绍了校园二手网上购物系统的开发背景及意义,然后论述了系统的需求分析和系统设计方案,较详细的论述了系统的详细设计和实现,并对系统进行了测试。最后,本文对校园二手网上购物系统进行了性能分析并提出了还需要改进的问题。 系统主要为在校学生提供了会员注册,商品搜索,评价,用户积分等功能,在校学生可以很方便的注册成为网上会员,对其他同学发布的商品进行浏览、检索,查看商品的详细资料和购买等,然后根据自己的需要选购自己看中的商品,也可以发布自己的物品进行销售、交换和出租等;为管理员提供了商品管理,用户管理管理,订单信息管理,系统管理等功能,系统管理员可以方便的对学生发布的商品进行管理,审查已注册的用户并对用户订单进行处理。在设计方面,本系统采用MVC模式,同时使用JSP技术进行动态页面的设计,使用Ajax进行页面异步交互。后台数据库选用MYSQL数据库。
2、搭建环境
本文以实现一个校园二手交易平台为目标,从环境搭建到编码实现全过程讲述
我们使用javaweb、J2EE来构建校园二手交易平台,环境使用最新版jdk和tomcat,配合mysql数据库
开发工具使用idea(也可以使用eclipse),数据库管理工具使用Navicat Premium
开发框架使用JavaBean Servlet MVC结构;
没有使用SSH(Struts+Spring+Hibernate)或SSM(Spring+SpringMVC+MyBatis),这两个框架我们在别的项目中再介绍开发过程
在项目中会引入My97DatePicker作为前端日期时间选择工具,使用fckeditor作为富媒体编辑器(也可以使用百度的ueditor)
使用DWR(Direct Web Remoting)用于改善web页面与Java类交互,实现远程服务器端AJAX读取登录数据。
使用JSTL(Java server pages standarded tag library,即JSP标准标签库),此库是由JCP(Java community Proces)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签库,并由Apache的Jakarta小组来维护。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性,降低程序的维护难度。
3、数据表结构
表3 CustomerInfo 用户信息
字段名称 | 字段大小 | 字段类型 | 说明 |
id | 4 | 长整型(3) | 编号 |
| 100 | 文本(202) | 电子邮件 |
pwd | 20 | 文本(202) | 密码 |
registerTime | 50 | 文本(202) | 注册时间 |
isCooled | 4 | 长整型(3) | 是否冻结 |
表4 GoodsInfo 商品表
字段名称 | 字段大小 | 字段类型 | 说明 |
goodsId | 4 | 长整型(3) | 编号 |
typeDetailInfo | 50 | 文本(202) | 类别 |
goodsName | 200 | 文本(202) | 名称 |
price | 19 | adNumeric(131) | 价格 |
discount | 8 | 双精度型(5) | 折扣 |
isRecommend1 | 4 | 长整型(3) | 商品属性 |
status | 4 | 长整型(3) | 状态上架 |
photo | 200 | 文本(202) | 图片 |
remark | 200 | 文本(202) | 信息 |
countRequire | 4 | 长整型(3) | 数量 |
createdate | 50 | 文本(202) | 发布日期 |
4、后端代码示例
package com.control.admin;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.CustomerDetailInfoDAO;
import com.dao.CustomerInfoDAO;
import com.dao.OrderGoodsInfoDAO;
import com.dao.OrderInfoDAO;
import com.entity.CustomerDetailInfo;
import com.entity.CustomerInfo;
import com.entity.OrderInfo;
import com.util.PublicToolCheckParam;
import com.util.PublicToolShowOrderList;
public class ManageOrder extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -3433108879388967026L;
static OrderInfoDAO odao = new OrderInfoDAO();
public static void confirmOrder(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String isSearching = request.getParameter("isSearching");
String key = request.getParameter("key");
String currentPage = request.getParameter("currentPage");
String orderId = request.getParameter("orderId");
String status = request.getParameter("status");
if(PublicToolCheckParam.checkNullAndEmpty(orderId) && PublicToolCheckParam.checkNullAndEmpty(status)){
OrderInfoDAO odao = new OrderInfoDAO();
odao.updateOrderStatus(Integer.parseInt(orderId),Integer.parseInt(status));
OrderGoodsInfoDAO ogdao = new OrderGoodsInfoDAO();
ogdao.updateOrderStatus(Integer.parseInt(orderId),Integer.parseInt(status));
if(PublicToolCheckParam.checkNullAndEmpty(isSearching)){
PublicToolShowOrderList.searchOrder(request, response, currentPage, key);
request.setAttribute("key", key);
request.setAttribute("isSearching", "yes");
}
else{
PublicToolShowOrderList.showOrderList(request, response, currentPage);
}
request.getRequestDispatcher("../admin/manageOrder.jsp").forward(request, response);
}
}
public static void deleteMoreOrder(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String currentPage = request.getParameter("currentPage");
String[] ckb = request.getParameterValues("ckb");
if(ckb != null){
for(int i=0;i<ckb.length;i++){
odao.deleteOrder(Integer.parseInt(ckb[i]));
}
}
PublicToolShowOrderList.showOrderList(request, response, currentPage);
request.getRequestDispatcher("../admin/manageOrder.jsp").forward(request, response);
}
public static void deleteOrder(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String orderId = request.getParameter("orderId");
if(PublicToolCheckParam.checkNullAndEmpty(orderId)){
odao.deleteOrder(Integer.parseInt(orderId));
String isSearching = request.getParameter("isSearching");
String currentPage = request.getParameter("currentPage");
if(PublicToolCheckParam.checkNullAndEmpty(isSearching)){
String key = request.getParameter("key");
PublicToolShowOrderList.searchOrder(request, response, currentPage, key);
request.setAttribute("key", key);
request.setAttribute("isSearching", "yes");
}
else{
PublicToolShowOrderList.showOrderList(request, response, currentPage);
}
}
request.getRequestDispatcher("../admin/manageOrder.jsp").forward(request, response);
}
public static void searchOrder(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String currentPage = request.getParameter("currentPage");
String key = request.getParameter("key");
PublicToolShowOrderList.searchOrder(request, response, currentPage, key);
OrderInfoDAO odao = new OrderInfoDAO();
int queren = odao.getsqueren(key);
int wqueren = odao.getswqueren(key);
int tuihuo = odao.getstuihuo(key);
request.setAttribute("queren", queren);
request.setAttribute("wqueren", wqueren);
request.setAttribute("tuihuo", tuihuo);
request.setAttribute("isSearching", "yes");
request.setAttribute("key", key);
request.getRequestDispatcher("../admin/manageOrder.jsp").forward(request, response);
}
public static void showDetailOrder(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String orderId = request.getParameter("orderId");
if(PublicToolCheckParam.checkNullAndEmpty(orderId)){
OrderInfoDAO odao = new OrderInfoDAO();
OrderInfo orderInfo = odao.getOrderInfo(Integer.parseInt(orderId));
CustomerInfoDAO cdao = new CustomerInfoDAO();
CustomerInfo customerInfo = cdao.getCustomerInfo(orderInfo.getCustomerId());
CustomerDetailInfoDAO cddao = new CustomerDetailInfoDAO();
CustomerDetailInfo customerDetailInfo = cddao.getCustomerDetailInfo(orderInfo.getCustomerId());
OrderGoodsInfoDAO ogdao = new OrderGoodsInfoDAO();
ArrayList<Object> orderGoodsInfoList = ogdao.getOrderGoodsInfo(orderInfo.getOrderId());
request.setAttribute("orderGoodsInfoList", orderGoodsInfoList);
request.setAttribute("customerDetailInfo", customerDetailInfo);
request.setAttribute("customerInfo", customerInfo);
request.setAttribute("orderInfo", orderInfo);
request.getRequestDispatcher("../admin/orderDetailInfo.jsp").forward(request, response);
}
}
public static void showManageOrderPage(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
OrderInfoDAO odao = new OrderInfoDAO();
int queren = odao.getqueren();
int wqueren = odao.getwqueren();
int tuihuo = odao.gettuihuo();
request.setAttribute("queren", queren);
request.setAttribute("wqueren", wqueren);
request.setAttribute("tuihuo", tuihuo);
String currentPage = request.getParameter("currentPage");
PublicToolShowOrderList.showOrderList(request, response, currentPage);
request.getRequestDispatcher("../admin/manageOrder.jsp").forward(request, response);
}
/**
* Constructor of the object.
*/
public ManageOrder() {
super();
}
/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String method = request.getParameter("method");
if(PublicToolCheckParam.checkNullAndEmpty(method)){
if(method.equals("showManageOrderPage")){
showManageOrderPage(request, response);
}
else if(method.equals("delete")){
deleteOrder(request, response);
}
else if(method.equals("deleteMore")){
deleteMoreOrder(request, response);
}
else if(method.equals("search")){
searchOrder(request, response);
}
else if(method.equals("confirm")){
confirmOrder(request, response);
}
else if(method.equals("showDetail")){
showDetailOrder(request, response);
}
}
}
/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}
}
5、前端代码示例
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.util.PublicToolCheckParam"%>
<%@page import="com.entity.OrderInfo"%>
<%@page import="com.entity.CustomerDetailInfo"%>
<%@page import="com.dao.CustomerDetailInfoDAO"%>
<%@page import="com.dao.CustomerInfoDAO"%>
<%@page import="com.entity.CustomerInfo"%>
<%@page import="com.util.Validate"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>订单信息管理</title>
<link type="text/css" rel="stylesheet" href="../css/style.css" />
<script type="text/javascript" src="../js/admin/manageOrder.js" charset="gb2312"></script>
</head>
<body>
<form action="../servlet/ManageOrder?method=deleteMore" method="post">
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="font-size:13px;">
<tr>
<td width="100%" height="36"><strong><font size="6" color="#0099FF">□ </font><font color="#666666" size="3">订单信息管理</font></strong></td>
<td height="36"><div align="right"><input id="key" type="text" name="key" style="height: 24px;width: 250px;padding-top: 2px;padding-left:20px;background-image: url(../image/icon/key_search.gif);background-repeat: no-repeat"/></div></td>
<td><input type="button" value="查询" style="height: 26px;width: 70px;padding-top: 2px" onClick="return searchOrder()"/></td>
<!-- <td><input type="submit" value="删除订单" style="height: 26px;width: 70px;padding-top: 2px" onClick="return deletMoreOrder()"/></td>-->
</tr>
<tr>
<td height="40" colspan="4"><hr width="100%"/></td>
</tr>
<tr>
<td height="147" colspan="4">
统计信息 订单总数:<%=request.getAttribute("sumCount")%>,其中已确认:<%=request.getAttribute("queren")%>,未确认:<%=request.getAttribute("wqueren")%>,退货:<%=request.getAttribute("tuihuo")%>
<table width="100%" border="1" cellpadding="0" cellspacing="0" style="font-size:13px" bordercolor="#9999FF">
<tr height="30">
<!--<td width="50"><div align="center"><font color="#666666">全选</font></div></td>
<td width="40"><div align="center"><input type="checkbox" id="checkAll" value="checkbox" onClick="selectAll()"/></div></td>-->
<td><div align="center"><font color="#666666">订单编号</font></div></td>
<td><div align="center"><font color="#666666">订单状态</font></div></td>
<td><div align="center"><font color="#666666">下单时间</font></div></td>
<td><div align="center"><font color="#666666">用户账户/邮箱</font></div></td>
<td><div align="center"><font color="#666666">收货人</font></div></td>
<td><div align="center"><font color="#666666">固定电话</font></div></td>
<td><div align="center"><font color="#666666">移动电话</font></div></td>
<td><div align="center"><font color="#666666">操作</font></div></td>
</tr>
<%
String isSearching = (String)request.getAttribute("isSearching");
ArrayList<OrderInfo> orderInfoList = (ArrayList<OrderInfo>)request.getAttribute("orderInfoList");
CustomerDetailInfoDAO cddao = new CustomerDetailInfoDAO();
CustomerInfoDAO cdao = new CustomerInfoDAO();
if(orderInfoList == null || orderInfoList.toString().equals("[]")){
out.println("<td colspan='10' height='30'><div align='center'>当前无任何订单信息!</div></td>");
}
else{
for(int i=0;i<orderInfoList.size();i++){
OrderInfo od = orderInfoList.get(i);
CustomerDetailInfo customerDetailInfo = cddao.getCustomerDetailInfo(od.getCustomerId());
CustomerInfo customerInfo = cdao.getCustomerInfo(customerDetailInfo.getCustomerId());
out.println("<tr height='30'>");
//out.println("<td><div align='center'>勾选</div></td>");
//out.println("<td><div align='center'><input id='ckb' type='checkbox' name='ckb' value='"+od.getOrderId()+"' /></div></td>");
out.println("<td><div align='center'>"+od.getOrderId()+"</div></td>");
if(od.getStatus() == 0){
out.println("<td><div align='center'><font color='#FF0000'>未确认</font></div></td>");
}
else if(od.getStatus() == 1){
out.println("<td><div align='center'>已确认</div></td>");
}
else if(od.getStatus() == 100){
out.println("<td><div align='center'>确认收货</div></td>");
}
else if(od.getStatus() == 101){
out.println("<td><div align='center'>退货</div></td>");
}
Validate v = new Validate();
out.println("<td><div align='center'>"+v.datemmdd(od.getOrderTime())+"</div></td>");
out.println("<td><div align='center'>"+customerInfo.getEmail()+"</div></td>");
out.println("<td><div align='center'>"+customerDetailInfo.getName()+"</div></td>");
out.println("<td><div align='center'>"+customerDetailInfo.getTelphone()+"</div></td>");
out.println("<td><div align='center'>"+customerDetailInfo.getMovePhone()+"</div></td>");
if(PublicToolCheckParam.checkNullAndEmpty(isSearching) && orderInfoList.size() > 1){
if(od.getStatus() == 0){
out.println("<td><div align='center'><a href='#' onclick=confirmOrderOfSearching("+od.getOrderId()+","+od.getStatus()+","+request.getAttribute("key")+")>确认订单</a> <a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrderOfSearching("+od.getOrderId()+","+request.getAttribute("key")+")>删除</a></div></td>");
}
else if(od.getStatus() == 1){
out.println("<td><div align='center'><a href='#' onclick=confirmOrderOfSearching("+od.getOrderId()+","+od.getStatus()+","+request.getAttribute("key")+")>取消确认</a> <a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrderOfSearching("+od.getOrderId()+","+request.getAttribute("key")+")>删除</a></div></td>");
}
else if(od.getStatus() == 100){
out.println("<td><div align='center'>确认收货 <a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrderOfSearching("+od.getOrderId()+","+request.getAttribute("key")+")>删除</a></div></td>");
}
else if(od.getStatus() == 101){
out.println("<td><div align='center'>退单 <a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrderOfSearching("+od.getOrderId()+","+request.getAttribute("key")+")>删除</a></div></td>");
}
}
else{
if(od.getStatus() == 0){
out.println("<td><div align='center'><a href='#' onclick=confirmOrder("+od.getOrderId()+","+od.getStatus()+")>确认订单</a> <a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrder("+od.getOrderId()+")>删除</a></div></td>");
}
else if(od.getStatus() == 1){
out.println("<td><div align='center'><a href='#' onclick=confirmOrder("+od.getOrderId()+","+od.getStatus()+")>取消确认</a> ");
out.print("<a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrder("+od.getOrderId()+")>删除</a></div></td>");
}
else if(od.getStatus() == 100){
out.println("<td><div align='center'>确认收货 <a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrder("+od.getOrderId()+")>删除</a></div></td>");
}
else if(od.getStatus() == 101){
out.println("<td><div align='center'>退单 <a href='../servlet/ManageOrder?method=showDetail&orderId="+od.getOrderId()+"'>详情</a> <a href='#' onclick=deleteOrder("+od.getOrderId()+")>删除</a></div></td>");
}
}
out.println("</tr>");
}
}
%>
<tr><td colspan="10" height="50">
<div align="center">共找到<%=request.getAttribute("sumCount")%>条记录
第<%=request.getAttribute("currentPage")%>/<%=request.getAttribute("sumPageCount")%>页
<a href="../servlet/ManageOrder?method=<%if(PublicToolCheckParam.checkNullAndEmpty(isSearching)){out.println("search&key="+request.getAttribute("key")+"");}else{out.println("showManageOrderPage");}%>¤tPage=<%=request.getAttribute("indexPage")%>">首页</a>
<a href="../servlet/ManageOrder?method=<%if(PublicToolCheckParam.checkNullAndEmpty(isSearching)){out.println("search&key="+request.getAttribute("key")+"");}else{out.println("showManageOrderPage");}%>¤tPage=<%=request.getAttribute("upPage")%>">上一页</a>
<a href="../servlet/ManageOrder?method=<%if(PublicToolCheckParam.checkNullAndEmpty(isSearching)){out.println("search&key="+request.getAttribute("key")+"");}else{out.println("showManageOrderPage");}%>¤tPage=<%=request.getAttribute("nextPage")%>">下一页</a>
<a href="../servlet/ManageOrder?method=<%if(PublicToolCheckParam.checkNullAndEmpty(isSearching)){out.println("search&key="+request.getAttribute("key")+"");}else{out.println("showManageOrderPage");}%>¤tPage=<%=request.getAttribute("lastPage")%>">尾页</a>
</div></td></tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>