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

# coding=utf-8 
# Time    : 2018/8/1 16:50
# Author  : 云水君
# Email   : 632942444@qq.com
# 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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容

  • 好久没有整理出新的东西,发现接下来要整理的格式塔内容很有意义。在通用设计法则这本书里面,这些原则都分散在不同的页里...
    Bearoaroar阅读 2,426评论 1 7
  • 知北游结束了,可不能向以前一样疯玩了,必须得好好规律规律我的生活了。比方说:以前我们上午学两个小时,下午就出...
    独特L阅读 402评论 0 0
  • 剑未佩妥,出门已是江湖。 多年以后我想起师父这句话的时候,他老人家的脸庞就会浮现在那夜里的煤油灯后。油盏昏黄,随风...
    普利斯东特先生阅读 8,194评论 4 3