文章目录

  • 前言
  • 运行环境
  • 效果预览
  • 项目流程
  • 模块分讲
    • Login
    • StuWindow
    • StuPassword
    • GuiMain
  • 完整代码
  • 结尾

前言

学习是一个漫长而又痛苦的过程,但学习的收获是令人欣喜的,为了让学习成果有质量,又有痕迹,特意写此博客,由于本人非计算机专业,但对计算机兴趣万分.如有错误,望各位读者斧正。(本程序的所用的数据,名字是源于网上,其余都是随机生成,如有侵权,请私信我)

运行环境

编译器:PyCharm 2021.2.1
解释器:Anaconda 3.8

效果预览



项目流程

登录流程图

学生管理系统由四个模块构成,每个模块都有不同的方法,下面的流程图列出了主要的方法。

模块分讲

首先Login登录,用户密码正确之后,进入主页面GuiMain,StuPassword负责修改密码,StuWindow负责添加、修改等功能,以上就是各个模块负责的功能,下面来分开讲解一下。以下每一个模块都能单独运行。

Login

Login登录模块,会从文件中读取数据,用户输入密码登录,会和读取的密码进行校验,正确会进入主界面,错误会提醒。考虑到首次运行会没有数据,所以第一次运行会随机生成一些数据,以便主界面效果展示。

import tkinter
import tkinter.ttk
import os
import random
import tkinter.messageboxclass Login(tkinter.Tk):def __init__(self):# 所有用户密码self.all_user = []# 重写方法super(Login, self).__init__()# 设置窗口标题self.title('学生信息管理登录窗口')# 不允许界面变化self.resizable(0, 0)# 窗口居中self.screen_center()# 第一次登录 生成用户信息self.first_login()# 读取所有信息self.read_all_user()self.main()# 使登录窗口居中def screen_center(self):width = 500height = 400# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()# 大家可以算一算 使窗口居中center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))# 界面实现def main(self):# 创建样式对象self.style = tkinter.ttk.Style()self.style.configure("login_label.TLabel", font=("微软雅黑", 15, "bold"), foreground="black")self.style.configure('login_button.TButton', font=("微软雅黑", 13, "bold"), foreground='blue')# 创建变量 接受用户名self.user_v = tkinter.StringVar()self.user_label = tkinter.ttk.Label(self, text='用户名', style='login_label.TLabel')self.user_entry = tkinter.ttk.Entry(self, textvariable=self.user_v)self.user_label.place(relx=0.25, rely=0.3)self.user_entry.place(relx=0.4, rely=0.31)# 创建变量 接受密码self.password_v = tkinter.StringVar()self.password_label = tkinter.ttk.Label(self, text='密   码', style='login_label.TLabel')self.password_entry = tkinter.ttk.Entry(self, textvariable=self.password_v, show='*')self.password_label.place(relx=0.25, rely=0.4)self.password_entry.place(relx=0.4, rely=0.41)self.login_button = tkinter.ttk.Button(self, text='登 录', command=self.login_check,style='login_button.TButton')self.login_button.place(relx=0.42, rely=0.5)# 读取管理者信息def read_all_user(self):with open('total\\user.txt', 'r') as f:# 一次读取一行data_row = f.readline()while data_row:user_info = data_row.split(',')# 所有用户登录信息self.all_user.append(user_info)data_row = f.readline()# 获取登录信息并校对def login_check(self):user_name = self.user_v.get()password = self.password_v.get()# 输入不能为空 用户名必须3个字符以上 密码必须6个字符以上if len(user_name.strip()) < 3 or len(password.strip()) < 6:tkinter.messagebox.showinfo('提醒', '用户名至少3个字符以上,密码至少6个以上!')else:for index in self.all_user:if user_name == index[0]:if password == index[1].strip():# 此时登录的用户信息self.now_user = index# 先关闭再打开  会有影响 可以试试self.destroy()# 主界面  self.now_user当前登录用户 self.all_user 所有用户账号# GuiMain(self.now_user, self.all_user)print('登录成功!')breakelse:tkinter.messagebox.showinfo('登录提醒', '账号或密码错误!')breakelse:tkinter.messagebox.showinfo('登录提醒', '账号或密码错误!')# 首次运行没有数据 创建数据def first_login(self):# 如果没有 total目录 就会创建一个 并写入数据和密码if not os.path.exists('total'):os.mkdir('total')# 写入用户密码with open('total\\user.txt', 'w', encoding='utf-8') as f:f.write('admin,123456\n')f.write('123456,1123456\n')# 生成名字stu_list = ['郭山彤', '梁敦厦', '霍负浪', '虞信品', '马仁毅', '冯州龙', '简务帅', '黎丙赣', '谢尉争', '赵单羽', '孟航沛', '龚开梦', '黄蓝风', '易堃登', '蔡农仲', '高洪泉', '巫家昱', '赵道霄', '章学共', '乐武亮', '费宜鸿', '张津广', '梁胤鸣', '吕聪', '蒋进如', '林豪谱', '孙剑佛', '魏成贯', '卫耿羿', '谢协湃', '岑刚飘', '吴资龙', '陈仓翼', '刘枝迟', '尤帅齐', '孙彩武', '陈莉汐', '程欢亭', '邬肖任', '尤政航', '颜东鑫', '欧有皆', '高季晨', '孙奎汝', '龚韶釜', '费汐家', '钱铮友', '沈锵良', '傅利', '雷友水', '庄蒙少', '陈茗卓', '梁兴力', '欧谱班', '史霄灼', '柳庭沛', '宁儒熙', '吴越潇', '刘中舟', '曹讯波', '王封安', '石和革', '任康焕', '危眺沃', '池湃邦', '车杜炯', '黎宇澄', '符彬政', '刘尉', '钟召云', '王颢锵', '简邦余', '云羿谆', '云悠洋', '穆影焱', '龙绍焱', '胡睿', '岳叔华', '路留时', '尤介辉', '周谷佟', '林文冲', '丁倍卫', '秦树琪', '卢邦楠', '张枫震', '赵勋吟', '姬霏', '梁汐季', '张广房', '岑誉胜', '雷亚思', '梁尉寒', '王悟营', '韦鲁郎', '蔡粮鲜', '李具匡', '何望', '谭满铿', '穆漂徽', '卫荷', '夏落兴', '甘风力', '吴军卓', '谭灶声', '许欣英', '穆中管', '武邦致', '谢雄民', '钱锦宏']with open('total\\stu_info.txt', 'a', encoding='utf-8') as f:# 学号 姓名 电话 身份证for index in range(110):# 学号learn_num = str(random.randint(100000, 999999))# 姓名stu_name = stu_list[index]# 电话号码stu_phone = str(random.randint(12345678900, 19999999999))# 身份证 随机的stu_id = str(random.randint(100000000000000000, 666666666666666666))# 合并成字符串 如 928515,郭山彤,13434744899,297942375539845806data = ','.join([learn_num, stu_name, stu_phone, stu_id + '\n'])f.write(data)if __name__ == '__main__':Login().mainloop()

