网站建设模板是什么意思怎么建公司网站
P140 出租系统-基于模块开发[1] 2025/3/6
一、项目设计
- 项目设计-程序框架图:
- 在项目开发前,先进行设计,从功能上进行模块/文件划分
- 程序框架图:系统有哪些模块/文件,明确相互间的调用关系
P141 出租系统-基于模块开发[2] 2025/3/6
一、显示主菜单和完成退出软件功能
-
项目功能实现-显示主菜单和完成退出软件功能
- 化繁为简,功能拆分(一个一个功能逐步实现)
- 老师说明:实现功能的三部曲[明确完成功能->思路分析->代码实现]
-
功能说明:用户打开软件,可以看到主菜单,可以退出软件
- 思路分析:
- 在
house_operation.py
中,编写一个函数main_menu
,显示菜单。 - 在
main.py
调用 - 示意图:
- 在
-
文件代码:
main.py
:
# @Author :zjc # @File :main.py # @Time :2025/3/6 16:22"""说明:出租系统的主程序 """# 导入模块house_operation # 1.直接导入此文件中的所有函数 from house_operation import *def main():"""这是主函数,也就是程序的执行入口:return:"""# 调用main_menu函数显示主菜单# 循环显示菜单,如果用户输入6就退出while True:main_menu()key = input("请输入你的选择(1-6):")if key in ["1", "2", "3", "4", "5", "6"]:if key == "1":print("输入了1")elif key == "2":print("输入了2")elif key == "3":print()elif key == "4":print()elif key == "5":print()elif key == "6":break# 测试 if __name__ == "__main__":main()print("你退出了程序,欢迎下次使用!")
house_operation
:
# @Author :zjc # @File :house_operation.py # @Time :2025/3/6 16:23"""说明:提供对房屋的各种操作 """def main_menu():"""显示主菜单,供用户操作和选择:return:"""print()print("房屋出租系统".center(32,"="))print("\t\t\t1 新 增 房 源")print("\t\t\t2 查 找 房 屋")print("\t\t\t3 删 除 房 屋 信 息")print("\t\t\t4 修 改 房 屋 信 息")print("\t\t\t5 房 屋 列 表")print("\t\t\t6 退 出")
P142 出租系统-基于模块开发[3] 2025/3/6
一、完成房屋列表的功能
- 思路分析:
- 在
house_operation.py
中,编写函数list_houses
,显示房屋信息列表 - 在
main.py
调用
- 在
main.py
中修改:
elif key == "5": # 房屋列表list_houses()
house_operation.py
中修改:
"""使用字典来存储房屋信息
"""
# 1.全局变量:houses 存放的所有房屋信息
# 为了测试方便,放了一个测试数据到该列表
houses = [{"id":2,"name":"tim","phone":"113","address":"海淀","rent":800,"status":"已出租"}]def list_houses():"""显示房屋列表:return:"""print("房屋列表".center(60,"="))# 打印表头信息:print("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(已出租\未出租)")# 遍历houses列表# 取出的house就是一个字典对象# 但是真正遍历的是字典中的valuesfor house in houses:# 取出house的value值,并进行遍历显示for value in house.values():print(value,end="\t\t")# 输出一个完整的house信息后,换行print()# 房屋列表结尾信息print("房屋列表显示完毕".center(60,"="))
二、添加房屋信息功能
- 思路分析:
- 在
house_operation.py
中,编写函数add_house
,添加房屋信息在main.py
调用
- 在
main.py
中修改:
if key == "1": # 添加房屋add_house()
house_operation.py
中修改:
# 全局变量id_counter 记录当前房屋的id
id_counter = 1# 2. 添加房屋信息
def add_house():"""完成添加房屋信息:return:"""print("添加房屋".center(32,"="))name = input("姓名:")phone = input("电话:")address = input("地址:")rent = input("租金:")state = input("状态:")# 由系统添加的房屋id# global代表使用全局id_counterglobal id_counterid_counter += 1# 构建房屋信息对应的字典,加入到全局house列表中house = {"id":id_counter,"name":name,"phone":phone,"address":address,"rent":rent,"status":state}# 将信息添加到房屋houses.append(house)# 添加提示信息print("添加房屋成功".center(32,"="))
P143 出租系统-基于模块开发[4] 2025/3/7
一、删除房屋信息功能
- 思路分析:
- 在
house_operation.py
中,编写函数del_house
,删除房屋信息在main.py
调用:
- 在
house_operation
:
from my_tools import *
# 3. 删除房屋信息
def del_house():"""根据id删除房屋信息:return:"""print("删除房屋信息".center(32, "="))del_id = int(input("请输入待删除房屋的编号(-1退出):"))if del_id == -1:print("放弃删除房屋信息".center(32, "="))return# 让用户确认删除,如果输入的不是Y/N,就一直提示输入# while True:# key = input("请输入你的选择(Y/N),请确认选择:")# if key.lower() == "y" or key.lower() == "n":# break# 调用工具函数choice = read_confirm_select()if choice == "y": # 如果真的要删除# 根据del_id 去houses列表查找是否存在该房屋[字典]house = find_by_id(del_id)if house:# 不为空, 执行删除houses.remove(house)print("删除房屋信息成功".center(32,"="))else:print("房屋编号不存在,删除失败...".center(32,"="))else:print("你放弃删除房屋信息".center(32, "="))
my_tools
:
# @Author :zjc
# @File :my_tools.py
# @Time :2025/3/7 22:17"""
这里编写工具函数,供程序员使用
"""def read_confirm_select():"""确认用户输入的是(y/n),不区分大小写如果用户不是输入的y/n就反复输入:return:"""# 让用户确认删除,如果输入的不是Y/N,就一直提示输入while True:key = input("请输入你的选择(Y/N),请确认选择:")if key.lower() == "y" or key.lower() == "n":breakreturn key.lower()
main
:
elif key == "3": # 删除信息del_house()
P144 出租系统-基于模块开发[5] 2025/3/8
一、完善退出确认
- 思路分析:
- 在
house_operation.py
中,编写函数exit_sys
,退出系统 - 在
main.py
调用将确认退出,写成一个函数(写到my_tools.py
),方便使用,提高代码复用性
- 在
main.py
:
elif key == "6": # 退出系统if exit_sys():break
house_operation
:
# 4.完善退出功能
def exit_sys():"""完成退出系统,并确认(Y/N):return: 如果确认退出返回True,否则返回False"""choice = read_confirm_select()if choice == "y":return Trueelse:return False
my_tools
:
def read_confirm_select():"""确认用户输入的是(y/n),不区分大小写如果用户不是输入的y/n就反复输入:return:"""# 让用户确认删除,如果输入的不是Y/N,就一直提示输入print("请输入你的选择(Y/N),请确认选择:", end="")while True:key = input()if key.lower() == "y" or key.lower() == "n":breakelse:print("选择错误,请重新输入:", end="")return key.lower()
二、根据id查找房屋信息
main.py
:
elif key == "2": # 查找房屋信息find_house()
house_operation
:
# 5.根据id查找房屋信息
def find_house():"""查找房屋信息:return:"""print("查找房屋信息".center(32, "="))find_id = int(input("请输入要查找的id:"))# 调用函数返回对应的房屋信息,没有则返回Nonehouse = find_by_id(find_id)if house:# 相当于找到了,显示# 打印表头print("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(已出租\未出租)")for value in house.values():# 取出house的value值,并进行遍历显示print(value, end="\t\t")print()else:print(f"查找的房屋id{find_id}不存在")
P145 出租系统-基于模块开发[6] 2025/3/9
一、修改房屋信息功能
- 思路分析:
- 在
house_operation.py
中,编写函数update
,修改房屋信息在main.py
调用:
- 在
二、代码总结
main.py
;
# @Author :zjc
# @File :main.py
# @Time :2025/3/6 16:22"""说明:出租系统的主程序
"""# 导入模块house_operation
# 1.直接导入此文件中的所有函数
from house_operation import *def main():"""这是主函数,也就是程序的执行入口:return:1"""# 调用main_menu函数显示主菜单# 循环显示菜单,如果用户输入6就退出while True:main_menu()key = input("请输入你的选择(1-6):")if key in ["1", "2", "3", "4", "5", "6"]:if key == "1": # 添加房屋add_house()elif key == "2": # 查找房屋信息find_house()elif key == "3": # 删除信息del_house()elif key == "4": # 修改房屋信息update()elif key == "5": # 房屋列表list_houses()elif key == "6": # 退出系统if exit_sys():break# 测试
if __name__ == "__main__":main()print("你退出了程序,欢迎下次使用!")
my_tools.py
:
# @Author :zjc
# @File :my_tools.py
# @Time :2025/3/7 22:17"""
这里编写工具函数,供程序员使用
"""
def read_str(tip,default_val):"""读取用户输入,如果用户没有输入内容,则返回默认值:param tip: 提示信息:param default_val: 用户指定:return: 返回的就是需要的新数据"""str = input(tip)if len(str) > 0:return strelse:return default_valdef read_confirm_select():"""确认用户输入的是(y/n),不区分大小写如果用户不是输入的y/n就反复输入:return:"""# 让用户确认删除,如果输入的不是Y/N,就一直提示输入print("请输入你的选择(Y/N),请确认选择:", end="")while True:key = input()if key.lower() == "y" or key.lower() == "n":breakelse:print("选择错误,请重新输入:", end="")return key.lower()
house_operation.py
:
# @Author :zjc
# @File :house_operation.py
# @Time :2025/3/6 16:23from my_tools import *"""说明:提供对房屋的各种操作
"""
# 全局变量:houses 存放的所有房屋信息
# 为了测试方便,放了一个测试数据到该列表
houses = [{"id": 1, "name": "tim", "phone": "113", "address": "海淀", "rent": 800, "status": "已出租"}]# 全局变量id_counter 记录当前房屋的id
id_counter = 1# 6. 更新房屋信息def update():"""修改房屋信息:return:"""update_id = int(input("请选择待修改的房屋编号(-1表示退出):"))if update_id == -1:print("你放弃修改房屋信息".center(32, "="))return# 根据id查找到对应的房屋信息(字典)house = find_by_id(update_id)if not house:print("没有要修改的房屋信息".center(32, "="))return# 注意:如果用户直接回车表示不修改当前这个信息,保留原来的值""" 按照简单的方式完成:name = input(f"姓名({house['name']})")if len(name) > 0: # 如果用户输入的有内容才修改# 表示将接受到的name,赋值给字典对应的key="name"对应的值house['name'] = name"""# 编写工具函数替换前面的house['name'] = read_str(f"姓名({house['name']})",house['name'])house['phone'] = read_str(f"电话({house['phone']})", house['phone'])house['address'] = read_str(f"地址({house['address']})", house['address'])house['rent'] = int(read_str(f"租金({house['rent']})", house['rent']))house['status'] = read_str(f"状态({house['status']})", house['status'])print("修改房屋信息成功".center(32,"="))# 5.根据id查找房屋信息
def find_house():"""查找房屋信息:return:"""print("查找房屋信息".center(32, "="))find_id = int(input("请输入要查找的id:"))# 调用函数返回对应的房屋信息,没有则返回Nonehouse = find_by_id(find_id)if house:# 相当于找到了,显示# 打印表头print("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(已出租\未出租)")for value in house.values():# 取出house的value值,并进行遍历显示print(value, end="\t\t")print()else:print(f"查找的房屋id{find_id}不存在")# 4.完善退出功能
def exit_sys():"""完成退出系统,并确认(Y/N):return: 如果确认退出返回True,否则返回False"""choice = read_confirm_select()if choice == "y":return Trueelse:return False# 3. 删除房屋信息
def del_house():"""根据id删除房屋信息:return:"""print("删除房屋信息".center(32, "="))del_id = int(input("请输入待删除房屋的编号(-1退出):"))if del_id == -1:print("放弃删除房屋信息".center(32, "="))return# 让用户确认删除,如果输入的不是Y/N,就一直提示输入# while True:# key = input("请输入你的选择(Y/N),请确认选择:")# if key.lower() == "y" or key.lower() == "n":# break# 调用工具函数choice = read_confirm_select()if choice == "y": # 如果真的要删除# 根据del_id 去houses列表查找是否存在该房屋[字典]house = find_by_id(del_id)if house:# 不为空, 执行删除houses.remove(house)print("删除房屋信息成功".center(32, "="))else:print("房屋编号不存在,删除失败...".center(32, "="))else:print("你放弃删除房屋信息".center(32, "="))# 2. 添加房屋信息
def add_house():"""完成添加房屋信息:return:"""print("添加房屋".center(32, "="))name = input("姓名:")phone = input("电话:")address = input("地址:")rent = input("租金:")state = input("状态:")# 由系统添加的房屋id# global代表使用全局id_counterglobal id_counterid_counter += 1# 构建房屋信息对应的字典,加入到全局house列表中house = {"id": id_counter, "name": name, "phone": phone,"address": address, "rent": rent, "status": state}# 将信息添加到房屋houses.append(house)# 添加提示信息print("添加房屋成功".center(32, "="))# 1. 显示房屋信息
"""使用字典来存储房屋信息
"""def list_houses():"""显示房屋列表:return:"""print("房屋列表".center(60, "="))# 打印表头信息:print("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(已出租\未出租)")# 遍历houses列表# 取出的house就是一个字典对象# 但是真正遍历的是字典中的valuesfor house in houses:# 取出house的value值,并进行遍历显示for value in house.values():print(value, end="\t\t")# 输出一个完整的house信息后,换行print()# 房屋列表结尾信息print("房屋列表显示完毕".center(60, "="))# 0. 显示主菜单
def main_menu():"""显示主菜单,供用户操作和选择:return:"""print()print("房屋出租系统".center(32, "="))print("\t\t\t1 新 增 房 源")print("\t\t\t2 查 找 房 屋")print("\t\t\t3 删 除 房 屋 信 息")print("\t\t\t4 修 改 房 屋 信 息")print("\t\t\t5 房 屋 列 表")print("\t\t\t6 退 出")# 0. 查找ID
def find_by_id(find_id):"""根据输入的find_id返回对应的房屋信息(字典),如果没有,就返回None:param find_id::return:"""# 遍历houses列表for house in houses:if house["id"] == find_id:return house# 没有找到直接返回None,如果没有return也是默认返回Nonereturn None
P146 出租系统-OPP分层模式 [1] 2025/3/11
一、项目设计
-
项目设计-程序框架图:
- 分层模式=>当软件比较复杂,需要模式管理
- 程序框架图
- 分析设计系统有哪些类
- 明确各个类的调用关系
P147 出租系统-OPP分层模式 [2] 2025/3/11
一、完成House类
二、显示主菜单和完成退出软件功能
main.py
:
# @Author :zjc
# @File :main.py
# @Time :2025/3/11 20:06"""说明:主程序,程序的执行入口
"""
from house_view import *if __name__== "__main__":# 创建HouseView对象,显示主菜单HouseView().main_menu()print("你退出了程序,欢迎下次使用...")
house_view.py
:
# @Author :zjc
# @File :house_view.py
# @Time :2025/3/11 19:59
"""说明:界面层,显示界面,接收用户的输入,调用业务层的方法
"""
class HouseView:def main_menu(self):"""显示主菜单:return:"""while True:print()print("房屋出租系统".center(32, "="))print("\t\t\t1 新 增 房 源")print("\t\t\t2 查 找 房 屋")print("\t\t\t3 删 除 房 屋 信 息")print("\t\t\t4 修 改 房 屋 信 息")print("\t\t\t5 房 屋 列 表")print("\t\t\t6 退 出")key = input("请输入你的选择(1-6):")if key in ["1", "2", "3", "4", "5", "6"]:if key == "1": # 添加房屋print("1 新 增 房 源")elif key == "2": # 查找房屋信息print("2 查 找 房 屋")elif key == "3": # 删除信息print("3 删 除 房 屋 信 息")elif key == "4": # 修改房屋信息print("4 修 改 房 屋 信 息")elif key == "5": # 房屋列表print("5 房 屋 列 表")elif key == "6": # 退出系统break
house.py
:
# @Author :zjc
# @File :house.py.py
# @Time :2025/3/11 19:50"""说明:数据层: House类,一个House对象表示一个房屋信息
"""class House:def __init__(self,id,name,phone,address,rent,state):self.id = idself.name = nameself.phone = phoneself.address = addressself.rent = rentself.state = state
P148 出租系统-OPP分层模式 [3] 2025/3/11
一、完成显示房屋列表的功能
house_view.py
:
# 1. 显示房屋列表def list_houses(self):"""显示房屋列表:return:"""print("房屋列表".center(60, "="))# 打印表头信息:print("编号\t\t房主\t\t电话\t\t地址\t\t月租\t\t状态(已出租\未出租)")# 得到house列表houses = self.house_operation.get_houses()# 遍历houses列表,元素为每个类(对象),直接输出为地址,需要重写__str__方法for house in houses:print(house) # 先看看效果# 房屋列表结尾信息print("房屋列表显示完毕".center(60, "="))
house_service.py
:
def get_houses(self):"""返回房屋列表:return:"""return self.houses
house.py
:
# 重写__str__方法, 按照指定的格式输出对象def __str__(self):return f"{self.id}\t\t{self.name}\t\t{self.phone}\t\t{self.address}\t\t{self.rent}\t\t{self.state}"
P149 出租系统-OPP分层模式 [4] 2025/3/11
一、添加房屋信息功能
house_service.py
:
# 定义属性id_counter:记录当前房屋的idid_counter = 1def add(self, new_house:House):"""将接受到的new_house添加到houses:param new_house::return:"""# 分配id给new_houseself.id_counter += 1new_house.id = self.id_counterself.houses.append(new_house)
house_view.py
:
# 2.添加房屋def add_house(self):"""显示添加的界面,接收用户的确认,构建House对象:return:"""print("添加房屋".center(32, "="))name = input("姓名:")phone = input("电话:")address = input("地址:")rent = input("租金:")state = input("状态:")# 构建房屋对象new_house = House(0,name,phone,address,rent,state)# 调用service方法,添加new_houseself.house_operation.add(new_house)# 添加提示信息print("添加房屋成功".center(32, "="))