网上商城购物系统(1)

来源:互联网 发布:java的就业前景 编辑:程序博客网 时间:2024/04/30 11:42

 ☝☝☝请一定要先看目录!

后面单独的语句部分请看☞ 网上购物商城(2)


1.产品的部分功能性需求


1.用户的自我管理

用例名称

用户注册

用例编号

SRS-01

用例简介

注册一个新用户

优先级

High

前置条件

后置条件

显示注册成功提示,并跳到登录页。

操作流程

步骤

触发者

描述

1

用户

输入个人信息。

2

系统

检测个人信息是否合法。

3

系统

将个人信息录入数据库。

替代流程

 

例外流程

 

约束条件

注册用户名要合法,并检测用户名是否为空或已存在。

输入及约束

用户名(name) :字符串,长度0-10,直接输入,必填。

密码(password):字符串,长度0-30,直接输入,必填。

确认密码(passwordCheck):字符串,长度0-30,直接输入,必填。

省份(province):整型,必填。

城市(city):整型,必填。

邮箱(email):字符串,长度0-30,直接输入。

手机号(telephone):字符串,长度11,直接输入。

验证码(validateCode):字符串,长度0-5,用户输入。必填。

 

 

用例名称

用户登录

用例编号

SRS-02

用例简介

用户登录

优先级

High

前置条件

用户已经注册

后置条件

转到用户管理主页。

操作流程

步骤

触发者

描述

1

用户

输入登录信息,勾选是否记住用户。

2

系统

检测是否为空。

3

系统

若勾选,则写入Cookie,访问数据库,检测登陆信息是否正确。若正确,改写Session,进入个人管理首页;否则,请用户重新登录,到用例SRS-05。

替代流程

 

例外流程

 

约束条件

检测输入的用户名是否合法,并检测用户名是否为空。

输入及约束

用户名(name):字符串,长度0-10,直接输入,必填。

密码(password):字符串,长度0-30,直接输入,必填。

是否记住用户(isRemember):布尔型,可选输入。


 

用例名称

用户基本信息修改

用例编号

SRS-07

用例简介

用户修改自己的详细信息。

优先级

High

前置条件

用户已经登录

后置条件

进入用户详细信息显示页

操作流程

步骤

触发者

描述

1

用户

打开自己的详细信息显示页,并进入修改页面。

2

系统

分类显示用户的基本信息,要求以文本框的形式显示。

3

用户

修改自己的基本信息(姓名、昵称、姓名可见度、性别、年龄、生日、所在省份、所在城市、头像、个性签名)。

修改自己的联系方式(联系电话、QQ、MSN)。

修改自己的个人爱好(爱好书籍、爱好音乐、爱好电影、爱好运动、爱好游戏)。

4

用户

单击确定按钮。

5

系统

将用户修改的信息提交到数据库,并返回修改结果。

替代流程

 

例外流程

 

约束条件

无。

输入及约束

性别(sex):布尔型,选择输入。

年龄(age):整型,选择输入。

账户余额(money):money型,默认为0。

生日(birthday):日期类型,选择输入。

所在省份(provinceID):外键(Province表),长度0-255,列表框选择输入。

所在城市(cityID):外键(City表),长度0-255,列表框选择输入。

头像(photo):字符串,长度0-500,记录文件保存在网站文件夹的位置,用户上传。

个性签名(dsp):字符串,长度0-200,直接输入。

邮箱(email):字符串,长度0-30,直接输入。

手机号(telephone):字符串,长度11,直接输入。

QQ号码(qq):字符串,长度0-15,只要求数字,直接输入。

MSN(msn):字符串,长度0-50,邮箱格式,直接输入。

爱好书籍(loveBook):字符串,长度0-200,直接输入。

爱好音乐(loveMusic):字符串,长度0-200,直接输入。

爱好电影(loveMovie):字符串,长度0-200,直接输入。

爱好运动(loveSport):字符串,长度0-200,直接输入。

爱好游戏(loveGame):字符串,长度0-200,直接输入。


1.2搜查商品

                                             

用例名称

搜索商品

用例编号

SRS-08

用例简介

用户输入关键字来搜索相应的所有商品。

优先级

High

前置条件

 

后置条件

 

操作流程

步骤

触发者

描述

1

用户

进入搜索页面,输入搜索商品的关键字,可选择一项搜索关键字的条件(如商品类别、品牌、价格等)来搜索商品。

2

系统

根据用户搜索的关键字查询数据库,若找到符合要求的商品则显示出来,否则显示没有相应商品信息存在。

替代流程

 

例外流程

 

约束条件

输入搜索商品关键字不为空。

输入及约束

关键字(searchKey):字符串,长度0-20,直接输入,必填。

 

 

用例名称

查看商品

用例编号

SRS-09

用例简介

用户查看相应商品的详细信息。

优先级

High

前置条件

 

后置条件

 

操作流程

步骤

触发者

描述

1

用户

点击已搜索到的想要查看其信息的商品。

2

系统

根据用户点击的商品查询数据库,若找到符合要求的商品则将该商品的详细信息显示出来,否则显示没有相应商品信息存在。

替代流程

 

例外流程

 

约束条件

 

输入及约束

 


1.3购买商品

                                                     

用例名称

下订单

用例编号

SRS-12

用例简介

用户将想要购买的商品订单下好,生成新的订单。

优先级

High

前置条件

用户已经登录

后置条件

 

操作流程

步骤

触发者

描述

1

用户

将订单的具体信息填写完整。

2

系统

