基于JavaEE网上购物系统
1.绪论
1.1 课题背景
网上购物的悄然兴起,是社会经济发展的一个产物,与传统的店铺相比,网上购物系统的开发具有一定的优势。对于传统的店铺来讲,选一个比较好的地段是非常重要的,这个地段的优劣直接决定了这家店铺以后的发展,而如果选择网上的话就不存在选址这一说,世界各地都可以看到你出售的商品。现如今开得最火热的网上购物网站要属淘宝、京东等网上购物平台,这些购物平台都进驻了很多的买家,无店铺销售的方式,让卖家减少了从生产到销售过程中的一些环节,这样卖家的经营成本也降低了,消费者也能在网上买到比实体店更便宜的商品。当然开店是比较有风险的,但在淘宝上,你只要注册一个账号就能在淘宝上开自己的店铺,对于个人来说,网上销售这样的形式降低了商家进驻的门槛。
当今电子商城是商品交易最频繁的场所,卖家利用系统管理经营,提高了管理员的工作的效率,减少工作中的可能出现的错误,为消费者提供更好的服务。商家就是利用网络这个平台在网络上实现买家与卖家的沟通与交流,网络销售与实体店相比还是具有很多的优点,它具有完善的购物流程,可以在任何时候下单完成买家的需求。对于公司而言,可以拓宽空间减少成本,提高运营的效率。顾客可以在网上比价,找出性价比比较高的产品,从而可以选到自己喜欢的商品。由此看来电子商务的建设与发展已经成为以后重要的一个发展方向。
网上购物系统的开发的建设增强了企业的竞争力,而且它具有用户使用方便、界面简洁大方、运行速度快、数据信息易于管理、系统维护方便等方面的特点。通过网页的形式展示要出售的商品,各模块操作引导客户进行购买流程,在用户选择商品购买之后,通过网络进行支付相关的费用,支付的类型多样化,可通过银行、支付宝、微信等方式支付。通过物流就可以把用户向商城购买的商品送到用户的手中。
1.2 课题研究的目的和意义
人们现在的生活方式因为网络的普及发生了巨大变化,由于电子商务在人们的视野中出现,人们对电子商务额外的关注。人们可以足不出户买到世界各地的商品,网上商城可以销售各式各样的产品,其中包括虚拟产品、电子产品、日常生活用品、各种商品等等。我们的目标不只是在网上展示我们的产品,更重要的是,让更多的用户了解产品创造更多的商机。所以我们目前的挑战是前台界面的设计,要把顾客的眼球吸引住,选则比较人性化的界面设计,要更直观的表现,让顾客能更多的了解产品的作用和功效,从而上顾客买到喜欢的商品。
本系统的主要意义在于,全力以赴为用户提供一个操作方便,界面简洁,信息直观的网上交易系统。使用该系统的用户,可以先浏览到最新上架的新品和最热门的产品,并可以注册成为本网站的用户,可以利用购物车选择自己想买的产品,然后向商品提交订单,从而完成网上的交易流程。
1.3 论文所做的主要工作
本论文的内容是关于网上购物系统的开发的设计与实现,主要内容不仅包括了系统的分析和设计还对几个主要模块进行详细阐述与分析。此网上购物系统的开发分为管理员操作和用户操作。用户的操作主要是可以在网页上浏览到商品的信息,通过首页、鞋靴、孕装、女装、男装、童装等,消费者可以通过网站注册属于自己的一个账号,拥有权限可以修改自己的用户信息,通过商品分类列表,可以快速的找到用户想购买商品的分类,然后在分类目录下找到商品,并向系统下订单。管理员的操作,只有管理员才可以登录后台进行操作,后台管理主要是针对一些产品信息的添加,更新,给管理员权限对用户进行修改,可以在后台看到用户下的订单从而进行管理。本文将从分析部分开始论述,消费者需要什么样的网站,怎样的操作界面能保证系统的易用性,然后从功能分析开始思考需要怎样的数据逻辑结构,把数据逻辑结构建成数据实体,最后从几个主要模块部分论述如何实现这些功能。
2. 系统分析与设计
2.1系统说明
网上购物系统的开发是一个中小型的网上购物平台,人们可以在网络上进行购买商品,不用出门就可以买到自己想要的东西,本系统是属于商品类型的销售系统。用户可以在首页、鞋靴、孕装、女装、男装、童装等里面找到用户自己想要买到的商品,可把多样商品一起装入购物车,然后提交购买订单进行购买流程。管理员可以通过对首页、我的订单、个人中心、购物车、会员中心等管理等来对系统进行日常的更新与维护。
2.2 系统功能的分析
整个网上购物系统的开发为了便于用户购买与管理员管理,采用了以下几大功能管理模块,包括管理员与用户的设计:
- 用户模块:该模块包含了几个子模块包括
- 用户登录:用户登录功能是用来识别已在本网站注册过的用户,能根据用户的信息方便的为用户提供服务。最重要的是,系统需要登记用户所购买的商品的信息等等一些的情况,最后为用户生成购物订单。
- 用户注册账号:填写相关用户信息的资料,用于用户登录本系统,进行用商品的购买。包括用户的用户账号、用户姓名、密码、手机号码、邮箱、地址等等信息,可让用户先登录本系统,然后修改自己的信息,用户只有通过注册成为本网站的用户,才能在本网站页面购物商品,否则只能浏览网页上的商品而不能进行购买。
- 用户资料修改:该模块功能主要是针对用户注册资料的修改,比如用户登录到本系统中,想修改自己的密码、电话号码和家庭住址等信息可以通过用户资料修改页来实现用户资料修改。
浏览商品模块:该模块可让打开本系统的用户看到系统上出售的商品,不管是登录的用户还是未登录的用户都可以查看本网站上的商品。 - 购买商品模块:此模块功能只提供在本网站已注册的用户,先要登录本网站系统,然后在浏览页选择想购买的商品,可添加删除购物车的物品,然后选择收银台结账功能,可选择修改用户所需的信息,通过此流程可向商城下订单。
- 商品管理模块:管理员可以管理所有的商品,不同的商品可以分类到不同的列表,这样用户就可以快速找到想要的商品,其中可添加飞鞋靴、孕装、女装、男装、童装等,可修改和删除上传的记录。
- 用户管理模块:管理员可查询、验证在本网站注册的用户信息,同时有权限可以修改用户的信息,管理员也可以删除任何一个用户的账号。
- 订单管理模块:此模块可看到用户在网站买下的商品和一些关于订单的信息,还可查看是否执行些订单。
2.3 系统的设计思路
关于网上购物系统的开发,我找到许多的电子商城设计的书籍,对Java进行了更进一步的了解,在整体设计方面选择了比较清新的颜色,系统网页的颜色不要过于花哨,要能使整个页面看起来很统一,所以选择了比较简洁大方的设计。数据库采用的是Mysql数据库,本网站对用户进行了权限的设计,为了数据库的安全普通的用户只拥有浏览商品页面的功能,而且购买商品的话,就需要先到用户注册页面去注册一个属于自己的账号,然后通过登录然后才能进行购买。最后,在主要功能模块都能实现之后,再对整个网站进行反复的测试与修改,这样就能达到自己理想的效果。
2.4 系统的设计思想
一个优秀的设计作品,必然要有一个正确的构想,通过选择合理的开发工具、数据结构和操作系统来构成一个完善的网上购物系统的开发,根据消费者的实际需求,本网上购物系统的开发的设计按照以下的原则来进行设计。
- 实用性
本网上购物系统的开发以消费者购物需求为目标,以方便使用本系统的用户为原则,同时加入一些先进的设计理念。根据消费者不同的需求制作一个操作界面简单、模块功能完善、便于管理的购物平台,能够充分的满足消费者的需求并方便于本网站的管理人员对网站实行管理。 - 可靠性
一个好的网站必须具有高的可靠性,该系统通过结合先进的结构设计和数据的安全性,可以保证本系统具有高可靠性还有容错性,便于本系统不会出现一些不必要的错误信息,妨碍系统的管理。 - 智能性
本系统的设计要求便于系统的管理员管理本系统,用户可以根据自己的需求通过不同的模块入口进入不同的商品浏览页,通过后台商品列表的编辑与更新,可使消费者看到最新的商品信息,并且方便为更多的用户提供服务。 - 扩展性与灵活性
系统的模块设计主要以方便系统业务拓展和方便用户需求为目标,要求消费者能够很方便的浏览商品,并通过自身的需求能够快速搜索到自己想购买的产品。
2.5 系统功能结构
- 用户管理功能
该部分内容提供用户注册、用户资料修改、个人中心、我的订单、购物车、会员中心查看等等,用户能够进行用户信息的注册、用户信息的修改和提交订单功能。 - 管理员管理功能
该部分内容包含了首页、商城后台管理、类目管理、属性管理、商品管理、订单管理、用户管理、管理员管理、退出等。管理员可对所有的产品信息进行增、删、改、查,能对用户信息和订单进行管理,更新最近的商品信息。
2.6 系统结构图
整个系统的模块划分包含用户管理模块和管理员管理模块, 用户管理模块和管理员管理模块又划分了若干了子模块,为了方便更直观的理解,下图以图形形式给出关于整个系统的结构图。
2.7 网上购物系统的开发业务流程
该流程图显示由用户进行浏览该网站的操作,顾客进入网站浏览上架商品,选择自己需要的商品,没有登录的用户都不能进行购买流程,都必须是注册用户点进去注册页面进行注册,注册登录成功的用户选择产品放进购物车,点击进行支付的按钮,这样系统就会生成订单,管理员就可在后台看到用户下的订单。
3. 系统部分截图
3.1.首页
3.2.分类商品
3.3.商品详情
3.4.购物车
3.5.我的订单
3.6.确认订单
3.7.后台登录
3.8.类目管理
3.9.客户管理
3.10.属性管理
3.11.管理员管理
3.12.订单管理
3.13.商品管理
4.文档截图
5.部分源码
/**
* 后台相关接口
*/
@Controller
@RequestMapping("/admin")
public class AdminController {
private static final int rows = 10;
@Autowired
private AdminService adminService;
@Autowired
private OrderService orderService;
@Autowired
private UserService userService;
@Autowired
private GoodService goodService;
@Autowired
private TopService topService;
@Autowired
private TypeService typeService;
@Autowired
private SkuService skuService;
/**
* 管理员登录
* @return
*/
@GetMapping("/login")
public String log() {
return "/admin/login.jsp";
}
/**
* 管理员登录
* @return
*/
@PostMapping("/login")
public String login(Admins admin, HttpServletRequest request, HttpSession session) {
if (adminService.checkUser(admin.getUsername(), admin.getPassword())) {
session.setAttribute("username", admin.getUsername());
return "redirect:typeList";
}
request.setAttribute("msg", "用户名或密码错误!");
return "/admin/login.jsp";
}
/**
* 退出
* @return
*/
@RequestMapping("/logout")
public String logout(HttpSession session) {
session.removeAttribute("admin");
return "/admin/login.jsp";
}
/**
* 后台首页
* @return
*/
@RequestMapping("/index")
public String index(HttpServletRequest request) {
request.setAttribute("msg", "恭喜你! 登录成功了");
return "/admin/index.jsp";
}
/**
* 类目列表
*
* @return
*/
@RequestMapping("/typeList")
public String typeList(HttpServletRequest request) {
request.setAttribute("flag", 1);
request.setAttribute("typeList", typeService.getList());
return "/admin/type_list.jsp";
}
/**
* 类目添加
*
* @return
*/
@RequestMapping("/typeAdd")
public String typeAdd(HttpServletRequest request) {
request.setAttribute("flag", 1);
return "/admin/type_add.jsp";
}
/**
* 类目添加
*
* @return
* @throws Exception
*/
@RequestMapping("/typeSave")
public String typeSave(Types type, MultipartFile file,
@RequestParam(required=false, defaultValue="1") int page) throws Exception {
type.setCover(UploadUtil.upload(file));
typeService.add(type);
return "redirect:typeList?flag=1&page="+page;
}
/**
* 类目更新
*
* @return
*/
@RequestMapping("/typeEdit")
public String typeEdit(int id, HttpServletRequest request) {
request.setAttribute("flag", 1);
request.setAttribute("type", typeService.get(id));
return "/admin/type_edit.jsp";
}
/**
* 类目更新
*
* @return
* @throws Exception
*/
@RequestMapping("/typeUpdate")
public String typeUpdate(Types type, MultipartFile file,
@RequestParam(required=false, defaultValue="1") int page) throws Exception {
if (Objects.nonNull(file) && !file.isEmpty()) {
type.setCover(UploadUtil.upload(file));
}
typeService.update(type);
return "redirect:typeList?flag=1&page="+page;
}
/**
* 类目删除
*
* @return
*/
@RequestMapping("/typeDelete")
public String typeDelete(Types type,
@RequestParam(required=false, defaultValue="1") int page) {
typeService.delete(type);
return "redirect:typeList?flag=1&page="+page;
}
/**
* sku列表
*
* @return
*/
@RequestMapping("/skuList")
public String skuList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request) {
request.setAttribute("flag", 2);
request.setAttribute("status", status);
request.setAttribute("skuList", status>0 ? skuService.getSizeList() : skuService.getColorList());
return "/admin/sku_list.jsp";
}
/**
* sku添加
*
* @return
*/
@RequestMapping("/skuSave")
public String skuSave(String name, int status) {
if(status > 0) {
skuService.addSize(name);
}else {
skuService.addColor(name);
}
return "redirect:skuList?status="+status;
}
/**
* sku删除
*
* @return
*/
@RequestMapping("/skuDelete")
public String skuDelete(int id, int status) {
if(status > 0) {
skuService.deleteSize(id);
}else {
skuService.deleteColor(id);
}
return "redirect:skuList?status="+status;
}
/**
* 产品列表
*
* @return
*/
@RequestMapping("/goodList")
public String goodList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
request.setAttribute("flag", 3);
request.setAttribute("page", page);
request.setAttribute("status", status);
request.setAttribute("goodList", goodService.getList(status, page, rows));
request.setAttribute("pageTool", PageUtil.getPageTool(request, goodService.getTotal(status), page, rows));
return "/admin/good_list.jsp";
}
/**
* 产品添加
*
* @return
*/
@RequestMapping("/goodAdd")
public String goodAdd(HttpServletRequest request) {
request.setAttribute("flag", 3);
request.setAttribute("typeList", typeService.getList());
request.setAttribute("colorList", skuService.getColorList());
request.setAttribute("sizeList", skuService.getSizeList());
return "/admin/good_add.jsp";
}
/**
* 产品添加
*
* @return
* @throws Exception
*/
@RequestMapping("/goodSave")
public String goodSave(Goods good, MultipartFile file,
@RequestParam(required=false, defaultValue="1") int page) throws Exception {
good.setCover(UploadUtil.upload(file));
goodService.add(good);
return "redirect:goodList?flag=3&page="+page;
}
/**
* 产品更新
*
* @return
*/
@RequestMapping("/goodEdit")
public String goodEdit(int id, HttpServletRequest request) {
request.setAttribute("flag", 3);
request.setAttribute("typeList", typeService.getList());
request.setAttribute("colorList", skuService.getColorList());
request.setAttribute("sizeList", skuService.getSizeList());
request.setAttribute("good", goodService.get(id));
return "/admin/good_edit.jsp";
}
/**
* 产品更新
*
* @return
* @throws Exception
*/
@RequestMapping("/goodUpdate")
public String goodUpdate(Goods good, MultipartFile file,
@RequestParam(required=false, defaultValue="1") int page) throws Exception {
if (Objects.nonNull(file) && !file.isEmpty()) {
good.setCover(UploadUtil.upload(file));
}
goodService.update(good);
return "redirect:goodList?flag=3&page="+page;
}
/**
* 产品删除
*
* @return
*/
@RequestMapping("/goodDelete")
public String goodDelete(int id,
@RequestParam(required=false, defaultValue="1") int page) {
goodService.delete(id);
return "redirect:goodList?flag=3&page="+page;
}
/**
* 添加推荐
* @return
*/
@RequestMapping("/topSave")
public @ResponseBody String topSave(Tops tops,
@RequestParam(required=false, defaultValue="0")byte status,
@RequestParam(required=false, defaultValue="1") int page) {
int id = topService.add(tops);
return id > 0 ? "ok" : null;
}
/**
* 删除推荐
* @return
*/
@RequestMapping("/topDelete")
public @ResponseBody String topDelete(Tops tops,
@RequestParam(required=false, defaultValue="0")byte status,
@RequestParam(required=false, defaultValue="1") int page) {
boolean flag = topService.delete(tops);
return flag ? "ok" : null;
}
/**
* 订单列表
*
* @return
*/
@RequestMapping("/orderList")
public String orderList(@RequestParam(required=false, defaultValue="0")byte status, HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
request.setAttribute("flag", 4);
request.setAttribute("status", status);
request.setAttribute("orderList", orderService.getList(status, page, rows));
request.setAttribute("pageTool", PageUtil.getPageTool(request, orderService.getTotal(status), page, rows));
return "/admin/order_list.jsp";
}
/**
* 订单发货
*
* @return
*/
@RequestMapping("/orderDispose")
public String orderDispose(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.dispose(id);
return "redirect:orderList?flag=4&status="+status+"&page="+page;
}
/**
* 订单完成
*
* @return
*/
@RequestMapping("/orderFinish")
public String orderFinish(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.finish(id);
return "redirect:orderList?flag=4&status="+status+"&page="+page;
}
/**
* 订单删除
*
* @return
*/
@RequestMapping("/orderDelete")
public String orderDelete(int id, byte status,
@RequestParam(required=false, defaultValue="1") int page) {
orderService.delete(id);
return "redirect:orderList?flag=4&status="+status+"&page="+page;
}
/**
* 顾客管理
*
* @return
*/
@RequestMapping("/userList")
public String userList(HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
request.setAttribute("flag", 5);
request.setAttribute("userList", userService.getList(page, rows));
request.setAttribute("pageTool", PageUtil.getPageTool(request, userService.getTotal(), page, rows));
return "/admin/user_list.jsp";
}
/**
* 顾客添加
*
* @return
*/
@RequestMapping("/userAdd")
public String userAdd(HttpServletRequest request) {
request.setAttribute("flag", 5);
return "/admin/user_add.jsp";
}
/**
* 顾客添加
*
* @return
*/
@RequestMapping("/userSave")
public String userSave(Users user, HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
if (userService.isExist(user.getUsername())) {
request.setAttribute("msg", "用户名已存在!");
return "/admin/user_add.jsp";
}
userService.add(user);
return "redirect:userList?flag=5&page="+page;
}
/**
* 顾客密码重置页面
*
* @return
*/
@RequestMapping("/userRe")
public String userRe(int id, HttpServletRequest request) {
request.setAttribute("flag", 5);
request.setAttribute("user", userService.get(id));
return "/admin/user_reset.jsp";
}
/**
* 顾客密码重置
*
* @return
*/
@RequestMapping("/userReset")
public String userReset(Users user,
@RequestParam(required=false, defaultValue="1") int page) {
String password = SafeUtil.encode(user.getPassword());
user = userService.get(user.getId());
user.setPassword(password);
userService.update(user);
return "redirect:userList?page="+page;
}
/**
* 顾客更新
*
* @return
*/
@RequestMapping("/userEdit")
public String userEdit(int id, HttpServletRequest request) {
request.setAttribute("flag", 5);
request.setAttribute("user", userService.get(id));
return "/admin/user_edit.jsp";
}
/**
* 顾客更新
*
* @return
*/
@RequestMapping("/userUpdate")
public String userUpdate(Users user,
@RequestParam(required=false, defaultValue="1") int page) {
userService.update(user);
return "redirect:userList?flag=5&page="+page;
}
/**
* 顾客删除
*
* @return
*/
@RequestMapping("/userDelete")
public String userDelete(Users user,
@RequestParam(required=false, defaultValue="1") int page) {
userService.delete(user);
return "redirect:userList?flag=5&page="+page;
}
/**
* 管理员列表
*
* @return
*/
@RequestMapping("/adminList")
public String adminList(HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
request.setAttribute("flag", 6);
request.setAttribute("adminList", adminService.getList(page, rows));
request.setAttribute("pageTool", PageUtil.getPageTool(request, adminService.getTotal(), page, rows));
return "/admin/admin_list.jsp";
}
/**
* 管理员添加
*
* @return
*/
@RequestMapping("/adminAdd")
public String adminAdd(HttpServletRequest request) {
request.setAttribute("flag", 6);
return "/admin/admin_add.jsp";
}
/**
* 管理员密码重置
*
* @return
*/
@RequestMapping("/adminRe")
public String adminRe(int id, HttpServletRequest request) {
request.setAttribute("flag", 6);
request.setAttribute("admin", adminService.get(id));
return "/admin/admin_reset.jsp";
}
/**
* 管理员密码重置
*
* @return
*/
@RequestMapping("/adminReset")
public String adminReset(Admins admin, HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
String password = SafeUtil.encode(admin.getPassword());
admin = adminService.get(admin.getId());
admin.setPassword(password);
adminService.update(admin);
return "redirect:adminList?page="+page;
}
/**
* 管理员添加
*
* @return
*/
@RequestMapping("/adminSave")
public String adminSave(Admins admin, HttpServletRequest request,
@RequestParam(required=false, defaultValue="1") int page) {
if (adminService.isExist(admin.getUsername())) {
request.setAttribute("msg", "用户名已存在!");
return "/admin/admin_add.jsp";
}
adminService.add(admin);
return "redirect:adminList?flag=6&page="+page;
}
/**
* 管理员修改
*
* @return
*/
@RequestMapping("/adminEdit")
public String adminEdit(int id, HttpServletRequest request) {
request.setAttribute("flag", 6);
request.setAttribute("admin", adminService.get(id));
return "/admin/admin_edit.jsp";
}
/**
* 管理员更新
*
* @return
*/
@RequestMapping("/adminUpdate")
public String adminUpdate(Admins admin,
@RequestParam(required=false, defaultValue="1") int page) {
admin.setPassword(SafeUtil.encode(admin.getPassword()));
adminService.update(admin);
return "redirect:adminList?flag=6&page="+page;
}
/**
* 管理员删除
*
* @return
*/
@RequestMapping("/adminDelete")
public String adminDelete(Admins admin,
@RequestParam(required=false, defaultValue="1") int page) {
adminService.delete(admin);
return "redirect:adminList?flag=6&page="+page;
}
}