基于Python+MySQL的员工档案管理系统

目录
目 录 1
一、系统定义 1 1
二、 需求分析 1
(一) 系统综合需求 2
(二) 系统逻辑模型 2
三、 系统设计 4
(一)概念结构设计 5
四、 详细设计 10
(一) 开发平台及工具 10
(二) 创建数据库和表 11
(三) 设计框架 12
(四) 界面设计 14
五、 课程设计总结 17
六、 参考文献 18
七、 附录 18
二、需求分析
(一)系统综合需求
作为一个员工管理系统,应当为公司的员工信息管理提供便利。同时给用户提供方便、友好而简洁的界面进行操作和使用。
在实际的公司员工管理过程中,通常有三类用户:管理员(BOSS)、部门经理以及员工。显然,用户的身份不同,所拥有的权限也不会相同,因此我们应当为不同身份的用户提供不同的操作权限和界面。所以在此我们通过设立三种不同类型的账号,不同账号类型登入系统后的功能不同来达到此效果。
管理员(BOSS)拥有最高级别的权限,可以对所有员工和经理的信息进行增加、删除、修改和查找操作,同时可以对公司的所有员工、经理的登录账号和密码进行管理,若有新员工入职,管理员不仅需要增加其信息,还需要为其设立一个可登录系统的账号,同时,如有员工离职,则对其信息和账号进行删除。员工、经理的信息更新和忘记密码等功能均由管理员完成。
部门经理由于对自己所属部门的员工拥有领导权,因此拥有管理员的部分权限,经理只能对属于自己部门的员工的信息进行增加、删除、修改和查找操作,同时,经理登录后可以查看自己的信息和修改自己的登录密码。经理无法查看和修改其他经理的信息,也无法对其他部门的员工信息进行管理,在经理进行增加员工操作时,会检查新增员工的部门信息是否与经理本人相同,不相同则弹出Error提示框,告诉经理没有该部门的操作权限。由此解决了经理可能存在的滥用职权等问题。
作为公司的基层,员工不具有对其他人员的领导权,因此员工登录后的功能实现比较简单:员工登录后只能查看自己的信息和修改自己的登录密码。由此实现了一定的保密能力,并在很大程度上避免了信息的泄露和外流。
由此也实现了管理员(BOSS)-部门经理-员工的三级管理模式,比较契合实际企业的员工管理情况。