将这份订单的信息存入数据库,生成一份新订单,没有付款则订单的付款项为:未付款,订单只下发给卖家但卖家不发货。

替代流程

 

例外流程

 

约束条件

商品信息不为空、商品库存足够订单要求、用户账户余额足够、一个订单号只给一次订单使用,不管订单完成与否订单号只能使用一次。

输入及约束

买家用户名:从买家信息表中调出该信息,存入订单表中。

卖家用户名:从卖家信息表中调出该信息,存入订单表中。

商品信息:从商品表中调出该商品的各类信息。

购买数量:整型,直接输入,必填。

送货地址:字符串,长度0-100,必填。

买家手机号:字符串,长度11,必填。

 

 

用例名称

支付费用

用例编号

SRS-13

用例简介

用户支付费用到商城(作为中间人),并在订单中显示已付款,卖家可发货。

优先级

High

前置条件

用户已经登录,并下订单。

后置条件

 

操作流程

步骤

触发者

描述

1

用户

选择支付此订单。

2

系统

将订单中显示为已付款,提醒卖家发货。

替代流程

 

例外流程

 

约束条件

买家支付宝中余额足够。

输入及约束

 

备注

将订单中支付状态改为已支付。

 

1.4用户订单管理

                                                           


用例名称

用户修改订单状态

用例编号

SRS-16

用例简介

用户收到货物后对订单状态改为完成,管理员可进行转账。

优先级

High

前置条件

有用户已对卖家下订单,并且订单状态为发货状态。

后置条件

显示订单状态修改为:XX,后跳转到该订单信息页面。

操作流程

步骤

触发者

描述

1

用户

收到货后用户打开订单。

2

系统

从数据库调出订单信息。

3

用户

用户将订单状态改为完成。

4

系统

数据库记录修改后的订单状态(完成)。

替代流程

 

例外流程

 

约束条件

 

输入及约束

商品信息(从订单所对应的外键商品表中调取信息)。

卖家用户名(从订单表中调出信息)。

用户信息(从数据库调出发货地址、手机号等)。

修改订单状态:完成。


 1.5卖家订单管理

                                                       


用例名称

卖家修改订单状态

用例编号

SRS-17

用例简介

卖家对订单状态进行修改。

优先级

High

前置条件

有用户已对卖家下订单,卖家可修改订单状态。

后置条件

显示订单状态修改为:XX,后跳转到该订单信息页面。

操作流程

步骤

触发者

描述

1

卖家

查询用户对自己所下的订单。

2

系统

从数据库调出订单信息。

3

卖家

根据货物库存对订单状态进行修改。

4

系统

数据库记录修改后的订单状态(撤销、付款、发货、延后)。

替代流程

 

例外流程

 

约束条件

 

输入及约束

商品信息(从订单所对应的外键商品表中调取信息)。

卖家用户名(从订单表中调出信息)。

用户信息(从数据库调出发货地址、手机号等)。

修改订单状态:选择输入,分为4种状态(撤销、付款、发货、延后)。

 

 

用例名称

卖家修改订单信息

用例编号

SRS-18

用例简介

卖家对订单信息进行修改。

优先级

High

前置条件

该订单商品为此用户所卖才能修改。

后置条件

跳转到该订单信息页面。

操作流程

步骤

触发者

描述

1

卖家

查询用户对自己所下的订单。

2

系统

从数据库调出订单信息。

3

卖家

将想要修改的订单信息进行修改。

4

系统

调取数据库记录,判断修改后订单是否合理(货物库存是否足够,且商品类型不能修改,数量只能减少不能增加,若要增加只能卖家与买家再次进行一次订单交易),修改后保存。

替代流程

 

例外流程

 

约束条件

 

输入及约束

商品信息(从订单所对应的外键商品表中调取信息)。

卖家用户名(从订单表中调出信息)。

用户信息(从数据库调出发货地址、手机号等)。

 

1.6商品管理

                                                        


用例名称

商品上架

用例编号

SRS-19

用例简介

卖家发布要出售的商品的信息。

优先级

High

前置条件

用户是已注册成员。

后置条件

跳转到该商品的信息页面。

操作流程

步骤

触发者

描述

1

卖家

发布商品各项信息。

2

系统

进入数据库,添加商品信息。

替代流程

 

例外流程

 

约束条件

 

输入及约束

买家用户名:

商品信息:

 

用例名称

修改商品信息

用例编号

SRS-20

用例简介

修改卖家发布的商品信息。

优先级

High

前置条件

用户已登陆,且修改的是自己发布的商品。

后置条件

跳转到该商品的信息页面。

操作流程

步骤

触发者

描述

1

卖家

修改商品信息。

2

系统

进入数据库,修改商品信息。

替代流程

 

例外流程

 

约束条件

 

输入及约束

买家用户名:

商品信息:


1.7划账管理

                                                   

 

 

用例名称

管理员将款项返还买家

用例编号

SRS-21

用例简介

用户已付款给中介管理员,但因退货或货物丢失所导致的订单交易失败,用户可申请退款请求,管理员将用户转账资金返还买家。

优先级

High

前置条件

用户已登陆,并且订单付款项为已付款、订单状态为撤销则为退货或货物未到,款项返还买家。

后置条件

 

操作流程

步骤

触发者

描述

1

用户

订单付款项为已付款且订单状态被撤销时用户可点击请求退款。

2

管理员

核实交易情况,若属实则点击同意请求。

3

系统

系统将用户在此订单所转账冻结的资金返还给用户的账户上,此项交易完成。

替代流程

 

例外流程

 

约束条件

 

输入及约束

 

 

 

