Day13-作业

2018-08-02  本文已影响0人  晓晓的忍儿

类和调用

'''__author__==fubo'''

'''
作业:
面向对象人力资源管理系统:  

- 能存多个员工信息   
 (每个员工的信息有:姓名、年龄、工号、薪资、职位、部门)
- 新员工入职(添加员工)
- 员工离职(删除员工)
- 查看某个员工的信息
- 查询薪资最高的员工
- 查询指定部门中所有员工的平均薪资
- 求整个公司的员工的平均年龄
(可以根据能力改善和添加功能,做到尽量贴近生活)
'''
import doc_method as doc
from random import randint
class Staff:
    def __init__(self,name='',age=0,salary=0,position=''):
        self.name=name
        self.age=age
        self.job_num=''
        self.salary=salary
        self.position=position
    @classmethod
    def num(cls):
        return 'py1805'+str(randint(0,50)).rjust(3,'0')
class Depart(Staff):
    def __init__(self,depart='',staffs=[]):
        self.depart=depart
        self.staffs=staffs[:]
    def add_staff(self,name,age,salary,position):
        dict1={}
        staff=Staff(name,age,salary,position)
        dict1['name']=staff.name
        dict1['age'] = staff.age
        dict1['job_num'] =staff.num()
        dict1['salary'] =staff.salary
        dict1['position']=staff.position
        dict1['depart']=self.depart
        dict2=doc.get_r_doc('./data_base.json')
        if dict2==2 or dict2==3:
            dict3={}
            list1=[]
            list1.append(dict1)
            dict3[self.depart]=list1
            doc.set_doc('./data_base.json', doc.get_json_data(dict3))
            print('添加成功')
        elif self.depart in doc.get_python_data(dict2):
            list4=[]
            dict2 = doc.get_python_data(dict2)
            list4=list.copy(dict2[self.depart])
            list4.append(dict1)
            dict2[self.depart]=list4
            doc.set_doc('./data_base.json', doc.get_json_data(dict2))
        else:
            list3 = []
            list3.append(dict1)
            dict2 = doc.get_python_data(dict2)
            dict2[self.depart]=list3
            doc.set_doc('./data_base.json', doc.get_json_data(dict2))
        dict4 = doc.get_r_doc('./data_base.json')
        dict4 = doc.get_python_data(dict4)
        self.staffs=list.copy(dict4[self.depart])

        # dict5= doc.get_python_data(dict4)
        # self.staffs.copy(dict5['self.depart'])
    def check_staff(self,str=''):
        if self.staffs:
            list1=[]
            for staff in self.staffs:
                if str==staff['name'] or str==staff['job_num']:
                    print('name:%s age: %d job_num:%s salary:%d position:%s depart:%s' % (\
                    staff['name'], staff['age'], staff['job_num'], staff['salary'], staff['position'], staff['depart']))
                    list1.append(staff)
            if  len(list1)==0:
                print('%s没有这个人'% staff['depart'])
            return list1
        else:
            print('该部门没有人')
            return
    def all_staff(self):
        if self.staffs:
            for staff in self.staffs:
                print('name:%s age: %d job_num:%s salary:%d position:%s depart:%s' % (staff['name'], staff['age'], staff['job_num'], staff['salary'], staff['position'], staff['depart']))
            return
        else:
            print('该部门没有人')
            return
    def del_staff(self, name='', num1=''):
        list1=self.check_staff(str1)
        if list1:
            num2=0
            for staff in list1:
                print(num2,'name:%s age: %d job_num:%s salary:%d position:%s depart:%s' % (staff['name'], staff['age'],staff['job_num'], staff['salary'],staff['position'], staff['depart']))
                num2 += 1
            k=int(input('请选择要删除的项:'))
            dict3 = doc.get_r_doc('./data_base.json')
            dict3 = doc.get_python_data(dict3)
            self.staffs.remove(list1[k])
            dict3[staff['depart']]=self.staffs
            doc.set_doc('./data_base.json', doc.get_json_data(dict3))
            print('删除成功')
            return 1
        else:
            print('%s部门已经没人了'% self.depart)
            return
    def check_salary(self):
        if self.staffs:
            max_salary=self.staffs[0]['salary']
            sum=0
            num=0
            max_staff=[]
            for staff in self.staffs:
                sum+=staff['salary']
                num+=1
                if max_salary<staff['salary']:
                    max_salary=staff['salary']
                    max_staff.append(staff)
                else:
                    max_staff.append(staff)
            return int(sum/num),max_staff
        else:
            print('该部门没有人')
            return

    def check_age(self):
        if self.staffs:
            sum = 0
            num = 0
            for staff in self.staffs:
                sum += staff['age']
                num += 1
            return int(sum / num)
        else:
            print('该部门没有人')
            return 0

