学生管理系统-Python tkinter图形化界面+sqlserver+柱状图

使用Python的tkinter库创建的学生管理系统,将原MySQL数据库改为SQLServer,包括学生和教师角色登录,教师可进行学生信息的查看、添加、删除、修改和统计分析。代码中包含了数据库操作和图形化界面展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考了大佬的,把mysql数据库改成了sqlserver

附上大佬的代码链接

https://blog.youkuaiyun.com/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, 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值