职场文秘网

首页 > 演讲致辞 > 会议致辞 / 正文

J2EE课程设计网上书店设计与实现

2020-12-21 10:47:18

J2EE课程设计 题目:网上书店设计与实现 目录 摘要 3 第一章 需求分析 3 1.1会员用户需求 3 1.2管理员用户需求 3 1.3匿名用户需求 3 1.4 总体功能需求 3 第二章 网站功能概述 3 2.1 功能概述 3 2.2 网站功能流程图 3 第三章 系统总体设计 3 3.1前台总体设计 3 3.2管理员系统设计 3 3.3数据库设计 3 第四章 详细设计 3 4.1 页面设计 3 4.2 业务逻辑设计 3 第五章 软件测试 3 5.1 测试工具 3 5.2 测试结果 3 第六章 设计总结 3 第七章 参考文献 3 第八章 源代码 3 摘要 摘要:随着互联网络的发展,网上书店越来越为人们所关注。通过网上书店,人们可以足不出户就选购自己所需的图书,有效缩短了图书流通环节,既省时又省力。该系统主要由前台网页和后台管理维护系统两部分构成。在支持整个网站的运作功能的基础上,能帮助不同权限的用户实现登录、验证身份、浏览图书信息、维护图书信息、加入购物车购买,并具有占用系统资源少、信息量大、站点维护方便、便于维护数据等优点。本文介绍了网上书店系统的开发模式和环境,并具体阐述了软件功能规划、总体分析设计、分模块的系统详细设计和软件测试的过程。

关键字:jsp;
数据库;
网上书店;
购物车 第一章 需求分析 需求分析是软件设计的一个重要的环节。本阶段对系统管理系统的应用情况作全面调查,以确定系统目标。确定用户的需求。网上书店系统主要是实现网上选书、购书、产生订单等功能的系统。一个典型的网上商城一般都需要实现商品信息的动态展示、购物车管理、客户信息注册登录管理、订单处理等模块。用户对系统的需求从以下几方面进行分析。

1.1会员用户需求 会员用户在网上购物看重的是方便和快捷,因此系统要使用户能够在大量的产品信息中迅速搜索到自己想要了解的产品信息。并且,由于用户中可能存在有很多并不熟悉网上购物流程的人,系统操作流程应该简单、易用。

首先用户能在书店中查询各种商品的介绍、实物图片、价格等基本信息,以便用户确定自己满意的商品。选好商品后,用户可以将所选商品放入购物车。

网上书店系统中会员用户的系统需求:
1.会员登陆及身份验证 A.会员用户实现登录 B.身份验证 C.修改个人资料 2.在线选购商品 A.浏览不同类别的书籍 B.图书查询 C.用户选购图书放入购物车和管理购物车 D.用户查看和提交订单 会员用户 登录验证 图书查询 购物车管理 订单管理 图1.1 会员用户用例图 1.2管理员用户需求 系统管理员在此系统中扮演着非常重要的角色,管理员可以进行商品管理、定单管理、用户管理等需求。并且系统面对大量的信息应该做到条理清楚,管理员能够轻松的找到需要的管理类别。为了实现这些需求,管理中心应该做到功能齐全,模块划分明确。

网上书店系统的前台模块管理员用户的系统需求:
A.书籍信息管理 B.交易信息管理 C.会员管理 管理员用户 图书管理 会员管理 订单管理 图1.2 管理员用户用例图 1.3匿名用户需求 匿名用户不需要登陆,只能进行图书浏览,不具有将图书加入购物车和管理购物车的功能,更不能增加删除图书信息。

匿名用户 只能浏览图书 不能加入购物车 图1.3 匿名用户用例图 1.4 总体功能需求 1. 图书查询需求 当客户进入网上书店时,应该在主页面中分类显示最新的书目信息,以供客户选择所需图书,同时也应该提供按照图书名称,或者作者住处快速查询所需书目信息的功能。

2. 购物车管理需求 当客户选择购买某图书产品时,应该能够将对应图书信息,例如:价格、数量记录到购物车中,并允许客户返回书目查询页面,选择其他商品,并添加到购物车中,当对购物订单生成后,应该能够自动清除以生成订单的购物车中的信息。

3. 订单处理需求 对应客户购买图书商品信息的需求,在确定了所购图书商品的价格、数量等信息后,提示用户选择对应的订单加入购物车。

4. 管理员与客户的分类功能 为了能够实现管理员和用户各自的所享有的功能,特将他们分类处理。

第二章 网站功能概述 2.1 功能概述 该系统主要分为几大模块:用户登录、网上购物和管理系统。各模块的功能如下:
(一)、用户登录 实现网上书店客户信息的身份验证。用户登录是为了保证用户在本网站的安全性,便于网站管理。用户登录后才可以进行购物,匿名用户只能进行图书浏览。不同的用户权限不同。

(二)、网上购物 1、书籍展示 用户可以通过搜索的方式查看书籍信息,搜索的方式有:按图书类别、按书名、按作者、按出版社。每本书都显示了书名、作者、定价等,如果想了解每本书的详细信息可以点击书名,详细信息还包括了图书封面、内容简介等。