用例名称

管理员将款项划给卖家

用例编号

SRS-22

用例简介

交易成功,管理员将买家已付款的款项划给卖家。

优先级

High

前置条件

订单付款项为已付款、订单状态为完成则视为交易成功,管理员将款项划给卖家。

后置条件

 

操作流程

步骤

触发者

描述

1

系统

系统检测到某一订单付款项为已付款,订单状态为完成,则视为交易成功,提醒管理员转账。

2

管理员

核实交易情况,若属实则点击同意转账。

3

系统

系统将用户在此订单所转账冻结的资金划给该订单的卖家,此项交易完成。

替代流程

 

例外流程

 

约束条件

 

输入及约束

 

 


2.2数据库环境说明

本系统采用Oracle数据库系统

3. 数据库的命名规则

        (1)、表名以tb_开头,当表名中含有两个以上的英文单词时,单词间不加空格,但是从第二个单词开始的单词首字母要大写。

       (2)、表中的字段名首字母小写,字段名中含有两个以上的英文单词时,单词间不加空格,但是从第二个单词开始的单词首字母要大写。

4. 逻辑设计

详细设计略。

5. 物理设计

6.1表汇总

表名

功能说明

tb_user

用户表

tb_product

产品表(商品表)

tb_productType

产品类型

tb_order

订单表

tb_userAccount

用户资金流水表(只允许新增记录,不允许修改、删除)

tb_review

评论表

tb_city

城市表

tb_province

省份表

tb_productSize

产品型号表

tb_productColor

产品颜色

 

6.2 tb_user表(用户信息表)

表名

tb_user

列名

描述

数据类型(精度范围)

允许空

约束条件

userID

表id

Number

主键,自动增量(1)

name

用户名

varchar2

唯一约束

password

登录密码

varchar2(30)

 

email

邮箱

varchar2(30)

 

provinceID

所在省id

Number

 

cityID

所在城市id

Number

外键,tb_city表cityID项

telephone

手机号

char(11)

 

sex

性别

char(3)

默认约束“男”

age

年龄

Number

 

birthday

生日

Date

 

money

账户余额

Number

默认约束“0”

photo

头像路径

varchar2(500)

 

dsp

个性签名

varchar2(200)

 

qq

QQ号码

varchar2(15)

 

msn

msn号码

varchar2(50)

 

loveBook

爱好书籍

varchar2(200)

 

loveMusic

爱好音乐

varchar2(200)

 

loveMovie

爱好电影

varchar2(200)

 

loveSport

爱好运动

varchar2(200)

 

loveGame

爱好游戏

varchar2(200)

 

补充说明

 

  

6.3tb_product表(商品信息表)


表名

tb_product

列名

描述

数据类型(精度范围)

允许空

约束条件

productID

商品id

number

主键,自动增加(1)

userID

卖家id

number

外键,tb_user表userID项

productName

商品名

varchar2(50)

 

typeID

商品类型id

number

外键,tb_productType表productTypeID项

price

商品价格

number

 

photo

商品图片路径

varchar2(500)

 

information

商品简介

varchar2(500)

 

补充说明

 

 

6.4 tb_productType表(商品类型表)

表名

tb_productType

列名

描述

数据类型(精度范围)

允许空

约束条件

productTypeID

商品类型id

number

主键,自动增加(1)

productTypeName

商品名称

varchar2(100)

 

补充说明

 

 

6.5tb_order表(订单表)

表名

tb_order

列名

描述

数据类型(精度范围)

允许空

约束条件

orderID

订单id

number

主键,自动增加(1)

toID

买家id

number

外键,tb_user表userID项

colorID

颜色id

number

外键,tb_ productColor表productColorID项

productID

商品id

number

外键,tb_ product表productID项

address

送货地址

varchar2(100)

 

telephone

买家手机

char(11)

 

orderState

订单状态

number

 

count

商品数量

number

 

price

总金额

number

 

orderDate

订单日期

date

 

consignmentDate

发货日期

date

 

补充说明

 

 

6.6 tb_userAccount表(用户资金流水表)

表名

tb_userAccount

列名

描述

数据类型(精度范围)

允许空

约束条件

userAccountID

资金流水表id

number

主键,自动递增(1)

userID

用户id

number

外键,tb_user表userID项

orderID

订单id

number

外键,tb_order表orderID项

type

类型

number

 

time

时间

date

 

补充说明

 

 

6.7 tb_review表(评论表)

表名

tb_review

列名

描述

数据类型(精度范围)

允许空

约束条件

reviewID

评论id

number

主键,自动递增(1)

review

评论内容

varchar2(250)

 

isReply

是否回复

boolean

默认值(false)

isDel

是否删除

boolean

默认为(false)

senderID

发表人id

number

外键,tb_user表userID项

productID

留言的商品id

number

外键,tb_product表productID项

addTime

发表时间

date

 

replyID

回复人id

number

 

补充说明

是否回复:回复为true,未回复为false,默认为false。

是否删除:删除为true,未删除为false,默认为false。

 

6.8tb_province表(省份数据字典)

表名

tb_province

列名

描述

数据类型(精度范围)

允许空

约束条件

provinceID

省份id

number

主键,自动递增(1)

provinceName

省份名称

varchar2(30)

 

补充说明

 

 

6.9 tb_city表(城市数据字典)

表名

tb_city

列名

描述

数据类型(精度范围)

允许空

约束条件

cityID

城市id

number

主键,自动递增(1)

provinceID

省份id

number

外键,tb_province表provinceID项

cityName

城市名称

varchar2(30)

 

