栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Cocos2d-x

JavaWeb购物系统(课程设计)

Cocos2d-x 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb购物系统
  • 项目描述
  • 项目演示
    • 系统首页
    • 注册与登录
    • 商品详情
    • 购物车信息
    • 订单详情
    • 注销
  • 部分代码
    • index.jsp
    • JdbcUtils.java
    • People.java
    • PeopleDao.java
    • PeopleDaoImpl.java
    • PeopleService.java
    • PeopleService.java
    • CheckCodeServlet.java
  • 相关文件

项目描述

基于B/S三层架构设计的购物系统,可以更好地符合“高内聚,低耦合”的设计思想。表现层(UI)通过JSP在浏览器上实现界面展示,通过Servlet接受用户请求并生成验证码等实时信息;数据访问层(DAL)通过JDBC对DBMS进行访问;二者之间的业务逻辑层(BLL)通过Service进行连接。同时面向接口编程提高规范化。这只是我自己用两三天的时间做的小项目,距离真正的购物系统差距还是很大的,仅供初学者参考,很多逻辑缺陷不必太纠结。

如果只需要代码可直接通过书签栏跳转至相关文件。

项目演示 系统首页

这是购物系统首页,仿照华为商城设计,具体实现借助于Bootstrap,商品信息通过后台数据库读取


如果此时点击商品会通过Session中的登陆信息判断登陆状态,若未登录则提示登录


注册与登录

我们先注册再登录,这里注册斯维因的相关信息。登录页面与注册页面通过js实现正则验证,通过Servlet实现验证码相关功能,背景渐变色借助于WebGradients选取



用刚刚注册的用户进行登录


商品详情

登陆后我们回到首页,点击商品,进入商品详情页


购物车信息

将商品加入购物车后查看购物车,这里会一致显示当前登录用户信息


订单详情

我们提交订单后再查看订单。这里借助jQuery做了一个下拉框,可以查看后台数据库关于此用户的全部订单的全部信息,这里提交订单相当于付款,所以未设退货功能,因此数据删除只能借助于后台数据库


注销

最后点击注销