StuWindow

这个模块主要是来实现各种弹窗,如添加、修改、双击详细信息等功能,会根据flag的值不同,显示不同的窗口。

import tkinter
import tkinter.messagebox
import tkinter.ttkclass StuWindow(tkinter.Toplevel):def __init__(self, stu_current, flag, stu_all, tree_update):''':param stu_current: 双击弹开学生信息:param flag: 标志 表示学生详细信息和修改学生信息、添加学生信息当中的一个:param stu_all: 所有学生信息:param tree_update: tree对象 用于更新数据'''super(StuWindow, self).__init__()self.stu_current = stu_currentself.flag = flagself.stu_all = stu_allself.tree_update = tree_update# 不允许更改self.resizable(0, 0)# 窗口居中self.screen_center()# 主界面self.main()# 微调self.decide_flag()# 使登录窗口居中def screen_center(self):width = 500height = 400# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))# 主要界面  会根据flag的值来修改def main(self):style = tkinter.ttk.Style()style.configure('l.TLabel', font=('微软雅黑', 11, 'bold'))style.configure('l.TButton', font=('微软雅黑', 13, 'bold'), foreground='blue')self.learn_stu_label = tkinter.ttk.Label(self, text='学号:', style='l.TLabel')self.learn_stu_v = tkinter.StringVar()self.learn_stu_entry = tkinter.ttk.Entry(self, textvariable=self.learn_stu_v)self.learn_stu_label.place(relx=0.31, rely=0.2)self.learn_stu_entry.place(relx=0.39, rely=0.2)self.name_stu_label = tkinter.ttk.Label(self, text='姓名:', style='l.TLabel')self.name_stu_v = tkinter.StringVar()self.name_stu_entry = tkinter.ttk.Entry(self, textvariable=self.name_stu_v)self.name_stu_label.place(relx=0.31, rely=0.3)self.name_stu_entry.place(relx=0.39, rely=0.3)self.num_stu_label = tkinter.ttk.Label(self, text='电话号码:', style='l.TLabel')self.num_stu_v = tkinter.StringVar()self.num_stu_entry = tkinter.ttk.Entry(self, textvariable=self.num_stu_v)self.num_stu_label.place(relx=0.25, rely=0.4)self.num_stu_entry.place(relx=0.39, rely=0.4)self.id_stu_label = tkinter.ttk.Label(self, text='身份证:', style='l.TLabel')self.id_stu_v = tkinter.StringVar()self.id_stu_entry = tkinter.ttk.Entry(self, textvariable=self.id_stu_v)self.id_stu_label.place(relx=0.28, rely=0.5)self.id_stu_entry.place(relx=0.39, rely=0.5)self.save_stu_button = tkinter.ttk.Button(self, text='保存', style='l.TButton', command=self.modify_stu)self.save_stu_button.place(relx=0.38, rely=0.6)def decide_flag(self):# 1 表示学生详细信息界面if self.flag == 1:self.title('学生详细信息')# 隐藏保存按钮 place_forget()self.save_stu_button.place_forget()self.learn_stu_v.set(self.stu_current['son'])self.name_stu_v.set(self.stu_current['name'])self.num_stu_v.set(self.stu_current['num'])self.id_stu_v.set(self.stu_current['id'])# 禁止修改 disableself.learn_stu_entry.config(state='disable')self.name_stu_entry.config(state='disable')self.num_stu_entry.config(state='disable')self.id_stu_entry.config(state='disable')# 2 表示修改学生信息界面elif self.flag == 2:self.title('修改学生信息')self.learn_stu_v.set(self.stu_current['son'])self.name_stu_v.set(self.stu_current['name'])self.num_stu_v.set(self.stu_current['num'])self.id_stu_v.set(self.stu_current['id'])# 添加学生elif self.flag == 3:self.title('添加学生信息')self.save_stu_button.place_forget()add_stu_button = tkinter.ttk.Button(self, text='添加', style='l.TButton', command=self.add_stu)add_stu_button.place(relx=0.38, rely=0.6)# 修改学生信息def modify_stu(self):# 获取学生信息current_learn = self.learn_stu_v.get()current_name = self.name_stu_v.get()current_num = self.num_stu_v.get()current_id = self.id_stu_v.get()for i in self.stu_all:# 学号是唯一的if self.stu_current['son'] == i[0]:# 修改i[0] = current_learni[1] = current_namei[2] = current_numi[3] = current_id# self.stu_all [[],[]...] 所有学生信息self.write_total(self.stu_all)# parent 指定父窗口 以tkinter.Toplevel为父窗口 在此界面上弹开窗口tkinter.messagebox.showinfo('提醒', '修改成功!', parent=self)# 更新数据self.update_data()# 关闭窗口self.destroy()break# 添加学生def add_stu(self):# 获取值current_learn = self.learn_stu_v.get()current_name = self.name_stu_v.get()current_num = self.num_stu_v.get()current_id = self.id_stu_v.get()self.stu_all.append([current_learn, current_name, current_num, current_id])self.write_total(self.stu_all)# 清空输入框self.learn_stu_entry.delete(0, tkinter.END)self.name_stu_entry.delete(0, tkinter.END)self.num_stu_entry.delete(0, tkinter.END)self.id_stu_entry.delete(0, tkinter.END)tkinter.messagebox.showinfo('提醒', '添加成功!', parent=self)# 更新self.update_data()# 写入文件def write_total(self, total):with open('total\\stu_info.txt', 'w', encoding='utf-8') as f:f.write('')with open('total\\stu_info.txt', 'a', encoding='utf-8') as f:for i in self.stu_all:f.write(','.join(i) + '\n')# 更新def update_data(self):# 将所有的学生信息删除for i in self.tree_update.get_children():self.tree_update.delete(i)# 重新插入for i in self.stu_all:self.tree_update.insert('', tkinter.END, values=(i[0], i[1], i[2], i[3]))if __name__ == '__main__':# flag 可以使 flag 为 1 2 3 试试StuWindow(stu_current={'son': 123, 'name': '天天501', 'num': 132123165, 'id': 13123}, flag=3, stu_all=None,tree_update=None).mainloop()

