1、课程设计汇报课程名称 基于J2EE项目开发 设计题目 超市管理系统 专业班级 软件1231 姓 名 刘香弟 学 号 成 绩 评 定考评内容设计表现设计汇报答辩综合评定成绩成 绩计算机技术和工程学院友好 勤奋 求是 创新目 录1题目选择和系统分析31.1项目标功效分析31.1.1用户功效性需求31.1.2管理员功效性需求42 模块设计52.1系统总体设计52.2模块设计52.2.1登录模块72.2.2商品信息查看模块82.3.3购物车模块83数据库数据表设计和映射93.1数据库表设计94 系统具体设计和实现114.1综合描述114.2系统运行界面描述124.3关键Java类和其功效254.4系统
2、测试274.4.1测试目标和方法274.4.2测试用例27 1题目选择和系统分析1.1项目标功效分析功效性需求是整个需求分析章节最为关键部分。它直接决定了系统模块划分,业务逻辑,明确了使用者对小型超市信息管理系统功效要求。一个完善,明确,具体功效性需求分析是开发一个系统关键。成功功效性需求分析能够避免后期对系统大范围改动甚至是推倒重建,所以,本部分极为关键。1.1.1用户功效性需求1不用输入用户名,密码 ,直接登录超市管理系统商品页面;2查看商品基础信息,包含 商品编号,单价,余量,厂家,生产日期,保质期;3在购物车中查看自己选中商品名称,价格,数量,并能够从购物车中移除一些商品,查看总价,并
3、能够选择结账或选择继续购物;4点击结账后显示结账成功并退出系统。相关用例图见图1-1。图1-1 用户用例图用户用例 “查看商品基础信息”用例描述见表1-1。其它用例类似于此,不再一一赘述。表1-1 用例描述-查看商品基础信息使用者用户用例查看商品基础信息参与者用户,小型超市信息管理系统数据用户向超市信息管理系统发送商品相关信息,如商品名,商品类型,商品编号等激励超市信息管理系统依据用户发送字段,查询后台数据库响应超市信息管理系统返回查询商品结果备注无1.1.2管理员功效性需求1打开网站后,进入登录页面。输入用户名,密码 登录系统。2登陆后,选择进入系统人员管理页面或商品信息管理页面。在系统人员
4、管理页面中,查看其它管理员信息,并能够添加新管理员。在商品信息管理页面,能够查看全部商品信息,包含商品编号,进价,单价,余量,厂家,生产日期,保质期。3进入商品信息管理页面进货管理页面,能够填写进货单,实现相关产品数量增加。4进入商品信息管理页面销售查看页面,能够查看近期各项商品销售情况。5点击页面右上角退出按钮,直接退出系统并跳转到登录页面。相关用例图见图1-2 管理员功效性需求用例图。图1-2 管理员功效性需求用例2 模块设计2.1系统总体设计系统总体设计图图4-1所表示。当使用人员登录系统后,按身份不一样进入各自页面,并使用系统提供功效。管理员人员信息管理属于操作者全部,在此本系统默认管
5、理员能够操作其它管理员信息。图2-1 系统总体设计图2.2模块设计本处将对小型超市信息管理系统进行分模块设计,明确各个模块操作步骤,功效怎样使用等问题。1 登录模块超市信息管理系统使用者关键有两种:一般用户和管理员。根据日常生活中超市运作步骤,一般用户不需要为其设置专门数据表,所以只需要实现管理员登录模块。使用者进入系统后,首优异入欢迎界面。一般用户点击“开始购物旅程”超链接,直接进入购物界面。管理员点击“进入后台系统”超链接,进入管理员登陆界面。因为管理员对系统有操作,查看等权限,所以不许可在登陆页面注册新管理员。登陆成功后跳转至管理员管理页面,不然显示“Login fail”登陆失败。当输
6、入正确姓名,密码后,界面自动跳转到管理员管理欢迎界面。2 商品信息管理模块管理员进入后台管理界面后,点击“商品信息管理页面”超链接,进入商品信息管理页面。页面查询后台数据库数据,将全部商品信息展示在右侧页面上。若管理员需要对相关商品信息作出修改,或删除某项商品信息。则点击对应超链接进行操作。删除成功后系统会提醒“删除成功”。点击“更新”,系统会进入商品信息更新页面。在页面中,已经预先填好了所选商品信息。这许可管理员仅对需要修改字段内容修改,避免了全盘输入麻烦。若管理员需要添加新商品,则点击“添加新商品”链接。系统跳转到 商品信息添加页面。在此页面填入对应商品信息,点击“添加”按钮。若各个字段值
7、全部符合要求,则系统提醒“添加成功”。再点击左侧“商品信息管理页面”,则能够看到刚才插入商品信息。3 进货单管理模块进货是超市正常运行,立即跟进市场最新动态,调整售货方向最关键手段。进货单管理模块用来实现进货功效,管理员能够填写进货单实现对商品表及进货单表更新。在 管理员管理欢迎界面 点击“进货单管理页面”,系统跳转到进货单管理页面。因为进货操作是管理员对超市经营情况搜集信息关键路径,所以不许可对进货单进行修改操作,方便进行对账,累计等操作。点击“增加进货单”链接,系统跳转至进货信息添加页面。在进货信息添加页面中,当管理员填写好对应字段后,点击“添加”按钮。系统在后台会自动查找填入商品名。假如
8、以前存在同名商品,则在原来商品基础上,对数量作出修改。假如查不到填入商品名,则在商品表中新建一条统计。最终,在进货单表中生成对应进货统计。4 管理员信息管理模块在管理员管理欢迎界面,点击“管理员信息管理页面”。系统跳转至管理员信息管理界面。在此界面上,能够实现对管理员信息增删改,在此不再一一赘述。5 交易信息查看模块用户每次在超市消费全部会有对应统计。因为小型超市规模限制,不可能大量保留每笔交易具体信息,所以系统以交易流水号形式表示每笔交易。此模块就是供管理员查看交易信息统计。因为交易信息是对超市中已存在交易行为统计,所以不许可管理员对交易信息进行修改,只能在统计较多时删除某条统计。6 退出模
9、块管理员在左侧菜单点击“退出”链接,进入“确定退出页面”。7购物模块在开始页面点击“开始购物旅程”链接,跳转到购物页面。点击一项商品后添加至购物车链接,会提醒添加成功,并选择查看购物车或继续购物。点击“查看购物车”进入购物车管理页面。能够实现对购物车中商品数量修改,查看现在已购置商品价格总计,或选择删除购物车中某项商品,甚至清空购物车。点击“结账”链接,系统在新页面中会生成一个交易流水号,继续点击“结账”,假如后台保留成功,则提醒交易完成,点击链接离开。2.2.1登录模块登录步骤图2-3。管理员在登录表单填写用户名,密码,将表单和Flag标志提交至Servlet。系统依据XML文件配置,调用相
10、关Servlet类(MemberController.java)。Servlet依据Flag值,调用对应函数,查询数据库表(member)并进行判定,假如用户名和密码匹配,则跳转到管理页面(manage.jsp),不然,输出登录失败页面。图2-2 登录模块步骤图2.2.2商品信息查看模块在Left.jsp 中点击“商品信息管理页面”,链接为”Goods.do?flag=1” 。系统依据XML配置文件,调用GoodsController.java 。接收到Flag=1 ,调用FindAll()方法,查询MysqL数据库中goods表,查询全部商品信息,返回一个List 集合,名为list。利用r
11、eq.setAttribute(goods, list) 将集合存入request范围内,然后跳转至商品信息展示页面(Goodsmanage.jsp)。在商品信息展示页面,创建一个Table.列名分别为商品各项属性名。新建一个List list.。将request 范围内“goods”接收并进行强制类型转换。循环list,将商品输出。在每一行商品后面,加上“删除”“更新”两个链接,分别为:“Goods.do?flag=2&id=”,“Goods.do?flag=5&id=”。点击链接,能够调用GoodsController.java 中对应函数,传输参数为ID,进行删除或更新操作。相关步骤见图
12、2-3。图2-3 商品信息查看模块步骤图2.3.3购物车模块添加商品至购物车时,会对购物车中商品进行校验,若商品已在购物车中,则不在购物车中添加新项目,而是只修改商品数量。用户能够在购物车中编辑商品信息,包含修改商品数量,删除一些不想要商品,或清空购物车。每点击相关链接就调用servlet对应函数对session中ShoppingCart进行操作。假如点击“结账”,则进入生成流水号页面。结账成功后,则对数据库中商品余量进行修改,自动减去用户购置商品数量。购物车步骤图图5-11所表示。图5-11 购物车模块步骤图3数据库数据表设计和映射3.1数据库表设计商品基础信息表见表3-1。表3-1 商品基
13、础信息表名称含义类型约束备注GoodsID商品IDInt 20主键自动增加GoodsName商品名称Varchar 10唯一值GoodsType商品类型Int 20不为空GoodsPrice单价Int 10不为空GoodsPurchasePrice进价Int 10不为空GoodsAmount商品数量Int 10不为空GoodsGetTime进货日期Date不为空GoodsMaintainTime保质期Int 10不为空单位为(天)GoodsFactory生产厂家Varchar 50不为空职员信息表见表 3-2。表3-2 职员信息表名称含义类型约束备注MemberID职员IDInt 20主键自动
14、增加MemberName职员姓名Varchar 10不为空MemberPassword职员密码Varchar 6不为空MemberSex职员性别Int 1不为空1:男 2:女MemberAge职员年纪Int 10可为空进货单表见表3-3。表3-3 进货单表名称含义类型约束备注Input_ID进货单IDInt 50主键自动增加Input_GoodsID商品IDInt 20不为空Input_GoodsName商品名称Varchar 10唯一值Input_GoodsType商品类型Int 20不为空Input_GoodsPrice单价Int 10不为空Input_GoodsPurchasePrice
15、进价Int 10不为空Input_GoodsAmount商品数量Int 10不为空Input_GoodsGetTime进货日期Date不为空Input_GoodsMaintainTime保质期Int 10不为空单位为(天)Input_GoodsFactory生产厂家Varchar 50不为空订单表见表3-4。表3-4 订单表名称含义类型约束备注Account_ID订单IDInt 20主键自动增加Account_GoodsID商品IDInt 20不为空Account_Code交易流水号Varchar 50外键 参考Sale表code不为空Account_GoodsCount购置商品数量Int 1
16、0不为空交易单表见表3-5。表3-5 交易单表名称含义类型约束备注Sale_ID交易单IDVarchar 20主键自动增加Sale_Date交易日期Date不为空Sale_Accountcode交易流水号Varchar 50不为空4 系统具体设计和实现4.1综合描述因为小型超市信息管理系统结构比较简单,相对大型,成熟超市采取管理系统来说,不管在系统性能,结构复杂度,安全性上面全部无法和之相比。所以在进行系统设计时,应尽可能做到结构清楚,编码方法合理,代码和系统可维护性较高。在本章节中,选择小型超市信息管理系统关键模块进行设计叙述。关键模块有登录模块,商品信息查看模块,购物车模块三部分。相关本系
17、统文件结构以下:4.2系统运行界面描述此处为小型超市信息管理系统关键模块具体描述,并附上相关代码和截图。在代码关键处加以说明,以方便读者阅读。相关代码以下:Login.jsp:base href=My JSP login.jsp starting page!- function clearInfo(onePart)document.getElementById(onePart).innerHTML = ; 用户名: 密 码:登录失败!请重新登陆说明:登录表单中,将姓名和密码字段 “name”属性分别设置为“userName”,“userPassword”,向后台进行参数传输。点击submit按
18、钮,根据action中路径调用方法,传输方法类型为“post”,将提交至servletdopost方法。public interface UserService / 判定用户登录是否成功public User ifLogin(String name, String password);/ 依据用户名查询用户表中数据public List findUserInfoByName(String userName);/ 获取数据库中用户表中数据并封装在集合中public List getAllUserInfo();/ 向用户管理中添加用户信息public boolean add(User user);
19、/ 依据用户编号修改用户管理页面中用户信息public int updateUserInfo(User user, int userId);/ 依据用户名编号查询用户表中数据public User findUserInfoById(int userId);/ 依据用户编号删除用户管理页面中对应用户信息public int deleteUserInfoById(int userId);/ 分页获取用户信息public PageSize getUserInfoByPage(int currPage);/ 修改用户密码public int updateUserPwdInfo(int userId,
20、String userNewPwd);说明:login方法,接收前台页面传输过来用户名和密码,并利用编码转换类将用户名转换为UTF-8编码类型,处理了乱码问题。实例化一个MemberDao类,调用其Login方法,返回实体类Member。假如返回值为空,则输出登录失败页面。不然,跳转至管理员管理页面manage.jsp。public interface UserDao / 判定用户登录是否成功public User ifLogin(String name, String password);/ 依据用户名查询用户表中数据public List findUserInfoByName(String
21、 userName);/ 获取数据库中用户表中数据并封装在集合中public List getAllUserInfo();/ 向用户管理中添加用户信息public boolean add(User user);/ 依据用户编号修改用户管理页面中用户信息public int updateUserInfo(User user, int userId);/ 依据用户名编号查询用户表中数据public User findUserInfoById(int userId);/ 依据用户编号删除用户管理页面中对应用户信息public int deleteUserInfoById(int userId);/分
22、页获取用户信息public PageSize getUserInfoByPage(int currPage);/修改用户密码public int updateUserPwdInfo(int userId,String userNewPwd);说明:Login方法对数据库进行操作。首先连接至数据库,利用前台传来用户名,密码字段对数据库进行查询,以结果集形式进行返回。并实例化user类,将结果集中数据输出,返回user类型。相关界面设计见图4-1,图4-2,图4-3。图4-1 超市信息管理系统欢迎界面图4-2 超市管理员登陆界面相关代码以下:base href=My JSP login.jsp s
23、tarting page!- function clearInfo(onePart)document.getElementById(onePart).innerHTML = ; 用户名: 密 码:登录失败!请重新登陆说明:FindAll方法调用gooddaoselectGoods方法,将全部商品信息读出,以集合形式存入变量“goods”中,在中进行调用。相关页面设计见图。 图4-3商品添加页面base href=My JSP BillModify.jsp starting page!- function checkNum() var txtId=document.getElementById(
24、billNum).value;if(txtId.length=0) document.getElementById(idMsg).innerHTML=账单编号不能为空!; if(flag=false) document.getElementById(idMsg).innerHTML=账单编号已经存在 !; var reg=/0-9*$/;if(!reg.test(txtId) document.getElementById(idMsg).innerHTML=账单编号必需为数字!; document.getElementById(billNum).value=; function clearIn
25、fo(onePart,twoPart)document.getElementById(onePart).value=;document.getElementById(twoPart).innerHTML = ; function checkMoney() var txtMoney=document.getElementById(money).value;if(txtMoney.length=0)document.getElementById(moneyMsg).innerHTML=请输入交易金额!; var reg=/0-9*$/;if(!reg.test(txtMoney)document.
26、getElementById(moneyMsg).innerHTML=非法字符,请输入数字!;document.getElementById(money).value=; function checkUnit()var txtUnit=document.getElementById(unit).value;if(txtUnit.length=0)document.getElementById(unitMsg).innerHTML=请输入交易单位!; function checkAmount()var txtAmount=document.getElementById(amount).value
27、;if(txtAmount.length=0)document.getElementById(amountMsg).innerHTML=交易数量不能为空!; var reg=/0-9*$/; if(!reg.test(txtAmount)document.getElementById(moneyMsg).innerHTML=非法字符,请输入数字!;document.getElementById(money).value=; function checkComName() var txtComName=document.getElementById(comName).value;if(txtCo
28、mName.length=0)document.getElementById(comNameMsg).innerHTML=商品名称不能为空!; var reg=/u4e00-u9fa50,$/; if(!reg.test(txtComName)document.getElementById(comNameMsg).innerHTML=非法字符,请输入汉字!;document.getElementById(comNameMsg).value=; function checkDiscription()var txtDiscription=document.getElementById(discri
29、ption).value;if(txtDiscription.length=0)document.getElementById(discriptionMsg).innerHTML=商品描述不能为空!;document.getElementById(discriptionMsg).value=; function submitYesNo()var allSpan = document.getElementsByTagName(span);for(var i=0;iallSpan.length;i+)if(allSpani.innerHTML.length!=0)return false;break;return true; function checkReModify() var ifModify=confirm(确定修改吗?); if(ifModify) alert(恭喜您!修改成功!); document.getElementById(myForm).submit(); function checkReDele() var ifModify=confirm(确定删除吗?); if(ifModify) location.href=DoDeleBillInfoByIdServlet?billId=$bill.billId; else return false; 图4-4商品信