职员信息管理系统

功能描述:

  1. 职员信息录入
  2. 职员信息删除
  3. 根据员工任意信息查询职员
  4. 所有员工信息展示

开发环境:

  • windows, pycharm, tkinter
    主程序代码实现
import worker_data
import tkinter
from tkinter import ttk  # 导入内部包

# 为什么要捕获异常:初始状态职员管理系统数据文件内容为空,
# 并没有定义work_list,导入一个不存在的变量会导致系统报错
try:
    work_list = worker_data.work_list
except Exception:
    work_list = list()

order_str = ""
order = 2
name, identity, worker_id, index_info = "", "", "", ""

# 姓名合法检测
def name_check(name):
    # 检测传入职员的姓名字符串是否为空
    if not name:
        return "输入姓名无效,请重新输入!"
    return ""

# 身份证合法检测
def identity_check(id_num):
    # 定义一个列表存储所有职员身份证号码,便于后续对输入的身份证号码重复性检测
    identity_list = list()
    # 遍历每个员工的信息
    for temp_dict in work_list:
        # 从员工字典信息中获取身份证号添加到列表identity_list
        identity_list.append(temp_dict["identity"])

    # 判断输入的身份证号在职工系统是否已经存在
    if id_num in identity_list:
        return "员工身份证信息重复,请重新输入!"

    # id_num.isalnum():输入的身份证号码是否字符或数字组成
    # id_num.decimal():输入的身份证号码是否是由纯数字组成
    if len(id_num) != 18 or not (id_num.isalnum()):
        return "输入身份证信息无效,请重新输入!"
    return ""

# 职员id合法检测
def id_check(id_num):
    # 定义一个列表存储所有职员编号,便于后续对输入的职员编号重复性检测
    id_list = list()
    # 遍历每个员工的信息
    for temp_dict in work_list:
        # 从员工字典信息中获取职员编号添加到列表id_list_list
        id_list.append(temp_dict["id"])
    #  判断输入的职员编号在职工系统是否已经存在
    if id_num in id_list:
        return "员工ID信息重复,请重新输入!"

    # 判断输入的职员编号是否为5位
    if len(id_num) != 5:
        return "员工ID应为五位数,请重新输入!"

    return ""

