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(): #个人信息查看窗