《web实训大作业报告》题目:电子商城专业:软件工程班级: xxx姓名: xxx学号: xxx任课教师: xxx 完成时间: xxx目录概述: (3)需求分析: (3)系统设计: (4)程序原代码及其说明 (5)model包: (5)dao包: (9)action包 (10)struts.xml等文件: (12)jsp等文件: (12)分工 (14)总结 (14)参考文献 (15)概述:随处可见的电子商城,对我们来说非常的熟悉。
我们似乎对他了如指掌,但是真的是这样的吗?本次的web期末大作业,就按照熟悉的电子商城的种种功能进行仿写。
需求分析:搜索模块:任意浏览器终端均能通过搜索框来检索商城的物品。
搜索模块应当提供搜索功能。
用户模块:包括用户的注册、登陆、信息修改、收货地址的编辑、开启店铺。
店铺模块:用户可以申请开店,从此充当卖家角色。
功能有:上架商品、修改商品展示图片、下架商品。
购物车模块:用于存放用户想购买,但暂时存放的物品。
功能有:添加物品至购物车、从购物车中移除物品、购买购物车中所有的物品。
订单模块:用户在支付之后,会生成订单。
所有的这些订单,除非用户主动删除,否则保留一段时间,以备查阅。
功能有:订单查询、订单地址获取、删除订单。
物品模块:存储信息。
由于被上述模块操作。
系统设计:不会uml,随意画的图,想表述的意思是:浏览器终端(没有登陆的用户)仅可以通过搜索模块搜索物品。
登陆后的用户,可以使用:订单模块、用户模块、购物车模块、店铺模块。
而搜索模块会使用到物品模块提供的功能、其他虚线表示会使用到物品模块的数据。
程序原代码及其说明程序源代码如下:model包:包含的是纯javaBean文件。
只有属性和setter、getter方法。
(1).CarGoods.java这个bean用来存放Action.Car类要使用的数据。
(2).ChangeUserInfo.java这个bean用来存放用户修改信息时要使用的数据。
(3).GoodsInfo.java这个bean用来存放物品表的数据。
当dao包查询goods表返回ResultSet时,action中可以使用这个bean存放结果。
以提供给jsp页面使用。
(4).GoodsList.java这个bean,没有设计好,仅仅是给dao包中的某个方法使用而创的。
(5).OrderBody.java这个bean,用来存放订单体,由于没有太多的时间仔细分析,所以这个bean是在后期需要的时候创建的,这个订单头并不能适用与系统订单模块的所有场景,只在用户购买物品后的当前订单显示页面才会使用到。
(6).OrderHead.java这个bean,用来存放订单头。
它的产生和上面的一样。
成套使用在上述场合中。
(7).OrderInfo.java这个bean就是最初始创建的用来存储订单信息的bean了。
包含了订单中除了收货地址外的全部信息。
而且收货地址可以使用新的bean来存放。
但是这个bean感觉在使用的时候,浪费了大量的空间资源。
因为其中必然会存在id、createTime、cost、expressFee、store信息的重复,这些信息应当提取出来当做订单头来单独存放。
当初没有想太多,结果这个bean 只在用户查询所有订单信息的时候会被使用。
(8).ReceivePosition.java收货地址bean,在用户修改、添加、显示收货地址的时候会被使用。
(9).StoreInfo.java存放店铺信息的bean。
(10).User.java存放用户信息的bean。
这里,当初没有考虑到同账号多终端登陆的问题。
dao包:dao包提供的方法全部都是static方法,所以在action包中调用dao包时,类一经加载,全部留存在内存中。
(由于dao包、和action包中的每个函数是有注释的,这里不在重写。
这里只描述这些类的大致功能。
详细的函数注释,请看源代码。
)(1).DBConnect.java--类加载时,自动连接数据库。
(2).DB4Car.java提供关于购物车表的操作(3).DB4Goods.java提供关于物品表的操作(4).DB4Order.java提供关于订单表的操作(5).DB4OrderGoods.java提供关于订单物品的操作(6).DB4ReceivePosition.java提供关于收货地址表的操作(7).DB4User.java提供关于用户表的操作还有些表的操作混合在了上面的几个类中。
因为操作逻辑的原因、多表联合操作等,所以就没有分开写。
action包:(1).Account也即用户模块的功能实现。
包括注册、登陆(登陆的时候即加载了用户的信息)、开店、退出、修改昵称、修改密码、登陆状态(用于jsp访问时的逻辑检查,如未登录时添加到购物车)。
(2).Car购物车模块的功能实现。
显示购物车信息、加载用户收货地址列表、从物品栏中移除物品、添加物品到购物车。
缺点:由于jsp页面设计的原因,所以这里就没有提供:选择指定的物品购买、更改物品的数量的功能。
(3).Order订单模块的功能实现。
包括:购买购物车中全部物品、从db 中加载用户提交后的收货地址信息、获取本次购买生成的订单头、获取本次购买生成的物品列表、显示用户所有的订单、生成订单的物品列表、删除订单。
(4).Position收货地址模块的功能实现。
包括:用户添加新地址、修改旧地址、删除收货地址、PositionPage(收货地址页面信息控制,用于复用position.jsp这个页面。
如果用户添加地址,则表单不读取db的信息并且产生一个新的地址id。
如果用户修改地址,则表单读取db的信息,并让这个jsp页面把这些信息加载到表单里)、(5).Store店铺模块的功能实现。
包括:开店、修改物品图片、删除物品、上架物品、显示店铺全部物品、storeGoodsPage(店铺物品编辑页面控制,作用同上,用于复用storeGoodsPage.jsp 页面)、上传物品展示图片(没有配置在xml中,仅供其他方法调用)、getGoodsBySortId(获取选中物品的物品信息)。
(6).analyze.Chinese搜索模块的功能实现。
包括:通过物品id检索、模糊检索(本次作业sql中用like处理)、将结果分页显示(jsp中并没有使用这个,作用是把取得的结果,按照32长度的bean数组放入session中,但是jsp页面并没有设计相应的读取下一页控件,所以这个方法现在的作用也即:用户检索物品,最多只能看到32个。
)(之所以在分包名。
这个包是专门用来分解输入框中的检索词的。
真正的检索也不可能就是1条sql语句就解决的。
命名为Chinese是表示这是把检索词当做中文检索。
)(7).tools.GetUUID工具,提供唯一的一个方法,返回指定长度的uuid。
(8).tools.UpLoadFile工具,用于用户上传头像图片。
因为这个是直接网上找的代码(毕竟没用过,然后当时就随便放了一个包里,而且代码写死了,所以物品图片上传虽然用的是一模一样的方法,但是不太好合并,应为没时间了,就暂时这样用了。
)struts.xml等文件:为上面的每一个action都专门配置了一个xml文件。
用的是同一个namespace=”/”jsp等文件://WEB-INF/jsp 下面的jsp页面(1).car.jsp 购物车页面(1).changeUserInfo.jsp 修改名字、密码、头像(1).header.jsp 导航条,嵌入与其他页面(1).index.jsp 检索关键字后,显示结果的页面(1).openShop.jsp 开店申请(1).order.jsp 订单页面(1).positionPage.jsp 收货地址信息编辑页面(1).store.jsp 店铺页面(1).storeGoodsList.jsp 展示店铺所有物品页面(1).thisOrderInfo.jsp 展示本次购买后的订单详情//web-root 下面的jsp页面(1).fail.jsp 失败提示(1).success.jsp 成功提示(1).goodsMoreInfoFail.jsp 按id为找到物品时提示页面(1).goodsMoreInfoSuccess.jsp 物品详情页(1).register.jsp 注册(1).login.jsp 登陆(1).storeGoodsPage.jsp 店铺物品编辑页面。
((1).itemDiv.jsp 编写index物品展示的div时遗留(1).orderDiv.jsp 编写order显示的div时遗留)分工任务书,需求报告,dao包的类编写以及jsp页面由冯文锦负责;系统设计,实验报告,action包以及model包由张振负责。
总结时间仓促,代码并没有逻辑分明,中途添加新功能,导致各个模块之间总会藕断丝连。
Action的跳转没有控制好,在有些页面,尤其是修改数据的页面,虽然数据第一次是按照预期的提交了,但是如果此时多次刷新这个页面,那个修改数据的操作会被多次提交。
主要问题在于url上记录着你的这次action操作。
这个东西不会处理,有待学习。
一个系统,它的功能需求具体是什么,有的时候,是不可能一次性就分析的完全的。
否则也就不会出现软件更新的说法了。
所以,开始写一个小项目(类似于大作业形式大小)的时候,不要太纠结与需求分析。
到时候迟早会意识到设计的缺陷,然后记录,修改。
在对系统的修修改改的时候,会更加意识到一些面向对象设计方法的好处。
参考文献。