StuPassword

此模块让用户输入密码,会跟原密码进行校验,如果正确才会修改密码。

import tkinter
import tkinter.ttk
import tkinter.messageboxclass StuPassword(tkinter.Toplevel):def __init__(self, now_user, all_user):super(StuPassword, self).__init__()# 当前登录用户self.now_user = now_user# 所有用户密码self.all_user = all_userself.title('学生信息明细')# 禁止窗口变化self.resizable(0, 0)# 窗口居中self.screen_center()# 主界面self.main()# 使登录窗口居中def screen_center(self):width = 500height = 400# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))def main(self):style = tkinter.ttk.Style()style.configure('l.TLabel', font=("微软雅黑", 12, "bold"))style.configure('l.TButton', font=("微软雅黑", 15, "bold"), foreground='blue')# 用户名self.user_v = tkinter.StringVar()# 设置用户名self.user_v.set(self.now_user[0])self.user_name = tkinter.ttk.Label(self, text='用户名:', style='l.TLabel')self.user_entry = tkinter.Entry(self, textvariable=self.user_v, state='disable', justify='center')self.user_name.place(relx=0.28, rely=0.2)self.user_entry.place(relx=0.4, rely=0.2)# 旧密码self.old_pass_v = tkinter.StringVar()self.old_pass_label = tkinter.ttk.Label(self, text='旧密码:', style='l.TLabel')self.old_pass_entry = tkinter.Entry(self, show='*', textvariable=self.old_pass_v)self.old_pass_label.place(relx=0.28, rely=0.3)self.old_pass_entry.place(relx=0.4, rely=0.3)# 新密码self.new_pass_v = tkinter.StringVar()self.new_pass_label = tkinter.ttk.Label(self, text='新密码:', style='l.TLabel')self.new_pass_entry = tkinter.Entry(self, show='*', textvariable=self.new_pass_v)self.new_pass_label.place(relx=0.28, rely=0.4)self.new_pass_entry.place(relx=0.4, rely=0.4)# 确认新密码self.second_pass_v = tkinter.StringVar()self.second_pass_label = tkinter.ttk.Label(self, text='确认新密码:', style='l.TLabel')self.second_pass_entry = tkinter.Entry(self, show='*', textvariable=self.second_pass_v)self.second_pass_label.place(relx=0.22, rely=0.5)self.second_pass_entry.place(relx=0.4, rely=0.5)# affirm 确认self.affirm_button = tkinter.ttk.Button(self, text='确认', style='l.TButton', command=self.check_pass)self.affirm_button.place(relx=0.4, rely=0.6)# 校验修改密码def check_pass(self):# 密码不能为空 -- 旧密码错误 -- 新密码不一致 -- 修改成功if not self.old_pass_v.get().strip() or not self.new_pass_v.get().strip() or not self.second_pass_v.get().strip():tkinter.messagebox.showinfo('警告', '密码不能为空!', parent=self)else:if self.old_pass_v.get().strip() != self.now_user[1].strip():tkinter.messagebox.showinfo('警告', '旧密码错误!', parent=self)else:if self.new_pass_v.get().strip() == self.second_pass_v.get().strip():for i in self.all_user:if self.now_user[0] == i[0]:i[1] = self.second_pass_v.get()# 清空with open('total\\user.txt', 'w', encoding='utf-8') as f:f.write('')with open('total\\user.txt', 'a', encoding='utf-8') as f:for i in self.all_user:i[1] = str(i[1].strip()) + '\n'f.write(','.join(i))# 清空输入框self.old_pass_entry.delete(0, tkinter.END)self.new_pass_entry.delete(0, tkinter.END)self.second_pass_entry.delete(0, tkinter.END)tkinter.messagebox.showinfo('提醒', '修改成功!', parent=self)else:tkinter.messagebox.showinfo('警告', '新密码不一致!', parent=self)if __name__ == '__main__':StuPassword(now_user=['admin', 123], all_user=None).mainloop()

GuiMain

本模块是主界面,将其他模块集中在此模块中。