补充说明

 

 

6.10 tb_productSize表(商品型号表)

表名

tb_productSize

列名

描述

数据类型(精度范围)

允许空

约束条件

productSizeID

商品型号id

number

主键,自动递增(1)

productSize

商品型号

varchar2(20)

 

productID

商品id

number

外键,tb_product表productID项

补充说明

 

 

 

6.11tb_productColor表(商品颜色表)

表名

tb_productColor

列名

描述

数据类型(精度范围)

允许空

约束条件

productColorID

商品颜色id

number

主键,自动增量(1)

productColor

商品颜色

varchar2(20)

 

stockpile

商品库存

number

 

productSizeID

商品型号id

number

外键,tb_productSize表productSizeID项

补充说明

 



一、创建数据库

/*创建用户*/Create user dzy identified by 123;;Grant connect,resource to dzy;
                                                                                    

二、创建表

/*创建tb_province*/

--tb_province表(省份数据字典)create table tb_province(  provinceID number not null primary key,   provinceName varchar2(30) not null);--自动增量create sequence province_seq increment by 1 start with 1001 minvalue 1001 maxvalue 1999;create or replace trigger province_tribefore insert on tb_provincefor each rowbegin      select  province_seq.Nextval    into:new.provinceID from sys.dual;end;

                                            

/*创建tb_city*/

--tb_city表(城市数据字典)create table tb_city(  cityID number not null primary key , --自动增量  provinceID number not null ,  cityName varchar2(30) not null,  foreign key(provinceID) references tb_province(provinceID));create sequence city_seq increment by 1 start with 2001 minvalue 2001 maxvalue 2999;create or replace trigger city_tribefore insert on tb_cityfor each rowbegin      select  city_seq.Nextval    into:new.cityID from sys.dual;end;

                                       

/*创建tb_user*/

--tb_user表(用户信息表)create table tb_user(  userID number not null primary key ,--自动增量  name varchar2(20)  not null unique,  password varchar2(30) not null,  emailvarchar2(30),  provinceIDnumber,  cityIDnumber ,  telephone char(11),  sex char(3) default '男',  agenumber,  birthdaydate,  moneynumber default 0,  photovarchar2(500),  dspvarchar2(200),  qqvarchar2(15),  msnvarchar2(50),  loveBookvarchar2(200),  loveMusicvarchar2(200),  loveMovievarchar2(200),  loveSportvarchar2(200),  loveGamevarchar2(200),  foreign key(cityID) references tb_city(cityID));create sequence user_seq increment by 1 start with 3001 minvalue 3001 maxvalue 3999;create or replace trigger user_tribefore insert on tb_userfor each rowbegin      select  user_seq.Nextval    into:new.userID from sys.dual;end;
                                                       

/*创建tb_productType*/

--tb_productType表(商品类型表)create table tb_productType(  productTypeIDnumbernot null primary key ,--自动增加(1)  productTypeNamevarchar2(30)not null);create sequence productType_seq increment by 1 start with 4001 minvalue 4001 maxvalue 4999;create or replace trigger productType_tribefore insert on tb_productTypefor each rowbegin      select  productType_seq.Nextval    into:new.productTypeID from sys.dual;end;
                                                 

/*创建tb_product*/

--tb_product表(商品信息表)create table tb_product(  productIDnumber not null primary key ,--自动增加(1)  userIDnumber not null ,  productNamevarchar2(50) not null,  typeIDnumber not null ,  pricenumber not null,  photovarchar2(50),  informationvarchar2(200),  foreign key(userID) references tb_user(userID),  foreign key(TypeID) references tb_productType(productTypeID));create sequence product_seq increment by 1 start with 5001 minvalue 5001 maxvalue 5999;create or replace trigger product_tribefore insert on tb_productfor each rowbegin      select  product_seq.Nextval    into:new.productID from sys.dual;end;
                         

/*创建tb_productSize*/

--tb_productSize表(商品型号表)create table tb_productSize(  productSizeIDnumbernot null primary key ,--自动递增(1)  productSizevarchar2(20)not null,  productIDnumbernot null ,  foreign key(productID) references tb_product(productID));create sequence productSize_seq increment by 1 start with 6001 minvalue 6001 maxvalue 6999;create or replace trigger productSize_tribefore insert on tb_productSizefor each rowbegin      select  productSize_seq.Nextval    into:new.productSizeID from sys.dual;end;
                                                     

/*创建tb_productColor*/

--tb_productColor表(商品颜色表)create table tb_productColor(  productColorIDnumbernot null primary key,--自动增量(1)  productColorvarchar2(20)not null,  stockpilenumbernot null,  productSizeIDnumbernot null ,  foreign key(productSizeID) references tb_productSize(productSizeID));create sequence productColor_seq increment by 1 start with 7001 minvalue 7001 maxvalue 7999;create or replace trigger productColor_tribefore insert on tb_productColorfor each rowbegin      select  productColor_seq.Nextval    into:new.productColorID from sys.dual;end;
                                         

/*创建tb_order*/

 (orderState,orderID)

--tb_order表(订单表)create table tb_order(  orderIDnumbernot null primary key ,--自动增加  toIDnumbernot null ,  colorIDnumbernot null  ,  productIDnumbernot null ,  addressvarchar2(100)not null,  telephonechar(11)not null,  orderStatenumbernot null,  countnumbernot null,  pricenumbernot null,  orderDatedatenot null,  consignmentDatedatenot null,  foreign key(toid) references tb_user(userID),  foreign key(colorid) references  TB_PRODUCTCOLOR(productColorID) ,   --??  foreign key(productID) references TB_PRODUCT(productID));create sequence order_seq increment by 1 start with 8001 minvalue 8001 maxvalue 8999;create or replace trigger order_tribefore insert on tb_orderfor each rowbegin      select  order_seq.Nextval    into:new.orderID from sys.dual;end;
                                

