当今因特网的飞速发展正在以极大的的深度和广度影响和改变着人们的生活,越来越多的人逐渐认识到因特网所蕴含的巨大经济利益和商机,都积极投入到电子商务行为的活动中来。电子商务把传统的商业行为进行了电子化,比如网上商店、网上交易等。 网上书店是网上商店的一种形式,目前已经得到广泛的应用了;另外,图书因具有特征描述简单、标识简易、规格标准、同类商品个体间无太大的差异等特性而能成为电子商务系统中炙手可热的的商品类型。所以,网上书店系统正慢慢成为世界各国发展电子商务的热门。尤其国际互联网的开通,世界各国中比较大的电子商务网站也差不多是网上书店系统。只要网络长久发展,网上售书也会得到不同的发展。 本论文以网上购书系统为研究目标,对基于UML的电子商务系统的建模过程加以分析和研究,通过对软件工程领域新方法、新思想和新技术的深入研究,将UML为建模语言工具一起融入到网上书店系统的建模的研究中来,然后对整个网上系统的架构和特点加以分析和研究,还详细的分析了基于UML的网上购书电子商务系统建模的一些重要的关键技术,提出了基于UML的网上书店系统的建模过程。该项目使用框架为SSM(MYECLIPSE),选用开发工具为MYECLIPSE。网上书店为一个 后台项目。
为了完成该系统,我们首先需要对该系统进行需求分析。一个网上书店应包含用户角色有管理员、用户。为了能让用户顺利登陆系统完成相关操作,需要为每种登陆角色设置账户和密码字段。
为了完成系统的功能需要为书籍设置购书车表,记录购书车信息。在购书车表中定义了两者的关联关系,其中购书车的名字与书籍的mingzi字段对应、购书车的价格与书籍的jiage字段对应。
总结得出该系统所有数据为:管理员(admin)、用户(yonghu)、书籍(shuji)、购书车(goushuche)
管理员表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 管理员id username | VARCHAR(255) | | 账号 password | VARCHAR(255) | | 密码
用户表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 用户id username | VARCHAR(255) | | 账号 password | VARCHAR(255) | | 密码 xingming | VARCHAR(255) | | 姓名 xingbie | VARCHAR(255) | | 性别
书籍表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 书籍id mingzi | VARCHAR(255) | | 名字 leixing | VARCHAR(255) | | 类型 jiage | VARCHAR(255) | | 价格 shuliang | VARCHAR(255) | | 数量
购书车表
字段名 | 类型 | 属性 | 描述 id | INT(11) | PRIMARY KEY | 购书车id mingzi | VARCHAR(255) | | 名字 jiage | VARCHAR(255) | | 价格 shuliang | VARCHAR(255) | | 数量
package org.mypro.front; import java.io.File; import java.io.IOException; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Date; import java.util.List; import javax.jms.Session; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.mypro.dao.ShujiMapper; import org.mypro.entity.Shuji; import org.mypro.entity.ShujiExample; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.multipart.MultipartFile; @Controller @RequestMapping(value = "/") public class ShujiController { private static final Log logger = LogFactory.getLog(ShujiController.class); @Autowired private ShujiMapper shujidao; //定义方法tianjiashuji,响应页面tianjiashuji请求 @RequestMapping(value = "tianjiashuji") public String tianjiashuji(HttpServletRequest request, HttpServletResponse response,HttpSession session,String backurl) { logger.debug("ShujiController.tianjiashuji ......"); if(backurl != null && backurl.indexOf("tianjiashuji.action") == -1){ return "forward:/" + backurl; } return "tianjiashuji"; } @RequestMapping(value = "tianjiashujiact") public String tianjiashujiact(HttpServletRequest request,HttpSession session, HttpServletResponse response,Shuji shuji,String backurl) throws IOException { logger.debug("ShujiController.tianjiashujiact ......"); shujidao.insert(shuji); request.setAttribute("message", "添加书籍成功"); if(backurl != null && backurl.indexOf("tianjiashujiact.action") == -1){ return "forward:/" + backurl; } //返回tianjiashuji方法 return "forward:/tianjiashuji.action"; } //定义shujiguanli方法响应页面请求 @RequestMapping(value = "shujiguanli") public String shujiguanli(HttpServletRequest request,HttpSession session, HttpServletResponse response,String backurl) { logger.debug("ShujiController.shujiguanli ......"); ShujiExample example = new ShujiExample(); List shujiall = shujidao.selectByExample(example); request.setAttribute("shujiall", shujiall); if(backurl != null && backurl.indexOf("shujiguanli.action") == -1){ return "forward:/" + backurl; } return "shujiguanli"; } // 定义 shujichakan方法 @RequestMapping(value = "shujichakan") public String shujichakan(HttpServletRequest request,HttpSession session, HttpServletResponse response,String backurl) { logger.debug("ShujiController.shujichakan ......"); ShujiExample example = new ShujiExample(); List shujiall = shujidao.selectByExample(example); request.setAttribute("shujiall", shujiall); if(backurl != null && backurl.indexOf("shujichakan.action") == -1){ return "forward:/" + backurl; } return "shujichakan"; } // 定义 xiugaishuji方法 @RequestMapping(value = "xiugaishuji") public String xiugaishuji(HttpServletRequest request, HttpServletResponse response,HttpSession session,int id,String backurl){ logger.debug("ShujiController.xiugaishuji ......"); Shuji shuji = shujidao.selectByPrimaryKey(id); request.setAttribute("shuji", shuji); if(backurl != null && backurl.indexOf("xiugaishuji.action") == -1){ return "forward:/" + backurl; } return "xiugaishuji"; } // 定义xiugaishujiact处理书籍修改 @RequestMapping(value = "xiugaishujiact") public String xiugaishujiact(HttpServletRequest request, HttpServletResponse response,Shuji shuji,HttpSession session,String backurl) throws IOException { logger.debug("ShujiController.xiugaishujiact ......"); shujidao.updateByPrimaryKeySelective(shuji); request.setAttribute("message", "修改书籍信息成功"); if(backurl != null && backurl.indexOf("xiugaishujiact.action") == -1){ return "forward:/" + backurl; } return "forward:/shujiguanli.action"; } // 定义shanchushuji,处理删除书籍 @RequestMapping(value = "shanchushuji") public String shanchushuji(HttpServletRequest request, HttpServletResponse response,HttpSession session,int id,String backurl){ logger.debug("ShujiController.shanchushuji ......"); shujidao.deleteByPrimaryKey(id); request.setAttribute("message", "删除书籍成功"); if(backurl != null && backurl.indexOf("shanchushuji.action") == -1){ return "forward:/" + backurl; } return "forward:/shujiguanli.action"; } // 定义sousuoshuji方法,处理搜索操作 @RequestMapping(value = "sousuoshuji") public String sousuoshuji(HttpServletRequest request, HttpServletResponse response,HttpSession session,String search,String backurl) { logger.debug("ShujiController.sousuoshuji ......"); ShujiExample example = new ShujiExample(); ShujiExample.Criteria criteria = example.createCriteria(); if(search != null){ criteria.andMingziLike("%" + search + "%"); } List shujiall = shujidao.selectByExample(example); request.setAttribute("shujiall", shujiall); if(backurl != null && backurl.indexOf("sousuoshuji.action") == -1){ return "forward:/" + backurl; } return "sousuoshuji"; } // 定义ShujipinglunMapper@RequestMapping (value = "shujixiangqing") public String shujixiangqing(HttpServletRequest request,HttpSession session, HttpServletResponse response,int id,String backurl) {logger. debug("ShujiController.shujixiangqing ......");Shuji shuji = shujidao.selectByPrimaryKey(id);request. setAttribute("shuji", shuji); if(backurl != null && backurl.indexOf("shujixiangqing.action") == -1){ return "forward:/" + backurl; } return "shujixiangqing"; } // 上传文件图片等 public String uploadUtile(MultipartFile file, HttpServletRequest request) throws IOException { // 根据当前时间生成时间字符串 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSS"); String res = sdf.format(new Date()); // uploads文件夹位置 String rootPath = request.getSession().getServletContext().getRealPath("resource/uploads/"); // 原始名称 String originalFileName = file.getOriginalFilename(); // 新文件名 String newFileName = "sliver" + res + originalFileName.substring(originalFileName.lastIndexOf(".")); // 创建年月文件夹 Calendar date = Calendar.getInstance(); File dateDirs = new File(date.get(Calendar.YEAR) + File.separator + (date.get(Calendar.MONTH)+1)); // 新文件 File newFile = new File(rootPath + File.separator + dateDirs + File.separator + newFileName); // 判断目标文件所在目录是否存在 if( !newFile.getParentFile().exists()) { // 如果目标文件所在的目录不存在,则创建父目录newFile. getParentFile().mkdirs(); } System.out.println(newFile); // 将内存中的数据写入磁盘file. transferTo(newFile); // 完整的url String fileUrl = date.get(Calendar.YEAR) + "/" + (date.get(Calendar.MONTH)+1) + "/" + newFileName; return fileUrl; }}
查询书籍模块:
在浏览器中进入书籍查询页面时,此时浏览器的地址栏为shujiguanli.action,该地址将响应shujiController类中的shujiguanli,在该方法中,通过selectByexample方法获取所有的书籍信息,并将该信息保存到request中,在页面进行循环展示。该部分核心代码如下:
生成书籍样例类,通过example定义查询条件 ShujiExample example = new ShujiExample();
通过shujidao的selectByExample方法查询出所有的书籍信息 List shujiall = shujidao.selectByExample(example);
将书籍信息,保存到request中,在页面通过foreach方法进行展示 request.setAttribute("shujiall", shujiall);
返回书籍管理界面
return "forward:/shujiguanli.action";
删除书籍模块:
在管理页面中,点击删除。页面将通过a标签的href属性,使用get方法将该书籍
的id上传到服务器中,在服务器中通过shujiController类中的shanchushuji进行接收,之后调用shujiMapper中的deleteByPrimaryKey方法根据ID进行删除。将删除信息保存到request的message中,在页面给出用户删除成功的提示信息,该部分核心代码如下:
通过shujidao的删除方法根据id删除对应的书籍 shujidao.deleteByPrimaryKey(id);
将删除书籍成功信息,保存到request的message中,在页面中给出用户提示 request.setAttribute("message", "删除书籍成功");
返回书籍管理界面
return "forward:/shujiguanli.action";