学生课程管理系统


from tkinter import *                                                               #导入tkinter

from tkinter import messagebox                                                      #引入弹出框
#from typing import Any, Union
import pymysql                                                                       #导入pymysql
from pymysql.cursors import Cursor                                                  #导入游标
from hashlib import sha1                                                            #导入hashlib,引用函数
import tkinter as tk

#开始类的定义


class HomePage:                                                                       #窗口1,我的首页
    def __init__(self):
        self.conn =  pymysql.Connect(
                            host='localhost',
                            port=3306,
                            user='root',
                            passwd='12345',
                            db='天朝理工学院',
                            charset="utf8"
                    )                                                                  #连接数据库

        self.window=Tk()                                                               #窗体设计
        self.window.title("课程管理系统")
        self.window['width']=300
        self.window['height']=400
        self.window['bg']='pink'
        self.window.geometry('400x600-100-100')

        self.f1=Frame(self.window);self.f1.pack()
        self.f2=Frame(self.window);self.f2.pack()
        self.f3=Frame(self.window);self.f3.pack()
        self.f4=Frame(self.window);self.f4.pack()
        self.f5=Frame(self.window);self.f5.pack()
        self.f6=Frame(self.window);self.f6.pack()
        self.f7=Frame(self.window);self.f7.pack()

        #f3是账号的框架
        #f4是密码的框架

        Label(self.f1,text="欢迎进入!\n  \n",font=('Helvetica',12,'bold'),bg='pink').pack()
        Label(self.f2,text="天朝皇家理工学院\n 学生课程内容管理中心\n     \n    \n    \n",
              font=('Helvetica',14,'bold'),bg='pink').pack()

        Label(self.f3,text="账号").pack(side=LEFT)

        self.account=StringVar()
        self.password=StringVar()
        #get()用于返回StringVar变量的值,相当于一个函数

        Entry(self.f3,validate='key',textvariable=self.account).pack(side=LEFT)
        Label(self.f4,text="密码").pack(side=LEFT)
        Entry(self.f4,textvariable=self.password).pack(side=LEFT)
        Label(self.f5,text="",bg='pink').pack()

        Button(self.f6,text="登录",command=self.login).pack(side=RIGHT)
        Button(self.f6,text="注册",command=self.register).pack(side=RIGHT)
        Button(self.f6,text="帮助",command=self.help).pack(side=RIGHT)

        self.mutex=0                                                            #mutex的值表示当前是哪个窗体

        self.window.mainloop()
        
    def help(self):                                                             #帮助按钮事件,弹出信息
        str1 = '欢迎进入天朝理工学院课程管理系统!\n 你可以直接使用用户名和账号直接登陆。\n 新用户请先注册!'
        messagebox.showinfo('help',str1)

    def register(self):                                                        #注册按钮事件
        v3= str(self.account.get())                                             #获取文本框输入的内容
        v4= str(self.password.get())

        if(v3):                                                                #首页填了账号的话,需要把输入框账号清空才可注册
            messagebox.showinfo('error', "请先点击注册进入注册页面\n 再开始注册!")
        else:
            self.mutex=2                                                        #值设置为2,进入第二个窗口注册页面
            self.window.destroy()                                               #销毁当前窗口
            
    def login(self):                                                            #登录按钮事件
        v3= str(self.account.get())
        v4= str(self.password.get())
        cursor = self.conn.cursor()                                              #启动游标
        cursor.execute( "select * from login where `account`='%s'"% v3)       #注意引号使用
        data = cursor.fetchone()                                                  #返回单个元组
        self.conn.commit()
        
        if data:
            if data[1]==v4:                                                       #对应密码
                self.mutex=3                                                      #指示值设置为3,指示进入operation界面
                self.account=v3
                self.password=v4
                cursor.close()                                                    #
                self.conn.close()
                self.window.destroy()
            else:
                messagebox.showinfo('error', "密码错误!")
        else:
            messagebox.showinfo('error', "此用户不存在!\n请先注册!")