import tkinter
import tkinter.ttk
import tkinter.messagebox
from datetime import datetimeclass GuiMain(tkinter.Tk):def __init__(self, now_user, all_user):super().__init__()self.now_user = now_userself.all_user = all_user# 标题self.title('学生管理')# 禁止界面变化self.resizable(0, 0)# 窗口居中self.screen_center()# 所有学生信息self.stu_all = []# 读取所有学生数据self.read_stu_info()self.main()# 使登录窗口居中def screen_center(self):width = 700height = 500# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))def main(self):# 样式self.style = tkinter.ttk.Style()self.style.configure('about.TButton', font=("微软雅黑", 15, "bold"), foreground='blue')self.style.configure('option.TMenubutton', font=("微软雅黑", 11, "bold"), width=5, foreground='red')# 有问题self.style.configure('tree.Treeview', background='red', foreground='red')# 左边 添加 修改 删除 更改密码 退出 实时显示时间self.left_menu = tkinter.PanedWindow(self, height=700, width=200)add_stu = tkinter.ttk.Button(self.left_menu, text='添加', style='about.TButton', command=self.add_stu)add_stu.pack(side='top', pady=15, padx=25)mod_stu = tkinter.ttk.Button(self.left_menu, text='修改', style='about.TButton', command=self.mod_stu)mod_stu.pack(side='top', pady=15, padx=25)del_stu = tkinter.ttk.Button(self.left_menu, text='删除', style='about.TButton', command=self.del_stu)del_stu.pack(side='top', pady=15, padx=25)check_stu = tkinter.ttk.Button(self.left_menu, text='查看', style='about.TButton',command=lambda: self.click_stu('a'))check_stu.pack(side='top', pady=15, padx=25)# 更改密码功能mod_password_stu = tkinter.ttk.Button(self.left_menu, text='更改密码', style='about.TButton',command=lambda: print('修改密码'))mod_password_stu.pack(side='top', pady=15, padx=25)# 退出finish = tkinter.ttk.Button(self.left_menu, text='退出', style='about.TButton',command=self.destroy)finish.pack(side='top', pady=15, padx=25)# 显示时间today = datetime.today()t = ("%04d-%02d-%02d %02d:%02d:%02d" % (today.year,today.month, today.day, today.hour, today.minute, today.second))self.temporary = tkinter.Label(self.left_menu, text=t, font=("微软雅黑", 11, "bold"), fg='red', width=18, height=2)self.temporary.pack(side='top', pady=15, padx=25)self.left_menu.place(relx=0.01, rely=0.01)self.after(1000, self.get_now_time)#  上 查询 学号 姓名 电话 身份证 密码 查询 用列表top_query = tkinter.PanedWindow(self, height=95, width=485)# 列表 val选中的值self.val = tkinter.StringVar()optionmenu = tkinter.ttk.OptionMenu(top_query, self.val, '学   号', '学   号', '姓   名', '电   话', '身份证',style='option.TMenubutton')optionmenu.place(relx=0.05, rely=0.35)# 输入self.query_t = tkinter.StringVar()query_entry = tkinter.Entry(top_query, textvariable=self.query_t, width=20, font=('微软雅黑', 12, 'bold'))query_entry.place(relx=0.22, rely=0.35)# 查询 显示全部query_one = tkinter.Button(top_query, text='查询', font=('微软雅黑', 11, 'bold'), command=self.lookup)query_one.place(relx=0.65, rely=0.33)query_all = tkinter.Button(top_query, text='显示全部', font=('微软雅黑', 15, 'bold'), command=self.update_date)query_all.place(relx=0.77, rely=0.25)top_query.place(relx=0.3, rely=0.01)# tree 菜单stu_display = tkinter.PanedWindow(self, height=395, width=485, bg='black')self.tree = tkinter.ttk.Treeview(stu_display, columns=('son', 'name', 'num', 'id'), show='headings',height=18, selectmode='browse', style='tree.Treeview')# 头self.tree.heading('son', text='学号', anchor='center')self.tree.heading('name', text='姓名', anchor='center')self.tree.heading('num', text='电话', anchor='center')self.tree.heading('id', text='身份证', anchor='center')# 列self.tree.column('son', anchor='center', width=100)self.tree.column('name', anchor='center', width=100)self.tree.column('num', anchor='center', width=100)self.tree.column('id', anchor='center', width=180)# 插入数据for i in self.stu_all:self.tree.insert('', tkinter.END,values=(i[0], i[1], i[2], i[3].strip()))# 双击事件self.tree.bind("<Double-1>", self.click_stu)self.tree.pack()stu_display.place(relx=0.3, rely=0.2)# 获取当前时间def get_now_time(self):today = datetime.today()t = ("%04d-%02d-%02d %02d:%02d:%02d" % (today.year,today.month, today.day, today.hour, today.minute, today.second))self.temporary.config(text=t)# 循环调用self.after(1000, self.get_now_time)# 读取所有学生def read_stu_info(self):with open('total\\stu_info.txt', 'r', encoding='utf-8') as f:# 不断往下读取read_data = f.readline()while read_data:s = []stu = read_data.split(',')# 去除换行for i in stu:s.append(i.strip())self.stu_all.append(s)read_data = f.readline()# 删除学生def del_stu(self):# 选取学生for k in self.tree.selection():info = self.tree.item(k, 'values')if tkinter.messagebox.askokcancel('提醒', f'确定删除学生{info[1]}?'):for s in self.stu_all:if info[0] == s[0]:self.stu_all.remove(s)self.write_stu()self.tree.delete(k)tkinter.messagebox.showinfo('提醒', '删除成功!')# 写入数据def write_stu(self):with open('total\\stu_info.txt', 'w', encoding='utf-8') as f:f.write('')with open('total\\stu_info.txt', 'a', encoding='utf-8') as f:for i in self.stu_all:f.write(','.join(i) + '\n')# 更新数据def update_date(self):for i in self.tree.get_children():self.tree.delete(i)for i in self.stu_all:self.tree.insert('', tkinter.END, values=(i[0], i[1], i[2], i[3]))# 条件查找def lookup(self):query_c = self.val.get()if query_c == '学   号':self.query_result(num=0)elif query_c == '姓   名':self.query_result(num=1)elif query_c == '电   话':self.query_result(num=2)elif query_c == '身份证':self.query_result(num=3)# 点击事件 弹开详细窗口def click_stu(self, event):# 获取点击的学生信息itm = self.tree.set(self.tree.focus())# 返回一个字典if itm:# StuWindow(itm, 1, '', '')print('弹开信息')else:pass# 修改def mod_stu(self):itm = self.tree.set(self.tree.focus())if itm:# StuWindow(itm, 2, self.stu_all, self.tree)print('修改学生信息')# 添加def add_stu(self):# StuWindow('', 3, self.stu_all, self.tree)print('添加学生信息')# 查询结果def query_result(self, num):result = []for i in self.stu_all:if i[int(num)] == self.query_t.get():result.append(i)if result:# 删除所有for i in self.tree.get_children():self.tree.delete(i)# 将搜索结果排列for i in result:self.tree.insert('', tkinter.END, values=(i[0], i[1], i[2], i[3]))else:tkinter.messagebox.showinfo('提醒', '查无此人')if __name__ == '__main__':GuiMain(now_user=['admin', 123456], all_user=None).mainloop()

完整代码

