《数据库系统》课程设计
   
    
     
      土特产网上销售系统设计与开发
     
    
   
    
    
    一、 系统需求分析
   
    
     (一) 需求概述
    
    
    随着计算机技术在各行各业的应用日益广泛深入,网络购物早已盛行。
    
    电子商务在各行各业的发展战略中占有重要地位,已成为各大企业的必经之路。商品流通不局限于传统渠道。网络平台已成为企业展示自我、提升形象的舞台。企业通过建立网站,将产品、资源等方面的信息展示在互联网上。计算机和互联网技术本身具有信息透明、信息传播速度快、管理速度快的特点,不仅可以改善原有的商业模式和效率,还可以为企业带来更高的收益。因此,拥有自己的购物网站对于企业来说是非常重要的。 与传统零售业相比,网络购物具有许多无法比拟的优势。首先,以店铺销售或商场销售为代表的零售行业,由于地域限制,局限在小范围内。借助互联网,消费者可以通过网上商城浏览和获取世界各地商家的商品信息;其次,通过网络购物渠道,消费者可以在家购物;第三,同样是商品信息和统计的管理,传统零售行业需要花费大量的人力才能完成,而很多销售网站信息可以轻松实现自动化管理,大大降低企业的管理成本;最后,建立自己的网上购物系统,有利于提升企业和商家的企业形象,提高服务质量,展示企业信息化水平。
    
    我设计的网购系统的数据库开发和存储,可以存储卖家需要销售的本地商品的所有信息,以及用户的所有信息。方便用户根据自己的喜好浏览自己喜欢的东西。如果他想买土特产,可以去网上买,登录后就可以去购物了。 店内各种土特产都分类详细,很容易找到当地的土特产品。同时,搜索系统可以轻松找到相关的本地产品。同时,买了喜欢的东西后,就可以结账了。通过填写您自己的信息,您可以下订单并完成购物流程。
    
    现在我们要建立一个本地产品的在线销售系统。我们应该管理卖家的本地产品、用户信息、用户的购买记录等基本信息。确保足够的安全。使网上购物系统得以推广,让更多的卖家和购物者认为网上购物系统非常实惠和方便。这是一个非常有用的购物系统
   
    
    
    功能模块设计:
   
    表1:功能模块设计图
    
     
   
面向不同用户实现不同功能:
- 面向顾客时,顾客可以浏览全部的商品信息,因为对商品进行了分类,所以顾客选择的商品种类更加细化,在完成购物后可以查看订单信息状态。
- 面向管理员时:管理员需要对各类商品,用户和订单信息进维护和修改,但是不能修改管理员自己的信息,在用户,商品信息出现差错时及时改正。
- 面向供货商时,供货商应只对商品负责,所以可以对商品增添减少,供应量取决于订单量,所以可以查看订单信息。包括自己的信息也可以查看。
    
    
    (二) 业务流分析
   
    
     用户界面:
    
    
    表2:用户流程图
   
     
   
普通用户:
- 浏览商品、按类别查询商品,查看商品的详细信息
- 查看购买商品之后的订单信息
- 注册成为用户
    管理员界面:
    
    表3:管理员流程图
    
     
   
管理员:
- 查看商品信息,判断是否需要补充商品,如果需要补充则通知供应商增删商品
- 查看订单信息,判断订单信息和商品库存是否一一对应,如果有误需要修改订单信息
- 可根据供应商供给需求修改供应商信息
- 修改用户信息
    供应商界面:
    
    表4:供应商流程图
    
     
   
供应商:
- 查看商品信息,根据商品数量决定是否供应
- 查看订单信息,以核对商品数量
**
    
    
    (三) 数据流分析
   
    **
    
    表5:数据流图
    
     
   
    
    
    (四) 数据字典
   
    
    
    
    
     
   
     
   
    
    
    二、 数据库概念结构设计
   
    
     (一) 实体分析
    
    
    经需求分析,本次课程设计中包含五个实体,他们分别是:用户实体、订单实体、管理员实体、商品实体、商品组实体、供应商实体。
   
    
     (二) 属性分析
    
    
    用户实体属性:用户编号,姓名,电话,密码,地址
    
    表6:用户实体属性图
    
     
   
    土特产商品实体属性:土特产商品编号,名称,价格,土特产商品组编号
    
    表7:土特产商品实体属性图
    
     
   
    订单实体属性:订单编号,订单日期,价格,用户编号,土特产商品编号
    
    表8:订单实体属性图
    
     
   
    土特产商品组实体属性:土特产商品组编号,土特产商品组名称,管理员编号,供应商编号
    
    表9:土特产商品组实体属性图
    
     
   
    管理员实体属性:管理员编号,管理员姓名,电话,密码,地址
    
    表9:管理员实体属性图
    
     
   
    供应商实体属性:供应商编号,密码,电话,地址,土特产商品组编号,订单编号
    
    表10:供应商实体属性图
    
     
   
    
     (三) 联系分析
    
    
    多个供应商可以供应多种商品组,多个用户也可以购买多种商品,多种商品的集合是一个商品组,但是一种商品对应一个订单,用户购买商品产生唯一订单对应唯一的商品。多个管理员管理所有商品组和所有订单和供应商,所以是多对多的关系。
    
    
     (四) 概念模型设计(CDM图)
    
    
    表11:CDM图
    
     
   
    
    
    三、数据库物理结构设计
   
    
     (一)概念模型转化为物理模型
    
   
