# 用Python制作的学生积分管理系统（二）

3 篇文章 0 订阅
# -*-coding:utf-8-*-

from tkinter import *
import shelve
from tkinter import messagebox
import xlrd,xlwt
from tkinter.ttk import *
from tkinter.simpledialog import askstring
from datetime import date
import time
import math
import re
import random
import os

# s打开数据文件（“stu”：存学生信息；"JFinfo":存加减分信息；“CZinfo”:操作记录）
def openDataFile(xb):
f = shelve.open("datafile")
tempdata = f.get(xb, {})
tempmima = f.get("mima", ["admin", "123456"])
addFenJL = f.get("fjl", {})  #[日期，编号，姓名，班级，分值，加分理由]
text1="学生编号：系统内的唯一身份号。\n姓名：学生本人的姓名。\n班级:学生在校班级。\n积分:完成学校所给的任务后所得积分累加值,可兑换奖励。\n星级：积分值越大，星级越高。\n称号：完成学校的某项特殊任务时获得，拥有称号的学生对应的成长值就高。\n成长值:学生每天积分会自动按成长值增加。"
gongGao = f.get("gg", [text1,""])
f.close()
# 将数据保存到文件
def saveData(xb, datavar):
f = shelve.open("datafile")
f[xb] = datavar
f.close()

#窗口居中
def win_center(win, w, h):
s_w = win.winfo_screenwidth()
s_h = win.winfo_screenheight()
size = f"{w}x{h}+{int((s_w-w)/2)}+{int((s_h-h)/2)}"
win.geometry(size)

# 成长值增加积分，每天一次
if len(stuData) > 0:
today1 = str(date.today().isoformat())
for i in stuData.keys():
if today1 != stuData[i][8]:
stuData[i][3] = int(stuData[i][3]) + int(stuData[i][6])
import math
stuData[i][4] = "★" * int(math.log(int(stuData[i][3]), 3))
stuData[i][8] = today1
saveData("stu", stuData)
# 主窗口
class mainWin():
def __init__(self, title, stuData, mima, fenJL, gg):
self.title = title
self.w = 800
self.h = 600
self.flags = [0]
self.stuData = stuData
self.mima = mima
self.mima_dl = False
self.fenJL = fenJL
self.gg = gg
self.tempData = list(self.stuData.values())
self.root = Tk()
self.root.title(self.title)
win_center(self.root, self.w, self.h)
self.labelx = StringVar()  # 标签变量
self.root.mainloop()

# 添加菜单
# 信息展示

# 显示展台
def visibel_ZT(self):
if not self.flags[0]:
self.flags[0] = 1

# 积分记录导出
def JFJL_dc(self):
if not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
fname = asksaveasfilename(title="文件另存为", filetypes=[("Microsoft Excel 97-2003 文件", "*.xls")])

if fname:
while os.path.isfile(fname+".xls"):
self.lab1["text"] = "文件名重复，请重新命名！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
fname = asksaveasfilename(title="文件另存为", filetypes=[("Microsoft Excel 97-2003 文件", "*.xls")])

# [日期，编号，姓名，班级，分值，加分理由]
workbook = xlwt.Workbook(encoding="utf-8")
worksheet.write(0, 0, "日期")
worksheet.write(0, 1, "编号")
worksheet.write(0, 2, "姓名")
worksheet.write(0, 3, "增加积分")
worksheet.write(0, 4, "加分理由")
temdata = []
for val in self.fenJL.values():
temdata.extend(val)
for i in range(len(temdata)):
for j in range(5):
worksheet.write(i+1, j, temdata[i][j])

