数据库房屋销售管理系统.docx
《数据库房屋销售管理系统.docx》由会员分享,可在线阅读,更多相关《数据库房屋销售管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
数据库房屋销售管理系统
数据库课程设计
房屋销售管理系统
**:
玖龙
**:
2
学院:
信息工程学院
专业:
计算机科学与技术
班级:
1320701
指导教师:
荣
2021年1月14日
一、课程设计的目的和意义
"数据库原理及应用课程设计"是实践性教学环节之一,是"数据库原理及应用"课程的辅助教学课程。
通过课程设计,使学生掌握数据库的根本概念,结合实际的操作和设计,稳固课堂教学容,使学生掌握数据库系统的根本概念、原理和技术,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软件,规、科学地完成一个小型数据库的设计与实现,把理论课与实验课所学容做一综合,并在此根底上强化学生的实践意识、提高其实际动手能力和创新能力。
要求:
通过设计一完整的数据库,使学生掌握数据库设计各阶段的输入、输出、设计环境、目标和法。
熟练掌握两个主要环节——概念构造设计与逻辑构造设计;熟练的使用SQL语言实现数据库的建立、应用和维护。
二、设计正文
1.需求分析
1.1根本功能需求
客户购置或预定房屋,房屋销售人员根据用户的需求为用户办理相关手续。
购销管理包含以下几面的信息。
1客户根本信息
客户在购置或预定房屋的时候,每位用户都有唯一的编号,客户的根本信息包括**、性别、年龄、联系式、**号。
2员工根本信息
每位员工在入职的时候有唯一的员工号,根据分工的不同,还有工作部门及职位这个属性。
当然还有**、性别、联系式、年龄、**号这些根本属性。
3房屋根本信息
每个房屋有唯一的房屋编号,根本信息包含房屋的面积、户型、小区、栋、号、价格和状态,状态分为"待售〞、"已预订〞和"已售出〞。
4预定房屋信息
客户可以进展房屋的预定,预定包括预定流水号,客户编号,员工号,房屋编号,预付金额,未付金额,预定时间。
5购置的根本信息
客户可以购置房屋,购置包括购置流水号,客户编号,员工号,房屋编号,付款金额,购置时间。
付款金额一般等于房屋价格。
1.2用户对系统的要求
房屋销售管理人员
①信息要求
房屋销售管理人员能查询上面提到的客户、销售人员、房屋的所有相关信息,包括预定房屋的根本信息,购置房屋的根本信息。
以利于对整个销售楼盘的全面管理。
②处理要求
当客户的信息发生变化时,房屋销售管理人员能对其进展修改。
比方,客户更换手机号,或其他变更,能修改客户的信息。
当房屋的信息放生变化时,房屋销售管理人员能对其进展修改。
比方,房屋降价,房屋销售管理人员能对价格进展修改。
当销售人员的信息放生变化时,如升职,房屋销售管理人员能对其进展修改。
③平安性与完整性要求
平安性要求
1.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;
2.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和容;
3.系统应对不同用户设置不同的权限,区分不同的用户,如区分房屋销售人员和房屋销售管理人员。
完整性要求
1.各种信息记录的完整性,信息记录容不能为空;
2.各种数据间相互的联系的正确性;
3.一样的数据在不同记录中的一致性。
房屋销售人员
1信息要求
本楼盘的房屋销售人员能所有楼盘的信息,能查询"待售〞状态的房屋信息,能查询客户的根本信息、修改客户的信息。
能查询自己的销售记录。
能够进展预定、购置操作。
2处理要求
当客户的信息发生变化时,房屋销售人员能对其进展修改。
客户购置/预定房屋时,销售人员能添加预定/购置记录。
系统数据处理
1状态更改
当客户预定房屋时,销售人员添加预定记录后,系统能自动将预定房屋的状态从"待售〞修改为"已预订〞。
当客户购置房屋时,销售人员添加购置记录后,系统能自动将购置房屋的状态从"待售〞或"已预订〞修改为"已售出〞。
2数据计算
当客户预定房屋时,销售人员添加记录后,系统能自动根据预付金额和房屋价格计算出未付金额。
2.E-R图及关系模式:
2.1E-R图:
根据需求分析,画出系统E-R图:
2.2关系模式:
将E-R图转换为关系模式,有下划线的为主键或外键:
客户〔客户编号,**,性别,**号,联系〕
员工〔员工号,**,性别,职位,**号,联系〕
房屋〔房屋编号,户型,面积,价格,栋,单元,号,房屋状态〕
预定〔流水号,客户编号,员工号,房屋编号,预付金额,预定时间〕
购置〔流水号,客户编号,员工号,房屋编号,购置金额,购置时间〕
3.具体实现
3.1建立数据库
createdatabase房屋销售管理
on
(name=house_data,
filename='D:
\house.mdf',
size=10,
ma*size=50,
filegrowth=5
)
logon
(name=house_log,
filename='D:
\house.ldf',
size=5,
ma*size=25,
filegrowth=5
)
建立一个名为房屋销售管理的数据库
3.2创立各实体表及关系表
客户Customer:
属性
属性名
类型
长度
约束
客户编号
o
char
20
主键
**
ame
char
10
非空
性别
CSe*
char
4
‘男’或‘女’
年龄
CAge
int
大于零
联系式
CTel
char
20
非空
**号
CId
char
18
18位数字
createtableCustomer
(ochar(20)constraintC_primprimarykey,
amechar(10)notnull,
CSe*char(4)constraintSe*notnullcheck(CSe*='男'orCSe*='女'),
CAgeintconstraintC_Agenotnullcheck(CAge>0),
CTelchar(20)notnull,
CIdchar(18)constraintLEN_CIDcheck(len(CId)=18)
)
员工Staff:
属性
属性名
类型
长度
约束
员工号
SNo
char
20
主键
**
SName
char
10
非空
性别
SSe*
char
4
‘男’或‘女’
年龄
SAge
int
大于零
部门
SDep
char
20
非空
职位
SPost
char
20
非空
联系式
STel
char
20
非空
**号
SId
char
18
18位数字
createtableStaff
(SNochar(20)constraintS_primprimarykey,
SNamechar(10)notnull,
SSe*char(4)constraintSe*notnullcheck(SSe*='男'orSSe*='女'),
SAgeintconstraintS_Agenotnullcheck(SAge>0),
SDepchar(20)notnull,
SPostchar(20)notnull,
STelchar(20)notnull,
SIdchar(18)constraintLEN_SIDcheck(len(SId)=18)
〕
房屋House:
属性
属性名
类型
长度
约束
房屋编号
HNo
char
20
主键
小区
HA
char
20
非空
栋
HB
char
10
非空
号
HC
char
10
非空
户型
HType
char
20
非空
面积
HSize
int
大于零
房屋状态
HState
char
20
‘待售'或‘已预订’或‘已售出’
价格
HPrice
float
大于零
createtableHouse
(HNochar(20)constraintH_primprimarykey,
HAchar(20)notnull,
HBchar(10)notnull,
HCchar(10)notnull,
HTypechar(20)notnull,
HSizeintconstraintH_Sizenotnullcheck(HSize>0),
HStatechar(20)constraintH_Statenotnullcheck(HState='待售'orHState='已预订'orHState='已售出')default'待售',
HpricefloatconstraintH_Pricenotnullcheck(HPrice>0)
)
预定Reserve:
属性
属性名
类型
长度
约束
预定流水号
RNo
char
20
主键
客户编号
o
char
20
非空
**
SName
char
10
非空
房屋编号
HNo
char
20
外键
预付金额
RMoney
float
大于零
未付金额
RRest
float
大于或等于零
预定日期
RDate
char
10
非空
其中未付金额由存储过程根据预付金额和房屋价格自动计算填入
createtableReserve
(RNochar(20)constraintR_primprimarykey,
ochar(20)constraintR_C_primforeignkeyreferencesCustomer(o),
SNochar(20)constraintR_S_primforeignkeyreferencesStaff(SNo),
HNochar(20)constraintR_H_primforeignkeyreferencesHouse(HNo),
RMoneyfloatconstraintR_Moneynotnullcheck(RMoney>0),
RRestfloatconstraintR_Restnotnullcheck(RRest>=0)default0,
Rdatechar(10)notnull〕
购置Buy:
属性
属性名
类型
长度
约束
购置流水号
BNo
char
20
主键
客户编号
o
char
20
非空
**
SName
char
10
非空
房屋编号
HNo
char
20
外键
购置金额
BMoney
float
非空
购置日期
BData
char
10
非空
createtableBuy
(BNochar(20)constraintB_primprimarykey,
ochar(20)constraintB_C_primforeignkeyreferencesCustomer(o),
SNochar(20)constraintB_S_primforeignkeyreferencesStaff(SNo),
HNochar(20)constraintB_H_primforeignkeyreferencesHouse(HNo),
BMoneyfloatconstraintB_Moneynotnullcheck(BMoney>=0)default0,
Bdatechar(10)notnull
)
3.3创立视图:
所有客户信息视图〔客户编号,名字,性别,年龄,联系式,**号〕
createviewCustomerView(o,ame,CSe*,CAge,CTel,CId)
as
selecto,ame,CSe*,Cage,CTel,CId
FROMCustomer
所有员工信息视图〔员工号,名字,性别,年龄,部门,职位,联系式,**号〕
createviewStaffView(SNo,SName,SSe*,SAge,SDep,SPost,STel,SId)
as
selectSNo,SName,SSe*,SAge,SDep,SPost,STel,SId
fromStaff
待售房屋视图〔房屋编号,小区,栋,号,户型,面积,价格〕
createviewForSaleHouse(HNo,HA,HB,HC,HType,HSize,HPrice)
as
selectHNo,HA,HB,HC,HType,HSize,HPrice
fromHouse
whereHState='待售'
预定房屋信息视图〔预定流水号,客户编号,客户名字,客户联系式,员工号,员工名字,员工联系式,房屋编号,小区,栋,号,户型,面积,价格,预定金额,未付金额,预定时间〕
createviewReserveView(RNo,o,ame,CTel,SNo,SName,STel,HNo,HA,HB,
HC,HType,HSize,HPrice,RMoney,RRest,Rdate)
as
selectRNo,Reserve.o,ame,CTel,Reserve.SNo,SName,STel,Reserve.HNo,HA,HB,HC,
HType,HSize,HPrice,RMoney,RRest,Rdate
fromReserve,Customer,Staff,House
whereReserve.o=Customer.oandReserve.SNo=Staff.SNoandReserve.HNo=House.HNo
购置房屋信息视图〔购置流水号,客户编号,客户名字,客户联系式,员工号,员工名字,员工联系式,房屋编号,小区,栋,号,户型,面积,价格,购置金额,购置时间〕
createviewBuyView(BNo,o,ame,CTel,SNo,SName,STel,HNo,HA,HB,HC,HType,HSize,HPrice,BMoney,Bdate)
as
selectBNo,Buy.o,ame,CTel,Buy.SNo,SName,STel,Buy.HNo,HA,HB,HC,HType,HSize,HPrice,BMoney,Bdate
fromBuy,Customer,Staff,House
whereBuy.o=Customer.oandBuy.SNo=Staff.SNoandBuy.HNo=House.HNo
3.4存储过程:
预定房屋:
createprocedureReserveHouse
(RNochar(20),
ochar(20),
SNochar(20),
HNochar(20),
RMoneyfloat,
RDatechar(10)
)
as
if((selectHouse.HStatefromHousewhereHouse.HNo=HNo)='待售')
begin
insertintoReserve(RNo,o,SNo,HNo,RMoney,Rdate)values(RNo,o,SNo,HNo,RMoney,RDate)
updateHouse
setHState='已预定'
fromHouse
whereHouse.HNo=HNo
updateReserve
setRRest=Hprice-RMoney
fromHouse,Reserve
whereRNo=RNoandHouse.HNo=HNo
end
else
begin
print'该房屋已预定或已售出'
end
功能:
根据HNo判断房屋状态是不是‘待售’状态,假设是,则在预定表中插入信息;否则,则提示"该房屋已预定或已售出〞,并放弃插入操作。
购置房屋:
createprocedureBuyHouse
(BNochar(20),
ochar(20),
SNochar(20),
HNochar(20),
BDatechar(10)
)
as
if((selectHouse.HStatefromHousewhereHouse.HNo=HNo)!
='已售出')
begin
insertintoBuy(BNo,o,SNo,HNo,Bdate)values(BNo,o,SNo,HNo,BDate)
updateHouse
setHState='已售出'
fromHouse
whereHouse.HNo=HNo
deletefromReserve
whereReserve.HNo=HNo
end
else
begin
print'该房屋已售出'
end
功能:
根据HNo判断房屋状态是不是‘已售出’状态,假设为否,则在购置表中插入信息,并在预定表中删除对应信息;否则,则提示"该房屋已售出〞,并放弃插入操作。
插入客户信息:
createprocedureInsertCustomer
(ochar(20),
amechar(10),
CSe*char(4),
CAgeint,
CTelchar(20),
CIdchar(18)='无'
)
as
insertintoCustomervalues(o,ame,CSe*,CAge,CTel,CId)
功能:
在客户表中插入新的客户信息。
插入员工信息:
createprocedureInsertStaff
(SNochar(20),
SNamechar(10),
SSe*char(4),
SAgeint,
SDepchar(20),
SPostchar(20),
STelchar(20),
SIdchar(18)
)
as
insertintoStaffvalues(SNo,SName,SSe*,SAge,SDep,SPost,STel,SId)
功能:
在员工表中插入新的员工信息。
插入房屋信息:
createprocedureInsertHouse
(HNochar(20),
HAchar(20),
HBchar(10),
HCchar(10),
HTypechar(20),
HSizeint,
HStatechar(20),
Hpricefloat
)
as
insertintoHousevalues(HNo,HA,HB,HC,HType,HSize,HState,HPrice)
功能:
在房屋表中插入新的房屋信息。
3.5触发器:
触发器1:
createtriggerNewReserveHouseonReserve
insteadofinsert
as
ifnote*ists
(select*frominsertedwhereoin(selectofromCustomer))
print'客户表中没有该客户信息,拒绝插入!
'
rollbacktransaction
功能:
保证在预定表中插入新记录时,客户信息必须已经存在于客户表中。
触发器2:
createtriggerNewBuyHouseonBuy
insteadofinsert
as
ifnote*ists
(select*frominsertedwhereoin(selectofromCustomer))
print'客户表中没有该客户信息,拒绝插入!
'
rollbacktransaction
功能:
保证在购置表中插入新记录时,客户信息必须已经存在于客户表中。
触发器3:
createtriggerDelRonReserve
afterdelete
as
if((selectHStatefromHousewhereHouse.HNoin(selectHNofromdeleted))='已预定')
begin
deletefromCustomer
whereCustomer.oin(selectofromdeleted)
updateHouse
setHState='待售'
whereHouse.HNoin(selectHNofromdeleted)
end
功能:
删除预定表中*一个预定记录时,如果是因为客服付清未付款,购置了房屋,则只进展原操作;如果是因为客户取消预定,则同时删除客户表中此客户,并将此房屋状态重新改为‘待售’。
触发器4:
createtriggerDelBonBuy
afterdelete
as
begin
deletefromCustomer
whereCustomer.oin(selectofromdeleted)
updateHouse
setHState='待售'
whereHouse.HNoin(selectHNofromdeleted)
end
功能:
删除购置表中*一个购置记录时,同时删除客户表中此客户,并将此房屋状态重新改为‘待售’。
三.实例演示:
添加数据:
用InsertCustomer存储过程在Customer表填入数据:
用InsertStaff存储过程在Staff表填入数据:
用InsertHouse存储过程在InsertHouse表填入数据:
预定和购置房屋:
用ReserveHouse存储过程添加预定房屋信息:
(输入参数中没有未付金额RRest,RRest由存储过程自动计算填入)
预定H0002和H0005号房屋
用BuyHouse存储过程添加购置房屋信息:
购置H0007和H0009号房屋
用ReserveView视图和BuyView视图查看所有预定和购置房屋信息:
删除购置信息后自动将房屋状态重新修改为"待售〞
删除编号为B0002的购置记录,触发器自动将编号为H0009的房屋状态变更为"待售〞。
删除预定记录同此。
当添加新的预定记录时,假设客户信息不存在于客户表中,则输出提示信息,并完毕操作。
插入购置记录同此。
四.课程设计总结或结论
在完成课程设计的过程中,我明白了很多以前不明白的问题,特别是对存储过程和触发器的应用有了更深的了解。
在课堂上学到的理论知识,也在实践中得到复习和稳固,并使我对数据库的理解更一步加深了,也为以后积累了珍贵的经历。
从完全不知道从哪里下手,到一步步修改,一步步完善,到最终完成,中间经历