备忘记录
#! /usr/bin/python3
# coding=utf-8
import os
import xlwt
import xlrd
import smtplib
card_list = []
def show_menu():
"""显示菜单"""
print("*" * 50)
print("")
print("欢迎使用 【 工资条发送系统 】 V 1.0")
print("")
print("选择 【1】 新增人员工资条")
print("选择 【2】 显示全部名单")
print("选择 【3】 搜索工资条")
print("选择 【4】 发送到邮箱")
print("")
print("选择 【0】 退出系统")
print("")
print("*" * 50)
def new_card():
"""
新增名册信息
"""
print("-" * 50)
print("新增人员工资条")
# 1.提示用户输入名片信息
email_str = input("请输入邮箱:")
name_str = input("请输入姓名:")
gz_str = input("请输入基本工资:")
cq_str = input("请输入本月出勤天数:")
sf_str = input("请输入本月实发工资:")
# 2.使用户输入的信息建立一个名片字典
card_dict = {"name": name_str,
"gzi": gz_str,
"chuq": cq_str,
"email": email_str + "@qq.com",
"shif": sf_str}
# 3.将名片字典添加到列表中
card_list.append(card_dict)
# print(card_list) #打印名单出来看一下
# 4.提示用户添加成功
print("添加%s的工资条成功!" % name_str)
def show_all():
"""
显示所有人员信息
:return: 把值返回给函数
"""
print("-" * 50)
print("显示所有人员工资条信息")
if len(card_list) == 0:
print("当前没有任何人员工资条信息记录,请使用新增功能添加!")
return
# 打印表头
for name in ["邮箱", "姓名", "基本工资", "出勤天数", "实发工资"]:
print(name, end="\t")
print("")
# 打印分割线
print("=" * 50)
# 遍历列表依次输出字典信息
for card_dict in card_list:
print("%s\t%s\t%s\t%s\t%s\t" % (card_dict["email"],
card_dict["name"],
card_dict["gzi"],
card_dict["chuq"],
card_dict["shif"]))
def search_card():
"""
搜索人员工资条信息信息
"""
print("-" * 50)
print("人员工资条信息")
# 1.提示用户输入要搜索的姓名
find_name = input("请输入要搜索的姓名:")
# 2.遍历名片列表查询要搜索的姓名,如果没有找到需要提示用户
for card_dict in card_list:
if card_dict["name"] == find_name:
print("邮箱\t\t姓名\t基本工资\t出勤天数\t实发工资")
print("=" * 50)
print("%s\t%s\t%s\t%s\t%s\t" % (card_dict["email"],
card_dict["name"],
card_dict["gzi"],
card_dict["chuq"],
card_dict["shif"]))
# 针对找到的名片记录执行修改和删除的操作
deal_card(card_dict)
break
else:
print("抱歉没有找到%s" % find_name)
def deal_card(find_dict):
"""
处理查找到的人员
:param find_dict: 查找到的人员
"""
action_str = input("请选择要执行的操作 "
"[1] 修改 [2] 删除 [0] 返回上一级")
if action_str == "1":
find_dict["email"] = input_card_info(find_dict["email"], "邮箱:")
find_dict["name"] = input_card_info(find_dict["name"], "姓名:")
find_dict["gzi"] = input_card_info(find_dict["gzi"], "基本工资:")
find_dict["chuq"] = input_card_info(find_dict["chuq"], "出勤天数:")
find_dict["shif"] = input_card_info(find_dict["shif"], "实发工资:")
print("修改信息成功")
elif action_str == "2":
card_list.remove(find_dict)
print("删除信息成功!")
def input_card_info(dict_value, tip_message):
"""
输入人员信息
:param dict_value: 字典中原有的值
:param tip_message: 输入的提示文字
:return: 如果用户输入了内容,就返回内容,否则返回字典中原有的值
"""
result_str = input(tip_message)
if len(result_str) > 0:
return result_str
else:
return dict_value
def w_excel_cards():
"""
导出信息到Excel
"""
# wb = xlwt.Workbook()
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet("员工工资表")
# 3个参数分别为行号,列号,和内容
# 需要注意的是行号和列号都是从0开始的
ws.write(0, 0, "邮箱")
ws.write(0, 1, "姓名")
ws.write(0, 2, "基本工资")
ws.write(0, 3, "出勤天数")
ws.write(0, 4, "实发工资")
# 循环遍历写入Excel
excel_row = 1
for card_dict in card_list:
ws.write(excel_row, 0, card_dict["email"])
ws.write(excel_row, 1, card_dict["name"])
ws.write(excel_row, 2, card_dict["gzi"])
ws.write(excel_row, 3, card_dict["chuq"])
ws.write(excel_row, 4, card_dict["shif"])
excel_row += 1
# 设置单元格宽度,也就是某一列的宽度
ws.col(0).width = 5555
ws.col(1).width = 2222
ws.col(2).width = 2222
ws.col(3).width = 2222
ws.col(4).width = 2222
# 保存excel文件
wb.save('./员工工资表.xlsx')
# print("导出数据成功!!!")
def r_excel_cards():
file_path = "./员工工资表.xlsx"
# 先打开一个文件
wb = xlrd.open_workbook(file_path)
# 获取第一个表
sheet1 = wb.sheet_by_index(0)
# 总行数
nrows = sheet1.nrows
# 后面就通过循环即可遍历数据了
# 取数据
for i in range(1, nrows):
email_str = sheet1.cell_value(i, 0)
name_str = sheet1.cell_value(i, 1)
gz_str = sheet1.cell_value(i, 2)
cq_str = sheet1.cell_value(i, 3)
sf_str = sheet1.cell_value(i, 4)
# 2.使用户输入的信息建立一个名片字典
card_dict = {"name": name_str,
"gzi": gz_str,
"chuq": cq_str,
"email": email_str,
"shif": sf_str}
# 3.将名片字典添加到列表中
card_list.append(card_dict)
def email_qq():
from email.mime.text import MIMEText # 邮件正文
from email.header import Header # 邮件头
# 加载Excel文件
wb = xlrd.open_workbook("员工工资表.xlsx")
sheet = wb.sheet_by_index(0)
user_name = input("请输入您自己的邮箱号:")
user_pass = input("请输入邮箱密码:")
# 登录邮箱
smtp_obj = smtplib.SMTP()
smtp_obj.connect("smtp.qq.com")
smtp_obj.login(user_name + "@qq.com", user_pass)
# 循环遍历Excel
count = 0
table_col_html = '<thead>' # 表头
for row in sheet: # sheet.iter_rows(min_row=0)
count += 1
if count == 1: # 第一行
for col in row:
table_col_html += f"<th>{col.value}</th>"
table_col_html += "</thead>"
# print(table_col_html)
continue
else:
row_text = "<tr>" # 开始一行
for cell in row:
row_text += f"<td>{cell.value}</td>"
row_text += "</tr>" # 结束一行
name = row[1]
staff_email = row[0].value
# print(name.value, staff_email)
mail_body_context = f'''
<h3>{name.value}\t你好:</h3>
<p>请查收您本月工资条,如有疑问电话联系</p>
<table border="1px solid black">
{table_col_html}
{row_text}
</table>
'''
msg_body = MIMEText(mail_body_context, "html", "utf-8")
msg_body["From"] = Header("xxx公司人事部", "utf-8") # 发送者
msg_body["To"] = Header("xxx公司员工", "utf-8") # 接受者
msg_body["Subject"] = Header("xxx公司本月工资", "utf-8") # 主题
# 发邮件
smtp_obj.sendmail(user_name + "@qq.com", [staff_email, ], msg_body.as_string())
print(f"成功发送 {name.value} 的工资条到 {staff_email} 中.....")
if not os.access("./员工工资表.xlsx", os.F_OK):
wb = xlwt.Workbook(encoding='utf-8')
ws = wb.add_sheet("员工工资表")
# 3个参数分别为行号,列号,和内容
# 需要注意的是行号和列号都是从0开始的
ws.write(0, 0, "邮箱")
ws.write(0, 1, "姓名")
ws.write(0, 2, "基本工资")
ws.write(0, 3, "出勤天数")
ws.write(0, 4, "实发工资")
wb.save('./员工工资表.xlsx')
else:
r_excel_cards()
while True:
# 显示菜单
show_menu()
action_str = input("请选择希望执行的操作:")
print("您选择的操作是 【%s】" % action_str)
if action_str in ["1", "2", "3", "4"]:
if action_str == "1":
new_card()
elif action_str == "2":
show_all()
elif action_str == "3":
search_card()
elif action_str == "4":
w_excel_cards()
email_qq()
elif action_str == "0":
print("欢迎再次使用 【 工资条发送系统 】")
w_excel_cards()
break
else:
print("您输入的序号不正确请重新输入!")