class RegisterPage:                                                              #窗口2注册页面
    def __init__(self):
        self.window=Tk()
        self.window.title("课程管理系统-注册")
        self.window['width']=300
        self.window['height']=400
        self.window['bg']='pink'
        self.window.geometry('400x600-100-100')

        self.f1=Frame(self.window);self.f1.pack()
        self.f2=Frame(self.window);self.f2.pack()
        self.f3=Frame(self.window);self.f3.pack()
        self.f4=Frame(self.window);self.f4.pack()
        self.f5=Frame(self.window);self.f5.pack()
        self.f6=Frame(self.window);self.f6.pack()
        self.f7=Frame(self.window);self.f7.pack()

        self.account=StringVar()
        self.password=StringVar()
        self.again_password=StringVar()

        Label(self.f1,text="欢迎进入!\n  \n",font=('Helvetica',12,'bold'),bg='pink').pack()
        Label(self.f2,text="天朝皇家理工学院\n 学生课程内容注册中心\n     \n    \n    \n",font=('Helvetica',14,'bold'),bg='pink').pack()
        Label(self.f3,text="账号").pack(side=LEFT)
        Entry(self.f3,textvariable=self.account).pack(side=LEFT)
        Label(self.f4,text="密码").pack(side=LEFT)
        Entry(self.f4,textvariable=self.password).pack(side=LEFT)
        Label(self.f5,text="确定").pack(side=LEFT)
        Entry(self.f5,textvariable=self.again_password).pack(side=LEFT)
        Button(self.f6,text="注册",command=self.c1).pack(side=RIGHT)

        self.window.mainloop()

    def c1(self):                                                                   #注册按钮事件
        v3 = str(self.account.get())
        v4 = str(self.password.get())
        v5 = str(self.again_password.get())

        if(v5!=v4):
            messagebox.showinfo(title='error', message='密码不一致!')
        elif not v3:
            messagebox.showinfo(title='error', message='账号不能为空!')
        elif (not v4) or (not v5):
            messagebox.showinfo(title='error', message='密码不能为空!')
        else:
            conn =  pymysql.Connect(
                host='localhost',
                port=3306,
                user='root',
                passwd='12345',
                db='天朝理工学院',
                charset="utf8"
             )                                                                         # 连接数据库

            cursor = conn.cursor()
            read_sql = "SELECT * FROM login "                                         #查询已有的数据
            print(read_sql)
            cursor.execute(read_sql)
            conn.commit()
            results=cursor.fetchall()                                                   #获取所有数据列表

            for row in results:
                print(row)                                                              #测试
                if row[0] == v3:
                    messagebox.showwarning(title='警告!', message='账户已存在,请重新输入')
                    return 0
            #sql = "insert into login(account,password) values(%s,%s)on duplicate"(测试)
            sql="INSERT INTO login(account,password) VALUES('%s','%s');" %(v3,v4)  #插入数据
            #value = (( v3, v4 ))
            cursor.execute(sql)
            conn.commit()
            cursor.close()
            conn.close()

            messagebox.showinfo(title='connected', message='注册成功!')

            self.mutex=1                                                                 #值设置为1,进入第1个窗口登陆页面

            self.window.destroy()


