python项目实战(二手房屋出租系统)

文章目录

  • 1.系统概述
  • 2.技术栈
  • 3.系统功能
  • 4.核心代码分析
  • 5. 代码实现
  • 6.实现细节
  • 6.未来改进方向

在当今数字化时代,自动化和数字化管理工具对于提高效率至关重要。在这篇博客中,我们将一起探索如何使用Python编程语言来创建一个简单的二手房屋出租管理系统。这个系统将帮助房产所有者、中介和客户高效地管理房屋信息。

1.系统概述

我们的系统旨在提供一个用户友好的界面,使用户能够执行基本的房屋管理任务,如注册、登录、添加房屋信息、删除房屋信息以及查看所有可用房屋。

2.技术栈

  • Python:作为一种高级编程语言,Python以其简洁性和易读性而闻名,非常适合快速开发。
  • 控制台界面:为了保持简单,我们使用Python的标准输入输出来创建控制台界面。

3.系统功能

  1. 用户注册与登录:用户可以根据自己的角色(房主、中介或客户)注册和登录系统。
  2. 房屋信息管理
    • 房主可以添加和删除房屋信息。
    • 中介可以联系房主和客户。
    • 客户可以查看房屋信息并预约看房。
  3. 房屋信息展示:系统允许所有用户查看所有可用房屋的详细信息。

4.核心代码分析

以下是系统的核心组件和它们的基本实现:

  • House 类:用于创建房屋对象,包含地址、房间数、卫生间数、价格和所有者用户名等属性。
  • menu 函数:显示系统菜单,允许用户选择不同的操作。
  • sign_in 和 enroll 函数:分别处理用户的登录和注册。
  • add_house 和 delete_house 函数:允许房主添加和删除房屋信息。
  • owner_menuagent_menu 和 customer_menu 函数:为不同角色提供特定的菜单选项。

5. 代码实现

# 二手房屋出租管理系统  
  
# 用户数据库模拟  
users = {  
    "owner": {},  
    "agent": {},  
    "customer": {}  
}  
  
# 房屋信息数据库模拟  
houses = []  
  
class House:  
    def __init__(self, address, rooms, bathrooms, price, owner_username):  
        self.address = address  
        self.rooms = rooms  
        self.bathrooms = bathrooms  
        self.price = price  
        self.owner_username = owner_username  # 存储房主的用户名  
  
    def display_details(self):  
        print(f"地址: {self.address}")  
        print(f"房间数: {self.rooms}")  
        print(f"卫生间数: {self.bathrooms}")  
        print(f"价格: {self.price}")  
        print(f"所有者: {self.owner_username}")  
        print("-------------------------------")  
  
def menu():  
    print('-----------------------------------')  
    print('|      欢迎来到二手房屋出租管理系统     |')  
    print('|                                 |')  
    print('|             1.登录               |')  
    print('|             2.注册               |')  
    print('|             3.退出               |')  
    print('|                                 |')  
    print('-----------------------------------')  
  
def sign_in():  
    print('-----------------------------------')  
    print('|          请选择要登录的对象         |')  
    print('|                                 |')  
    print('|             1.房主               |')  
    print('|             2.中介               |')  
    print('|             3.客户               |')  
    print('-----------------------------------')  
    role_option = int(input("请选择角色:"))  
    username = input("请输入用户名:")  
    password = input("请输入密码:")  
  
    if role_option == 1:  
        if username in users["owner"] and users["owner"][username] == password:  
            print(f"欢迎回来,房主 {username}!")  
            owner_menu(username)  
        else:  
            print("登录失败,用户名或密码错误。")  
  
    elif role_option == 2:  
        if username in users["agent"] and users["agent"][username] == password:  
            print(f"欢迎回来,中介 {username}!")  
            agent_menu(username)  
        else:  
            print("登录失败,用户名或密码错误。")  
  
    elif role_option == 3:  
        if username in users["customer"] and users["customer"][username] == password:  
            print(f"欢迎回来,客户 {username}!")  
            customer_menu(username)  
        else:  
            print("登录失败,用户名或密码错误。")  
  
