网上购书系统项目设计方案.docx
《网上购书系统项目设计方案.docx》由会员分享,可在线阅读,更多相关《网上购书系统项目设计方案.docx(37页珍藏版)》请在冰点文库上搜索。
网上购书系统项目设计方案
网上购书系统项目设计方案
前言
1.1课题背景
互连网以前所未有的速度发展,成为与报纸、广播、电视相比肩的第四媒体,同时正以其便利的信息传输形式改变着人们的消费模式,便利简单、快捷、低成本的电子通信方式,买卖双方不谋面就可以进行各种贸易活动,走向商业的互连网已经成为网络经济的大势所趋。
1996年前后,在美国学术界提出"电子商务"〔E-Business或E-Commerce的概念,短短几年的时间里,这一概念以在全球各地被广泛接受。
根据买方和卖方的不同,电子商务市场可以划分四种类型:
B2B,B2C,C2B和C2C。
就规模而言,B2B和B2C居于主导地位。
B2C是商家与顾客之间的商务活动,它将成为电子商务的一种主要的商务形式,"B2C网上购物"是实现这种商务活动的电子平台。
B2B就是商家与商家之间的商务活动,它也将成为电子商务的一种主要的商务形式,"B2B商务"是实现这种商务活动的电子平台。
眼下电子商务正如雨后春笋般地大量涌现,企业网络化已经成为一种时尚,出于对市场需求的考虑,本小组设计了一个网上书店,实现了用户注册、用户登陆、网上购书、管理员对数据库查看、修改、删除等操作,基本实现了网上书店的一些主要功能,"麻雀虽小,五脏具全"。
1.2系统开发关键技术介绍
本实例采用三层架构设计,用户界面层通过统一的接口向业务层发送请求,业务曾按自己的逻辑规则将请求处理之后进行数据库操作,然后将数据库返回的数据库封装成类的形式返回给用户界面层。
这样用户界面层甚至可以不知道数据库的结构,它只要维护与业务层之间的接口即可。
这种方式在一定程度上增加了数据库的安全性,同时也降低了对用户界面层开发人员的要求,因为它根本不需要进行任何数据库的操作。
另外,本设计把页面中一些常用的部分集成为模块,例如页面的头和尾部,这样设计新的页面时如果有重复出现的部分,只需要拿现成的模块来组装就可以了。
这样方便、简洁,减少了工作量,是后台程序更有条理,思路更清晰。
另外,我们在前台对数据库表的的数据进行调用的时候,采用了数据库存储过程,这样就使得数据库的安全性更高,数据的调用、存储更有条理。
在相关联的表之间,我们还采用了触发器,进行后台的自动触发,使系统职能化。
一、需求分析〔XX
1、项目需求
使用Java技术设计和实现一个简约的购书。
对购物进行设计与实现一下功能:
〔1客户注册、客户登录
〔2客户资料修改、取回忘记密码
〔3客户按照商品分类浏览商品
〔4客户按照某一个或几个关键字搜索商品
〔5客户购物车功能
〔6客户订单管理〔修改订单、撤销订单等
〔7管理员对商品资料的管理〔增、删、改、查、统计
〔8分页浏览
〔9管理员分级管理
〔10客户访问习惯,跟踪用Filter跟踪客户IP
二.总体设计〔XX、XX
1.MVC三层架构工作原理
三层架构工作原理图
2.系统分析
本设计把页面中一些常用的部分集成模块,这样设计新的页面是如果有重复出现的部分,只需要拿现成的模块来组装就可以了。
设计对数据库的调用采用三层架构设计,对于需要连接数据库的页面,通过统一的数据库调用管理,给页面分配连接,这样就方便了对数据库的调用和管理,同时使得对数据库的调用不会产生拥塞,并且在一定程度上增加了数据库的安全性。
本设计分为客户模块和管理员模块。
用户模块包括用户注册、登陆、查看图书详细信息、在线购书、查看、整理用户订单等功能。
管理员模块包括对注册用户资料的添加、删除等管理,对图书的添加、删除、分类等一系列管理功能。
3.系统设计
通过上述分析,在建网上购书系统之前,先对数据库进行分析,设计好系统的功能模块,并建好系统所需的数据库及要用到的一些表。
3.1系统功能模块设计
根据上述各项功能的分析,可以画客户界面、管理员界面的功能模块图。
功能模块分为用户功能模块和管理员功能模块,用户登陆后的主要功能是实现网上购书,管理员功能模块主要是实现管理员对书店的管理,如用户管理、图书管理、订单管理等。
图1-1客户界面系统功能模块
图1-2管理员界面系统功能模块
3.2设计数据流程图
图1-购书系统数据流程图
4.系统数据库设计
4.1数据库需求分析
数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。
合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。
用户的需求具体体现在各种信息的提供,保存,更新和查询,这就要求数据库结构能充分满足各种信息的输出和输入.收集基本数据,数据结构以及数据处理的流程。
通过上述系统功能分析,针对一般在线书店的需求,总结出如下需求信息。
(1)用户分一般用户和管理员。
(2)订单分单详细订单和总订单。
(3)每一本图书都从属一种类型。
(4)一个用户可以购买多本图书。
(5)一个用户对应一定单列表。
根据上面的设计规划出的实体有:
管理员信息实体、用户信息实体、图书实体、图书分类实体、订单实体、订单列表实体。
4.2E-R图
图2-1实体之间关系E-R图
图2-2管理员信息E-R图
图2-3订单列表E-R图
图2-4图书E-R图
图2-5订单列表E-R图
图2-6用户信息E-R图
图2-8综合E-R图
三、详细设计〔XX、XX
1.数据库中的所有表
根据项目要现数据库设计,用MicrosoftAccess建立数据库文件。
共建立4个表,分别为会员信息表、订单表、商品信息表、收货人信息表。
Gd_username会员信息表
列名
数据类型
长度
是否为空
ID
自动编号
否
Gd_username
文本型
否
Gd_password
文本型
否
Role
数字型
否
Gd_orderinfo订单表
列名
数据类型
长度
是否为空
ID
自动编号
否
gd_orderid
文本型
否
gd_orderdate
文本型
否
gd_productid
数字型
否
gd_price
数字型
否
gd_allprice
数字型
否
gd_count
数字型
否
gd_status
文本型
否
gd_userid
文本型
否
gd_name
文本型
否
gd_email
文本型
否
gd_tel
文本型
否
gd_code
文本型
否
gd_address
文本型
否
gd_remarks
文本型
否
商品信息表
列名
数据类型
长度
是否为空
ID
自动编号
否
name
OLE 对象
否
picture
文本型
否
author
文本型
否
publisher
数字型
否
printinOorder
文本型
否
pageNumber
文本型
否
ISBN
文本型
否
kaiben
文本型
否
specialDescription
文本型
否
sort
文本型
否
discount
文本型
否
contentsDescription
文本型
否
stocks
数字型
否
catalog
文本型
否
appreciation
文本型
否
remarks
文本型
否
click
数字型
否
price
数字型
否
收货人信息表
列名
数据类型
长度
是否为空
ID
自动编号
否
gd_username
文本型
否
gd_password
文本型
否
gd_email
文本型
否
gd_qq
文本型
否
gd_name
文本型
否
gd_identify
文本型
否
gd_tel
文本型
否
gd_address
文本型
否
gd_code
文本型
否
gd_joindate
文本型
否
gd_lastlogindate
文本型
否
gd_lastIP
文本型
否
gd_remarks
文本型
否
2.系统实现
主要代码功能:
AdminBean.java
数据的读取,管理员对数据的增、删、该操作
DBBean.java
对数据库的连接
DateBean.java
读取系统时间
ProductRecordBean.java
对product表变量的定义
OrderList.java
订单表〔gd_OrderInfo变量的定义
UserBean.java
用户登录后信息的显示、密码取回、增加用户、更新用户等
ProductBean.java
热门产品查询、分类查询、产品搜索类
getPasswordBean.java
将密码以E-mail方式发给用户
MVCServlet.java
session变量的定义
UsernameServlet.java
用户注册时对用户名是否可用的判断
VerifyCodeServlet.java
验证码的生成
3.系统界面
首页
用用户名admin,密码为123456登陆后
点击右下角"进入管理"
用用户名admin,密码123456登陆后效果:
修改会员界面
增加图书界面
订单管理
4.关键源代码
〔1.session会话实现:
publicclassMVCServletextendsHttpServlet
{
protectedvoidprocessRequest
throwsServletException,IOException
{
response.setContentType<"text/html;charset=UTF-8">;
PrintWriterout=response.getWriter<>;
request.setCharacterEncoding<"gb2312">;
response.setCharacterEncoding<"gb2312">;
Stringaction=request.getParameter<"action">.trim<>;
HttpSessionsession=request.getSession<>;
if>//用户登陆
{
Stringpasscode=request.getParameter<"passcode">;
if.equals>
{
Stringusername=request.getParameter<"username">.trim<>;
Stringpassword=request.getParameter<"password">.trim<>;
UserBeanuserbean=newUserBean<>;
Stringlogin=userbean.testLogin;
if
{
session.setAttribute<"gd_username","">;
session.setAttribute<"gd_password","">;
session.setAttribute<"gd_login","notlogin">;
//out.print<"passcodeyes,loginfail!
!
">;
response.sendRedirect<"userlogin.jsp">;
}
else
{
Stringuserinfo[]=login.split<"\\|">;
DateBeandate=newDateBean<>;
Stringlastlogindate=date.getDate<>;
StringlastIP=request.getRemoteAddr<>;
session.setAttribute<"gd_lastlogindate",userinfo[0]>;
session.setAttribute<"gd_lastIP",userinfo[1]>;
session.setAttribute<"gd_id",userinfo[2]>;
session.setAttribute<"gd_username",userinfo[3]>;
session.setAttribute<"gd_password",password>;
session.setAttribute<"gd_login","login">;
out.println<"lastlogindateis"+lastlogindate+"lastIPis"+lastIP>;
userbean.updateUserlogin,lastlogindate,lastIP>;
response.sendRedirect<"userlogin.jsp">;
}
}
else
{
session.setAttribute<"gd_username","">;
session.setAttribute<"gd_password","">;
session.setAttribute<"gd_login","notlogin">;
//out.print<"passcodenologinfail!
!
">;
response.sendRedirect<"userlogin.jsp">;
}
}
elseif>//用户注册
{
Md5m=newMd5<>;
Stringusername=request.getParameter<"username">;
Stringpassword=request.getParameter<"password">.trim<>;
Stringemail=request.getParameter<"email">;
Stringqq=request.getParameter<"qq">;
Stringname=request.getParameter<"name">;
Stringidentify=request.getParameter<"inentity">;
Stringtel=request.getParameter<"tel">;
Stringaddress=request.getParameter<"address">;
Stringcode=request.getParameter<"code">;
DateBeannowDate=newDateBean<>;
Stringjoindate=nowDate.getDate<>;
Stringlastlogindate=nowDate.getDate<>;
StringlastIP=request.getRemoteAddr<>;
UserBeanuserbean=newUserBean<>;
if>
{
out.println<"alert<'注册成功!
请登陆!
'>;"+";">;
out.println<"点击返回主页">;
}
else
{
out.println<"alert<'注册失败!
请确认注册信息是否有误!
'>;"+";">;
out.println<"点击返回注册页面">;
}
}
elseif>//用户获取密码,通过取回
{
Stringusername=request.getParameter<"username">;
Stringemail=request.getParameter<"email">;
out.print;
UserBeanuserbean=newUserBean<>;
if>
{
out.println<"已经发送到你的!
">;
}
else
{
out.println<"用户名或者错误,请输入正确的用户名和对应的!
">;
}
}
elseif>//用户退出登陆
{
session.setAttribute<"gd_username","">;
session.setAttribute<"gd_password","">;
session.setAttribute<"gd_login","notlogin">;
//out.print<"loginout!
!
">;
response.sendRedirect<"default.jsp">;
}
elseif>//管理员,退出登陆
{
session.setAttribute<"admin_gd_username","">;
session.setAttribute<"admin_gd_password","">;
session.setAttribute<"admin_gd_login","notlogin">;
response.sendRedirect<"default.jsp">;
}
elseif>//管理员登陆
{
Stringpasscode=request.getParameter<"passcode">;
if.equals>
{
Stringusername=request.getParameter<"username">;
Stringpassword=request.getParameter<"password">;
AdminBeanadminbean=newAdminBean<>;
Stringlogin=adminbean.admin_Login;
if>
{
out.println<"用户名或者密码错误..2秒后返回登陆页面..">;
out.println<"">;
}
else
{
session.setAttribute<"admin_gd_username",username>;
session.setAttribute<"admin_gd_password",password>;
session.setAttribute<"admin_gd_login","login">;
session.setAttribute<"admin_gd_role",login>;
response.sendRedirect<"gd_admin/gd_Admin.jsp">;
}
}
else
{
out.println<"验证码错误..2秒后返回登陆页面..">;
out.println<"">;
}
}
elseif>
{
AdminBeanab=newAdminBean<>;
Stringid=request.getParameter<"id">;
if>>
{
out.println<"
">;out.println<"删除成功..2秒后返回..">;
out.println<"">;
out.println<"
">;
}
else
{
out.println<"
">;out.println<"删除失败..2秒后返回..">;
out.println<"">;
out.println<"
">;
}
}
elseif>
{
StringpwdStatus=request.getParameter<"checkbox">;
Stringusername=request.getParameter<"username">;
Stringpassword=request.getParameter<"password">.trim<>;
Stringemail=request.getParameter<"email">;
Stringqq=request.getParameter<"qq">;
Stringname=request.getParameter<"name">;
Stringidentify=request.getParameter<"inentity">;
Stringtel=request.getParameter<"tel">;
Stri