前言:在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 = nameself.staff_number = staff_numberself.number = numberself.wages = wagesdef __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.namedef __eq__(self, other):return self.name == other.name
2.bll
from dtl import StaffModelclass StaffController:def __init__(self):self.list_staff = []def add_staff(self, staff: StaffModel):self.list_staff.append(staff)return Truedef delete_staff(self, staff_name):staff = StaffModel(staff_name)if staff in self.list_staff:self.list_staff.remove(staff)return Truereturn Falsedef modifying_staff(self, staff: StaffModel):for item in self.list_staff:if item.name == staff.name:item.__dict__ = staff.__dict__return Truereturn False
3.usl
from bll import StaffController
from dtl import StaffModelclass StaffView:def __init__(self):self.__staffController = StaffController()@staticmethoddef __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 StaffViewif __name__ == '__main__':view = StaffView()view.main()