1.入门菜鸟版
epidemic_manager_system_v1.py
"""
疫情信息管理系统v1
epidemic manager system
显示菜单
选择菜单
添加疫情
显示疫情
...
"""
list_epidemic = [] # 一定在循环前,创建一个列表;若在循环中,则是创建多个列表
while True:
# 1. 显示菜单
print("按1键添加疫情")
print("按2键显示疫情")
print("按3键删除疫情")
print("按4键修改疫情")
print("按5键退出系统")
# 2. 选择菜单
number = input("请输入数字:")
if number == "1":
dict_epidemic = {
"name": input("请输入疫情名称:"),
"num": int(input("请输入疫情人数:"))
}
list_epidemic.append(dict_epidemic)
print("输入成功!\n")
elif number == "2":
for item in list_epidemic:
print("疫情名称疫情是%s,疫情人数是%s" % (item["name"], item["num"]))
print()
elif number == "3":
epidemic_name = input("请输入要删除的疫情名称:")
for i in range(len(list_epidemic)):
if list_epidemic[i]["name"] == epidemic_name:
del list_epidemic[i]
print("删除成功!\n")
break
else:
print("未找到要删除的目标!\n")
elif number == "4":
name = input("请输入要修改的疫情名称:")
for item in list_epidemic:
if item["name"] == name:
item["name"] = input("请输入修改后的疫情名称:")
item["num"] = input("请输入修改后的疫情人数:")
print("修改成功!\n")
break
else:
print("未找到要修改的目标!\n")
elif number == "5":
print("已退出系统!\n")
break
else:
print("不存在该选项!!!\n")
2.函数版
epidemic_manager_system_v2.py
"""
疫情信息管理系统v2
"""
list_epidemic = []
def display_menu():
"""显示菜单"""
print("按1键添加疫情")
print("按2键显示疫情")
print("按3键删除疫情")
print("按4键修改疫情")
def select_menu():
"""选择菜单"""
number = input("请输入数字:")
if number == "1":
add_epidemic()
elif number == "2":
display_epidemic()
elif number == "3":
delete_epidemic()
elif number == "4":
change_epidemic()
def change_epidemic():
name = input("请输入需要修改的读取名称:")
for item in list_epidemic:
if item["name"] == name:
item["name"] = input("请输入地区名称:")
item["new"] = int(input("请输入新增人数:"))
item["now"] = int(input("请输入现有人数:"))
break
def delete_epidemic():
name = input("请输入需要删除的地区名称:")
for i in range(len(list_epidemic)):
if list_epidemic[i]["name"] == name:
del list_epidemic[i]
break # 不停会报错
def display_epidemic():
for item in list_epidemic:
print("%s的主演是%s,热度是%s" % (item["name"], item["actor"], item["index"]))
def add_epidemic():
dict_epidemic = {
"name": input("请输入地区名称:"),
"new": int(input("请输入新增人数:")),
"now": int(input("请输入现有人数:"))
}
list_epidemic.append(dict_epidemic)
while True:
display_menu()
select_menu()
3.类版
epidemic_manager_system_v3.py
"""
疫情信息管理系统v3
"""
list_epidemic = [] # type:list[EpidemicInformation]
class EpidemicInformation:
def __init__(self, name, new=0, now=0):
self.name = name
self.new = new
self.now = now
def display(self):
print("%s地区新增%s,现在是%s" % (self.name, self.new, self.now))
def display_menu():
"""显示菜单"""
print("按1键添加疫情")
print("按2键显示疫情")
print("按3键删除疫情")
print("按4键修改疫情")
def select_menu():
"""选择菜单"""
number = input("请输入数字:")
if number == "1":
add_epidemic()
elif number == "2":
display_epidemic()
elif number == "3":
delete_epidemic()
elif number == "4":
change_epidemic()
def change_epidemic():
name = input("请输入需要修改的读取名称:")
for item in list_epidemic:
if item.name == name:
item.name = input("请输入地区名称:")
item.new = int(input("请输入新增人数:"))
item.now = int(input("请输入现有人数:"))
break
def delete_epidemic():
name = input("请输入需要删除的地区名称:")
for i in range(len(list_epidemic)):
if list_epidemic[i].name == name:
del list_epidemic[i]
break # 不停会报错
def display_epidemic():
for item in list_epidemic:
print("%s的主演是%s,热度是%s" % (item.name, item.new, item.now))
def add_epidemic():
epidemic = EpidemicInformation(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
list_epidemic.append(epidemic)
while True:
display_menu()
select_menu()
4.MVC架构版
epidemic_manager_system_v4.py
"""
MVC架构
一、录入疫情信息
view:显示菜单、选择菜单、录入信息
model:封装地区、新增、现有
controller:疫情列表、添加信息
二、显示疫情
view:打印列表中的元素
model:定义变量的显示格式
三、删除疫情
view:录入地区,显示成败
controller:在列表中移除元素
四、修改疫情
view:录入旧地区,新数据(地区、新增、现有),显示成败
controller:在列表中更新元素
"""
class EpidemicModel:
"""疫情模型:负责封装疫情信息"""
def __init__(self, name, new=0, now=0):
"""
封装地区、新增、现有
:param name: 地区
:param new: 新增
:param now: 现有
"""
self.name = name
self.new = new
self.now = now
def display(self):
return ("疫情地区名称为:%s,新增人数为:%s,现有人数为:%s" % (self.name, self.new, self.now))
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":
self.input_epidemic()
elif number == "2":
self.display_epidemic()
elif number == "3":
self.delete_epidemic()
elif number == "4":
self.change_epidemic()
def input_epidemic(self):
"""录入信息"""
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
self.controller.add_epidemic(epidemic)
def display_epidemic(self):
for item in self.controller.list_epidemic:
print(item.display())
def delete_epidemic(self):
while True:
name = input("请输入需要删除的地区名称:")
if self.controller.remove_epidemic(name):
print("删除成功!")
break
else:
print("删除失败!")
def change_epidemic(self):
while True:
name = input("请输入需要修改的读取名称:")
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
if self.controller.update_epidemic(name, epidemic):
print("修改成功!")
break
else:
print("修改失败!")
class EpidemicController:
"""疫情控制器:负责处理疫情信息存储/计算等核心逻辑"""
def __init__(self):
self.list_epidemic = [] # type: list[EpidemicModel]
def add_epidemic(self, new):
self.list_epidemic.append(new)
def remove_epidemic(self, name):
for i in range(len(self.list_epidemic)):
if self.list_epidemic[i].name == name:
del self.list_epidemic[i]
return True
return False
def update_epidemic(self, name, epidemic):
for item in self.list_epidemic:
if item.name == name:
item.name = epidemic.name
item.new = epidemic.new
item.now = epidemic.now
return True
return False
view = EpidemicView() # ->Controller->[]
while True:
view.display_menu()
view.select_menu()
5.私有化版
epidemic_manager_system_v5.py
"""
疫情信息管理系统V5
私有化练习:
私有化疫情信息管理系统
将view所有成员全部私有化,只提供main函数
"""
class EpidemicModel:
"""疫情模型:负责封装疫情信息"""
def __init__(self, name, new=0, now=0):
"""
封装地区、新增、现有
:param name: 地区
:param new: 新增
:param now: 现有
"""
self.name = name
self.new = new
self.now = now
def display(self):
return ("疫情地区名称为:%s,新增人数为:%s,现有人数为:%s" % (self.name, self.new, self.now))
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":
self.__input_epidemic()
elif number == "2":
self.__display_epidemic()
elif number == "3":
self.__delete_epidemic()
elif number == "4":
self.__change_epidemic()
def __input_epidemic(self):
"""录入信息"""
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
self.controller.add_epidemic(epidemic)
def __display_epidemic(self):
for item in self.controller.list_epidemic:
print(item.display())
def __delete_epidemic(self):
while True:
name = input("请输入需要删除的地区名称:")
if self.controller.remove_epidemic(name):
print("删除成功!")
break
else:
print("删除失败!")
def __change_epidemic(self):
while True:
name = input("请输入需要修改的读取名称:")
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
if self.controller.update_epidemic(name, epidemic):
print("修改成功!")
break
else:
print("修改失败!")
def main(self):
while True:
self.__display_menu()
self.__select_menu()
class EpidemicController:
"""疫情控制器:负责处理疫情信息存储/计算等核心逻辑"""
def __init__(self):
self.list_epidemic = [] # type: list[EpidemicModel]
def add_epidemic(self, new):
self.list_epidemic.append(new)
def remove_epidemic(self, name):
for i in range(len(self.list_epidemic)):
if self.list_epidemic[i].name == name:
del self.list_epidemic[i]
return True
return False
def update_epidemic(self, name, epidemic):
for item in self.list_epidemic:
if item.name == name:
# item.name = epidemic.name
# item.new = epidemic.new
# item.now = epidemic.now
item.__dict__ = epidemic.__dict__
return True
return False
view = EpidemicView() # ->Controller->[]
view.main()
6.重写版
epidemic_manager_system_v6.py
"""
疫情信息管理系统V6
重写
(1)
在view类的__display_epidemic方法中,直接打印item
在model类中重写__str__
(2)
在controller类的remove_epidemic方法中,用列表的remove删除
在model类中重写__eq__
"""
class EpidemicModel:
"""疫情模型:负责封装疫情信息"""
def __init__(self, name, new=0, now=0):
"""
封装地区、新增、现有
:param name: 地区
:param new: 新增
:param now: 现有
"""
self.name = name
self.new = new
self.now = now
def __str__(self):
return ("疫情地区名称为:%s,新增人数为:%s,现有人数为:%s" % (self.name, self.new, self.now))
def __eq__(self, other):
"""重写比较方法"""
return self.name == other.name
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":
self.__input_epidemic()
elif number == "2":
self.__display_epidemic()
elif number == "3":
self.__delete_epidemic()
elif number == "4":
self.__change_epidemic()
def __input_epidemic(self):
"""录入信息"""
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
self.controller.add_epidemic(epidemic)
def __display_epidemic(self):
for item in self.controller.list_epidemic:
print(item)
def __delete_epidemic(self):
while True:
name = input("请输入需要删除的地区名称:")
if self.controller.remove_epidemic(name):
print("删除成功!")
break
else:
print("删除失败!")
def __change_epidemic(self):
while True:
name = input("请输入需要修改的读取名称:")
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
if self.controller.update_epidemic(name, epidemic):
print("修改成功!")
break
else:
print("修改失败!")
def main(self):
while True:
self.__display_menu()
self.__select_menu()
class EpidemicController:
"""疫情控制器:负责处理疫情信息存储/计算等核心逻辑"""
def __init__(self):
self.list_epidemic = [] # type: list[EpidemicModel]
def add_epidemic(self, new):
self.list_epidemic.append(new)
def remove_epidemic(self, name):
model = EpidemicModel(name)
if model in self.list_epidemic:
self.list_epidemic.remove(model)
return True
return False
# for i in range(len(self.list_epidemic)):
# if self.list_epidemic[i].name == name:
# del self.list_epidemic[i]
# return True
# return False
def update_epidemic(self, name, epidemic):
for item in self.list_epidemic:
if item.name == name:
# item.name = epidemic.name
# item.new = epidemic.new
# item.now = epidemic.now
item.__dict__ = epidemic.__dict__
return True
return False
view = EpidemicView() # ->Controller->[]
view.main()
7.拆分模块版
epidemic_manager_system_v7文件夹
dtl.py
class EpidemicModel:
"""疫情模型:负责封装疫情信息"""
def __init__(self, name, new=0, now=0):
"""
封装地区、新增、现有
:param name: 地区
:param new: 新增
:param now: 现有
"""
self.name = name
self.new = new
self.now = now
def __str__(self):
return ("疫情地区名称为:%s,新增人数为:%s,现有人数为:%s" % (self.name, self.new, self.now))
def __eq__(self, other):
"""重写比较方法"""
return self.name == other.name
usl.py
from bll import EpidemicController
from dtl import EpidemicModel
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":
self.__input_epidemic()
elif number == "2":
self.__display_epidemic()
elif number == "3":
self.__delete_epidemic()
elif number == "4":
self.__change_epidemic()
def __input_epidemic(self):
"""录入信息"""
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
self.controller.add_epidemic(epidemic)
def __display_epidemic(self):
for item in self.controller.list_epidemic:
print(item)
def __delete_epidemic(self):
while True:
name = input("请输入需要删除的地区名称:")
if self.controller.remove_epidemic(name):
print("删除成功!")
break
else:
print("删除失败!")
def __change_epidemic(self):
while True:
name = input("请输入需要修改的读取名称:")
epidemic = EpidemicModel(
input("请输入地区名称:"),
int(input("请输入新增人数:")),
int(input("请输入现有人数:"))
)
if self.controller.update_epidemic(name, epidemic):
print("修改成功!")
break
else:
print("修改失败!")
def main(self):
while True:
self.__display_menu()
self.__select_menu()
bll.py
from dtl import EpidemicModel
class EpidemicController:
"""疫情控制器:负责处理疫情信息存储/计算等核心逻辑"""
def __init__(self):
self.list_epidemic = [] # type: list[EpidemicModel]
def add_epidemic(self, new):
self.list_epidemic.append(new)
def remove_epidemic(self, name):
model = EpidemicModel(name)
if model in self.list_epidemic:
self.list_epidemic.remove(model)
return True
return False
# for i in range(len(self.list_epidemic)):
# if self.list_epidemic[i].name == name:
# del self.list_epidemic[i]
# return True
# return False
def update_epidemic(self, name, epidemic):
for item in self.list_epidemic:
if item.name == name:
# item.name = epidemic.name
# item.new = epidemic.new
# item.now = epidemic.now
item.__dict__ = epidemic.__dict__
return True
return False
main.py
from usl import EpidemicView
if __name__ == "__main__":
view = EpidemicView() # ->Controller->[]
view.main()
8.异常处理版
epidemic_manager_system_v8文件夹
dtl.py
class EpidemicModel:
"""疫情模型:负责封装疫情信息"""
def __init__(self, name, new=0, now=0):
"""
封装地区、新增、现有
:param name: 地区
:param new: 新增
:param now: 现有
"""
self.name = name
self.new = new
self.now = now
def __str__(self):
return ("疫情地区名称为:%s,新增人数为:%s,现有人数为:%s" % (self.name, self.new, self.now))
def __eq__(self, other):
"""重写比较方法"""
return self.name == other.name
usl.py
"""
异常处理
对view中int(input())的代码进行异常处理
对controller中删除的代码进行异常处理
"""
from bll import EpidemicController
from dtl import EpidemicModel
class EpidemicView:
"""疫情视图:负责处理疫情信息输入/输出等界面逻辑"""
def __init__(self):
self.controller = EpidemicController()
def __get_number(self, message):
"""获取数字"""
while True:
try:
number = int(input(message))
return number
except ValueError:
print("输入有误,请重新输入")
def __display_menu(self):
"""显示菜单"""
print("按1键添加疫情")
print("按2键显示疫情")
print("按3键删除疫情")
print("按4键修改疫情")
def __select_menu(self):
"""选择菜单"""
number = input("请输入数字:")
if number == "1":
self.__input_epidemic()
elif number == "2":
self.__display_epidemic()
elif number == "3":
self.__delete_epidemic()
elif number == "4":
self.__change_epidemic()
def __input_epidemic(self):
"""录入信息"""
epidemic = EpidemicModel(
input("请输入地区名称:"),
# int(input("请输入新增人数:")),
# int(input("请输入现有人数:"))
self.__get_number("请输入新增人数:"),
self.__get_number("请输入现有人数:")
)
self.controller.add_epidemic(epidemic)
def __display_epidemic(self):
for item in self.controller.list_epidemic:
print(item)
def __delete_epidemic(self):
while True:
name = input("请输入需要删除的地区名称:")
if self.controller.remove_epidemic(name):
print("删除成功!")
break
else:
print("删除失败!")
def __change_epidemic(self):
while True:
name = input("请输入需要修改的读取名称:")
epidemic = EpidemicModel(
input("请输入地区名称:"),
# int(input("请输入新增人数:")),
# int(input("请输入现有人数:"))
self.__get_number("请输入新增人数:"),
self.__get_number("请输入现有人数:")
)
if self.controller.update_epidemic(name, epidemic):
print("修改成功!")
break
else:
print("修改失败!")
def main(self):
while True:
self.__display_menu()
self.__select_menu()
bll.py
from dtl import EpidemicModel
class EpidemicController:
"""疫情控制器:负责处理疫情信息存储/计算等核心逻辑"""
def __init__(self):
self.list_epidemic = [] # type: list[EpidemicModel]
def add_epidemic(self, new):
self.list_epidemic.append(new)
def remove_epidemic(self, name):
# model = EpidemicModel(name)
# if model in self.list_epidemic:
# self.list_epidemic.remove(model)
# return True
# return False
try:
self.list_epidemic.remove(EpidemicModel(name))
return True
except ValueError:
return False
def update_epidemic(self, name, epidemic):
for item in self.list_epidemic:
if item.name == name:
item.__dict__ = epidemic.__dict__
return True
return False
main.py
"""
异常处理
适用性:解决逻辑错误,而非语法错误
价值:保障程序能够按照既定的流程执行,不紊乱
"""
from usl import EpidemicView
if __name__ == "__main__":
view = EpidemicView() # ->Controller->[]
view.main()
9.持久化存储数据版
epidemic_manager_system_v9文件夹
dtl.py
class EpidemicModel:
"""疫情模型:负责封装疫情信息"""
def __init__(self, name, new=0, now=0):
"""
封装地区、新增、现有
:param name: 地区
:param new: 新增
:param now: 现有
"""
self.name = name
self.new = new
self.now = now
def __str__(self):
return ("疫情地区名称为:%s,新增人数为:%s,现有人数为:%s" % (self.name, self.new, self.now))
def __eq__(self, other):
"""重写比较方法"""
return self.name == other.name
def __repr__(self):
return 'EpidemicModel("%s",%s,%s)' % (self.name, self.new, self.now)
usl.py
from bll import EpidemicController
from dtl import EpidemicModel
class EpidemicView:
"""疫情视图:负责处理疫情信息输入/输出等界面逻辑"""
def __init__(self):
self.controller = EpidemicController()
def __get_number(self, message):
"""获取数字"""
while True:
try:
number = int(input(message))
return number
except ValueError:
print("输入有误,请重新输入")
def __display_menu(self):
"""显示菜单"""
print("按1键添加疫情")
print("按2键显示疫情")
print("按3键删除疫情")
print("按4键修改疫情")
def __select_menu(self):
"""选择菜单"""
number = input("请输入数字:")
if number == "1":
self.__input_epidemic()
elif number == "2":
self.__display_epidemic()
elif number == "3":
self.__delete_epidemic()
elif number == "4":
self.__change_epidemic()
def __input_epidemic(self):
"""录入信息"""
epidemic = EpidemicModel(
input("请输入地区名称:"),
self.__get_number("请输入新增人数:"),
self.__get_number("请输入现有人数:")
)
self.controller.add_epidemic(epidemic)
def __display_epidemic(self):
for item in self.controller.list_epidemic:
print(item)
def __delete_epidemic(self):
while True:
name = input("请输入需要删除的地区名称:")
if self.controller.remove_epidemic(name):
print("删除成功!")
break
else:
print("删除失败!")
def __change_epidemic(self):
while True:
name = input("请输入需要修改的读取名称:")
epidemic = EpidemicModel(
input("请输入地区名称:"),
self.__get_number("请输入新增人数:"),
self.__get_number("请输入现有人数:")
)
if self.controller.update_epidemic(name, epidemic):
print("修改成功!")
break
else:
print("修改失败!")
def main(self):
while True:
self.__display_menu()
self.__select_menu()
bll.py
from dtl import EpidemicModel
from dal import EpidemicDao
class EpidemicController:
"""疫情控制器:负责处理疫情信息存储/计算等核心逻辑"""
def __init__(self):
self.__dao = EpidemicDao() # 加载历史数据
self.list_epidemic = self.__dao.list_epidemic # type: list[EpidemicModel]
# self.list_epidemic = [] # type: list[EpidemicModel]
def add_epidemic(self, new):
self.list_epidemic.append(new)
self.__dao.save()
def remove_epidemic(self, name):
try:
self.list_epidemic.remove(EpidemicModel(name))
self.__dao.save()
return True
except ValueError:
return False
def update_epidemic(self, name, epidemic):
for item in self.list_epidemic:
if item.name == name:
item.__dict__ = epidemic.__dict__
self.__dao.save()
return True
return False
dal.py
# from pathlib import Path
from dtl import EpidemicModel
class EpidemicDao:
"""数据访问对象"""
def __init__(self):
# self.list_epidemic = []
self.__FILE_NAME = "epidemic_data.txt" # 字母大写为常量,创建后"不能"修改
self.list_epidemic = self.load()
def load(self):
"""加载历史数据"""
try:
with open(self.__FILE_NAME, "r", encoding="utf-8") as file:
return eval(file.read())
except:
return [] # 第一次没有历史数据时执行
def save(self):
"""保存历史数据"""
with open(self.__FILE_NAME, "w", encoding="utf-8") as file:
# 内部自动调用列表元素(Model)的__repr__()
file.write(self.list_epidemic.__repr__())
main.py
"""
epidemic_manager_system_v9
使用文件持久化存储数据
创建dal文件,定义EpidemicDao类,提供load和save方法
在Controller中调用load和save方法
再编写load和save方法实现细节
"""
from usl import EpidemicView
if __name__ == "__main__":
view = EpidemicView()
view.main()
明明需要实现的功能都一样,但一个比一个复杂QAQ…