数据库房屋销售管理系统.docx
《数据库房屋销售管理系统.docx》由会员分享,可在线阅读,更多相关《数据库房屋销售管理系统.docx(24页珍藏版)》请在冰豆网上搜索。
![数据库房屋销售管理系统.docx](https://file1.bdocx.com/fileroot1/2023-6/20/1c379162-a439-43fe-8d00-f1e556bef935/1c379162-a439-43fe-8d00-f1e556bef9351.gif)
数据库房屋销售管理系统
数据库课程设计
房屋销售管理系统
姓名:
胡玖龙
学号:
201320070142
学院:
信息工程学院
专业:
计算机科学与技术
班级:
1320701
指导教师:
李荣
2015年1月14日
一、课程设计的目的和意义
《数据库原理及应用课程设计》是实践性教学环节之一,是《数据库原理及应用》课程的辅助教学课程。
通过课程设计,使学生掌握数据库的基本概念,结合实际的操作和设计,巩固课堂教学内容,使学生掌握数据库系统的基本概念、原理和技术,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软件,规范、科学地完成一个小型数据库的设计与实现,把理论课与实验课所学内容做一综合,并在此基础上强化学生的实践意识、提高其实际动手能力和创新能力。
要求:
通过设计一完整的数据库,使学生掌握数据库设计各阶段的输入、输出、设计环境、目标和方法。
熟练掌握两个主要环节——概念结构设计与逻辑结构设计;熟练的使用SQL语言实现数据库的建立、应用和维护。
二、设计正文
1.需求分析
1.1基本功能需求
客户购买或预定房屋,房屋销售人员根据用户的需求为用户办理相关手续。
购销管理包含以下几方面的信息。
1客户基本信息
客户在购买或预定房屋的时候,每位用户都有唯一的编号,客户的基本信息包括姓名、性别、年龄、联系方式、身份证号。
2员工基本信息
每位员工在入职的时候有唯一的员工号,根据分工的不同,还有工作部门及职位这个属性。
当然还有姓名、性别、联系方式、年龄、身份证号这些基本属性。
3房屋基本信息
每个房屋有唯一的房屋编号,基本信息包含房屋的面积、户型、小区、栋、号、价格和状态,状态分为“待售”、“已预订”和“已售出”。
4预定房屋信息
客户可以进行房屋的预定,预定包括预定流水号,客户编号,员工号,房屋编号,预付金额,未付金额,预定时间。
5购买的基本信息
客户可以购买房屋,购买包括购买流水号,客户编号,员工号,房屋编号,付款金额,购买时间。
付款金额一般等于房屋价格。
1.2用户对系统的要求
1.2.1房屋销售管理人员
①信息要求
房屋销售管理人员能查询上面提到的客户、销售人员、房屋的所有相关信息,包括预定房屋的基本信息,购买房屋的基本信息。
以利于对整个销售楼盘的全面管理。
②处理要求
当客户的信息发生变化时,房屋销售管理人员能对其进行修改。
比如,客户更换手机号,或其他变更,能修改客户的信息。
当房屋的信息放生变化时,房屋销售管理人员能对其进行修改。
比如,房屋降价,房屋销售管理人员能对价格进行修改。
当销售人员的信息放生变化时,如升职,房屋销售管理人员能对其进行修改。
③安全性与完整性要求
安全性要求
1.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;
2.系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;
3.系统应对不同用户设置不同的权限,区分不同的用户,如区分房屋销售人员和房屋销售管理人员。
完整性要求
1.各种信息记录的完整性,信息记录内容不能为空;
2.各种数据间相互的联系的正确性;
3.相同的数据在不同记录中的一致性。
1.2.2房屋销售人员
1信息要求
本楼盘的房屋销售人员能所有楼盘的信息,能查询“待售”状态的房屋信息,能查询客户的基本信息、修改客户的信息。
能查询自己的销售记录。
能够进行预定、购买操作。
2处理要求
当客户的信息发生变化时,房屋销售人员能对其进行修改。
客户购买/预定房屋时,销售人员能添加预定/购买记录。
1.2.3系统数据处理
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,
maxsize=50,
filegrowth=5
)
logon
(name=house_log,
filename='D:
\house.ldf',
size=5,
maxsize=25,
filegrowth=5
)
建立一个名为房屋销售管理的数据库
3.2创建各实体表及关系表
客户Customer:
属性
属性名
类型
长度
约束
客户编号
CNo
char
20
主键
姓名
CName
char
10
非空
性别
CSex
char
4
‘男’或‘女’
年龄
CAge
int
大于零
联系方式
CTel
char
20
非空
身份证号
CId
char
18
18位数字
createtableCustomer
(CNochar(20)constraintC_primprimarykey,
CNamechar(10)notnull,
CSexchar(4)constraintSexnotnullcheck(CSex='男'orCSex='女'),
CAgeintconstraintC_Agenotnullcheck(CAge>0),
CTelchar(20)notnull,
CIdchar(18)constraintLEN_CIDcheck(len(CId)=18)
)
员工Staff:
属性
属性名
类型
长度
约束
员工号
SNo
char
20
主键
姓名
SName
char
10
非空
性别
SSex
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,
SSexchar(4)constraintSexnotnullcheck(SSex='男'orSSex='女'),
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
主键
客户编号
CNo
char
20
非空
姓名
SName
char
10
非空
房屋编号
HNo
char
20
外键
预付金额
RMoney
float
大于零
未付金额
RRest
float
大于或等于零
预定日期
RDate
char
10
非空
其中未付金额由存储过程根据预付金额和房屋价格自动计算填入
createtableReserve
(RNochar(20)constraintR_primprimarykey,
CNochar(20)constraintR_C_primforeignkeyreferencesCustomer(CNo),
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
主键
客户编号
CNo
char
20
非空
姓名
SName
char
10
非空
房屋编号
HNo
char
20
外键
购买金额
BMoney
float
非空
购买日期
BData
char
10
非空
createtableBuy
(BNochar(20)constraintB_primprimarykey,
CNochar(20)constraintB_C_primforeignkeyreferencesCustomer(CNo),
SNochar(20)constraintB_S_primforeignkeyreferencesStaff(SNo),
HNochar(20)constraintB_H_primforeignkeyreferencesHouse(HNo),
BMoneyfloatconstraintB_Moneynotnullcheck(BMoney>=0)default0,
Bdatechar(10)notnull
)
3.3创建视图:
所有客户信息视图(客户编号,名字,性别,年龄,联系方式,身份证号)
createviewCustomerView(CNo,CName,CSex,CAge,CTel,CId)
as
selectCNo,CName,CSex,Cage,CTel,CId
FROMCustomer
所有员工信息视图(员工号,名字,性别,年龄,部门,职位,联系方式,身份证号)
createviewStaffView(SNo,SName,SSex,SAge,SDep,SPost,STel,SId)
as
selectSNo,SName,SSex,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,CNo,CName,CTel,SNo,SName,STel,HNo,HA,HB,
HC,HType,HSize,HPrice,RMoney,RRest,Rdate)
as
selectRNo,Reserve.CNo,CName,CTel,Reserve.SNo,SName,STel,Reserve.HNo,HA,HB,HC,
HType,HSize,HPrice,RMoney,RRest,Rdate
fromReserve,Customer,Staff,House
whereReserve.CNo=Customer.CNoandReserve.SNo=Staff.SNoandReserve.HNo=House.HNo
购买房屋信息视图(购买流水号,客户编号,客户名字,客户联系方式,员工号,员工名字,员工联系方式,房屋编号,小区,栋,号,户型,面积,价格,购买金额,购买时间)
createviewBuyView(BNo,CNo,CName,CTel,SNo,SName,STel,HNo,HA,HB,HC,HType,HSize,HPrice,BMoney,Bdate)
as
selectBNo,Buy.CNo,CName,CTel,Buy.SNo,SName,STel,Buy.HNo,HA,HB,HC,HType,HSize,HPrice,BMoney,Bdate
fromBuy,Customer,Staff,House
whereBuy.CNo=Customer.CNoandBuy.SNo=Staff.SNoandBuy.HNo=House.HNo
3.4存储过程:
预定房屋:
createprocedureReserveHouse
(@RNochar(20),
@CNochar(20),
@SNochar(20),
@HNochar(20),
@RMoneyfloat,
@RDatechar(10)
)
as
if((selectHouse.HStatefromHousewhereHouse.HNo=@HNo)='待售')
begin
insertintoReserve(RNo,CNo,SNo,HNo,RMoney,Rdate)values(@RNo,@CNo,@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),
@CNochar(20),
@SNochar(20),
@HNochar(20),
@BDatechar(10)
)
as
if((selectHouse.HStatefromHousewhereHouse.HNo=@HNo)!
='已售出')
begin
insertintoBuy(BNo,CNo,SNo,HNo,Bdate)values(@BNo,@CNo,@SNo,@HNo,@BDate)
updateHouse
setHState='已售出'
fromHouse
whereHouse.HNo=@HNo
deletefromReserve
whereReserve.HNo=@HNo
end
else
begin
print'该房屋已售出'
end
功能:
根据HNo判断房屋状态是不是‘已售出’状态,若为否,则在购买表中插入信息,并在预定表中删除对应信息;否则,则提示“该房屋已售出”,并放弃插入操作。
插入客户信息:
createprocedureInsertCustomer
(@CNochar(20),
@CNamechar(10),
@CSexchar(4),
@CAgeint,
@CTelchar(20),
@CIdchar(18)='无'
)
as
insertintoCustomervalues(@CNo,@CName,@CSex,@CAge,@CTel,@CId)
功能:
在客户表中插入新的客户信息。
插入员工信息:
createprocedureInsertStaff
(@SNochar(20),
@SNamechar(10),
@SSexchar(4),
@SAgeint,
@SDepchar(20),
@SPostchar(20),
@STelchar(20),
@SIdchar(18)
)
as
insertintoStaffvalues(@SNo,@SName,@SSex,@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
ifnotexists
(select*frominsertedwhereCNoin(selectCNofromCustomer))
print'客户表中没有该客户信息,拒绝插入!
'
rollbacktransaction
功能:
保证在预定表中插入新记录时,客户信息必须已经存在于客户表中。
触发器2:
createtriggerNewBuyHouseonBuy
insteadofinsert
as
ifnotexists
(select*frominsertedwhereCNoin(selectCNofromCustomer))
print'客户表中没有该客户信息,拒绝插入!
'
rollbacktransaction
功能:
保证在购买表中插入新记录时,客户信息必须已经存在于客户表中。
触发器3:
createtriggerDelRonReserve
afterdelete
as
if((selectHStatefromHousewhereHouse.HNoin(selectHNofromdeleted))='已预定')
begin
deletefromCustomer
whereCustomer.CNoin(selectCNofromdeleted)
updateHouse
setHState='待售'
whereHouse.HNoin(selectHNofromdeleted)
end
功能:
删除预定表中某一个预定记录时,如果是因为客服付清未付款,购买了房屋,则只进行原操作;如果是因为客户取消预定,则同时删除客户表中此客户,并将此房屋状态重新改为‘待售’。
触发器4:
createtriggerDelBonBuy
afterdelete
as
begin
deletefromCustomer
whereCustomer.CNoin(selectCNofromdeleted)
updateHouse
setHState='待售'
whereHouse.HNoin(selectHNofromdeleted)
end
功能:
删除购买表中某一个购买记录时,同时删除客户表中此客户,并将此房屋状态重新改为‘待售’。
三.实例演示:
添加数据:
用InsertCustomer存储过程在Customer表填入数据:
用InsertStaff存储过程在Staff表填入数据:
用InsertHouse存储过程在InsertHouse表填入数据:
预定和购买房屋:
用ReserveHouse存储过程添加预定房屋信息:
(输入参数中没有未付金额RRest,RRest由存储过程自动计算填入)
预定H0002和H0005号房屋
用BuyHouse存储过程添加购买房屋信息:
购买H0007和H0009号房屋
用Re