/*创建tb_userAccount*/

--tb_userAccount表(用户资金流水表)create table tb_userAccount(  userAccountIDnumbernot null primary key ,--自动递增(1)  userIDnumbernot null ,  orderIDnumbernot null ,  typenumbernot null,  timedatenot null,  foreign key(userID) referenceS tb_user(userID),  foreign key(orderID) references tb_order(orderID));create sequence userAccount_seq increment by 1 start with 9001 minvalue 9001 maxvalue 9999;create or replace trigger userAccount_tribefore insert on tb_userAccountfor each rowbegin      select  userAccount_seq.Nextval    into:new.userAccountID from sys.dual;end;
                          

/*创建tb_review*/

--tb_review表(评论表)create table tb_review(  reviewIDnumbernot null primary key ,--自动递增(1)  reviewvarchar2(200)not null,  isReplynumber default 0 not null check(isReply=0 or isReply=1),  isDelnumberdefault 0 not null check(isDel=0 or isDel=1),  senderIDnumbernot null ,  productIDnumbernot null,  addTimedatenot null,  replyIDnumber,  foreign key(senderID) references tb_user(userID),   foreign key(productID) references tb_product(productID));create sequence review_seq increment by 1 start with 33001 minvalue 33001 maxvalue 33999;create or replace trigger review_tribefore insert on tb_reviewfor each rowbegin      select  review_seq.Nextval    into:new.reviewID from sys.dual;end;

                   




三、添加约束

/*给每个表添加约束*/

在创建表时主键约束,唯一值约束,外键约束,非空约束,默认值约束,取值约束均已一并创建

四、基础数据(商品类型+省份+城市)添加

/*tb_productType表添加商品类型*/

insert into tb_productType(productTypeName) values('6手机');insert into tb_productType(productTypeName) values('1手机');insert into tb_productType(productTypeName) values('2手机');insert into tb_productType(productTypeName) values('3手机');insert into tb_productType(productTypeName) values('4手机');insert into tb_productType(productTypeName) values('5手机');

                                                  

/*tb_province表添加省份名称*/

insert into tb_province(provinceName) values('山东');insert into tb_province(provinceName) values('山西');insert into tb_province(provinceName) values('辽宁');insert into tb_province(provinceName) values('四川');insert into tb_province(provinceName) values('河南');
                                                 

/*tb_city表给山东省添加城市名称*/

insert into tb_city(provinceID,cityName) values(1006,'济南');insert into tb_city(provinceID,cityName) values(1006,'青岛');insert into tb_city(provinceID,cityName) values(1006,'潍坊');

                                                  

五、用户数据(注册+信息完善)添加

/*tb_user表添加用户信息*/

INSERT into tb_user values(null,'丁兆元','123','123@123.com',1006,2013,'12345678',null,null,null,null,null,null,null,null,null,null,null,null,null);INSERT into tb_user values(null,'李一','123','12332@12333.com',1006,2014,'123','男',null,null,null,null,null,null,null,null,null,null,null,null);INSERT into tb_user values(null,'李二','123','1332@2333.com',1008,null,'1232323','男',null,null,null,null,null,null,null,null,null,null,null,null);
                                                                                                  

六、商品信息(商品信息+型号+颜色)添加

/*tb_product表添加商品信息*/

insert into tb_product values(null,3001,'小米6手机',4007,2399,'网上','双摄');insert into tb_product values(null,3001,'小米5手机',4012,1999,'网上商城','窄边框');insert into tb_product values(null,3002,'小米6手机',4007,2399,'小米商城','双摄');
                                

/*tb_productSize表添加商品型号*/

insert into tb_productSize values(1,'miui6',5001);insert into tb_productSize values(2,'miui5',5002);insert into tb_productSize values(3,'miui6',5003);
                                                 

/*tb_productColor表添加商品型号*/

insert into tb_productColor values(1,'白',300,6001);insert into tb_productColor values(2,'黑',600,6002);insert into tb_productColor values(2,'蓝',11,6003);
                                              

七、删除用户信息

/*删除用户****/

select *from tb_user;declare t_username varchar2(20);begint_username:='&请输入要删除的用户名';delete from tb_userwhere name=t_username;end;
                                     

                                      

八、商品信息查询

/*单表查询*/

/*查询tb_product表中商品id为的商品信息*/

declarepid tb_product.productid%type;pro tb_product%rowtype;begin   pid:=&请输入商品id;   select * into pro from tb_product   where productid=pid;   dbms_output.put_line('商品id:'||pro.productid||'  卖家id:'||   pro.userid||'  商品名:'||pro.productname   ||'  商品类型id:'||pro.typeid||'  商品价格:'||   pro.price||'  商品图片路径:'||pro.photo   ||'  商品简介:'||pro.information   );exception   when no_data_found then   dbms_output.put_line('没有发现您要找的数据!');   when others then   dbms_output.put_line('其他异常!');end;

                      

/*查询tb_productSize表中商品id为的型号信息*/

declarepid tb_productSize.productid%type;pro tb_productSize%rowtype;begin   pid:=&请输入商品id;   select * into pro from tb_productSize   where productid=pid;   dbms_output.put_line('商品型号id:'||pro.productSizeID   ||'  商品型号:'||pro.productSize||'  商品id:'||pro.productID   );exception   when no_data_found then   dbms_output.put_line('没有发现您要找的数据!');   when others then   dbms_output.put_line('其他异常!');end;
                                                    