class OperationPage:                                                                     #窗口3operation界面
    def f_print(self):
        tk.messagebox.showinfo('天朝理工', '课程信息中心')

    def set_mutex(self,mutex):
        self.mutex=mutex
        self.window.destroy()

    def __init__(self):
        self.window=tk.Tk()
        self.window.title("课程管理系统")
        self.window['width']=300
        self.window['height']=400
        self.window.geometry('400x600-100-100')
        self.window['bg']='gray'

        f1=Frame(self.window);f1.pack()
        f2=Frame(self.window);f2.pack()

        Label(f1,text="\n \n \n\n\n\n同学你好\n\n欢迎进入\n \n",font=('Helvetica',12,'bold'),bg='gray').pack()
        Label(f2,text="天朝皇家理工学院\n学生课程内容管理中心\n     \n!!!!!!\n    \n",
              font=('Helvetica',14,'bold'),bg='gray').pack()

        menubar=tk.Menu(self.window)
        menuFile=tk.Menu(menubar)
        menuOSM=tk.Menu(menubar,tearoff=0)
        menuCourse=tk.Menu(menubar,tearoff=0)
        menuMessage=tk.Menu(menubar,tearoff=0)
        menuSellect=tk.Menu(menubar,tearoff=0)
        menuExit=tk.Menu(menubar)

        menubar.add_cascade(label='File',menu=menuFile)
        menubar.add_cascade(label='系统管理',menu=menuOSM)
        menubar.add_cascade(label='课程信息',menu=menuCourse)
        menubar.add_cascade(label='公告',menu=menuMessage)
        menubar.add_cascade(label='选课',menu=menuSellect)
        menubar.add_cascade(label='退出',menu=menuExit)

        menuFile.add_command(label='Open')
        menuFile.add_command(label='Save')
        menuFile.add_command(label='Print',accelerator='^P',command=self.f_print)
        menuFile.add_separator()

        menuOSM.add_command(label='个人信息查看',command=lambda : self.set_mutex(mutex=4.1))
        menuOSM.add_command(label='修改信息',command=lambda : self.set_mutex(mutex=4.2))
        menuOSM.add_separator()

        menuCourse.add_cascade(label='所选课程',command=lambda : self.set_mutex(mutex=6.1))
        #(label='所选课程',menu=menusub)
        menuCourse.add_cascade(label='教师信息介绍',command=lambda : self.set_mutex(mutex=6.2))
        menuCourse.add_cascade(label='课程介绍',command=lambda : self.set_mutex(mutex=6.3))
        menuCourse.add_separator()

        menuMessage.add_command(label='通告',command=lambda : self.set_mutex(mutex=6))
        menuMessage.add_separator()

        menuprogram=tk.Menu(menuSellect)
        menuclass=tk.Menu(menuSellect)

        menuSellect.add_cascade(label='按年级',menu=menuprogram)
        menuSellect.add_cascade(label='按类别',menu=menuclass)

        menuprogram.add_command(label='大一上',command=lambda : self.set_mutex(mutex=7.11))
        menuprogram.add_command(label='大一下',command=lambda : self.set_mutex(mutex=7.12))
        menuprogram.add_command(label='大二上',command=lambda : self.set_mutex(mutex=7.21))
        menuprogram.add_command(label='大二下',command=lambda : self.set_mutex(mutex=7.22))
        menuprogram.add_command(label='大三上',command=lambda : self.set_mutex(mutex=7.31))
        menuprogram.add_command(label='大三下',command=lambda : self.set_mutex(mutex=7.32))
        menuprogram.add_command(label='大四上',command=lambda : self.set_mutex(mutex=7.41))
        menuprogram.add_command(label='大四下',command=lambda : self.set_mutex(mutex=7.42))

        menuclass.add_command(label='计算机类',command=lambda : self.set_mutex(mutex=8.1))
        menuclass.add_command(label='外语类',command=lambda : self.set_mutex(mutex=8.2))
        menuclass.add_command(label='管理类',command=lambda : self.set_mutex(mutex=8.3))
        menuclass.add_command(label='经济类',command=lambda : self.set_mutex(mutex=8.4))
        menuclass.add_command(label='建筑',command=lambda : self.set_mutex(mutex=8.5))
        menuclass.add_command(label='纺织类',command=lambda : self.set_mutex(mutex=8.6))
        menuclass.add_command(label='通识类',command=lambda : self.set_mutex(mutex=8.7))
        menuclass.add_command(label='体育类',command=lambda : self.set_mutex(mutex=8.8))
        menuclass.add_command(label='政治类',command=lambda : self.set_mutex(mutex=8.9))
        menuclass.add_command(label='军事类',command=lambda : self.set_mutex(mutex=8.10))
        menuExit.add_command(label='退出系统',command=lambda : self.set_mutex(mutex=8.11))

        self.window['menu']=menubar
        self.mutex=0
        self.window.mainloop()