if __name__ == '__main__':
    def cover():
        print('*************************')
        print('欢迎进入力资源管理系统')
        print('0.退出系统')
        print('1.添加员工')
        print('2.删除员工')
        print('3.查看员工的信息')
        print('4.查询薪资最高的员工')
        print('5.查询平均薪资')
        print('6.求整个公司的员工的平均年龄')
        print('*************************')
        mul=input('请选择')
        return mul


    dep = Depart()
    while True:
        mul=cover()
        if mul=='0':
            break
        elif mul=='1':
            while True:
                depart=input('请输入部门,然后添加信息:')
                dep.depart=depart
                name=input('姓名:')
                age=int(input('年龄:'))
                salary=int(input('薪水:'))
                position=input('职位:')
                dep.add_staff(name, age, salary, position)
                print(dep.staffs)
                mul1=input('输入1继续添加,输入其他返回首页')
                if mul1!='1':
                    break
        elif mul == '2':
            while True:
                dict1=doc.get_r_doc('./data_base.json')
                if dict1==2 or dict1==3:
                    print('系统中没有任何数据')
                    mul2 = input('输入True类型的值返回首页')
                    if mul2:
                        break
                dict1= doc.get_python_data(dict1)
                str1 = input('请输入开除员工姓名或工号:')
                for dep1 in dict1:
                    dep.staffs=list.copy(dict1[dep1])
                    dep.del_staff(str1)
                mul1 = input('输入1继续添加,输入其他返回首页')
                if mul1 != '1':
                    break
        elif mul == '3':
            while True:
                dict1 = doc.get_r_doc('./data_base.json')
                dict1 = doc.get_python_data(dict1)
                if dict1 == 2 or dict1 == 3:
                    print('系统中没有任何数据')
                    mul2 = input('输入True类型的值返回首页')
                    if mul2:
                        break
                str3 = input('输入姓名,工号单独查找,enter查看全部')
                for dep1 in dict1:
                    dep.staffs=list.copy(dict1[dep1])
                    if str3:
                        dep.check_staff(str3)
                    else:
                        dep.all_staff()
                mul1 = input('输入1继续添加,输入其他返回首页')
                if mul1 != '1':
                    break
        elif mul == '4':
            dict4 = doc.get_r_doc('./data_base.json')
            dict4 = doc.get_python_data(dict4)
            if dict4 == 2 or dict4 == 3:
                print('系统中没有任何数据')
                mul2 = input('输入True类型的值返回首页')
                if mul2:
                    break
            max_sa=0
            sum=0
            num=0
            list4=[]
            for dep1 in dict4:
                dep.staffs = list.copy(dict4[dep1])
                avg,max=dep.check_salary()
                sum+=avg
                num+=1
                if max_sa<int(max[0]['salary']):
                    list4=[]
                    max_sa=max[0]['salary']
                    list4.append(max[0])
            print('最高工资员工是:%s age: %d job_num:%s salary:%d position:%s depart:%s' % (list4[0]['name'], list4[0]['age'], list4[0]['job_num'],list4[0]['salary'], list4[0]['position'], list4[0]['depart']))
        elif mul == '5':
            dict5 = doc.get_r_doc('./data_base.json')
            dict5 = doc.get_python_data(dict5)
            if dict5 == 2 or dict5 == 3:
                print('系统中没有任何数据')
                mul2 = input('输入True类型的值返回首页')
                if mul2:
                    break
            max_sa = 0
            sum = 0
            num = 0
            list4 = []
            for dep1 in dict5:
                dep.staffs = list.copy(dict5[dep1])
                avg, max = dep.check_salary()
                sum += avg
                num += 1
            print('平均薪水为%d' % (int(sum / num)))
        elif mul == '6':
            dict6 = doc.get_r_doc('./data_base.json')
            dict6 = doc.get_python_data(dict6)
            if dict6 == 2 or dict6 == 3:
                print('系统中没有任何数据')
                mul2 = input('输入True类型的值返回首页')
                if mul2:
                    break
            max_sa = 0
            sum = 0
            num = 0
            list4 = []
            for dep1 in dict6:
                dep.staffs = list.copy(dict6[dep1])
                avg_age = dep.check_age()
                sum +=avg_age
                num += 1
            print('平均年龄为%d' % (int(sum / num)))


文件操作函数:

'''__author__==fubo'''

