import calendar
import os
now_year = 2020
now_month = 4
days = calendar.monthrange (now_year,now_month)[1]
#职员系统
#添加职员,删除
#如何实现系统
#1.显示系统功能
#2.让用户选择功能
#3.判断用户选择的指定功能,然后完成相应的操作
#职员系统
#属性:职员列表属性 保存职员信息
#方法:添加职员 计算职员工资 删除职员 显示职员信息等
#职员类
#属性:姓名,职务,月薪
#
class member(object):
def __init__(self,name,post,salary):#名字,职务,月薪
# 添加相关的属性信息
self.name=name
self.post=post
self.salary=salary
class memberSystem(object):
def __init__(self):
# 定义一个列表用于保存学生对象
self.member_list = list()
# 将功能代码放到指定函数里面
def show_menu(self):
'''该函数是为了展示功能界面'''
# 1. 显示系统的功能菜单
print("------职员管理系统1.0------")
print("1.添加职员信息")
print("2.计算职员工资")
print("3.删除职员信息")
print("4.显示所有职员")
print("5.退出管理系统")
# 添加职员函数
# 分析:
# 1. 职员的信息如何表示?
# 2. 管理系统里面的职员信息如何表示?
def add_member(self):
name = input("请输入职员的姓名:")
post = input("请输入职员的职务:")
salary = input("请输入职员的月薪:")
# 添加一个职员,需要自己创建一个职员对象
stu=member(name,post,salary)
# 把对象添加到列表里面
self.member_list.append(stu)
# 显示职员信息
# print(self.member_list)
print("添加成功")
# 显示所有职员函数
def show_all_member(self):
'''该函数用于显示所有的职员信息'''
# 注意列表里面储存的是字典
# 遍历的时候使用enumerate函数可以返回下标
for index, member in enumerate(self.member_list):
# 计算学号=下标+1
member_no = index + 1
print("工号:", member_no,
"姓名:", member.name,
"职务:", member.post,
"月薪:", member.salary)
# 删除职员信息
def delete_member(self):
"""该函数用来删除职员信息"""
# 1.接收用户输入的工号
member_no = int(input("请输入要删除职员的工号:"))
# 2.将学号转换为下标
index = member_no - 1
# 判断下表是否合法
if 0 <= index <= len(self.member_list):
# 需求删除后把这个人的姓名显示出来,使用pop会把删除的内容返回
member = self.member_list.pop(index)
print("%s,删除成功!" % member.name)
else:
print("请输入有效工号!")
# 查询某个职员信息
def query_member(self):
"""该函数用来查询职员信息"""
name = input("请输入要查询职员的姓名:")
day = input("请输入上班天数:")
restday = input("请输入休息天数:")
workingdays = day + restday
for index, member in enumerate(self.member_list):
member_no = index + 1
if member.name == name:
print("工号:", member_no,
"职员:", member.name,
"职务:", member.post,
"月薪:", member.salary)
onedaysalary = (int(salary) / int(days))#计算一天工资
wages = (int(onedaysalary) * (int(day)+int(restday)))#计算一个月工资
i = 0
if workingdays == days:
i = 0
else:
i += 100
realwages = (int(wages) + int(i))
print("您的工资是:",int(realwages))
break
# 当循环语句没有执行break,表示没有该学生信息执行else里面的语句
# 当循环执行break语句的时候,说明该学生信息存在,不会执行else里面的语句
# 注意:当for循环与else一起使用的时候,如果没有执行for循环里面的break则会执行else语句!!!
else:
print("对不起,没有该职员")
# 讲列表里面的数据保存到文件里面
def save_file(self):
# 1.打开文件 要以w方式打开
file=open("member_list.data","w",encoding="utf-8")
#2.把数据写入文件(把列表转换为字符串类型)
# 把列表里面的每一个对象转换成学生列表里面的字典,把对象的属性信息保存到字典里面
# stu.__dict__ 获取学生的字典信息把对象的属性信息以字典的形式返回
new_list=[stu.__dict__ for stu in self.member_list]
student_list_str=str(new_list)
print(member_list_str,type(member_list_str))
file.write(member_list_str)
file.close()
# 加载文件里面的内容,将文件里面的内容加载到列表里面****
def load_file(self):
# 1.判断文件是否存在 返回值类型是布尔类型
if os.path.exists("member_list.data"):
# 1.打开文件 r模式
file=open("member_list.data","r",encoding="utf-8")
# 2.读取文件里面的数据
value=file.read()
# 因为从文件里面读取的是字符串类型,所以需要先转换为列表类型
# 注意这里将字符串转换为列表需要使用eval()函数,获取字符串包裹的内容
new_list=eval(value)
print("从文件里面获取的内容为:",new_list,type(new_list))
# 把列表里面每一个学生字典信息转换为对象
# **stu_dict:把字典里面的每一项数据按照关键字传参
# member(**stu_dict)表示创建一个学生对象
new_list=[member(**stu_dict) for stu_dict in new_list]
print(new_list)
# 3.将文件里面的内容添加到列表里面
# 方法一:使用global
# global student_list
# student_list=new_list
# 方法2:方式,把文件中的列表数据扩展到全局变量里面, 这里不需要加上global,因为列表是可变类型
self.member_list.extend(new_list)
file.close()
# 程序入口函数,程序开始时第一个执行的函数
def start(self):
# 当程序运行的时候加载一次文件
self.load_file()
while True:
# 1.显示系统功能菜单
self.show_menu()
# 2.接收用户输入的功能选项
menu_option = input("请输入你要操作的功能选项:")
# 3. 判断用户选择的指定功能,然后完成对应的操作(增删改查的功能)
if menu_option == "1":
print("添加职员信息")
self.add_member()
elif menu_option == "2":
print("计算职员工资")
self.modify_member()
elif menu_option == "3":
print("删除职员信息")
self.delete_member()
elif menu_option == "4":
print("显示职员信息")
self.show_all_member()
elif menu_option == "5":
print("程序退出")
self.save_file()
break
system = memberSystem()
system.start()
print("-----end----")
|