def gui_show(info_list=[], insert=False):
    root = tkinter.Tk()
    root.title("职员管理系统")
    root.geometry("1700x1000")
    global order_str, order

    def print_selection():
        global order, order_str, name, identity, worker_id, index_info
        name = en1.get()
        identity = en2.get()
        worker_id = en3.get()
        index_info = en4.get()

        order_str = libox1.get(libox1.curselection())
        order = order_str[0]
        # 关闭窗口,等待窗口刷新
        root.destroy()

        # 职员信息录入
        if order == "1":
            gui_show(work_list, insert=True)

        # 显示所有职员信息
        elif order == "2":
            gui_show(work_list)

        # 根据传入索引查看符合查询条件的职员信息
        elif order == "3":
            # 输入检索条件(支持姓名,身份证号,职员ID)
            input_str = index_info
            # 定义一个变量query_list用于存储查询到的职员信息
            query_list = list()
            # 遍历每个员工信息
            for dict_info in work_list:
                # 遍历每个员工信息中的每项数据
                # value为项目对应的值;比如项目“姓名”对应值“张三”
                for value in dict_info.values():
                    # 通过传入的检索条件匹配各个项目中的值
                    if input_str in value:
                        # value匹配正确,将该职员信息dict_info添加到查询结果列表query_list中
                        query_list.append(dict_info)
                        # 结束该员工的信息匹配
                        break
            if not query_list:
                order_str = "职员管理系统暂未收录该职工信息!"

            # 将查询到的职员信息输出
            gui_show(query_list)

        # 删除职员
        elif order == "4":
            # 输入要删除的职员id
            input_str = index_info
            # 判断输入的职员编号是否为5位
            if len(input_str) != 5:
                print("员工ID应为五位数...")
                return
            # 遍历每个员工信息
            for dict_info in work_list:
                if input_str == dict_info["id"]:
                    # 将员工信息修改后重新写入文件(保存在磁盘中)用于永久保存
                    # 移除该职员信息
                    work_list.remove(dict_info)
                    order_str = "已成功删除职员编号为 {} 的职员!".format(input_str)
                    with open("worker_data.py", "w", encoding="utf8") as f:
                        # 将职员信息数据转换为字符串后以变量形式存储在py文件中(永久存储)
                        f.write("work_list = " + str(work_list))
                    break
            else:
                order_str = "职员管理系统暂未收录该职工信息!"
            gui_show(work_list)

        # 退出系统或错误指令
        else:
            exit()

    lab_name = tkinter.Label(root, text="姓名: ", anchor='e', height=1)
    lab_name.place(x=10, y=20)
    en1 = tkinter.Entry(root, show=None)
    en1.place(x=10, y=40, width=190, height=25)

    lab_identify = tkinter.Label(root, text="身份证号: ", anchor='e', height=1)
    lab_identify.place(x=10, y=80)
    en2 = tkinter.Entry(root, show=None)
    en2.place(x=10, y=100, width=190, height=25)

    lab_id = tkinter.Label(root, text="职员ID: ", anchor='e', height=1)
    lab_id.place(x=10, y=140)
    en3 = tkinter.Entry(root, show=None)
    en3.place(x=10, y=160, width=190, height=25)

    if insert:
        # 信息录入-添加对录入信息的合法检测,并保留输入框数据
        lab_name['text'] += name_check(name)
        en1.insert("end", name)
        lab_identify['text'] += identity_check(identity)
        en2.insert("end", identity)
        lab_id['text'] += id_check(worker_id)
        en3.insert("end", worker_id)

        # 职员姓名录入检查,检测到非法输入会提示错误并要求重新输入
        if not (name_check(name) + identity_check(identity) + id_check(worker_id)):
            # 将输入的职员信息以字典形式存储到职员信息列表中
            work_list.append({"name": name, "identity": identity, "id": worker_id})
            # 将员工信息写入文件(保存在磁盘中)用于永久保存
            with open("worker_data.py", "w", encoding="utf8") as f:
                # 将职员信息数据转换为字符串后以变量形式存储在py文件中(永久存储)
                f.write("work_list = " + str(work_list))

    # 指令与提示信息展示框
    var = tkinter.StringVar(value=order_str)
    lab1 = tkinter.Label(root, bg="#6666FF", textvariable=var, width=30, height=2)
    lab1.pack()

    # 索引输入框
    lab_index = tkinter.Label(root, text="索引输入", anchor='w', width=30, height=1)
    lab_index.place(x=450, y=80, width=150)
    en4 = tkinter.Entry(root, show=None, bg="#00FF66")
    en4.place(x=450, y=100, width=200, height=30)

    # 确认框
    bt2 = tkinter.Button(root, bg="#FF9900", text="Enter", command=print_selection, activebackground="gray", width=10)
    bt2.pack()

    box_var = tkinter.StringVar()
    box_var.set([
        "1 - 信息录入",
        "2 - 查看所有职员信息",
        "3 - 根据索引查看职员信息",
        "4 - 根据职员ID删除职员信息",
        "0 - 退出系统"
    ])
    libox1 = tkinter.Listbox(root, listvariable=box_var, width=25)
    # 设置初始选中状态
    libox1.selection_set(int(order) - 1)
    libox1.pack()

    columns = ("姓名", "身份证号", "职员ID")
    # 创建表格
    tree = ttk.Treeview(root, show="headings", columns=columns)

    # 设置数据展示属性,作用:只是为了表格内容居中
    # tree.column("姓名", anchor='center')
    # tree.column("身份证号", anchor='center')
    # tree.column("职员ID", anchor='center')

    # 设置表头展示属性,作用:只是为了显示标题的名称
    tree.heading("姓名", text="姓名")
    tree.heading("身份证号", text="身份证号")
    tree.heading("职员ID", text="职员ID")

    # 插入数据到表格
    for work_dict in info_list:
        tree.insert("", 0, values=(work_dict['name'], work_dict['identity'], work_dict['id']))

    tree.pack()
    root.mainloop()

if __name__ == '__main__':
    gui_show()

JSON数据存储(文件名:worker_data.py)

work_list = [{'id': '00001', 'name': 'ddw', 'identity': '123654789654563258'}, {'name': 'eeee', 'identity': '123658965236987569', 'id': '00005'}, {'name': 'dddd', 'identity': '145623698563256986', 'id': '00009'}, {'name': '忐忑', 'identity': '787878787878787878', 'id': '12121'}, {'name': 'www', 'identity': '123654789656568956', 'id': '00002'}, {'name': 'wee', 'identity': '420984699632356998', 'id': '00007'}, {'name': '微软', 'identity': '420984190001010001', 'id': '00006'}, {'name': 'micro', 'identity': '420984190906156559', 'id': '00000'}, {'name': 'sff', 'identity': '123654789653698569', 'id': '00055'}]
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值