setProperty>动作标记。
JavaBean的设计规范
(1)JavaBean是一个public类。
(2)JavaBean有一个公共的、无参的构造方法。
(3)JavaBean所有的属性定义为private。
(4)JavaBean中,需要对每个属性提供两个公共方法。
:
setXxx():
设置属性xxx的值。
getXxx():
获取属性xxx的值(若属性类型是boolean,则方法名为isXxx())。
(5)定义JavaBean时,通常放在一个命名的包下。
2.2系统需求
2.2.1系统的安全性
本购物系统在管理权限上要严格进行控制,具体要求如下:
1)管理员要想管理本系统的商品信息,必须先要凭用户名和密码登陆到系统中,没有权限的用户不能通过任何方式登录系统查看并修改系统的任何信息和数据,以确保系统的严密性和安全性。
普通用户能在线浏览信息,但是想要把商品加入购物车、购买商品、查看购物车、查看订单等功能。
2)在具体实现中设定不同权限,不同权限用户登录到系统后,不能越级操作,管理员可以使用所有模块,除了修改用户信息;普通用户能在线浏览信息,不能删除修改商品信息。
2.2.2数据的完整性
1)各种记录信息的完整性,信息记录内容不能为空
2)各种数据间相互联系的正确性
3)相同数据在不同记录中的一致性
2.3界面需求
界面设计目前已经成为评价软件质量的一条重要指标,一个好的用户界面可以增加用户使用系统的信心和兴趣,提高工作效率,JSP技术是用JAVA语言作为脚本语言的,JSP网页为整个服务器端的JAVA库单元提供了一个接口来服务于HTTP的应用程序。
创建动态页面非常方便。
用户界面是指软件系统与用户交互的接口,通常包括输出、输入、人-机对话的界面格式等。
(1)输出设计
输出是由计算机对输入的原始信息进行加工处理,形成高质量的有效信息,并使之具有一定的格式,提供管理者使用,这是输出设计的主要职责和目标。
系统设计的过程正好和实施过程相反,并不是从输入设计到输出设计,而是从输出设计到输入设计,这是因为输出表格直接与使用者相联系,设计的出发点应当是保证输出表格方便地为使用者服务,正确及时反映和组成用于各部门的有用信息。
输出设计的原则是考虑既要全面反映不同管理层的各项需要,又要言简意赅,不要将用户需要和不需要的都提供给用户。
(2)输入设计
输入数据的收集和录入是比较费事的,需要大量的人力和一定设备,并且容易出错。
如果输入系统的数据有错误,则处理后的输出将扩大这些错误,因此输入数据的正确性对于整个系统质量的好坏是具有决定性意义的。
输入设计的原则有如下几点:
1)输入量应保持在能满足处理要求的最低限度。
设计中可采用设置字段初值,下拉式数据窗口等方式尽量减少用户键盘输入量。
输入量越少,错误率就越少,数据准备时间也减少。
2)输入的准备及输入过程应尽量容易进行,从而减少错误的发生。
3)应尽量早对输入数据进行检查(尽量接近原数据发生点),以便使错误及时得到更正。
4)输入数据尽早地用其处理所需的形式被记录,以避免数据由一种介质转移到另一种介质时需要转录而可能发生的错误
三、系统分析与设计
3.1系统架构设计
3.3.1运行环境
操作系统版本:
Win7
开发工具:
MyEclipse10
后台服务器:
apache-tomcat-6.0.30
开发语言:
Java
数据库:
SQLServer2008
浏览器:
搜狗浏览器
3.1.2系统的架构分层
2.3普通用户用户功能模块图
图2.4管理员用户功能模块图
3.2系统详细设计
3.2.1数据库设计
(1)普通用户表(t_user)
列名
数据类型
长度
允许空
是否主键
说明
id
int
4
否
是
用户id
loginname
varchar
50
否
否
用户名
loginpw
varchar
50
否
否
用户密码
name
varchar
50
是
否
真实姓名
sex
varchar
50
是
否
性别
age
varchar
20
是
否
年龄
address
varchar
20
是
否
住址
tel
int
20
是
否
电话
email
varchar
20
是
否
email
qq
int
20
是
否
qq
(2)商品类别信息表(t_catelog)
列名
数据类型
长度
允许空
是否主键
说明
id
int
4
否
是
类别ID
name
varchar
50
否
否
类别名称
del
varchar
50
否
否
是否删除
(3)商品信息表(t_goods)
列名
数据类型
长度
允许空
是否主键
说明
id
int
4
否
是
商品ID
catelog_id
int
4
否
否
类别ID
bianhao
varchar
50
否
否
商品编号
mingcheng
varchar
50
否
否
名称
jieshao
varchar
50
否
否
介绍
pinpai
varchar
50
否
否
商品品牌
fujian
Date
50
否
否
商品图片
shichangjia
varchar
50
否
否
商品价格
(4)公告信息表(t_gonggao)
列名
数据类型
长度
允许空
是否主键
说明
id
int
4
否
是
公告id
title
varchar
50
否
否
公告标题
content
varchar
50
否
否
公告内容
shijian
varchar
50
否
否
发布日期
(5)管理员信息表(t_admin)
列名
数据类型
长度
允许空
是否主键
说明
userId
int
4
否
是
编号
userName
varchar
50
否
否
用户名
userPw
varchar
50
否
否
密码
(6)订单信息表(t_order)
列名
数据类型
长度
允许空
是否主键
说明
id
int
50
否
否
用户id
bianhao
int
4
否
是
编号
shijian
varchar
50
否
否
下单时间
zhuangtai
varchar
50
否
否
订单状态
songhuodizhi
varchar
50
否
否
送货地址
fukuanfangshi
varchar
50
否
否
付款方式
jine
varchar
50
否
否
总金额
user_id
int
4
否
否
会员ID
3.2.2数据库的连接
关键代码如下:
publicDBContent(){
StringCLASSFORNAME="com.microsoft.jdbc.sqlserver.SQLServerDriver";
//连接数据库的驱动
Stringurl="jdbc:
microsoft:
sqlserver:
//localhost:
1433;databaseName=bs";
Stringuser="root";//连接数据库的用户名
Stringpassword="root";//连接数据库的密码
try{
Class.forName(CLASSFORNAME);
con=DriverManager.getConnection(url,user,password);//加载数据库的驱动
stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
}
catch(Exceptionex){
ex.printStackTrace();
}
}
四、系统实现
4.1管理员模块
4.1.1管理员登录
1、说明:
为了提高安全性,防止用户绕过前台进入后台,设置对特定人员的登录,对普通用户进行拦截操作。
在登陆页面输入用户名和密码以,点击提交按钮,跳转到登陆的service中,在该service中会对用户名,密码进行判断,如果正确提示“通过验证”,进入到管理界面,如果错误则提示“用户名和密码不正确”,页面调转到登陆页。
2、loginservice关键代码如下:
publicStringlogin(StringuserName,StringuserPw,intuserType)
{
try
{
Thread.sleep(700);
}catch(InterruptedExceptione)
{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
Stringresult="no";
if(userType==0)//系统管理员登陆
{
Stringsql="fromTAdminwhereuserName=?
anduserPw=?
";
Object[]con={userName,userPw};
ListadminList=adminDAO.getHibernateTemplate().find(sql,con);
if(adminList.size()==0)
{
result="no";
}
else
{
WebContextctx=WebContextFactory.get();
HttpSessionsession=ctx.getSession();
TAdminadmin=(TAdmin)adminList.get(0);
session.setAttribute("userType",0);
session.setAttribute("admin",admin);
result="yes";
}
}
if(userType==2)
{
}
returnresult;
}
4.1.2管理员主页面
说明:
显示管理员可操作的功能。
4.1.3修改个人密码
1、说明:
管理员可修改自己的密码,但不能修改登录名
2、关键代码如下:
publicStringadminPwEdit(StringuserPwNew)
{
System.out.println("DDDD");
try
{
Thread.sleep(700);
}
catch(InterruptedExceptione)
{
e.printStackTrace();
}
WebContextctx=WebContextFactory.get();
HttpSessionsession=ctx.getSession();
TAdminadmin=(TAdmin)session.getAttribute("admin");
Stringsql="updatet_adminsetuserPw=?
whereuserId=?
";
Object[]params={userPwNew,admin.getUserId()};
DBmydb=newDB();
mydb.doPstm(sql,params);
return"yes";
}
4.1.4网站公告管理
1、说明:
服务器收到客户端发出的请求,调用后台的公告Servlet查询出所有的公告信息,并把这些信息封转到数据集合List中,绑定到request对象,然后页面跳转到相应的jsp,显示出公告信息。
还可以对公告进行添加和删除。
2、关键代码如下:
publicvoidgonggaoAdd(HttpServletRequestreq,HttpServletResponseres)
{
Stringid=String.valueOf(newDate().getTime());
Stringtitle=req.getParameter("title");
Stringcontent=req.getParameter("content");
Stringshijian=newDate().toLocaleString();
Stringsql="insertintot_gonggaovalues(?
?
?
?
)";
Object[]params={id,title,content,shijian};
DBmydb=newDB();
mydb.doPstm(sql,params);
mydb.closed();
req.setAttribute("message","操作成功");
req.setAttribute("path","gonggao?
type=gonggaoMana");
StringtargetURL="/common/success.jsp";
dispatch(targetURL,req,res);
}
publicvoidgonggaoDel(HttpServletRequestreq,HttpServletResponseres)
{
Stringid=req.getParameter("id");
Stringsql="deletefromt_gonggaowhereid=?
";
Object[]params={id};
DBmydb=newDB();
mydb.doPstm(sql,params);
mydb.closed();
req.setAttribute("message","操作成功");
req.setAttribute("path","gonggao?
type=gonggaoMana");
StringtargetURL="/common/success.jsp";
dispatch(targetURL,req,res);
}
publicvoidgonggaoMana(HttpServletRequestreq,HttpServletResponseres)throwsServletException,IOException
{
ListgonggaoList=newArrayList();
Stringsql="select*fromt_gonggao";
Object[]params={};
DBmydb=newDB();
try
{
mydb.doPstm(sql,params);
ResultSetrs=mydb.getRs();
while(rs.next())
{
Tgonggaogonggao=newTgonggao();
gonggao.setId(rs.getString("id"));
gonggao.setTitle(rs.getString("title"));
gonggao.setContent(rs.getString("content"));
gonggao.setShijian(rs.getString("shijian"));
gonggaoList.add(gonggao);
}
rs.close();
}
catch(Exceptione)
{
e.printStackTrace();
}
mydb.closed();
req.setAttribute("gonggaoList",gonggaoList);
req.getRequestDispatcher("admin/gonggao/gonggaoMana.jsp").forward(req,res);
}
4.1.5类别信息管理
1、说明:
调用后台的action类查询所有商品,还可以对类别信息进行添加和删除的操作。
2、关键代码如下:
publicvoidcatelogAdd(HttpServletRequestreq,HttpServletResponseres)
{
Stringname=req.getParameter("name").trim();
Stringdel="no";
Stringsql="insertintot_catelog(name,del)values(?
?
)";
Object[]params={name,del};
DBmydb=newDB();
mydb.doPstm(sql,params);
mydb.closed();
req.setAttribute("message","操作成功");
req.setAttribute("path","catelog?
type=catelogMana");
StringtargetURL="/common/success.jsp";
dispatch(targetURL,req,res);
}
publicvoidcatelogDel(HttpServletRequestreq,HttpServletResponseres)
{
Stringsql="updatet_catelogsetdel='yes'whereid="+Integer.parseInt(req.getParameter("id"));
Obje