import tkinter
import tkinter.messagebox
import tkinter.ttk
import os
from datetime import datetime
import random'''定义登录窗口'''class Login(tkinter.Tk):def __init__(self):# all_user 管理者的信息self.all_user = []# 重写方法super(Login, self).__init__()# 设置窗口标题self.title('学生信息管理登录窗口')# 不允许界面变化self.resizable(0, 0)# 窗口居中self.screen_center()# 第一次登录 生成用户信息self.first_login()# 读取所有信息self.read_all_user()self.main()# 使登录窗口居中def screen_center(self):width = 500height = 400# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))# 界面实现def main(self):# 创建样式对象self.style = tkinter.ttk.Style()self.style.configure("login_label.TLabel", font=("微软雅黑", 15, "bold"), foreground="black")self.style.configure('login_button.TButton', font=("微软雅黑", 13, "bold"), foreground='blue')# 创建变量 接受用户名self.user_v = tkinter.StringVar()self.user_label = tkinter.ttk.Label(self, text='用户名', style='login_label.TLabel')self.user_entry = tkinter.ttk.Entry(self, textvariable=self.user_v)self.user_label.place(relx=0.25, rely=0.3)self.user_entry.place(relx=0.4, rely=0.31)# 创建变量 接受密码self.password_v = tkinter.StringVar()self.password_label = tkinter.ttk.Label(self, text='密   码', style='login_label.TLabel')self.password_entry = tkinter.ttk.Entry(self, textvariable=self.password_v, show='*')self.password_label.place(relx=0.25, rely=0.4)self.password_entry.place(relx=0.4, rely=0.41)self.login_button = tkinter.ttk.Button(self, text='登 录', command=self.login_check,style='login_button.TButton')self.login_button.place(relx=0.42, rely=0.5)def read_all_user(self):with open('total\\user.txt', 'r') as f:# 一次读取一行data_row = f.readline()while data_row:user_info = data_row.split(',')# 所有用户登录信息self.all_user.append(user_info)data_row = f.readline()# 获取登录信息并校对# login checkdef login_check(self):user_name = self.user_v.get()password = self.password_v.get()# 输入不能为空 用户名必须3个字符以上 密码必须6个字符以上if len(user_name.strip()) < 3 or len(password.strip()) < 6:tkinter.messagebox.showinfo('提醒', '用户名至少3个字符以上,密码至少6个以上!')else:for index in self.all_user:if user_name == index[0]:if password == index[1].strip():# 此时登录的用户信息self.now_user = index# 先关闭再打开  不能先打开再关闭self.destroy()# 主界面  self.now_user当前登录用户 self.all_user 所有用户账号GuiMain(self.now_user, self.all_user)breakelse:tkinter.messagebox.showinfo('登录提醒', '账号或密码错误!')breakelse:tkinter.messagebox.showinfo('登录提醒', '账号或密码错误!')# 第一次执行没有数据 创建数据def first_login(self):if not os.path.exists('total'):os.mkdir('total')# 写入用户密码with open('total\\user.txt', 'w', encoding='utf-8') as f:f.write('admin,123456\n')f.write('123456,1123456\n')stu_list = ['郭山彤', '梁敦厦', '霍负浪', '虞信品', '马仁毅', '冯州龙', '简务帅', '黎丙赣', '谢尉争', '赵单羽', '孟航沛', '龚开梦', '黄蓝风', '易堃登', '蔡农仲', '高洪泉', '巫家昱', '赵道霄', '章学共', '乐武亮', '费宜鸿', '张津广', '梁胤鸣', '吕聪', '蒋进如', '林豪谱', '孙剑佛', '魏成贯', '卫耿羿', '谢协湃', '岑刚飘', '吴资龙', '陈仓翼', '刘枝迟', '尤帅齐', '孙彩武', '陈莉汐', '程欢亭', '邬肖任', '尤政航', '颜东鑫', '欧有皆', '高季晨', '孙奎汝', '龚韶釜', '费汐家', '钱铮友', '沈锵良', '傅利', '雷友水', '庄蒙少', '陈茗卓', '梁兴力', '欧谱班', '史霄灼', '柳庭沛', '宁儒熙', '吴越潇', '刘中舟', '曹讯波', '王封安', '石和革', '任康焕', '危眺沃', '池湃邦', '车杜炯', '黎宇澄', '符彬政', '刘尉', '钟召云', '王颢锵', '简邦余', '云羿谆', '云悠洋', '穆影焱', '龙绍焱', '胡睿', '岳叔华', '路留时', '尤介辉', '周谷佟', '林文冲', '丁倍卫', '秦树琪', '卢邦楠', '张枫震', '赵勋吟', '姬霏', '梁汐季', '张广房', '岑誉胜', '雷亚思', '梁尉寒', '王悟营', '韦鲁郎', '蔡粮鲜', '李具匡', '何望', '谭满铿', '穆漂徽', '卫荷', '夏落兴', '甘风力', '吴军卓', '谭灶声', '许欣英', '穆中管', '武邦致', '谢雄民', '钱锦宏']with open('total\\stu_info.txt', 'a', encoding='utf-8') as f:# 学号 姓名 电话 身份证for index in range(110):# 学号learn_num = str(random.randint(100000, 999999))# 姓名stu_name = stu_list[index]# 电话号码stu_phone = str(random.randint(12345678900, 19999999999))# 身份证 随机的stu_id = str(random.randint(100000000000000000, 666666666666666666))# print(learn_num, stu_name, stu_phone, stu_id)data = ','.join([learn_num, stu_name, stu_phone, stu_id + '\n'])f.write(data)'''定义一个弹窗 学生详细信息和修改学生信息、添加学生信息  '''class StuWindow(tkinter.Toplevel):def __init__(self, stu_current, flag, stu_all, tree_update):''':param stu_current: 双击弹开学生信息:param flag: 标志 表示学生详细信息和修改学生信息、添加学生信息当中的一个:param stu_all: 所有学生信息:param tree_update: tree对象 用于更新数据'''super(StuWindow, self).__init__()self.stu_current = stu_currentself.flag = flagself.stu_all = stu_allself.tree_update = tree_update# 不允许更改self.resizable(0, 0)# 窗口居中self.screen_center()# 主界面self.main()# 微调self.decide_flag()# 使登录窗口居中def screen_center(self):width = 500height = 400# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))# 主要界面  其他负责修改def main(self):style = tkinter.ttk.Style()style.configure('l.TLabel', font=('微软雅黑', 11, 'bold'))style.configure('l.TButton', font=('微软雅黑', 13, 'bold'), foreground='blue')self.learn_stu_label = tkinter.ttk.Label(self, text='学号:', style='l.TLabel')self.learn_stu_v = tkinter.StringVar()self.learn_stu_entry = tkinter.ttk.Entry(self, textvariable=self.learn_stu_v)self.learn_stu_label.place(relx=0.31, rely=0.2)self.learn_stu_entry.place(relx=0.39, rely=0.2)self.name_stu_label = tkinter.ttk.Label(self, text='姓名:', style='l.TLabel')self.name_stu_v = tkinter.StringVar()self.name_stu_entry = tkinter.ttk.Entry(self, textvariable=self.name_stu_v)self.name_stu_label.place(relx=0.31, rely=0.3)self.name_stu_entry.place(relx=0.39, rely=0.3)self.num_stu_label = tkinter.ttk.Label(self, text='电话号码:', style='l.TLabel')self.num_stu_v = tkinter.StringVar()self.num_stu_entry = tkinter.ttk.Entry(self, textvariable=self.num_stu_v)self.num_stu_label.place(relx=0.25, rely=0.4)self.num_stu_entry.place(relx=0.39, rely=0.4)self.id_stu_label = tkinter.ttk.Label(self, text='身份证:', style='l.TLabel')self.id_stu_v = tkinter.StringVar()self.id_stu_entry = tkinter.ttk.Entry(self, textvariable=self.id_stu_v)self.id_stu_label.place(relx=0.28, rely=0.5)self.id_stu_entry.place(relx=0.39, rely=0.5)self.save_stu_button = tkinter.ttk.Button(self, text='保存', style='l.TButton', command=self.modify_stu)self.save_stu_button.place(relx=0.38, rely=0.6)def decide_flag(self):# 1 表示学生详细信息界面if self.flag == 1:self.title('学生详细信息')# 隐藏保存按钮self.save_stu_button.place_forget()self.learn_stu_v.set(self.stu_current['son'])self.name_stu_v.set(self.stu_current['name'])self.num_stu_v.set(self.stu_current['num'])self.id_stu_v.set(self.stu_current['id'])# 不允许修改self.learn_stu_entry.config(state='disable')self.name_stu_entry.config(state='disable')self.num_stu_entry.config(state='disable')self.id_stu_entry.config(state='disable')# 2 表示修改学生信息界面elif self.flag == 2:self.title('修改学生信息')self.learn_stu_v.set(self.stu_current['son'])self.name_stu_v.set(self.stu_current['name'])self.num_stu_v.set(self.stu_current['num'])self.id_stu_v.set(self.stu_current['id'])# 添加学生elif self.flag == 3:self.title('添加学生信息')self.save_stu_button.place_forget()add_stu_button = tkinter.ttk.Button(self, text='添加', style='l.TButton', command=self.add_stu)add_stu_button.place(relx=0.38, rely=0.6)# 修改学生信息def modify_stu(self):# 获取学生信息current_learn = self.learn_stu_v.get()current_name = self.name_stu_v.get()current_num = self.num_stu_v.get()current_id = self.id_stu_v.get()for i in self.stu_all:# 学号是唯一的if self.stu_current['son'] == i[0]:# 修改i[0] = current_learni[1] = current_namei[2] = current_numi[3] = current_id# self.stu_all [[],[]...]self.write_total(self.stu_all)# parent 指定父窗口tkinter.messagebox.showinfo('提醒', '修改成功!', parent=self)# 更新self.update_data()self.destroy()breakdef add_stu(self):current_learn = self.learn_stu_v.get()current_name = self.name_stu_v.get()current_num = self.num_stu_v.get()current_id = self.id_stu_v.get()self.stu_all.append([current_learn, current_name, current_num, current_id])self.write_total(self.stu_all)self.learn_stu_entry.delete(0, tkinter.END)self.name_stu_entry.delete(0, tkinter.END)self.num_stu_entry.delete(0, tkinter.END)self.id_stu_entry.delete(0, tkinter.END)tkinter.messagebox.showinfo('提醒', '添加成功!', parent=self)# 更新self.update_data()# 写入文件def write_total(self, total):with open('total\\stu_info.txt', 'w', encoding='utf-8') as f:f.write('')with open('total\\stu_info.txt', 'a', encoding='utf-8') as f:for i in self.stu_all:f.write(','.join(i) + '\n')# 更新def update_data(self):# 将所有的学生信息删除for i in self.tree_update.get_children():self.tree_update.delete(i)# 重新插入for i in self.stu_all:self.tree_update.insert('', tkinter.END, values=(i[0], i[1], i[2], i[3]))'''修改密码界面'''class StuPassword(tkinter.Toplevel):def __init__(self, now_user, all_user):super(StuPassword, self).__init__()self.now_user = now_userself.all_user = all_userself.title('学生信息明细')# 窗口置顶# self.attributes('-topmost', 'true')self.resizable(0, 0)# 窗口居中self.screen_center()self.main()# 使登录窗口居中def screen_center(self):width = 500height = 400# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))def main(self):style = tkinter.ttk.Style()style.configure('l.TLabel', font=("微软雅黑", 12, "bold"))style.configure('l.TButton', font=("微软雅黑", 15, "bold"), foreground='blue')# 用户名self.user_v = tkinter.StringVar()self.user_v.set(self.now_user[0])self.user_name = tkinter.ttk.Label(self, text='用户名:', style='l.TLabel')self.user_entry = tkinter.Entry(self, textvariable=self.user_v, state='disable', justify='center')self.user_name.place(relx=0.28, rely=0.2)self.user_entry.place(relx=0.4, rely=0.2)# 旧密码self.old_pass_v = tkinter.StringVar()self.old_pass_label = tkinter.ttk.Label(self, text='旧密码:', style='l.TLabel')self.old_pass_entry = tkinter.Entry(self, show='*', textvariable=self.old_pass_v)self.old_pass_label.place(relx=0.28, rely=0.3)self.old_pass_entry.place(relx=0.4, rely=0.3)# 新密码self.new_pass_v = tkinter.StringVar()self.new_pass_label = tkinter.ttk.Label(self, text='新密码:', style='l.TLabel')self.new_pass_entry = tkinter.Entry(self, show='*', textvariable=self.new_pass_v)self.new_pass_label.place(relx=0.28, rely=0.4)self.new_pass_entry.place(relx=0.4, rely=0.4)# 确认新密码self.second_pass_v = tkinter.StringVar()self.second_pass_label = tkinter.ttk.Label(self, text='确认新密码:', style='l.TLabel')self.second_pass_entry = tkinter.Entry(self, show='*', textvariable=self.second_pass_v)self.second_pass_label.place(relx=0.22, rely=0.5)self.second_pass_entry.place(relx=0.4, rely=0.5)# affirm 确认self.affirm_button = tkinter.ttk.Button(self, text='确认', style='l.TButton', command=self.check_pass)self.affirm_button.place(relx=0.4, rely=0.6)def check_pass(self):# 密码不能为空 -- 旧密码错误 -- 新密码不一致 -- 修改成功if not self.old_pass_v.get().strip() or not self.new_pass_v.get().strip() or not self.second_pass_v.get().strip():tkinter.messagebox.showinfo('警告', '密码不能为空!', parent=self)else:if self.old_pass_v.get().strip() != self.now_user[1].strip():tkinter.messagebox.showinfo('警告', '旧密码错误!', parent=self)else:if self.new_pass_v.get().strip() == self.second_pass_v.get().strip():for i in self.all_user:if self.now_user[0] == i[0]:i[1] = self.second_pass_v.get()# 清空with open('total\\user.txt', 'w', encoding='utf-8') as f:f.write('')with open('total\\user.txt', 'a', encoding='utf-8') as f:for i in self.all_user:i[1] = str(i[1].strip()) + '\n'f.write(','.join(i))# 清空原有密码self.old_pass_entry.delete(0, tkinter.END)self.new_pass_entry.delete(0, tkinter.END)self.second_pass_entry.delete(0, tkinter.END)tkinter.messagebox.showinfo('提醒', '修改成功!', parent=self)else:tkinter.messagebox.showinfo('警告', '新密码不一致!', parent=self)'''主页面'''class GuiMain(tkinter.Tk):def __init__(self, now_user, all_user):super().__init__()self.now_user = now_userself.all_user = all_userself.title('学生管理')self.resizable(0, 0)self.screen_center()self.stu_all = []self.read_stu_info()self.main()# 使登录窗口居中def screen_center(self):width = 700height = 500# 获取屏幕的宽度screen_width = self.winfo_screenwidth()# 获取屏幕的高度screen_height = self.winfo_screenheight()center_x = int(screen_width / 2 - width / 2)center_y = int(screen_height / 2 - height / 2)self.geometry('{}x{}+{}+{}'.format(width, height, center_x, center_y))def main(self):# 样式self.style = tkinter.ttk.Style()self.style.configure('about.TButton', font=("微软雅黑", 15, "bold"), foreground='blue')self.style.configure('option.TMenubutton', font=("微软雅黑", 11, "bold"), width=5, foreground='red')# 有问题self.style.configure('tree.Treeview', background='red', foreground='red')# 左边 添加  修改 删除 更改密码self.left_menu = tkinter.PanedWindow(self, height=700, width=200)add_stu = tkinter.ttk.Button(self.left_menu, text='添加', style='about.TButton', command=self.add_stu)add_stu.pack(side='top', pady=15, padx=25)mod_stu = tkinter.ttk.Button(self.left_menu, text='修改', style='about.TButton', command=self.mod_stu)mod_stu.pack(side='top', pady=15, padx=25)del_stu = tkinter.ttk.Button(self.left_menu, text='删除', style='about.TButton', command=self.del_stu)del_stu.pack(side='top', pady=15, padx=25)check_stu = tkinter.ttk.Button(self.left_menu, text='查看', style='about.TButton',command=lambda: self.click_stu('a'))check_stu.pack(side='top', pady=15, padx=25)mod_password_stu = tkinter.ttk.Button(self.left_menu, text='更改密码', style='about.TButton',command=lambda: StuPassword(self.now_user, self.all_user))mod_password_stu.pack(side='top', pady=15, padx=25)# 退出finish = tkinter.ttk.Button(self.left_menu, text='退出', style='about.TButton',command=self.destroy)finish.pack(side='top', pady=15, padx=25)# 时间today = datetime.today()t = ("%04d-%02d-%02d %02d:%02d:%02d" % (today.year,today.month, today.day, today.hour, today.minute, today.second))self.temporary = tkinter.Label(self.left_menu, text=t, font=("微软雅黑", 11, "bold"), fg='red', width=18, height=2)self.temporary.pack(side='top', pady=15, padx=25)self.left_menu.place(relx=0.01, rely=0.01)self.after(1000, self.get_now_time)#  上 查询 学号 姓名 电话 身份证 密码 查询 用列表top_query = tkinter.PanedWindow(self, height=95, width=485)# 列表 val选中的值self.val = tkinter.StringVar()optionmenu = tkinter.ttk.OptionMenu(top_query, self.val, '学   号', '学   号', '姓   名', '电   话', '身份证',style='option.TMenubutton')optionmenu.place(relx=0.05, rely=0.35)# 输入self.query_t = tkinter.StringVar()query_entry = tkinter.Entry(top_query, textvariable=self.query_t, width=20, font=('微软雅黑', 12, 'bold'))query_entry.place(relx=0.22, rely=0.35)# 查询 显示全部query_one = tkinter.Button(top_query, text='查询', font=('微软雅黑', 11, 'bold'), command=self.lookup)query_one.place(relx=0.65, rely=0.33)query_all = tkinter.Button(top_query, text='显示全部', font=('微软雅黑', 15, 'bold'), command=self.update_date)query_all.place(relx=0.77, rely=0.25)top_query.place(relx=0.3, rely=0.01)# tree 菜单stu_display = tkinter.PanedWindow(self, height=395, width=485, bg='black')self.tree = tkinter.ttk.Treeview(stu_display, columns=('son', 'name', 'num', 'id'), show='headings',height=18, selectmode='browse', style='tree.Treeview')self.tree.heading('son', text='学号', anchor='center')self.tree.heading('name', text='姓名', anchor='center')self.tree.heading('num', text='电话', anchor='center')self.tree.heading('id', text='身份证', anchor='center')self.tree.column('son', anchor='center', width=100)self.tree.column('name', anchor='center', width=100)self.tree.column('num', anchor='center', width=100)self.tree.column('id', anchor='center', width=180)for i in self.stu_all:self.tree.insert('', tkinter.END,values=(i[0], i[1], i[2], i[3].strip()))self.tree.bind("<Double-1>", self.click_stu)self.tree.pack()stu_display.place(relx=0.3, rely=0.2)# 获取当前时间def get_now_time(self):today = datetime.today()t = ("%04d-%02d-%02d %02d:%02d:%02d" % (today.year,today.month, today.day, today.hour, today.minute, today.second))self.temporary.config(text=t)self.after(1000, self.get_now_time)# 读取所有学生def read_stu_info(self):with open('total\\stu_info.txt', 'r', encoding='utf-8') as f:# 不断往下读取read_data = f.readline()while read_data:s = []stu = read_data.split(',')# 去除换行for i in stu:s.append(i.strip())self.stu_all.append(s)read_data = f.readline()# 删除学生def del_stu(self):# 选取学生for k in self.tree.selection():info = self.tree.item(k, 'values')if tkinter.messagebox.askokcancel('提醒', f'确定删除学生{info[1]}?'):for s in self.stu_all:if info[0] == s[0]:self.stu_all.remove(s)self.write_stu()self.tree.delete(k)tkinter.messagebox.showinfo('提醒', '删除成功!')# 写入数据def write_stu(self):with open('total\\stu_info.txt', 'w', encoding='utf-8') as f:f.write('')with open('total\\stu_info.txt', 'a', encoding='utf-8') as f:for i in self.stu_all:f.write(','.join(i) + '\n')# 更新数据def update_date(self):for i in self.tree.get_children():self.tree.delete(i)for i in self.stu_all:self.tree.insert('', tkinter.END, values=(i[0], i[1], i[2], i[3]))# 条件查找def lookup(self):query_c = self.val.get()if query_c == '学   号':self.query_result(num=0)elif query_c == '姓   名':self.query_result(num=1)elif query_c == '电   话':self.query_result(num=2)elif query_c == '身份证':self.query_result(num=3)# 点击事件 弹开详细窗口def click_stu(self, event):# 获取点击的学生信息itm = self.tree.set(self.tree.focus())# 返回一个字典if itm:StuWindow(itm, 1, '', '')else:pass# 修改def mod_stu(self):itm = self.tree.set(self.tree.focus())if itm:StuWindow(itm, 2, self.stu_all, self.tree)# 添加def add_stu(self):StuWindow('', 3, self.stu_all, self.tree)# 查询结果def query_result(self, num):result = []for i in self.stu_all:if i[int(num)] == self.query_t.get():result.append(i)if result:# 删除所有for i in self.tree.get_children():self.tree.delete(i)# 将搜索结果排列for i in result:self.tree.insert('', tkinter.END, values=(i[0], i[1], i[2], i[3]))else:tkinter.messagebox.showinfo('提醒', '查无此人')if __name__ == '__main__':n = Login()n.mainloop()