'''

#判断方法'./files/manages.json'
'''
import json
def get_r_doc(address):
    '''
    判断address对应的文件是否存在或者文件是否为空
    :param address: 文件地址
    :return: 返回1文档存在且不为空和2文档不存在,3文档存在但为空
    '''
    try:
        with open(address, 'r', encoding='utf-8') as f:
            dict = json.load(f)
            dict=get_python_data(dict)
            return dict
    except FileNotFoundError:
        # print('系统中没有该文档')
        return 2
    except json.decoder.JSONDecodeError:
        # print('文档为空')
        return 3
def set_doc(*data):
    """
    创建一个.json文档
    :param address: 地址
    :param type: 写的类型
    :param data:
    :return:
    """
    print('sssf')
    with open(data[0], 'w', encoding='utf-8') as f:
        if len(data)==2:
            write_doc=json.dump(get_json_data(data[1]),f)
            return write_doc
        else:
            return

def get_json_data(data):
    '''
    将python数据转换成json数据
    :param data: 数据
    :return: 返回json数据
    '''
    json_data=json.dumps(data)
    return json_data
def get_python_data(data):
    '''
    将json数据转换成python数据
    :param data: json数据
    :return: 返回python数据
    '''
    python_data=json.loads(data)
    return python_data

if __name__ == '__main__':
    # if not get_r_judge('./files/text.json'):
    #     print('你是第一个分组')
    # if  get_r_doc('./files/manages.json'):
        set_doc('./files/manages.json','name')
        print(get_r_doc('./files/manages.json'))


结果:

D:\Python项目\Day13-面向对象\object2\venv\word.py\Scripts\python.exe D:/Python项目/Day13-面向对象/object2/作业.py
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择1
请输入部门,然后添加信息:财务部
姓名:李四
年龄:32
薪水:6000
职位:副部长
[{'name': '张三', 'age': 23, 'job_num': 'py1805038', 'salary': 44444, 'position': '部长', 'depart': '财务部'}, {'name': '李四', 'age': 32, 'job_num': 'py1805039', 'salary': 6000, 'position': '副部长', 'depart': '财务部'}]
输入1继续添加,输入其他返回首页1
请输入部门,然后添加信息:销售部
姓名:小人
年龄:23
薪水:5000
职位:干事
[{'name': '小人', 'age': 23, 'job_num': 'py1805013', 'salary': 5000, 'position': '干事', 'depart': '销售部'}]
输入1继续添加,输入其他返回首页1
请输入部门,然后添加信息:销售部
姓名:小明
年龄:23
薪水:4000
职位:干事
[{'name': '小人', 'age': 23, 'job_num': 'py1805013', 'salary': 5000, 'position': '干事', 'depart': '销售部'}, {'name': '小明', 'age': 23, 'job_num': 'py1805022', 'salary': 4000, 'position': '干事', 'depart': '销售部'}]
输入1继续添加,输入其他返回首页3
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择2
请输入开除员工姓名或工号:小明
财务部没有这个人
销售部部门已经没人了
人事部没有这个人
销售部部门已经没人了
name:小明 age: 23 job_num:py1805022 salary:4000 position:干事 depart:销售部
0 name:小明 age: 23 job_num:py1805022 salary:4000 position:干事 depart:销售部
请选择要删除的项:0
删除成功
输入1继续添加,输入其他返回首页3
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择3
输入姓名,工号单独查找,enter查看全部
name:张三 age: 23 job_num:py1805038 salary:44444 position:部长 depart:财务部
name:李四 age: 32 job_num:py1805039 salary:6000 position:副部长 depart:财务部
name:王五 age: 34 job_num:py1805021 salary:45555 position:部长 depart:人事部
name:李霞 age: 23 job_num:py1805008 salary:4444 position:干事 depart:人事部
name:小人 age: 23 job_num:py1805013 salary:5000 position:干事 depart:销售部
输入1继续添加,输入其他返回首页3
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择4
最高工资员工是:王五 age: 34 job_num:py1805021 salary:45555 position:部长 depart:人事部
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择5
平均薪水为18407
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择6
平均年龄为26
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择0
Process finished with exit code 0

错误输入得到的结果:

欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择3
输入姓名,工号单独查找,enter查看全部sdjfsk
财务部没有这个人
人事部没有这个人
销售部没有这个人
输入1继续添加,输入其他返回首页3
*************************
欢迎进入力资源管理系统
0.退出系统
1.添加员工
2.删除员工
3.查看员工的信息
4.查询薪资最高的员工
5.查询平均薪资
6.求整个公司的员工的平均年龄
*************************
请选择7
Traceback (most recent call last):
  File "D:/Python项目/Day13-面向对象/object2/作业.py", line 271, in <module>
    raise IndexError
IndexError

Process finished with exit code 1
上一篇下一篇

猜你喜欢

热点阅读