《基于Oracle数据库的房屋租赁管理系统》课程设计
需求分析
-
本⽂设计的《基于Oracle数据库的房屋租赁管理系统》为了提高房屋租赁管理的效率和准确性,开发一个基于 Oracle 数据库的房屋租赁管理系统具有重要的现实意义。
-
⼀个常⻅的房屋租赁管理系统可以包含如下⼏个功能模块:
- 房屋信息模块:此模块的功能是管理房屋的基本信息,包括房屋id,房主id,房屋标题,城市,具体地址,价格(按月),户型,大小,状态(1已出租,0未出租),以通过此模块进⾏房屋信息的添加,修改或删除。
- 房主信息模块:此模块的功能是管理房主的基本信息,包括房主id,姓名,房主手机号,以通过此模块进⾏房主信息的添加,修改或删除。
- 租客信息模块:此模块的功能是管理租客的基本信息,包括租客id,姓名,租客手机号,以通过此模块进⾏租客信息的添加,修改或删除。
- 房屋销售信息模块:此模块的功能是管理销售的基本信息,包括房屋销售信息id,房屋id,租客id,开始时间,结束时间,以通过此模块进⾏租客信息的添加,修改或删除。
概念结构设计
- 根据系统需求分析,我们预计将使⽤到4个实体。
- 房屋信息是一个实体,包括属性房屋id,房主id,房屋标题,城市,具体地址,价格(按月),户型,大小,状态(1已出租,0未出租)。
- 房主信息是一个实体,包括属性房主id,姓名,房主手机号。
- 租客信息是一个实体,包括属性租客id,姓名,房主手机号。
- 房屋销售信息是一个实体,包括属性房屋销售信息id,房屋id,租客id,开始时间,结束时间。
物理结构设计
- 根据系统的逻辑结构设计最终设计4个数据表如下:
| 表名 | 列名 | 数据类型 | 说明 | | -------- | ----- | ----------- | :----------- | | tb_owner | id | number | 房主id,主键 | | | name | varchar(12) | 房主姓名 | | | phone | varchar(12) | 房主手机号 |
| 表名 | 列名 | 数据类型 | 说明 | | -------- | ----- | ----------- | :----------- | | tb_buyer | id | number | 租客id,主键 | | | name | varchar(12) | 租客姓名 | | | phone | varchar(12) | 租客手机号 |
| 表名 | 列名 | 数据类型 | 说明 | | -------- | ---------- | ----------- | :--------------------- | | tb_house | id | number | 房屋id,主键 | | | owner_id | number | 房主id,外键 | | | title | varchar(32) | 房屋标题 | | | city | varchar(12) | 城市 | | | address | varchar(24) | 具体地址 | | | price | float | 价格(按月) | | | unit_type | varchar(12) | 户型 | | | house_size | float | 大小 | | | state | varchar(1) | 状态(1已出租,0未出租) |
| 表名 | 列名 | 数据类型 | 说明 | | ------- | ---------- | -------- | :------------------- | | tb_rent | id | number | 房屋销售信息id,主键 | | | house_id | number | 房屋id,外键 | | | buyer_id | number | 租客id,外键 | | | start_time | date | 开始租的时间 | | | end_time | date | 结束租的时间 | | | price | float | 总价格 |
在oracle中创建表
- 表的创建
create table tb_owner(
id number not null primary key,
name varchar(12) not null,
phone varchar(12) not null
);
create table tb_buyer(
id number not null primary key,
name varchar(12) not null,
phone varchar(12) not null
);
create table tb_house(
id number not null primary key,
owner_id number not null,
title varchar(32) not null,
city varchar(12) not null,
address varchar(24) not null,
price float not null,
unit_type varchar(12) not null,
house_size float not null,
state varchar(1) not null
);
create table tb_rent(
id number not null primary key,
house_id number not null,
buyer_id number not null,
start_time date not null,
end_time date not null
);
- 表的关联
alter table tb_house add constraint fk_house_owner foreign key (owner_id) references tb_owner(id);
alter table tb_rent add constraint fk_rent_house foreign key (house_id) references tb_house(id);
alter table tb_rent add constraint fk_rent_buyer foreign key (buyer_id) references tb_buyer(id);
表数据插入
- 往tb_owner插入数据
insert into tb_owner values(1, 'xingtianran', '13511111111');
insert into tb_owner values(2, 'yuqingyuan', '13522222222');
insert into tb_owner values(3, 'xihaotian', '13533333333');
- 往tb_buyer插入数据
insert into tb_buyer values(1, 'zhangsan', '19811111111');
insert into tb_buyer values(2, 'lisi', '19822222222');
insert into tb_buyer values(3, 'wangwu', '19833333333');
- 往tb_house插入数据
insert into tb_house values(1, 1, 'Beautiful Manor', 'Beijing', 'Andingmen Nei', 580000, '9B9L', '800', '1');
insert into tb_house values(2, 1, 'Nine Dragon Mansion', 'Beijing', 'Shideng Hutong', 480000, '9B3L', '950', '1');
insert into tb_house values(3, 2, 'Hengda Community', 'Shanghai', 'Wharf Xi Yuan', 250000, '3B2L', '173', '1');
insert into tb_house values(4, 2, 'General Garden', 'Shanghai', 'Zendai Kuanyu', 100000, '2B2L', '110', '1');
insert into tb_house values(5, 3, 'Overseas Chinese Town', 'Shenzhen', 'Yidexuan Apartment', 290000, '5B2L', '280', '1');
insert into tb_house values(6, 3, 'courtyard house', 'Shenzhen', 'Fragrant Hill Villa', 270000, '7B2L', '385', '1');
查询示例
-
单表查询
- 查询所有的房屋信息:
select * from tb_house;
-
条件查询
- 查询在北京的房屋信息:
select * from tb_house where city = 'Beijing';
-
多表查询
- 查询在上海的房屋信息和房主的手机号码
select h.id, h.owner_id, h.title, h.city, h.address, h.price, h.unit_type, h.house_size, h.state, o.phone from tb_house h, tb_owner o where h.city = 'Shanghai' and h.owner_id = o.id;
存储过程
- 存储过程:get_all_house_prices
- 该存储过程接受一个房主id参数,可以计算房主名下的房产总价格,并输出这个总价格。
create or replace procedure get_all_house_prices(o_id in number, total_prices out float)
as
begin
select sum(price) into total_prices from tb_house where owner_id = o_id;
dbms_output.put_line(total_prices);
end get_all_house_prices;
- 存储过程:get_owner_phone
- 该存储过程接受一个房间id参数,可以得出房间的房主电话号码,并输出这个电话号码。
create or replace procedure get_owner_phone(h_id in number, o_phone out varchar2)
as
begin
select o.phone into o_phone from tb_house h, tb_owner o where h.id = h_id and h.owner_id = o.id;
dbms_output.put_line(o_phone);
end get_owner_phone;
触发器
- 触发器:update_house_state
- 该触发器的作用是在往tb_rent,房屋租售信息表中插入信息的时候,会更新tb_house表的房屋的状态信息state。
create or replace trigger update_house_state
after insert on tb_rent
for each row
begin
update tb_house set state = '0' where id = :new.house_id;
end;
- 插⼊⼀条⼊场记录可以看到触发器应⽤结果。
insert into tb_rent values(1, 1, 1, SYSTIMESTAMP, TO_DATE('2024-9-18','YYYY-MM-DD'));
⽤户和权限
- 在本数据库设计中我们创建一个⽤户并赋予他们全部权限。
create user u1 identified BY 123456;
- 给u1授予数据库所有权限:
grant connect, resource, dba, select any table, insert any table, update any table, delete any table to u1;
总结
- 完成情况和不⾜之处
- 明确了系统开发的目的,即提高房屋租赁管理的效率和准确性,具有清晰的目标导向。
- 较为全面地列出了系统的主要功能模块,包括房屋信息模块、房主信息模块、租客信息模块和房屋销售信息模块,涵盖了房屋租赁管理的核心要素。
- 对每个模块的基本功能和管理的信息内容进行了较为详细的描述,例如房屋信息中的各种属性、房主和租客信息的关键要素等。
- 缺乏对各模块功能的详细流程描述,例如房屋信息的添加、修改和删除具体的操作流程和规则未明确。
- ⼼得体会
- 确系统的目标和意义是至关重要的。了解到开发这个系统是为了提高房屋租赁管理的效率和准确性,让我在后续的分析中有了清晰的方向,能够始终围绕这一核心目标来思考和规划各个功能模块。
- 在梳理功能模块的过程中,我体会到了全面性和细节性的重要性。要尽可能涵盖房屋租赁业务的各个方面,从房屋、房主、租客到房屋销售信息等,并且对每个模块管理的具体信息进行详细定义。然而,这也让我意识到目前的需求分析还存在一些不足。
- 建议
- 提供更多实际的案例分析,让学生能够将理论知识应用到具体的情境中,加深对需求分析的理解。
- 安排小组项目,让学生通过团队合作完成一个完整的需求分析任务,培养团队协作和沟通能力。
- 采用多样化的教学方法,如角色扮演、小组讨论、案例竞赛等,激发学生的学习兴趣和主动性。
- 利用多媒体资源,如视频、动画等,更生动形象地展示需求分析的概念和过程。