数据库课程设计(房屋租赁系统)
数据库课程设计(房屋租赁系统)mysql
目录
1.需求分析
随着房价的不断升高,人们对房屋的需求越来越难以满足,对于一些在外地工作的人来说租房子成为了一种常态,因此出现了越来越多的房屋中介,而对于房屋中介而言,管理日益增加租户的信息和房产的信息成了一个至关重要的问题。与此同时,环保也是大家关注的焦点。因此,开发一款能够实现无纸化的管理系统来管理房屋和租户的信息就显得十分必要。
房屋租赁管理系统的任务目标:简化房屋信息及租客信息的管理步骤,可以方便快捷地查询所需要的信息,系统自动进行水电等费用的计算。在系统启动时有对用户身份的检查,以保证信息的安全性。
通过对任务的分析,可以发现运行的系统要能实现以下的功能:
(1)房屋信息管理:包括添加新的房屋信息、修改房屋信息、查询房屋信息、删除房屋信息。
(2)用户信息管理:包括添加新的用户信息、修改用户信息、查询用户信息、删除用户信息。
(3)租赁信息管理:包括查询某个房屋的租赁状况、添加租赁关系、删除租赁关系。
(4)水电费用管理:包括水电费用的查询、添加、修改、删除。
(5)财务收支记录:添加公司的财务记录(不允许修改和删除)。
(6)收费项目设置:设置水费、电费、物业费、宽带费单价及财务余额。
2.概念结构设计
分析房屋租赁系统的基本要求,利用概念结构设计的抽象机制,对需求分析结果中的信息进行分类,组织,得到系统的实体、实体属性、实体的键、实体之间的联系以及联系的类型,就可以设计出系统的概念模型。
2.1抽象出系统的实体
根据分析,房屋租赁系统主要包含用户、房屋、水电费3个实体,画出3个实体的局部E-R图,并在图中标出实体的主键(加下划线的属性),如图2-1、图2-2、图2-3所示其中电话是用户实体的主键,房屋编号是房屋实体的主键,水电费单号是水电费实体的主键。
图2-1 用户实体及其属性
图2-2 房屋实体及其属性
图2-3 水电费实体及其属性
2.2设计分E-R图:
在房屋租赁系统中,涉及3个实体:用户、房屋、水电费,3个实体之间均存在联系分E-R图如图2-4,图2-5所示。
图2-4 用户和房屋之间的E-R图
图2-5 房屋和水电费之间的E-R图
2.3设计总体E-R图
将各个实体的属性加入形成全局E-R图,如图2-6所示。
图2-6 房屋租赁系统的全局E-R图
3.逻辑结构设计
逻辑结构设计就是将概念结构设计中的全局E-R图转为选用的DBMS产品所支持的数据模型想符合的逻辑结构。
在关系数据库系统中,数据库的逻辑结构设计就是根据概念模型设计的E-R图,按照E-R图到关系数据模型的转化规则,将E-R图转化成关系模式的过程。E-R图向关系模型的转换需要解决的问题是,如何将实体和实体间的联系转化为关系模式,以及如何确定这些关系模式的属性和键。转换的关系模式如下:
- 房屋信息(房屋编号、所属区域、房屋名称、房屋类型、房屋面积、装修情况、房屋设施、房屋用途、月租价格、房间状态、备注说明)。
- 用户信息(身份证号、用户姓名、性别、电话)。
- 租赁信息(房屋编号、租户身份证号、租赁开始时间、租赁月数 、月租金)。
- 水电费信息(受理单号、房屋编号、上次电表数、本次电表数、上次水表数、本次水表数、收费金额)。
注:为了方便解决数字限制影响,故所有数据类型均为varchar。
数据库中共包含4个表,分别是房屋信息表、用户信息表、 房屋租赁表、水电费表,具体如表3-1、表3-2、表3-3、表3-2所示。
表3-1房屋信息表(roominf)
列名 | 含义 | 数据类型 | 约束 | |
num | 房屋编号 | varchar(10) | 主键 | |
weizhi | 房屋位置 | varchar(30) | 不为空 | |
mingzi | 房屋名称 | varchar(20) | 不为空 | |
zhonglei | 房屋类型 | varchar(10) | 不为空 | |
mianji | 房屋面积 | varchar(11) | 不为空 | |
zhuangxiu | 装修状况 | varchar(4) | 不为空 | |
sheshi | 屋内设施 | varchar(20) | 不为空 | |
yongtu | 房屋用途 | varchar(4) | 不为空 | |
jiage | 房屋价格 | varchar(11) | 不为空 | |
zhuangtai | 房屋状态 | varchar(4) | 不为空 | |
beizhu | 备注信息 | varchar(40) | 不为空 |
表3-2用户信息表(userinf)
列名 | 含义 | 数据类型 | 约束 |
sfzid | 身份证号 | varchar(18) | 主键 |
username | 姓名 | varchar(10) | 不为空 |
xingbie | 性别 | varchar(2) | 不为空 |
dianhua | 电话 | varchar(14) | 不为空 |
表3-3房屋租赁表(roomrent)
列名 | 含义 | 数据类型 | 约束 |
roomnum | 房屋编号 | varchar(10) | 主键 |
sfznum | 身份证号 | varchar(18) | 主键 |
starttime | 开始租住时间 | varchar(12) | 不为空 |
monthnum | 租住月份数 | varchar(4) | 不为空 |
monthlyrent | 月租金 | varchar(20) | 不为空 |
表3-4水电费表(billsinf)
列名 | 含义 | 数据类型 | 约束 |
danhao | 受理单号 | varchar(15) | 主键 |
roomnum | 房屋编号 | varchar(10) | 不为空 |
predianbiao | 上次电表数 | varchar(15) | 不为空 |
dianbiao | 本次电表数 | varchar(15) | 不为空 |
preshuibiao | 上次水表数 | varchar(15) | 不为空 |
shuibiao | 本次水表数 | varchar(15) | 不为空 |
jine | 金额 | varchar(20) | 不为空 |
4.数据库的物理设计与实施
4.1创建数据库
用Navicat创建room数据库,操作界面如图4-1所示。
图4-1
创建外码的界面如图4-2所示。
图4-2
4.2建立和管理基本表
4.2.1建立基本表
创建房屋租赁系统基本表,具体如下:
(1)房屋信息表(roominf),代码如下。
CREATE TABLE IF NOT EXISTS `roominf` (
`num` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`weizhi` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
`mingzi` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`zhonglei` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`mianji` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`zhuangxiu` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`sheshi` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`yongtu` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`jiage` varchar(11) COLLATE utf8_unicode_ci NOT NULL,
`zhuangtai` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`beizhu` varchar(40) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
创建房屋信息表的操作结果如图4-3所示。
图4-3房屋信息表(roominf)
(2)用户信息表(userinf)
CREATE TABLE IF NOT EXISTS `userinf` (
`sfzid` varchar(18) COLLATE utf8_unicode_ci NOT NULL,
`username` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`xingbie` varchar(2) COLLATE utf8_unicode_ci NOT NULL,
`dianhua` varchar(14) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`sfzid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
创建用户信息表的操作结果如图4-4所示。
图4-4用户信息表(userinf)
(3)房屋租赁表(roomrent)
CREATE TABLE IF NOT EXISTS `roomrent` (
`roomnum` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`sfznum` varchar(18) COLLATE utf8_unicode_ci NOT NULL,
`starttime` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
`monthnum` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`monthlyrent` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`roomnum`,`sfznum`),
KEY `userinfyueshu` (`sfznum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
创建房屋租赁表的操作结果如图4-5所示。
图4-5 房屋租赁表(roomrent)
(4)水电费表(billsinf)
CREATE TABLE IF NOT EXISTS `billsinf` (
`danhao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`roomnum` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
`predianbiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`dianbiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`preshuibiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`shuibiao` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`jine` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`danhao`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
创建水电费表的操作结果如图4-6所示。
图4-6水电费表(billsinf)
(5)修改roomren表的约束关系,代码如下。
ALTER TABLE `roomrent`
ADD CONSTRAINT `roominfyueshu` FOREIGN KEY (`roomnum`) REFERENCES `roominf` (`num`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `userinfyueshu` FOREIGN KEY (`sfznum`) REFERENCES `userinf` (`sfzid`) ON DELETE CASCADE ON UPDATE CASCADE;
创建约束关系的操作结果如图4-7所示。
图4-7约束关系
建立的基本表如图4-8所示。
图4-8基本表的创建
4.2.2管理基本表
随着应用环境和应用需求的改变,有时候需要修改已经建立好的基本表的模式结构。SQL语言采用ALTER TABLE语句修改基本表结构,利用DROP字句删除基本表。ALTER TABLE语句可以修改基本表的名字、加新列或者增加新的完整性约束条件、修改原有列的定义,包括修改列名和数据类型,DROP字句用于删除指定的完整性约束条件。
- 修改表billsinf为shuidaifei后在修改回原名字代码如下,实现结果如图4-9所示。
alter table billsinf change shuidianfei;
select *
from shuidianfei;
alter table shuidianfei rename billsinf;
图4-9基本表名的修改
- 把表billsinf中的列名jine改为费用,数据类型改为varchar(12),代码如下,实现结果如图4-10所示。
alter table billsinf change jine feiyong varchar(12);
select *
from billsinf;
图4-10表billsinf中列的修改
4.3建立和管理视图
4.3.1建立视图
- 创建一个查询租用房间客户个人信息的视图,如图4-11所示。
语句为:
create view v1
as
select sfzid,username,xingbie,dianhua
from roomrent,userinf
where roomrent.sfznum=userinf.sfzid;
图4-11租用房间客户个人信息的视图
- 创建一个查询房间信息的视图,如图4-12所示。
语句如下:
create view v2
As
select num,weizhi,zhonglei,mianji,zhuangxiu,sheshi,yongtu,jiage,zhuangtai
from roominf;
图4-12查询房间信息的视图
- 创建一个查询客户租用时间的视图,如图4-13所示。
语句如下:
create view v3
As
select roomnum,sfznum,starttime,monthnum,monthlyrent
from roomrent;
图4-13查询客户租用时间的视图
4.3.2管理视图
查看已经创建好的视图。
- 查看视图v1如图4-14所示。
图4-14视图查询v1
- 查看视图v2如图4-15所示。
图4-15视图查询v2
- 查看视图v3如图4-16所示。
图4-16视图查询v3
5访问数据库
5.1数据查询
用命令列界面查询以下叙述的内容:
- 查询现有的未出租房屋的编号,代码如下,结果如图5-1所示。
图5-1查询现有的未出租房屋的编号
- 查询各个房间的价格代码如下,结果如图 5-2所示
图5-2查询各个房间的价格
- 查询101房间的水电费代码如下,结果如图 5-3所示
图5-3查询101房间的水电费
- 查询201房间的使用信息代码如下,结果如图5-4所示
图5-4查询201房间客人的信息
- 查询201房间客人的身份信息代码如下,结果如图5-5所示
图5-5查询201房间客人的身份信息
5.2数据更新
- 在基本表中加入一个用户信息,姓名为王五,身份证号为202105050446,性别男,电话33333333。
SQL语句为:
insert into userinf values('202105050446','王五','男','33333333'),插入完成截图如图5-6所示。
图5-6基本表的插入
- 在基本表中删除用户王五个人信息。
SQL语句为:
delete from userinf where sfzid='202105050446';
删除完成结果如图5-7所示。
图5-7基本表的删除
- 在基本表中把101房间的出租信息修改为已出租。
SQL语句为:
update roominf set zhuangtai='已出租' where num='101';
修改完成结果如图5-8所示。
6.数据库维护
6.1备份数据库
备份数据库如图6-1,图6-2所示。
图6-1命令符界面
图6-2数据库的备份
6.2创建触发器
在MySQL中,创建触发器语法如下:
CREATE TRIGGER trigger_name
trigger_time trigger_event ON tbl_name
FOR EACH ROW trigger_stmt
其中:trigger_name:标识触发器名称,用户自行指定;trigger_time:标识触发时机,取值为 BEFORE 或 AFTER;trigger_event:标识触发事件,取为 INSERT、UPDATE 或 DELETE;tbl_name:标识建立触发器的表名,即在哪张表上建立触发器;trigger_stmt:触发器程序体,可以是一句SQL语句,或用 BEGIN 和 END 包含的多条语句。
触发器如图6-3,图6-4所示:
图6-3触发器的创建
图6-4触发器的查看
总结与心得
在进行数据库课程设计时,我选择了设计一个房屋租赁系统。在完成这个项目的过程中,我收获了很多。
首先,我学会了如何进行数据库设计。在设计之前,我需要对系统进行需求分析,确定需要存储哪些数据,并设计数据表的结构和关系。这个过程需要考虑到系统的可扩展性和数据的完整性。通过实践,我更深刻地理解了数据库设计的重要性以及合理的设计对系统性能和数据安全的影响。在实现数据库设计时,我学会了使用MySQL这个关系型数据库管理系统。我掌握了SQL语言的基本语法和使用,学会了创建数据表,插入数据,更新数据和查询数据等操作。通过实际操作,我更加了解SQL语言的灵活性和强大性。
其次,在学习数据库和数据表创建和修改时,了解到表是建立关系数据库的基本结构,用来存储数据具有已定义的属性,在表的操作过程中,有查看表信息、查看表属性、修改表中的数据、删除表中的数据及修改表和删除表的操作。从课程中让我更明白一些知识,表是数据最重要的一个数据对象,表的创建好坏直接关系到数数据库的成败,表的内容是越具体越好,但是也不能太繁琐,以后在实际应用中多使用表,对表的规划和理解就会越深刻。我们上机的另一个内容是数据库的约束、视图、查询。从中我们了解到查询语句的基本结构,和简单select语句的使用,多表连接查询。而在视图的操作中,也了解到了视图是常见的数据库对象,是提供查看和存取数据的另一种途径,对查询执行的大部分操作,使用视图一样可以完成。使用视图不仅可以简化数据操作,还可以提高数据库的安全性,不仅可以检索数据,也可以通过视图向基表中添加、修改和删除数据。
最后在本次数据库课程设计遇到了很多在书本中和课堂上没有机会遇到的问题,在课堂上只能学习到数据库中有一些最为基本的知识,但在课程设计中这些基本知识只是一个基础。在数据库课程设计中遇到了诸多苦难和千奇百怪的错误,一度灰心过。但当改正错误时,不由兴起一股成就感,这些改正后的错误一直激励我坚持到最后,从这次的课程设计中我巩固了以前所学,这次课程设计对我来说是使我受益匪浅!我认为对于一个完整的项目,好的设计和高效的程序实现是至关重要的。同时,我也认识到,要成为一名优秀的数据库工程师,需要不断地学习和实践,掌握更多的技能和知识。
更多推荐
所有评论(0)