超市积分管理系统(Java+Web+MySQL)
目 录
摘 要 1
Abstract 2
引 言 1
1 第一章 绪论 2
1.1 课题研究背景 2
1.2 系统实现意义 2
1.3 本文主要工作及总体结构 3
2 第二章 系统开发环境及相关技术 4
2.1环境技术概述 4
2.1.1 B/S结构 4
2.1.2 JSP 5
2.1.3 JavaBean 6
3 第三章 系统需求分析 7
3.1 系统具体实现目标 7
3.1.1系统的完整性 7
3.1.2 系统的安全性 7
3.1.3 对错误操作的处理 7
3.2 系统功能需求 7
3.2.1 管理员功能 8
3.2.2 柜员功能 8
3.3 系统非功能需求描述 8
4第四章 系统设计 9
4.1 实体E-R图 9
4.2 实体管理E-R图 13
4.3 会员积分兑换流程 14
5第五章 数据库表结构 15
6第六章 系统安全测试 17
6.1 常用的测试方法 17
6.2 系统的安全性分析 18
6.3 系统的实用性分析 18
结 论 19
附 录 A 外文原文 21
附 录 B 外文译文 24
附 录 C 源代码 27
在 学 取 得 成 果 38
致 谢 39
3 第三章 系统需求分析
3.1 系统具体实现目标
本次开发的会员积分管理系统的目标是为中小规模的超市提供会员信息管理、会员积分管理以及积分兑换管理的具体解决方案。系统设计的目标主要有:
3.1.1系统的完整性
因会员积分管理会在不同业务中表现出不同的业务差异,本系统定位在会员消费积分这一点上,根据积分过程中可能出现的各种问题细分不同的功能模块,各模块需完成积分管理过程中可能出现的问题与请求。同时各个模块之间存在一定的联系,不同模块的组织与联系也是设计与实现过程中要解决的问题。
3.1.2 系统的安全性
为了保证会员信息的安全性,避免会员信息的泄露和恶意修改,设计了不同访问者的权限管理。即柜员只能访问与会员信息和积分相关的页面与操作,而管理员可以实现对整个系统的设置及管理。另外,柜员没有权限对兑换商品和会员等级进行管理,只有管理员可以对积分活动、会员等级和兑换商品进行设置等。
3.1.3 对错误操作的处理
对错误请求的处理。操作者在操作的过程中不可避免的会出现一些错误,而这些错误应尽可能的被捕捉到并给予相应的提示和正确的处理。操作错误时系统也应能做出一般性处理。
3.2 系统功能需求
为实现上述系统功能上的目标,会员积分管理系统主要完成的功能有:
(1)柜员信息的管理:包括对所有柜台柜员信息的各项设置。
(2)会员信息的管理:包括对所有会员信息的管理设置。
(3)会员积分管理:包括对会员积分的统计、查询等。
(4)积分规则设置:对积分规则进行设定、修改等。
(5)会员等级设置:包括对每个会员等级的范围进行设置管理。
(6)兑换商品管理:对积分兑换的商品进行修改、兑换等各项管理。
(7)兑换商品记录:记录柜员对会员每次兑换商品的操作信息。
(8)兑换积分记录:记录柜员对会员每次兑换积分的操作信息。
3.2.1 管理员功能
1)柜员账户列表,实现对柜员账户信息的管理。
2)新增柜员账户,实现添加柜员信息。
3)兑换商品列表,实现对兑换商品信息的查看、修改、删除操作。
4)新增兑换商品,实现添加系统中兑换商品信息。
5)会员类别管理,实现对系统中会员积分等级的设置。
6)积分类别选择,实现对系统中的会员积分兑换规则设置。
7)增加积分记录,实现查看柜员为会员兑换积分的工作记录。
8)兑换积分记录,实现查看柜员为会员兑换商品的工作记录。
3.2.2 柜员功能
1)用户列表管理,实现对会员信息的查看、修改、删除操作。
2)新增用户管理,实现添加会员信息。
3)会员积分管理,可以查看会员的积分和级别,并按照会员消费金额兑换积分。
4)兑换商品列表,可以查看兑换商品及所需积分,并可为会员兑换商品。
5)增加积分记录,实现查看柜员为会员兑换积分的工作记录。
6)兑换积分记录,实现查看柜员为会员兑换商品的工作记录。
3.3 系统非功能需求描述
为完成以上功能,结合本系统的应用背景,对本系统的操作界面有以下要求:
1)设计界面美观大方
作为积分管理系统适合于企业管理者及各个柜台人员,在布局排版上采用统一风格,色调统一,界面功能设计清晰明了。
2)方便实用,贴近超市
本系统是个实用性和目的性很强的网站,因此决定了他应该贴近超市特点和使用者,方便不同权限用户操作。操作界面应当有好,无需经过操作培训即可使用本系统。
3)良好的灵活性、可扩展性
系统的设计应采用分层的设计思想,系统可以灵活的扩展。能够在不同操作系统中运作,依赖性较低。
4)信息准确、及时更新
系统应提供准确、及时的信息。本文转载自http://www.biyezuopin.vip/onews.asp?id=11308数据库能够即时对数据进行更新,必要时可采用后台数据库定时更新策略。
5)安全性
系统应保证会员数据的安全和隐私,可以稳定运行,故障易于恢复。
4第四章 系统设计
4.1 实体E-R图
图4.1用户信息实体E-R图
<%@ page language="java" import="java.util.*" contentType="text/html;charset=gb2312" %>
<%@ include file="iframe/head.jsp"%>
<jsp:useBean id="code" scope="page" class="com.util.CheckCode" />
<SCRIPT language=javascript>
//检验表单的合法性
function checklogin() {
if (document.form1.username.value.replace(/\s+$|^\s+/g,"").length<=0) {
alert("\请输入您的用户名!");
document.form1.username.focus();
}
else if (document.form1.password.value.replace(/\s+$|^\s+/g,"").length<=0) {
alert("\请输入您的密码!");
document.form1.password.focus();
}
else if(document.form1.checkcode.value.replace(/\s+$|^\s+/g,"").length<=0) {
alert("\请输入验证码!");
document.form1.checkcode.focus();
}
else if (document.form1.checkcode.value != document.form1.yzm.value) {
alert("\验证码错误!");
document.form1.checkcode.focus();
}
else{
form1.submit();
}
}
</SCRIPT>
<%
String message = (String)request.getAttribute("message");
if(message == null){
message = "";
}
if (!message.trim().equals("")){
out.println("<script language='javascript'>");
out.println("alert('"+message+"');");
out.println("</script>");
}
request.removeAttribute("message");
String yzm=code.getCheckCode();
%>
<DIV id=body-width>
<TABLE height=3 cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD></TD></TR></TBODY></TABLE>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD class=index-tableTxt vAlign=center>
<TABLE cellSpacing=0 cellPadding=2 width="100%" bgColor=#ffffff border=0><TBODY>
<TR>
<TD style="LINE-HEIGHT: 200%" vAlign=center>
<TABLE cellSpacing=1 cellPadding=5 width="100%" border=0>
<TBODY>
<TR>
<TD align=middle bgColor=#ebebeb>
<TABLE cellSpacing=0 cellPadding=6 width="90%" border=0>
<TBODY>
<TR>
<TD width="106%" height=10></TD></TR>
<TR>
<TD style="LINE-HEIGHT: 180%" align=left height=250><BR>
<TABLE class=b1 cellSpacing=1 cellPadding=0 width=900 align=center border=0>
<TBODY>
<TR>
<TD align=middle bgColor=#fffff7>
<TABLE cellSpacing=0 cellPadding=0 width="98%" border=0>
<TBODY>
<TR>
<TD vAlign=center align=middle height=20> </TD></TR>
<TR>
<TD class=menu_txt vAlign=top align=middle width="100%" height=320>
<TABLE cellSpacing=0 cellPadding=0 width="96%" border=0>
<TBODY>
<TR>
<TD vAlign=top align=left width="52%" height=280>
<TABLE borderColor=#e4e4e4 cellSpacing=5 cellPadding=5 width="96%" bgColor=#f2f2f2 border=1>
<TBODY>
<TR>
<TD vAlign=top align=middle bgColor=#ffffff height=257>
<TABLE cellSpacing=0 cellPadding=0 width="98%" border=0>
<TBODY>
<TR>
<TD height=230>
<FORM id=form1 name=form1 action=<%=basePath %>Login.do?method=PAGEUSERLOGIN method=post >
<TABLE id=Table7 width=400 border=0>
<TBODY>
<TR height=40>
<TD vAlign=center align=middle colSpan=3>
<FONT face=宋体></FONT><BR><FONT color=#ff7700><STRONG>欢迎登陆<%=sysList.get(0).toString() %></STRONG></FONT>
</TD></TR>
<TR>
<TD colSpan=3>
<HR class=hui align=center width="98%" SIZE=1>
</TD></TR>
<TR height=60>
<TD noWrap align=middle width=171>
<TABLE width="100%" border=0>
<TBODY>
<TR>
<TD width="35%" height=24>用户名:</TD>
<TD>
<INPUT class=input_new id=username style="WIDTH: 110px" size=15 maxLength=10 name=username onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
onkeyup="value=value.replace(/[\W]/g,'')" value=<%=request.getAttribute("reg_user")==null?"":request.getAttribute("reg_user") %>>
</TD>
</TR>
<TR>
<TD height=25>密 码:<input type=hidden name=reg_type value=person></TD>
<TD height=25>
<INPUT class=input_new id=password style="WIDTH: 110px" type=password size=15 maxLength=16 name=password onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"
onkeyup="value=value.replace(/[\W]/g,'')">
</TD>
</TR>
<TR>
<TD height=25>验证码:</TD>
<TD height=25><input type="hidden" name="yzm" value="<%=yzm %>" >
<INPUT class=input_new id=checkcode size=5 maxlength="4" name=checkcode onKeyUp="this.value=this.value.replace(/\D/gi,'')"> <%=yzm %>
</TD>
</TR>
</TBODY>
</TABLE>
</TD>
<TD width=81>
<LABEL><br>
<input type=button value="登陆" onClick="checklogin()">
</LABEL>
</TD>
</TR>
<TR>
<TD vAlign=center height=20>
<DIV id=Login1_ValidationSummary2 style="DISPLAY: none; COLOR: red" showmessagebox="True" showsummary="False"></DIV></TD>
<TD class=red1 vAlign=center>
<A class=dhx12 href=""></A>
</TD>
<TD vAlign=center>
<A href="lost.jsp">找回密码</A> <A href="<%=basePath %>reg2.jsp">注册会员</A>
</TD>
</TR>
<TR>
<TD vAlign=center colSpan=3 height=22>
<HR class=hui align=center width="98%" SIZE=1>
</TD></TR>
<TR height=40>
<TD class=buttomtxt align=middle colSpan=3 height=21>
<%=sysList.get(0).toString() %>
</TD>
</TR>
</TBODY>
</TABLE>
</FORM>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD>
</TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
</DIV>
<%@ include file="iframe/foot.jsp"%>