天天看点

小白的第一个Python程序——成绩查询系统(二)(教师登录页)

在之前的一篇文章里,介绍了成绩查询系统中的学生登陆界面,现在来编写教师登陆界面。其实你可以把它们做成同一个界面,链接同一个数据库表,然后新建一个列来辨别登录人是教师或是学生。毕竟教师和学生的权限一定不同。

教师登陆

教师登陆其实和学生登陆相差不大,只是需要在验证用户的时候链接不同的表,然后在登陆成功后跳转到教师的操作页面。

所以只是在数据库链接时作出改动,以及定义不同的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

其实像我这样在每一个页面中都单独链接一次数据库是非常傻的,但是在这个程序完成的时候我才意识到这一点。所以在你编写的时候可以考虑整个程序只连接一次数据库。