JSP网上书店的实现 课程设计
第一章系统设计
1.1需求分析
网上书店系统主要是实现网上选书、购书、产生订单等功能的系统。一个典型的网上商城一般都需要实现商品信息的动态提示、购物车管理、客户信息注册登录管理、订单处理等模块。
根据网上书店的基本需求,需要完成的任务如下:
A.书图查询: 当客户进入网上书店时,应该在主页面中分类显示最新的
书目信息,以供客户选择所需图书,同时也应该提供按照图书名称,
或者作者信息快速查询所需书目信息的功能。
B.购物车管理:当客户选择购买某图书产品时,应该能够将对应图书信
息,如:价格、数量记录到对应的购物车中,并允许客户返回书目查
询页面,选择其他商品,并添加到购物车中,当对应的购物订单生成
后,应该能够自动清除以生成订单的购物车中的信息。
C.订单处理:对应客户购买图书商品信息的需求,在确定了所购图书商
品的价格、数量等信息后,提示用户选择对应的送货方式及付款方式,
最终生成对应的订单记录,以便于网站配货人员依据订单信息进行后
续的出货、送货的处理。
D.会员注册:为了能够实现图书商品的购买,需要管理客户相关的联系
方式、送货地点等相关的信息。
1.2总体设计
系统组成:下表中给出了构成网上书店系统的各个组件,通过下表,可以从宏观上了解各个组件的功能。
1.3功能设计
1).图书信息管理
该模块实现图书书目信息的分类显示,也是提供图书信息依据书名及作者信息快速搜索的功能。此外,在用户选择了对应书目信息后,还可以显示出有关该图书的详细信息,以便于客户了解所购商品。
2).购物车管理
用于维护每一个进入网上书店的客户对应的购物车。即将客户所选购的图书商品信息记录到对应的购物车中,以便于到收银台进行结账处理。
3).会员注册
实现网上书店客户信息的注册、及身份验证。由于目前网上商城普遍采用的
方式为送货上门或者邮寄,因此需要收集与客户相关的联系方式、通信地址等信息。
4).订单处理
根据客户购物车中的信息,以及客户所选择的送货方式和付款方式,连同客户对应的个人信息生成订单,以便于后续进行送货处理。
1.4网上书店基本流程
1.5系统的模块图如下图所示:
会员服务系统数据流程图
网上书店销售系统的E-R图如上图
1.6网上书店各页面功能
1)网上书店首页book Main. jsp详细功能及描述
获取图书分类信息以及图书基本信息集合
循环显示图书分类信息
提交显示指定分类图书信息的请求,同时传递对应图书分类编号提交书目搜索请求及搜索条件的表单
提交搜索关键字的表单元素
选择搜索条件的表单元素
显示图书记录总数、当前页面编号以及总页数
循环显示对应图书书目信息
显示图书名称、价格、销售价格、作者信息
提交显示图书详细信息请求的超链接
提交分页显示请求的超链接,同时提交指定页面编号
在本页面中,当单击选择书目分类时,将提交book Search. do? Book Cat Id=<%=book Cat. Get Id()%mode=1”请求,以便于获取对应图书分类的相关信息。当选择了查询依据,并且输入了对应关键字,单击“搜索”按钮时,将提交“book Search. do”请求,同时提交查询条件,进行后续书目信息搜索的处理。当在书目列表中单击查看详细信息请求时,将发出“book Detail .do”请求,同时传递对应图书记录的编号,以获取指定图书更加详细的信息。此外,在单击“首页”、“上页”、“下页”超链接后,需要分别提交以下语句“book Page. Dopage Id=<%=book Page. Do page Id=<%=schSta. Get Page Id()-1%>”,“book Page. Dopage Id=<%= schSta. Get Page Id()+1%>”等请求,以实现页面的跳转
2)图书详细信息book Show. jsp页面详细功能及描述
依据图书记录编号获取待显示详细信息的图书类型的对象
分别显示该图书对象的详细信息
显示图书封面图片、名称、详细介绍、价格、销售价格
单击“购买”按钮后,将提交放入购物车的请求
显示图书目录
本页面是在控制器响应了网上书店主页提交的查看图书详细信息请求,即“book Deatial. do”请求后,跳转到的页面。在该页面中将获取到的指定图书详细信息显示出来,同时如果用户单击“购买”按钮,将提交“book Buy. do? Book Id=<%=book. Get Id()%>”请求,进行后续放入购物车的处理。
3)图书详细信息book Show. jsp页面详细功能及描述
依据图书记录编号获取待显示详细信息的图书类型的对象
分别显示该图书对象的详细信息
显示图书封面图片、名称、详细介绍、价格、销售价格
单击“购买”按钮后,将提交放入购物车的请求
显示图书目录
本页面是在控制器响应了网上书店主页提交的查看图书详细信息请求,即“book Deatial. do”请求后,跳转到的页面。在该页面中将获取到的指定图书详细信息显示出来,同时如果用户单击“购买”按钮,将提交“book Buy. do? Book Id=<%=book. Get Id()%>”请求,进行后续放入购物车的处理。
4)购物车信息book Shop Cart. jsp页面详细功能及描述
获取该用户购物车中信息的集合
提交更新购物车请求的表单
循环显示购物车中的每一条购物记录信息
设置购买数量的文本框
显示图书销售价格
显示图书总价
从购物车中移除购买记录信息
更新订单按钮
提交继续购书请求的超链接
提交清空购物车请求的超链接
提交结算付款请求的超链接
本页面是在用户选择购买某种图书商品后,进入的页面。在该页面中将显示该用户购物车中现有的所有购买需求记录。同时提供更新购物车的操作界面,例如,可以输入购买数量或者选择删除购买记录。单击“更新订单”按钮后,将提交“up date Shop Cart. do”请求,进行更新购物车信息的处理。此外,也可以单击“继续购书”按钮,提交“book Search. do”请求返回网上书店主页面继续购书,或者单击“清空购物车”按钮提交“clear Shop Cart. do”请求。同时,如果用户确认去收银台,则可以单击“结算付款”按钮跳转到“user Login. jsp”页面进行用户登录。
5)网上书店客户登录user Login. jsp页面详细功能及描述
提交用户登录请求,同时提交登录用户信息的表单
提交登录用户用户名及密码的表单元素
登录按钮
提交新用户注册请求的超链接
本页面是客户在购物车页面单击“结算付款”按钮后跳转过来的页面,在该页面中,用户在表单中输入用户名及密码,单击“用户登录”按钮后,将提交“login. do”请求,以便于进行后续获取用户相关信息的处理,对于没有用户身份的新客户,可以在本页面中单击“新用户注册”按钮,跳转到“user Register. jsp”页面进行用户注册。
第二章网页设计
2.1 建立数据源
使用JSP和Power Builder来构建一个网上书店销售系统,可以分成两大部分,第一部分是普通程序,用于客户在网上选购图书,第二部分是管理程序,用于在服务器端处理客户的定单。客户端程序由以下几个部分构成:
default. jsp:会员登录界面(首页);
check logon. jsp:检测登录代码和密码是否一致,根据由JSP返回的结果显示不同的信息。
Buyer Bean:会员的合法性检验所用的Bean;
booklist. jsp:给登录会员显示当前书店中可供选择的图书;
addcart. jsp:将所选的图书加入购物车;
shopping cart. jsp:查看购物车的内容;
首先要在本地数据库上建立一个ODBC数据源:bookstore。
步骤如下:
1)在开始->设置->控制面版中选取“数据源(ODBC)”;在Win 2000 Professional和Server中分别位于“开始->设置->控制面版->管理工具”和“开始->程序->管理工具”下。
(2)启动“数据源(ODBC)”配置程序,界面如图所示。
(3)在图中“系统DSN”选项下单击“添加”按钮,来添加一个系统的数据源(DSN),出现所示数据源驱动程序选择界面:
2.2 会员登陆
做一个网上书店,在顾客开始购书之前,必须要记录用户的一些信息以便用户在不同的分类、不同的页面购书时,最后能够去收款台统一结帐,而且网上书店同时有许多人在选购图书,也要求对不同的顾客进行区分,可以在购书之前进行注册成为会员,以后只用会员代码和密码即可登录。
为了便于说明现在的电子商务网站,由JSP做页面表现,由Java Bean做应用逻辑的结构,会员登录程序分成两大部分:一、Java Bean用于对数据库的操作,验证用户名和密码是否正确;二、JSP页面部分,用于供用户会员代码和密码以及显示验证结果。
2.2.1 会员登陆java bean
会员信息表如图
其中member ID 是主键,用于区分不同的会员,新会员注册时只能使用没有被使用的用户代码。
在验证时我们只要使用验证用户的member ID和其pwd是否一致即可判断该用户是否合法,如果合法则其登录次数加1。
验证部分的Java Bean的代码
BuyerBean. Java
import Java. sql.*;
public class Buyer Bean {
private String member ID = null ;
private String member Name = null;
private String pwd = null;
private int logon times = -1;
private static String strDB Driver = “sun. jdbc. odbc.Jdbc Odbc Driver”
private static String str DBUrl = “jdbc: odbc: bookstore”;
private Connection conn =null;
private Result Set rs = null;
public Buyer Bean (){
try {
Class. For Name(str DBDriver );
}
catch(Java. lang. Class Not Found Exception e){
System. err. println(“Buyer Bean():” + e.get Message());
}
}
public int get Logon times(){
String strSql = null;
try{
conn = Driver Manager. Get Connection (str DBUrl);
Statement stmt = conn. Create statement();
Str Sql = “Select logon Times, member name from buyer Info where member ID = ‘” + member ID + “’ and pwd =’” + pwd + “’”;rs = stmt. execute Query(str Sql);
while (rs. next()){
logon times = rs. Get Int(“logon Times”);
member Name = rs. get String(“member name”);
}
rs.close();
if (logontimes != -1 ) strSql = “Update buyerInfo set
logon Times = logon Times +1 where member ID = ‘”+ member ID + “’”;
smt. Execute Update (str Sql);
}
stmt. close();
conn. close();
测试Bean中的各个方法是否能够正常工作
public static void main(String args[]){
Buyer Bean buyer = new Buyer Bean ();
buyer. Set Member ID (“abcd”);
buyer. Set Pwd(“1234”);
System. out. Println (buyer. Get Logon times());
System. Out. Println (buyer. Get Member Name());
}
}
在Buyer Bean中用了package p050705054; 在发布到WEB SERVER时,可以用JAR把编译后的Buyer Bean. class 打包成JAR文件在服务器的环境变量class
path中给予指定,或者在服务器class path环境变量指定的目录下建一个p050705054文件夹,把Buyer Bean. class放到p050705054目录下。
2.2.2 会员登陆htm 和jsp
主页如图所示:
会员登陆页面如图:
登陆部分的java been 代码
Check logon. jsp
CUUG ON LINE BOOK STORE – MEMBER LOGIN
CUUG 网上书店
<%String memberID = request.getParameter(“memberID”);
String pwd = request.getParameter(“pwd”);
buyer.setMemberID(memberID);
buyer.setPwd(pwd);
%>
<% int logonTimes = buyer.getLogontimes() ;
if (logonTimes > 0){
session.putValue("memberID",memberID);
%>
<%= buyer.getMemberName() %>欢迎你第
<%= logonTimes +1%>次来到CUUG网上书店
进入书店
<%
}
else{
%>
对不起,<%= memberID %>你的用户名和密码不一致
重新登录
<%
}
%>
2.3选择书籍
2.3.1选书java been
会员登录之后,合法的用户将可以看到本书店中可供选择的图书,并且将他感兴趣的书放入“购物车”,在去“收银台”结帐之前,该用户可以放弃购买其购物车中的任何一本书。在此处我们用Book Bean来获取图书的信息,在Book list. jsp中显示这些书。
在会员选书部分, 仍用Java Bean来操作数据库,用jsp来做页面表现。
图书信息表如图
其中,book ISBN 是主键,区分不同的图书。Java Bean要根据不同的图书的book ISBN来获得其相应的书名、作者、出版社、价格、简介等信息。同时Java Bean 还要有列出书店中所有图书的信息的功能。
选书部分的java been代码
/Buyer Bean Java
package p050705054;
import Java. sql.*;
public class Book Bean {
private String book ISBN = null;
private String book Name = null;
private String book Author = null;
private String publisher = null;
private String introduce = null;
private String price = null;
private static String str DBDriver = "sun.j dbc. odbc. Jdbc Odbc Driver";
private static String str DBUrl = "jdbc: odbc: book store";
private Connection conn =null;
private Result Set rs = null;
public Book Bean(){
try {
Class .for Name(str DBDriver );
}
catch(Java. Lang .Class Not Found Exception e){
System .err. println ("Book Bean ():" + e. get Message());
}
}
public Result Set get Book List(){
String str Sql = null;
try{
conn = Driver Manager. Get Connection (str DBUrl);
Statement stmt = conn.create Statement();
Str Sql = "Select book ISBN,book Name, book Author, publisher ,price from book Info ";
rs = stmt. Execute Query (str Sql);
}
catch(SQL Exception e){
System. err. println("BookBean. Get Book List():" + e.get Message());
}
return rs ;
conn = Driver Manager. get Connection(str DBUrl);
Statement stmt = conn. create Statement();
Str Sql = "Select * from book Info where book ISBN = '" + ISBN + "'";
rs = stmt. execute Query(str Sql);
while (rs. next()){
book Name = rs. get String("book Name");
book Author = rs. get String("book Author");
publisher = rs. Get String("publisher");
introduce = rs. get String("introduce");
price = rs. get String("price");
}
}
catch(SQL Exception e){
System. err. Println ("Book Bean. Get BookList():" + e.get Message());
}
}
public void set Book ISBN (String ISBN){
this. book ISBN = ISBN;
get Book Info(book ISBN);
}
public static void main(String args[]){
Book Bean book = new Book Bean ();
book. Set Book ISBN("7-5053-5316-4");
System. out .println(book. get Book Name());
System. out. println(book. get Book Author());
System. out. println(book. Get Publisher());
System. out. Println (book. Get Introduce());
System. out. println (book. Get Price());
try{
Result Set tmp RS = book. Get BookList();
while (tmpRS. next()){
System. out. Println (tmpRS. Get String("book name"));
}
tmpRS. close();
}
2.3.2 选书登陆htm 和jsp
会员选择书籍页面如下:
会员正确登录之后,即可进入书店进行选书,在check logon. jsp中将会员的代码(member ID)放入系统的session中,为了保证用户只能从主页面登录进入书店,在给会员显示可供选择的图书之前,先检查session中是否有member ID的合法值,如果没有则提示用户先去登录。
登陆选书部分的java been 代码:
/book list. jsp
CUUG Book Store On Line -member:<%= session. Get Value("member ID") %>
function open win(str)
(open("addcart"shoppingcart","width=300,height=200,resizable=1,scro llbars=2");
return;
}
//-->
if(session.getValue("memberID")==null"".equals(session.getValue("memberID")) ){
else{
%>
<%= rs. Get String("book Name")%> | <%= rs. get String("book Author")%> | <%= rs. Get String("publisher")%> | <%= rs. get String("price")%> | 加入购物车 |
<%
}
%>
2.4 选购书籍的基本信息
决定选购的书籍基本信息如图:
确定所选书籍的java been代码:
bookinfo.jsp
function open win (str)
{window.open("addcart.jsp?isbn="+str,"shoppingcart","width=300,height=200,res izable=1,scrollbars=2");
return;
}