forked from wjy/house
84 lines
2.8 KiB
Python
84 lines
2.8 KiB
Python
from house.house_operation import read_houses, write_houses
|
||
from house.house_operation import read_stack, write_stack
|
||
# V3.0 导入地址与邻接矩阵操作
|
||
from house.address_operation import parse_address, save_address_info, get_address_info
|
||
from house.address_operation import add_community, set_distance, get_adj_matrix
|
||
from datetime import datetime
|
||
|
||
|
||
# V1.0 + V2.0 原有代码完全保留(此处省略重复代码,直接使用V2.0内容)
|
||
def get_next_house_id():
|
||
houses = read_houses()
|
||
if not houses:
|
||
return 1
|
||
max_id = max(house["id"] for house in houses)
|
||
return max_id + 1
|
||
|
||
|
||
def add_house(address, price, area, house_type):
|
||
if not address or not house_type:
|
||
print("错误:地址和户型不能为空!")
|
||
return False
|
||
if not isinstance(price, (int, float)) or price <= 0:
|
||
print("错误:租金必须是正数!")
|
||
return False
|
||
if not isinstance(area, (int, float)) or area <= 0:
|
||
print("错误:面积必须是正数!")
|
||
return False
|
||
|
||
new_house = {
|
||
"id": get_next_house_id(),
|
||
"address": address,
|
||
"price": price,
|
||
"area": area,
|
||
"house_type": house_type
|
||
}
|
||
houses = read_houses()
|
||
houses.append(new_house)
|
||
write_houses(houses)
|
||
|
||
# V3.0 新增:地址解析并保存
|
||
addr_info = parse_address(address)
|
||
save_address_info(new_house["id"], addr_info)
|
||
# V3.0 新增:自动添加小区到邻接矩阵
|
||
add_community(addr_info["community"])
|
||
|
||
print(f"房源新增成功!房源ID:{new_house['id']}")
|
||
return True
|
||
|
||
|
||
# 原有 delete_house / update_house / query_house 完全不变
|
||
# 原有栈操作 push_operation_stack / push_browse_stack 等完全不变
|
||
|
||
# ==================== V3.0 新增:地址串模糊查询 ====================
|
||
def query_by_area(keyword):
|
||
"""
|
||
串模糊查询:按区域关键词搜索房源
|
||
时间复杂度:O(n*L)
|
||
"""
|
||
houses = read_houses()
|
||
result = []
|
||
for house in houses:
|
||
addr_info = get_address_info(house["id"])
|
||
full_addr = f"{addr_info['province']}{addr_info['city']}{addr_info['district']}{addr_info['community']}"
|
||
if keyword in full_addr:
|
||
result.append(house)
|
||
return result
|
||
|
||
|
||
# ==================== V3.0 新增:邻接矩阵管理 ====================
|
||
def add_community_distance(community1, community2, distance):
|
||
"""添加小区距离(供后续路径规划使用)"""
|
||
return set_distance(community1, community2, distance)
|
||
|
||
|
||
def show_adj_matrix():
|
||
"""打印邻接矩阵(数组展示)"""
|
||
data = get_adj_matrix()
|
||
communities = data["communities"]
|
||
matrix = data["adj_matrix"]
|
||
print("\n===== 小区邻接矩阵 =====")
|
||
print("节点列表:", communities)
|
||
print("邻接矩阵(9999=不可达):")
|
||
for row in matrix:
|
||
print(row) |