的数据内容又有内在联系,因此总结出如下的信息表。(1)图书信息总表。(2)用户分为一般用户和管理员。(3)订单分为单张详细订单和订单总表。(4)一个用户可以购买多本图书,对应一张或多张订单。(5)订单总表。本系统设计了一个数据库,该库包含了 6 个数据表,分别是图书表、图书分类表、管理员表、用户表、订单表、订单明细表。经过上述的功能分析和需求总结,设计如下所示的数据项和数据结构。
(1)图书表,包括图书编号、图书名称、图书分类编号等。 (2)图书分类表,包括图书分类编号、图书分类名称。 (3)管理员表,包括管理员名、管理员密码。 (4)用户表,包括用户名、用户密码等。
(5)订单表,包括订单编号、图书编号、订购数量。
(6)订单明细表,包括订单编号、用户编号、提交订单时间等。
2.数据库概念结构设计
根据以上的数据项和数据结构,就可以设计出满足需求的各种实体。本系统规可以划出的实体有:图书实体、图书分类实体、管理员实体、用户实体,订单实体、订单明细实体。实体以及它们之间的关系可采用实体-关系图,即 E-R图表示出来,图略。
3.数据库逻辑结构设计
将上面的数据库概念结构转化为数据库的逻辑结构。存放各个实体相关信息的表的定义如下。 创建数据库db_shop,并创建九个数据表,图书的分类表两个,表 3-1和表 3-2:
表 3-1 图书的大类tb_ superType
字段 id typeName 用途 类别序号 图书类别名称 int Varchar 数据类型 4 50 长度 注释 主键,自动编号 自动保存 表 3-2 图书的子类tb_ subType
字段 id superType TypeName 用途 类别ID 父类ID 类别名称 int int varchar 数据类型 4 4 50 长度 注释 主键,自动编号 图书的大类编号 子类编号
图书表一个,用来表示图书的详细信息:
表 3-3 图书表tb_goods
字段 ID typeID goodsName introduce price 用途 图书入库序号 图书的子类编号 图书名称 简介 价格 数据类型 bigint int varchar text money 4 4 200 16 8 长度 注释 主键,自动编号 nowPrice picture INTime newGoods sale hit 实际价格 插图 入库时间 新书标记 特价标记 访问量 money varchar datetime int int int 8 100 8 4 4 4
书店的公告信息,例如打折促销等:
表 3-4 公告表tb_ bbs
字段 ID title content intime 用途 订单序号 公告信息标题 公告信息正文 发布公告时间 int varchar varchar datetime 数据类型 4 100 4000 8 长度 注释 主键,自动编号
图书的订购信息表两个, 定购汇总单和定购清单,表 3-5和表 3-6。
表 3-5 定购汇总单tb_order
字段 OrderID bnumber username Truename address postcode tel pay carry rebate OrderDate enforce bz 用途 订单序号 清单数量 定购用户 用户真实姓名 用户地址 用户邮编 用户电话 支付方式 订单支付方式 打折情况 订单生成日起 执行情况 订单注释信息 数据类型 bigint Int varchar varchar varchar varchar varchar varchar varchar int int int varchar 8 2 15 15 100 10 20 20 20 8 4 4 200 长度 注释 主键,自动编号 1执行,0未执行 表 3-6 定购清单tb_ detail
字段 用途 数据类型 长度 注释 id orderID goodsID price number 序号 订单序号 定购的图书序号 图书单价 数量 bigint bigint bigint money int 8 8 8 8 4 主键,自动编号 用户表两个,网站注册的普通用户和管理员,表 3-7和表 3-8:
表 3-7 普通用户tb_ member
字段 id 用途 入库序号 数据类型 bigint varchar varchar varchar varchar varchar varchar varchar varchar In t money varchar varchar int 8 20 20 20 20 100 6 24 20 4 8 20 100 4 长度 注释 主键,自动编号 1冻结 userName 用户注册名 trueName 用户真实姓名 passWord city address postcode cardNO cardType grade Amount tel email freeze 注册密码 城市 地址 邮编 证件编号 证件类型 可享受折扣等级 已购买总额 电话 邮箱 账户冻结情况 表 3-8 管理员表tb_ manager
字段 id Manager Pwd 用途 入库序号 管理员帐号 密码 int Varchar varchar 数据类型 4 20 20 长度 注释 主键,自动编号
网上书店的规定的购书享受折扣表:
表 3-9 折扣情况表tb_ rebate
字段 Grade Amount 用途 折扣级别 折扣要求金额 数据类型 varchar money 20 8 长度 注释 主键,表示级别 rebate 回扣,折扣 float 8
4.数据库连接类(JavaBean)
为了方便访问数据库,可以定义一个数据库连接类,实现数据库的连接。类的定义如下: package com; import java.sql.*; import java.io.*; import java.util.*; public class connDB {
public Connection conn = null; public Statement stmt = null; public ResultSet rs = null;
private static String dbClassName =\ private static String dbUrl =\ private static String dbUser = \ private static String dbPwd = \ //数据库驱动
public static Connection getConnection() { Connection conn = null; loadProperty(); try {
Class.forName(dbClassName).newInstance();
conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd); }
catch (Exception ee) { ee.printStackTrace(); }
if (conn == null) { System.err.println(
\警告: DbConnectionManager.getConnection() 获得数据库链接失败.\\r\\n\\r\\n
链接类型:\链接位置:\用户/密码\ dbUser + \
}
return conn; }
//数据库查询
public ResultSet executeQuery(String sql) { try {
conn = getConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); rs = stmt.executeQuery(sql); }
catch (SQLException ex) {
System.err.println(ex.getMessage());