目 录
1 手机商品销售网站概述
1.1 课题简介
在手机商城的构建与运营过程中,HTML、CSS、JSP、Java、JDBC等各类技术均发挥了至关重要的作用,它们各司其职、协同配合,为电子设备爱好者提供了一个规范、专业且高效的 手机选购平台。
HTML与CSS以其卓越的性能,共同打造出一个规范、美观的前端界面,为用户带来优质的视觉体验;JSP则充分发挥其技术优势,将手机详情等关键信息准确、全面地展示给用户,使用户能够深入了解手机的特点与优势。
Java技术以其强大的处理能力,承担着商城中交易处理、订单管理等一系列核心业务,确保了商城运营的平稳与顺畅;而JDBC则负责数据存储与管理工作,确保了商城数据的准确性、完整性和安全性。
在MVC架构的指导下,Servlet发挥着关键的调控作用,它协调各个组件的协同工作,确保了商城系统的高效有序运行。
手机商城的设立,不仅推动了电子设备文化的普及与发展,更为广大电子设备爱好者提供了一个专业、可靠的选购平台。通过该平台,电子设备爱好者可以便捷地浏览各类手机信息,选择心仪的手机,满足对电子设备的热爱与追求。同时,手机商城的运营也促进了电子设备产业的繁荣与发展,为电子设备文化的传承与创新作出了积极贡献。
1.2 设计目的
本手机商品销售网站的设计目的在于为用户提供一个便捷、高效的手机购物平台,满足用户对于手机购买的需求。通过该网站,用户可以轻松浏览各类手机产品的详细信息,包括型号、配置、价格等,并能够根据自己的需求进行筛选和比较。
1.3 系统开发所采用的技术
1.3.1 开发工具
本系统使用idea作为开发工具,它提供了丰富的功能和插件,方便进行代码编写、调试和项目管理。
1.3.2 开发使用的数据库系统
使用MySQL数据库系统,版本为8.0。MySQL具有稳定性高、性能优越、易于使用等优点,能够满足本系统对数据存储和管理的需求。
1.3.3 系统环境
操作系统为Windows 10。
1.4 系统功能模块
首页:展示手机分类和推荐手机,包括上新品、特惠、热销榜等。
分类:按照手机类型进行分类,方便用户浏览和筛选。
购物车:用户可以将感兴趣的手机添加到购物车中,进行结算和购买。
搜索栏:用户可以通过输入关键词搜索手机。
登录功能:用户需要登录才能进行购买和管理订单等操作。
注册功能:新用户可以注册账号。
分页查询所有商品功能:可以分页查看所有手机商品信息。
分页条件查询商品功能:支持按照条件进行分页查询,如价格区间、品牌等。
购物车功能:用户可以对购物车中的商品进行管理,如修改数量、删除等。
订单管理功能:用户可以查看订单状态、交易详情等。
图1-1功能图
2 数据库设计
2.1 建立的数据库名称
本系统建立的数据库名称为"phoneshop"。
2.2 所使用的表
手机表(s_phone)
字段名 | 类型 | 约束 | 介绍 |
phoneId | INT | 主键,自增 | 手机的唯一标识符 |
catalogId | INT | 外键,关联s_catalog表的catalogId | 手机所属的分类ID |
phoneName | VARCHAR(50) | 无 | 手机的名称 |
author | VARCHAR(50) | 无 | 手机的作者 |
press | VARCHAR(50) | 无 | 手机的出版社 |
price | DECIMAL(10, 2) | 无 | 手机的价格 |
description | VARCHAR(200) | 无 | 手机的描述 |
imgId | INT | 无 | 手机图片的ID |
addTime | DATETIME | 无 | 手机的添加时间 |
用户表(s_user)
字段名 | 类型 | 约束 | 介绍 |
userId | INT | 主键,自增 | 用户的唯一标识符 |
userName | VARCHAR(50) | 唯一约束 | 用户名 |
passWord | VARCHAR(50) | 无 | 密码 |
| VARCHAR(50) | 无 | 邮箱 |
购物车表(s_cart)
字段名 | 类型 | 约束 | 介绍 |
cartId | INT | 主键,自增 | 购物车的唯一标识符 |
userId | INT | 外键,关联s_user表的userId | 购物车所属的用户ID |
订单表(s_order)
字段名 | 类型 | 约束 | 介绍 |
orderId | INT | 主键,自增 | 订单的唯一标识符 |
orderNum | VARCHAR(50) | 无 | 订单号 |
userId | INT | 外键,关联s_user表的userId | 订单所属的用户ID |
orderDate | DATETIME | 无 | 订单日期 |
money | DECIMAL(10, 2) | 无 | 交易金额 |
orderStatus | INT | 无 | 订单状态 |
订单详情表(s_orderitem)
字段名 | 类型 | 约束 | 介绍 |
itemId | INT | 主键,自增 | 订单详情的唯一标识符 |
phoneId | INT | 外键,关联s_phone表的phoneId | 订单中手机的ID |
orderId | INT | 外键,关联s_order表的orderId | 订单的ID |
quantity | INT | 无 | 手机的数量 |
3 手机商品销售网站设计与实现
系统根据用户选择的每页数量和当前页码,从数据库中查询相应的商品信息。
将查询结果返回给用户,并显示在页面上。
图3-1 首页
图3-2 查询
DAO:
package dao;
import bean.phone;
import bean.PageBean;
public interface phoneDao {
// 获取手机总数
long phoneReadCount();
// 获取手机分页列表(视图)
List<phone> phoneList(PageBean pageBean);
// 按分类获取手机数量
long phoneReadCount(int catalogId);
// 按关键字获取手机数量
long phoneReadCount(String phoneName);
// 按分类获取手机分页列表(视图)
List<phone> phoneList(PageBean pageBean, int catalogId);
// 按分类获取手机分页列表(视图)
List<phone> phoneList2(PageBean pageBean, String phoneName);
// 增加手机
boolean phoneAdd(phone phone);
// 根据手机 id 查找手机信息(视图)
phone findphoneById(int phoneId);
// 根据手机名称查找手机是否存在
boolean findphoneByphoneName(String phoneName);
// 更新手机信息
boolean phoneUpdate(phone phone);
// 根据 id 删除手机
boolean phoneDelById(int phoneId);
// 根据 id 串查询图片 id 串
String findimgIdByIds(String ids);
// 批量删除手机
boolean phoneBatDelById(String ids);
// 随机获取指定数量手机
List<phone> phoneList(int num);
// 获取指定数量新添加的手机
List<phone> newphones(int num);
}
Servlet:
@WebServlet("/phoneList")
public class phoneList extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final int MAX_LIST_SIZE = 12;
private static final String phoneLIST_PATH = "jsp/phone/phonelist.jsp";
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
if (action == null) {
action = "list";
}
switch (action) {
case "d":
break;
case "list":// 默认全部手机列表
phoneList(request, response);
break;}}
3.2.会员登录功能:
用户输入用户名和密码后,系统验证用户名和密码是否匹配。
如果匹配,将用户信息存储在 session 中,并跳转到首页。
如果不匹配,提示用户用户名或密码错误。
图3-3 登录
DAO:
package dao;
import bean.User;
import bean.PageBean;
public interface UserDao {
// 获取总记录数
long phoneReadCount();
// 获取用户列表(分页显示)
List<User> userList(PageBean pageBean);
// 查找用户名是否存在
boolean findUser(String userName);
// 根据 id 获取一个用户的信息
User findUser(Integer id);
// 增加用户
boolean userAdd(User user);
// 更新用户
boolean userUpdate(User user);
// 根据 id 删除一个用户
boolean delUser(int id);
// 根据一组 id 字符串批量删除用户
boolean batDelUser(String ids);
// 登陆
User userLogin(User user);
}
Servlet: @WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String LOGIN_PATH = "jsp/phone/reg.jsp?type=login";
private static final String REG_PATH = "jsp/phone/reg.jsp?type=reg";
private static final String INDEX_PATH = "jsp/phone/index.jsp";
private static final String LANDING = "landing"; // 前台用户 session 标识
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
switch (action) {
case "login":
login(request, response);
break;
case "off":
offlogin(request, response);
break;
case "ajlogin":
ajlogin(request, response);
break;
case "reg":
reg(request, response);
break;
case "landstatus":
landstatus(request, response);
break;}}
用户输入用户名、密码、邮箱等信息后,系统验证用户名是否已存在。
如果不存在,将用户信息存储到数据库中,并提示注册成功。
如果已存在,提示用户用户名已存在。
图3-4注册
DAO:
package dao;
import bean.User;
import bean.PageBean;
public interface UserDao {
// 获取总记录数
long phoneReadCount();
// 获取用户列表(分页显示)
List<User> userList(PageBean pageBean);
// 查找用户名是否存在
boolean findUser(String userName);
// 根据 id 获取一个用户的信息
User findUser(Integer id);
// 增加用户
boolean userAdd(User user);
// 更新用户
boolean userUpdate(User user);
// 根据 id 删除一个用户
boolean delUser(int id);
// 根据一组 id 字符串批量删除用户
boolean batDelUser(String ids);
// 登陆
User userLogin(User user);}
Servlet:
@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String LOGIN_PATH = "jsp/phone/reg.jsp?type=login";
private static final String REG_PATH = "jsp/phone/reg.jsp?type=reg";
private static final String INDEX_PATH = "jsp/phone/index.jsp";
private static final String LANDING = "landing"; // 前台用户 session 标识
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response); }
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
switch (action) {
case "login":
login(request, response);
break;
case "off":
offlogin(request, response);
break;
case "ajlogin":
ajlogin(request, response);
break;
case "reg":
reg(request, response);
break;
case "landstatus":
landstatus(request, response);
break;} }
3.4.购物车功能:
用户可以将商品添加到购物车中。
用户可以在购物车中修改商品数量、删除商品等。
用户可以结算购物车中的商品,生成订单。
图3-5购物车
DAO:
package dao;
import bean.Cart;
import bean.CartItem;
import bean.phone;
import bean.PageBean;
public interface CartDao {
// 添加商品到购物车
boolean addTOCart(CartItem cartItem);
// 根据购物车 ID 获取购物车
Cart getCartById(int cartId);
// 更新购物车商品数量
boolean updateCartItemQuantity(CartItem cartItem);
// 删除购物车商品
boolean delCartItem(CartItem cartItem);
// 清空购物车
boolean delAllCartItems(int cartId);
}
Servlet:
@WebServlet("/CartServlet")
public class CartServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
switch (action) {
case "add":
addTOCart(request, response);
break;
case "changeIn":
changeIn(request, response);// 更改购物车商品数量
break;
case "delItem":
delItem(request, response);
break;
case "delAll":
delAll(request, response);
}
}
3.5.订单管理功能:
用户可以查看自己的订单信息,包括订单状态、交易详情等。
用户可以对订单进行管理,如取消订单、确认收货等。
图3-6 订单
package service;
import bean.Order;
import bean.OrderItem;
import bean.PageBean;
import bean.User;
import dao.phoneDao;
import dao.OrderDao;
import dao.OrderItemDao;
import dao.UserDao;
import java.util.Collections;
import java.util.List;
public class OrderService {
OrderDao dao = new OrderDao() {
@Override
public boolean orderAdd(Order order) {
return false;
}
@Override
public int findOrderIdByOrderNum(String orderNum) {
return 0;
}
@Override
public long orderReadCount() {
return 0;
}
@Override
public long orderReadCount(int userId) {
return 0;
}
@Override
public long orderReadCountByStatus(int status) {
return 0;
}
@Override
public List<Order> orderList(PageBean pageBean) {
return Collections.emptyList();
}
@Override
public List<Order> orderList(PageBean pageBean, int userId) {
return Collections.emptyList();
}
@Override
public List<Order> orderListByStatus(PageBean pb, int status) {
return Collections.emptyList();
}
@Override
public Order findOrderByOrderId(int orderId) {
return null;
}
@Override
public boolean orderStatus(int orderId, int status) {
return false;
}
}
Servlet:@WebServlet("/OrderManageServlet")
public class OrderManageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String ORDERLIST_PATH = "orderManage/orderlist.jsp";
private static final String ORDERDETAIL_PATH = "orderManage/orderDetail.jsp";
private static final String ORDEROP_PATH = "orderManage/orderOp.jsp";
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
switch (action) {
case "list":
orderList(request, response);
break;
case "detail":
orderDetail(request, response);
break;
case "processing":
orderProcessing(request, response);
case "ship":
orderShip(request, response);
}
}
4 课程设计总结
通过本次课程设计,我对JavaWeb应用开发有了更深入的理解和认识。在开发手机商品销售网站的过程中,我学到了很多知识和技能。
首先,我熟悉了整个项目的开发流程,从需求分析、数据库设计到系统实现和测试,每一个环节都需要认真对待。在需求分析阶段,我充分了解了用户的需求,明确了系统的功能和目标,为后续的开发工作奠定了基础。在数据库设计阶段,我合理地设计了数据库表结构,确保了数据的完整性和一致性。
其次,我掌握了JavaWeb开发中的一些关键技术,如Servlet、JSP、JDBC等。通过使用这些技术,我能够实现用户登录、注册、商品查询、购物车管理、订单管理等功能。同时,我还学会了如何使用MVC架构来组织代码,提高了代码的可读性和可维护性。
此外,在开发过程中,我也遇到了一些问题和挑战。例如,在实现购物车功能时,如何处理商品数量的修改和删除操作;在进行订单管理时,如何确保订单状态的准确更新等。通过查阅资料、请教老师和同学,我最终解决了这些问题,提高了自己的解决问题的能力。
总的来说,本次课程设计让我受益匪浅。我不仅学到了专业知识,还提高了自己的实践能力和团队合作能力。我相信,这些经验和技能将对我今后的学习和工作产生积极的影响。