史上最全面的python学生管理系统教程(三)_python学生管理系统ui(1)

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img



既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024c (备注Python)
img

正文

        else:
            i+=1
            showinfo(title='错误', message='账号或密码错误!')

### 注册窗口


![](https://img-blog.csdnimg.cn/20200119155910988.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0N4a19fXw==,size_16,color_FFFFFF,t_70)


#### 构思


    与数据库设计一致,分别为姓名,年龄,学号还有密码。也就是说四个输入框,一个注册按钮。


#### 细节处理


    由于功能需求上有说明学号必须为12位,所以注册之前先进行学号判断,并进行去重处理,先判断该学号是否存在于学生信息表或者教师信息表中。



            age = self.new_age.get()
            number = self.new_number.get()
            name = self.new_name.get()
            pw = self.new_pw.get()
            if len(number) < 12:
                showinfo(title='提示', message='学号为12位的数字,请重新输入!')
            else:
                XWC=user_showdb(number)#先判断账号是否存在于学生或者教师数据库
                SHB=teacher_showdb(number)
                if XWC == None and SHB == None:
                    user_insertData(number,name,pw,age)
                    showinfo(title='提示', message='注册成功')
                    self.window_sign_up.destroy()
                else:
                    self.window_sign_up.destroy()
                    showinfo(title='提示',message='学号重复,注册失败,请修改学号!')  

### 注册与登录整体代码



class LoginPage(object):
def init(self, master=None):
self.root = master
winWidth = 650
winHeight = 400
screenWidth = self.root.winfo_screenwidth()
screenHeight = self.root.winfo_screenheight()

    x = int((screenWidth - winWidth) / 2)
    y = int((screenHeight - winHeight) / 2)
    # 设置窗口初始位置在屏幕居中
    self.root.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x, y))
    # 设置窗口图标
    # root.iconbitmap("./image/icon.ico")
    # 设置窗口宽高固定
    self.root.resizable(0, 0)
    self.student_number = StringVar()
    self.student_pw = StringVar() 
    self.createPage()

def createPage(self):
    '''
    登录页面
    1:创建图片组件
    2:根目录基础上添加Frame容器
    3:Frame容器上添加注册控件
    '''
    bm=PhotoImage(file=r'cxk.gif')#图片素材位置
    self.lab3=Label(self.root,image=bm)
    self.lab3.bm=bm
    self.lab3.pack()
    
    self.page = Frame(self.root) 
    self.page.pack()
    Label(self.page).grid(row=0, stick=W) 
    Label(self.page, text = '学号: ').grid(row=1, stick=W, pady=10) 
    Entry(self.page, textvariable=self.student_number).grid(row=1, column=1, stick=E) 
    Label(self.page, text = '密码: ').grid(row=2, stick=W, pady=10) 
    Entry(self.page, textvariable=self.student_pw, show='*').grid(row=2, column=1, stick=E) 
    Button(self.page, text='管理员登录', command=self.admin_loginCheck).grid(row=3, column=0)
    #self.root.bind('<KeyPress-Return>',self.admin_loginCheck1)#绑定键盘上的回车登录
    Button(self.page, text='学生注册',command=self.signup).grid(row=3, column=3) 
    Button(self.page, text='学生/教师登录', command=self.student_loginCheck).grid(row=3,column=1) 
    #self.root.bind('<KeyPress-Return>',self.user_loginCheck1)#绑定键盘上的回车登录
    
def admin_loginCheck(self):
    global numbers
    '''
    管理员登录
    1:获取管理员账号与密码
    2:将获取到的账号与密码与数据库文件配对,配对成功返回值为正确,否则为错误
    3:将返回值判断,正确则登录界面清除,登录界面图片清除,进入管理员界面
    异常捕获:未填写账号或者密码
    '''
    try:
        Admin_number=self.student_number.get()
        #print(User_id)
        Admin_pw=self.student_pw.get()
        #print(User_pw)

pd=admin_Select_id_pw(Admin_id,Admin_pw)

if pd:

        if Admin_number=="1" and Admin_pw=="1":
            self.page.destroy()
            self.lab3.pack_forget()
            AdminPage(self.root)
        else:
            showinfo(title='错误', message='账号或密码错误!')
    except:
            showinfo(title='错误',message='输入错误,请重新输入!')

