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