workbook.save(fname + ".xls")
self.lab1["text"] = "学生积分记录导出完成！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 添加数据
if self.mima_dl:
pass
elif not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
d = add_data_win(self.stuData, self.lab1)
self.root.wait_window(d)
if d.xsbh == "":
self.lab1["text"] = "添加数据失败！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return
tempdata = [d.xsbh, d.xsxm, d.xsbj, d.xsjf, d.xsxj, d.xsch, d.xscz, d.xszx, date.today().isoformat()]
self.stuData[d.xsbh] = tempdata
saveData("stu", self.stuData)
self.tempData = list(self.stuData.values())
self.all_stu()
self.lab1["text"] = "添加数据成功！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 密码登录
def mima_tui(self):
self.mima_dl = False
messagebox.showinfo("成功", "密码退出成功。")
#密码登录
def mima_denglu(self):
if not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
else:
self.mima_dl = True
messagebox.showinfo("成功","密码登录成功，其他操作无需再输入密码。")
# 密码修改
def mima_xg(self):
oldmi = askstring("密码", "请输入旧密码", show="*")
if not oldmi:
pass
elif oldmi == self.mima[1]:
newmi = askstring("密码", "请输入新密码", show="*")
if not newmi:
messagebox.showwarning("警告", "新密码不能为空！")
elif len(newmi) < 6:
messagebox.showwarning("警告", "密码长度不能小于6")
else:
self.mima[1] = newmi
saveData("mima", self.mima)
messagebox.showinfo("成功", "密码修改成功！")
# 添加状态栏lab1(变量self.labelx)

self.lab1 = Label(self.root, text="欢迎使用学生积分管理系统。 作者：周坤 联系电话：13991045332", relief="groove")

# 添加数据框架tree
fm1 = Frame(self.root, relief=GROOVE, borderwidth=5)

# v建立TreeView
col = ("bh", "xm", "bj", "jf", "xj", "ch", "cz", "zx", "rq")
self.tree = Treeview(fm1, columns=col, show="headings")
# 标题
for var1 in col:
self.tree.column(var1, width=87, anchor=CENTER)
yscroll = Scrollbar(fm1)
yscroll.pack(side=RIGHT, fill=Y)
self.tree.pack(side=RIGHT, fill=BOTH, expand=True)
yscroll.config(command=self.tree.yview)
self.tree.configure(yscrollcommand=yscroll.set)