def student_loginCheck(self):
    global numbers,i
    '''
    学生登录
    1:获取学生学号与密码
    2:将获取到的学号与密码与数据库文件配对,配对成功返回值为正确,否则为错误
    3:将返回值判断,正确则登录界面清除,登录界面图片清除,进入用户界面,异常捕获:未填写账号或者密码
    '''
    try:
        Student_number=self.student_number.get()
        #print(User_id)
        Student_pw=self.student_pw.get()
        #print(User_pw)
        pd_student=user_slect_number_pw(Student_number,Student_pw)
        pd_teacher=teacher_slect_number_pw(Student_number,Student_pw)
        if pd_student:
            numbers=Student_number
            self.page.destroy()
            self.lab3.pack_forget()
            StudentPage(self.root)
        elif pd_teacher:
            numbers=Student_number
            self.page.destroy()
            self.lab3.pack_forget()
            TeacherPage(self.root)
        elif i>2:
            showinfo(title='错误', message='密码三次输入错误,此次登录被终止!')
            self.root.destroy()
        else:
            i+=1
            showinfo(title='错误', message='账号或密码错误!')
    except:
        showinfo(title='错误',message='输入错误,请重新输入!')
            

def signup(self):
    '''
    学生注册页面
    1:新建一个置于顶层的窗口
    2:将布局控件放入
    3:每个窗口的控件布局必须是一致的,place(),grid(),pack()中的一种
    '''
    def insert_sql():
        '''
        添加学生
        1:获取学生姓名,年龄,学号,密码
        2:将获取到的账号与数据库文件配对,查看是否存在相同学号,如不存在,将学生插入数据库文件,存在则提示修改账户名
        异常捕获:信息未填写
        '''
        try:
            age = self.new_age.get()
            number = self.new_number.get()
            name = self.new_name.get()
            pw = self.new_pw.get()
            if len(number) < 12:
                showinfo(title='提示', message='学号为12位的数字,请重新输入!')
            else:
                XWC=user_showdb(number)#先判断账号是否存在于学生或者教师数据库
                SHB=teacher_showdb(number)
                if XWC == None and SHB == None:
                    user_insertData(number,name,pw,age)
                    showinfo(title='提示', message='注册成功')
                    self.window_sign_up.destroy()
                else:
                    self.window_sign_up.destroy()
                    showinfo(title='提示',message='学号重复,注册失败,请修改学号!')  
        except:
            self.window_sign_up.destroy()
            showinfo(title='错误',message='未知错误,请重新输入!')
            

    self.window_sign_up = Toplevel(self.root)
    winWidth = 300
    winHeight = 200
    self.window_sign_up.title('注册窗口')
    screenWidth = self.window_sign_up.winfo_screenwidth()
    screenHeight = self.window_sign_up.winfo_screenheight()
    x = int((screenWidth - winWidth) / 2)
    y = int((screenHeight - winHeight) / 2)
    # 设置窗口初始位置在屏幕居中
    self.window_sign_up.geometry("%sx%s+%s+%s" % (winWidth, winHeight, x-50, y-50))
    # 设置窗口图标
    # root.iconbitmap("./image/icon.ico")
    # 设置窗口宽高固定
    self.window_sign_up.resizable(0, 0)
    

    self.new_name = StringVar()
    Label(self.window_sign_up, text='姓名: ').place(x=10, y=10) 
    entry_new_name = Entry(self.window_sign_up, textvariable=self.new_name) 
    entry_new_name.place(x=130, y=10)

    self.new_age= StringVar()
    Label(self.window_sign_up, text='年龄: ').place(x=10, y=50)
    entry_usr_age = Entry(self.window_sign_up, textvariable=self.new_age)
    entry_usr_age.place(x=130, y=50)

    self.new_number = StringVar()
    Label(self.window_sign_up, text='学号: ').place(x=10, y=90)
    entry_student_number = Entry(self.window_sign_up, textvariable=self.new_number)
    entry_student_number.place(x=130, y=90)
    
    self.new_pw = StringVar()
    Label(self.window_sign_up, text='密码: ').place(x=10, y=130)
    entry_usr_pw = Entry(self.window_sign_up, textvariable=self.new_pw, show='*')
    entry_usr_pw.place(x=130, y=130)

    sign_up = Button(self.window_sign_up, text='注册', command=insert_sql)
    sign_up.place(x=237, y=160)

## 查看个人成绩


### 主要流程


1. 查看成绩单按钮调用函数
2. 函数新建一个置顶窗口
3. 根据学号查询当前学生是否有成绩 

a=achievement_showdb(numbers)

4. 获取成绩表每列名称根据查询返回的列表a进行遍历并用Label展示 

for i,j in enumerate(a):
if i>=2:
strs=b[i]+“:”+str(j)
Label(self.ach, text=strs).pack()



### 函数代码



def print_ach(self):
global numbers
self.ach = Toplevel(self.root)
self.ach.title(‘个人成绩单’)
winWidth = 300
winHeight = 200
screenWidth = self.ach.winfo_screenwidth()
screenHeight = self.ach.winfo_screenheight()
x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)
# 设置窗口初始位置在屏幕居中
self.ach.geometry(“%sx%s+%s+%s” % (winWidth, winHeight, x, y))
# 设置窗口图标
# root.iconbitmap(“./image/icon.ico”)
# 设置窗口宽高固定
self.ach.resizable(0, 0)
b=achievement_lie_name()
a=achievement_showdb(numbers)
a=list(a)
if len(a)==2:
strs=“暂无科目成绩,请等待教师添加”
Label(self.ach, text=strs).pack()
else:
for i,j in enumerate(a):
if i>=2:
strs=b[i]+“:”+str(j)
Label(self.ach, text=strs).pack()