#账号管理系统只对管理员开放 from tkinter import * from tkinter import ttk import tkinter.messagebox import pymysql from PIL import Image,ImageTk #连接数据库 database=pymysql.connect(host='localhost',user='root',password='123456',database='employee_system',charset='gb2312') cursor=database.cursor() def get_image(file_name,width,height): im=Image.open(file_name).resize((width,height)) return ImageTk.PhotoImage(im) mode=0 def button_admin_login(): global mode username_input = entry1.get().strip() password_input = entry2.get().strip() cursor.execute('select * from admin where user_name = "%s" and password = "%s"' % (username_input,password_input)) if (len(cursor.fetchall()) > 0): print("已成功登录") mynewwin.destroy() mode=1 else: tkinter.messagebox.showerror("错误","用户名或密码错误") mynewwin=Tk() mynewwin.title('员工账号管理系统登录页面') mynewwin.geometry('1080x600') canvans_myWindow=Canvas(mynewwin,width=720,height=400) im_root=get_image('D:\数据库课程设计\湖南工程学院员工账号管理系统.png',720,400) canvans_myWindow.create_image(400,200,image=im_root) canvans_myWindow.pack() Label(mynewwin, text="管理员账号:",font=('Arial 12 bold'),width=10,height=1).place(relx = 0.10, rely = 0.75) Label(mynewwin, text="管理员密码:",font=('Arial 12 bold'),width=10,height=1).place(relx = 0.10, rely = 0.85) button_login = Button(text = '登陆',relief = 'raised', command = button_admin_login) button_login.place(relx = 0.5, rely = 0.92) entry1=Entry(mynewwin) entry2=Entry(mynewwin,show='*') entry1.place(relx = 0.45, rely = 0.75) entry2.place(relx = 0.45, rely = 0.85) #进入消息循环 mynewwin.mainloop() def button_insert_account_emp(): user_name=entry_user.get().strip() password=entry_pass.get().strip() print(user_name,password) cursor.execute('select * from employee_login where user_name ="%s"'%(user_name)) data=cursor.fetchall() if len(data)>0: tkinter.messagebox.showerror(title='Error',message='该账号已存在!') return None cursor.execute('insert into employee_login values("%s","%s")' % (user_name,password)) database.commit() tkinter.messagebox.showinfo(title='新增员工账号密码',message='新增员工账号成功!') def button_update_account_emp(): user_name=entry_user.get().strip() password=entry_pass.get().strip() print(user_name,password) cursor.execute('update employee_login set password="%s" where user_name="%s"' % (password,user_name)) database.commit() tkinter.messagebox.showinfo(title='修改员工账号密码',message='修改员工账号密码成功!') def button_delete_account_emp(): user_name=entry_user.get().strip() password=entry_pass.get().strip() print(user_name,password) cursor.execute('delete from employee_login where user_name="%s"'%(user_name)) database.commit() tkinter.messagebox.showinfo(title='删除员工账号密码',message='删除员工账号密码成功!') def button_insert_account_ma(): user_name=entry_user.get().strip() password=entry_pass.get().strip() print(user_name,password) cursor.execute('select * from manager_login where user_name ="%s"'%(user_name)) data=cursor.fetchall() if len(data)>0: tkinter.messagebox.showerror(title='Error',message='该账号已存在!') return None cursor.execute('insert into manager_login values("%s","%s")'%(user_name,password)) database.commit() tkinter.messagebox.showinfo(title='新增经理账号密码',message='新增经理账号密码成功!') def button_update_account_ma(): user_name=entry_user.get().strip() password=entry_pass.get().strip() print(user_name,password) cursor.execute('update manager_login set password="%s" where user_name="%s"' % (password,user_name)) database.commit() tkinter.messagebox.showinfo(title='修改经理账号密码',message='修改经理账号密码成功!') def button_delete_account_ma(): user_name=entry_user.get().strip() password=entry_pass.get().strip() print(user_name,password) cursor.execute('delete from manager_login where user_name="%s"'%(user_name)) database.commit() tkinter.messagebox.showinfo(title='删除经理账号密码',message='删除经理账号密码成功!') def button_update_account_my(): user_name=entry_user.get().strip() password=entry_pass.get().strip() print(user_name,password) cursor.execute('update admin set password="%s" where user_name="%s"' % (password,user_name)) database.commit() tkinter.messagebox.showinfo(title='修改管理员密码',message='修改管理员密码成功,请您牢记新密码!') if mode==1: print("已进入系统") mynewwin=Tk() mynewwin.title('账号管理系统') mynewwin.geometry('720x520') #各个窗体效果 Label(mynewwin, text=" ",font=('Arial 12 bold'),width=4,height=1).grid(column = 0, row = 0) Label(mynewwin, text="账号:",font=('Arial 12 bold'),width=10,height=1).grid(column=0,row=1) entry_user=Entry(mynewwin) entry_user.grid(column=1,row=1) Label(mynewwin, text="密码:",font=('Arial 12 bold'),width=10,height=1).grid(column=2,row=1) entry_pass=Entry(mynewwin) entry_pass.grid(column=3,row=1) #Label(mynewwin, text=" ",font=('Arial 12 bold'),width=4,height=1).grid(column = 0, row = 1) button_insert_emp=Button(mynewwin,text='新增员工账号密码',relief='raised',command=button_insert_account_emp) button_insert_emp.place(relx=0.3,rely=0.2) button_update_emp=Button(mynewwin,text='修改员工账号密码',relief='raised',command=button_update_account_emp) button_update_emp.place(relx=0.5,rely=0.2) button_delete_emp=Button(mynewwin,text='删除员工账号密码',relief='raised',command=button_delete_account_emp) button_delete_emp.place(relx=0.7,rely=0.2) #Label(mynewwin, text=" ",font=('Arial 12 bold'),width=4,height=1).grid(column = 0, row = 2) button_insert_ma=Button(mynewwin,text='新增经理账号密码',relief='raised',command=button_insert_account_ma) button_insert_ma.place(relx=0.3,rely=0.4) button_update_ma=Button(mynewwin,text='修改经理账号密码',relief='raised',command=button_update_account_ma) button_update_ma.place(relx=0.5,rely=0.4) button_delete_ma=Button(mynewwin,text='删除经理账号密码',relief='raised',command=button_delete_account_ma) button_delete_ma.place(relx=0.7,rely=0.4) button_update_my=Button(mynewwin,text='修改管理员密码',relief='raised',command=button_update_account_my) button_update_my.place(relx=0.75,rely=0.04) mynewwin.mainloop()