def enroll():  
    print('-----------------------------------')  
    print('|          请选择要注册的对象         |')  
    print('|                                 |')  
    print('|             1.房主               |')  
    print('|             2.中介               |')  
    print('|             3.客户               |')  
    print('-----------------------------------')  
    role_option = int(input("请选择角色:"))  
    username = input("请输入用户名:")  
    password = input("请输入密码:")  
  
    global users  # 声明使用全局变量users  
  
    if role_option == 1:  
        if username in users["owner"]:  
            print("注册失败,房主用户名已存在。")  
        else:  
            users["owner"][username] = password  
            print("房主注册成功!")  
  
    elif role_option == 2:  
        if username in users["agent"]:  
            print("注册失败,中介用户名已存在。")  
        else:  
            users["agent"][username] = password  
            print("中介注册成功!")  
  
    elif role_option == 3:  
        if username in users["customer"]:  
            print("注册失败,客户用户名已存在。")  
        else:  
            users["customer"][username] = password  
            print("客户注册成功!").  
  
def add_house(owner_username):  
    if owner_username not in users["owner"]:  
        print("错误:房主用户不存在,请先注册。")  
        return  
  
    address = input("请输入房屋地址:")  
    rooms = int(input("请输入房间数:"))  
    bathrooms = int(input("请输入卫生间数:"))  
    price = float(input("请输入价格:"))  
  
    house = House(address, rooms, bathrooms, price, owner_username)  
    houses.append(house)  
    print("房屋信息添加成功!")  
  
def delete_house(owner_username):  
    address = input("请输入要删除的房屋地址:")  
    house_to_delete = None  
  
    for house in houses:  
        if house.address == address and house.owner_username == owner_username:  
            house_to_delete = house  
            break  
  
    if house_to_delete:  
        houses.remove(house_to_delete)  
        print("房屋信息删除成功!")  
    else:  
        print("未找到该房屋信息或权限不足。")  
  
def owner_menu(username):  
    while True:  
        print('-----------------------------------')  
        print(f'|         欢迎回来,房主 {username}!         |')  
        print('|                                 |')  
        print('|         1.添加房屋信息           |')  
        print('|         2.删除房屋信息           |')  
        print('|         3.退出登录               |')  
        print('|                                 |')  
        print('-----------------------------------')  
        option = int(input("请选择操作:"))  
  
        if option == 1:  
            add_house(username)  
        elif option == 2:  
            delete_house(username)  
        elif option == 3:  
            break  
        else:  
            print("无效选项,请重新选择。")  
  
def contact_owner(agent):  
    print('-----------------------------------')  
    print('|         联系房主                 |')  
    print('-----------------------------------')  
    # 实现联系房主的逻辑  
  
def contact_customer(agent):  
    print('-----------------------------------')  
    print('|         联系客户                 |')  
    print('-----------------------------------')  
    # 实现联系客户的逻辑  
  
def agent_menu(username):  
    while True:  
        print('-----------------------------------')  
        print(f'|         欢迎回来,中介 {username}!         |')  
        print('|                                 |')  
        print('|         1.联系房主               |')  
        print('|         2.联系客户               |')  
        print('|         3.退出登录               |')  
        print('|                                 |')  
        print('-----------------------------------')  
        option = int(input("请选择操作:"))  
  
        if option == 1:  
            contact_owner(username)  
        elif option == 2:  
            contact_customer(username)  
        elif option == 3:  
            break  
        else:  
            print("无效选项,请重新选择。")  
  
def book_house(customer):  
    print('-----------------------------------')  
    print('|         预约看房                 |')  
    print('-----------------------------------')  
    # 实现预约看房的逻辑  
  
def customer_menu(username):  
    while True:  
        print('-----------------------------------')  
        print(f'|         欢迎回来,客户 {username}!|')  
        print('|                                 |')  
        print('|         1.预约看房                |')  
        print('|         2.查看房屋信息             |')  
        print('|         3.退出登录                |')  
        print('|                                 |')  
        print('-----------------------------------')  
        option = int(input("请选择操作:"))  
  
        if option == 1:  
            book_house(username)  
        elif option == 2:  
            display_houses()  
        elif option == 3:  
            break  
        else:  
            print("无效选项,请重新选择。")  
  
def display_houses():  
    print('-----------------------------------')  
    print('|         所有房屋信息            |')  
    print('-----------------------------------')  
    for house in houses:  
        house.display_details()  
  