结尾

文章到这就结束了,但这是开始…

tkinter实现学生管理系统(完整代码)相关推荐

  1. 用python设计学生管理系统_python+tkinter实现学生管理系统

    本文实例为大家分享了python+tkinter实现学生管理系统的具体代码,供大家参考,具体内容如下 from tkinter import * from tkinter.messagebox imp ...

  2. C++阶段02笔记【通讯录管理系统 完整代码(系统需求、创建项目、添加/显示/删除/查找/修改/清空)】

    C++| 匠心之作 从0到1入门学编程[视频+课件+笔记+源码] 目录 01.系统需求 02.创建项目 2.1 创建项目 2.2 添加文件 03.菜单功能 04.退出功能 05.添加联系人 5.1 设 ...

  3. Python答优大作业[名片管理系统(完整代码)]

    文章目录 前言 一.要求描述 二.函数功能及代码描述 三.主函数 四.完整代码 总结 前言 这几天在学javaweb没有什么好的案例,这是我一年前python大作业写的答优代码,勉强拿了90分,答辩和 ...

  4. PHP简单的学生管理系统的代码

    说到混编呢!像刚进入PHP学习的同志们呢应该是一脸懵的,混编???什么鬼.混编是一个怎么样的存在呢,接下来就由我来跟大家讲解一下吧. 对PHP的理解 PHP 是一种创建动态交互性站点的强有力的服务器端 ...

  5. Ajax图书管理系统-完整代码与细节部分详细讲解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.知识储备 二.样式代码 三,·此案例需要了解的东西 3.1 简单接口文档的读法 3.2 jq中的事件委托 3.2. ...

  6. c语言编程学生管理系统的代码,C语言学生管理系统源代码.doc

    C语言学生成绩管理系统源代码,保证能用-- #include "malloc.h" #include "stdio.h" #include "stdl ...

  7. javaweb 图书管理系统完整代码_Java Web安全代码审计(一)

    点击上方"凌天实验室"可订阅哦! 信息安全的75%发生在web应用而非网络层. 本篇内容涉及Java Web安全-代码审计,非战斗人员速速离开. 1JavaWeb 安全基础 1. ...

  8. Python使用tkinter打造自定义对话框完整代码

    问题来源:前一阵发过一个技术文章Python编写抽奖式随机提问程序,其中有个弹出式对话框,好像上海科技大学宋老师在群里当时问了一句对话框中中奖姓名是否能显示的大一些,如图: 当时记得标准的tkinte ...

  9. c/c++入门教程 - 3 职工管理系统 完整代码

    目录 3 职工管理系统 3.1 管理系统需求 3.2 代码 勘误 3 职工管理系统 编写示例:基于多态的企业职工系统. 3.1 管理系统需求 职工管理系统可以用来管理公司内所有员工的信息. 本教程主要 ...

