You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
448 lines
19 KiB
448 lines
19 KiB
from tkinter import *
|
|
from tkinter import ttk
|
|
import mysql_internes
|
|
from tkinter import messagebox
|
|
|
|
|
|
# 实现录入页面的类
|
|
class InsertFrame(Frame):
|
|
def __init__(self, root):
|
|
super().__init__(root)
|
|
self.id = StringVar()
|
|
self.name = StringVar()
|
|
self.department = StringVar()
|
|
self.sex = StringVar()
|
|
self.wages = StringVar()
|
|
self.hiredata = StringVar()
|
|
|
|
# 打印录入是否成功信息
|
|
self.status_insert = StringVar()
|
|
|
|
self.insert_page()
|
|
|
|
|
|
# 打印修输入的项目以及输入框
|
|
def insert_page(self):
|
|
Label(self, text='工 号 : ').grid(row=1, column=1, pady=5)
|
|
self.entry_id = Entry(self, textvariable=self.id)
|
|
self.entry_id.grid(row=1, column=2, pady=5)
|
|
|
|
Label(self, text = '姓 名 : ').grid(row=2, column = 1, pady=5)
|
|
self.entry_name = Entry(self, textvariable=self.name)
|
|
self.entry_name.grid(row = 2, column = 2, pady = 5)
|
|
|
|
Label(self, text='部 门 : ').grid(row=3, column=1, pady=5)
|
|
self.entry_department = Entry(self, textvariable=self.department)
|
|
self.entry_department.grid(row=3, column=2, pady=5)
|
|
|
|
Label(self, text='性 别 : ').grid(row=4, column=1, pady=5)
|
|
self.entry_sex = Entry(self, textvariable=self.sex)
|
|
self.entry_sex.grid(row=4, column=2, pady=5)
|
|
|
|
Label(self, text='薪 资 : ').grid(row=5, column=1, pady=5)
|
|
self.entry_wages = Entry(self, textvariable=self.wages)
|
|
self.entry_wages.grid(row=5, column=2, pady=5)
|
|
|
|
Label(self, text='入职时间 : ').grid(row=6, column=1, pady=5)
|
|
self.entry_hiredata = Entry(self, textvariable=self.hiredata)
|
|
self.entry_hiredata.grid(row=6, column=2, pady=5)
|
|
|
|
Button(self, text = '清空', command = self.insert_deleteValue).grid(row=7, column=1, pady=10)
|
|
Button(self, text = '录入', command = self.insert_data).grid(row = 7, column = 3, pady = 10)
|
|
|
|
Label(self, textvariable=self.status_insert).grid(row=8, column=2, padx=10)
|
|
# 输出所有实习生信息
|
|
def insert_data(self):
|
|
if not self.id.get():
|
|
self.insert_id = int(0)
|
|
else: self.insert_id = int(self.id.get())
|
|
|
|
if not self.name.get():
|
|
self.insert_name = 'NULL'
|
|
else: self.insert_name = self.name.get()
|
|
|
|
if not self.department.get():
|
|
self.insert_department = 'NULL'
|
|
else: self.insert_department = self.department.get()
|
|
|
|
if not self.sex.get():
|
|
self.insert_sex = 'NULL'
|
|
else: self.insert_sex = self.sex.get()
|
|
|
|
if not self.wages.get():
|
|
self.insert_wages = 'NULL'
|
|
else: self.insert_wages = self.wages.get()
|
|
|
|
if not self.hiredata.get():
|
|
self.insert_hiredata = 'NULL'
|
|
else: self.insert_hiredata = self.hiredata.get()
|
|
|
|
flag, s = mysql_internes.check_interne_id(self.insert_id) # 查询id
|
|
self.status_insert.set(s)
|
|
if flag == False: # 若已经存在的情况,不能录入
|
|
return
|
|
|
|
ins = (self.insert_id, self.insert_name, self.insert_department, self.insert_sex,
|
|
self.insert_wages, self.insert_hiredata)
|
|
mysql_internes.insert(ins) # 这一部分为存在并导入信息
|
|
|
|
|
|
# 删除输入框中的内容
|
|
def insert_deleteValue(self):
|
|
self.entry_id.delete(0, END)
|
|
self.entry_name.delete(0, END)
|
|
self.entry_department.delete(0, END)
|
|
self.entry_sex.delete(0, END)
|
|
self.entry_wages.delete(0, END)
|
|
self.entry_hiredata.delete(0, END)
|
|
|
|
|
|
# 实现查找功能的类
|
|
class SearchFrame(Frame):
|
|
def __init__(self, root):
|
|
super().__init__(root)
|
|
|
|
self.table_search_view = Frame()
|
|
|
|
self.show_table_search()
|
|
|
|
# 实现显示查询页面的整个大框架分布
|
|
def show_table_search(self):
|
|
columns = ("id", "name", "department", "sex", "wages", "hiredata")
|
|
columns_values = ("工号", "姓名", "部门", "性别", "薪资", "入职时间")
|
|
self.tree_view = ttk.Treeview(self, show = 'headings', columns = columns)
|
|
|
|
for col in columns:
|
|
self.tree_view.column(col, width = 80, anchor = 'center')
|
|
|
|
for col, colvalue in zip(columns, columns_values):
|
|
self.tree_view.heading(col, text = colvalue)
|
|
|
|
self.tree_view.pack(fill = BOTH, expand = True)
|
|
self.show_search_data()
|
|
|
|
self.department_department = StringVar()
|
|
Entry(self, textvariable=self.department_department).pack(side = LEFT)
|
|
Button(self, text='按部门查询', command=self.search_department).pack(side=LEFT) # , command = self.treeviewClick
|
|
Button(self, text = '删 除', command=self.treeviewClick).pack(side = RIGHT)
|
|
|
|
# 下面循环加函数是实现点击标题实现排序
|
|
def treeview_sort_column1(tv, col, reverse): # Treeview、列名、排列方式
|
|
l = [(tv.set(k, col), k) for k in tv.get_children('')]
|
|
l.sort(key=lambda t: t[0], reverse=reverse) # 排序方式
|
|
for index, (val, k) in enumerate(l): # 根据排序后索引移动
|
|
tv.move(k, '', index)
|
|
tv.heading(col, command=lambda: treeview_sort_column1(tv, col, not reverse)) # 重写标题,使之成为再点倒序的标题
|
|
self.tree_color() # 启动程序,根据奇偶行设为不同的背景颜色
|
|
|
|
def treeview_sort_column2(tv, col, reverse): # Treeview、列名、排列方式
|
|
l = [(tv.set(k, col), k) for k in tv.get_children('')]
|
|
l.sort(reverse=reverse) # 排序方式
|
|
for index, (val, k) in enumerate(l): # 根据排序后索引移动
|
|
tv.move(k, '', index)
|
|
tv.heading(col, command=lambda: treeview_sort_column2(tv, col, not reverse)) # 重写标题,使之成为再点倒序的标题
|
|
self.tree_color() # 启动程序,根据奇偶行设为不同的背景颜色
|
|
|
|
for i in range(6): # 给所有标题加(循环上边的“手工”)
|
|
if i >= 1 and i <=2:
|
|
self.tree_view.heading(columns[i], text=columns_values[i], command=lambda _col=columns[i]: treeview_sort_column2(self.tree_view, _col, False))
|
|
else: self.tree_view.heading(columns[i], text = columns_values[i], command=lambda _col = columns[i]: treeview_sort_column1(self.tree_view, _col, False))
|
|
# 定义背景色风格
|
|
self.tree_view.tag_configure('even', background='lightblue') # even标签设定为浅蓝色背景颜色
|
|
|
|
def search_department(self):
|
|
for _ in map(self.tree_view.delete, self.tree_view.get_children('')):
|
|
pass
|
|
if not self.department_department.get():
|
|
self.show_search_data()
|
|
return
|
|
else:
|
|
self.department_value = self.department_department.get()
|
|
internes = mysql_internes.search_department(self.department_value)
|
|
|
|
index = -1
|
|
for ins in internes:
|
|
self.tree_view.insert('', index + 1, values = (
|
|
ins['id'], ins['name'], ins['department'], ins['sex'],
|
|
ins['wages'], ins['hiredata']
|
|
))
|
|
self.tree_color() # 启动程序,根据奇偶行设为不同的背景颜色
|
|
|
|
def treeviewClick(self): # 单击
|
|
for item in self.tree_view.selection():
|
|
item_text = self.tree_view.item(item, "values")
|
|
mysql_internes.delete_id(item_text[0]) # 删除所选行的第一列的值
|
|
self.show_search_data()
|
|
|
|
# 显示数据库中实习生信息表上的信息
|
|
def show_search_data(self):
|
|
|
|
for _ in map(self.tree_view.delete, self.tree_view.get_children('')): # 删除原本显示的数据
|
|
pass
|
|
internes = mysql_internes.all() # 获取数据库中的信息并以字典形式返回
|
|
index = -1
|
|
for ins in internes:
|
|
self.tree_view.insert('', index + 1, values=(
|
|
ins['id'], ins['name'], ins['department'], ins['sex'],
|
|
ins['wages'], ins['hiredata']
|
|
))
|
|
self.tree_color() # 启动程序,根据奇偶行设为不同的背景颜色
|
|
|
|
def tree_color(self): # 表格栏隔行显示不同颜色函数
|
|
items = self.tree_view.get_children() # 得到根目录所有行的iid
|
|
i = 0 # 初值
|
|
for hiid in items:
|
|
if i / 2 != int(i / 2): # 判断奇偶
|
|
tag1 = '' # 奇数行
|
|
else:
|
|
tag1 = 'even' # 偶数行
|
|
self.tree_view.item(hiid, tag=tag1) # 偶数行设为浅蓝色的tag='even'
|
|
i += 1 # 累加1
|
|
|
|
# 实现删除页面的类
|
|
class DeleteFrame(Frame):
|
|
def __init__(self, root):
|
|
super().__init__(root, width = 570, height = 290)
|
|
|
|
self.delete_interne = StringVar()
|
|
self.status_interne = StringVar()
|
|
|
|
Label(self, text='请输入需要删除实习生的').place(x = 40, y = 60)
|
|
Label(self, text='姓名或者工号').place(x=64, y=80)
|
|
Entry(self, textvariable=self.delete_interne).place(x = 30, y = 100)
|
|
Button(self, text='按工号查询', command=self.id_delete).place(x = 30, y = 130)
|
|
Button(self, text='按姓名查询', command=self.name_delete).place(x=110, y=130)
|
|
Label(self, textvariable=self.status_interne).place(x = 45, y = 160)
|
|
|
|
self.id = StringVar()
|
|
self.name = StringVar()
|
|
self.department = StringVar()
|
|
self.sex = StringVar()
|
|
self.wages = StringVar()
|
|
self.hiredata = StringVar()
|
|
|
|
Label(self, text = '工 号 :').place(x=300, y=20)
|
|
Label(self, textvariable=self.id).place(x=360, y=20)
|
|
Label(self, text='姓 名 :').place(x=300, y=50)
|
|
Label(self, text = '姓 名 :', textvariable=self.name).place(x=360, y=50)
|
|
Label(self, text='部 门 :').place(x=300, y=80)
|
|
Label(self, text = '部 门 :', textvariable=self.department).place(x=360, y=80)
|
|
Label(self, text='性别 :').place(x=300, y=110)
|
|
Label(self, textvariable=self.sex).place(x=360, y=110)
|
|
Label(self, text='薪 资 :').place(x=300, y=140)
|
|
Label(self, textvariable=self.wages).place(x=360, y=140)
|
|
Label(self, text='入职时间 :').place(x=300, y=170)
|
|
Label(self, textvariable=self.hiredata).place(x=360, y=170)
|
|
|
|
self.status_delete = StringVar()
|
|
Button(self, text='删 除', command=self.delete_ins).place(x=340, y=210)
|
|
Label(self, textvariable=self.status_delete).place(x=300, y=250)
|
|
|
|
# 通过工号来删除对应实习生的信息
|
|
def id_delete(self):
|
|
if self.delete_interne.get():
|
|
self.search_user_id = self.delete_interne.get()
|
|
flag, ins = mysql_internes.search_id(self.search_user_id)
|
|
if flag:
|
|
self.id.set(ins[0][0]),self.name.set(ins[0][1])
|
|
self.department.set(ins[0][2]),self.sex.set(ins[0][3])
|
|
self.wages.set(ins[0][4]),self.hiredata.set(ins[0][5])
|
|
self.status_interne.set('数据查询成功')
|
|
else:
|
|
self.status_interne.set(ins)
|
|
else:
|
|
self.status_interne.set('请输入需要查询的信息')
|
|
def name_delete(self):
|
|
if self.delete_interne.get():
|
|
self.search_user_name = self.delete_interne.get()
|
|
flag, ins = mysql_internes.search_name(self.search_user_name)
|
|
if flag:
|
|
self.id.set(ins[0][0])
|
|
self.name.set(ins[0][1])
|
|
self.department.set(ins[0][2])
|
|
self.sex.set(ins[0][3])
|
|
self.wages.set(ins[0][4])
|
|
self.hiredata.set(ins[0][5])
|
|
self.status_interne.set('数据查询成功')
|
|
else:
|
|
self.status_interne.set(ins)
|
|
else:
|
|
self.status_interne.set('请输入需要查询的信息')
|
|
|
|
def delete_ins(self):
|
|
flag, str = mysql_internes.delete_id(self.id.get())
|
|
if not self.id.get():
|
|
str = '需要删除信息不能NULL'
|
|
self.status_delete.set(str)
|
|
|
|
|
|
# 实现修改页面的类
|
|
class ChangeFrame(Frame):
|
|
def __init__(self, root):
|
|
super().__init__(root, width = 570, height = 290)
|
|
# Label(self, text = '修改页面').pack()
|
|
# 查询的修改信息,以及查询、修改成功的提示
|
|
self.change_interne = StringVar()
|
|
self.status_interne = StringVar()
|
|
self.status_name = StringVar()
|
|
|
|
|
|
# 存储实习生信息已经更改的变量
|
|
self.id = StringVar()
|
|
self.name = StringVar()
|
|
self.department = StringVar()
|
|
self.sex = StringVar()
|
|
self.wages = StringVar()
|
|
self.hiredata = StringVar()
|
|
|
|
# 用于存储修改之前的信息
|
|
self.id_change_before = StringVar()
|
|
self.name_change_before = StringVar()
|
|
self.department_change_before = StringVar()
|
|
self.sex_change_before = StringVar()
|
|
self.wages_change_before = StringVar()
|
|
self.hiredata_change_before = StringVar()
|
|
|
|
self.insert_page()
|
|
|
|
|
|
|
|
# 打印修输入的项目以及输入框
|
|
def insert_page(self):
|
|
|
|
Label(self, text='请输入需要查询实习生的').place(x=40, y=60)
|
|
Label(self, text='姓名或者工号').place(x=64, y=80)
|
|
Entry(self, textvariable=self.change_interne).place(x=30, y=100)
|
|
Button(self, text='按工号查询', command=self.id_change).place(x=30, y=130)
|
|
Button(self, text='按姓名查询', command=self.name_change).place(x=110, y=130)
|
|
Label(self, textvariable=self.status_interne).place(x=45, y=160)
|
|
|
|
Label(self, text='工 号 : ').place(x=240, y=20)
|
|
Label(self, textvariable=self.id_change_before).place(x=320, y=20)
|
|
self.entry_id = Entry(self, textvariable=self.id)
|
|
self.entry_id.place(x=380, y=20)
|
|
|
|
Label(self, text='姓 名 : ').place(x=240, y=50)
|
|
Label(self, textvariable=self.name_change_before).place(x=315, y=50)
|
|
self.entry_name = Entry(self, textvariable=self.name)
|
|
self.entry_name.place(x=380, y=50)
|
|
|
|
Label(self, text='部 门 : ').place(x=240, y=80)
|
|
Label(self, textvariable=self.department_change_before).place(x=300, y=80)
|
|
self.entry_department = Entry(self, textvariable=self.department)
|
|
self.entry_department.place(x=380, y=80)
|
|
|
|
Label(self, text='性 别 : ').place(x=240, y=110)
|
|
Label(self, textvariable=self.sex_change_before).place(x=318, y=110)
|
|
self.entry_sex = Entry(self, textvariable=self.sex)
|
|
self.entry_sex.place(x=380, y=110)
|
|
|
|
Label(self, text='薪 资 : ').place(x=240, y=140)
|
|
Label(self, textvariable=self.wages_change_before).place(x=318, y=140)
|
|
self.entry_wages = Entry(self, textvariable=self.wages)
|
|
self.entry_wages.place(x=380, y=140)
|
|
|
|
Label(self, text='入职时间 : ').place(x=240, y=170)
|
|
Label(self, textvariable=self.hiredata_change_before).place(x=318, y=170)
|
|
self.entry_hiredata = Entry(self, textvariable=self.hiredata)
|
|
self.entry_hiredata.place(x=380, y=170)
|
|
|
|
Button(self, text='修 改', command = self.create_user).place(x=320, y=220)
|
|
|
|
Label(self, textvariable=self.status_name).place(x=305, y=250)
|
|
|
|
# 通过工号或者姓名来查询实习生信息,优先通过工号,若未输入工号,则通过姓名来查询
|
|
def id_change(self):
|
|
if self.change_interne.get():
|
|
self.search_user_id = self.change_interne.get()
|
|
flag, ins = mysql_internes.search_id(self.search_user_id)
|
|
if flag:
|
|
self.change_Information(ins)
|
|
self.status_interne.set('数据查询成功')
|
|
else:
|
|
self.status_interne.set(ins)
|
|
else:
|
|
self.status_interne.set('请输入需要查询的信息')
|
|
|
|
def name_change(self):
|
|
if self.change_interne.get():
|
|
self.search_user_name = self.change_interne.get()
|
|
flag, ins = mysql_internes.search_name(self.search_user_name)
|
|
if flag:
|
|
self.change_Information(ins)
|
|
self.status_interne.set('数据查询成功')
|
|
else:
|
|
self.status_interne.set(ins)
|
|
else:
|
|
self.status_interne.set('请输入需要查询的信息')
|
|
def change_Information(self, ins):
|
|
self.id.set(ins[0][0])
|
|
self.name.set(ins[0][1])
|
|
self.department.set(ins[0][2])
|
|
self.sex.set(ins[0][3])
|
|
self.wages.set(ins[0][4])
|
|
self.hiredata.set(ins[0][5])
|
|
self.id_change_before.set(ins[0][0])
|
|
self.name_change_before.set(ins[0][1])
|
|
self.department_change_before.set(ins[0][2])
|
|
self.sex_change_before.set(ins[0][3])
|
|
self.wages_change_before.set(ins[0][4])
|
|
self.hiredata_change_before.set(ins[0][5])
|
|
# 通过获取输入框的信息来修改数据库中实习生的信息
|
|
def create_user(self):
|
|
if not self.id.get():
|
|
self.insert_id = int(0)
|
|
self.status_name.set('请输入修改的工号')
|
|
return
|
|
else:
|
|
self.insert_id = int(self.id.get())
|
|
|
|
if not self.name.get():
|
|
self.insert_name = 'NULL'
|
|
else:
|
|
self.insert_name = self.name.get()
|
|
|
|
if not self.department.get():
|
|
self.insert_department = 'NULL'
|
|
else:
|
|
self.insert_department = self.department.get()
|
|
|
|
if not self.sex.get():
|
|
self.insert_sex = 'NULL'
|
|
else:
|
|
self.insert_sex = self.sex.get()
|
|
|
|
if not self.wages.get():
|
|
self.insert_wages = 'NULL'
|
|
else:
|
|
self.insert_wages = self.wages.get()
|
|
|
|
if not self.hiredata.get():
|
|
self.insert_hiredata = 'NULL'
|
|
else:
|
|
self.insert_hiredata = self.hiredata.get()
|
|
mysql_internes.delete_id(self.id_change_before.get())
|
|
|
|
ins = (self.insert_id, self.insert_name, self.insert_department, self.insert_sex,
|
|
self.insert_wages, self.insert_hiredata)
|
|
mysql_internes.insert(ins)
|
|
|
|
self.status_name.set('数据修改成功')
|
|
|
|
# 实现帮助页面的类,主要打印一些程序运行的帮助以及规则
|
|
class HelpFrame(Frame):
|
|
def __init__(self, root):
|
|
super().__init__(root)
|
|
|
|
Label(self, text = '关于录入界面').pack()
|
|
Label(self, text = '可以录入所有信息为空的信息,但不建议,且工号具有唯一性').pack()
|
|
Label(self, text = ' ').pack()
|
|
Label(self, text = '关于查询界面').pack()
|
|
Label(self, text = '默认为升序排列,可以根据实习生的各类信息进行排列,并能通过快捷键以及鼠标右键实现一定的功能').pack()
|
|
Label(self, text = '可以查看部门信息以及可以选择信息进行删除').pack()
|
|
Label(self, text = ' ').pack()
|
|
Label(self, text = '关于删除界面').pack()
|
|
Label(self, text = '可以根据工号或者姓名对实习生信息进行删除,工号是唯一的').pack()
|
|
Label(self, text = ' ').pack()
|
|
Label(self, text = '关于修改界面').pack()
|
|
Label(self, text = '可以通过工号或者姓名来查询实习生信息,但查询名字只会出现第一位实习生,按下修改键出现提示即成功').pack() |