相关新闻

什么是GC

什么是GC

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
Feign踩坑源码分析 -- 请求参数分号变逗号

Feign踩坑源码分析 -- 请求参数分号变逗号

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:10:54 阅读更多 →
MIPI D-PHY一致性测试失败排查:从CTS规范到Layout与调参的工程实践

MIPI D-PHY一致性测试失败排查:从CTS规范到Layout与调参的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 1:09:54 阅读更多 →

最新新闻

不登录、不注册,如何免费完整破解所有国际版 Unity?UniHacker 快速上手指南

不登录、不注册,如何免费完整破解所有国际版 Unity?UniHacker 快速上手指南

不登录、不注册,如何免费完整破解所有国际版 Unity?UniHacker 快速上手指南 【免费下载链接】UniHacker 为Windows、MacOS、Linux和Docker修补所有版本的Unity3D和UnityHub 项目地址: https://gitcode.com/GitHub_Trending/un/UniHacker UniHacke…

2026/10/21 1:44:29 阅读更多 →
戴森球计划燃料棒蓝图选型:FactoryBluePrints 的 3 条生产链 + 导入排障指南

戴森球计划燃料棒蓝图选型:FactoryBluePrints 的 3 条生产链 + 导入排障指南

戴森球计划燃料棒蓝图选型:FactoryBluePrints 的 3 条生产链 导入排障指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints 是戴森球计划的工…

2026/10/21 1:44:29 阅读更多 →
Switch 游戏如何装进电脑:yuzu 模拟器完整指南

Switch 游戏如何装进电脑:yuzu 模拟器完整指南

Switch 游戏如何装进电脑:yuzu 模拟器完整指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu 是一款开源的任天堂 Switch 模拟器,能把 NSP、XCI 等 Switch 游戏文件装进电脑真正跑起来…

2026/10/21 1:44:29 阅读更多 →
pytorch-metric-learning Testers 完整指南:从选型到训练闭环,一次讲透度量学习模型评估

pytorch-metric-learning Testers 完整指南:从选型到训练闭环,一次讲透度量学习模型评估

pytorch-metric-learning Testers 完整指南:从选型到训练闭环,一次讲透度量学习模型评估 【免费下载链接】ocp FAIR Chemistrys library of machine learning methods for chemistry 项目地址: https://gitcode.com/GitHub_Trending/oc/ocp pyto…

2026/10/21 1:44:29 阅读更多 →
gamdl 教程:如何用 3 条命令下载 Apple Music 的 ALAC 无损音乐

gamdl 教程:如何用 3 条命令下载 Apple Music 的 ALAC 无损音乐

gamdl 教程:如何用 3 条命令下载 Apple Music 的 ALAC 无损音乐 【免费下载链接】gamdl A command-line app for downloading Apple Music songs, music videos and post videos. 项目地址: https://gitcode.com/GitHub_Trending/ga/gamdl Apple Music 的普通…

2026/10/21 1:44:29 阅读更多 →
douyin-downloader 教程:从扫码登录到抖音主页作品批量去水印下载

douyin-downloader 教程:从扫码登录到抖音主页作品批量去水印下载

douyin-downloader 教程:从扫码登录到抖音主页作品批量去水印下载 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fal…

2026/10/21 1:43:29 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →