在之前的一篇文章里,介绍了成绩查询系统中的学生登陆界面,现在来编写教师登陆界面。其实你可以把它们做成同一个界面,链接同一个数据库表,然后新建一个列来辨别登录人是教师或是学生。毕竟教师和学生的权限一定不同。
教师登陆
教师登陆其实和学生登陆相差不大,只是需要在验证用户的时候链接不同的表,然后在登陆成功后跳转到教师的操作页面。
所以只是在数据库链接时作出改动,以及定义不同的button事件而已,在此不做赘述。
import wx
import pymysql
class MyApp_teclogin(wx.Frame):
def __init__(self, *args,**kwargs):
wx.Frame.__init__(self,*args,**kwargs)
# frame = wx.Frame(parent=None, title='教师登陆界面', size=(450, 300))
self.Center()
self.panel = wx.Panel(self)
self.RegisterInterface()
def RegisterInterface(self):
# 添加静态标签
label_user = wx.StaticText(self.panel, -1, "账号:", pos=(80, 50))
label_pass = wx.StaticText(self.panel, -1, "口令:", pos=(80, 100))
# 设置输入
self.entry_user = wx.TextCtrl(self.panel, -1, size=(200, 30), pos=(130, 50))
self.entry_pass = wx.TextCtrl(self.panel, -1, size=(200, 30), pos=(130, 100), style=wx.TE_PASSWORD)
# 添加按钮
self.but_login = wx.Button(self.panel, -1, "登陆", size=(80, 30), pos=(165, 150))
# 给按钮绑定事件
self.Bind(wx.EVT_BUTTON, self.on_but_login, self.but_login)
# 单击登陆按钮弹出的对话框----成功
def show_message(self, word=""):
dlg = wx.MessageDialog(None, word, u"提示", wx.YES_NO | wx.ICON_QUESTION)
if dlg.ShowModal() == wx.ID_YES:
pass
dlg.Destroy()
# 点击登陆后的绑定事件
def on_but_login(self, event):
# 将输入赋值给定量
user_name = self.entry_user.GetValue()
pass_word = self.entry_pass.GetValue()
sql = """select * from teacher where USERNAME ='%s' """ % (user_name)
# 判断用户名和密码是否为空
if user_name and pass_word:
# 连接数据库
db = pymysql.connect(host="localhost", user="root",
password="Passw0rd", db="testdb", port=3306)
cur = db.cursor()
try:
cur.execute(sql)
results = cur.fetchall()
# 察看用户名是否存在
if results:
# 察看密码是否正确
if results[0][2] == pass_word:
from teacher import MyApp_teacher
operation = MyApp_teacher(parent=None, title='教师操作界面', size=(450, 300))
operation.Show()
self.Close(True)
pass
else:
self.show_message(word="密码错误")
else:
self.show_message(word='用户名不存在')
except Exception as e:
db.rollback()
finally:
# 关闭连接
db.close()
else:
self.show_message(word='账号和口令不能为空')
if __name__ == '__main__':
app = wx.App()
login = MyApp_teclogin(parent=None, title='教师登陆界面', size=(450, 300))
login.Show()
app.MainLoop()
当然,它需要一个表:
teacher
UID | USERNAME | RND | IDENTITY |
---|---|---|---|
1 | 1111 | 11 | 1 |
2 | 2222 | 22 | 1 |
3 | 3333 | 33 | 1 |
其实像我这样在每一个页面中都单独链接一次数据库是非常傻的,但是在这个程序完成的时候我才意识到这一点。所以在你编写的时候可以考虑整个程序只连接一次数据库。