相信很多人在初学Python的时候,经常最后作业就是完成一个学生管理系统,但是我们来做一个完美的学生管理系统,并且将数据储存到数据库里。

我们先看看我们的数据库怎么设置。

首先呢,我选择用的是SQL Server

然后,我们的数据库名称为学生管理系统

接着,新建一张表,我设置表的名称为学生信息表。

最后,去设置表的列名和类型,我的设置如下:

接下来,我们开始做Python代码啦。

1.我们的导入库有:

from tkinter import *
from tkinter.messagebox import askokcancel, showinfo
import tkinter.ttk as ttk
import pyodbc
import os
import logging
import pandas as pd
from tkinter.filedialog import askopenfilename

2.链接到SQL Server:

# 连接到 SQL ServerConnect to SQL Server
cn = pyodbc.connect('DRIVER={SQL Server};SERVER=(local);DATABASE=学生管理系统;UID=LYD\\lyd;Trusted_Connection=yes

注意:这里面要注意的是因为我的服务器名称是(local)如果你有其他服务器,那么只要在SERVER=(local)中,改成你的服务器名称。然后我的用户名为LYD\lyd,用户名在UID=LYD\\lyd中更改。然后我没有,如果你有就去改一下就好了

3.GUI界面的设置:

def main():
root.geometry('800x600') # 设置窗口初始大小
root.title(systitle) # 设置系统标题
# 创建系统菜单
menubar = Menu(root) # 创建Menu对象menubar,将作为root窗口中的菜单
root.config(menu=menubar) # 将menubar菜单作为root窗口的顶层菜单栏
# menuStudent将作为menubar菜单的子菜单
menuStudent = Menu(menubar, tearoff=0)
menuStudent.add_command(label='添加新学生', font=('宋体', 10), command=addStudent)
menuStudent.add_command(label='显示全部学生信息', font=('宋体', 10), command=showAllStudent)
menuStudent.add_command(label='查找/修改/删除学生信息', font=('宋体', 10), command=checkUpdateStudent)
menuStudent.add_command(label='批量导入学生信息', font=('宋体', 10), command=importStudents)
# 菜单file添加为menubar的子菜单
menubar.add_cascade(label='学生管理', font=('宋体', 10), menu=menuStudent) menuHelp = Menu(menubar, tearoff=0) # help将作为menubar菜单的子菜单
menuHelp.add_command(label='查看日志', font=('宋体', 10), command=viewLog)
menuHelp.add_command(label='关于我们', font=('宋体', 10), command=about)
# 菜单help添加为menubar的子菜单
menubar.add_cascade(label='其他', font=('宋体', 10), menu=menuHelp) menubar.add_command(label='退出', font=('宋体', 10), command=root.quit) root.mainloop()

4.设置添加新学生信息:

def addStudent():
for widget in operateFrame.winfo_children(): # 清空窗口中原有的所有内容
widget.destroy()
f1 = Frame(operateFrame)
f1.pack()
studentIdVar = StringVar()
studentNameVar = StringVar()
idCardVar = StringVar()
telVar = StringVar() lStudentId = Label(f1, text='学号:')
lStudentName = Label(f1, text='姓名:')
lIdCard = Label(f1, text='身份证号码:')
lTel = Label(f1, text='手机号:')
tStudentId = Entry(f1, textvariable=studentIdVar)
tStudentName = Entry(f1, textvariable=studentNameVar)
tIdCard = Entry(f1, textvariable=idCardVar)
tTel = Entry(f1, textvariable=telVar) lStudentId.grid(row=1, column=1)
lStudentName.grid(row=2, column=1)
lIdCard.grid(row=3, column=1)
lTel.grid(row=4, column=1)
tStudentId.grid(row=1, column=2)
tStudentName.grid(row=2, column=2)
tIdCard.grid(row=3, column=2)
tTel.grid(row=4, column=2) f2 = Frame(operateFrame)
f2.pack(pady=20) bReset = Button(f2, text='重置')
bSave = Button(f2, text='保存') bReset.grid(row=1, column=1)
bSave.grid(row=1, column=2)
# 记录用户操作
logging.info('用户执行了添加新学生操作') def reset():
studentIdVar.set('')
studentNameVar.set('')
idCardVar.set('')
telVar.set('') bReset.config(command=reset) def save():
try:
id = studentIdVar.get()
if not id.isdigit():
raise Exception('学号必须为数字!')
name = studentNameVar.get()
id_card = idCardVar.get()
if len(id_card) != 18:
raise Exception('身份证号码必须是18位!')
tel = telVar.get()
if len(tel) != 11:
raise Exception('手机号必须是11位!')
# 向数据库发送插入指令
cursor = cn.cursor()
cursor.execute('INSERT INTO 学生信息表 VALUES (?, ?, ?, ?)', (id, name, id_card, tel))
cn.commit()
showinfo('提示', '保存成功!')
except Exception as e:
showinfo('错误', str(e)) bSave.config(command=save)

5.设置显示全部学生信息:

def showAllStudent():
# 清空窗口中原有的所有内容
for widget in operateFrame.winfo_children():
widget.destroy() # 创建表格
tree = ttk.Treeview(operateFrame)
tree["columns"] = ("学号", "姓名", "身份证号码", "手机号")
tree.column("学号", width=100)
tree.column("姓名", width=100)
tree.column("身份证号码", width=150)
tree.column("手机号", width=100)
tree.heading("学号", text="学号")
tree.heading("姓名", text="姓名")
tree.heading("身份证号码", text="身份证号码")
tree.heading("手机号", text="手机号")
tree.pack(side=LEFT, fill=Y) # 从数据库中获取学生信息
cursor = cn.cursor()
cursor.execute("SELECT * FROM 学生信息表")
rows = cursor.fetchall() # 在表格中显示学生信息
for row in rows:
tree.insert("", "end", values=row)
# 记录用户操作
logging.info('用户执行了显示全部学生信息操作')

6.设置查找/修改/删除学生信息:

def checkUpdateStudent():
for widget in operateFrame.winfo_children():
widget.destroy() f1 = Frame(operateFrame)
f1.pack() searchVar = StringVar()
searchLabel = Label(f1, text='请输入学号:')
searchEntry = Entry(f1, textvariable=searchVar)
searchButton = Button(f1, text='搜索', command=lambda: searchStudent(searchVar.get())) searchLabel.grid(row=1, column=1)
searchEntry.grid(row=1, column=2)
searchButton.grid(row=1, column=3) def searchStudent(studentId):
# 在数据库中搜索学生信息
cursor = cn.cursor()
cursor.execute("SELECT * FROM 学生信息表 WHERE 学号=?", (studentId,))
row = cursor.fetchone()
# 记录用户操作
logging.info('用户执行了查找/修改/删除学生信息操作') if row:
showStudentInfo(row)
else:
showinfo('提示', '未找到该学生信息!') def showStudentInfo(studentInfo):
# 清空窗口中原有的所有内容
for i in operateFrame.winfo_children():
i.destroy() f2 = Frame(operateFrame)
f2.pack() studentIdVar = StringVar(value=studentInfo[0])
studentNameVar = StringVar(value=studentInfo[1])
idCardVar = StringVar(value=studentInfo[2])
telVar = StringVar(value=studentInfo[3]) lStudentId = Label(f2, text='学号:')
lStudentName = Label(f2, text='姓名:')
lIdCard = Label(f2, text='身份证号码:')
lTel = Label(f2, text='手机号:')
tStudentId = Entry(f2, textvariable=studentIdVar, state='readonly')
tStudentName = Entry(f2, textvariable=studentNameVar)
tIdCard = Entry(f2, textvariable=idCardVar)
tTel = Entry(f2, textvariable=telVar) lStudentId.grid(row=1, column=1)
lStudentName.grid(row=2, column=1)
lIdCard.grid(row=3, column=1)
lTel.grid(row=4, column=1)
tStudentId.grid(row=1, column=2)
tStudentName.grid(row=2, column=2)
tIdCard.grid(row=3, column=2)
tTel.grid(row=4, column=2) f3 = Frame(operateFrame)
f3.pack(pady=20) bUpdate = Button(f3, text='更新',
command=lambda: updateStudent(studentIdVar.get(), studentNameVar.get(), idCardVar.get(),
telVar.get()))
bDelete = Button(f3, text='删除', command=lambda: deleteStudent(studentIdVar.get())) bUpdate.grid(row=1, column=1)
bDelete.grid(row=1, column=2) def updateStudent(studentId, studentName, idCard, tel):
try:
if not studentId.isdigit():
raise Exception('学号必须为数字!')
if len(idCard) != 18:
raise Exception('身份证号码必须是18位!')
if len(tel) != 11:
raise Exception('手机号必须是11位!') # 更新数据库中的学生信息
cursor = cn.cursor()
cursor.execute('UPDATE 学生信息表 SET 姓名=?, 身份证号码=?, 手机号=? WHERE 学号=?',
(studentName, idCard, tel, studentId))
cn.commit()
showinfo('提示', '更新成功!')
except Exception as e:
showinfo('错误', str(e)) def deleteStudent(studentId):
result = askokcancel('确认', '确定要删除该学生信息吗?')
if result:
# 删除数据库中的学生信息
cursor = cn.cursor()
cursor.execute('DELETE FROM 学生信息表 WHERE 学号=?', (studentId,))
cn.commit()
showinfo('提示', '删除成功!')
searchVar.set('') searchEntry.focus_set()

7.设置批量导入学生信息

def importStudents():
# 要求用户选择一个 Excel 文件
file_path = askopenfilename(filetypes=[('Excel Files', '*.xlsx')]) if file_path:
try:
# 将 Excel 文件读入 pandas DataFrame 中
df = pd.read_excel(file_path) # 循环访问 DataFrame 中的每一行
for _, row in df.iterrows():
student_id = str(row['学号'])
student_name = str(row['姓名'])
id_card = str(row['身份证号码'])
tel = str(row['手机号']) # 检查数据库中是否已存在学生
cursor = cn.cursor()
cursor.execute("SELECT * FROM 学生信息表 WHERE 学号=?", (student_id,))
existing_student = cursor.fetchone() if existing_student:
# Student 已存在,跳过导入
continue # 将学生插入数据库
cursor.execute('INSERT INTO 学生信息表 VALUES (?, ?, ?, ?)', (student_id, student_name, id_card, tel))
cn.commit() showinfo('提示', '批量导入成功!')
except Exception as e:
showinfo('错误', str(e))
else:
showinfo('提示', '未选择文件!') # 记录用户操作
logging.info('用户执行了批量导入学生信息')

注意:批量导入信息需要提供Excel 文件,这个时候要下载另一个库:openpyxl。看名字就知道是用于Python打开Excel 文件的库。虽然在程序里面没有直接调用,但是如果没有这个库,在运行时功能时就使用不了。Excel 文件模版如下:

以上的就是学生管理模块功能。

8.设置查看日志:

def viewLog():
# 获取当前工程目录
project_dir = os.getcwd() # 设置日志文件路径
log_file_path = os.path.join(project_dir, '日志文件.txt') # 如果日志文件所在目录不存在,则创建该目录
log_dir = os.path.dirname(log_file_path)
if not os.path.exists(log_dir):
os.makedirs(log_dir) # 打开日志文件,进行日志记录
# 设置日志记录器
logging.basicConfig(filename='日志文件.txt', level=logging.INFO, format='%(asctime)s - %(message)s') # 创建一个新的窗口
logWindow = Toplevel(root)
logWindow.title('日志') # 创建一个文本框,用于显示日志内容
logText = Text(logWindow)
logText.pack() # 读取日志文件内容,并将其显示在文本框中
with open('日志文件.txt', 'r') as file:
logContent = file.read()
logText.insert(END, logContent)

注意:这个日志文件会自动生成在工程目录下,并且记录你每次的操作过程

9.设置关于我们:

def about():
showinfo('关于我们',
'本程序由林渊达工作室研发。\n林渊达工作室是一个致力于Python程序研究和人工智能开发等工作室。\n如遇问题可以联系邮箱:linyuanda@linyuanda.com。\n个人博客:https'
'://www.cnblogs.com/python120。')

注意:关于我们是我的开发声明,如无必要,最好不要修改,谢谢配合。

以上就是其他模块的功能

10.进入GUI模块:

if __name__ == '__main__':
main()

好啦,这样就大功告成啦。

完整代码如下:

from tkinter import *
from tkinter.messagebox import askokcancel, showinfo
import tkinter.ttk as ttk
import pyodbc
import os
import logging
import pandas as pd
from tkinter.filedialog import askopenfilename # 连接到 SQL ServerConnect to SQL Server
cn = pyodbc.connect('DRIVER={SQL Server};SERVER=(local);DATABASE=学生管理系统;UID=LYD\\lyd;Trusted_Connection=yes') root = Tk()
systitle = '学生信息管理系统' # 系统标题
operateFrame = Frame(root) # 功能窗口
operateFrame.pack() def main():
root.geometry('800x600') # 设置窗口初始大小
root.title(systitle) # 设置系统标题
# 创建系统菜单
menubar = Menu(root) # 创建Menu对象menubar,将作为root窗口中的菜单
root.config(menu=menubar) # 将menubar菜单作为root窗口的顶层菜单栏
# menuStudent将作为menubar菜单的子菜单
menuStudent = Menu(menubar, tearoff=0)
menuStudent.add_command(label='添加新学生', font=('宋体', 10), command=addStudent)
menuStudent.add_command(label='显示全部学生信息', font=('宋体', 10), command=showAllStudent)
menuStudent.add_command(label='查找/修改/删除学生信息', font=('宋体', 10), command=checkUpdateStudent)
menuStudent.add_command(label='批量导入学生信息', font=('宋体', 10), command=importStudents)
# 菜单file添加为menubar的子菜单
menubar.add_cascade(label='学生管理', font=('宋体', 10), menu=menuStudent) menuHelp = Menu(menubar, tearoff=0) # help将作为menubar菜单的子菜单
menuHelp.add_command(label='查看日志', font=('宋体', 10), command=viewLog)
menuHelp.add_command(label='关于我们', font=('宋体', 10), command=about)
# 菜单help添加为menubar的子菜单
menubar.add_cascade(label='其他', font=('宋体', 10), menu=menuHelp) menubar.add_command(label='退出', font=('宋体', 10), command=root.quit) root.mainloop() def addStudent():
for widget in operateFrame.winfo_children(): # 清空窗口中原有的所有内容
widget.destroy()
f1 = Frame(operateFrame)
f1.pack()
studentIdVar = StringVar()
studentNameVar = StringVar()
idCardVar = StringVar()
telVar = StringVar() lStudentId = Label(f1, text='学号:')
lStudentName = Label(f1, text='姓名:')
lIdCard = Label(f1, text='身份证号码:')
lTel = Label(f1, text='手机号:')
tStudentId = Entry(f1, textvariable=studentIdVar)
tStudentName = Entry(f1, textvariable=studentNameVar)
tIdCard = Entry(f1, textvariable=idCardVar)
tTel = Entry(f1, textvariable=telVar) lStudentId.grid(row=1, column=1)
lStudentName.grid(row=2, column=1)
lIdCard.grid(row=3, column=1)
lTel.grid(row=4, column=1)
tStudentId.grid(row=1, column=2)
tStudentName.grid(row=2, column=2)
tIdCard.grid(row=3, column=2)
tTel.grid(row=4, column=2) f2 = Frame(operateFrame)
f2.pack(pady=20) bReset = Button(f2, text='重置')
bSave = Button(f2, text='保存') bReset.grid(row=1, column=1)
bSave.grid(row=1, column=2)
# 记录用户操作
logging.info('用户执行了添加新学生操作') def reset():
studentIdVar.set('')
studentNameVar.set('')
idCardVar.set('')
telVar.set('') bReset.config(command=reset) def save():
try:
id = studentIdVar.get()
if not id.isdigit():
raise Exception('学号必须为数字!')
name = studentNameVar.get()
id_card = idCardVar.get()
if len(id_card) != 18:
raise Exception('身份证号码必须是18位!')
tel = telVar.get()
if len(tel) != 11:
raise Exception('手机号必须是11位!')
# 向数据库发送插入指令
cursor = cn.cursor()
cursor.execute('INSERT INTO 学生信息表 VALUES (?, ?, ?, ?)', (id, name, id_card, tel))
cn.commit()
showinfo('提示', '保存成功!')
except Exception as e:
showinfo('错误', str(e)) bSave.config(command=save) def showAllStudent():
# 清空窗口中原有的所有内容
for widget in operateFrame.winfo_children():
widget.destroy() # 创建表格
tree = ttk.Treeview(operateFrame)
tree["columns"] = ("学号", "姓名", "身份证号码", "手机号")
tree.column("学号", width=100)
tree.column("姓名", width=100)
tree.column("身份证号码", width=150)
tree.column("手机号", width=100)
tree.heading("学号", text="学号")
tree.heading("姓名", text="姓名")
tree.heading("身份证号码", text="身份证号码")
tree.heading("手机号", text="手机号")
tree.pack(side=LEFT, fill=Y) # 从数据库中获取学生信息
cursor = cn.cursor()
cursor.execute("SELECT * FROM 学生信息表")
rows = cursor.fetchall() # 在表格中显示学生信息
for row in rows:
tree.insert("", "end", values=row)
# 记录用户操作
logging.info('用户执行了显示全部学生信息操作') def checkUpdateStudent():
for widget in operateFrame.winfo_children():
widget.destroy() f1 = Frame(operateFrame)
f1.pack() searchVar = StringVar()
searchLabel = Label(f1, text='请输入学号:')
searchEntry = Entry(f1, textvariable=searchVar)
searchButton = Button(f1, text='搜索', command=lambda: searchStudent(searchVar.get())) searchLabel.grid(row=1, column=1)
searchEntry.grid(row=1, column=2)
searchButton.grid(row=1, column=3) def searchStudent(studentId):
# 在数据库中搜索学生信息
cursor = cn.cursor()
cursor.execute("SELECT * FROM 学生信息表 WHERE 学号=?", (studentId,))
row = cursor.fetchone()
# 记录用户操作
logging.info('用户执行了查找/修改/删除学生信息操作') if row:
showStudentInfo(row)
else:
showinfo('提示', '未找到该学生信息!') def showStudentInfo(studentInfo):
# 清空窗口中原有的所有内容
for i in operateFrame.winfo_children():
i.destroy() f2 = Frame(operateFrame)
f2.pack() studentIdVar = StringVar(value=studentInfo[0])
studentNameVar = StringVar(value=studentInfo[1])
idCardVar = StringVar(value=studentInfo[2])
telVar = StringVar(value=studentInfo[3]) lStudentId = Label(f2, text='学号:')
lStudentName = Label(f2, text='姓名:')
lIdCard = Label(f2, text='身份证号码:')
lTel = Label(f2, text='手机号:')
tStudentId = Entry(f2, textvariable=studentIdVar, state='readonly')
tStudentName = Entry(f2, textvariable=studentNameVar)
tIdCard = Entry(f2, textvariable=idCardVar)
tTel = Entry(f2, textvariable=telVar) lStudentId.grid(row=1, column=1)
lStudentName.grid(row=2, column=1)
lIdCard.grid(row=3, column=1)
lTel.grid(row=4, column=1)
tStudentId.grid(row=1, column=2)
tStudentName.grid(row=2, column=2)
tIdCard.grid(row=3, column=2)
tTel.grid(row=4, column=2) f3 = Frame(operateFrame)
f3.pack(pady=20) bUpdate = Button(f3, text='更新',
command=lambda: updateStudent(studentIdVar.get(), studentNameVar.get(), idCardVar.get(),
telVar.get()))
bDelete = Button(f3, text='删除', command=lambda: deleteStudent(studentIdVar.get())) bUpdate.grid(row=1, column=1)
bDelete.grid(row=1, column=2) def updateStudent(studentId, studentName, idCard, tel):
try:
if not studentId.isdigit():
raise Exception('学号必须为数字!')
if len(idCard) != 18:
raise Exception('身份证号码必须是18位!')
if len(tel) != 11:
raise Exception('手机号必须是11位!') # 更新数据库中的学生信息
cursor = cn.cursor()
cursor.execute('UPDATE 学生信息表 SET 姓名=?, 身份证号码=?, 手机号=? WHERE 学号=?',
(studentName, idCard, tel, studentId))
cn.commit()
showinfo('提示', '更新成功!')
except Exception as e:
showinfo('错误', str(e)) def deleteStudent(studentId):
result = askokcancel('确认', '确定要删除该学生信息吗?')
if result:
# 删除数据库中的学生信息
cursor = cn.cursor()
cursor.execute('DELETE FROM 学生信息表 WHERE 学号=?', (studentId,))
cn.commit()
showinfo('提示', '删除成功!')
searchVar.set('') searchEntry.focus_set() def importStudents():
# 要求用户选择一个 Excel 文件
file_path = askopenfilename(filetypes=[('Excel Files', '*.xlsx')]) if file_path:
try:
# 将 Excel 文件读入 pandas DataFrame 中
df = pd.read_excel(file_path) # 循环访问 DataFrame 中的每一行
for _, row in df.iterrows():
student_id = str(row['学号'])
student_name = str(row['姓名'])
id_card = str(row['身份证号码'])
tel = str(row['手机号']) # 检查数据库中是否已存在学生
cursor = cn.cursor()
cursor.execute("SELECT * FROM 学生信息表 WHERE 学号=?", (student_id,))
existing_student = cursor.fetchone() if existing_student:
# Student 已存在,跳过导入
continue # 将学生插入数据库
cursor.execute('INSERT INTO 学生信息表 VALUES (?, ?, ?, ?)', (student_id, student_name, id_card, tel))
cn.commit() showinfo('提示', '批量导入成功!')
except Exception as e:
showinfo('错误', str(e))
else:
showinfo('提示', '未选择文件!') # 记录用户操作
logging.info('用户执行了批量导入学生信息') def viewLog():
# 获取当前工程目录
project_dir = os.getcwd() # 设置日志文件路径
log_file_path = os.path.join(project_dir, '日志文件.txt') # 如果日志文件所在目录不存在,则创建该目录
log_dir = os.path.dirname(log_file_path)
if not os.path.exists(log_dir):
os.makedirs(log_dir) # 打开日志文件,进行日志记录
# 设置日志记录器
logging.basicConfig(filename='日志文件.txt', level=logging.INFO, format='%(asctime)s - %(message)s') # 创建一个新的窗口
logWindow = Toplevel(root)
logWindow.title('日志') # 创建一个文本框,用于显示日志内容
logText = Text(logWindow)
logText.pack() # 读取日志文件内容,并将其显示在文本框中
with open('日志文件.txt', 'r') as file:
logContent = file.read()
logText.insert(END, logContent) def about():
showinfo('关于我们',
'本程序由林渊达工作室研发。\n林渊达工作室是一个致力于Python程序研究和人工智能开发等工作室。\n如遇问题可以联系邮箱:linyuanda@linyuanda.com。\n个人博客:https'
'://www.cnblogs.com/python120。') if __name__ == '__main__':
main()

运行结果如下:

至于各大功能运行情况可以自行尝试。如果有问题欢迎随时提问!

[Python急救站]学生管理系统链接数据库的更多相关文章

  1. 基于python的学生管理系统(含数据库版本)

    这次支持连接到后台的数据库,直接和数据库进行交互,实现基本的增删查改 #!/usr/bin/python3 # coding=utf-8 """ ************ ...

  2. Python简易学生管理系统

    目录结构: 1. 学生文件 student.py # 学生类 class Student(object): # 存放学生信息 student_info = {} # 学生初始化方法 def __ini ...

  3. Python连接SqlServer+GUI嵌入式——学生管理系统1.0

    学生管理系统1.0 1.建学生数据库 2.数据库嵌入高级语言(Python) 3.界面设计 简化思路: 1.先通过SqlServer2012建立学生数据库,包括账号.密码,姓名.选课等信息 2.运用P ...

  4. 如何用python做出老师看了都给满分的GUI学生管理系统毕设

    序 言 哈喽大家好鸭!我是小熊猫 最近有什么有趣的事情发生吗?快来说给我听听( •̀ ω •́ )✧表弟大学快毕业了,学了一个学期Python居然还不会写学生管理系统,真的给我丢脸啊,教他又不肯学,还 ...

  5. Python写的链接数据库存取数据

    Python写的链接数据库存取数据 #!/usr/bin/python # -*- coding: UTF-8 -*- from __future__ import print_function im ...

  6. python开发的学生管理系统

    python开发的学生管理系统(基础版) #定义一个函数,显示可以使用的功能列表给用户 def showInfo(): print("-"*30) print(" 学生管 ...

  7. 学生管理系统——数据库、java基础

    1.项目分层 view层:视图层 controller层:控制层 service层:业务层 dao层:数据库访问层 domain:实体包 tools:工具类 2.jar包 3.配置文件 4.程序设计 ...

  8. 用python实现简易学生管理系统

    以前用C++和Java写过学生管理系统,也想用Python试试,果然“人生苦短,我用Python”.用Python写的更加简洁,实现雏形也就不到100行代码. 下面上代码 #!/usr/bin/pyt ...

  9. python学生管理系统

    import osimport re #获取本机用户名,构建student.txt文件名创建在左面import getpassusername=getpass.getuser()print(" ...

  10. 1、纯python编写学生信息管理系统

    1.效果图 2.python code: class studentSys(object): ''' _init_(self) 被称为类的构造函数或初始化方法, self 代表类的实例,self 在定 ...

随机推荐

  1. 创业团队建设与管理mooc【第二次中期测验】

    mo'o 第二次中期测验 返回 已经超过规定的测试次数或提交截止时间已过.你可以作为自我学习进行测验,但提交的结果将无法获得学分. 1 单选(2分) PDCA循环中的P是指什么? 得分/总分 A. 处 ...

  2. 【原型链污染】Python与Js

    [原型链污染]Python与Js 一.背景 最近在TSCTF的比赛题中遇到了Python的原型链污染题目,所以借此机会学习一下.说到原型链,最多的还是在Js中,所以就一并学习一下.(因为是菜鸡所以文章 ...

  3. Redis主从复制部署小结

    Redis主从 搭建主从架构 单节点Redis的并发能力是有上限的,要进一步提高Redis的并发能力,就需要搭建主从集群,实现读写分离. 主从数据同步原理 全量同步 主从第一次建立连接时,会执行全量同 ...

  4. 多线程指南:探究多线程在Node.js中的广泛应用

    前言 最初,JavaScript是用于设计执行简单的web任务的,比如表单验证.直到2009年,Node.js的创建者Ryan Dahl让开发人员认识到了通过JavaScript 进行后端开发已成为可 ...

  5. Dubbo 路由及负载均衡性能优化

    作者:vivo 互联网中间件团队- Wang Xiaochuang 本文主要介绍在vivo内部针对Dubbo路由模块及负载均衡的一些优化手段,主要是异步化+缓存,可减少在RPC调用过程中路由及负载均衡 ...

  6. 源码搭建zabbix平台

    1.基于lnmp部署zabbix监控平台; zabbix优点: 1.支持自动发现服务器和网络设备: 2.分布式的监控体系和集中式的WEB管理: 3.支持主动监控和被动监控模式: 4.基于SNMP.IP ...

  7. CF85B [Embassy Queue]

    Problem 题目简述 有 \(n\) 个人分别在 \(c_i\) 的时刻来,他们都要在 \(k_1\),\(k_2\) 和 \(k_3\) 窗口干不同的事,当有后面一人也排在在同一窗口时,必须等待 ...

  8. C# 压缩PDF文件

    PDF 文件可以包含文本.图片及各种媒体元素,但如果文件太大则会影响传输效果同时也会占用过多磁盘空间.通过压缩PDF文件,能够有效减小文件大小,从而提高传输效率并节省存储空间.想要通过C#代码快速有效 ...

  9. 深度解析BERT:从理论到Pytorch实战

    本文从BERT的基本概念和架构开始,详细讲解了其预训练和微调机制,并通过Python和PyTorch代码示例展示了如何在实际应用中使用这一模型.我们探讨了BERT的核心特点,包括其强大的注意力机制和与 ...

  10. java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符)

    报错信息:java: -source 1.5 中不支持 diamond 运算符 (请使用 -source 7 或更高版本以启用 diamond 运算符) 解决方案:如下 1.file --> p ...