一、模型说明
View视图:处理界面逻辑,输入输出
Controller控制器:处理核心逻辑,存储计算
Model模型:将多个变量组合为一种类型
二、注意事项
类外通过自定义对象名调用
类中通过self调用
 
 """
    疫情信息管理系统
        学习MVC的软件架构
            View   Controller  Model
            视图:处理界面逻辑,输入输出
            控制器:处理核心逻辑,存储计算
            模型:将多个变量组合为一种类型
        餐厅的架构
            服务员 <--> 传菜员 <--> 厨师
"""
class EpidemicModel:
    """
        数据模型
    """
    def __init__(self, region="", new=0, now=0, total=0, eid=0):
        self.region = region
        self.new = new
        self.now = now
        self.total = total
        self.eid = eid  # 操作全球唯一标识符的变量
class EpidemicView:
    """
        疫情视图
    """
    def __init__(self):
        self.controller = EpidemicController()
    def display_menu(self):
        """
            显示菜单
        """
        print("按1键录入疫情信息")
        print("按2键显示疫情信息")
        print("按3键删除疫情信息")
        print("按4键修改疫情信息")
    def select_menu(self):
        """
            选择菜单
        """
        number = input("请输入选项:")
        if number == "1":
            # 重点1:类中通过self调用
            self.input_epidemic()
        elif number == "2":
            self.display_epidemics()
    def input_epidemic(self):
        """
            录入疫情信息
        """
        # 重点3:每次录入新数据创建新Model对象
        # model = EpidemicModel(
        #     input("请输入疫情地区:"),
        #     int(input("请输入现有人数:")),
        #     int(input("请输入新增人数:")),
        #     int(input("请输入累计人数:")),
        # )
        # model = EpidemicModel(
        #     region=input("请输入疫情地区:"),
        #     now=int(input("请输入现有人数:")),
        #     new=int(input("请输入新增人数:")),
        #     total=int(input("请输入累计人数:")),
        # )
        model = EpidemicModel()
        model.region = input("请输入疫情地区:")
        model.new = int(input("请输入新增人数:"))
        model.now = int(input("请输入现有人数:"))
        model.total = int(input("请输入累计人数:"))
        self.controller.add_epidemic(model)
    def display_epidemics(self):
        """
            显示所有疫情信息
        """
        for item in self.controller.list_epidemic:
            print("%s地区的编号是%s,新增%s人,现有%s人,累计%s人" 
                  % (item.region, item.eid, item.new, item.now, item.total))
class EpidemicController:
    """
        疫情控制器
    """
    def __init__(self):
        #  Python 类型标注:为变量增加类型
        self.list_epidemic = []  # type:list[EpidemicModel]
        self.start_id = 1001
    def add_epidemic(self, info):
        """
            添加疫情信息
        :param info:EpidemicModel类型,新信息
        """
        # 设置自增长编号
        info.eid = self.start_id
        self.start_id += 1  # 为下一个数据可以使用不同数据
        # 添加到列表中
        self.list_epidemic.append(info)
# 重点2:类外通过自定义对象名调用
view = EpidemicView()  # controller -> []
while True:
    view.display_menu()
    view.select_menu()  #select_menu(view)->input_epidemicmmvc 
 
三、案例MVC内存图

四、案例继续深化学习
"""
    疫情信息管理系统
        学习MVC的软件架构
            View   Controller  Model
            视图:处理界面逻辑,输入输出
            控制器:处理核心逻辑,存储计算
            模型:将多个变量组合为一种类型
        餐厅的架构
            服务员 <--> 传菜员 <--> 厨师
"""
class EpidemicModel:
    """
        数据模型
    """
    def __init__(self, region="", new=0, now=0, total=0, eid=0):
        self.region = region
        self.new = new
        self.now = now
        self.total = total
        self.eid = eid  # 操作全球唯一标识符的变量
class EpidemicView:
    """
        疫情视图
    """
    def __init__(self):
        self.controller = EpidemicController()
    def display_menu(self):
        """
            显示菜单
        """
        print("按1键录入疫情信息")
        print("按2键显示疫情信息")
        print("按3键删除疫情信息")
        print("按4键修改疫情信息")
    def select_menu(self):
        """
            选择菜单
        """
        number = input("请输入选项:")
        if number == "1":
            # 重点1:类中通过self调用
            self.input_epidemic()
        elif number == "2":
            self.display_epidemics()
        elif number == "3":
            self.delete_epidemic()
        elif number =="4":
            self.modify_epidemic()
    def input_epidemic(self):
        """
            录入疫情信息
        """
        # 重点3:每次录入新数据创建新Model对象
        # model = EpidemicModel(
        #     input("请输入疫情地区:"),
        #     int(input("请输入现有人数:")),
        #     int(input("请输入新增人数:")),
        #     int(input("请输入累计人数:")),
        # )
        # model = EpidemicModel(
        #     region=input("请输入疫情地区:"),
        #     now=int(input("请输入现有人数:")),
        #     new=int(input("请输入新增人数:")),
        #     total=int(input("请输入累计人数:")),
        # )
        model = EpidemicModel()
        model.region = input("请输入疫情地区:")
        model.new = int(input("请输入新增人数:"))
        model.now = int(input("请输入现有人数:"))
        model.total = int(input("请输入累计人数:"))
        self.controller.add_epidemic(model)
    def display_epidemics(self):
        """
            显示所有疫情信息
        """
        for item in self.controller.list_epidemic:
            print("%s地区的编号是%s,新增%s人,现有%s人,累计%s人" 
                   % (item.region, item.eid, item.new, item.now, item.total))
    def delete_epidemic(self):
        """
            删除疫情,录入编号,传递给controller,显示结果
        """
        eid = int(input("请输入需要删除的疫情编号:"))  # 将输入的编号转为int类型
        if self.controller.remove_epidemic(eid):
            print("删除成功哦~")
        else:
            print("哦~不行")
    def modify_epidemic(self):
        """
            修改疫情信息,录入、传递、显示
        :return:
        """
        model = EpidemicModel()
        model.eid = int(input("请输入需要需改的疫情编号:"))
        model.region = input("请输入疫情地区:")
        model.new = int(input("请输入新增人数:"))
        model.now = int(input("请输入现有人数:"))
        model.total = int(input("请输入累计人数:"))
        if self.controller.update_epidemic(model):
            print("修改成功")
        else:
            print("需改失败")
class EpidemicController:
    """
        疫情控制器
    """
    def __init__(self):
        #  Python 类型标注:为变量增加类型
        self.list_epidemic = []  # type:list[EpidemicModel]
        self.start_id = 1001
    def add_epidemic(self, info):
        """
            添加疫情信息
        :param info:EpidemicModel类型,新信息
        """
        # 设置自增长编号
        info.eid = self.start_id
        self.start_id += 1  # 为下一个数据可以使用不同数据
        # 添加到列表中
        self.list_epidemic.append(info)
    def remove_epidemic(self, eid: int):
        """
            在列表中移除疫情信息
        :param eid: int类型,疫情编号
        :return: bool类型,True表达移除成功,False表达移除失败
        """
        for i in range(len(self.list_epidemic)):
            if self.list_epidemic[i].eid == eid:
                del self.list_epidemic[i]
                return True  # 循环中途退出,返回成功
        return False  # 列表没有找到,则删除失败
        # remove内部还有层循环,所以带来二次查找
        # for item in self.list_epidemic:
        #     列表名.remove(item)
    def update_epidemic(self, new):
        """
            更新疫情信息
        :param new: Model类型
        :return: bool类型
        """
        # for i in range(len(self.list_epidemic)):
        #     self.list_epidemic[i].region = new.region
        for item in self.list_epidemic:
            if item.eid == new.eid:
                # item.region = new.region
                # item.new = new.new
                # item.now = new.now
                item.__dict__ = new.__dict__
                return True
        return False
# 重点2:类外通过自定义对象名调用
view = EpidemicView()  # controller -> []
while True:
    view.display_menu()
    view.select_menu()  # select_menu(view)->input_epidemic