- 
     一对一关系的转化
 
 用户只能查看一项订单,所以用户和订单是一对一关系
 
 一个商品产生一个订单,所以是一对一关系。
- 
     一对多关系的转化
 
 一个商品组由多个商品组成,商品组和商品关系是一对多
- 
     多对多关系的转化
 
 多个管理员管理多种信息
 
 一个用户可以购买多个商品,一个商品也可以被多个用户购买
 
 多个供应商供应多种商品组,也可以查看多个订单
 
 (二)物理逻辑模型设计(PDM图)
 
 表12:PDM图
 
   
    
    
    
     四、数据库物理实现
    
   
    
     (一) 表设计
    
    
    用户信息表:
    
    字段名称 数据类型 长度 取值范围 备注
    
    用户编号 char 10 0001-9999 主键,非空
    
    姓名 vchar 20 非空
    
    电话 Char 10
    
    密码 Char 10 非空
    
    地址 vchar 20
   
    土特产商品信息表:
    
    字段名称 数据类型 长度 取值范围 备注
    
    土特产商品编号 char 10 0001-9999 主键,非空
    
    土特产商品组编号 char 10 0001-9999 外键,非空
    
    名称 Vchar 20 非空
    
    价格 Float 非空
   
    订单信息表:
    
    字段名称 数据类型 长度 取值范围 备注
    
    订单编号 Char 10 0001-9999 主键,非空
    
    订单日期 Data 非空
    
    价格 Float 非空
    
    用户编号 char 10 0001-9999 外键,非空
    
    土特产商品编号 char 10 0001-9999 外键,非空
   
    土特产商品组信息表
    
    字段名称 数据类型 长度 取值范围 备注
    
    土特产商品组编号 char 10 0001-9999 主键,非空
    
    土特产商品组名称 vchar 20 非空
    
    供应商编号 char 10 0001-9999 外键,非空
    
    管理员编号 char 10 0001-9999 外键,非空
   
    管理员信息表:
    
    字段名称 数据类型 长度 取值范围 备注
    
    管理员编号 char 10 0001-9999 主键,非空
    
    管理员姓名 vchar 20 非空
    
    密码 Char 10 非空
    
    电话 Char 10 非空
    
    地址 vchar 20
   
    供应商信息表:
    
    字段名称 数据类型 长度 取值范围 备注
    
    供应商编号 char 10 0001-9999 主键,非空
    
    密码 Char 10 非空
    
    电话 Char 10 非空
    
    地址 vchar 20
    
    土特产商品组编号 char 10 0001-9999 外键,非空
    
    订单编号 Char 10 0001-9999 外键,非空
   
    
     (二) 创建表和完整性约束代码设计
    
    
    
     1. 创建用户信息表及完整性约束:
    
    
    create table 用户信息表(
    
    用户编号 char(10) not null primary key,
    
    姓名 varchar(20) not null,
    
    密码 char(20) not null,
    
    电话 char(10) null,
    
    地址 varchar(20) null,
    
    )
    
    
     2. 创建土特产商品信息表及完整性约束:
    
    
    create table 土特产商品信息表(
    
    土特产商品编号 char(10) not null primary key,
    
    土特产商品组编号 char(10) not null,
    
    名称 varchar(20) not null,
    
    价格 float not null,
    
    )
    
    alter table 土特产商品信息表
    
    add constraint FK_土特产商品信息表_REFRENCE_土特产商品组信息表 foreign key (土特产商品组编号)
    
    references 土特产商品组信息表(土特产商品组编号)
   
    
     3. 创建订单信息表及完整性约束:
    
    
    create table 订单信息表(
    
    订单编号 char (10) not null primary key,
    
    用户编号 char (10) not null,
    
    土特产商品编号 char (10) not null,
    
    订单日期 datetime not null,
    
    价格 float not null,
    
    )
    
    alter table 订单信息表
    
    add constraint FK_订单信息表_REFRENCE_用户信息表 foreign key (用户编号)
    
    references 用户信息表(用户编号)
   
    alter table 订单信息表
    
    add constraint FK_订单信息表_REFRENCE_土特产商品信息表 foreign key (土特产商品编号)
    
    references 土特产商品信息表(土特产商品编号)
   
    
     4. 创建土特产商品组信息表及完整性约束:
    
    
    create table 土特产商品组信息表(
    
    土特产商品组编号 char(10) not null primary key,
    
    土特产商品组名称 varchar(20) not null,
    
    管理员编号 char(10) not null,
    
    供应商编号 char(10) not null
    
    )
    
    alter table 土特产商品组信息表
    
    add constraint FK_土特产商品组信息表_REFRENCE_管理员信息表 foreign key (管理员编号)
    
    references 管理员信息表(管理员编号)
   
    alter table 土特产商品组信息表
    
    add constraint FK_土特产商品组信息表_REFRENCE_供应商信息表 foreign key (供应商编号)
    
    references 供应商信息表(供应商编号)
    
    
     5. 创建管理员信息表及完整性约束:
    
    
    create table 管理员信息表(
    
    管理员编号 char(10) not null primary key,
    
    管理员姓名 varchar(20) not null,
    
    密码 char(20) not null,
    
    电话 char(10) not null,
    
    地址 varchar(20) null,
    
    )
    
    
     6. 创建供应商信息表及完整性约束:
    
    
    create table 供应商信息表(
    
    供应商编号 char(10) not null primary key,
    
    密码 char(20) not null,
    
    电话 char(10) not null,
    
    地址 varchar(20) null,
    
    土特产商品组编号 char (10) not null,
    
    订单编号 char (10) not null
    
    )
    
    alter table 供应商信息表
    
    add constraint FK_供应商信息表_REFRENCE_土特产商品组信息表 foreign key (土特产商品组编号)
    
    references 土特产商品组信息表(土特产商品组编号)
   
    alter table 供应商信息表
    
    add constraint FK_供应商信息表_REFRENCE_订单信息表 foreign key (订单编号)
    
    references 订单信息表(订单编号)
    
    
     (三) 创建索引、视图和触发器
    
    
    
     1. 索引
    
    
    对管理员编号和供应商编号和用户编号创建唯一非聚集索引
    
    CREATE UNIQUE INDEX NUM on 管理员信息表(管理员编号);
   