def main():  
    while True:  
        menu()  
        try:  
            option = int(input('请选择:'))  
        except ValueError:  
            print("请输入一个整数。")  
            continue  
  
        if option == 1:  
            sign_in()  
        elif option == 2:  
            enroll()  
        elif option == 3:  
            print("谢谢使用,再见!")  
            break  
        else:  
            print("无效选项,请重新选择。")  
  
        continue_choice = input("是否继续?(y/n): ")  
        if continue_choice.lower() != 'y':  
            break  
  
# 确保程序的入口  
if __name__ == "__main__":  
    main()

6.实现细节

在实现过程中,我们特别注意了代码的可读性和异常处理。所有的用户输入都进行了验证,以确保它们是有效的整数。此外,我们还使用了异常处理来捕获和处理无效输入。

6.未来改进方向

尽管当前的系统已经能够满足基本需求,但还有许多潜在的改进方向,包括:

  • 实现图形用户界面(GUI)以提升用户体验。
  • 添加数据库支持以实现数据持久化。
  • 增强安全性,例如使用密码散列。
  • 实现更复杂的房屋搜索和过滤功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32 Cannot access memory

问题描述 最近自己做了一块STM32F103ZET6的板子,在焊接完成后可以在下载器界面看到idcode,但烧录时报错 Cannot access memory 。 解决办法 测量STM32各个供电项,发现时33脚处VDDA电压只有1.8V,是因为R3电阻过大,…

成都欣丰洪泰文化传媒有限公司开网店可靠吗?

在数字化浪潮席卷全球的今天,电商行业无疑是这场浪潮中的佼佼者。而在这波汹涌的电商大潮中,成都欣丰洪泰文化传媒有限公司凭借其专业的电商服务能力和前瞻的市场洞察力,成为了业界的一匹黑马。今天,就让我们一起揭开这家专注于电…

CANoe的capl调用Qt制作的dll

闲谈 因为Qt封装了很多个人感觉很好用的库,所以一直想通过CAPL去调用Qt实现一些功能,但是一直没机会(网络上也没看到这方面的教程),这次自己用了两天,踩了很多坑,终于是做成了一个初步的调用方…

Chirp信号生成(FPGA、基于cordic IP核)

一、Chirp生成模块介绍 采用Verilog 生成Chirp,实现输入使能电平,模块输出Chirp信号,Chirp信号频率范围,时间宽度,连续Chirp信号数量可配置。 二、模块例化方法示例 parameter FL d20_000 ; parameter FH…

linux centos tomcat 不安全的HTTP请求方法

1、页面查看 2、在linux主机可使用此命令查看 curl -v -X OPTIONS http://实际地址 3、进入tomcat conf目录vim web.xml&#xff0c;增加以下内容 <!-- close insecure http methods --> <security-constraint><web-resource-collection><web-resource…

springboot项目接入prometheus并展示到grafana

背景 随着业务发展&#xff0c;服务的健康指标变得越来越重要&#xff0c;监控服务的健康指标成为很多公司必要需求。 Prometheus 介绍 Prometheus是一个开源的监控和警报工具集&#xff0c;最初由SoundCloud构建。它自2012年以来已成为许多公司和组织监控其IT基础设施的首选解…

深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis

文章目录 Redis 五种类型命令在 Java 中操作 Redis使用 Spring Data Redis 简化操作 总结 &#x1f389;欢迎来到SpringBoot框架学习专栏~ ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&#xff1a;SpringBoot…

【嵌入式CLion】进阶调试——WSL下的Linux体验

说明&#xff1a; 1&#xff0c;这里所指的嵌入式其实是指嵌入式微控制器MCU&#xff0c;即单片机 2&#xff0c;万事开头难&#xff0c;本文目前提供了WSL工具链的搭建&#xff0c;后面会持续更新 一、启用RTOS集成 在搭建WSL工具链之前&#xff0c;先讲一下集成的RTOS功能&a…

汇凯金业:数字货币对经济的影响有哪些

随着信息技术的飞速发展&#xff0c;数字货币作为一种新兴的货币形态&#xff0c;正逐步走进人们的视野&#xff0c;并对传统经济体系产生着深远影响。它不仅革新了交易方式&#xff0c;更在重塑金融格局、赋能经济发展等方面展现出巨大潜力。 一、交易效率的“加速器” 数字…

