欢迎光临散文网 会员登陆 & 注册

备忘记录

2021-10-22 12:25 作者:Power_Tea  | 我要投稿

#! /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("您输入的序号不正确请重新输入!")


备忘记录的评论 (共 条)

分享到微博请遵守国家法律