最新文章

  1. 机器学习、超参数、最优超参数、网格搜索、随机搜索、贝叶斯优化、Google Vizier、Adviser
  2. 华为云IoT提出泛在新联接,让万物皆可联
  3. SAP 年结(转载)
  4. vs 编译设置obj路径_FLUENT UDF 环境变量设置
  5. [pytorch、学习] - 4.6 GPU计算
  6. 蓝桥杯基础模块06_1:定时器计数器
  7. springboot + redis(单机版)
  8. Linux密码忘了怎么办!
  9. php ziparchive 类不存在,php – 致命错误:类’ZipArchive’中找不到
  10. JS 判断字符串是否为空
  11. eregi php 5.2,PHP5.3x不再支持ereg和eregi
  12. TOM邮箱怎么样 TOM邮箱品牌测评分析
  13. SpringMVC 之Resolver视图解析器笔记(六)
  14. 多机Nomad+Consul+consul-template+Nginx反向代理
  15. java batch是什么_什么是 Spring Batch?
  16. sequelize 安装
  17. “清华女神”回国,赤子之心,如愿以偿
  18. 使用google浏览器添加并翻译英文无字幕视频
  19. Web前端期末大作业-重庆旅游景区网页设计(HTML+CSS+JS)
  20. windows上bug崩溃定位分析(Qt或者VS)

热门文章

  1. dijstra + 链式前向星 一个人的旅行 HDU - 2066
  2. html获取jsq中定义的参数,如何在HTML5中标记也可用作行标题的数据单元格?
  3. 回忆童年-教你用python做出童年经典的动漫人物
  4. 我的监控世界观(5)--如何在监控中反映业务场景
  5. Oracle 故障处理合辑
  6. LncLocator 2.0:具有可解释深度学习的长链非编码RNA的细胞特异性亚细胞定位预测器
  7. ReactXP入门指南
  8. PPTV之大数据集群容器化研究
  9. Latex + TexMaker 简单排版论文
  10. 关于mybatis中下下划线字段查出为null