16员工管理系统(面对对象与数据本地化)

# coding=utf-8 
# Time    : 2018/8/1 16:50
# Author  : 云水君
# Email   : [email protected]
# File    : 员工管理系统.py
import json

class Operation():
    @classmethod
    def read_file(cls):
        try:
            with open("./data.json", "r", encoding="utf-8") as f:
                data = json.load(f)
            return data
        except:
            return []
    @classmethod
    def write_file(cls, data):
        with open("./data.json", "w", encoding="utf-8") as f:
            json.dump(data, f)
        return True
class Staffs(Operation):
    def __init__(self):
        self.name = ""
        self.age = 0
        self.number = ""
        self.pay = ""
        self.position = ""
        self.department = ''
    @classmethod
    def creat_staff(cls, dit):
        staff = cls()
        if len(dit):
            for key in dit:
                staff.__setattr__(key, dit[key])
            return staff
        return None
    def __str__(self):
        return "姓名:%s  年龄:%s  部门:%s  职位:%s  薪资:%s  工号:%s"%(self.name, self.age,self.department,self.position,self.pay,self.number)
class Department(Operation):
    def __init__(self):
        self.dp_name = ""
        self.staffs = []
        self.count = 0
    @classmethod
    def creat_deparment(cls, dit):
        dp = cls()
        if len(dit):
            for key in dit:
                if key != "staffs":
                    dp.__setattr__(key, dit[key])
            return dp
        return None

    def load_staffs(self):
        data = self.read_file()
        self.staffs = []
        for depart in data:
            if depart["dp_name"] == self.dp_name:
                for staff in depart["staffs"]:
                    self.staffs.append(Staffs.creat_staff(staff))
    def add_staff(self):
        staff = Staffs()
        staff.name = input("请输入员工的名字:")
        staff.age = input("请输入员工的年龄:")
        staff.pay = input("请输入员工的薪资:")
        staff.position = input("请输入员工的职位:")
        staff.department = self.dp_name
        staff.number = self.dp_name + str(self.count).rjust(3,"0")
        data = self.read_file()
        flag = False
        for item in data:
            if item["dp_name"] == self.dp_name:
                item["staffs"].append(staff.__dict__)
                item["count"] += 1
                self.write_file(data)
                flag = True
                break
        if not flag:
            data.append({"dp_name": self.dp_name, "staffs": [staff.__dict__], "count": 1})
            self.write_file(data)
class Company(Operation):
    company_name = "千锋教育"
    # staff_number = get_staff_number()
    staff_pay = []
    department = []
    @classmethod
    def add_staff(cls):
        dp = input("请输入要添加的员工所属的部门:")
        Company.load_department()
        flag = False
        for dpx in cls.department:
            if dpx.dp_name == dp:
                dpx.count += 1
                dpx.add_staff()
                flag = True
                break
        if not flag:
            department = Department()
            department.dp_name = dp
            department.count = 1
            department.add_staff()
    @classmethod
    def load_department(cls):
        data = cls.read_file()
        cls.department =[]
        for depart in data:
            Company.department.append(Department.creat_deparment(depart))
    @classmethod
    def max_pay(cls):
        cls.load_department()
        flag = 0
        for dp in cls.department:
            dp.load_staffs()
            for staff in dp.staffs:
                if flag == 0:
                    max_p = staff
                    flag = 1
                elif max_p.pay < staff.pay:
                    max_p = staff
        print(max_p)
    @classmethod
    def average_age(cls):
        pass
    @classmethod
    def get_staff_number(cls):
        data = cls.read_file()
        staff_numbers = 0
        for item in data:
            staff_numbers += len(item["staffs"])
        return staff_numbers
    @classmethod
    def show_staffs(cls):
        cls.load_department()
        print("1.按员工姓名查看")
        print("2.查看所有员工")
        n = input("请输入查看方式:")
        if n == "2":
            for dp in cls.department:
                dp.load_staffs()
                for staff in dp.staffs:
                    print(staff)
        if n =="1":
            name = input("请输入要查找的员工的名字:")
            staffs_temp = []
            for dp in cls.department:
                dp.load_staffs()
                for staff in dp.staffs:
                    if staff.name == name:
                        staffs_temp.append(staff)
            if not len(staffs_temp):
                print("员工%s不存在"%name)
            else:
                for stf in staffs_temp:
                    print(stf)
    @classmethod
    def del_staff(cls):
        cls.load_department()
        name = input("请输入要删除的员工的名字:")
        staffs_temp = []
        for dp in cls.department:
            dp.load_staffs()
            for staff in dp.staffs:
                if staff.name == name:
                    # print(id(staff))
                    staffs_temp.append(staff)
        if not len(staffs_temp):
            print("员工%s不存在" % name)
        else:
            index = 1
            for stf in staffs_temp:
                print(index, ":", stf)
                index += 1
            n = int(input("请输入要删除的员工的序号:"))
            nu = staffs_temp[n-1].number
            flag = False
            for dp in cls.department:
                for staff in dp.staffs:
                    if staff.number == nu:
                        del staff
                        flag = True
                        break
                if flag:
                    break
            flag = False
            data = cls.read_file()
            index1 = 0
            for dp in data:
                index2 = 0
                for staff in dp["staffs"]:
                    if staff["number"] == nu:
                        del data[index1]["staffs"][index2]
                        flag = True
                        cls.write_file(data)
                        print("删除成功!")
                        break
                    index2 += 1
                if flag:
                    break
                index1 += 1
