美文网首页
Day13-作业

Day13-作业

作者: 晓晓的忍儿 | 来源:发表于2018-08-02 01:24 被阅读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
    

    相关文章

      网友评论

          本文标题:Day13-作业

          本文链接:https://www.haomeiwen.com/subject/qoclvftx.html