https://blog.csdn.net/qq_45811949/article/details/106065845?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159192396719195239844044%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159192396719195239844044&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-3-106065845.ecpm_v1_rank_ctr_v2&utm_term=python%E5%9B%BE%E5%BD%A2%E5%8C%96%E5%AD%A6%E7%94%9F%E7%AE%A1%E7%90%86
程序我都写到了一个.py文件中,之前做的课程作业,现在看起来有点凌乱,
需要先在sqlserver中新建一个XSCJ数据库,里面有两张表,一个student表,一个teacher表
创建表的语句在程序的开头,我注释掉了,先取消掉那个注释,创建完再注释掉就可以了
前两张图片是背景图片,必须用gif格式的(我也不知为什么),还有一个图标ico格式的,网上随便找一个
import tkinter
from tkinter import *
from tkinter import ttk
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
import time
#导入ADO接口模块
from tkinter import messagebox
from tkinter.messagebox import *
import pymssql
import win32com.client
#连接服务器和数据库
cn=win32com.client.Dispatch('ADODB.Connection')
cnstr='Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=(local)'
cn.Open(cnstr,'sa','sa')
#打开数据库
cn.Execute("USE XSCJ")
#创建表
#cn.Execute("CREATE TABLE student( cno varchar(50), cname varchar(50),password varchar(50),english int, math int, python int,DW int)")
#cn.Execute("CREATE TABLE teacher( name varchar(50),password varchar(50))")
#建立记录集合
rs=win32com.client.Dispatch('ADODB.RecordSet')
server = 'DESKTOP-FIHLQ0U'
user ='sa'
userpassword ='sa'
database = 'XSCJ'
conn = pymssql.connect(server,user,userpassword,database)
cursor = conn.cursor()
def Main():
rt = Tk()
rt.title('学生成绩管理系统')
rt.geometry('605x328+800+200')
rt.iconbitmap('77.ico')
bg = PhotoImage(file='背景.gif')
lab1 = Label(image=bg)
lab1.place(x=0, y=0)
Label(text='账户',font=("宋体",'12')).place(x=120, y=90)
Label(text='密码',font=("宋体",'12')).place(x=120, y=130)
e1=Entry(width=30)
e1.focus()
e1.place(x=190, y=90)
e2=Entry(show='*', width=30)
e2.place(x=190, y=130)
# 获取当前时间
def getTime():
timeStr = time.strftime('%Y-%m-%d %H:%M')
Rtime.configure(text=timeStr)
#rt.after(1000, getTime)# 每隔1s调用函数 getTime 自身获取时间
# 时间显示
Rtime = tkinter.Label(rt, text='', bg='white')
Rtime.place(x=220, y=40)
getTime()
def XSDL():
s1=e1.get()
s2=e2.get()
cursor.execute("SELECT * FROM student WHERE CNO='%s' AND PASSWORD = '%s' " % (s1, s2))
T=cursor.fetchone()
if T is None:
messagebox.showerror('登录失败', '账户或密码错误!')
else:
messagebox.showinfo("成功", "登录成功" )
rt.destroy()
rt1 = Tk()
rt1.title('学生登录')
rt1.geometry('605x328+800+200')
rt1.iconbitmap('77.ico')
def qx():
rt1.destroy()
Main()
def CXCJ():
rt2 = Tk()
rt2.title('学生登录')
rt2.geometry('800x400+800+200')
rt2.iconbitmap('77.ico')
columns = ("学号", "姓名", "英语", "数学", "python", "DW")
tree = ttk.Treeview(rt2,height=15, show="headings", columns=columns) # 隐藏首列
tree.column("学号", width=100) # 表示列,不显示
tree.column("姓名", width=100)
tree.column("英语", width=100)
tree.column("数学", width=100)
tree.column("python", width=100)
tree.column("DW", width=100)
tree.place(x=100, y=10)
tree.heading("学号", text='学号', anchor=CENTER)
tree.heading("姓名", text='姓名', anchor=CENTER)
tree.heading("英语", text='英语', anchor=CENTER)
tree.heading("数学", text='数学', anchor=CENTER)
tree.heading("python", text='python', anchor=CENTER)
tree.heading("DW", text='DW', anchor=CENTER)
def qx2():
rt2.destroy()
Button(rt2,command=qx2, text="取消", width=10).place(x=500, y=350)
cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student where cno='%s'"% s1)
T = cursor.fetchall()
for row in T:
tree.insert("", 0, values=(row[0], row[1], row[2], row[3], row[4], row[5]))
def XGMM():
Label(text='学号').place(x=100, y=70)
Label(text='旧密码:').place(x=100, y=95)
Label(text='新密码:').place(x=100, y=120)
e3 = Entry(width=30)
e3.place(x=200, y=70)
e4 = Entry(show='*', width=30)
e4.place(x=200, y=95)
e5 = Entry(show='*', width=30)
e5.place(x=200, y=120)
def qr():
s3 = e3.get()
s4 = e4.get()
s5 = e5.get()
cursor.execute("SELECT * FROM student WHERE CNO='%s' AND PASSWORD = '%s' " % (s3, s4))
T = cursor.fetchone()
if T is None:
messagebox.showerror('修改失败', '账户或密码错误!')
else:
rs.LockType = 4
cursor.execute("UPDATE STUDENT SET PASSWORD='%s' WHERE CNO= '%s' " % (s5, s3))
conn.commit()
messagebox.showinfo("成功", '密码修改成功!!!')
Button(command=qr, text="确认", width=10).place(x=140, y=150)
Button(command=quit, text="退出", width=10).place(x=240, y=150)
Button(command=qx, text="回到首页", width=10).place(x=340, y=150)
Button(command=XGMM, text="修改密码", width=10).place(x=140, y=150)
Button(command=CXCJ, text="查询成绩", width=10).place(x=240, y=150)
Button(command=qx, text="回到首页", width=10).place(x=340, y=150)
def JSDL():
s1=e1.get()
s2=e2.get()
cursor.execute("SELECT * FROM teacher WHERE name='%s' AND PASSWORD = '%s' " % (s1, s2))
T=cursor.fetchone()
if T is None:
messagebox.showerror('登录失败', '账户或密码错误!')
else:
messagebox.showinfo("成功", "登录成功" )
rt.destroy()
rt1 = Tk()
rt1.title('学生成绩管理')
rt1.geometry('920x600+600+100')
rt1.iconbitmap('77.ico')
Label(text='学生成绩管理',font=20,fg='red').place(x=350, y=10)
Label(text='学号:',font=10).place(x=10, y=50)
Label(text='姓名:',font=10).place(x=310, y=50)
Label(text='英语:',font=10).place(x=610, y=50)
Label(text='数学:',font=10).place(x=10, y=100)
Label(text='python:',font=10).place(x=310, y=100)
Label(text='DW:',font=10).place(x=610, y=100)
e3 = Entry(width=30)
e3.focus()
e3.place(x=90, y=50)
e4 = Entry(width=30)
e4.place(x=390, y=50)
e5 = Entry(width=30)
e5.place(x=690, y=50)
e6 = Entry(width=30)
e6.place(x=90, y=100)
e7 = Entry(width=30)
e7.place(x=390, y=100)
e8 = Entry(width=30)
e8.place(x=690, y=100)
def qx():
rt1.destroy()
Main()
# 显示所有项目
def get():
#清空表格
def delButton(tree):
x = tree.get_children()
for item in x:
tree.delete(item)
delButton(tree)
cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student order by cno desc")
T = cursor.fetchall()
for row in T:
tree.insert("", 0, values=(row[0],row[1], row[2],row[3], row[4],row[5]))
#添加学生信息
def add():
s3 = e3.get()
s4 = e4.get()
s5 = e5.get()
s6 = e6.get()
s7 = e7.get()
s8 = e8.get()
if len(e3.get()) == 0 and len(e4.get()) == 0:
messagebox.showerror("添加失败", "学号不能为空!")
else:
cursor.execute("SELECT * FROM student WHERE CNO='%s' " % (s3))
T = cursor.fetchone()
if T is None:
rs.LockType = 4
cursor.execute(
"INSERT INTO STUDENT(CNO,CNAME,ENGLISH,MATH,PYTHON,DW) VALUES('%s','%s','%s','%s','%s','%s')" % (
s3, s4, s5, s6, s7, s8))
conn.commit()
messagebox.showinfo("提示", "添加成功!")
tree.insert("", 0, values=(s3, s4, s5, s6, s7, s8))
else:
messagebox.showerror('添加失败', '该学生已存在!')
# 删除学生成绩
def delete():
message['text'] = ''
try:
tree.item(tree.selection())['values'][0]
except IndexError as e:
message['text'] = '请选择操作项目'
return
message['text'] = ''
cno = tree.item(tree.selection())['values'][0]
rs.LockType = 4
cursor.execute("delete from student where cno='%s'" % cno)
conn.commit()
message['text'] = '{}号删除成功'.format(cno)
get()
# 修改学生成绩
def edit():
message['text'] = ''
try:
tree.item(tree.selection())['values'][0]
except IndexError as e:
message['text'] = '请选择操作项目'
return
old_cno = tree.item(tree.selection())['values'][0]
old_name = tree.item(tree.selection())['values'][1]
old_english = tree.item(tree.selection())['values'][2]
old_math = tree.item(tree.selection())['values'][3]
old_python = tree.item(tree.selection())['values'][4]
old_DW = tree.item(tree.selection())['values'][5]
#顶级窗口
edit_win = Toplevel()
edit_win.title('修改学生信息')
screenwidth = edit_win.winfo_screenwidth()
screenheight = edit_win.winfo_screenheight()
width = 300
high = 350
edit_win.geometry('%dx%d+%d+%d' % (width, high, (screenwidth - width) / 2, (screenheight - high) / 2))
# 原来的项目
Label(edit_win, text='学号').grid(row=0, column=1)
Entry(edit_win, textvariable=StringVar(edit_win, value=old_cno), state='readonly').grid(
row=0, column=2)
Label(edit_win, text='原来姓名').grid(row=2, column=1)
Entry(edit_win, textvariable=StringVar(edit_win, value=old_name), state='readonly').grid(
row=2, column=2)
Label(edit_win, text='新的姓名').grid(row=3, column=1)
new_name = Entry(edit_win, textvariable=StringVar(edit_win, value=old_name))
new_name.grid(row=3, column=2)
Label(edit_win, text='原来英语成绩').grid(row=4, column=1)
Entry(edit_win, textvariable=StringVar(edit_win, value=old_english), state='readonly').grid(
row=4, column=2)
Label(edit_win, text='新的英语成绩').grid(row=5, column=1)
new_english = Entry(edit_win, textvariable=StringVar(edit_win, value=old_english))
new_english.grid(row=5, column=2)
Label(edit_win, text='原来数学成绩').grid(row=6, column=1)
Entry(edit_win, textvariable=StringVar(edit_win, value=old_math), state='readonly').grid(
row=6, column=2)
Label(edit_win, text='新的数学成绩').grid(row=7, column=1)
new_math = Entry(edit_win, textvariable=StringVar(edit_win, value=old_math))
new_math.grid(row=7, column=2)
Label(edit_win, text='原来python成绩').grid(row=8, column=1)
Entry(edit_win, textvariable=StringVar(edit_win, value=old_python), state='readonly').grid(
row=8, column=2)
Label(edit_win, text='新的python成绩').grid(row=9, column=1)
new_python = Entry(edit_win, textvariable=StringVar(edit_win, value=old_python))
new_python.grid(row=9, column=2)
Label(edit_win, text='原来DW成绩').grid(row=10, column=1)
Entry(edit_win, textvariable=StringVar(edit_win, value=old_DW), state='readonly').grid(
row=10, column=2)
Label(edit_win, text='新的DW成绩').grid(row=11, column=1)
new_DW = Entry(edit_win, textvariable=StringVar(edit_win, value=old_DW))
new_DW.grid(row=11, column=2)
# 数据修改处理
def edit_record():
s3 = new_name.get()
s4 = new_english.get()
s5 = new_math.get()
s6 = new_python.get()
s7 = new_DW.get()
rs.LockType = 4
cursor.execute("update student set cname='%s',english='%s',math='%s',python='%s',DW='%s' where cno='%s' " % ( s3,s4,s5,s6,s7,old_cno))
conn.commit()
edit_win.destroy()
message['text'] = "{}更新成功".format(old_cno)
get()
Button(edit_win, text='更新',
command=edit_record).grid(row=12, column=2, sticky=W + E)
edit_win.mainloop()###
#查询学生成绩
def select():
top = Toplevel()
top.title('查询学生信息')
screenwidth = top.winfo_screenwidth()
screenheight = top.winfo_screenheight()
width = 800
high = 600
top.geometry('%dx%d+%d+%d' % (width, high, (screenwidth - width) / 2, (screenheight - high) / 2))
Label(top,text='请输入学号').place(x=100, y=10)
l1 = Entry(top,width=30)
l1.place(x=200, y=10)
Label(top,text='请输入姓名').place(x=100, y=50)
l2 = Entry(top,width=30)
l2.place(x=200, y=50)
columns = ("学号", "姓名", "英语", "数学", "python", "DW")
tree = ttk.Treeview(top,height=15, show="headings", columns=columns) # 隐藏首列
tree.column("学号", width=100) # 表示列,不显示
tree.column("姓名", width=100)
tree.column("英语", width=100)
tree.column("数学", width=100)
tree.column("python", width=100)
tree.column("DW", width=100)
tree.place(x=100, y=100)
tree.heading("学号", text='学号', anchor=CENTER)
tree.heading("姓名", text='姓名', anchor=CENTER)
tree.heading("英语", text='英语', anchor=CENTER)
tree.heading("数学", text='数学', anchor=CENTER)
tree.heading("python", text='python', anchor=CENTER)
tree.heading("DW", text='DW', anchor=CENTER)
def qx2():
top.destroy()
def qk():
# 清空表格
def delButton(tree):
x = tree.get_children()
for item in x:
tree.delete(item)
delButton(tree)
l1.delete(0, 'end')
l2.delete(0, 'end')
def qr():
# 清空表格
def delButton(tree):
x = tree.get_children()
for item in x:
tree.delete(item)
delButton(tree)
t1=l1.get()
t2=l2.get()
cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student where cno='%s'" % t1)
T = cursor.fetchall()
for row in T:
tree.insert("", 0, values=(row[0], row[1], row[2], row[3], row[4], row[5]))
cursor.execute("select CNO,CNAME,ENGLISH,MATH,PYTHON,DW from student where cname='%s'" % t2)
T = cursor.fetchall()
for row in T:
tree.insert("", 0, values=(row[0], row[1], row[2], row[3], row[4], row[5]))
Button(top,command=qr, text="查询", width=10).place(x=200, y=450)
Button(top,command=qk, text="清空", width=10).place(x=350, y=450)
Button(top,command=qx2, text="取消", width=10).place(x=500, y=450)
#清空按钮
def qk():
e3.delete(0,'end')
e4.delete(0, 'end')
e5.delete(0, 'end')
e6.delete(0, 'end')
e7.delete(0, 'end')
e8.delete(0, 'end')
#统计模块
def tj():
def xs():
if cursor.execute("select max(english) , min(english), round(avg(english),1),COUNT (case when english between 0 and 59 then 1 end),COUNT (case when english between 60 and 69 then 1 end),COUNT (case when english between 70 and 79 then 1 end),COUNT (case when english between 80 and 89 then 1 end),COUNT (case when english between 90 and 100 then 1 end),count(*) from student")!=0:
S1 = cursor.fetchall()
S1 = ("英语",) + S1[0]
tree.insert("", 0, values=S1)
cursor.execute(
"select max(math), min(math), round(avg(math),1),COUNT (case when math between 0 and 59 then 1 end),COUNT (case when math between 60 and 69 then 1 end),COUNT (case when math between 70 and 79 then 1 end),COUNT (case when math between 80 and 89 then 1 end),COUNT (case when math between 90 and 100 then 1 end), count(*) from student")
S2 = cursor.fetchall()
S2 = ("数学",) + S2[0]
tree.insert("", 1, values=S2)
cursor.execute(
"select max(python) , min(python), round(avg(python),1),COUNT (case when python between 0 and 59 then 1 end),COUNT (case when python between 60 and 69 then 1 end),COUNT (case when python between 70 and 79 then 1 end),COUNT (case when python between 80 and 89 then 1 end),COUNT (case when python between 90 and 100 then 1 end),count(*) from student")
S3 = cursor.fetchall()
S3 = ("Python",) + S3[0]
tree.insert("", 0, values=S3)
cursor.execute(
"select max(DW), min(DW), round(avg(DW),1),COUNT (case when DW between 0 and 59 then 1 end),COUNT (case when DW between 60 and 69 then 1 end),COUNT (case when DW between 70 and 79 then 1 end),COUNT (case when DW between 80 and 89 then 1 end),COUNT (case when DW between 90 and 100 then 1 end), count(*) from student")
S4 = cursor.fetchall()
S4 = ("数据仓库",) + S4[0]
tree.insert("", 1, values=S4)
else:
showerror("统计失败", "没有学生数据无法进行统计")
def chart():
""""统计数据的柱状图"""
# 柱状图
# 使图形中的中文正常编码显示
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 每个柱子下标的索引
cursor.execute("select * from student")
stu_tuple = cursor.fetchall()
x = np.arange(len(stu_tuple))
y = [x[5] for x in stu_tuple]
y1 = [x[6] for x in stu_tuple]
y2= [x[3] for x in stu_tuple]
y3 = [x[4] for x in stu_tuple]
# 柱子的宽度
bar_width = 0.2
tick_label = [x[2] for x in stu_tuple]
# 绘制柱状图并设置其各项属性
plt.bar(x, y, bar_width, align="center", color="c", label="Python", alpha=0.5)
plt.bar(x + bar_width, y1, bar_width, color="b", align="center", label="DW", alpha=0.5)
plt.bar(x + 2*bar_width, y2, bar_width, color="r", align="center", label="英语", alpha=0.5)
plt.bar(x + 3*bar_width, y3, bar_width, color="orange", align="center", label="数学", alpha=0.5)
plt.tight_layout(pad=0.4, w_pad=10.0, h_pad=3.0)
plt.title("学生成绩统计表")
plt.xlabel("姓名")
plt.ylabel("成绩")
plt.xticks(x + bar_width / 2, tick_label)
plt.xticks(rotation=-90)
plt.yticks(np.arange(0, 101, 20))
# 添加图例
plt.legend(loc="upper left")
plt.show()
"""创建显示统计的窗口"""
top = Toplevel()
top.title('统计学生信息')
screenwidth = top.winfo_screenwidth()
screenheight = top.winfo_screenheight()
width = 700
high = 500
top.geometry('%dx%d+%d+%d' % (width, high, (screenwidth - width) / 2, (screenheight - high) / 2))
# 创建显示数据的表格
tree = ttk.Treeview(top, show='headings', column=('object', 'max', 'min', 'average', 'fail',
'pass', 'middle', 'good', 'super', 'count'))
tree.column('object', width=50, anchor="center")
tree.column('max', width=50, anchor="center")
tree.column('min', width=50, anchor="center")
tree.column('average', width=50, anchor="center")
tree.column('fail', width=50, anchor="center")
tree.column('pass', width=50, anchor="center")
tree.column('middle', width=50, anchor="center")
tree.column('good', width=50, anchor="center")
tree.column('super', width=50, anchor="center")
tree.column('count', width=50, anchor="center")
tree.heading('object', text='课程')
tree.heading('max', text='最高分')
tree.heading('min', text='最低分')
tree.heading('average', text='平均分')
tree.heading('fail', text='不及格')
tree.heading('pass', text='及格')
tree.heading('middle', text='中')
tree.heading('good', text='良')
tree.heading('super', text='优')
tree.heading('count', text='总人数')
Button(top,command=chart, text="柱形图", width=15).place(x=300, y=400)
tree.place(relx=0.02, rely=0.3, relwidth=0.96)
xs()
Button(command=get, text="显示所有信息", width=15).place(x=750, y=200)
Button(command=add, text="添加学生信息", width=15).place(x=750, y=250)
Button(command=delete, text="删除学生信息", width=15).place(x=750, y=300)
Button(command=edit, text="修改学生信息", width=15).place(x=750, y=350)
Button(command=select, text="查询学生信息", width=15).place(x=750, y=400)
Button(command=tj, text="统计学生信息", width=15).place(x=750, y=450)
Button(command=qx, text="回到首页", width=15).place(x=350, y=550)
Button(command=quit, text="退出", width=15).place(x=500, y=550)
Button(command=qk, text="清空文本框", width=15).place(x=650, y=550)
message = Label(text='', fg='red')
message.place(x=100, y=550)
columns= ("学号", "姓名", "英语", "数学", "python", "DW")
tree = ttk.Treeview( height=15, show="headings",columns=columns) # 隐藏首列
tree.column("学号", width=100) # 表示列,不显示
tree.column("姓名", width=100)
tree.column("英语", width=100)
tree.column("数学", width=100)
tree.column("python", width=100)
tree.column("DW", width=100)
tree.place(x=100, y=200)
tree.heading("学号", text='学号', anchor=CENTER)
tree.heading("姓名", text='姓名', anchor=CENTER)
tree.heading("英语", text='英语', anchor=CENTER)
tree.heading("数学", text='数学', anchor=CENTER)
tree.heading("python", text='python', anchor=CENTER)
tree.heading("DW", text='DW', anchor=CENTER)
#点击列标签排序
def treeview_sort_column(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_column(tv, col, not reverse)) # 重写标题,使之成为再点倒序的标题
for col in columns:
tree.heading(col, text=col, command=lambda _col=col: treeview_sort_column(tree, _col, False))
rt1.mainloop()
#注册模块
def zhuce():
rt.destroy()
rt3 = Tk()
rt3.title('注册用户')
rt3.geometry('600x323+800+200')
rt3.iconbitmap('77.ico')
bg2 = PhotoImage(file='学生背景.gif')
lab2 = Label(image=bg2)
lab2.place(x=-2, y=0)
def qx():
rt3.destroy()
Main()
def jszc():
rt3.destroy()
rt2 = Tk()
rt2.title('教师注册')
rt2.geometry('600x323+800+200')
rt2.iconbitmap('77.ico')
Label(text='请输入姓名:').place(x=100, y=70)
Label(text='请输入密码:').place(x=100, y=95)
e3 = Entry(width=30)
e3.place(x=200, y=70)
e4 = Entry(show='*', width=30)
e4.place(x=200, y=95)
def zc1():
s1 = e3.get()
s2 = e4.get()
if len(e3.get()) == 0 and len(e4.get()) == 0:
messagebox.showerror("添加失败", "姓名和密码不能为空!")
else:
cursor.execute("SELECT * FROM teacher WHERE name='%s' " % (s1))
T = cursor.fetchone()
if T is None:
rs.LockType = 4
cursor.execute(
"INSERT INTO teacher(NAME,PASSWORD) VALUES('%s','%s')" % (s1, s2))
conn.commit()
messagebox.showinfo("提示", "添加成功!")
else:
messagebox.showerror('添加失败', '该教师已存在!')
def zc2():
rt2.destroy()
Main()
Bt1 = Button(command=zc1, text="确定", width=10)
Bt1.place(x=200, y=120)
Bt2 = Button(command=zc2, text="取消", width=10)
Bt2.place(x=300, y=120)
rt2.mainloop()
def xszc():
rt3.destroy()
rt2 = Tk()
rt2.title('学生注册')
rt2.geometry('600x323+800+200')
rt2.iconbitmap('77.ico')
Label(text='请输入学号:').place(x=100, y=45)
Label(text='请输入姓名:').place(x=100, y=70)
Label(text='请输入密码:').place(x=100, y=95)
e2 = Entry(width=30)
e2.place(x=200, y=45)
e3 = Entry(width=30)
e3.place(x=200, y=70)
e4 = Entry(show='*', width=30)
e4.place(x=200, y=95)
def zc1():
s0 = e2.get()
s1 = e3.get()
s2 = e4.get()
if len(e2.get()) == 0 and len(e3.get()) == 0 and len(e4.get()) == 0:
messagebox.showerror("添加失败", "学号和姓名、密码不能为空!")
else:
cursor.execute("SELECT * FROM student WHERE CNO='%s' " % (s0))
T = cursor.fetchone()
if T is None:
rs.LockType = 4
cursor.execute(
"INSERT INTO STUDENT(CNO,CNAME,PASSWORD) VALUES('%s','%s','%s')" % (s0, s1, s2))
conn.commit()
messagebox.showinfo("提示", "添加成功!")
else:
messagebox.showerror('添加失败', '该学生已存在!')
def zc2():
rt2.destroy()
Main()
Bt1=Button(command=zc1, text="确定", width=10)
Bt1.place(x=200, y=120)
Bt2 = Button(command=zc2, text="取消", width=10)
Bt2.place(x=300, y=120)
rt2.mainloop()
Bt1 = Button(command=xszc, text="学生注册", width=10,height=3)
Bt1.place(x=150, y=120)
Bt2 = Button(command=jszc, text="教师注册", width=10,height=3)
Bt2.place(x=250, y=120)
Bt2 = Button(command=qx, text="回到首页", width=10,height=3)
Bt2.place(x=350, y=120)
rt3.mainloop()
Button(command=XSDL, text="学生登录", width=10).place(x=90, y=190)
Button(command=JSDL, text="教师登录", width=10).place(x=190, y=190)
Button( command=zhuce, text="用户注册", width=10).place(x=290, y=190)
Button(command=quit, text="退出", width=10).place(x=390, y=190)
rt.mainloop()
Main()