/*查询tb_productColor表中商品型号id为、、的颜色与库存信息*/

declarepid tb_productColor.productsizeid%type;pro tb_productColor%rowtype;begin   pid:=&请输入商品型号id;   select * into pro from tb_productColor   where productsizeid=pid;   dbms_output.put_line('商品颜色id:'||pro.productColorID   ||'  商品颜色:'||pro.productColor||'  商品库存:'||   pro.stockpile||'  商品型号id:'||pro.productSizeID   );exception   when no_data_found then   dbms_output.put_line('没有发现您要找的数据!');   when others then   dbms_output.put_line('其他异常!');end;
                                             

/*多表查询*/

/*用户在商城以商品类型查询一件商品的名称*/

declarename varchar2(30);pname varchar2(50);cursor cur1(typename varchar2)is  select productname from tb_product  where typeid in(      select productTypeID from tb_productType      where productTypeName=typename  );begin  name:='&商品类型';  open cur1(name);  loop    fetch cur1 into pname;    exit when cur1%notfound;    dbms_output.put_line('商品名称:'||pname);  end loop;close cur1;end;
                                                                   

/*用户在商城以商品名称查询一件商品的所有信息*/

create view t_mationas    select productcolorid,productcolor,stockpile,c.productsizeid,productsize,s.productid,userid,productname,typeid,price,photo,information    from tb_productcolor c    join tb_productsize s on c.productsizeid=s.productsizeid   join tb_product p on p.productid=s.productid;   declarem t_mation%rowtype;pname varchar2(50);cursor cur_t (product_name in varchar2)is select *  from t_mation   where productname=product_name;begin   pname:='&商品名称';   open cur_t(pname);   loop   fetch cur_t into m;   exit when cur_t%notfound;    dbms_output.put_line(    '商品id:'||m.productid||    '  商品名字:'||m.productname||    '  商品颜色id:'||m.productcolorid||    '  商品颜色:'||m.productcolor||    '  商品库存:'||m.stockpile||    '  商品型号id:'||m.productsizeid||    '  商品型号:'||m.productsize||    '  商品卖家id:'||m.userid||    '  商品类型id:'||m.typeid||    '  商品价格:'||m.price||    '  商品图片路径:'||m.photo||    '  商品简介:'||m.information   );    end loop;   close cur_t;exception   when no_data_found then   dbms_output.put_line('没有发现您要找的数据!');   when others then   dbms_output.put_line('其他异常!');end;
                   

九、用户信息查询

/*用户在商城可以查询已知用户(或卖家)的基本信息*/

declarepid tb_user.userID%type;us tb_user%rowtype;begin   pid:=&请输入用户id;   select * into us from tb_user   where userID=pid;   dbms_output.put_line(   '用户id:'||us.userid||    '  用户名:'||us.name||    '  邮箱:'||us.email||    '  所在省份id:'||us.provinceid||    '  所在城市id:'||us.cityid||    '  手机号:'||us.telephone||    '  性别:'||us.sex||    '  年龄:'||us.age||    '  生日:'||us.birthday   );exception   when no_data_found then   dbms_output.put_line('没有发现您要找的数据!');   when others then   dbms_output.put_line('其他异常!');end;
      

十、用户下订单并确认付款(应用)

/*用户下订单并确认付款(应用事务)*/-

/*用户***想要购买卖家***的产品颜色-大小-产品名*/

declareo_userid number;            /*定义变量,用于存储流水表的用户(买家)ID*/o_productcolorid number;      /*定义变量,用于存储本次订单的颜色ID*/o_productid number;           /*定义变量,用于存储本次订单的物品ID*/o_count number;o_stockpile number;o_price number;              /*定义变量,用于存储本次订单的物品单价*/o_money number;o_phone char(11);n number;--o_toid number;              /*定义变量,用于存储本次订单的买家ID*/begino_userid:='&买家id' ;        /*用户****下订单*/o_productcolorid:='&颜色id' ;  o_productid :='&商品id';o_count:='&数量';select price into o_price from  tb_product where productID=o_productid ;select TELEPHONE into O_PHONE from TB_USER where USERID=O_USERID;insert  into   tb_order values(order_seq.nextval,o_userid,o_productcolorid,o_productid,'默认地址',o_phone,0,o_count,(o_count*o_price),sysdate,(sysdate+3));    /*用户****将订单信息填入到tb_order表中*/       /*orderState订单状态为用户选择填入下订单 0表示"确认订单"*/select stockpile into o_stockpile  from tb_productColor where productColorID=o_productcolorid;if o_stockpile>o_count thenbegin  update   tb_productColor  set stockpile=stockpile-o_count  /*下订单后减少商品库存*/   where productColorID=o_productcolorid;end;else  raise_application_error(-20002, '库存不足');end if;select money into o_money  from tb_user where userID=o_userid;if o_money>o_count*o_price thenbegin   update   tb_user set  money=money-o_count*o_price /*确认付款后减少用户余额*/   where userID=o_userid;end;else  raise_application_error(-20002, '账户余额不足');end if;select order_seq.currval into n from dual; update   tb_order  set  orderState=1            /*将用户付款的订单状态改为已付款  1代表"已付款"*/where orderID=n; insert into tb_useraccount values (1,o_userid,n,o_productcolorid,sysdate); /*用户账户上的钱转账完成后建立用户资金流水表一条买家购买商品支出记录*/dbms_output.put_line('操作成功');commit;exception   when no_data_found then  begin  dbms_output.put_line('数据未找到,操作失败');  rollback;  end;  when others then  begin  dbms_output.put_line('操作失败');  rollback;  end; end;

