1、数据库课程设计 房屋销售管理系统 姓名:胡玖龙 学号:201320070142 学院:信息工程学院 专业:计算机科学与技术 班级:1320701 指导教师:李荣 2015年 1 月 14 日 一、课程设计的目的和意义 《数据库原理及应用课程设计》是实践性教学环节之一,是《数据库原理及应用》课程的辅助教学课程.通过课程设计,使学生掌握数据库的基本概念,结合实际的操作和设计,巩固课堂教学内容,使学生掌握数据库系统的基本概念、原理和技术,将理论与实际相结合,应用现有的数据建模工具和数据库管理系统软件,规范、科学地完成一个小型数据库
2、的设计与实现,把理论课与实验课所学内容做一综合,并在此基础上强化学生的实践意识、提高其实际动手能力和创新能力。 要求: 通过设计一完整的数据库,使学生掌握数据库设计各阶段的输入、输出、设计环境、目标和方法.熟练掌握两个主要环节——概念结构设计与逻辑结构设计;熟练的使用SQL语言实现数据库的建立、应用和维护. 二、设计正文 1.需求分析 1。1基本功能需求 客户购买或预定房屋,房屋销售人员根据用户的需求为用户办理相关手续.购销管理包含以下几方面的信息。 ① 客户基本信息 客户在购买或预定房屋的时候,每位用户都有唯一的编号,客户的基本信息包括姓名、性别、年龄、联系方式、身份证号。
3、 ② 员工基本信息 每位员工在入职的时候有唯一的员工号,根据分工的不同,还有工作部门及职位这个属性。当然还有姓名、性别、联系方式、年龄、身份证号这些基本属性. ③ 房屋基本信息 每个房屋有唯一的房屋编号,基本信息包含房屋的面积、户型、小区、栋、号、价格和状态,状态分为“待售”、“已预订”和“已售出”. ④ 预定房屋信息 客户可以进行房屋的预定,预定包括预定流水号,客户编号,员工号,房屋编号,预付金额,未付金额,预定时间。 ⑤ 购买的基本信息 客户可以购买房屋,购买包括购买流水号,客户编号,员工号,房屋编号,付款金额,购买时间。付款金额一般等于房屋价格. 1.2用户对系统的要求
4、 1。2。1房屋销售管理人员 ①信息要求 房屋销售管理人员能查询上面提到的客户、销售人员、房屋的所有相关信息,包括预定房屋的基本信息,购买房屋的基本信息。以利于对整个销售楼盘的全面管理。 ②处理要求 当客户的信息发生变化时,房屋销售管理人员能对其进行修改.比如,客户更换手机号,或其他变更,能修改客户的信息。 当房屋的信息放生变化时,房屋销售管理人员能对其进行修改.比如,房屋降价,房屋销售管理人员能对价格进行修改。 当销售人员的信息放生变化时,如升职,房屋销售管理人员能对其进行修改。 ③安全性与完整性要求 安全性要求 1.系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法
5、用户设置其密码,保证用户身份不被盗用; 2。系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容; 3。系统应对不同用户设置不同的权限,区分不同的用户,如区分房屋销售人员和房屋销售管理人员。 完整性要求 1。各种信息记录的完整性,信息记录内容不能为空; 2.各种数据间相互的联系的正确性; 3。相同的数据在不同记录中的一致性。 1.2。2房屋销售人员 ① 信息要求 本楼盘的房屋销售人员能所有楼盘的信息,能查询“待售”状态的房屋信息,能查询客户的基本信息、修改客户的信息.能查询自己的销售记录。能够进行预定、购买操作. ② 处理要求 当客户的信息发生变
6、化时,房屋销售人员能对其进行修改。 客户购买/预定房屋时,销售人员能添加预定/购买记录. 1.2。3系统数据处理 ① 状态更改 当客户预定房屋时,销售人员添加预定记录后,系统能自动将预定房屋的状态从“待售”修改为“已预订”。 当客户购买房屋时,销售人员添加购买记录后,系统能自动将购买房屋的状态从“待售”或“已预订”修改为“已售出"。 ② 数据计算 当客户预定房屋时,销售人员添加记录后,系统能自动根据预付金额和房屋价格计算出未付金额。 2. E—R图及关系模式: 2.1 E—R图: 根据需求分析,画出系统E—R图: 2。2关系模式: 将E-R图转换为关系模式,有下划线的为
7、主键或外键: 客户(客户编号,姓名,性别,身份证号,联系电话) 员工(员工号,姓名,性别,职位,身份证号,联系电话) 房屋(房屋编号,户型,面积,价格,栋,单元,号,房屋状态) 预定(流水号,客户编号,员工号,房屋编号,预付金额,预定时间) 购买(流水号,客户编号,员工号,房屋编号,购买金额,购买时间) 3.具体实现 3.1建立数据库 create database 房屋销售管理 on ( name=house_data, filename=’D:\house。mdf’, size=10, maxsize=50, filegrowth=5 ) log
8、on ( 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
9、 18 18位数字 create table Customer ( CNo char(20) constraint C_prim primary key, CName char(10) not null, CSex char(4) constraint Sex not null check(CSex=’男' or CSex=’女'), CAge int constraint C_Age not null check (CAge〉0), CTel char(20) not null, CId char(18) constraint LEN_CID check(len(
10、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位数字 create table Staff ( SNo char(20) constraint S_prim p
11、rimary key, SName char(10) not null, SSex char(4) constraint Sex not null check(SSex='男' or SSex=’女’), SAge int constraint S_Age not null check (SAge〉0), SDep char(20) not null, SPost char(20) not null, STel char(20) not null, SId char(18) constraint LEN_SID check(len(SId)=18) ) 房屋Ho
12、use: 属性 属性名 类型 长度 约束 房屋编号 HNo char 20 主键 小区 HA char 20 非空 栋 HB char 10 非空 号 HC char 10 非空 户型 HType char 20 非空 面积 HSize int 大于零 房屋状态 HState char 20 ‘待售’或‘已预订’或‘已售出’ 价格 HPrice float 大于零 create table House ( HNo char(20) constraint H_prim primary key,
13、HA char(20) not null, HB char(10) not null, HC char(10) not null, HType char(20) not null, HSize int constraint H_Size not null check(HSize〉0), HState char(20) constraint H_State not null check(HState=’待售' or HState=’已预订' or HState=’已售出’) default ’待售’, Hprice float constraint H_Price not
14、 null check(HPrice>0) ) 预定Reserve: 属性 属性名 类型 长度 约束 预定流水号 RNo char 20 主键 客户编号 CNo char 20 非空 姓名 SName char 10 非空 房屋编号 HNo char 20 外键 预付金额 RMoney float 大于零 未付金额 RRest float 大于或等于零 预定日期 RDate char 10 非空 其中未付金额由存储过程根据预付金额和房屋价格自动计算填入 create table Reserve ( R
15、No char(20) constraint R_prim primary key, CNo char(20) constraint R_C_prim foreign key references Customer(CNo), SNo char(20) constraint R_S_prim foreign key references Staff(SNo), HNo char(20) constraint R_H_prim foreign key references House(HNo), RMoney float constraint R_Money not null c
16、heck(RMoney〉0), RRest float constraint R_Rest not null check(RRest>=0) default 0, Rdate char(10) not null) 购买Buy: 属性 属性名 类型 长度 约束 购买流水号 BNo char 20 主键 客户编号 CNo char 20 非空 姓名 SName char 10 非空 房屋编号 HNo char 20 外键 购买金额 BMoney float 非空 购买日期 BData char 10 非空 crea
17、te table Buy ( BNo char(20) constraint B_prim primary key, CNo char(20) constraint B_C_prim foreign key references Customer(CNo), SNo char(20) constraint B_S_prim foreign key references Staff(SNo), HNo char(20) constraint B_H_prim foreign key references House(HNo), BMoney float constrain
18、t B_Money not null check(BMoney〉=0) default 0, Bdate char(10) not null ) 3.3创建视图: 所有客户信息视图(客户编号,名字,性别,年龄,联系方式,身份证号) create view CustomerView(CNo,CName,CSex,CAge ,CTel,CId) as select CNo,CName,CSex,Cage,CTel,CId FROM Customer 所有员工信息视图(员工号,名字,性别,年龄,部门,职位,联系方式,身份证号) create view StaffView(SNo
19、SName,SSex,SAge,SDep,SPost,STel,SId) as select SNo,SName,SSex,SAge,SDep,SPost,STel,SId from Staff 待售房屋视图(房屋编号,小区,栋,号,户型,面积,价格) create view ForSaleHouse (HNo,HA,HB,HC,HType,HSize,HPrice) as select HNo,HA,HB,HC,HType,HSize,HPrice from House where HState=’待售' 预定房屋信息视图(预定流水号,客户编号,客户名字,客户联系方式,
20、员工号,员工名字,员工联系方式,房屋编号,小区,栋,号,户型,面积,价格,预定金额,未付金额,预定时间) create viewReserveView(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 from Reserve
21、Customer,Staff,House where Reserve.CNo=Customer.CNo and Reserve。SNo=Staff。SNo and Reserve.HNo=House。HNo 购买房屋信息视图(购买流水号,客户编号,客户名字,客户联系方式,员工号,员工名字,员工联系方式,房屋编号,小区,栋,号,户型,面积,价格,购买金额,购买时间) create view BuyView(BNo,CNo,CName,CTel,SNo,SName,STel,HNo,HA,HB,HC,HType,HSize,HPrice,BMoney,Bdate) as select
22、BNo,Buy。CNo,CName,CTel,Buy。SNo,SName,STel,Buy。HNo,HA,HB,HC,HType,HSize,HPrice,BMoney,Bdate from Buy,Customer,Staff,House where Buy。CNo=Customer。CNo and Buy。SNo=Staff.SNo and Buy。HNo=House.HNo 3。4存储过程: 预定房屋: create procedure ReserveHouse ( @RNo char(20), @CNo char(20), @SNo char(20), @HNo
23、 char(20), @RMoney float, @RDate char(10) ) as if ((select House。HState from House where House.HNo=@HNo)=’待售’) begin insert into Reserve(RNo,CNo,SNo,HNo,RMoney,Rdate) values(@RNo,@CNo,@SNo,@HNo,@RMoney,@RDate) update House set HState=’已预定' from House where House。HNo=@HNo update
24、 Reserve set RRest=Hprice—RMoney from House,Reserve where RNo=@RNo and House。HNo=@HNo end else begin print’该房屋已预定或已售出’ end 功能:根据HNo判断房屋状态是不是‘待售’状态,若是,则在预定表中插入信息;否则,则提示“该房屋已预定或已售出”,并放弃插入操作。 购买房屋: create procedure BuyHouse ( @BNo char(20), @CNo char(20), @SNo char(20), @HNo ch
25、ar(20), @BDate char(10) ) as if ((select House.HState from House where House.HNo=@HNo)!=’已售出') begin insert into Buy(BNo,CNo,SNo,HNo,Bdate) values(@BNo,@CNo,@SNo,@HNo,@BDate) update House set HState=’已售出' from House where House.HNo=@HNo delete from Reserve where Reserve。HNo=@HNo
26、 end else begin print’该房屋已售出' end 功能:根据HNo判断房屋状态是不是‘已售出’状态,若为否,则在购买表中插入信息,并在预定表中删除对应信息;否则,则提示“该房屋已售出",并放弃插入操作. 插入客户信息: create procedure InsertCustomer ( @CNo char(20), @CName char(10), @CSex char(4), @CAge int, @CTel char(20), @CId char(18)=’无’ ) as insert into Custome
27、r values(@CNo,@CName,@CSex,@CAge,@CTel,@CId) 功能:在客户表中插入新的客户信息. 插入员工信息: create procedure InsertStaff ( @SNo char(20), @SName char(10), @SSex char(4), @SAge int, @SDep char(20), @SPost char(20), @STel char(20), @SId char(18) ) as insert into Staff values(@SNo,@SName,@SSex,@SAg
28、e,@SDep,@SPost,@STel,@SId) 功能:在员工表中插入新的员工信息。 插入房屋信息: create procedure InsertHouse ( @HNo char(20), @HA char(20), @HB char(10), @HC char(10), @HType char(20), @HSize int, @HState char(20), @Hprice float ) as insert into House values(@HNo,@HA,@HB,@HC,@HType,@HSize,@HState,@HPrice
29、) 功能:在房屋表中插入新的房屋信息。 3。5触发器: 触发器1: create trigger NewReserveHouse on Reserve instead of insert as if not exists ( select * from inserted where CNo in (select CNo from Customer) ) print '客户表中没有该客户信息,拒绝插入!' rollback transaction 功能:保证在预定表中插入新记录时,客户信息必须已经存在于客户表中。 触发器2: create trigge
30、r NewBuyHouse on Buy instead of insert as if not exists ( select * from inserted where CNo in (select CNo from Customer) ) print ’客户表中没有该客户信息,拒绝插入!' rollback transaction 功能:保证在购买表中插入新记录时,客户信息必须已经存在于客户表中。 触发器3: create trigger DelR on Reserve after delete as if ((select HState fr
31、om House where House。HNo in (select HNo from deleted) )='已预定’) begin delete from Customer where Customer。CNo in (select CNo from deleted) update House set HState=’待售' where House。HNo in (select HNo from deleted) end 功能:删除预定表中某一个预定记录时,如果是因为客服付清未付款,购买了房屋,则只进行原操作;如果是因为客户取消预定,则同时删除客户表中此客户
32、并将此房屋状态重新改为‘待售’。 触发器4: create trigger DelB on Buy after delete as begin delete from Customer where Customer.CNo in (select CNo from deleted) update House set HState=’待售' where House。HNo in (select HNo from deleted) end 功能:删除购买表中某一个购买记录时,同时删除客户表中此客户,并将此房屋状态重新改为‘待售'。 三。实例演示: 添加数据:
33、 用InsertCustomer存储过程在Customer表填入数据: 用InsertStaff存储过程在Staff表填入数据: 用InsertHouse存储过程在InsertHouse表填入数据: 预定和购买房屋: 用ReserveHouse存储过程添加预定房屋信息: (输入参数中没有未付金额RRest,RRest由存储过程自动计算填入) 预定H0002和H0005号房屋 用BuyHouse存储过程添加购买房屋信息: 购买H0007和H0009号房屋 用ReserveView视图和BuyView视图查看所有预定和购买房屋信息: 删除购买信息后自动将房屋状态重新修改为“待
34、售” 删除编号为B0002的购买记录,触发器自动将编号为H0009的房屋状态变更为“待售”。删除预定记录同此. 当添加新的预定记录时,若客户信息不存在于客户表中,则输出提示信息,并结束操作.插入购买记录同此。 四。课程设计总结或结论 在完成课程设计的过程中,我明白了很多以前不明白的问题,特别是对存储过程和触发器的应用有了更深的了解。在课堂上学到的理论知识,也在实践中得到复习和巩固,并使我对数据库的理解更一步加深了,也为以后积累了宝贵的经验。从完全不知道从哪里下手,到一步步修改,一步步完善,到最终完成,中间经历了很多困难,查阅了很多资料,最终总算是完成了。但也在设计的过程中,我明白我掌握的知识还远远不够,就这一次设计房屋销售管理系统而言,尽管实现了大部分功能,但是还是有很多问题,并且我的课程设计还远远没有达到能投入实际应用的地步,没有界面,各种功能也不完美。但我相信,我在不断的进步,有了这一次积累,以后我会做的更好。