## 获得当前登录帐号


### 思路


登录时获得登录账户并赋给全局变量


### 部分代码



def student_loginCheck(self):
global numbers,i
‘’’
学生登录
1:获取学生学号与密码
2:将获取到的学号与密码与数据库文件配对,配对成功返回值为正确,否则为错误
3:将返回值判断,正确则登录界面清除,登录界面图片清除,进入用户界面,异常捕获:未填写账号或者密码
‘’’
try:
Student_number=self.student_number.get()
#print(User_id)
Student_pw=self.student_pw.get()
#print(User_pw)
pd_student=user_slect_number_pw(Student_number,Student_pw)
pd_teacher=teacher_slect_number_pw(Student_number,Student_pw)
if pd_student:
numbers=Student_number #此处获得登录账户并赋给全局变量numbers



def createPage(self):
“”"
登录成功创建页面时加入全局变量numbers
“”"
global numbers
strs=“欢迎您!学号为:%s 的同学!”%numbers
Label(self.root, text=strs).place(x=210, y=0


## 修改个人密码


### 页面布局


![](https://img-blog.csdnimg.cn/20200214133314814.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0N4a19fXw==,size_16,color_FFFFFF,t_70)


### 流程


1. 首先加入全局变量numbers获得帐号
2. 两个输入框反复确认密码是否输入一致
3. 如果一致将获得的numbers与New\_pw修改数据库原有数据 

user_alter_pw(numbers,New_pw)

4. 当密码修改成功时摧毁此窗口并退出应用提示用户需重新启动应用并登录 

user_alter_pw(numbers,New_pw)
print(“学号为%s的学生已修改密码,新密码为:%s”%(numbers,New_pw))
showinfo(title=‘提示’,message=‘密码已修改,请重启软件重新登录!’)
self.root.destroy()



### 整体代码



def change_pw(self):
def sure_change():
global numbers
try:
New_pw=self.new_pw.get()
#print(User_id)
New_pws=self.new_pws.get()
#print(User_pw)
if New_pw==New_pws:
user_alter_pw(numbers,New_pw)
print(“学号为%s的学生已修改密码,新密码为:%s”%(numbers,New_pw))
showinfo(title=‘提示’,message=‘密码已修改,请重启软件重新登录!’)
self.root.destroy()
else:
showinfo(title=‘错误’,message=‘两次密码不一致,请重新输入!’)
except:
showinfo(title=‘错误’,message=‘未知错误,请重新输入!’)
global numbers
self.change_pw = Toplevel(self.root)
self.change_pw.title(‘修改密码’)
winWidth = 230
winHeight = 210
screenWidth = self.change_pw.winfo_screenwidth()
screenHeight = self.change_pw.winfo_screenheight()
x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)
# 设置窗口初始位置在屏幕居中
self.change_pw.geometry(“%sx%s+%s+%s” % (winWidth, winHeight, x, y))
# 设置窗口图标
# root.iconbitmap(“./image/icon.ico”)
# 设置窗口宽高固定
self.change_pw.resizable(0, 0)
self.new_pw = StringVar()
self.new_pws = StringVar()
Label(self.change_pw, text=‘请输入新密码’).place(x=110, y=0)
Label(self.change_pw, text=‘新密码: ‘).place(x=25, y=20)
Entry(self.change_pw, textvariable=self.new_pw, show=’').place(x=70, y=20)
Label(self.change_pw, text='重复新密码: ‘).place(x=0, y=50)
Entry(self.change_pw, textvariable=self.new_pws, show=’
’).place(x=70, y=50)
Button(self.change_pw, text=‘确认修改’,command=sure_change).place(x=90, y=90)


## 导出个人成绩单


### 流程


该模块比较简单就不详细写了


1. 首先加入全局变量numbers获得帐号
2. 使用帐号查询数据库内容并获得返回
3. 将返回的内容添加至新列表
4. 将新列表作为参数进行新建成绩单的数据源


### 具体代码



def ach_dao_xls(self):
try:
global numbers
文末有福利领取哦~

👉一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。img

👉二、Python必备开发工具

img
👉三、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
img

👉 四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。(文末领读者福利)
img

👉五、Python练习题

检查学习结果。
img

👉六、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
img

img

👉因篇幅有限,仅展示部分资料,这份完整版的Python全套学习资料已经上传

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024c (备注python)
[外链图片转存中…(img-257ATrde-1713075216950)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值