用不同数据进行测试

                                                                                                                 

                                                                                      


十一、买家对订单信息进行修改(包括发货后的订单状态修改及修改商品颜色时应用事务)

/*卖家对订单信息进行修改*/

/*假设买家***想修改商品的颜色,则需要应用事务,对相应颜色的库存进行修改*/

/*修改信息是各项信息均为可选择项,如不想修改某项信息,则选择以前的选项,但是会将数据重复的修改一次,即用相同的数据来覆盖之前的数据*/

/*除此之外卖家发货后可将订单状态改为发货*/

DECLARE  d_orderid          NUMBER;  d_address          VARCHAR2(100);  d_telephone        CHAR(11);  d_orderState       NUMBER;  d_colorid          NUMBER;  d_price            NUMBER;  d_count            NUMBER;  d_price_befo       NUMBER;  old_productColorID NUMBER;BEGIN  d_orderid :=&订单id;  /*修改tb_order表中的送货地址*/  d_address :='&地址';  UPDATE tb_order SET address=d_address WHERE orderID=d_orderid;  dbms_output.put_line('送货地址已修改');  /*修改tb_order表中的联系方式*/  d_telephone:='&联系方式';  UPDATE tb_order SET telephone=d_telephone WHERE orderID=d_orderid;  dbms_output.put_line('联系方式已修改');  /*修改tb_order表中的状态*/  d_orderState:=&修改状态;  UPDATE tb_order SET orderstate=d_orderState WHERE orderID=d_orderid; --若卖家因故不能发货,但已付款则卖家可修改订单状态为'延后'  dbms_output.put_line('订单状态已修改');  /*修改tb_order表中的商品颜色*/  SELECT colorid  INTO old_productColorID  FROM tb_order  WHERE orderID=d_orderid;  d_colorid   :=&颜色id;  UPDATE tb_order SET colorID=d_colorid WHERE orderID=d_orderid;  SELECT COUNT INTO d_count FROM tb_order WHERE orderID=d_orderid;  UPDATE tb_productColor    /*修改颜色后要将之前选择的颜色库存加一再讲修改后的颜色库存减一*/  SET stockpile       =stockpile-d_count  WHERE productColorID=d_orderid;  UPDATE tb_productColor  SET stockpile       =stockpile+d_count  WHERE productColorID=old_productColorID;  dbms_output.put_line('商品颜色已修改');  /*修改tb_order表中的商品总价*/  SELECT price INTO d_price_befo FROM tb_order WHERE orderID=d_orderid;  d_price:=&总价;  UPDATE tb_order SET price=d_price WHERE orderID=d_orderid; --若和买家商议后买家同意降价,但商品信息上还是不修改的,就可以在订单总价上修改,付款后卖家修改总价,差价打回买家账户余额内  /*将与之前的差价加回买家账户余额内*/  UPDATE tb_user  SET money   =money+d_price_befo-d_price  WHERE userid=    (SELECT toid FROM tb_order WHERE orderid=d_orderid    ) ;  /*修改tb_user表中买家的账户余额*/  dbms_output.put_line('商品总价已修改');  dbms_output.put_line('操作成功');  COMMIT;EXCEPTIONWHEN no_data_found THEN  BEGIN    dbms_output.put_line('数据未找到,操作失败');    ROLLBACK;  END;WHEN OTHERS THEN  BEGIN    dbms_output.put_line('操作失败');    ROLLBACK;  END;END;
                                                          


十二、订单完成进行转账

DECLARE  /*定义变量,用于存储流水表的用户ID*/  d_userid   NUMBER;  d_sellerid NUMBER;  d_price    NUMBER;  d_orderid  NUMBER;BEGIN  d_orderid:='&订单号';  /*买家收到商品后,修改tb_order表中的状态(4=完成)*/  UPDATE tb_order  SET orderState=4  WHERE orderID =d_orderid;  dbms_output.put_line('订单状态:完成');  /*订单状态为'完成'后建立用户资金流水表一条卖家出售商品收入记录*/  SELECT userid  INTO d_sellerid  FROM tb_product  WHERE productid=    (SELECT productid FROM tb_order WHERE orderID=d_orderid    );  INSERT INTO tb_userAccount VALUES    (1,d_sellerid ,d_orderid,1,sysdate    );  dbms_output.put_line('用户资金流水表插入一条卖家出售商品收入记录');  /*交易成功后卖家账户余额增加*/  SELECT price  INTO d_price  FROM tb_order  WHERE orderID=d_orderid;  UPDATE tb_user SET money=money+d_price WHERE userid=d_sellerid;  dbms_output.put_line('卖家账户余额增加');  dbms_output.put_line('操作成功');  COMMIT;EXCEPTIONWHEN no_data_found THEN  BEGIN    dbms_output.put_line('数据未找到,操作失败');    ROLLBACK;  END;WHEN OTHERS THEN  BEGIN    dbms_output.put_line('操作失败');    ROLLBACK;  END;END;

                                                                                          



十三、货物丢件进行退款

/*前提条件:订单为发货状态,但物流出现丢件情况,由物流赔偿卖家,卖家确认丢件情况发生后,可进行退款操作*/