2、购物车 用户在浏览书籍时,按下“放入购物车”按钮,就可以将书籍放入自己的购物车中,便于购买。用户还可以根据自己的需要,进行查看、修改和清空购物车的操作。

(三)、管理系统 管理系统是系统管理员对整个网站后台数据库进行维护,是此网站最重要的大门。在进入本栏目时系统会提示输入系统管理员的用户名和密码。它包括用户管理、书籍管理和订单管理。书籍管理包括图书库存管理、订单管理、图书销售情况管理。

1、图书库存管理 管理员可以添加新书、添加书籍分类以及修改书籍库存信息和删除书籍。

2、图书销售情况管理 管理员可根据日期和书号任一种或这两个条件作为查询条件,了解图书的销售情况。

3、订单管理 管理员可以根据日期查询并删除在此日期中的所有用户订单信息。

2.2 网站功能流程图 网站功能流程图如下所示 成功 失败 匿名用户 会员用户 身份验证 用户登录 网上书店 查看书籍 图书展示 放 入 购 物 车 图书搜索 验 证 管理员 用户管理 图书管理 订单管理 第三章 系统总体设计 3.1前台总体设计 网上购物系统前台 系统首页 商品列表 购物车 图3.1 网上书店前台功能模块图 根据功能的要求,网上书店系统的前台可划分为以下功能模块:
1. 用户登录功能:只有登录后才能使用本网站功能;

2. 购物车:用来存放客户购物过程中选出的货物;

3. 商品列表:了解到商城各种分类的商品;

3.2管理员系统设计 网上购物系统后台 用户管理 商品管理 订单管理 图3.2 网上书店后台功能模块图 根据功能的要求,本网上图书上书店系统的后台可划分为以下功能模块:
1.用户管理:对网站的用户进行审核管理。

2.商品管理:发布新商品以及对发布的商品进行管理。

3.订单管理:当用户购物商品后,管理员需要在后台审核并发货。

3.3数据库设计 数据库设计是系统开发中非常重要的另一个关键环节,如果设计不好,在后来的系统维护、变更时,甚至于在系统开发过程中,将引起比较严重的问题,则大量的工作将会重新运行。

下面是具体如何实现数据库设计的内容,在web项目里创建一个目录用于存放数据库表,该网上书店的项目名称为bookShop,在bookshop目录下创建一个名字为dataBase的目录。在dataBase目录下创建MS Access数据库,数据库名称为BookDB.mdb。在BookDB.mdb里创建三个数据库表,一个名字为book,用于记录书籍的详细信息,一个为orderList,用于记录书籍的订单列表信息,即订单信息,一个为orderDeatil,永固记录书籍的订单详细信息,即订单的书籍信息。其中数据库表book、orderList、orderDetil的详细信息如下表所示。

字段名称 字段类型 描述 字段含义 ID varchar(50) 不为空 主键 bookID varchar(100) 不为空 书籍ID号,唯一性 title varchar(50) 不为空 书名 name int(11) 可为空 作者 time date 出版时间 info varchar(1000) 可为空 书籍描述 pie Varchar(100) 可为空 单位 price varchar(100) 不为空 价格 saleAmount varchar(50) 不为空 销售数量 表3.1 数据库表book的详细信息 字段名称 字段类型 描述 字段含义 ID varchar(50) 不为空 主键 orderID varchar(100) 不为空 订单号 status varchar(60) 不为空 订单状态 name int(11) 不为空 顾客姓名 time date 订单时间 info varchar(100) 可为空 备注 allAmount Varchar(100) 不为空 所定书籍总数量 allMoney varchar(100) 不为空 所定书籍总金额 phone Varchar(50) 不为空 联系电话 address Varchar(100) 不为空 联系地址 code varchar(30) 可为空 邮政编码 表3.2 数据库表orderList的详细信息 字段名称 字段类型 描述 字段含义 ID varchar(50) 不为空 主键 orderID varchar(100) 不为空 订单号,与orderList表关联 bookID varchar(60) 不为空 ID号,与book表关联 price varchar(100) 不为空 价格 amount Varchar(100) 不为空 数量 info varchar(100) 可为空 备注 money varchar(100) 不为空 金额 表3.3 数据库orderDetail的详细信息 字段 类型 Key Null 默认 字段含义 Id varchar(50) PRI 是 NULL 管理编号 User varchar(50) 是 NULL 用户名 password varchar(50) 是 NULL 密码 表3.4 管理员表admin的定义 为了便于后面程序的开发和测试,在此先往数据库表book中添加几条记录,记录表如下所示。

bookID title name time pie price saleAmount IS00000001 JAVA Zhangsan 2007-12-1 本 20.50 0 IS00000002 C# Lisi 2006-10-1 本 18.00 0 IS00000003 C++ Wangwu 2006-8-1 套 120.30 0 IS00000004 Delphi Yaoliu 2007-2-1 套 80.90 0 IS00000005 .net Sunqi 2005-5-1 本 40.00 0 表3.5 往数据库表book中添加记录 第四章 详细设计 数据库设计完毕后,下面将进行网上书店整个系统的详细设计。详细设计是在需求分析的前提下,对系统所要实现的每个功能、每一个环节进行细化。在详细设计当中,需要考虑全面,更要考虑细节,包括页面、程序流程,以及需要用到的技术等。下面将通过页面设计、javaBean业务逻辑设计和程序流程设计等方面对网上书店进行详细的设计分析,为后面的系统开发、代码编写做好充分的准备工作。