亚马逊跟卖选品erp采集,跟卖卖家的选品利器,提升选品效率!

今天给亚马逊跟卖卖家&#xff0c;分享我现在在用的两种选品方式&#xff0c;做个铺货或者是跟卖都可以&#xff0c;是不是很多卖家选品现在都是亚马逊前端页面或是新品榜单选择产品跟卖&#xff0c;这样找品这就相当于大海捞针&#xff0c;而且新品榜单的产品你能看到那其他卖…

RS232、RS485与RS422初步学习

目录 电平 传输方式 共模和差模干扰 ps&#xff1a;双绞线 485总线结构 ps&#xff1a;终端电阻 RS232接口&#xff08;DB9&#xff09; 优缺点 RS232优缺点 RS485较RS232的优点 为什么RS232还在使用&#xff1f; 电平 RS232、RS485与RS422的电平 区间逻辑备注RS232…

【技巧】ArcgisPro 字段计算器内置函数方法的调用

在arcgisPro中&#xff0c;内置了常用的几种函数方法&#xff0c;如顺序编号&#xff0c;重分类等&#xff1b;调用方法如下&#xff1a;

python-计算矩阵边缘元素之和(赛氪OJ)

[题目描述] 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。 所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。输入&#xff1a; 输入共 m 1 行。 第一行包含两个整数 m, n (1 < m,n < 100) &#xff0c;分别为矩阵的…

如何学习大型语言模型中的量化

前言 图片来自作者&#xff1a;Flow 展示了量化的必要性。&#xff08;笑脸和生气脸图片来自Yan Krukau) 在我解释上面的图表之前&#xff0c;让我先介绍一下您将在本文中学习的重点内容。 首先&#xff0c;您将了解量化是什么以及为什么量化。接下来&#xff0c;您将深入了解…

万亿赛道上的新星:向量数据库如何成为AI大模型的超级引擎

万亿赛道上的新星:向量数据库如何成为AI大模型的超级引擎? 在这个人工智能飞速发展的时代,向量数据库正以其独特的能力,成为AI大模型技术底座的超级引擎。从开源社区的繁荣到云计算的广泛应用,向量数据库的每一步发展都显得尤为重要。 一、初创引领,巨头跟进:向量数…

VBA 操作注册表

1. SaveSetting 1-1. 语法 SaveSetting(AppName As String, Section As String, Key As String, Setting As String) 1-2. 函数说明 在Windows注册表中创建或保存一个应用程序项。将值写入注册表中的HKEY_CURRENT_USER\Software\VBand VBA Program Settings键的子键 1-3. 参…

无人机云台类型及作用

无人机云台主要分为三种类型&#xff1a; 单轴云台&#xff1a;仅支持单向旋转&#xff0c;适合拍摄平滑的延时摄影和全景照片。 双轴云台&#xff1a;支持水平和垂直旋转&#xff0c;可用于拍摄流畅的视频和运动物体。 三轴云台&#xff1a;全面支持所有旋转轴&#xff0c;…

Centos系统迁移

目前&#xff0c;CentOS 全系列版本已经于l六月底正式停止维护&#xff0c;这意味着 CentOS 时代彻底终结&#xff0c;也意味着部署在 CentOS 7 上的业务系统将面临前所未有的安全挑战。 本文推荐由红帽衍生出来的且可以做到真正无缝替代的linux版本Open Euler 注&#xff1a…

鸿蒙应用实践:利用扣子API开发起床文案生成器

前言 扣子是一个新一代 AI 应用开发平台&#xff0c;无需编程基础即可快速搭建基于大模型的 Bot&#xff0c;并发布到各个渠道。平台优势包括无限拓展的能力集&#xff08;内置和自定义插件&#xff09;、丰富的数据源&#xff08;支持多种数据格式和上传方式&#xff09;、持…

JAVA小知识31:多线程篇2

一、等待唤醒机制 生产者和消费者&#xff0c;也叫等待唤醒机制。他是一个十分经典的多线程协作的模式。我们来讲一个小故事&#xff1a; 在一个繁忙的工厂里&#xff0c;有一个生产线&#xff0c;我们称之为“共享资源”。这个生产线一次只能生产一个产品&#xff0c;而且需要…