DECLARE  /*定义变量,用于存储流水表的用户ID*/  d_sellerid NUMBER;  d_orderid  NUMBER;  d_userid   NUMBER;  d_price    NUMBER;BEGIN  d_orderid:='&订单号';  /*卖家确认商品丢件后,修改tb_order表中的状态(5=撤销)*/  UPDATE tb_order  SET orderState=5  WHERE orderID =d_orderid;  dbms_output.put_line('订单状态:撤销');  /*订单状态为'撤销'后建立用户资金流水表一条买家商品退款收入记录*/  SELECT toid  INTO d_userid  FROM tb_order  WHERE orderID =d_orderid;  INSERT INTO tb_userAccount VALUES    (1,d_userid ,d_orderid,1,sysdate    );  dbms_output.put_line('用户资金流水表插入一条买家商品退款收入记录');  /*撤销成功后买家账户余额恢复*/  SELECT price  INTO d_price  FROM tb_order  WHERE orderID=d_orderid;  UPDATE tb_user SET money=money+d_price WHERE userid=d_userid;  dbms_output.put_line('买家账户余额恢复');  dbms_output.put_line('操作成功');  COMMIT;EXCEPTIONWHEN no_data_found THEN  BEGIN    dbms_output.put_line('数据未找到,操作失败');    ROLLBACK;  END;WHEN OTHERS THEN  BEGIN    dbms_output.put_line('操作失败');    ROLLBACK;  END;END;
                                                                                  

                                                                                          

                                                                

十四、视图

--/*多表查询*/

--/*用户在商城以商品类型查询一件商品的名称*/

CREATE VIEW TNAME_PNAME_VIEWAS  select *from TB_PRODUCT,TB_PRODUCTTYPE  where tb_product.typeid=TB_PRODUCTTYPE.PRODUCTTYPEID;declarename varchar2(30);pname varchar2(50);cursor cur1(typename varchar2)is  select productname from TNAME_PNAME_VIEW      where productTypeName=typename;begin  name:='&商品类型';  open cur1(name);  loop    fetch cur1 into pname;    exit when cur1%notfound;    dbms_output.put_line('商品名称:'||pname);  end loop;close cur1;end;
                                                                                              

--/*用户在商城以商品名称查询一件商品的所有信息*/

create view t_mationas    select productcolorid,productcolor,stockpile,c.productsizeid,productsize,s.productid,userid,productname,typeid,price,photo,information    from tb_productcolor c    join tb_productsize s on c.productsizeid=s.productsizeid   join tb_product p on p.productid=s.productid;   declarem t_mation%rowtype;pname varchar2(50);cursor cur_t (product_name in varchar2)is select *  from t_mation   where productname=product_name;begin   pname:='&商品名称';   open cur_t(pname);   loop   fetch cur_t into m;   exit when cur_t%notfound;    dbms_output.put_line(    '商品id:'||m.productid||    '  商品名字:'||m.productname||    '  商品颜色id:'||m.productcolorid||    '  商品颜色:'||m.productcolor||    '  商品库存:'||m.stockpile||    '  商品型号id:'||m.productsizeid||    '  商品型号:'||m.productsize||    '  商品卖家id:'||m.userid||    '  商品类型id:'||m.typeid||    '  商品价格:'||m.price||    '  商品图片路径:'||m.photo||    '  商品简介:'||m.information   );    end loop;   close cur_t;exception   when no_data_found then   dbms_output.put_line('没有发现您要找的数据!');   when others then   dbms_output.put_line('其他异常!');end;
                                                                                                                 
                  

--/*用户信息查询*/

--/*用户在商城可以查询已知用户(或卖家)的基本信息*/

declarepid tb_user.userID%type;us tb_user%rowtype;begin   pid:=&请输入用户id;   select * into us from tb_user   where userID=pid;   dbms_output.put_line(   '用户id:'||us.userid||    '  用户名:'||us.name||    '  邮箱:'||us.email||    '  所在省份id:'||us.provinceid||    '  所在城市id:'||us.cityid||    '  手机号:'||us.telephone||    '  性别:'||us.sex||    '  年龄:'||us.age||    '  生日:'||us.birthday   );exception   when no_data_found then   dbms_output.put_line('没有发现您要找的数据!');   when others then   dbms_output.put_line('其他异常!');end;
        

十五、用户登录 例如:sql server 格式:

/*用户登录(应用存储过程)*/ 

create procedure proc_land@resultName int = 0,--定义为表示用户名错误@resultPassWord int =0,--定义为表示密码错误@userName nvarchar(10) = '***',  @PassWord nvarchar(30) = 'jhc123'   asselect @resultName = COUNT(1) from tb_user where name=@userName--只要表中有输入的用户名则为表示用户名存在select @resultPassWord = COUNT(1) from tb_user where name=@userName and [password]=@PassWord--若存在的这个用户的信息里的密码等与输入的密码则为表示密码核对无误beginif @resultName = 1 and @resultPassWord = 1print '用户登录成功!'else if @resultName = 0print '用户名错误!'else if @resultPassWord = 0print '密码错误!'end


create or replace procedure   login (p_name in varchar2,p_password in  varchar2)ast_password varchar2(30);begin  select password into t_password   from tb_user where name=p_name;  if t_password=p_password  then dbms_output.put_line('欢迎登陆!');  else dbms_output.put_line('密码错误!');  end if;  EXCEPTION  when no_data_found then  dbms_output.put_line('该用户尚未注册!');  when others then  dbms_output.put_line('未知错误!');end login;begin login('丁兆元','123'); end;

用不同数据进行测试

                                                                                               

                                                                                         

  


 2tb_product表(商品信息表)

原创粉丝点击