**
ShopOnline项目
**
本系统的开发 意在建立一个以SSH框架为基础,结构灵活、
可复用、可扩展,开发快速且轻量的 电子商务应用平台
实现技术: 主要涉及Struts2、Spring、Hibernate、MySql、JSP、JQuery
功能模块:
1:运用Ajax 用户登录注册异步校验
2:多表级联关系映射 完成数据的层级显示
3:封装工具类处理业务 实现商品分页展示
4:订单在线支付、物流信息状态等常规操作
5:系统后台管理各功能的实现 且采用EasyUI进行布局
写完项目有段时间了,才想起来补一篇博客
先放上结构图

这个项目大方向上分为前台和后台两部分,进一步分析之后前台又分了用户、一级分类、二级分类、购物车、订单等一些比较详细的模块,以下是需求分析:
前台需求分析:
*1.1.1 用户模块:*
注册:
1.前台JS校验:
2.使用AJAX完成对用户名异步校验:
3.后台Struts2校验:
4.验证码:
5.发送激活邮件:
6.将用户信息存入到数据库:
激活:
1.点击链接完成激活:
* 根据激活码,查询数据库中是否有该用户:
* 如果有:激活.(将激活码字段清空.)
* 修改用户的状态:
登录:
1.输入用户名和密码:(数据校验.)
2.用户名和密码都正确同时用户状态必须是激活状态:
退出:
1.销毁session:
1.1.2 一级分类模块:
查询一级分类(导航栏):
1.查询一级分类.
* 将一级分类存入到session范围.(因为每个页面中都有一级分类的数据)
查询某个一级分类:
1.查询所有一级分类:
* 同时查询到每个一级分类下所属的二级分类
1.1.3 商品模块:
查询热门商品:
1.查询热门商品:(限制个数)–分页查询
查询最新商品:
1.查询最新商品:(限制个数)
查询某个分类商品:
1.根据分类的ID进行查询商品:
查询某个二级分类商品:
1.根据二级分类的ID进行查询商品:
查询某个商品信息:
1.根据商品ID进行查询商品:
1.1.4 购物模块:
添加到购物车:
1.将商品信息添加到购物车中:
从购物车中移除商品:
1.将商品信息从购物车中移除:
清空购物车:
1.将所有的商品信息从购物车中移除:
1.1.5 订单模块:
生成订单:
1.若将购物车中 全部的信息存入到数据库(生成订单).
* 此时就清空购物车了:
为订单付款:
1.在线支付功能:
2.修改订单状态:(从 未付款状态变为已付款状态)
3.修改订单的信息:(收货人,联系方式,送货地址)
查询我的订单:
1.根据用户ID查询订单.
查询某个订单详情:
1.根据订单ID进行查询:
1.2 后台需求分析:
1.2.1 用户模块:
添加用户:
添加用户到数据库
修改用户信息:
修改用户到数据库
删除用户:
删除用户
查询用户:
查询用户(带分页)
1.2.2 一级分类:
添加一级分类:
添加一级分类:
修改一级分类:
修改一级分类
删除一级分类:
删除一级分类:
* 级联删除二级分类:
查询一级分类:
查询一级分类:
1.2.3 二级分类:
添加二级分类:
二级分类需要有所属的一级分类:
修改二级分类:
修改二级分类所属的一级分类:
删除二级分类:
删除二级分类:
查询所有二级分类:
查询二级分类(带分页)
1.2.4 商品模块:
添加商品:
1.添加商品所属二级分类:
2.上传商品图片:
修改商品:
1.修改商品的二级分类:
2.修改商品图片(涉及到上传):
删除商品:
1.删除商品:
查询商品:
1.商品查询:(带分页)
1.2.5 订单模块:
查询订单:
查询所有订单:(带分页)
* 异步加载订单项(刚开始只查询订单,当点击某个按钮的时候 显示商品信息)
页面设计
首页
注册
登录
传统后台
EasyUI新型后台

1.4 数据库设计:
用户表:
* 用户ID
* 用户名:
* 密码:
* 真实姓名:
* 邮箱:
* 地址:
* 电话:
* 用户状态: 0未激活 1已经激活
* 激活码:
一级分类(导航栏):
* 一级分类ID
* 一级分类名称
【一个一级分类可对应多个二级分类 但同一个二级分类只能从属于某一个一级分类
一级分类对二级分类 是一对多的关系:
–需要在多的一方创建一个字段 指向一的一方的主键】
二级分类:
* 二级分类ID:
* 二级分类名称:
* 指向一级分类ID(外键指向一级分类主键)
商品表:
* 商品ID:
* 商品名称:
* 商品商城价格(参考价):
* 商品市场价格(真实卖价):
* 商品描述:
* 商品图片:(路径)
* 指向二级分类ID(外键指向二级分类主键)
订单表:
* 订单ID
* 订单时间:
* 订单总金额:
* 订单状态(付没付款、发没发货、签没签收):
* 订单地址:
* 订单电话:
* 订单收货人:
* 指向用户ID(外键指向用户表的主键)
【订单表与商品表的关系 多对多 所以需要创建一个中间表】
中间表(订单项表):(需要参与到业务逻辑中)
* 主键ID
* 指向商品ID(外键指向商品表的主键id)
* 指向订单ID(外键指向订单表的主键id)
* 数量
* 小计
商城后台用户(管理员)表:
* 用户名:
* 密码

这是写项目时的记录文档,剩下的就是编码实现了

这里主要放一些典型的代码片段吧,仅供参考
用户注册时的验证码程序,喜欢的朋友可以直接拿去用,注释写的还是比较详细哒
//生成验证码的Action类
public class CheckImgAction extends ActionSupport {
@Override
public String execute() throws Exception {
int width = 120;
int height = 30;
// 步骤一 绘制一张内存中图片
BufferedImage bufferedImage = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
// 步骤二 图片绘制背景颜色 ---通过绘图对象
Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔
// 绘制任何图形之前 都必须指定一个颜色
graphics.setColor(getRandColor(200, 250));
graphics.fillRect(0, 0, width, height);
// 步骤三 绘制边框
graphics.setColor(Color.WHITE);
graphics.drawRect(0, 0, width - 1, height - 1);
// 步骤四 四个随机数字
Graphics2D graphics2d = (Graphics2D) graphics;
// 设置输出字体
graphics2d.setFont(new Font("宋体", Font.BOLD, 18));
String words = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
Random random = new Random();// 生成随机数
// 定义StringBuffer
StringBuffer sb = new StringBuffer();
// 定义x坐标
int x = 10;
for (int i = 0; i < 4; i++) {
// 随机颜色
graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
// 旋转 -30 --- 30度
int jiaodu = random.nextInt(60) - 30;
// 换算弧度
double theta = jiaodu * Math.PI / 180;
// 生成一个随机数字
int index = random.nextInt(words.length()); // 生成随机数 0 到 length - 1
// 获得字母数字
char c = words.charAt(index);
sb.append(c);
// 将c 输出到图片
graphics2d.rotate(theta, x, 20);
graphics2d.drawString(String.valueOf(c), x, 20);
graphics2d.rotate(-theta, x, 20);
x += 30;
}
// 将生成的字母存入到session中 供UserAction的注册方法使用
ServletActionContext.getRequest().getSession().setAttribute("checkcode", sb.toString());
// 步骤五 绘制干扰线
graphics.setColor(getRandColor(160, 200));
int x1;
int x2;
int y1;
int y2;
for (int i = 0; i < 30; i++) {
x1 = random.nextInt(width);
x2 = random.nextInt(12);
y1 = random.nextInt(height);
y2 = random.nextInt(12);
graphics.drawLine(x1, y1, x1 + x2, x2 + y2);
}
// 将上面图片输出到浏览器 ImageIO
graphics.dispose();// 释放资源
ImageIO.write(bufferedImage, "jpg", ServletActionContext.getResponse()
.getOutputStream());
//不需要进行页面跳转
return NONE;
}
/*
* 取其某一范围的color
* @param fc int 范围参数1
* @param bc int 范围参数2
* @return Color
*/
private Color getRandColor(int fc, int bc) {
// 取其随机颜色
Random random = new Random();
if (fc > 255) {
fc = 255;
}
if (bc > 255) {
bc = 255;
}
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
验证邮箱的工具类
//邮件发送的工具类
public class MailUitls {
//参数: 收件人 激活码
public static void sendMail(String to,String code){
//1.获取邮件发送的Session连接对象 用于 连接发送邮件的服务器
Properties props = new Properties();
//参数:发送邮件的主机--本机
props.setProperty("mail.host", "localhost");//【(key, value)】
Session session = Session.getInstance(props, new Authenticator() {
//获取邮件用户名 密码
@Override
protected PasswordAuthentication getPasswordAuthentication() {
//发送邮件的官方邮箱
return new PasswordAuthentication("evashop@shoponline.com", "0910");
}
});
//2.创建一个代表邮件的对象 Message对象
Message message = new MimeMessage(session);
try {
//设置发件人 注意这里是官方邮箱
message.setFrom(new InternetAddress("evashop@shoponline.com"));
//设置收件人 CC抄送 BCC密送
message.addRecipient(RecipientType.TO, new InternetAddress(to));
//设置邮件标题
message.setSubject("来自evashop的官方激活邮件");
// 设置邮件正文: 注意ip(会变的!!!注意!)和端口号 正文内容 格式【text/html 链接格式】 【text/plain 纯文本格式】 //注意这里的UTF-8和eclipse中的UTF-8 大小写一致
message.setContent("<h1>来自evashop的官方激活邮件!点下面链接完成激活操作!</h1><h3><a href='http://192.168.179.2:1020/ShopOnline/user_active.action?code="+code+"'>邮件内容:"+code+"</a></h3>", "text/html; charset=UTF-8");
//3.执行发送邮件 Transport对象
Transport.send(message);
} catch (AddressException e) {
e.printStackTrace();
} catch (MessagingException e) {
e.printStackTrace();
}
}
//测试邮件发送
public static void main(String[] args) {
//接收人 邮件内容
sendMail("aaa@shoponline.com","测试邮件");
}
}
log4j.properties配置文件
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c:/mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=info, stdout
基本上这个项目就是这些啦,小小白在努力~~
ShopOnline项目是一个基于SSH框架的电子商务应用平台,包括Struts2、Spring、Hibernate、MySql、JSP和JQuery等技术。系统涵盖用户登录注册、多表级联、商品分页、订单操作和后台管理等功能。前端需求分析包括用户模块、分类模块、商品模块、购物车和订单模块。后台需求分析涉及用户、一级分类、二级分类、商品和订单管理。
540

被折叠的 条评论
为什么被折叠?



