网上商城购物系统(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)
否
邮箱
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号码
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表(商品信息表)
- 网上商城购物系统(1)
- 网上商城购物系统(2)
- JSP---网上商城购物车
- 网上商城购物车的实现
- 网上商城系统简介
- <一>、网上商城推荐系统
- 手机网上商城-项目经验总结(十一)-修改购物车商品数量
- php网上商城购物车设计代码分享
- J2EE学习笔记——MVC网上商城系统(一)(
- J2EE学习笔记——MVC网上商城系统(二)(
- ShopRE多网店商城系统(配备iphone app网上商城)
- 开源网上商城程序(简介国内外开源网店系统)
- 在线购物系统-实验1
- javaweb实现简单网上商城系统
- 购物系统
- (系统)商店购物管理系统
- 系统的MVP购物车(二级购物车全)
- 项目之网上商城 购物车 总结 更新中。。。
- linux less从后向前查看日志信息
- Dockerfile最佳实践总结
- bfs宽度遍历
- JAVA——访问权限修饰符
- Android 解决java.util.zip.ZipException: duplicate entry: com/ta/utdid2/a/a.class
- 网上商城购物系统(1)
- HDU 1159 Common Subsequence 最长公共子序列 详解
- javaScript标签全称与插件
- OpenCV3.2从入门到放弃(一)
- diamond淘宝框架使用
- 一个数组中有一个数字的次数超过了数组的一半,求出这个字符
- R语言学习-table()结果提取
- Jquery 遍历数组之$().each方法与$.each()方法介绍
- $state.go页面传递参数