网上订餐系统的设计与实现需求分析报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
1 课程设计概述 (1)
1.1课程设计名称 (1)
1.2原始需求描述 (1)
2 需求分析 (1)
2.1软件需求 (1)
2.2功能描述 (2)
2.3用户界面 (2)
2.4性能需求 (3)
2.5业务流程分析 (3)
2.6用户视图描述 (4)
2.7数据流程分析 (5)
2.8实体分析表 (5)
2.9实体关系图 (6)
2.10 E—R图 (6)
3 数据库建立 (7)
3.1逻辑数据库设计 (7)
3.2 数据库、数据表代码 (10)
3.2.1 数据库代码 (10)
3.2.2 数据表代码 (10)
3.3 数据插入 (14)
3.4查询语句 (16)
3.4.1 基本查询 (16)
3.4.2 连接查询 (19)
3.4.3 子查询 (20)
3.5 创建视图 (22)
3.6 创建存储过程 (23)
1 课程设计概述
1.1课程设计名称
网上订餐系统设计
1.2原始需求描述
网上订餐系统的设计与实施迎合了二十一世纪经济高速发展、人们的生活节奏日益加快以及现代餐饮业越来越发达和便捷这一现状。
网上订餐系统将极大地方便食客的就餐。
同时也有利于管理和售后服务。
同时,订餐系统还能帮助酒店(餐馆)扩大营业范围,增加知名度等。
经过调查,许多大学生对在学校食堂就餐人多拥挤的问题存在很多不满,而且很多上班族平时忙的没时间吃饭,如果可以网上订餐,无疑是解决了空间和时间上两方面的问题。
2 需求分析
2.1软件需求
此系统整体可以分为两个子系统,其中一个为针对顾客开放的网上点菜系统.另一个为针对餐厅管理人员开放的菜单及订单管理系统。
顾客点菜主要流程如下:
1.顾客登录网上点菜系统进行菜单的浏览或者注册为会员。
2.会员可以对自己的个人信息进行更改,以会员形式登录的顾客享受优惠。
3.如果顾客觉得菜单应该有所改变则可对已选的菜单进行选择、更改、删除。
4.当顾客确定点菜完毕后,顾客可以将其提交至服务器并生成订单
管理员订单管理的业务流程如下:
1.管理员在本地登录后既可对服务器上的菜单进行添加、删除、修改。
2.当菜单管理工作结束之后,管理员可以对订单进行管理,进行确认和查看详细信息操作。
本系统解决传统的手工管理菜单、订单以及点菜信息效率低下等
问题.酒店还可根据自己的特点添加特色模块,使酒店富于个性化.提高外卖业务的销售量。
2.2功能描述
本系统整体可分为两个子系统,其中一个为针对顾客开放的网上点菜系统,另一个为针对餐店管理人员开放的菜单及订单管理系统。
顾客网上点菜子系统功能分析:
根据对顾客网上点菜系统业务流程的分析,可以看出顾客点菜主要涉及到一些数据库的逻辑和程序应用逻辑。
具体的功能归纳如下:1.顾客登录网上点菜系统进行菜单的浏览。
2.顾客注册为会员。
3.会员对自己的个人信息进行更改,比如送餐地址和联系电话.以及帐户密码。
4.以会员形式登录的顾客自动识别,并且以会员价消费。
5.顾客对已选的菜单进行更改选择的数量或者取消选择。
6.当顾客确定点菜完毕后,顾客将其提交至服务器并生成订单。
管理员管理系统功能分析:
根据对顾客管理员管理系统业务流程的分析。
可以看出管理员主系统要涉及到一些数据库的逻辑操作和程序应用逻辑。
具体的功能归纳如下:
1.管理员在本地登录。
创建新的管理员。
2.管理员对服务器上的菜单进行添加、删除和修改,比如更改菜单的图片、价格、菜单描述等等。
3.管理员对订单进行管理,比如确定和打印订单。
4.管理员根据订单的不同属性来查询订单,比如生成日期、编号等等。
5.管理员根据不同的时间段统计出营业额、成本,同时还能统计出每道菜的销售量、任何时间段的销售情况以及每一个会员顾客的消费情况。
2.3用户界面
界面风格以绿色为主调,清新自然,可以增强食欲,添加动态画面效果,避免了页面呆板,屏幕以板块模式组成,板块之间各有特色却又紧密相连。
首页包括站标、天气预报、公告、滚动条、餐厅介绍、菜品推荐、标题。
次级页面有六个,分别是用户指南、送餐方式、常
见问题、售后服务、付款方式、会员折扣。
顾客登录主页面,以文字输人方式点菜,后台收到订单后,打印生成纸质订单。
2.4性能需求
系统的反应速度应较快;系统界面应美观大方、风格统一,突出特色。
功能设计应体现人性化思想,方便用户操作。
用户登录系统时需输人口令,对不同类型的操作员授予不同等级的权限去使用相应的功能。
对于顾客,如果是普通顾客,则其只能以市场价消费,而不能享受会员价;如果该顾客是注册会员.并且以会员登录.那么其在消费的时候就可以享受低于市场价的会员价。
对于管理员.在其查询订单的时候可针对各种组合条件进行查询.而且查询效率要求高,能够及时响应查询请求。
另外.系统还应当满足信息的完整性以及系统的可扩展性。
2.5业务流程分析
图 2.5.1 登录分析图
由用户登陆系统之后分三种情况讨论:
1、身份验证失败,则退出系统;
2、
图 2.5.2 用户登录功能图
图 2.5.3 管理员登录功能图
2.6用户视图描述
1、身份验证:此操作是为了识别用户身份,通过不同的身份确认方式,进入到不同的用户界面中;如果身份验证失败,则退出系统。
2、浏览也选择餐饮信息:顾客进入网站即可自动提供购物车,不需要登录帐号就可以在网站上随意浏览,登录系统后则可以挑选餐饮(可增加、删除、修改购物车上餐饮的类型),网站提供餐饮信息列表,最先添加的餐饮信息有限列表给顾客作为选购时的参考;
3、判断:顾客确定所购餐饮信息,可填写订单,之后,系统将判断该顾客是否注册,如果是,则可直接提交订单;如果没有,这提示顾客登录帐号,并提示顾客如果没有帐号,
则可以进行注册;
4、注册:顾客可在餐饮公司的网站上提交注册申请;
5、确认:后台管理员将室时得到顾客的注册信息,通过电子
邮件或其他方式确认,当确认后,系统管理员可对该顾客提交的预定信息进行审核;
6、提交订单:以选购的餐饮信息需填写订单细节;
7、送货与付款:网上的每一分订单都将室时存入后台数据库,后台操作人员通过电子邮件或其他方式确认,确认后将及时实施审核订单:向顾客送货,货到付款,完成网上交易。
2.7数据流程分析
该系统数据流程比较简单,管理员可以添加餐饮信息(包括菜品名,菜品种类,单价,味道,评价等信息),资讯信息等,然而这些信息顾客是可以浏览的,但是顾客没有权限对这些信息进行修改,这些信息对于顾客而言是单项的。
对于预定信息,管理员可以查看及审核预定信息,顾客可以增删改预定信息,并将与性信息提交给管理员等待审核,因此预定信息对于顾客和管理员而言都是双向的。
数据流图
图 2.6 数据流图
2.8实体分析表
顾客(顾客ID(PK),密码,姓,名,邮件地址,地址,城市,省,邮政编码,电话,信用卡编号,信用卡类型,截至日期)种类(种类ID(PK),种类,描述)
餐饮(餐饮名(PK),餐饮描述,种类ID(FK),单价,材料,照片,照片路径)
购物车(购物车ID,餐饮名(FK),份数),其中“购物车ID”
和“餐饮名”一起作为表的复合主键
订单(订单编号,订单日期,购物车ID(FK),顾客ID(FK),运送方式ID(FK),礼品包装费用,运送费用,订单处理,总价,餐饮名(FK))其中“订单编号”和“顾客ID”一起作为表的复合主键订餐细节(订单编号(FK),餐饮名(FK),份数,包装,包装ID(FK),顾客ID(FK)信息,餐饮价值),其中“订单编号”,“顾客ID”和“餐饮名”作为“订餐细节”表的复合主键
运送方式(运送方式ID(PK),运送方式,用时,运费)
接受者(订单编号(FK),姓,名,地址,城市,省,邮政编码,电话),其中“订单编号”和“顾客ID”作为主键
月销售量(餐饮名,月,年,总销售量),其中“餐饮名”,“月”及“年”作为复合主键
包装(包装ID(PK),描述,包装费用,照片,包装图像路径)2.9实体关系图
每个实体的属性见上页表中,此处不在画出实体属性,主要表
图 2.9 实体关系图
2.10 E—R图
图 2.10 E-R图
3 数据库建立
3.1逻辑数据库设计
通过对数据库概念模型的设计,确定一下是该系统需建立的表格:
1、Category (种类)
列(属性)名中文名称类型宽度是否允许为空是否为主外
键cCategoryID 种类ID char 3 NOT NULL 主键
cCategory 种类char 20 NOT NULL
vDescription 描述varchar 100 NULL
2、Food (餐饮)
列(属性)名中文名称类型宽度是否允许为空是否为主
键cFood 餐饮名char 20 NOT NULL 主键
cMaterial 材料varchar 256 NOT NULL
imPhoto 照片image NULL
vFoodImgPath 照片路径varchar 10 NULL
vFoodDescription 餐饮描述char 400 NOT NULL
cCategoryID 种类ID char 3 NOT NULL 外键
mFoodRate 单价money NOT NULL
3、ShoppingCart (购物车)
列(属性)名中文名称类型宽度是否允许为空是否为主外
4、Customer (顾客)
5、Wrapper (包装)
6、Orders (订单)
7、ShippingMode (运送方式)
8、Recipient (接受者)
9、OrderDetail (订餐细节)
10、PickOfMonth (月销售量)
3.2 数据库、数据表代码
3.2.1 数据库代码
use master
go
create database FoodsUniverse
on primary
(
name=Foods_Data,
filename='E:\数据库\网上订餐系统设计\Foods_Data.mdf',
size=10,
maxsize=unlimited,
filegrowth=5
)
log on
(
name=Foods_log,
filename='E:\数据库\网上订餐系统设计\Foods_log.ldf',
size=10,
maxsize=2000,
filegrowth=10%
)
Go
3.2.2 数据表代码
Category(种类)表代码
use FoodsUniverse
create table Category(
cCategoryID char(3)constraint pkCategory primary key clustered,
cCategory char(20)not null,
vDescription varchar(100)null
)
Food(餐饮)表代码
use FoodsUniverse
create table Food(
cFood char(20)not null,
cMaterial varchar(256)not null,
imPhoto image null,
cFoodImgPath varchar(10)null,
mFoodRate money not null,
vFoodDescription varchar(250)null,
cCategoryID char(3)references Category(cCategoryID), primary key(cFood)
)
ShoppingCart(购物车)表代码
use FoodsUniverse
create table ShoppingCart(
cCartID char(6)not null,
cFood char(20)references Food(cFood),
siQty smallint not null,
primary key(cCartID,cFood)
)
在Shopping上中的cCartID列上创建检查约束chk_shop
use FoodsUniverse
alter table ShoppingCart
add constraint chk_shop check(cCartID
like'[0-9][0-9][0-9][0-9][0-9][0-9]')
Customer(顾客)表代码(唯一性约束、检查约束、默认约束、索引)
use FoodsUniverse
create table Customer(
cShopperID char(10)not null,
vFistName varchar(20)not null,
vLastName varchar(40)not null,
vEmailID varchar(10)not null,
vAddress varchar(15)not null,
cCity char(15)not null,
cZipCode char(10)null,
cPhone char(15)not null,
cCreditCardNo varchar(16)not null,
cCreditCardType char(15)not null,
cSex char(10)not null,
cPassword char(10)not null,
dExpiryDate datetime null,
primary key(cShopperID)
)
在表Customer上创建了唯一性约束unqCustomer
use FoodsUniverse
alter table Customer
add constraint unqCustomer unique(cShopperID)
修改表Customer,为表添加一列cSex,并在这列上建立检查性约束
chkSex
use FoodsUniverse
alter table Customer
add constraint chkSex check(cSex in('男','女
','man','woman','Man','Woman'))
在表Customer上的cSex列上创建默认约束difSex,默认值为”man”
use FoodsUniverse
alter table Customer
add constraint difSex default'man'for cSex
在表Customer上的主键列,cShopperID上创建聚集索引idx_Customer
use FoodsUniverse
create clustered
index idx_Customer on Customer(cShopperID)
Wrapper(包装)表代码
use FoodsUniverse
create table Wrapper(
cWrpperID char(3)not null,
vDescription varchar(20)null,
mWrapperRate money not null,
inPhoto image null,
vWrapperImgPath varchar(50)null)
ShippingMode(运送方式)表代码
use FoodsUniverse
create table ShippingMode(
cShippingModeID char(2)primary key,
cShippingMode char(25)not null,
iMaxTime int not null,
mCharges money not null
)
PickOfMonth(月销售量)表代码
use FoodUniverse
create table PickOfMonth(
cFoods char (20)references Food(cFood),
siMonth smallint not null,
iYear int not null,
iTotalSold int not null,
primary key(siMonth,iYear,cFoods)
)
Orders(订单)表代码(唯一性约束、索引)
create table Orders(
cOrderNo char(6)not null,
cShippingModeID char(2)references
ShippingMode(cShippingModeID),
mShippingCharges money not null,
cOrderProcessed char(1)not null,
mTotalCost money not null,
dOrderDate datetime not null,
cShopperID char(10)references Customer(cShopperID), cFood char(20)references Food(cFood),
cCartID char(6)not null,
primary key(cShopperID,cOrderNo),
)
在表Orders上创建了唯一性约束unqOrders
use FoodUniverse
alter table Orders
add constraint unqOrders unique(cOrderNo, cShopperID) 在表Orders上的外键列,siMonth和iYear上创建非聚集索引
idx_shopper
create nonclustered index idx_shopper
on Orders(cShopperID)
Recipient(接受者)表代码
create table Recipient(
cOrderNo char(6)not null,
vFistName varchar(20)not null,
cLastNme varchar(20)not null,
vAdress varchar(20)not null,
cCity char(15)not null,
cState char(15)not null,
cZipCode char(10)null,
cPhone char(15)null,
cShopperID char(10)not null,
primary key(cOrderNo,cShopperID)
)
OrderDetail(订餐细节)表代码
use FoodsUniverse
create table OrderDetail(
cOrderNo char(6)references Orders(cOrderNo), cFood char(20)references Food (cFood),
siQty smallint not null,
vMessage varchar(256)null,
mFoodCost money not null,
primary key(cOrderNo)
)
3.3 数据插入
1、Category(种类)表数据插入
2、Customer(顾客)表数据插入
3、Food(餐饮)表数据插入
4、ShoppingCart(购物车)表数据插入
5、Wrapper(包装)表数据插入
6、ShippingMode(运送方式)表数据插入
7、PickOfMonth(月销售量)表数据插入
8、Orders(订单)表数据插入
9、OrderDetail(订餐细节)表数据插入
10、Recipient(接受者)表数据插入
3.4查询语句
3.4.1 基本查询
/*1、显示指定的、带用户友好标题的列*/
select姓名=vFistName+vLastName,城市=cCity,电话=cPhone from Customer
/*2、选择结构中带运算的列*/
select订单编号=cOrderNo,餐饮名=cFood,
CAST(year(dOrderDate)as CHAR(4))as订餐年份from Orders
/*3、结果集中去掉重复的值*/
select distinct cCreditCardType from Customer
/*4、返回部分结果集*/
select top 3 vFistName+vLastName,cCity,cPhone from Customer
/*5、合并查询结果集*/
select vFistName,vLastName,cCity
from Customer
union
select vFistName,cLastName,cCity
from Recipient
/*6、按指定的条件检索数据*/
select姓名=vFistName+vLastName,城市=cCity,电话=cPhone from Customer where cCreditCardType='工行'
/*7、根据多重条件,用select子句检索并显示数据*/
select vFistName vLastName,cCity
from Customer
where cCreditCardType='工行'or vAddress='武侯区%'/*使用模糊查询*/
/*8、限定数据范围*/
select cFood,mFoodRate,cCategoryID
from Food
where mFoodRate between 10 and 20
/*9、用IN关键字限定范围检索*/
select cShopperID,dOrderDate
from Orders
where cFood IN('蛋挞','红酒小章鱼')
/*10、IS NULL和IS NOT NULL关键字*/
select*from OrderDetail where vMessage is null
/*11、按指定的顺序显示数据*/
select餐饮名=cFood,种类号=cCategoryID,价钱=mFoodRate from Food
order by mFoodRate desc
/*12、聚合函数和分组汇总*/
select OrderDetail.cFood,mFoodRate*siQty
from OrderDetail,Food
where Food.cFood=OrderDetail.cFood
select cFood as'餐饮名',sum(mFoodCost)as'Total Cost of Food for an Order'
from OrderDetail
group by cFood
having SUM(mFoodCost)>50
/*1、内链接*/
select Food.cFood,cCategory,dOrderDate
from Food,Category,OrderDetail,Orders
where ategoryID=ategoryID and
Food.cFood=OrderDetail.cFood
and OrderDetail.cOrderNo=Orders.cOrderNo
and mFoodCost<50
/*2、外连接*/
select Food.cFood,cCartID
from Food left outer join ShoppingCart
on Food.cFood=ShoppingCart.cFood
/*1、使用比较运算符链接子查询*/
select cFood
from Food where mFoodRate= (select MAX(mFoodRate)from Food)
/*2、使用谓词IN链接子查询*/
select cCategory
from Category
where cCategoryID IN
(select cCategoryID
from Food
where mFoodRate>20)
/*3、使用谓词exists链接子查询*/
select cFood
from Food
where exists
(select*from Orders
where cShopperID='000001')
/*4、使用别名连接子查询*/
select vFistName,vLastName,cCity from Customer
where cCity in
(select cCity
from Customer
where vFistName='柳'
and vLastName='絮')
3.5 创建视图
1、/*创建一个名为vwOrders的视图*/
create view vwOrders
as
select姓名
=vFistName+vLastName,Orders.cFood,Orders.cShopperID, vDescription,mFoodCost
from
Customer,Food,ShoppingCart,Wrapper,OrderDetail,Ordes where Customer.cShopperID=Orders.cShopperID
and Food.cFood=Orders.cFood
and artID=artID
and OrderDetail.cOrderNo=Orders.cOrderNo
and Wrapper.cWrpperID=OrderDetail.cWrapperID
2、/*创建一个名为vOrder_Dre的视图*/
create view vOrder_Dre
as
select
Recipient.cOrderNo,dOrderDate,cCity,vAdress,cShippingMode ,vDescription,siQty
from OrderDetail,Orders,Recipient,ShippingMode,Wrapper where OrderDetail.cOrderNo=Orders.cOrderNo
and Orders.cOrderNo=Recipient.cOrderNo
and
Orders.cShippingModeID=ShippingMode.cShippingModeID and OrderDetail.cWrapperID=Wrapper.vDescription
3、/*创建一个名为vOrder_mRate的视图*/
create view vOrer_mRate
as
select总价=sum(mTotalCost),cOrderNo,cCategory
from Orders,Category,Food
where Orders.cFood=Food.cFood
and ategoryID=ategoryID
group by cOrderNo,cCategory
3.6 创建存储过程
1、/*创建一个带有输入输出参数的存储过程*/
create proc prcShopperName
@ShopperID char(6),
@ShopperName char(20)output
as
begin
if exists(select*from Customer
where Customer.cShopperID=@ShopperID)
begin
select@ShopperName=vFistName+vLastName
from Customer
where cShopperID=@ShopperID
return 0
end
else
print'No Records Found.'
return 1
end
go
declare@ReturnValue int
declare@ShopperName char(40)
exec@ReturnValue=prcShopperName'000002',@ShopperName output
select@ReturnValue,@ShopperName
2、/*创建一个带有输入输出参数的存储过程prcOrder*/
create proc prcOrder
@OrderNo char(6),
@OrderDate datetime output
as
begin
if exists(select*From Orders
where Orders.cOrderNo=@OrderNo)
begin
select@OrderDate=dOrderDate
from Orders
where cOrderNo=@OrderNo
return 0
end
else
print'No Records Found.'
return 1
end
go
declare@Return_value int
declare@Date datetime
exec@Return_value=prcOrder'000001',
@Date output
select返回值=@Return_value,订单日期=@Date。