4.1 页面设计 页面是系统与用户进行信息交互的最佳有效途径。向用户展示输出信息、获取用户端输入信息都是通过页面来实现的。网上书店的主要功能是实现展示书籍的列表信息、显示书籍的具体信息、选择书籍放入购物车、下订单购买书籍等。用户先是浏览书籍的列表信息,其次是对某本书感兴趣后,查看该本书籍的详细信息介绍,然后放入购物车,继续选择其他图书。期间如果觉得购物车中某种书籍不想购买了,这是可以把该书从购物车中删除。完成选择书籍并且确定购买时需要向系统下订单。只有在用户填写基本的联系信息并提交之后,这才完成了购物过程。该购物过程可以用下图来展示。

图4.1 购书过程图 从上图可以看出,需要一些怎么样的页面来显示信息和收集信息,需要的页面如表所示。

页面名称 描述 booklist.jsp 用于显示书籍列表信息页面,可以通过单击书籍,查看书籍详细信息 bookDetail.jsp 用于显示书籍的详细信息页面,可以返回bookList.jsp页面,也可以把书籍放入购物车中 bookCar.jsp 用于显示购物车信息页面,可以从购物车中删除已经选择的书籍,也可以返回bookList.jsp页面继续选择书籍,还可以完成选择书籍,到下订单页面 addBook.jsp 把选中的书籍放入购物车 order.jsp 用于用户输入订单信息页面,填写完整的用户信息后可以进行下一步确认购买页面 buy.jsp 确认购买书籍页面,显示购买书籍的订单信息,让用户确认 success.jsp 购买书籍,成功页面 error.jsp 用于系统出错信息显示页面 common.jsp 用于链接数据库操作类的通用页面 表4.1 需要的页面描述信息 在上表中只是列出了几个主要的页面,虽然这几个页面已经可以满足要求,但还可以增加别的页面,比如整站的首页、工具条页面、网站页脚信息页面。下表列出了各个页面的关联关系和访问信息。

图4.2 页面之间的访问关系 4.2 业务逻辑设计 从下图的购书过程图中,可以根据页面需要请求的业务逻辑处理,看哪些需要业务逻辑处理。

图4.3 页面之间的业务逻辑 从上图中可以看出,页面需要的业务逻辑处理。需要的业务逻辑处理类如下表所示。

类名称 描述 BookDB.java 对数据库进行操作的方法类。比如链接数据库,从数据库表中读取数据,向数据库表写数据等 BookDetail.java 表示书籍具体信息的实体类 ShopCar.java 购物车列表类 ShopCarItem.java 购物车列表详细条目信息类 Order.java 订单信息的实体类 表4.2 业务逻辑处理类的描述信息 在浏览书籍列表信息时,先要调用BookDB.java类,链接数据库并从数据库中读取书籍信息,然后在页面显示信息。当查看书籍具体信息时,需要调用BookDetail.java类。当把该书放入购物车时候,需要调用ShopCar.java类。当下订单,确认购买书籍的时候,需要调用BookDB.java类,链接数据库并往数据库中写订单信息。综上所述,可以知道各个jsp页面调用业务逻辑处理类之间的关联关系,它们之间的访问关系如下图所示。

图4.4 JSP页面调用业务逻辑处理类的关系 第五章 软件测试 5.1 测试工具 测试工具采用myeclipse + mysql + tomcat,经过反复的测试检验开发的结果。重启tomcat服务器,打开浏览器,在地址内输入http://localhost:8080/bookshop/main.html将会进入到登陆界面。bookList.jsp将会进入书籍列表界面,bookCar将会进入显示购物车信息界面,buy.jsp将会进入到订单信息。

5.2 测试结果 测试结果如下图界面所示。

图5.1 登录界面 图5.2 购物车清单界面 图5.3 图书列表界面 图5.4 订单信息界面 第六章 设计总结 本文简要介绍了网上书店购物系统的主要功能及体系结构,重点讨论了系统数据准备,数据库的逻辑结构分析,jsp与后台数据库链接等关键技术。这些技术的实现满足了系统的需要,优化了系统的性能。

本设计报告介绍了网上书店的web系统的设计开发过程。先是需求分析、软件功能概述、然后是总体设计、详细设计,最后是软件测试,直到能够真正运行起来。系统采用三层的B/S软件结构,其中jsp页面负责信息的展示和信息的输入,在jsp页面不做任何实际性的业务逻辑处理,而把业务逻辑处理交给JavaBean类来完成。Jsp结合应用JavaBean,在JavaBean里通过JDBC方式访问数据库。