if __name__ == '__main__':
    while True:
        print("1.添加员工")
        print("2.查看员工")
        print("3.删除员工")
        print("4.查看薪资最高的员工")
        print("5.退出")
        i = input("请输入想要的操作:")
        if i == "1":
            Company.add_staff()
        if i == "2":
            Company.show_staffs()
        if i == "3":
            Company.del_staff()
        if i =="4":
            Company.max_pay()
        if i == "5":
            break

运行效果:
1.添加员工
2.查看员工
3.删除员工
4.查看薪资最高的员工
5.退出
请输入想要的操作:1
请输入要添加的员工所属的部门:营销部
请输入员工的名字:kk
请输入员工的年龄:35
请输入员工的薪资:8990
请输入员工的职位:营销总监
1.添加员工
2.查看员工
3.删除员工
4.查看薪资最高的员工
5.退出
请输入想要的操作:2
1.按员工姓名查看
2.查看所有员工
请输入查看方式:2
姓名:aa  年龄:22  部门:研发部  职位:程序员  薪资:2500  工号:研发部001
姓名:bb  年龄:31  部门:研发部  职位:主任  薪资:5000  工号:研发部002
姓名:aa  年龄:21  部门:行政部  职位:文员  薪资:3100  工号:行政部001
姓名:kk  年龄:25  部门:行政部  职位:CEO  薪资:8390  工号:行政部002
姓名:ww  年龄:23  部门:营销部  职位:营销员  薪资:3100  工号:营销部001
姓名:kk  年龄:35  部门:营销部  职位:营销总监  薪资:8990  工号:营销部002
1.添加员工
2.查看员工
3.删除员工
4.查看薪资最高的员工
5.退出
请输入想要的操作:2
1.按员工姓名查看
2.查看所有员工
请输入查看方式:1
请输入要查找的员工的名字:kk
姓名:kk  年龄:25  部门:行政部  职位:CEO  薪资:8390  工号:行政部002
姓名:kk  年龄:35  部门:营销部  职位:营销总监  薪资:8990  工号:营销部002
1.添加员工
2.查看员工
3.删除员工
4.查看薪资最高的员工
5.退出
请输入想要的操作:3
请输入要删除的员工的名字:aa
1 : 姓名:aa  年龄:22  部门:研发部  职位:程序员  薪资:2500  工号:研发部001
2 : 姓名:aa  年龄:21  部门:行政部  职位:文员  薪资:3100  工号:行政部001
请输入要删除的员工的序号:2
删除成功!
1.添加员工
2.查看员工
3.删除员工
4.查看薪资最高的员工
5.退出
请输入想要的操作:4
姓名:kk  年龄:35  部门:营销部  职位:营销总监  薪资:8990  工号:营销部002
1.添加员工
2.查看员工
3.删除员工
4.查看薪资最高的员工
5.退出
请输入想要的操作:2
1.按员工姓名查看
2.查看所有员工
请输入查看方式:2
姓名:aa  年龄:22  部门:研发部  职位:程序员  薪资:2500  工号:研发部001
姓名:bb  年龄:31  部门:研发部  职位:主任  薪资:5000  工号:研发部002
姓名:kk  年龄:25  部门:行政部  职位:CEO  薪资:8390  工号:行政部002
姓名:ww  年龄:23  部门:营销部  职位:营销员  薪资:3100  工号:营销部001
姓名:kk  年龄:35  部门:营销部  职位:营销总监  薪资:8990  工号:营销部002

你可能感兴趣的:(16员工管理系统(面对对象与数据本地化))