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.

281 lines
11 KiB

import os
import tkinter
import psutil,time,threading
import ttkbootstrap
from tkinter import *
from tkinter import ttk, messagebox
import zipfile
import tkinter as tk
import _sqlite3
# 数据库
conn = _sqlite3.connect("data.db")
c = conn.cursor()
# c.execute("create table score(itemName char(20),importPrice char(20),"
# "sellPrice char(20),deductPrice char(20))")
def Serchone(sellPrice):
c.execute("select itemName,deductPrice from score where score.sellPrice = '%s'" % sellPrice)
return c.fetchall()
def Serchone2():
c.execute("select itemName,deductPrice from score order by deductPrice desc")
return c.fetchall()
#根据id查询教师个人信息sql语句
def SerchMy(name):
c.execute("select * from students where students.name = '%s'" % name)
return c.fetchall()
#修改密码sql语句
def UpdatePassWord(id, name):
c.execute('update students set id = (?) where name = (?)',
(id, name))
# 提交事务
conn.commit()
#主窗体
class InputFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Label(self, text='欢迎登录信息管理系统!!!', font=('华文行楷', 20), fg='purple').pack()
# #实现测网速
# def _():
# meter = ttkbootstrap.Meter(
# metersize=180,
# padding=50,
# amountused=0,
# metertype="semi",
# subtext="当前网速(kB/s)",
# subtextstyle="warning",
# interactive=False,
# bootstyle='primary',
# )
# meter.pack(side=ttkbootstrap.LEFT, padx=5)
# while True:
# meter.configure(amountused=round(getNet(), 2))
# def getNet():
# recv_before = psutil.net_io_counters().bytes_recv
# time.sleep(1)
# recv_now = psutil.net_io_counters().bytes_recv
# recv = (recv_now - recv_before) / 1024
# return recv
# t = threading.Thread(target=_)
# t.setDaemon(True)
# t.start()
#我的信息
class MyFrame(Frame):
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.name = name
self.createPage()
def createPage(self):
Button(self, text='个人信息', command=self.My_Page).pack()
def My_Page(self):
li = SerchMy(self.name)
pth = li[0]
print(pth)
Label(self, text='工号: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[0]).pack(side=LEFT,ipady=10)
Label(self, text='姓名: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[1]).pack(side=LEFT,ipady=10)
Label(self, text='性别: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[2]).pack(side=LEFT,ipady=10)
Label(self, text='专业: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[3]).pack(side=LEFT,ipady=10)
Label(self, text='职称: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[4]).pack(side=LEFT,ipady=10)
Label(self, text='入职年月: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[5]).pack(side=LEFT,ipady=10)
#修改密码
class UpdatepwdFrame(Frame):
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.name = name
self.id = StringVar()
self.createPage()
def createPage(self):
Button(self, text='修改密码', command=self.My_Page).grid()
def My_Page(self):
li = SerchMy(self.name)
pth = li[0]
print(pth)
self.id = tkinter.StringVar()
self.ids = tkinter.StringVar()
Label(self).grid(row=0, stick=W, pady=10)
Label(self, text='请输入新密码: ').grid(row=1, stick=W, pady=10)
Entry(self, textvariable=self.id).grid(row=1, column=1, stick=E)
Label(self, text='确认密码: ').grid(row=2, stick=W, pady=10)
Entry(self, textvariable=self.ids).grid(row=2, column=1, stick=E)
Button(self, text='确认修改', width=8, height=2, command=self.UpdateDate).grid(row=3, column=1, stick=E)
self.id.set('')
self.ids.set('')
def UpdateDate(self):
UpdatePassWord(self.id.get(),self.name)
tkinter.messagebox.showerror("成功", "修改成功")
#查看成绩类
class QueryFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.itemName = StringVar()
self.sellPrice = StringVar()
self.createPage()
def createPage(self):
Label(self, text='我的成绩', font=('华文行楷', 20), fg='purple').pack()
columns = ("itemName", "deductPrice")
columns_values = ("课程名称", "成绩")
self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
self.tree_view.column('itemName', width=80, anchor='center')
self.tree_view.column('deductPrice', width=80, anchor='center')
self.tree_view.heading('itemName', text='课程名称')
self.tree_view.heading('deductPrice', text='成绩')
self.tree_view.pack(fill=tk.BOTH, expand=True)
scores = Serchone2()
print(scores)
index = 0
for s in scores:
print(s)
self.tree_view.insert('', index + 1, values=(
s[0], s[1],
))
#意见反馈类
class CountFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Label(self, text='请说出你的想法', font=('华文行楷', 20), fg='purple').pack()
text = tk.Text(self, width=100, height=20)
text.pack()
text.insert("insert", "")
text.insert('end', '\n')
mytxtfile = "mytxtfile.txt"
# 读取TXT文件显示在tkinter的Text
def in_f_txt():
if os.path.exists(mytxtfile):
a = open(mytxtfile, 'r', encoding='utf-8')
for id_names in a:
text.insert('insert', id_names)
a.close()
text.insert('end', '\n')
# 输入文本框
input_txt = tk.Entry(self, width=20)
input_txt.pack()
def add():
# 通过get()函数获得Textinput_txt的输入内容
var_id = input_txt.get()
h = open(mytxtfile, 'a+', encoding='utf-8')
h.write(var_id + '\n') # 添加到文件夹中的txt
h.close()
b2 = tk.Button(text, text="提交意见", command=add)
text.window_create("insert", window=b2)
text.insert('end', '\n')
#提交作业
class SubmitFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Button(self, text='提交作业', font=('华文行楷', 20), command=self.show_submit_frame).pack(anchor='center', pady=5)
#提交作业
def show_submit_frame(self):
window = tk.Tk()
window.title("提交作业")
window.geometry("800x600") # 窗口设置
window.resizable(0, 0) # 固定窗口大小
var = tk.StringVar() # 输入框内容
self.num = 1 # 已生成的作业数量+1
source = str() # 单个源代码的内容
self.path = str() # 打包相对路径
# __Labels
head = tk.Label(window, text=" 请将第{num}题源代码复制到框中:".format(num=self.num),
font=('Arial', 15), width=20, height=1)
# 这里的长宽以字符为单位
head.place(x=40, y=100, anchor='nw')
name = tk.Label(window, text="请输入姓名:", font=('Arial', 15), )
name.place(x=3, y=5, anchor='nw')
xuehao = tk.Label(window, text="请输入学号:", font=('Arial', 15), )
xuehao.place(x=3, y=35, anchor='nw')
ok_txt = tk.Label(window, text="点击确定即可\n以框中内容\n生成一个.py文件:", font=('Arial', 15))
ok_txt.place(x=600, y=20, anchor='nw')
# __Entrys
name_en = tk.Entry(window)
name_en.place(x=145, y=8, anchor='nw')
xuehao_en = tk.Entry(window)
xuehao_en.place(x=145, y=38, anchor='nw')
# __Buttons
def make_zip(floder, backupfilename): # floder要打包的文件夹backupfilename:指定文件名
backupfilename = backupfilename + '.zip'
f = zipfile.ZipFile(backupfilename, 'w') # c创建一个zip对象
for floderName, subFolders, fileNames in os.walk(floder):
f.write(floderName)
for subFolder in subFolders:
f.write(os.path.join(floderName, subFolder))
for fileName in fileNames:
f.write(os.path.join(floderName, fileName))
f.close()
def ok_hit(): ##确认 键的功能
# global path
self.path = "./{xuehao}_{name}".format(xuehao=xuehao_en.get(), name=name_en.get())
folder = os.path.exists(self.path)
if not folder:
os.makedirs(self.path)
source = content.get("0.0", "end")
with open(self.path + '/' + "{num}题.py".format(num=self.num), 'w') as f:
f.write(source)
self.num += 1
head.config(text="请将第{num}题源代码复制到框中:".format(num=self.num))
content.delete("0.0", 'end')
pass
def zip_them_hit(): ##打包键功能
make_zip(self.path, "{xuehao}_{name}".format
(xuehao=xuehao_en.get(), name=name_en.get()))
messagebox.showinfo(message="你的 {num} 个.py语言源代码\n已经打包入zip压缩包中\n在当前目录即可找到".format(num=self.num-1), title="Packing has been complished!")
os.system("explorer " + os.getcwd())
window.destroy() ##结束程序
pass
#创建Buttons
ok = tk.Button(window, text="确 定", command=ok_hit, width=10, height=2, font=40)
ok.place(x=650, y=120, anchor='nw')
zip_them = tk.Button(window, text="打包成zip", command=zip_them_hit, width=10,height=2, font=40)
zip_them.place(x=650, y=250, anchor='nw')
# __Texts
content = tk.Text(window, width=65, height=30)
content.place(x=20, y=130, anchor='nw')
window.mainloop()