本文共 5289 字,大约阅读时间需要 17 分钟。
根据功能需求分析,将系统分为两个层次:用户和管理员。前端使用用户,管理员管理后台系统,在为系统总体功能模块图中,前端模块(会员模块、浏览查询模块、鲜果信息模块、订单管理模块、购物车模块、在线留言模块)以及其子模块(与我相关模块、安全中心模块、账户信息模块、加入购物车、鲜果收藏模块);后台模块(鲜果管理模块、网站信息模块、账户设置模块)以及其子模块(鲜果管理、发布鲜果、订单管理、销售统计、采购管理、供应商管理、适合对象、首页轮播图、网站导航、首页栏目、系统公告、留言管理、密保问题、系统介绍、友情链接、后台用户、会员管理、会员类型、修改密码、修改账户、账户查看)
鲜果商城的前端部分实现了鲜果浏览、搜索、比价、用户注册、在线留言、用户登录、提交订单、会员中心功能,后台实现了系统用户登录、鲜果管理、网站信息、账户设置功能。
鲜果浏览:用户和游客可以在进入鲜果商城后对鲜果的价格、折扣、产地、包装、适合对象以及其他详情信息进行浏览,同时可以查看最新上架的鲜果,鲜果的销售排行以及商城的公告。
鲜果搜索:用户和游客可以搜索想要的鲜果,可以进行模糊搜索。
鲜果对比:用户和游客在对鲜果的选择时,可以点击对比键同时查看一到四种鲜果的信息、价格、产地、包装,从而选择出最喜欢的,性价比更高的鲜果。
用户注册:未注册游客点击注册,输入账号、密码、确认密码、身份证号码和姓名,然后点击同意和注册,即可进入会员中心。
在线留言:如果用户觉得商城有缺点或者想说,可以留言给商城。
用户登录:用户可以通过输入用户名和密码登录商城。如果他们忘记了密码,他们可以回答安全问题以登录。
提交订单:选择合适的鲜果后,用户可以点击订单进入订单界面。
会员中心:进入会员中心后,用户可以在与我相关的菜单中修改订单、消息和收藏夹,在安全中心菜单中修改登录密码、支付密码、输入安全问题和我的安全问题,以及在帐户信息菜单中修改帐户信息、收货地址、帐户余额和信息。
系统用户登录:管理员可以通过输入系统帐户、登录密码和验证码登录到系统后台。
鲜果管理:管理员可以在鲜果管理列表中进行鲜果管理、发布鲜果、订单管理、销售统计、采购管理、供应商管理、适合对象管理、信息类别管理、鲜果标签管理。
网站信息:管理员可以在网站信息界面中设置主页轮转图、网站导航、主页栏、系统公告管理、消息管理、安全问题设置、系统介绍、友情链接设置。
账户设置:管理员可以在账户设置的列表进行后台用户管理、会员管理、会员类型管理、修改密码、修改账户信息、账户信息查看。如图2.1所示:
进入网站,可以查看网站首页、时令鲜果、精选鲜果、精选套餐、礼品专区、在线留言、关于我们、用户注册、登录、购物车、后台管理等信息,如4.4图所示:
图4.4 首页登录图
位于com.daowen.controller包下的IndexcolumnsController,通过使用StringBuffer建立一个字符串缓冲区sb,通过append()方法在被选中的元素结尾插入需要的内容并对栏目最新、热卖等内容获取并插入。首页主要代码如下:
public String buildImagetextList(List list, String lanmudes,String href) {
StringBuffer sb = new StringBuffer();
int i = 0;
sb.append(MessageFormat.format("<div class=\"{0}\">", picListCss));
sb.append("\r\n");
// 栏目标题
if(href!=null)
sb.append(MessageFormat.format(
"<div class=\"title\"><strong>{0}</strong><a href=\"{1}\" class=\"more\">更多</a></div>", lanmudes,href));
else
sb.append(MessageFormat.format("<div class=\"title\"><strong>{0}</strong></div>", lanmudes));
sb.append("<ul>");
......
if(shangpin.getZuixin()==1){
sb.append("<div class=\"tag\"><span>最新</span></div>");
}
if(shangpin.getTuijian()==1){
sb.append("<div class=\"tag\"><span>推荐</span></div>");}
用户选择的鲜果界面,如4.5图所示:
图4.5 鲜果内容图
位于controller层,以下代码绑定数内部支持,request.setAttribute()设置需要的属性,对当前页面进行。鲜果界面的主要代码如下:
/*数据绑定内部支持*/
public void get() {
List<Object> sptype_datasource = spcategorySrv
.getEntity("where isleaf=1");
......
request.setAttribute("sptype_datasource", sptype_datasource);
String spname = request.getParameter("name");
String pubren = request.getParameter("pubren");
if (spname != null)
filter += " and name like '%" + spname + "%' ";
if (pubren != null)
filter += " and pubren='" + pubren + "'";
String sptype = request.getParameter("sptype");
String sptypeid = request.getParameter("sptypeid");
System.out.println("sptypeid=" + sptypeid);
if (sptypeid != null) {
if (!sptypeid.equals("-1"))
filter += " and sptypeid=" + sptypeid;
} else {
sptypeid = "-1";
request.setAttribute("sptypeid", sptypeid);}
用户通过点击加入购物车进入页面可以进行查看图片、鲜果信息、单价、数量、现价等信息,进行查看或提交订单或删除操作,并且可以通过点击继续购物进行继续购物操作,如图4.6所示:
图4.6下单结算图
当会员不为空时,对会员的收货地址相关信息进行获取。下单界面的主要代码如下:
Huiyuan huiyuan=huiyuanSrv.load("where accountname='"+xdren+"'");
double discount=1;
if(huiyuan!=null) {
Hytype hytype=hytypeSrv.load("where id="+huiyuan.getTypeid());
if(hytype!=null)
discount=hytype.getDiscount();
}
......
// 收货地址
dingdan.setShrtel(shrtel);
dingdan.setShraddress(shraddress);
dingdan.setShrname(shrname);
dingdan.setDes(des);
dingdanSrv.save(dingdan);
shopcartSrv.clear(cartName);
request.getSession().removeAttribute("checkedProductList");
request.getSession().removeAttribute("groupedProduct");
String forwardurl = request.getParameter("forwardurl");
request.setAttribute("dingdan", dingdan);
forward(forwardurl);
}
用户通过我的订单可以获取订单号、下单时间、下单人、收货人电话、收货人姓名、状态等信息,和鲜果的详细信息,应付总金额进行在线支付操作,如图4.7所示:
图4.7在线支付图
在用户付款时,会通过.getParameter()方法获取下单人,鲜果相关的信息,pm.setPagesize()设置尺寸;pm.setCurpageindex()设置当前显示页;request.setAttribute()设置分页信息;dispatchParams()分发请求参数。在线付款界面的主要代码如下:
// 获取数据
public void get() {
String filter = "where 1=1 ";
String xdren = request.getParameter("xiadanren");
String shaccount = request.getParameter("shaccount");
if (xdren != null) {
filter += " and xiadanren='" + xdren + "'";
}
if (shaccount != null)
filter += " and shaccount='" + shaccount + "'";
int pageindex = 1;
int pagesize = 10;
// 获取当前分页
String currentpageindex = request.getParameter("currentpageindex");
......
// 设置尺寸
pm.setPagesize(pagesize);
// 设置当前显示页
pm.setCurpageindex(pageindex);
// 设置分页信息
request.setAttribute("pagermetal", pm);
// 分发请求参数
dispatchParams(request, response);
若用户账户余额不足则显示账户余额不足于支付订单,请充值,如图4.8所示:
图4.8支付失败图
位于com.daowen.controller.的DingdanController;通request.getParameter()方法获取提交的订单id,账户名、支付密码、账户余额,当输入密码与输入密码不相同时,显示错误;获取会员余额,当余额小于订单金额时标签显示错误。支付界面的主要代码如下:
public void payfor() {
String ddid = request.getParameter("ddid");
String accountname = request.getParameter("accountname");
String paypwd = request.getParameter("paypwd");
String errorurl = request.getParameter("errorurl");
......
Dingdan dingdan = dingdanSrv.load("where id=" + ddid);
if (hy.getYue() < dingdan.getTotalprice()) {
request.setAttribute("errormsg", "<label class='error'>账户余额不足于支付订单,请充值</label>");
forward(errorurl);
return;}
public void delete() {
String[] ids = request.getParameterValues("ids");
if (ids == null)
return;
String spliter = ",";
String SQL = " where id in(" + join(spliter, ids) + ")";
System.out.println("sql=" + SQL);
dingdanSrv.delete(SQL);}
转载地址:http://mihnwy.baihongyu.com/