目 录
一、项目分析 ............................................. 1 二、 需求分析 ........................................... 1 三、 详细功能设计 ....................................... 2 (1) 用户登录与注册功能 .............................. 2 (2) 购物车功能 ...................................... 2 (3) 搜索功能 ........................................ 2 (4) 详细商品陈列功能 ................................ 2 四、 数据库设计 ......................................... 3 五、 采用的关键技术 .................................... 13 (1) 开发模式 ....................................... 13 (2) 数据库的选择和设计 ............................. 13 (3) 开发过程所使用的技术 ........................... 13 六、 核心页面截图 ...................................... 14 七、 设计心得 .......................................... 20 八、 设计总结 .......................................... 21 (1) 网站架构 ....................................... 21 (2) 数据库设计 ..................................... 21 (3) 代码开发 ....................................... 21 九、核心代码 ............................................ 22
一、项目分析
随着科学的发展,时代的进步,一方面是更多的人拥有了属于自己的车,另一方面则要面临的是大批量的汽车修理与保养,这也是一个不容忽视的问题。当今社会,可以说网络是最广泛最快速的传播媒体,如果我们给广大车主提供一个网络平台,当他们的养车过程中出现问题,需要帮助时,可以通过我们的网站快速有效的解决相应问题,这样,我们此次网站设计与维护课程设计的题目“养车博士”就诞生了。
通过我们的“养车博士“网站,车主根据自己的车况在线轻松选定需要保养项目和对应的正品配件,再到线下服务站更换,是车主汽车保养的新选择新模式。我们准备在线销售的所有保养配件是原厂品质的正品 ,并在运营中根据车主的满意度反馈进行优化。若出现质量事故,不管是配件或合作服务站更换技术上的问题,都由“养车博士”统一协调解决。另外,我们在调研中发现,相当多的车主对于车辆并不熟悉,什么时候该保养些什么?都不清楚,又对4S店不透明的保养推荐生疑,对车的关爱不够。“不能作到七分养三分修”,保养养护不充分不及时,未来可能会支付额外的大量维修费用。为了让车主更加透明地了解汽车常规的保养项目和费用,我们准备在网站中设计以下几个模块,1)保养查询。只需输入爱车车型、上路年份和行驶里程数,一查便知道近期需要做什么保养;2)保养提醒。用短信或邮件提醒您近期保养项目,不怕忘记;3)智能匹配。提供与您爱车车型、数量、位置、级别等精准匹配的保养项目及汽车配件,精准数据库,不怕出错;4)达人分享。开放论坛,让更多的车主分享经验,交流知识。原厂直供的业务模式、引领潮流的自助保养理念、专业的汽车保养,“养车博士”网站一定会得到越来越多车主朋友的认可。
二、 需求分析
我们此次所要完成的网站“养车博士”是一个当广大车主遇到保养或维修困难时,通过我们的网站,客户能够快速,安全,保质保量并且花费较少的解决相应问题。目前,市场上养车类网站较少,能为广大车主直接提供便捷,可靠服务
1
的就更少了,可以说我们团队所设计的“养车博士”网有很大的市场前景,也具有很高的潜在价值。如果我们的项目可以正常运营的话,我们准备首先在长春市先找到合作伙伴并开始运营网站,长春是中国汽车之都,所拥有的汽车量是非常多的,这样我们就可以相对容易的建立自己的客户,从而完成以后网站的运营。综上分析,我们的项目可以被市场接受的,是值得正式运营的。
三、 详细功能设计
(1) 用户登录与注册功能
一方面,用户实名注册可以方面我们对客户的信息管理,如果遇到问题可以及时和用户取得联系,用户实名制注册也提高了交易的安全性和可靠性;另一方面,用户自己也方便管理自己的账号和密码,不容易丢失,同时也减轻了我们维护网站的压力。
(2) 购物车功能
网站内部设有购物车功能,可以让买家分多次选购货物,一起付款,方便;由于我们网站有很多合作商,大多数商家会有设定,多次购物系统自动只收一次邮费,不用改邮费,方便买家、卖家双方;另外不同的商家有不同的优惠,有的商家会在系统内自动设定购买金额,达到多少以上就有一定的折扣或者自动减免邮费,自动地在系统邮费体现,如果一样样单独拍下不使用购物车就享受不到购物车累积金额的优惠了。这就体现出购物车的优点与好处了,所以说购物车系统是非常必要的。
(3) 搜索功能
网站内部拥有一个好的搜索系统,可以让客户最快捷的找到自己所需要的商品或相关服务,使得整个繁琐的网站变得简单化,更好的被客户使用。
(4) 详细商品陈列功能
我们把给客户提供的商品,以最详细的方式展现出来,标明详细信息,让客户对商品有更高的认识,方面客户对商品的了解以及选择。
2
四、 数据库设计
养车博士商城前台 会员操作 商品浏览 会员注册 会员登录 购物车购买商品 订单查询 按类别浏览商品 养车博士商城系统前台功能结构图
人气商品浏览 热销商品浏览 推荐商品浏览 按关键字搜索商品 类别添加 类别管理 类类 别别 修删 改 除 养车博士商城后台 商品管理 订单管理 类别查询 产品添加 产品修改 产品删除 产品查询 订单状态修改 所有订单查询 自定义订单查询 养车博士商城系统后台功能结构图
3
数据库概念设计
用户名 密码 邮箱验证 推荐人 注册日期 真实姓名 最后登录时间 会员信息表 最后登录IP 邮箱 联系方式 联系方式验证 总共登录次数 性别 修改密码次数
会员信息表
优惠券ID 优惠金额 截止时间 用户名 优惠类型 优惠券表 优惠券状态 详细介绍 优惠券表
4
库存量 商品名 ID 商品 零售价格 进货价格 品牌 售后服务 市场价格 商品详细介绍 商品规格 所属大类 试用车型 商品提示 商品信息表 规格参数 包装清单 评价总数 品牌介绍 用户评价ID 使用说明 人工费 商品信息表
汽车名称 车型表 汽车图片 车型首字母 车型表 5
商品ID 商品图片表 图片路径 图片顺序
商品图片表
用户名 省份 固话 城市 县 邮编 收货人 收货地址表 具体地址 收货人电话
收货地址表
固话所在地
6
提问时间 客服回答
用户名 商品名 用户咨询表 咨询问题 回答时间 客服号 用户咨询表
商品ID 赠品ID 赠品表 赠品规格说明 赠品数量 赠品名 赠品表
7
购买月份 购买年份 汽车昵称
用户名 汽车品牌 汽车系列 汽车车型 我的车库表 生产日期 汽车类别 生产月份
我的车库表
列名 id make line cartype model productyear 类型 int varchar varchar varchar varchar date 长度 11 50 50 50 50 0 小数点 0 0 0 0 0 0 允许空值 否 否 否 否 否 否 是否主键 是 否 否 否 否 否 车库表
8
列名 id name picture firstcharacter 类型 int varchar varchar varchar 长度 11 50 50 10 小数点 0 0 0 0 允许空值 否 否 否 否 是否主键 是 否 否 否 车型表
列名 id userId pwd email phone sex recommend emailchack phonechack date lastlogin ip logincount pwdcount realname 类型 int varchar varchar varchar varchar varchar varchar int int date datetime varchar varchar varchar varchar 长度 小数点 允许空值 是否主键 255 0 否 是 50 0 否 否 50 0 否 否 50 0 否 否 50 0 是 否 50 0 是 否 50 0 是 否 11 0 是 否 11 0 是 否 0 0 是 否 0 0 是 否 255 0 是 否 255 0 是 否 255 0 是 否 255 0 是 否 会员信息表
列名 id userId add sub date remake 类型 int varchar varchar varchar datetime date 长度 11 11 0 0 0 255 小数点 0 0 0 0 0 0 允许空值 否 否 否 否 否 是 是否主键 是 否 否 否 否 否
会员充值消费表
9
列名 id userId havecredits subcredits detail date 类型 int varchar int int varchar date 长度 11 50 11 11 255 0 小数点 0 0 0 0 0 0 允许空值 否 否 否 否 否 否 是否主键 是 否 否 否 否 否 会员积分表
列名 id goodsId goodsname marketprice retailprice storeprice storenum brand goodsdetail catalogue adaptmode goodstips specificpara packinglist brandIntroduce useIntroduction afterservice usercommentId goodsspec laborcost commentcount 类型 int varchar varchar varchar varchar varchar int varchar mediumblob varchar text varchar mediumblob mediumblob mediumblob mediumblob mediumblob varchar text varchar int 长度 小数点 允许空值 11 0 否 255 0 否 255 0 否 255 0 否 255 0 否 255 0 否 11 0 否 255 0 否 0 0 否 255 0 否 0 0 否 255 0 是 0 0 是 0 0 是 0 0 是 0 0 是 0 0 是 255 0 是 0 0 是 255 0 是 11 0 是 商品信息表 是否主键 是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否
10
列名 id uesrId couponCode type price validatetime instructions status 类型 int varchar varchar varchar double date varchar int 长度 11 50 50 50 0 0 255 11 小数点 0 0 0 0 0 0 0 0 允许空值 否 否 否 否 否 否 否 否 是否主键 是 否 否 否 否 否 否 否 优惠券表
列名 id uesrId provinceId cityId countyId detailaddress postcode receivename receivephone ip area tel 类型 int int varchar varchar varchar varchar varchar varchar varchar varchar varchar varchar 长度 11 11 50 50 50 255 50 50 50 50 10 20 小数点 0 0 0 0 0 0 0 0 0 0 0 0 允许空值 是否主键 否 是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 否 是 否 是 否 收货地址表
列名 id uesrId makeId lineId modelId productdate productmonth cartype carnickname buyyear buymonth 类型 int varchar varchar varchar varchar date int varchar varchar date int 长度 11 50 50 50 50 0 11 50 50 0 11 小数点 0 0 0 0 0 0 0 0 0 0 0 允许空值 否 否 否 否 否 否 否 否 否 否 否 是否主键 是 否 否 否 否 否 否 否 否 否 否 我的车库表
11
列名 id userId commentscore commentId goodsId 类型 int varchar double varchar varchar 长度 11 255 2 255 255 小数点 0 0 1 0 0 允许空值 否 否 否 否 否 是否主键 是 否 否 否 否 商品评价表 列名 id goodsId userId question time serviceanswer serviceId answertime 类型 int varchar varchar varchar datetime varchar varchar datetime 长度 255 255 255 255 0 255 255 0 小数点 0 0 0 0 0 0 0 0 允许空值 是否主键 否 是 否 否 否 否 否 否 否 否 否 否 否 否 否 否 用户咨询表
列名 id goodsId goodspath order 类型 int varchar varchar int 长度 11 255 255 11 小数点 0 0 0 0 允许空值 否 否 否 否 是否主键 是 否 否 否 商品图片表
列名 id goodsId giftId num name goodsspec 类型 int varchar varchar int varchar varchar 长度 11 255 255 11 255 255 小数点 0 0 0 0 0 0 允许空值 否 否 否 否 否 否 是否主键 是 否 否 否 否 否 赠品信息表
12
五、 采用的关键技术
(1) 开发模式
开发本网站使用的是基于Servlet的MVC开发模式,所谓的MVC开发模式,即模型--视图--控制台(model-view-controller)。MVC模式的核心思想是有效地组合“视图”、“模型”和“控制器”。在该模式中,模型(model)用于存储数据的对象;视图(view)向控制器提交所需要的数据、显示模型中的数据;控制器(controller)负责具体的业务逻辑操作,即控制器根据视图突出的的要求对数据作出处理,将有关结果存储到模型中,并负责将模型和视图进行必要的交互,当模型中的额数据变化时,将视图更新显示。之所以选择使用这种开发方式,因为MVC结构可以使程序更具有对象化特征,也更容易维护。在该模式中,“视图”、“模型”和“控制器”之间是耦合结构,便于系统的维护和扩展。
(2) 数据库的选择和设
开发本站使用的是MySQL server数据。在满足第三范式的基础上,在数据库中建有多张数据表,会员信息表,会员充值消费表,会员积分表,车型表,商品信息表,优惠券表,收货地址表,我的车库表,商品评价表,用户咨询表,商品图片表,赠品信息表。
(3) 开发过程所使用的技术
在开发本网站,除了使用了javabean,Servlet技术外,为了美化前台网页,在设计前台页面时,也大量使用了JavaScript,css,div等,为了在前台控制用户必要地登陆操作,在前台页面里使用了JSTL标签语言,在用户执行特定操作时,提醒用户必须登陆后才可以。
13
核心页面截图 14
六、
15
16
17
18
19
七、 设计心得
王小军:作为这个项目的组长,我不仅要及时完成相应的功能,而且要考
虑性能优化,各种问题的解决思路。怎么把前后台完美的结合,我需要告诉前台设计组员怎样去设计网页,怎样设计让我更好的实现功能。数据库设计时,网站对应的任何一个大小功能,基本上都涉及到数据库的设计,功能在需求分析时要尽量做详细,这样对于数据库的设计可以减少很多的时间跟精力。另外就是安排组员完成数据库ER图设计跟网站系统设计,Word文档的编写,文档内容的收集与审核,这些不仅不要合理的安排,也要考虑到组员的能力等,适当的督促检查,这样更好的让组员团结合作,在规定的时间内完成相应的任务。
曲佳:通过这次课设我学到了许多,一些平常练习中的一些属性跟标签都
不怎么用,但是在这次课设中都大量的用到。例如等,虽然也许用到的不是它本身的特性,但是可以运用class来操作页面。整个课设的过程中在模仿别人的网页过程中,总结属于自己的书写模型与习惯。虽然这个过程有享受,也有困难,困难是关于js部分,因为js部分我的知识不是什么充足,所以只能从网上下载下来,再进行自己的改动与编排成最后的成品。改编别人的作品比自己写要困难的多,因为不同的人的写代码的程序的习惯不同。但是这个过程也是有收获的,可以更加熟练对代码的掌握。还有收获最大的是团队合作,因为与王小军是第二次合作,这次合作中也有出现一些小的摩擦,但是摩擦以后我们变得更加默契了。 王远鹏:两周的课程设计结束了,在这次的课程设计中不仅检验了我所学 习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在课程设计中,与同学分工设计,和同学们相互探讨,相互学习。学会了如何和队友进行更好的合作,让我深深的体会到团队精神是一个非常重要的东西,在这次课程设计中,虽然我只尽了绵薄之力,但是我完全体会到学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补,并且在此次课设中,即巩固了这学期学的知识,又复习了数据库和关于JAVA的知识,更深一步的了解到如何将自己所学的东西运用到实践当中去,当看到团队四个人的努力成果呈现在电脑上那一刻,大家都特别开心,此次课设 20 让我对JSP有了更进一步的了解,并且让我体会到同学间的珍贵的友谊,总之,这次课设让我受益匪浅。 孙庆阳:课程设计过程中,我深刻体会到小组人员合作的重要性,可以说 课程设计的每个部分都是非常重的,一个功能的实现,无论是前台和后台都需要相当大的工作量,这就需要我们在每个过程中都要细心,才能更好的完成我们的项目。在两周的时间里,我主要负责收集资料以及Word的编写工作,在这个过程中,我体会到如果不认真的去做一件事,是没办法的把这件事办好的,文档中的字体,大标题,小标题,整体文档的布局、构造都需要认真的处理,还要考虑到页码,打印时不同电脑的不兼容问题,虽然说编写Word文档不是一件困难的事,但你不花费功夫是绝对办不好的。通过此次课程设计,我也把自己学的东西融入到实践中去,可以说这个过程是非常有意义的,当我们获得自己的成果时,自己也感觉到高兴与自豪。 八、 设计总结 (1) 网站架构 在确定项目之后,架构的系统设计很重要,好的架构不仅给人一种清晰明了易于理解的感觉,而且有利于网站的开发与维护以及提高网站的运行性能,还有对于后期的扩展添加新的功能提供便利。 (2) 数据库设计 购物网站的表繁多,对应的是许多细节功能,表的属性多而发杂,我们感觉最合适的解决办法就是满足第三范式,查询的时候可以运用关联查询。 (3) 代码开发 代码开发时要遵循高内聚低耦合的原则,尽量面向接口编程,运用MVC设计模式,对于重复的公共代码要提取出来作为公共类,并且尽量设计为静态类。对于前台网页设计来说,要学会分模块设计,公共部分要分离出来,将公共部分包含到子页面中,这样不仅易于开发与维护,而且对于后台整合来说,可以很方便更新数据,减少不必要的代码。 21 九、核心代码 CustomerAction.java : public String register() { String pwd = Md5.getMD5ofStr(model.getPwd()); model.setPwd(pwd); boolean b = customerService.register(model); return \"regsuc\"; } public String login() { String password = Md5.getMD5ofStr(model.getPwd()); model.setPwd(password); Member member = customerService.login(model); if (member != null) { HttpSession session = ServletActionContext.getRequest() .getSession(); session.setAttribute(\"login\ return \"logsuc\"; } else return \"logerr\"; } public String emailcheck() throws IOException { boolean result = customerService.isExistEmail(model.getCompanyKey()); String remessage; if (result == false) { remessage = \"邮箱不存在可以注册\"; } else { remessage = \"邮箱已经存在\"; } HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(\"text/html\"); response.setCharacterEncoding(\"UTF-8\"); response.getWriter().write(remessage); 22 return null; } public String userIdcheck() throws IOException { boolean result = customerService.isExistCustomer(model.getCompanyKey()); String remessage; if (result == true) remessage = \"用户名已经注册\"; else { remessage = \"用户名还可以注册\"; } HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(\"text/html\"); response.setCharacterEncoding(\"UTF-8\"); response.getWriter().write(remessage); return null; } public String alterPwd() { String pwd = Md5.getMD5ofStr(model.getPwd()); model.setPwd(pwd); int m = customerService.updatePwd(model); if (m == 1) { HttpSession session = ServletActionContext.getRequest() .getSession(); session.invalidate(); return \"altpwdsuc\"; } else { return \"altpwderr\"; } } public String updateInfo() { int m = customerService.updateInfo(model.getUserId(), model .getRealname(), model.getSex(), model.getPhone()); return \"upifsuc\"; } 23 BaseAction.java : Public class BaseAction /** * */ private static final long serialVersionUID = -3011338881095687170L; protected T model=null; protected Map this.goodsService = goodsService; } Public void setCouponService(com.ycbs.service.CouponService couponService) { this.couponService = couponService; } Public void setCustomerService(com.ycbs.service.CustomerService customerService) { this.customerService = customerService; } public BaseAction(){ 24 try { ParameterizedType type=(ParameterizedType)this.getClass().getGenericSuperclass(); Class clazz=(Class)type.getActualTypeArguments()[0]; model=(T)clazz.newInstance(); } catch (Exception e) { throw new RuntimeException(e); } } // 创建action之后,拦截器调用此方法 public T getModel() { // TODO Auto-generated method stub return model; } public void setSession(Map BaseServiceImpl.java : public class BaseServiceImpl 25 public BaseServiceImpl() { ParameterizedType type=(ParameterizedType) this.getClass().getGenericSuperclass(); clazz=(Class)type.getActualTypeArguments()[0]; } public void delete(int id) { Object o = hibernateTemplate.get(clazz,id); if(o!=null) hibernateTemplate.delete(o); } public T get(int id) { return (T) hibernateTemplate.get(clazz, id); } public List 26 因篇幅问题不能全部显示,请点此查看更多更全内容