部分代码 index.jsp
<%--
//                         _ooOoo_
//                        o8888888o
//                        88" . "88
//                        (| -_- |)
//                         O = /O
//                     ____/`---'____
//                   .   ' \| |// `.
//                    / \||| : |||// 
//                  / _||||| -:- |||||- 
//                    | | \ - /// | |
//                  | _| ''---/'' | |
//                    .-__ `-` ___/-. /
//                ___`. .' /--.-- `. . __
//             ."" '< `.____<|>_/___.' >'"".
//            | | : `- `.;` _ /`;.`/ - ` : | |
//                `-. _ __ /__ _/ .-` / /
//      ======`-.____`-.________/___.-`____.-'======
//                         `=---='
//
//      .............................................
//               佛祖保佑             永无BUG
--%>
<%@ page import="util.CustomUtil" %>
<%@ page import="entity.People" %>
<%@ page import="entity.Goods" %>
<%@ page import="service.GoodsService" %>
<%@ page import="service.impl.GoodsServiceImpl" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


	购物系统主页
	
	
	
	
	
	">
	
	
	
	
	


	<%
		People now_people = new People(0, null, null, null, null, 0);
		if (session.getAttribute("now_people") != null) {
			now_people = (People) session.getAttribute("now_people");
		}
		
		CustomUtil.outPosition("yellow", "index.jsp");
		CustomUtil.outParameter("yellow", "now_people", now_people.toString());
		CustomUtil.outParameter("yellow", "base href", request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/");
		
		
		Goods goods = new Goods();
		GoodsService goodsService = new GoodsServiceImpl();
	%>
	

	
	
	
	
	
	
	
	

其他商品








HUAWEI MateBook X

晒单赠内胆包+三期免息

8999元



HUAWEI MateBook 14

2K触控屏轻薄本

6399元起

6999元



荣耀猎人游戏本 V700

强劲游戏性能

7499元起

7999元



HUAWEI MateBook D 14

多屏协同180度开合

5299元



HUAWEI MatePad 10.8

享三期免息

2399元



HUAWEI MatePad Pro

享三期免息

3799元起

3999元



[Wifi6+]荣耀平板V6

现货速发

2798元



华为畅享平板 2

享三期免息

1799元

JdbcUtils.java

用于加载驱动并获得与数据库的连接的工具类

package util;

import java.sql.*;

public class JdbcUtil {
    private static final String driver = "com.mysql.jdbc.Driver";
    private static final String url =
            "jdbc:mysql://localhost:3306/shoppingsystem?characterEncoding=utf-8";//连接字符串
    private static final String user = "root";
    private static final String password = "123";

    private static Connection connection;

    
    public static Connection getConnection() {
        try {
            Class.forName(driver);//通过反射机制加载驱动
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        try {
            connection = DriverManager.getConnection(url, user, password);//获得连接
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

        return connection;
    }

    
    public static void closeAll(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet) {
        if (resultSet != null) {
            try {
                resultSet.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (preparedStatement != null) {
            try {
                preparedStatement.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }
        }
    }
}
People.java

与数据库中用户表相匹配的用户类

package entity;

public class People {

    private int id;//用户编号
    private String password;//用户密码
    private String name;//用户姓名
    private String email;//用户邮箱
    private String address;//用户地址
    private int status;//用户状态

    public People() {
        super();
    }

    public People(int id, String password, String name, String email, String address, int status) {
        this.id = id;
        this.password = password;
        this.name = name;
        this.email = email;
        this.address = address;
        this.status = status;
    }

    @Override
    public String toString() {
        return "People{" +
                "id=" + id +
                ", password='" + password + ''' +
                ", name='" + name + ''' +
                ", email='" + email + ''' +
                ", address='" + address + ''' +
                ", status=" + status +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }
}
PeopleDao.java

对用户信息进行相关操作的接口

package dao;

import entity.People;

public interface PeopleDAO {
    
    public abstract int doInsert(int id, String password, String name, String email, String address, int status);

    public abstract int doDelete(int id, String password);

    public abstract int doUpdate(int id, String password, String name, String email, String address, int status);

    
    public abstract People findByLogin(int id, String password);

    
    public abstract People findById(int id);
}
PeopleDaoImpl.java

对上述接口的实现

package dao.impl;

import dao.PeopleDAO;
import entity.People;
import util.CustomUtil;
import util.JdbcUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class PeopleDAOImpl implements PeopleDAO {

    private Connection connection;
    private PreparedStatement preparedStatement;
    private ResultSet resultSet;

    @Override
    public int doInsert(int id, String password, String name, String email, String address, int status) {
        int result = 0;
        String sql = "INSERT INTO `people` VALUES (" +
                id +
                ", '" + password +
                "', '" + name +
                "', '" + email +
                "', '" + address +
                "', '" + status +
                "');";

        connection = JdbcUtil.getConnection();
        try {
            preparedStatement = connection.prepareStatement(sql);
            result = preparedStatement.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JdbcUtil.closeAll(connection, preparedStatement, resultSet);
        }
        CustomUtil.outPosition("blue", "PeopleDAOImpl.doInsert()");
        CustomUtil.outParameter("blue", "sql", sql);
        CustomUtil.outParameter("blue", "result", String.valueOf(result));

        return result;
    }

    @Override
    public int doDelete(int id, String password) {
        return 0;
    }

    @Override
    public int doUpdate(int id, String password, String name, String email, String address, int status) {
        return 0;
    }

    @Override
    public People findByLogin(int id, String password) {
        People people = new People();
        String sql = "select * from `people` where `id` = '" + id + "' and password = '" + password + "';";

        connection = JdbcUtil.getConnection();
        try {
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                people.setId(resultSet.getInt(1));
                people.setPassword(resultSet.getString(2));
                people.setName(resultSet.getString(3));
                people.setEmail(resultSet.getString(4));
                people.setAddress(resultSet.getString(5));
                people.setStatus(resultSet.getInt(6));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JdbcUtil.closeAll(connection, preparedStatement, resultSet);
        }
        CustomUtil.outPosition("blue", "PeopleDAOImpl.findByLogin()");
        CustomUtil.outParameter("blue", "sql", sql);
        CustomUtil.outParameter("blue", "people", people.toString());

        return people;
    }

    public People findById(int id) {
        People people = new People();
        String sql = "select * from `people` where `id` = '" + id + "';";

        CustomUtil.outPosition("blue", "PeopleDaoImpl.findById()");
        CustomUtil.outParameter("blue", "id", String.valueOf(id));

        connection = JdbcUtil.getConnection();
        try {
            preparedStatement = connection.prepareStatement(sql);
            resultSet = preparedStatement.executeQuery();
            if (resultSet.next()) {
                people.setId(resultSet.getInt(1));
                people.setPassword(resultSet.getString(2));
                people.setName(resultSet.getString(3));
                people.setEmail(resultSet.getString(4));
                people.setAddress(resultSet.getString(5));
                people.setStatus(resultSet.getInt(6));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            JdbcUtil.closeAll(connection, preparedStatement, resultSet);
        }

        CustomUtil.outPosition("blue", "PeopleDAOImpl.findById()");
        CustomUtil.outParameter("blue", "sql", sql);
        CustomUtil.outParameter("blue", "people", people.toString());

        return people;
    }
}
PeopleService.java

在业务逻辑层中将表现层与数据访问层进行连接,由于项目本身并不复杂,所以只是简单实现了方法传递

package service;

import entity.People;

public interface PeopleService {

    
    public abstract int register(People people);

    
    public abstract boolean login(People people);

    
    public abstract People find(int id);

    public abstract boolean alter(People people);
}

PeopleService.java

对上述接口的实现

package service.impl;

import dao.PeopleDAO;
import dao.impl.PeopleDAOImpl;
import entity.People;
import service.PeopleService;
import util.CustomUtil;

public class PeopleServiceImpl implements PeopleService {

    private PeopleDAO peopleDAO = new PeopleDAOImpl();//不实例化会导致空指针异常

    @Override
    public int register(People people) {
        CustomUtil.outPosition("red", "PeopleServiceImpl.register()");
        CustomUtil.outParameter("red", "people", people.toString());

        if (peopleDAO.findById(people.getId()).getId() == 0) {
            if (peopleDAO.doInsert(
                    people.getId(), people.getPassword(), people.getName(),
                    people.getEmail(), people.getAddress(), people.getStatus()) == 1) {
                return 0;
            } else {
                return 2;
            }
        }
        return 1;
    }

    @Override
    public boolean login(People people) {
        if (peopleDAO.findByLogin(people.getId(), people.getPassword()).getId() != 0) {
            return true;
        }
        return false;
    }

    @Override
    public People find(int id) {
        return peopleDAO.findById(id);
    }

    @Override
    public boolean alter(People people) {
        return false;
    }
}

CheckCodeServlet.java

在内存中生成验证码图片并输出到客户端

package servlet;

import util.CustomUtil;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

@WebServlet(name = "CheckCodeServlet", urlPatterns = "/CheckCodeServlet")
public class CheckCodeServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private static int width=70;
    private static int height=25;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        HttpSession session=request.getSession();
        response.setContentType("image/jpeg");//设置生成的文档类型为jpg
        ServletOutputStream servletOutputStream = response.getOutputStream();

        
        response.setHeader("Pragma", "No-cache");
        response.setHeader("Cache-Control", "no-cache");
        response.setDateHeader("Expires", 0);

        
        BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
        Graphics graphics = image.getGraphics();

        char[] rands = generCode();//产生随机的验证码
        drawRands(graphics, rands);//产生图像
        graphics.dispose();//结束图像的绘制过程,完成图像

        
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        ImageIO.write(image, "jpeg", byteArrayOutputStream);
        byte[] buf = byteArrayOutputStream.toByteArray();
        response.setContentLength(buf.length);
        servletOutputStream.write(buf);
        byteArrayOutputStream.close();
        servletOutputStream.close();

        session.setAttribute("checkcode", new String(rands));//将当前的验证码写入到session中
    }

    private char[] generCode() {
        
        String chars = "0123456789";
        char[] rands = new char[5];
        for (int i = 0; i < 5; i++) {
            int rand = (int) (Math.random()*10);
            rands[i] = chars.charAt(rand);
        }
        
        return rands;
    }

    private void drawRands(Graphics g, char[] rands) {
        g.setColor(Color.WHITE);
        g.setFont(new Font(null, Font.ITALIC|Font.BOLD, 18));

        
        g.drawString("" + rands[0], 0, 18);
        g.drawString("" + rands[1], 14, 18);
        g.drawString("" + rands[2], 28, 18);
        g.drawString("" + rands[3], 42, 18);
        g.drawString("" + rands[4], 56, 18);
        CustomUtil.outPosition("green", "CheckCode.drawRands()");
        CustomUtil.outParameter("green", "rands", String.valueOf(rands));
    }
}

相关文件

GitHub链接
项目最初是在Eclipse上做的,后来又在IDEA上进行了大量修改与优化,不过基本功能没有发生太大变化。由于代码差异过多,我将旧版本文件单独备份在ShoppingSystem/web/src/others/old version file/路径下。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/897020.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号