五、练习
"""
完成餐厅信息管理系统
        练习1:录入餐厅信息
        view:显示菜单、选择菜单、录入信息
        model:城市city,店名name,点评remark,人均money
        controller:添加信息
        练习2:添加餐厅信息
        model:编号rid
        controller:添加信息(设置编号,追加到列表)
        练习3:显示全部餐厅信息
        view:按2键,打印餐厅信息
        controller:增加类型标注#type:list[RestaurantModel]
        练习4:删除餐厅信息
        view:按3键,删除餐厅信息,录入编号,显示成败
        controller: 在列表中查找元素
        练习5:修改餐厅信息
        view:按4键,修改餐厅信息,录入信息,显示成败
        controller: 在列表中查找元素,替换__dict__
"""
class RestaurantView:
    """
    界面视图
    """
    def __init__(self):
        self.control = RestaurantController()
    def display_menu(self):
        # Alt+Shift 选择多列
        print("按1键录入餐厅信息")
        print("按2键显示餐厅信息")
        print("按3键删除餐厅信息")
        print("按4键修改餐厅信息")
    def select_menu(self):
        num = input("请输入选项:")
        if num == "1":
            # 生成函数快捷键:Alt+回车
            self.input_resturant()
        if num == "2":
            self.display_info()
        if num == "3":
            self.remove_resturant()
        if num == "4":
            self.change_resturant()
    def input_resturant(self):
        # 因为有默认值,所以括号里可以为空
        model = RestaurantModel()
        model.name = input("请输入餐厅名字")
        model.city = input("请输入餐厅地区")
        model.remark = int(input("请输入餐厅点评人数"))
        model.money = int(input("请输入餐厅人均消费"))
        self.control.add_info(model)
    def display_info(self):
        for item in self.control.list_restaurant:
            print("信息为",item.rid,item.name,item.city,
                           item.remark,item.money)
    def remove_resturant(self):
        rid = int(input("请输入要删除的餐厅编号:"))
        if self.control.remove_info(rid):  # 加入失败rid:int,定义函数时添加
            print("删除成功")
        else:
            print("删除失败")
    # def change_resturant(self):
    #     rid = int(input("请输入要修改的餐厅编号:"))
    #     rname = int(input("请输入要修改的餐厅名称:"))
    #     rcity = int(input("请输入要修改的餐厅城市:"))
    #     rremark = int(input("请输入要修改的餐厅点评:"))
    #     rmoney = int(input("请输入要修改的餐厅人均消费:"))
    #     if self.control.change_info(rid,rname,rcity,rremark,rmoney):  
          # 加入失败rid:int,定义函数时添加
    #         print("修改成功")
    #     else:
    #         print("修改失败")
    # 优化
    def change_resturant(self):
        model = RestaurantModel()
        model.rid = int(input("请输入要修改的餐厅编号:"))
        model.rname = int(input("请输入要修改的餐厅名称:"))
        model.rcity = int(input("请输入要修改的餐厅城市:"))
        model.rremark = int(input("请输入要修改的餐厅点评:"))
        model.rmoney = int(input("请输入要修改的餐厅人均消费:"))
        if self.control.change_info(model):  # 加入失败rid:int,定义函数时添加
            print("修改成功")
        else:
            print("修改失败")
# shift+F6统一改名字
class RestaurantModel:
    # 注意添加默认值
    def __init__(self, rid = 0, name="", city="", remark=0, money = 0):
        self.rid = rid
        self.name= name
        self.city = city
        self.remark = remark
        self.money = money
class RestaurantController:
    """
        控制器
    """
    def __init__(self):
        self.list_restaurant = []      # type:list[RestaurantModel]
        self.start_rid = 1000
    def add_info(self,info):
        info.rid = self.start_rid
        self.start_rid += 1
        self.list_restaurant.append(info)
    def remove_info(self, rid: int):
        for i in range(len(self.list_restaurant)):
            if self.list_restaurant[i].rid == rid:
                del self.list_restaurant[i]
                return True
        return False
    def change_info(self, new_model):
        '''
        :param new_model:Model类型
        :return:bool类型
        '''
        # for i in range(len(self.list_restaurant)):
        #     if self.list_restaurant[i].rid == new_model.rid:
        #         self.list_restaurant[i].name = new_model.name
        #         self.list_restaurant[i].city = new_model.city
        #         self.list_restaurant[i].remark = new_model.remark
        #         self.list_restaurant[i].money = new_model.money
        #         return True
        # return False
        # 优化
        for item in self.list_restaurant:
            if item.rid == new_model.rid:
                # item.name = new_model.name
                # item.city = new_model.city
                # item.remark = new_model.remark
                # item.money = new_model.money
                # 优化
                item.__dict__ = new_model.__dict__
                return True
        return False
r_view = RestaurantView()
while True:
    r_view.display_menu()
    r_view.select_menu()













![[oneAPI] Neural Style Transfer](https://img-blog.csdnimg.cn/c2170b5b691e47ad8350c7bd2d193a8f.png)




