毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

基于JSP网上书店系统 第4页

更新时间:2008-3-23:  来源:毕业论文

基于JSP网上书店系统 第4页

3.2  系统功能模块化

如图3-2为本系统的功能模块图。

 

若图片无法显示请联系QQ752018766

3.3  数据库设计

 

数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率,以及实现的效果产生影响。合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致。

3.3.1  数据库需求分析

针对一般在线书店的需求,得出如下需求信息。

§           用户分为游客和已注册用户。

§           订单分为单张详细订单和总订单。

§           一个用户可以购买多本图书。

§           一个用户对应一张订单。

§           一个列表对应多张订单。

针对本系统功能分析,总结出如下的需求信息。

§           用户,包括数据项:用户ID、用户名、密码。

§           图书,包括数据项:图书编号、图书名、价格、图书介绍。

§           订单列表,包括数据项:订单编号、图书编号、购书数量。

§           订单,包括数据项:订单编号、用户编号、下单时间。

 

 

3.3.2  数据库概念结构

从本系统中规划出的实体有:用户实体、图书实体、订单实体、订单列表实体。

实体之间关系的E-R图如图3-3所示。

购书

用户

订单列表

订单

图书

 

                                            1            N

                M                N

 

           1

 

                         L

 

                          N

3-3

 

用户信息实体的E-R图如图3-4所示。

图书实体的E-R图如图3-5所示。

订单实体的E-R图如图3-6所示。

订单列表实体的E-R图如图3-7所示。

若图片无法显示请联系QQ752018766

 数据库逻辑机构设计

在线书店数据库中各个表的设计结果如下面的标和所示。

3-8为图书信息列表。

 

第四章  详细设计

 

4.1 系统概述

              我设计的这个系统是一个由JSP实现的网上购书系统。它实现了基本的登录验证、查询商品、分页处理、购物车处理以及订单处理功能,其主要界面见图4-1:若图片无法显示请联系QQ752018766

4.2 系统主要文件

      这个购书系统主要有2类文件,一类是Bean文件,我把它们统一放在了cart文件夹里,保存在jakarta-tomcat-5.0.27\common\classes\cart下,(这是tomcat要求的默认存放Bean的路径);另一类是jsp文件,保存在jakarta-tomcat-5.0.27\webapps\ROOT。(这是tomcat的默认工作环境)

Bean文件CartManager.javaOrderEntity.javaOrderItemEntity.java

                     ProductEntity.javaUserEntity.java

Jsp  件:cart.jsp

4.3 详细代码及说明

4.3.1实现用户实体的Bean

    1)用户作为实体,我把他的id, 姓名,密码作为其属性在Bean里面做了定义,它们都是和数据库里的user表相对应的,在这个Bean里封装的方法也主要是对这个表进行操作.这个几个属性都被定义为类的私有成员,外界不可访问

       private String id;

       private String userName;

       private String userPassword;

       2)构造函数里做了2件事情,第一:寻找数据库连接驱动;第二:对上面的3个私有成员初始化:

public static String sDBDriver = "sun.jdbc.odbc.JdbcOdbcDriver";

public static String sConnStr = "jdbc:odbc:cart";

public static Connection conn = null;

public UserEntity(String id,String userName,String userPassword)

       {

              try

              {

                     Class.forName(sDBDriver);

//采用Class.forName方法显式加载一个驱动程序

                 }

            catch(java.lang.ClassNotFoundException e)

            {

                     System.err.println("UserEntity: " + e.getMessage());

              }

             

              this.id=id;

              this.userName=userName;

              this.userPassword=userPassword;

             

       }

       根据上面对变量sDBDriver sConnStr的定义和初始化可以看出,我在连接数据库的时候采用的是jdbc-odbc桥的方式,这种方式采用的驱动是JDK自带的,不需要另外安装。但是,为了与特定的数据库连接,我们必须建立一个数据源:cart。给3个属性赋值,我利用了this指针。

       3)这个类我封装了2类方法:一是查找特定用户名的所有记录,代码如下:

    public static UserEntity queryUser(String userName) throws SQLException

       {

              try

              {

                     Class.forName(sDBDriver);

                 }

            catch(java.lang.ClassNotFoundException e)

            {

                     System.err.println("UserEntity: " + e.getMessage());

              }

               

                //query from database

              String sql="select id,user_name,user_password from user where user_name= ? ";

                           

              ResultSet rs = null;

              try

              {

                     conn = DriverManager.getConnection(sConnStr);

                     PreparedStatement prepStmt = conn.prepareStatement(sql);

                    

                     prepStmt.setString(1,userName);

                    

                     rs = prepStmt.executeQuery();

              }

              catch(SQLException ex)

              {

                     System.err.println("OrderItemEntity executeQuery: " + ex.getMessage());

              }

                           

              UserEntity user=null;

              if(rs.next())

                     user=new UserEntity(rs.getString(1),rs.getString(2),rs.getString(3));

             

              return user;

             

       }

    这个函数有1个参数,String userName,就是通过这个用户名在user表里查询相应的用户的。要查询数据库里user表,就必须先连接数据库。连接数据库第一步是加载驱动,之后就是进行连接。我采用DriverManager类的getConnection方法来建立与cart数据源的连接,连接成功后,返回一个Connection类的对象conn.要查找特定用户名的纪录,其实就是对uesr进行查询操作。PreparedStatement对象就是用于查询语句的执行,它是Statement的子类,与Statement不同的地方,PreparedStatement对象可以接受参数,这里需要接受的参数是user_name,然后进行预编译。在每一次执行这个查询,都可以给sql语句传输不同的user_name,这样大大提高了灵活性。要想查询后的结果最后显示给用户,必须对ResultSet对象进行操作,即对rs进行操作。我在程序里是把该记录赋给一个UserEntity对象。

       该类封装的另一种方法是:用户名和密码的获得。这个主要是为了方便后面验证用户合法性使用

           public String getUserName()

       {

              return userName;

       }

      

       public String getUserPassword()

       {

              return userPassword;

       }

 

4.3.2实现商品实体的Bean

       虽然我做的是一个购书系统,但考虑到系统的可扩展性,我把书当作一种商品来进行定义。同样,参照数据库里的product表,我给商品这个类定义了如下4个属性,商品id,商品名称,商品价格,商品note,其类型同样是该类的私有属性:

    private String id;

       private String productName;

       private String productPrice;

       private String productNote;

1)其构造函数和用户实体类基本上一致,所以代码及其说明我在这里就省略了。

2)对商品的操作也主要是2类,一类是对特定商品的查询,其原理和查询用户是一样的,但是有一点小小的区别,即查询商品可以使查询所有的商品,或者是查询特定id的商品,我通过以下代码把这2种查询合在了queryProduct这个函数里:

String sql="select id,product_name,product_price,product_note from product ";

              if(productId.compareTo("")!=0)

                     sql=sql+" where id = ? ";

              Vector v=new Vector();

              ResultSet rs = null;      

       其关于连接数据库,查询记录的代码和上面的大致雷同,所以在这里就省略了。

显示商品是分页显示的,其代码如下:

           while(rs.next())

              {

                     ++i;

                     if(i>pageCount*pageSize)

                     {

                            if(i<=(pageCount+1)*pageSize)

                                   v.add(new ProductEntity(rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4)));

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页

基于JSP网上书店系统 第4页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。