前言:在python系列19,我们使用MVC架构初步完成员工信息管理系统,今天我们使用封装,继承,多态让我们的程序有隐藏的魅力,更加灵活,有扩展性。
实现的功能和python系列19一模一样,所以这里就不再展示功能与需求了,直接使用模块化,私有化,多态来更好的实现员工信息管理系统。
1.设计模型
员工信息管理系统设计模型
usl模块->StaffView类
__display_menu() 显示菜单
__select_menu() 选择菜单
__input_staff() 录入员工信息 -> 调用StaffController类add_staff()
__display_staff() 显示员工信息 -> 调用StaffModel类__str__方法
__delete_staff() 删除员工信息 -> 调用StaffController类delete_staff()
__modify_staff() 修改员工信息 -> 调用StaffController类modify_staff()
main() 程序入口bll模块->StaffController类
__init__() 容器初始化
add_staff() 添加员工 返回值:bool
delete_staff() 删除员工 返回值:bool
modify_staff() 修改员工 返回值:bool
dtl模块->StaffModel类
__init__() 初始化,员工编号->staff_number、员工名称name、部门编号number、薪资wages
__str__() 打印员工信息
__eq__() 重写__eq__方法,通过名字判断两个员工是否相等,为了实现list.remove()方法
1.dtl
class StaffModel:
def __init__(self, name="", staff_number=0, number=0, wages=0.0):
self.name = name
self.staff_number = staff_number
self.number = number
self.wages = wages
def __str__(self):
return f"name:{self.name}, staff_number:{self.staff_number}, number:{self.number}, wages:{self.wages}"
def __lt__(self, other):
return self.name < other.name
def __eq__(self, other):
return self.name == other.name
2.bll
from dtl import StaffModel
class StaffController:
def __init__(self):
self.list_staff = []
def add_staff(self, staff: StaffModel):
self.list_staff.append(staff)
return True
def delete_staff(self, staff_name):
staff = StaffModel(staff_name)
if staff in self.list_staff:
self.list_staff.remove(staff)
return True
return False
def modifying_staff(self, staff: StaffModel):
for item in self.list_staff:
if item.name == staff.name:
item.__dict__ = staff.__dict__
return True
return False
3.usl
from bll import StaffController
from dtl import StaffModel
class StaffView:
def __init__(self):
self.__staffController = StaffController()
@staticmethod
def __display_menu():
print("1. 录入员工信息")
print("2. 显示员工信息")
print("3. 修改员工信息")
print("4. 删除员工信息")
def __select_menu(self):
num = input("请选择操作:")
if num == "1":
self.__input_staff()
elif num == "2":
self.__show_staff()
elif num == "3":
self.__modify_staff()
elif num == "4":
self.__delete_staff()
else:
print("输入错误,请重新输入!")
def __input_staff(self):
staff = StaffModel(
input("请输入员工姓名:"),
input("请输入员工工号:"),
input("请输入员工职位:"),
input("请输入员工薪资:")
)
print("添加成功!") if self.__staffController.add_staff(staff) else print("添加失败!")
def __show_staff(self):
for item in self.__staffController.list_staff:
print(item)
def __modify_staff(self):
staff = StaffModel(
input("请输入员工姓名:"),
input("请输入员工新工号:"),
input("请输入员工新职位:"),
input("请输入员工新薪资:")
)
print("修改成功!") if self.__staffController.modifying_staff(staff) else print("修改失败!")
def __delete_staff(self):
print("修改成功!") if self.__staffController.delete_staff(input("请输入员工姓名:")) else print("修改失败!")
def main(self):
while True:
self.__display_menu()
self.__select_menu()
4.main
from usl import StaffView
if __name__ == '__main__':
view = StaffView()
view.main()