# 表格中重新添加数据,同时self.tempData重建数据
for v in self.tempData:
self.tree.insert("", index=END, text=v[0], values=v)
# 清空表中数据
def clear_treedata(self):
treedata = self.tree.get_children()
for item in treedata:
self.tree.delete(item)
# 删除文件中数据
def del_filedata(self):
if len(self.tempData):
for temp in self.tempData:
self.stuData.pop(temp[0])
self.tempData = []
saveData("stu", self.stuData)
# 导入数据
def dr_data(self):
if not (askstring("谨慎操作", "将覆盖系统内数据，谨慎！\n请输入密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
fname = askopenfilename(title="请选择要导入的文件", filetypes=[("Microsoft Excel 97-2003 文件", "*.xls")])
if fname:
try:
workbook = xlrd.open_workbook(fname)
datavalue = workbook.sheet_by_name(u"Sheet1")
rows = datavalue.nrows
for i in range(1,rows):
temp = datavalue.row_values(i)
temp[3] = int(temp[3])
temp[6] = int(temp[6])
temp.append(date.today().isoformat())
self.stuData[temp[0]] = temp
saveData("stu", self.stuData)
self.all_stu()
self.lab1["text"] = f"成功更新{rows-1}条数据。"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
except Exception as err:
self.lab1["text"] = "数据格式有误。"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 导出数据
def dc_data(self):
if not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
fname = asksaveasfilename(title="文件另存为", filetypes=[("Microsoft Excel 97-2003 文件", "*.xls")])
if fname:
while os.path.isfile(fname + ".xls"):
self.lab1["text"] = "文件名重复，请重新命名！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
fname = asksaveasfilename(title="文件另存为", filetypes=[("Microsoft Excel 97-2003 文件", "*.xls")])
workbook = xlwt.Workbook(encoding="utf-8")
worksheet.write(0, 0, "学生编号")
worksheet.write(0, 1, "姓名")
worksheet.write(0, 2, "班级")
worksheet.write(0, 3, "积分")
worksheet.write(0, 4, "星级")
worksheet.write(0, 5, "称号")
worksheet.write(0, 6, "成长值")
worksheet.write(0, 7, "在校状态")
worksheet.write(0, 8, "导出日期")
for i in range(len(self.tempData)):
for j in range(9):
worksheet.write(i + 1, j, str(self.tempData[i][j]))
workbook.save(fname + ".xls")
self.lab1["text"] = "数据导出成功！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 编号查询
def bh_find(self):
if bh:
self.clear_treedata()
self.tempData = []
for tempdata in self.stuData.values():
if bh in tempdata[0]:
self.tempData.append(tempdata)
self.lab1["text"] =f"查找到{len(self.tempData)}条数据！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 姓名查询
def xm_find(self):
xm = askstring("姓名查询", "请输入学生姓名")
if xm:
self.clear_treedata()
self.tempData = []
for tempdata in self.stuData.values():
if xm in tempdata[1]:
self.tempData.append(tempdata)
self.lab1["text"] = f"查找到{len(self.tempData)}条数据！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 班级查询
def bj_find(self):
bj = askstring("班级查询", "请输入学生班级")
if bj:
self.clear_treedata()
self.tempData = []
for tempdata in self.stuData.values():
if bj in str(tempdata[2]):
self.tempData.append(tempdata)
self.lab1["text"] = f"查找到{len(self.tempData)}条数据！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
# 在校状态查询
def zx_find(self):
zx = askstring("在校状态查询", "请输入学生在校状态")
if zx:
self.clear_treedata()
self.tempData = []
for tempdata in self.stuData.values():
if zx in tempdata[7]:
self.tempData.append(tempdata)
self.lab1["text"] = f"查找到{len(self.tempData)}条数据！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
# 显示所有学生
def all_stu(self):
self.clear_treedata()
self.tempData = list(self.stuData.values())
self.lab1["text"] = f"查找到{len(self.tempData)}条数据！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 查询结果加分
def data_jf(self):
if self.mima_dl:
pass
elif not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
self.topwin = topwin(self.lab1)
self.root.wait_window(self.topwin)
if not self.topwin.fen:
return
for temps in self.tempData:
temps[3] += self.topwin.fen
temps[4] = "★" * int(math.log(temps[3],3))
self.stuData[temps[0]] = temps
if temps[0] in self.fenJL.keys():
self.fenJL[temps[0]].append([temps[8], temps[0], temps[1], self.topwin.fen, self.topwin.cause])
else:
self.fenJL[temps[0]] = [[temps[8], temps[0], temps[1], self.topwin.fen, self.topwin.cause]]
saveData("stu", self.stuData)
saveData("fjl", self.fenJL)
self.clear_treedata()
self.lab1["text"] = "加分成功!"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 查询结果修改
def data_xg(self):
if self.mima_dl:
pass
elif not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
xgwin = dataXG_win(self.tempData, self.stuData, self.lab1)
self.root.wait_window(xgwin)
self.clear_treedata()

# 查询结果删除
def data_del(self):
if self.mima_dl:
pass
elif not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
if messagebox.askquestion("谨慎操作", "确实要删除吗？") == "yes":
self.clear_treedata()
self.del_filedata()
self.lab1["text"] = "数据删除成功！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

# 发布任务公告
def rw_gg1(self):
if self.mima_dl:
pass
elif not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
gg_win(self.gg, 0, self.lab1)

def rw_gg2(self):
if self.mima_dl:
pass
elif not (askstring("请输入密码", "密码", show="*") == self.mima[1]):
messagebox.showerror("错误", "密码不正确")
return
gg_win(self.gg, 1, self.lab1)

#发布公告窗口
class gg_win(Toplevel):
def __init__(self, gg, i, labelx):
super().__init__()
self.gg = gg
self.i = i
self.lab1 = labelx
self.title = "公告编辑"
self.resizable(0, 0)
self.wm_attributes("-topmost", -1)
self.setUI()
win_center(self, 350, 340)

def setUI(self):
self.frame1 = LabelFrame(self, text="公告编辑", labelanchor="n")
self.text1 = Text(self.frame1, padx=3, pady=3, height=20, width=45)
self.bt1 = Button(self.frame1, text="发布", command=self.bt1_fabu)
self.bt2 = Button(self.frame1, text="取消", command=self.bt2_fabu)
self.bt1.grid(row=5, column=0)
self.bt2.grid(row=5, column=1)
def bt1_fabu(self):
txt = self.text1.get("1.0", "end")
self.gg[self.i] = txt
saveData("gg", self.gg)
self.lab1["text"] = f"公告{self.i+1}发布成功！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

self.destroy()
def bt2_fabu(self):
self.lab1["text"] = "已取消发布公告！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
self.destroy()

# 数据修改窗口
class dataXG_win(Toplevel):
def __init__(self, tempdata, studata, labelx):
super().__init__()
self.tempdata = tempdata
self.studata = studata
self.lab1 = labelx
self.data_len = len(tempdata)
self.data_sum = 0
self.title = "修改学生信息"
self.resizable(0, 0)  # 设置窗口不可改变大小
self.wm_attributes('-topmost', 1)  # 设置窗口置顶
self.setUI()
win_center(self, 250, 220)
self.xg_data(self.tempdata[self.data_sum])

def setUI(self):  # 界面设置
self.frame1 = LabelFrame(self, text="学生信息", labelanchor="n")
self.bh_label = Label(self.frame1, text="学生编号：", background="gainsboro")
self.bh_label.grid(row=0, column=0, padx=2, pady=2, sticky=W + E)
self.bh_en = Entry(self.frame1)
self.bh_en.grid(row=0, column=1, padx=2, pady=2, sticky=W + E)
self.xm_label = Label(self.frame1, text="学生姓名：", background="gainsboro")
self.xm_label.grid(row=1, column=0, padx=2, pady=2, sticky=W + E)
self.xm_en = Entry(self.frame1)
self.xm_en.grid(row=1, column=1, padx=2, pady=2, sticky=W + E)
self.bj_label = Label(self.frame1, text="学生班级：", background="gainsboro")
self.bj_label.grid(row=2, column=0, padx=2, pady=2, sticky=W + E)
self.bj_en = Entry(self.frame1)
self.bj_en.grid(row=2, column=1, padx=2, pady=2, sticky=W + E)
self.jf_label = Label(self.frame1, text="学生积分：", background="gainsboro")
self.jf_label.grid(row=3, column=0, padx=2, pady=2, sticky=W + E)
self.jf_en = Entry(self.frame1)
self.jf_en.grid(row=3, column=1, padx=2, pady=2, sticky=W + E)
self.ch_label = Label(self.frame1, text="学生称号：", background="gainsboro")
self.ch_label.grid(row=4, column=0, padx=2, pady=2, sticky=W + E)
self.ch_en = Entry(self.frame1)
self.ch_en.grid(row=4, column=1, padx=2, pady=2, sticky=W + E)
self.cz_label = Label(self.frame1, text="成长值：", background="gainsboro")
self.cz_label.grid(row=5, column=0, padx=2, pady=2, sticky=W + E)
self.cz_en = Entry(self.frame1)
self.cz_en.grid(row=5, column=1, padx=2, pady=2, sticky=W + E)
self.ok_btn = Button(self.frame1, text="修改", command=self.bt1ok)
self.no_btn = Button(self.frame1, text="下一个", command=self.bt2no)

def xg_data(self, data1):
self.bh_en.config(state = NORMAL)
self.bh_en.delete(0, END)
self.bh_en.insert(0, data1[0])
self.xm_en.delete(0, END)
self.xm_en.insert(0, data1[1])
self.bj_en.delete(0, END)
self.bj_en.insert(0, data1[2])
self.jf_en.delete(0, END)
self.jf_en.insert(0, data1[3])
self.ch_en.delete(0, END)
self.ch_en.insert(0, data1[5])
self.cz_en.delete(0, END)
self.cz_en.insert(0, data1[6])
self.bh_en.config(state = DISABLED)

def bt1ok(self):
xsbh = self.bh_en.get()
xsxm = self.xm_en.get()
xsbj = self.bj_en.get()
xsjf = self.jf_en.get()
xsxj = ""
xsch = self.ch_en.get()
xscz = self.cz_en.get()
xszx = "在校"
if xsbh.strip() == "" or xsxm.strip() == "" or xsbj.strip() == "":
self.lab1["text"] = "警告:学生编号、班级、姓名均不能为空!"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return

if re.search("^[1-9][0-9]*$", xsjf): xsjf = int(xsjf) xsxj = "★" * int(math.log(xsjf, 3)) else: self.lab1["text"] = "警告:学生积分必须为一个整数！" self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"]) return if re.search("^[1-9][0-9]*$", xscz):
xscz = int(xscz)
else:
self.lab1["text"] = "警告:学生成长值必须为一个整数！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return
tempvar = [xsbh, xsxm, xsbj, xsjf, xsxj, xsch, xscz, xszx, date.today().isoformat()]
self.tempdata[self.data_sum] = tempvar
self.studata[xsbh] = tempvar
saveData("stu", self.studata)
self.lab1["text"] = f"编号 {xsbh} 同学的数据修改成功！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])

def bt2no(self):
self.data_sum += 1
if self.data_sum == self.data_len:
self.data_sum = 0
self.xg_data(self.tempdata[self.data_sum])

# 展台窗口
class ZT_win():
def __init__(self, ztdata, fenJL, gg, flags):
super().__init__()
self.ztdata = ztdata
self.fenJL = fenJL
self.gg = gg
self.flags = flags
self.tempdata = list(self.ztdata.values())
self.tempdata.sort(key=lambda x: x[3])
self.root = Tk()
self.root.title("学生积分管理系统展台")
self.root.protocol("WM_DELETE_WINDOW", self.callback)
self.setUI()
win_center(self.root, 800, 600)
self.root.mainloop()

def callback(self):
self.flags[0] = 0
self.root.destroy()

def setUI(self):
self.left_frame = Frame(self.root, relief=GROOVE)
self.right_frame = Frame(self.root, relief=GROOVE)

self.left_frame.rowconfigure(0, weight=1)
self.left_frame.rowconfigure(1, weight=1)
self.left_frame.columnconfigure(0, weight=1)

self.right_frame.rowconfigure(0, weight=1)
self.right_frame.rowconfigure(1, weight=1)
self.right_frame.columnconfigure(0, weight=1)

self.right_top_frame = LabelFrame(self.right_frame, text="公告一", labelanchor="n")
self.right_bottom_frame = LabelFrame(self.right_frame, text="公告二", labelanchor="n")
self.right_top_frame.grid(row=0, column=0, padx=3, pady=3, sticky = N+S+W+E)
self.right_bottom_frame.grid(row=1, column=0, padx=3, pady=3, sticky = N+S+W+E)
self.left_top_frame = LabelFrame(self.left_frame, text="学生信息展示", labelanchor="n")
self.left_bottom_frame = LabelFrame(self.left_frame, text="新加分消息", labelanchor="n")

self.gg1_label = Text(self.right_top_frame, padx=3, pady=3, width=15, background="lightblue")
self.gg2_label = Text(self.right_bottom_frame, padx=3, pady=3, width=15, background="lavender")

self.left_top_frame.rowconfigure(0, weight=1)
self.left_top_frame.columnconfigure(0, weight=1)
self.left_top_frame.columnconfigure(1, weight=1)
self.left_top_frame.columnconfigure(2, weight=1)
self.left_top_frame.columnconfigure(3, weight=1)
self.left_top_frame.columnconfigure(4, weight=1)
self.left_top_frame.columnconfigure(5, weight=1)
self.left_top_frame.columnconfigure(6, weight=1)

self.jfinfo_text = Text(self.left_bottom_frame, padx=5, pady=5, font=("楷体",12), height=10)

bh_label = Label(self.left_top_frame, text="学生编号", relief="solid", anchor=CENTER)
xm_label = Label(self.left_top_frame, text="姓名", relief="solid", anchor=CENTER)
bj_label = Label(self.left_top_frame, text="班级", relief="solid", anchor=CENTER)
jf_label = Label(self.left_top_frame, text="积分", relief="solid", anchor=CENTER)
xj_label = Label(self.left_top_frame, text="星级", width=10, relief="solid", anchor=CENTER)
ch_label = Label(self.left_top_frame, text="称号", width=10, relief="solid", anchor=CENTER)
cz_label = Label(self.left_top_frame, text="成长值", relief="solid", anchor=CENTER)
bh_label.grid(row=0, column=0, sticky=N+S+W+E)
xm_label.grid(row=0, column=1, sticky=N+S+W+E)
bj_label.grid(row=0, column=2, sticky=N+S+W+E)
jf_label.grid(row=0, column=3, sticky=N+S+W+E)
xj_label.grid(row=0, column=4, sticky=N+S+W+E)
ch_label.grid(row=0, column=5, sticky=N+S+W+E)
cz_label.grid(row=0, column=6, sticky=N+S+W+E)

self.arr_label = []

for i in range(1, 11):
self.left_top_frame.rowconfigure(i, weight=1)
for j in range(7):
if i % 2:
color1 = "skyblue"
else:
color1 = "snow"
var_label = Label(self.left_top_frame, text="", relief="solid", background=color1, anchor=CENTER)
self.arr_label.append(var_label)
var_label.grid(row=i, column=j, sticky=N+S+W+E)

def left_top_zt(self):
time.sleep(0.2)
self.cf()

def cf(self):
zt_page = []
page_data = []
for var2 in self.arr_label:
var2.configure(text="")
for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]:
if len(self.tempdata):
page_data.append(self.tempdata[-1][0])
zt_page.extend(self.tempdata.pop()[:7])

else:
break
for var1 in range(len(zt_page)):
self.arr_label[var1].configure(text=zt_page[var1])
self.gg1_label.configure(state=NORMAL)
self.gg2_label.configure(state=NORMAL)
self.gg1_label.delete("1.0", "end")
self.gg2_label.delete("1.0", "end")
self.gg1_label.insert("end", self.gg[0])
self.gg2_label.insert("end", self.gg[1])
self.gg1_label.configure(state=DISABLED)
self.gg2_label.configure(state=DISABLED)

self.jfinfo_text.delete("1.0", "end")
arr_color =["red","blue","green"]
ch_color = random.choice(arr_color)
self.jfinfo_text.configure(foreground=ch_color,background="lightgray")

for i in range(len(page_data)):
if page_data[i] in self.fenJL.keys():
temp3 = list(self.fenJL[page_data[i]][-1])
self.jfinfo_text.insert("end",f"{temp3[0]}日，编号为 {temp3[1]} 的同学 {temp3[2]} 加{temp3[3]}分，理由{temp3[4]}\n")

if not len(self.tempdata):
self.tempdata = list(self.ztdata.values())
self.tempdata.sort(key=lambda x: x[3])
self.root.after(10000, self.cf)

#添加数据窗口
def __init__(self, studata, labelx):
super().__init__()
self.studata = studata
self.lab1 = labelx
self.title = "添加学生信息"
self.resizable(0, 0)  # 设置窗口不可改变大小
self.wm_attributes('-topmost', 1)  # 设置窗口置顶
self.protocol("WM_DELETE_WINDOW", self.callback)  # 设置窗口不可关闭
self.xsbh=""
self.xsxm=""
self.xsbj=""
self.xsjf=0
self.xsxj=""
self.xsch=""
self.xscz=1
self.xszx=""
self.setUI()
win_center(self, 250, 230)

def setUI(self):  # 界面设置
self.frame1=LabelFrame(self,text="学生信息",labelanchor="n")
self.bh_label = Label(self.frame1, text="学生编号：", background="gainsboro")
self.bh_en = Entry(self.frame1)
self.xm_label = Label(self.frame1, text="学生姓名：", background="gainsboro")
self.xm_en = Entry(self.frame1)
self.bj_label = Label(self.frame1, text="学生班级：", background="gainsboro")
self.bj_label.grid(row=2, column=0, padx=2, pady=2, sticky=W + E)
self.bj_en = Entry(self.frame1)
self.bj_en.grid(row=2, column=1, padx=2, pady=2, sticky=W + E)
self.jf_label = Label(self.frame1, text="学生积分：", background="gainsboro")
self.jf_label.grid(row=3, column=0, padx=2, pady=2, sticky=W + E)
self.jf_en = Entry(self.frame1)
self.jf_en.grid(row=3, column=1, padx=2, pady=2, sticky=W + E)
self.ch_label = Label(self.frame1, text="学生称号：", background="gainsboro")
self.ch_label.grid(row=4, column=0, padx=2, pady=2, sticky=W + E)
self.ch_en = Entry(self.frame1)
self.ch_en.grid(row=4, column=1, padx=2, pady=2, sticky=W + E)
self.cz_label = Label(self.frame1, text="成长值：", background="gainsboro")
self.cz_label.grid(row=5, column=0, padx=2, pady=2, sticky=W + E)
self.cz_en = Entry(self.frame1)
self.cz_en.grid(row=5, column=1, padx=2, pady=2, sticky=W + E)
self.ok_btn = Button(self.frame1, text="添加", command=self.bt1ok)
self.no_btn = Button(self.frame1, text="取消", command=self.bt2no)

# 确定按钮功能
def bt1ok(self):
self.xsbh = self.bh_en.get()
self.xsxm = self.xm_en.get()
self.xsbj = self.bj_en.get()
self.xsjf = self.jf_en.get()
self.xsxj =""
self.xsch = self.ch_en.get()
self.xscz = self.cz_en.get()
self.xszx = "在校"
if self.xsbh.strip() == "" or self.xsxm.strip() == "" or self.xsbj.strip() == "":
self.lab1["text"] = "警告:学生编号、班级、姓名均不能为空!"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return
if self.xsbh in self.studata.keys():
self.lab1["text"] = "警告:学生编号与系统内重复，请重新输入。"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return
if re.search("^[1-9][0-9]*$",self.xsjf): self.xsjf = int(self.xsjf) self.xsxj = "★" * int(math.log(self.xsjf, 3)) else: self.lab1["text"] = "警告:学生积分必须为一个整数！" self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"]) return if re.search("^[1-9][0-9]*$",self.xscz):
self.xscz = int(self.xscz)
else:
self.lab1["text"] = "警告:学生成长值必须为一个整数！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return
self.destroy()

def bt2no(self):  # 取消按钮功能
self.destroy()

def callback(self):  # 不可用X关闭
pass

# 加分窗口
class topwin(Toplevel):
def __init__(self, labelx):
super().__init__()
self.lab1 = labelx
self.fen = 0  # 增加的分值
self.cause = ""  # 加分的原因
self.resizable(0, 0)  # 设置窗口不可改变大小
self.wm_attributes('-topmost', 1)  # 设置窗口置顶
self.protocol("WM_DELETE_WINDOW", self.callback)  # 设置窗口不可关闭
self.setUI()
win_center(self, 290, 220)

def setUI(self):  # 界面设置

self.lab1 = Label(self, text="增加分值:")

self.en1 = Entry(self)

self.frame1 = LabelFrame(self, text="加分原因", labelanchor="n")
self.frame1.grid(row=1, column=0, columnspan=2, padx=5)

self.text1 = Text(self.frame1, width=38, height=10)

self.bt1 = Button(self, text="确定", command=self.bt1ok)
self.bt1.grid(row=2, column=0)

self.bt2 = Button(self, text="取消", command=self.bt2no)
self.bt2.grid(row=2, column=1)

def bt1ok(self):  # 确定按钮功能
tempfen = self.en1.get()

if not re.search("^(-|[1-9])[0-9]*\$",tempfen):
self.lab1["text"] = "警告:请输入正确的数值！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return
if tempfen[0] == "-":
if len(tempfen) > 1:
self.fen = -int(tempfen[1:])
self.cause = self.text1.get("1.0", END)[:-1]
self.destroy()
else:
self.lab1["text"] = "警告:请输入正确的数值！"
self.lab1["foreground"] = random.choice(["red", "green", "blue", "deeppink", "indigo"])
return
else:
self.fen = int(tempfen)
self.cause = self.text1.get("1.0", END)[:-1]
self.destroy()

def bt2no(self):  # 取消按钮功能
self.destroy()

def callback(self):  # 不可用X关闭
pass

def zt_visible(a,b,c,d):
ZT_win(a,b,c,d)

if __name__ == "__main__":
stuData, mima, fenJL, gg = openDataFile("stu")
mainWin("学生积分管理系统", stuData, mima, fenJL, gg)



所需导入excel模板：

• 5
点赞
• 12
收藏
觉得还不错? 一键收藏
• 0
评论
07-04
10-27
04-13 1021
10-11 423
03-10 1141
04-22 1016
04-17 455
04-17 1287
04-19 421

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

• 非常没帮助
• 没帮助
• 一般
• 有帮助
• 非常有帮助

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