class kechengjieshao():                                                                          #窗口通告窗口-课程介绍界面
    def __init__(self,account):
        self.account=account
        self.conn =  pymysql.Connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='12345',
            db='天朝理工学院',
            charset="utf8"
            )                                                                                     #连接数据库

        root=Tk()
        root.title("课程管理系统")
        root['width']=300
        root['height']=400
        root['bg']='cyan'
        root.geometry('400x600-100-100')

        f1=Frame(root);f1.pack()
        f2=Frame(root);f2.pack()
        f3=Frame(root);f3.pack()
        f4=Frame(root);f4.pack()

        self.val=StringVar()

        Label(f1,text="欢迎进入!\n  \n",font=('Helvetica',12,'bold'),bg='cyan').pack()
        Label(f2,text="天朝皇家理工学院\n 学生课程内容管理中心\n通告(课程介绍)\n",font=('Helvetica',14,'bold'),
              bg='cyan').pack()

        Label(f3,text="#内容",bg='cyan',textvariable=self.val).pack(side=LEFT)

        Button(f4,text="确定",command=self.c1).pack(side=LEFT)
        Button(f4,text="退出",command=root.destroy).pack(side=RIGHT)

        self.mutex=3
        root.mainloop()

    def c1(self):                                                                               # 显示所选课程
        cursor = self.conn.cursor()
        read_sql = "SELECT course,'c-summary' FROM teacher"                                  #注意把关键字包装
        cursor.execute(read_sql)
        self.conn.commit()
        results = cursor.fetchall()
        self.val.set(results)
        cursor.close()
        self.conn.close()


class jiaoshixinxijieshao():                                                                    #窗口通告窗口-所选课程界面
    def __init__(self,account):
        self.account=account
        self.conn =  pymysql.Connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='12345',
            db='天朝理工学院',
            charset="utf8"
            )                                                                                     #连接数据库

        root=Tk()
        root.title("课程管理系统")
        root['width']=300
        root['height']=400
        root['bg']='cyan'
        root.geometry('400x600-100-100')

        f1=Frame(root);f1.pack()
        f2=Frame(root);f2.pack()
        f3=Frame(root);f3.pack()
        f4=Frame(root);f4.pack()

        self.val=StringVar()

        Label(f1,text="欢迎进入!\n  \n",font=('Helvetica',12,'bold'),bg='cyan').pack()
        Label(f2,text="天朝皇家理工学院\n 学生课程内容管理中心\n通告(课程介绍)\n",font=('Helvetica',14,'bold'),
              bg='cyan').pack()

        Label(f3,text="#内容",bg='cyan',textvariable=self.val).pack(side=LEFT)

        Button(f4,text="确定",command=self.c1).pack(side=LEFT)
        Button(f4,text="退出",command=root.destroy).pack(side=RIGHT)

        self.mutex=3
        root.mainloop()

    def c1(self):                                                                               # 显示所选课程
        cursor = self.conn.cursor()
        read_sql = "SELECT `T-name`,`t-summary` FROM teacher  "
        cursor.execute(read_sql)
        self.conn.commit()
        results = cursor.fetchall()
        self.val.set(results)
        cursor.close()
        self.conn.close()


class suoxuankecheng():                                                                        #通告-所选课程界面
    def __init__(self, account):
        self.account = account
        self.conn = pymysql.Connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='12345',
            db='天朝理工学院',
            charset="utf8"
        )                                                                                       # 连接数据库

        root = Tk()
        root.title("课程管理系统")
        root['width'] = 300
        root['height'] = 400
        root['bg'] = 'cyan'
        root.geometry('400x600-100-100')

        f1 = Frame(root);
        f1.pack()
        f2 = Frame(root);
        f2.pack()
        f3 = Frame(root);
        f3.pack()
        f4 = Frame(root);
        f4.pack()

        self.val = StringVar()

        Label(f1, text="欢迎进入!\n  \n", font=('Helvetica', 12, 'bold'), bg='cyan').pack()
        Label(f2, text="天朝皇家理工学院\n 学生课程内容管理中心\n通告(所选课程)\n", font=('Helvetica', 14, 'bold'),
              bg='cyan').pack()

        Label(f3, text="#内容", bg='cyan', textvariable=self.val).pack(side=LEFT)

        Button(f4, text="确定", command=self.c1).pack(side=LEFT)
        Button(f4, text="退出", command=root.destroy).pack(side=RIGHT)

        self.mutex = 3
        root.mainloop()

    def c1(self):                                                                                # 显示所选课程
        cursor = self.conn.cursor()
        read_sql = "SELECT course FROM selected where `account`='%s'" % self.account
        cursor.execute(read_sql)
        self.conn.commit()
        results = cursor.fetchall()
        self.val.set(results)
        cursor.close()
        self.conn.close()


class Person_Information_Review_Page():                                                         #个人信息查看窗
  • 4
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值