第七章 参考文献 [1] 万峰科技编著.JSP网站开发四“酷”全书[M].电子工业出版社,2006 [2] 耿祥义编著.JSP基础编程[M].清华大学出版社,2004 [3] 李伟红 .SQL Server2005数据库及应用 .中国水利水电出版社,2007 [4] 龙怀冰 .SQL Server 2005实用开发教程 .人民邮电出版社,2006 [5] 廖疆星等著.中文Dreamweaver网页设计教程[M].冶金工业出版社,2003 [6] 四维科技主编.JSP网络编程与实例[M].人民邮电出版社,2005 [7] 李存斌 .SQL Server 2005实用教程 .中国水利水电出版社,2006.10.1 [8] 刘京华. Java Web整合开发王者归来.清华大学出版社.2011 第八章 源代码 1.BookDB.java package bookshop; import java.sql.*; import java.util.*; public class BookDB { private ArrayList alBooks; private String dbUrl=“jdbc:odbc:BookShopDB“; private String orderId; public BookDB () throws Exception{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver“); } public Connection getConnection()throws Exception{ return java.sql.DriverManager.getConnection(dbUrl); } public void closeConnection(Connection con){ try{ if(con!=null) con.close(); }catch(Exception e){ e.printStackTrace(); } } public void closePrepStmt(PreparedStatement prepStmt){ try{ if(prepStmt!=null) prepStmt.close(); }catch(Exception e){ e.printStackTrace(); } } public void closeResultSet(ResultSet rs){ try{ if(rs!=null) rs.close(); }catch(Exception e){ e.printStackTrace(); } } public int getNumberOfBooks() throws Exception { Connection con=null; PreparedStatement prepStmt=null; ResultSet rs=null; alBooks = new ArrayList(); try { con=getConnection(); String strSql = “select * “ + “from book“; prepStmt = con.prepareStatement(strSql); rs = prepStmt.executeQuery(); while (rs.next()) { BookDetail bd = new BookDetail(rs.getString(“bookID“), rs.getString(“title“), rs.getString(“name“),rs.getDate(“time“), rs.getString(“info“), rs.getString(“pie“),rs.getDouble(“price“),rs.getInt(“saleAmount“)); alBooks.add(bd); } }finally{ closeResultSet(rs); closePrepStmt(prepStmt); closeConnection(con); } return alBooks.size(); } public Collection getBookList()throws Exception{ Connection con=null; PreparedStatement prepStmt=null; ResultSet rs =null; alBooks = new ArrayList(); try { con=getConnection(); String strSql = “select * “ + “from book order by bookID“; prepStmt = con.prepareStatement(strSql); rs = prepStmt.executeQuery(); while (rs.next()) { BookDetail bd = new BookDetail(rs.getString(“bookID“), rs.getString(“title“), rs.getString(“name“),rs.getDate(“time“), rs.getString(“info“), rs.getString(“pie“),rs.getDouble(“price“),rs.getInt(“saleAmount“)); alBooks.add(bd); } }finally{ closeResultSet(rs); closePrepStmt(prepStmt); closeConnection(con); } Collections.sort(alBooks); return alBooks; } public BookDetail getBookDetail(String bookId) throws Exception { Connection con=null; PreparedStatement prepStmt=null; ResultSet rs =null; try { con=getConnection(); System.out.println(“getConnection“); String strSql = “select * from book where bookID = ? “; prepStmt = con.prepareStatement(strSql); prepStmt.setString(1, bookId); rs = prepStmt.executeQuery(); if (rs.next()) { BookDetail bd = new BookDetail(rs.getString(“bookID“), rs.getString(“title“), rs.getString(“name“),rs.getDate(“time“), rs.getString(“info“), rs.getString(“pie“),rs.getDouble(“price“),rs.getInt(“saleAmount“)); prepStmt.close(); return bd; } else { return null; } }finally{ closeResultSet(rs); closePrepStmt(prepStmt); closeConnection(con); } } public void buyBooks(ShopCar car)throws Exception { Connection con=null; Collection items = car.getItems(); Iterator i = items.iterator(); try { con=getConnection(); con.setAutoCommit(false); while (i.hasNext()) { ShopCarItem sci = (ShopCarItem)i.next(); BookDetail bd = (BookDetail)sci.getItem(); String bookId=bd.getBookId(); int quantity = sci.getQuantity(); buyBook(bookId, quantity,con); orderDetail(bd, quantity,con); } con.commit(); con.setAutoCommit(true); } catch (Exception ex) { con.rollback(); throw ex; }finally{ closeConnection(con); } } public void buyBook(String bookId, int quantity,Connection con) throws Exception { PreparedStatement prepStmt=null; ResultSet rs=null; try{ String strSql = “select * “ + “from book where bookID = ? “; prepStmt = con.prepareStatement(strSql); prepStmt.setString(1, bookId); rs = prepStmt.executeQuery(); if (rs.next()) { prepStmt.close(); strSql =“update book set saleamount = saleamount + ? where bookID = ?“; prepStmt = con.prepareStatement(strSql); prepStmt.setInt(1, quantity); prepStmt.setString(2, bookId); prepStmt.executeUpdate(); prepStmt.close(); } }finally{ closeResultSet(rs); closePrepStmt(prepStmt); } } public void orderDetail(BookDetail bd, int quantity,Connection con) throws Exception { PreparedStatement prepStmt=null; try{ String strSql =“insert into orderDetail(orderID,bookId,price,amount,moneys)“ + “ values(?,?,?,?,?)“; prepStmt = con.prepareStatement(strSql); System.out.println(orderId); prepStmt.setString(1,orderId); prepStmt.setString(2, bd.getBookId()); prepStmt.setDouble(3, bd.getPrice()); prepStmt.setInt(4, quantity); prepStmt.setDouble(5, bd.getPrice()*quantity); prepStmt.executeUpdate(); prepStmt.close(); }finally{ closePrepStmt(prepStmt); } } public void order(Order order) throws Exception{ Connection con=null; PreparedStatement prepStmt=null; try { con=getConnection(); String strSql = “insert into orderList(orderID,status,allAmount,allMoney,name,phone,address,code,info) “ + “ values(?,?,?,?,?,?,?,?,?)“; prepStmt = con.prepareStatement(strSql); orderId=getNowTime(); order.setOrderID(orderId); prepStmt.setString(1, orderId); prepStmt.setString(2, “有效“); prepStmt.setInt(3, order.getAllAmount()); prepStmt.setDouble(4, order.getAllMoney()); prepStmt.setString(5, order.getName()); prepStmt.setString(6, order.getPhone()); prepStmt.setString(7, order.getAddress()); prepStmt.setString(8, order.getCode()); prepStmt.setString(9, order.getInfo()); prepStmt.executeUpdate(); }finally{ closePrepStmt(prepStmt); closeConnection(con); } } public static String getNowTime() { java.util.Date ctime = new java.util.Date(); String rTime = ““; java.text.SimpleDateFormat cf = new java.text.SimpleDateFormat( “yyyyMMddHHmmss“); rTime = cf.format(ctime); return rTime; } } 2.BookDetail.java package bookshop; import java.util.Date; public class BookDetail implements Comparable { private String bookId=““; private String title=““; private String name=““; private Date time; private String info=““; private String pie=““; private double price=0; private int saleAmount=0; public BookDetail(String bookId,String title,String name, Date time,String info,String pie,double price,int saleAmount){ this.bookId=bookId; this.title=title; this.name=name; this.time=time; this.info=info; this.pie=pie; this.price=price; this.saleAmount=saleAmount; } public String getBookId() { return bookId; } public String getInfo() { return info; } public String getName() { return name; } public String getPie() { return pie; } public double getPrice() { return price; } public int getSaleAmount() { return saleAmount; } public Date getTime() { return time; } public String getTitle() { return title; } public void setBookId(String string) { bookId = string; } public void setInfo(String string) { info = string; } public void setName(String string) { name = string; } public void setPie(String string) { pie = string; } public void setPrice(double d) { price = d; } public void setSaleAmount(int d) { saleAmount = d; } public void setTime(Date date) { time = date; } public void setTitle(String string) { title = string; } public int compareTo(Object o) { BookDetail bd = (BookDetail)o; int lastCmp = title.compareTo(bd.title); return (lastCmp); } } 3. Order.java package bookshop; import java.io.Serializable; import java.util.Date; public class Order implements Serializable{ private String orderID=““; private String status=““; private Date time; private int allAmount=0; private double allMoney=0; private String name=““; private String phone=““; private String code=““; private String info=““; private String Address=““; public Order (){ } public Order (String orderID,String status, Date time, int allAmount, double allMoney,String name,String phone,String code,String info){ this.orderID=orderID; this.status=status; this.time=time; this.allAmount=allAmount; this.allMoney=allMoney; this.name=name; this.phone=phone; this.code=code; this.info=info; } public int getAllAmount() { return allAmount; } public void setAllAmount(int allAmount) { this.allAmount = allAmount; } public double getAllMoney() { return allMoney; } public void setAllMoney(double allMoney) { this.allMoney = allMoney; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getInfo() { return info; } public void setInfo(String info) { this.info = info; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getOrderID() { return orderID; } public void setOrderID(String orderID) { this.orderID = orderID; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } public Date getTime() { return time; } public void setTime(Date time) { this.time = time; } public String getAddress() { return Address; } public void setAddress(String address) { Address = address; } } 4.ShopCar.java package bookshop; import java.util.*; public class ShopCar { HashMap items = null; int numberOfItems = 0; public ShopCar() { items = new HashMap(); } public synchronized void add(String bookId, BookDetail book) { if(items.containsKey(bookId)) { ShopCarItem scitem = (ShopCarItem) items.get(bookId); scitem.incrementQuantity(); } else { ShopCarItem newItem = new ShopCarItem(book); items.put(bookId, newItem); } numberOfItems++; } public synchronized void remove(String bookId) { if(items.containsKey(bookId)) { ShopCarItem scitem = (ShopCarItem) items.get(bookId); scitem.decrementQuantity(); if(scitem.getQuantity() <= 0) items.remove(bookId); numberOfItems--; } } public synchronized Collection getItems() { return items.values(); } protected void finalize() throws Throwable { items.clear(); } public synchronized int getNumberOfItems() { return numberOfItems; } public synchronized double getTotal() { double amount = 0.0; for(Iterator i = getItems().iterator(); i.hasNext(); ) { ShopCarItem item = (ShopCarItem) i.next(); BookDetail bookDetails = (BookDetail) item.getItem(); amount += item.getQuantity() * bookDetails.getPrice(); } return roundOff(amount); } private double roundOff(double x) { long val = Math.round(x*100); return val/100.0; } public synchronized void clear() { items.clear(); numberOfItems = 0; } } 5.ShopCarItem.java package bookshop; public class ShopCarItem { Object item; int quantity; public ShopCarItem(Object anItem) { item = anItem; quantity = 1; } public void incrementQuantity() { quantity++; } public void decrementQuantity() { quantity--; } public Object getItem() { return item; } public int getQuantity() { return quantity; } } 6.addBook.jsp <%@ page contentType=“text/html; charset=GB2312“ %> <%@ include file=“/common.jsp“ %> <%@ page import=“java.util.*“ %> <jsp:useBean id=“car“ scope=“session“ class=“bookshop.ShopCar“/> <html> <head><title>addBook.jsp</title></head> <body> <% String bookId = request.getParameter(“Add“); String title = request.getParameter(“title“); if (bookId != null) { BookDetail book = bookDB.getBookDetail(bookId); car.add(bookId, book);%> <CENTER><TABLE border=“0“> <TBODY align=“center“> <% String str=“你已将编号为:“+bookId+“,书名为:“+title+“的书籍放进购物车!“; out.println(“<TR>“); out.println(“<TD colspan='2' align='center'>“+str+“</TD>“); out.println(“</TR>“); }%> <TR> <TD colspan=“2“ align=“center“>-------------------------------------</TD> </TR> <TR> <TD colspan=“2“ align=“center“> <a href=“/bookshop/bookList.jsp“>继续购书</a> <a href=“/bookshop/bookCar.jsp“>我的购物车</a> </TD> </TR> </TBODY> </TABLE></CENTER> </body> </html> 7.bookCar.jsp <%@ page contentType=“text/html; charset=GB2312“ %> <%@ include file=“/common.jsp“ %> <%@ page import=“java.util.*“ %> <jsp:useBean id=“car“ scope=“session“ class=“bookshop.ShopCar“/> <html> <head><title>bookCar.jsp</title></head> <body> <CENTER><TABLE border=“0“> <TBODY align=“center“> <TR> <TD colspan=“8“ align=“center“>我的购物车</TD> </TR> <% String bookId = request.getParameter(“Remove“); if (bookId != null) { car.remove(bookId); BookDetail book = bookDB.getBookDetail(bookId); out.println(“你删除了一本编号为:“+bookId+“,书名为:“+book.getTitle()+“的书籍“); } if (request.getParameter(“Clear“) != null) { car.clear(); } %> <TR> <TD width=“60“>序号</TD> <TD width=“150“>书籍编号</TD> <TD width=“200“>书籍名称</TD> <TD width=“100“>单位</TD> <TD width=“100“>单价</TD> <TD width=“100“>数量</TD> <TD width=“120“>金额</TD> <TD width=“100“></TD> </TR> <TR> <TD colspan=“8“ align=“center“>----------------------------------------------------------------------------------------------------------------------</TD> </TR> <% Iterator i = car.getItems().iterator(); int j=1; int allQuantity=0; double allMoney=0; while (i.hasNext()) { ShopCarItem item = (ShopCarItem)i.next(); BookDetail book = (BookDetail)item.getItem(); out.println(“<TR>“); out.println(“<TD width='60'>“+j+“</TD>“); out.println(“<TD width='150'><a href='/bookshop/bookDetail.jsp?bookId=“+book.getBookId()+“'>“+book.getBookId()+“</a></TD>“); out.println(“<TD width='200'>“+book.getTitle()+“</TD>“); out.println(“<TD width='100'>“+book.getPie()+“</TD>“); out.println(“<TD width='100'>“+book.getPrice()+“</TD>“); out.println(“<TD width='100'>“+item.getQuantity()+“</TD>“); out.println(“<TD width='120'>“+item.getQuantity()*book.getPrice()+“</TD>“); out.println(“<TD width='100'><a href='/bookshop/bookCar.jsp?Remove=“+book.getBookId()+“'>删除</a></TD>“); out.println(“</TR>“); j=j+1; allQuantity=allQuantity+item.getQuantity(); allMoney=allMoney+item.getQuantity()*book.getPrice(); } %> <TR> <TD colspan=“8“ align=“center“>----------------------------------------------------------------------------------------------------------------------</TD> </TR> <TR> <TD width=“60“></TD> <TD width=“150“></TD> <TD width=“200“></TD> <TD width=“100“></TD> <TD width=“100“>合计:</TD> <TD width=“100“><%=allQuantity%></TD> <TD width=“120“><%=allMoney%></TD> <TD width=“100“></TD> </TR> <TR> <TD colspan=“8“ align=“center“> <a href=“/bookshop/bookList.jsp“>继续购书</a> <a href=“/bookshop/bookCar.jsp?Clear=clear“>清空购物车</a> <a href=“/bookshop/order.jsp“>购书,下订单</a> </TD> </TR> </TBODY> </TABLE></CENTER> </body> </html> 8.bookDetail.jsp <%@ page contentType=“text/html; charset=GB2312“ %> <%@ include file=“/common.jsp“ %> <%@ page import=“java.util.*“ %> <html> <head><title>bookDetail.jsp</title></head> <body> <% String bookId = request.getParameter(“bookId“); BookDetail book = bookDB.getBookDetail(bookId); String title=book.getTitle(); %> <CENTER><TABLE border=“0“> <TBODY align=“center“> <TR> <TD colspan=“2“ align=“center“>书籍详细信息</TD> </TR> <TR> <TD width=“120“>书籍编号:</TD> <TD width=“480“><% out.println(book.getBookId());%></TD> </TR> <TR> <TD width=“120“>书籍名称:</TD> <TD width=“480“><% out.println(book.getTitle());%></TD> </TR> <TR> <TD width=“120“>作者:</TD> <TD width=“480“><% out.println(book.getName());%></TD> </TR> <TR> <TD width=“120“>出版日期:</TD> <TD width=“480“><% out.println(book.getTime());%></TD> </TR> <TR> <TD width=“120“>单位:</TD> <TD width=“480“><% out.println(book.getPie());%></TD> </TR> <TR> <TD width=“120“>单价:</TD> <TD width=“480“><% out.println(book.getPrice());%></TD> </TR> <TR> <TD width=“120“>书籍描述:</TD> <TD width=“480“><% out.println(book.getInfo());%></TD> </TR> <TR> <TD colspan=“2“ align=“center“> <a href=“/bookshop/bookList.jsp“>返回</a> <a href=“/bookshop/bookCar.jsp“>我的购物车</a> <a href=“/bookshop/addBook.jsp?Add=<%=bookId%>&title=<%=title%>“>放入购物车</a> </TD> </TR> </TBODY> </TABLE></CENTER> </body> </html> 9.bookList.jsp <%@ page contentType=“text/html; charset=GB2312“ %> <%@ include file=“/common.jsp“ %> <%@ page import=“java.util.*“ %> <html> <head><title>bookList.jsp</title></head> <body> <CENTER><TABLE border=“0“> <TBODY align=“center“> <TR> <TD colspan=“4“ align=“center“>书籍列表</TD> </TR> <TR> <TD width=“100“>序号</TD> <TD width=“150“>书籍编号</TD> <TD width=“200“>书籍名称</TD> <TD width=“150“>作者</TD> </TR> <% Collection c = bookDB.getBookList(); Iterator i = c.iterator(); int j=1; while (i.hasNext()) { BookDetail book = (BookDetail)i.next(); out.println(“<TR>“); out.println(“<TD width='100'>“+j+“</TD>“); out.println(“<TD width='150'><a href='/bookshop/bookDetail.jsp?bookId=“+book.getBookId()+“'>“+book.getBookId()+“</a></TD>“); out.println(“<TD width='200'>“+book.getTitle()+“</TD>“); out.println(“<TD width='150'>“+book.getName()+“</TD>“); out.println(“</TR>“); j=j+1; } %> <TR> <TD colspan=“4“ align=“center“><a href=“/bookshop/bookCar.jsp“>我的购物车</a></TD> </TR> </TBODY> </TABLE></CENTER> </body> </html> 10.buy.jsp <%@ page contentType=“text/html; charset=GB2312“ %> <%@ include file=“/common.jsp“ %> <%@ page import=“java.util.*“ %> <jsp:useBean id=“car“ scope=“session“ class=“bookshop.ShopCar“/> <jsp:useBean id=“order“ scope=“session“ class=“bookshop.Order“/> <html> <head><title>buy.jsp</title></head> <body> <CENTER><TABLE border=“0“> <TBODY align=“center“> <TR> <TD colspan=“7“ align=“center“>请确认您的订单信息</TD> </TR> <TR> <TD colspan=“7“ align=“center“>---------------------------------------------------------------------------------------------------------------</TD> </TR> <TR> <TD colspan=“7“ align=“left“>订单的书籍信息:</TD> </TR> <TR> <TD width=“60“>序号</TD> <TD width=“150“>书籍编号</TD> <TD width=“200“>书籍名称</TD> <TD width=“100“>单位</TD> <TD width=“100“>单价</TD> <TD width=“100“>数量</TD> <TD width=“120“>金额</TD> </TR> <% Iterator i = car.getItems().iterator(); int j=1; int allQuantity=0; double allMoney=0; while (i.hasNext()) { ShopCarItem item = (ShopCarItem)i.next(); BookDetail book = (BookDetail)item.getItem(); out.println(“<TR>“); out.println(“<TD width='60'>“+j+“</TD>“); out.println(“<TD width='150'><a href='/bookshop/bookDetail.jsp?bookId=“+book.getBookId()+“'>“+book.getBookId()+“</a></TD>“); out.println(“<TD width='200'>“+book.getTitle()+“</TD>“); out.println(“<TD width='100'>“+book.getPie()+“</TD>“); out.println(“<TD width='100'>“+book.getPrice()+“</TD>“); out.println(“<TD width='100'>“+item.getQuantity()+“</TD>“); out.println(“<TD width='120'>“+item.getQuantity()*book.getPrice()+“</TD>“); out.println(“</TR>“); j=j+1; allQuantity=allQuantity+item.getQuantity(); allMoney=allMoney+item.getQuantity()*book.getPrice(); } %> <TR> <TD width=“60“></TD> <TD width=“150“></TD> <TD width=“200“></TD> <TD width=“100“></TD> <TD width=“100“>合计:</TD> <TD width=“100“><%=allQuantity%></TD> <TD width=“120“><%=allMoney%></TD> <TD width=“100“></TD> </TR> <TR> <TD colspan=“7“ align=“center“>---------------------------------------------------------------------------------------------------------------</TD> </TR> <TR> <TD colspan=“7“ align=“left“>订单的联系信息:</TD> </TR> <% String name = request.getParameter(“name“); String phone = request.getParameter(“phone“); String address = request.getParameter(“address“); String postcode = request.getParameter(“postcode“); String info = request.getParameter(“info“); order.setName(name); order.setPhone(phone); order.setAddress(address); order.setCode(postcode); order.setInfo(info); order.setAllAmount(allQuantity); order.setAllMoney(allMoney); %> <TR> <TD width=“60“></TD> <TD width=“150“>姓名:</TD> <TD width=“200“ align=“left“><%=name %></TD> <TD width=“100“>电话:</TD> <TD width=“100“ align=“left“><%=phone %></TD> <TD width=“100“>邮编:</TD> <TD width=“120“ align=“left“><%=postcode %></TD> </TR> <TR> <TD width=“60“></TD> <TD width=“150“>地址:</TD> <TD colspan=“5“ align=“left“><%=address %></TD> </TR> <TR> <TD colspan=“7“ align=“center“>---------------------------------------------------------------------------------------------------------------</TD> </TR> <TR> <TD colspan=“8“ align=“center“> <a href=“/bookshop/booCar.jsp“>返回</a> <a href=“/bookshop/success.jsp“>确定购买</a> </TD> </TR> </TBODY> </TABLE></CENTER> </body> </html> 11.common.jsp <%@ page import=“bookshop.*“ %> <%@ page import=“java.util.Properties“ %> <%@ page errorPage=“error.jsp“ %> <jsp:useBean id=“bookDB“ scope=“application“ class=“bookshop.BookDB“/> <%! public String convert(String s){ try{ return new String(s.getBytes(“ISO-8859-1“),“GB2312“); }catch(Exception e){return null;} } %> 12.error.jsp <%@ page import=“java.io.*“ %> <%@ page contentType=“text/html; charset=GB2312“ %> <%@ page isErrorPage=“true“ %> <html><head><title>Error Page</title></head> <body> <p> 服务器端发生错误:<%= exception.getMessage() %> </p> <p> 错误原因为:<% exception.printStackTrace(new PrintWriter(out));%> </p> </body></html> 13.order.jsp <%@ page contentType=“text/html; charset=GB2312“ %> <%@ include file=“/common.jsp“ %> <%@ page import=“java.util.*“ %> <html> <head><title>order.jsp</title></head> <body> <FORM action=buy.jsp method=“POST“> <CENTER><TABLE border=“0“> <TBODY align=“center“> <TR> <TD colspan=“2“ align=“center“><br>请填写您的联系信息</TD> </TR> <TR> <TD width=“120“>您的姓名:</TD> <TD><input type=“text“ name=“name“ size=“40“/></TD> </TR> <TR> <TD width=“120“>联系电话:</TD> <TD><input type=“text“ name=“phone“ size=“40“/></TD> </TR> <TR> <TD width=“120“>详细地址:</TD> <TD><input type=“text“ name=“address“ size=“40“/></TD> </TR> <TR> <TD width=“120“>邮政编号:</TD> <TD><input type=“text“ name=“postcode“ size=“40“/></TD> </TR> <TR> <TD width=“120“>备注信息:</TD> <TD><input type=“text“ name=“info“ size=“40“/></TD> </TR> <TR> <TD colspan=“2“ align=“center“> <a href=“/bookshop/bookCar.jsp“>返回</a> <input type=submit value=“确定下订单“> </TD> </TR> </TBODY> </TABLE></CENTER> </FORM> </body> </html> 14.success.jsp <%@ page contentType=“text/html; charset=GB2312“ %> <%@ include file=“/common.jsp“ %> <%@ page import=“java.util.*“ %> <jsp:useBean id=“car“ scope=“session“ class=“bookshop.ShopCar“/> <jsp:useBean id=“order“ scope=“session“ class=“bookshop.Order“/> <html> <head><title>success.jsp</title></head> <body> <% bookDB.order(order); bookDB.buyBooks(car); session.invalidate(); %> <CENTER><TABLE border=“0“> <TBODY align=“center“> <TR> <TD colspan=“2“ align=“center“>恭喜您,订单成功!</TD> </TR> <TR> <TD colspan=“2“ align=“center“>您需要购买的书籍已经订购成功,请您在7个工作日内注意查收。</TD> </TR> <TR> <TD colspan=“2“ align=“center“> <a href=“/bookshop/bookCar.jsp“>返回</a> </TD> </TR> </TBODY> </TABLE></CENTER> </body> </html>

Tags: 课程设计   书店   设计  

搜索
网站分类
标签列表