CREATE UNIQUE INDEX NUM2 on 供应商信息表(供应商编号);
CREATE UNIQUE INDEX NUM3 on 用户信息表(用户编号);
    
     2. 视图
    
    
    1.对土特产商品创建视图
    
    CREATE VIEW 土特产商品_view
    
    AS SELECT *
    
    FROM 土特产商品信息表
   
- 
对土特产商品组创建视图 
 
 CREATE VIEW 土特产商品组_view
 
 AS SELECT *
 
 FROM 土特产商品组信息表
- 
对订单信息创建视图 
 
 CREATE VIEW 订单_view
 
 AS SELECT *
 
 FROM 订单信息表
    
     3. 触发器
    
    
    1.在新用户注册成功后,显示欢迎光临
    
    CREATE TRIGGER trigger_Emp
    
    ON 用户信息表
    
    AFTER INSERT
    
    AS
    
    PRINT’欢迎光临’
   
    2.管理员不可删除管理员成员
    
    CREATE TRIGGER DELETE_ID
    
    ON 管理员信息表
    
    instead of DELETE
    
    AS
    
    begin
    
    print’禁止删除’
    
    ROLLBACK TRANSACTION
    
    Endd
   
    3.在成功增加商品组后显示供应成功
    
    CREATE TRIGGER trigger_Emp1
    
    ON 土特产商品组信息表
    
    AFTER INSERT
    
    AS
    
    PRINT’供货成功’
   
    
    
    五、数据库功能调试
   
    
     (一) 用户模块
    
   
- 用户注册
     
   
- 
查询土特产商品 
 
   
- 
查看订单信息 
 
   
    
     (二) 供应商模块
    
   
- 供应商品
     
   
- 
退还商品 
 
   
- 
查看订单 
 
   
    
     (三) 管理员模块
    
   
- 
修改用户信息 
 
   
- 
修改商品信息 
 
   
- 
修改供应商信息 
     
   
- 
修改订单信息 
 
   
- 
修改商品组信息 
 
   
    六、设计总结
    
    在本次课程设计中,遇到了许多的困难,在技术方面有非常多的困难。比如在powerdesigner的使用上,由于大部分仍是英文,需要学习的东西非常多。在设计cdm时,表与表之间的关系一点要搞清楚,所以在一开始的时候,一点要最全局有个清楚的构思,我在写到后面时,不停的推翻前面的方案,导致图需要修改的很多,这就导致花费了许多的时间。
    
    在用pdm转成数据库时,连接不上数据库,在网上找了许多的方法,仍是不行,可能是缺失某个程序,但是可以转换成sql语句,但是cmd在转换成pdm时会把关系转换成表,原本我以后可以直接使用pdm转换的sql代码,但是会多出许多表,并且没有外键,只有索引,并且索引非常多,是因为太多的表造成的,所以最后我自己创建表设立主外键。
    
    在插入数据时,因为如果没有主键内容,插入外键信息会报错,只能将外键删除再重新插入,
    
    在功能实现上仍有不足,所有的主键信息都无法修改,也不能置空,所以在修改别的信息时如果牵扯到主键的修改就无法修改。
    
    总体说来,在这次一个学期的课程设计中,我学到了很多在课堂内学不到的知识。整个开发的过程对我来说是一次能力真正提高的过程;是将以前所学知识充分利用的过程;是一次将理论应用于实践的过程。我觉得这次课程设计是一次很有收获的实践.
   
 
