教务管理系统

master
sword-demon 6 months ago
commit 6207a9f4b5

3
.idea/.gitignore vendored

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Black">
<option name="sdkName" value="Python 3.12 (pythonProject) (2)" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (pythonProject) (2)" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/pythonProject.iml" filepath="$PROJECT_DIR$/.idea/pythonProject.iml" />
</modules>
</component>
</project>

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/venv" />
</content>
<orderEntry type="jdk" jdkName="Python 3.12 (pythonProject) (2)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.10" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

@ -0,0 +1,12 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="PyUnresolvedReferencesInspection" enabled="true" level="WARNING" enabled_by_default="true">
<option name="ignoredIdentifiers">
<list>
<option value="xlwt" />
</list>
</option>
</inspection_tool>
</profile>
</component>

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/HumanManage.iml" filepath="$PROJECT_DIR$/.idea/HumanManage.iml" />
</modules>
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -0,0 +1,392 @@
from tkinter import *
import tkinter.messagebox as mb
import _sqlite3
import Managerview # 管理员菜单栏对应的各个子页面
import Teacherview # 教师菜单栏对应的各个子页面
import Studentview # 学生菜单栏对应的各个子页面
#连接数据库
# conn = _sqlite3.connect(":memory:")
conn = _sqlite3.connect("data.db")
c = conn.cursor()
def login_teacher(name):
c.execute("select * from teachers where teachers.name = '%s'" % name)
# 提交事务
conn.commit()
return c.fetchall()
def login_student(name):
c.execute("select * from students where students.name = '%s'" % name)
# 提交事务
conn.commit()
return c.fetchall()
#登录窗体
class LoginPage(object):
def __init__(self, master=None):
self.root = master # 定义内部变量root
self.root.geometry('%dx%d' % (800, 610)) # 设置窗口大小
self.usrrole = IntVar()
self.usrrole.set(1)
self.username = StringVar()
self.username.set("admin")
self.password = StringVar()
self.createPage()
def createPage(self):
self.page = Frame(self.root) # 创建Frame
self.page.pack()
Label(self.page).grid(row=0, stick=W)
Label(self.page, text="登录角色:").grid(row=1, stick=W, pady=10)
Radiobutton(self.page, text="管理员", variable=self.usrrole, value=1, command=self.__setusrstr).grid(row=1, column=1, stick=W)
Radiobutton(self.page, text="教师", variable=self.usrrole, value=2, command=self.__setusrstr).grid(row=1, column=2, stick=W)
Radiobutton(self.page, text="学生", variable=self.usrrole, value=3, command=self.__setusrstr).grid(row=1, column=3, stick=W)
Label(self.page, text='账户: ').grid(row=2, stick=W, pady=10)
Entry(self.page, textvariable=self.username).grid(row=2, column=1, columnspan=2, stick=E)
Label(self.page, text='密码: ').grid(row=3, stick=W, pady=10)
Entry(self.page, textvariable=self.password, show='*').grid(row=3, column=1, columnspan=2, stick=E)
Button(self.page, text='登陆', command=self.loginCheck).grid(row=4, columnspan=2, pady=10, stick=W)
Button(self.page, text='退出系统', command=self.exitsys).grid(row=4, column=2, columnspan=2, stick=E)
#判断登录用户
def loginCheck(self):
role = self.usrrole.get()
name = self.username.get()
secret = self.password.get()
if role == 1 and name == "admin" and secret == "123456":
self.page.destroy()
self.username.set('')
self.password.set('')
ManagerPage(name,self.root)
mb.showinfo('登录成功', '欢迎:%s' % name)
elif role == 2:
login = login_teacher(name)
if len(login) == 0:
mb.showerror("登录失败","账号不存在")
pth = login[0]
print(pth)
if name == pth[1] and secret == pth[0]:
self.page.destroy()
self.username.set('')
self.password.set('')
TeacherPage(name,secret, self.root)
mb.showinfo('登录成功', '欢迎:%s' % name)
else:
mb.showinfo(title='错误', message='账号或密码错误!')
elif role == 3:
login = login_student(name)
if len(login) == 0:
mb.showerror("登录失败", "账号不存在")
pth = login[0]
print(pth)
if name == pth[1] and secret == pth[0]:
self.page.destroy()
self.username.set('')
self.password.set('')
StudentPage(name, self.root)
mb.showinfo('登录成功', '欢迎:%s' % name)
else:
mb.showinfo(title='错误', message='账号或密码错误!')
else:
mb.showinfo(title='错误', message='账号或密码错误!')
self.username.set('')
self.password.set('')
def __setusrstr(self):
self.username.set("admin")
if self.usrrole.get() == 2:
self.username.set("请输入工号")
elif self.usrrole.get() == 3:
self.username.set("请输入学号")
def exitsys(self):
if mb.askyesno("退出系统", "你确定更要退出系统"):
self.page.destroy()
self.root.destroy()
#管理员窗体
class ManagerPage(object):
def __init__(self, name, master=None):
self.root = master # 定义内部变量root
self.usrname = name
self.root.geometry('%dx%d' % (600, 400)) # 设置窗口大小
self.createPage()
#菜单栏
def createPage(self):
self.WelcomePage = Managerview.WelcomeFrame(self.usrname,self.root) # 创建不同Frame
self.inputTeacherPage = Managerview.InputTeacherFrame(self.root)
self.inputstudentPage = Managerview.InputStudentFrame(self.root)
self.queryPage = Managerview.QueryFrame(self.root)
self.maintainPage = Managerview.maintainFrame(self.root)
self.UpdateKeywordPage = Managerview.UpdateKeywordFrame(self.root)
self.WelcomePage.pack() # 默认显示欢迎界面
menubar = Menu(self.root)
self.menubar = menubar
menu1 = Menu(self.root)
menu1.add_command(label="创建教师账号", command=self.CreateTeacher)
menu1.add_command(label="创建学生账号", command=self.CreateStudent)
menu1.add_command(label="修改管理员密码", command=self.UpdateKeyword)
menubar.add_cascade(label='账户权限管理', menu=menu1)
menubar.add_command(label='信息查询', command=self.queryData)
menubar.add_command(label='信息维护', command=self.maintain)
menubar.add_command(label='退出登录', command=self.returnLogin)
self.root['menu'] = menubar # 设置菜单栏
def UpdateKeyword(self):
self.WelcomePage.pack_forget()
self.inputTeacherPage.pack_forget()
self.inputstudentPage.pack_forget()
self.queryPage.pack_forget()
self.maintainPage.pack_forget()
self.UpdateKeywordPage.pack()
def CreateTeacher(self):
self.WelcomePage.pack_forget()
self.inputTeacherPage.pack()
self.inputstudentPage.pack_forget()
self.queryPage.pack_forget()
self.maintainPage.pack_forget()
self.UpdateKeywordPage.pack_forget()
def queryData(self):
self.WelcomePage.pack_forget()
self.inputTeacherPage.pack_forget()
self.inputstudentPage.pack_forget()
self.queryPage.pack()
self.maintainPage.pack_forget()
self.UpdateKeywordPage.pack_forget()
def maintain(self):
self.WelcomePage.pack_forget()
self.inputTeacherPage.pack_forget()
self.inputstudentPage.pack_forget()
self.queryPage.pack_forget()
self.maintainPage.pack()
self.UpdateKeywordPage.pack_forget()
def CreateStudent(self):
self.WelcomePage.pack_forget()
self.inputTeacherPage.pack_forget()
self.inputstudentPage.pack()
self.queryPage.pack_forget()
self.maintainPage.pack_forget()
self.UpdateKeywordPage.pack_forget()
def returnLogin(self):
self.WelcomePage.destroy()
self.inputTeacherPage.destroy()
self.inputstudentPage.destroy()
self.queryPage.destroy()
self.maintainPage.destroy()
self.UpdateKeywordPage.destroy()
self.menubar.destroy()
LoginPage(self.root)
#老师窗体类
class TeacherPage(object):
def __init__(self, name,secret, master=None):
self.usrname = name
self.password = secret
self.root = master # 定义内部变量root
self.root.geometry('%dx%d' % (600, 500)) # 设置窗口大小
self.createPage()
def createPage(self):
self.WelcomePage = Teacherview.WelcomeFrame(self.usrname, self.root) # 创建欢迎界面
self.myPage = Teacherview.MyFrame(self.usrname,self.root)
self.updatepwdPage = Teacherview.UpdatepwdFrame(self.usrname,self.root)
self.inputPage = Teacherview.InputFrame(self.root) # 创建不同Frame
self.queryPage = Teacherview.QueryFrame(self.root)
self.countPage = Teacherview.CountFrame(self.root)
self.count2Page = Teacherview.EditFrame(self.root)
self.feedbackPage = Teacherview.FeedbackFrame(self.root)
self.WelcomePage.pack() # 默认显示欢迎界面
menubar = Menu(self.root)
self.menubar = menubar
menu1 = Menu(self.root)
menu1.add_command(label='个人信息', command=self.myData)
menu1.add_command(label='修改密码', command=self.updatepwdData)
menubar.add_cascade(label='我的', menu=menu1)
menubar.add_command(label='成绩录入', command=self.inputData)
menubar.add_command(label='查询', command=self.queryData)
menubar.add_command(label='统计', command=self.countData)
menubar.add_command(label='编辑', command=self.count2Data)
menubar.add_command(label='意见反馈', command=self.feedbackData)
menubar.add_command(label= "教师"+self.usrname + '已登录,退出登录', command=self.returnLogin)
self.root['menu'] = menubar # 设置菜单栏
def myData(self):
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.feedbackPage.pack_forget()
self.count2Page.pack_forget()
self.myPage.pack()
self.updatepwdPage.pack_forget()
self.WelcomePage.pack_forget()
def updatepwdData(self):
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.feedbackPage.pack_forget()
self.count2Page.pack_forget()
self.myPage.pack_forget()
self.updatepwdPage.pack()
self.WelcomePage.pack_forget()
def inputData(self):
self.inputPage.pack()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.feedbackPage.pack_forget()
self.count2Page.pack_forget()
self.myPage.pack_forget()
self.updatepwdPage.pack_forget()
self.WelcomePage.pack_forget()
def queryData(self):
self.inputPage.pack_forget()
self.queryPage.pack()
self.countPage.pack_forget()
self.feedbackPage.pack_forget()
self.count2Page.pack_forget()
self.myPage.pack_forget()
self.updatepwdPage.pack_forget()
self.WelcomePage.pack_forget()
def countData(self):
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack()
self.feedbackPage.pack_forget()
self.count2Page.pack_forget()
self.myPage.pack_forget()
self.updatepwdPage.pack_forget()
self.WelcomePage.pack_forget()
def count2Data(self):
self.count2Page.pack()
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.feedbackPage.pack_forget()
self.myPage.pack_forget()
self.updatepwdPage.pack_forget()
self.WelcomePage.pack_forget()
def feedbackData(self):
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.feedbackPage.pack()
self.count2Page.pack_forget()
self.myPage.pack_forget()
self.updatepwdPage.pack_forget()
self.WelcomePage.pack_forget()
def returnLogin(self):
self.inputPage.destroy()
self.queryPage.destroy()
self.countPage.destroy()
self.menubar.destroy()
self.feedbackPage.destroy()
self.count2Page.destroy()
self.myPage.destroy()
self.updatepwdPage.destroy()
self.WelcomePage.destroy()
LoginPage(self.root)
#学生窗体类
class StudentPage(object):
def __init__(self, name, master=None):
self.usrname = name
self.root = master # 定义内部变量root
self.root.geometry('%dx%d' % (600, 500)) # 设置窗口大小
self.createPage()
def createPage(self):
self.myPage2 = Studentview.MyFrame(self.usrname, self.root)
self.updatepwdPage2 = Studentview.UpdatepwdFrame(self.usrname, self.root)
self.inputPage = Studentview.InputFrame(self.root) # 创建不同Frame
self.queryPage = Studentview.QueryFrame(self.root)
self.countPage = Studentview.CountFrame(self.root)
self.submitPage = Studentview.SubmitFrame(self.root)
self.inputPage.pack() # 默认显示主界面
menubar = Menu(self.root)
self.menubar = menubar
menu1 = Menu(self.root)
menu1.add_command(label='个人信息', command=self.myData2)
menu1.add_command(label='修改密码', command=self.updatepwdData2)
menubar.add_cascade(label='主页', menu=menu1)
# menubar.add_command(label='主页', command=self.inputData)
menubar.add_command(label='查询成绩', command=self.queryData)
menubar.add_command(label='意见反馈', command=self.countData)
menubar.add_command(label='提交作业', command=self.submitData)
menubar.add_command(label= "学生"+self.usrname + '已登录,退出登录', command=self.returnLogin)
self.root['menu'] = menubar # 设置菜单栏
def updatepwdData2(self):
self.updatepwdPage2.pack()
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.submitPage.pack_forget()
self.myPage2.pack_forget()
def myData2(self):
self.myPage2.pack()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.submitPage.pack_forget()
self.inputPage.pack_forget()
self.updatepwdPage2.pack_forget()
def inputData(self):
self.inputPage.pack()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.submitPage.pack_forget()
self.myPage2.pack_forget()
self.updatepwdPage2.pack_forget()
def queryData(self):
self.inputPage.pack_forget()
self.queryPage.pack()
self.countPage.pack_forget()
self.submitPage.pack_forget()
self.myPage2.pack_forget()
self.updatepwdPage2.pack_forget()
def countData(self):
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.submitPage.pack_forget()
self.countPage.pack()
self.myPage2.pack_forget()
self.updatepwdPage2.pack_forget()
def submitData(self):
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.submitPage.pack()
self.myPage2.pack_forget()
self.updatepwdPage2.pack_forget()
def aboutDisp(self):
self.inputPage.pack_forget()
self.queryPage.pack_forget()
self.countPage.pack_forget()
self.submitPage.pack_forget()
self.myPage2.pack_forget()
self.updatepwdPage2.pack_forget()
def returnLogin(self):
self.myPage2.destroy()
self.updatepwdPage2.destroy()
self.inputPage.destroy()
self.queryPage.destroy()
self.countPage.destroy()
self.submitPage.destroy()
self.menubar.destroy()
LoginPage(self.root)

@ -0,0 +1,470 @@
import tkinter
from tkinter import *
import tkinter.messagebox as mb
import _sqlite3
# 数据库
# conn = _sqlite3.connect(":memory:")
#连接数据库data.db
conn = _sqlite3.connect("data.db")
c = conn.cursor()
#创建表teachers
# c.execute("create table teachers(id char(20),name char(10),"
# "sex char(10),speciality char(20),Title char(20),date char(20))")
#创建表students
# c.execute("create table students(id char(20),name char(10),"
# "sex char(10),speciality char(20),classno char(20),date char(20))")
#添加教师sql语句
def Insert(id, name, sex, speciality, Title, date):
c.execute('insert into teachers values(?,?,?,?,?,?)', (id, name, sex, speciality, Title, date))
# 提交事务
conn.commit()
#添加学生sql语句
def InsertStudent(id, name, sex, speciality, classno, date):
c.execute('insert into students values(?,?,?,?,?,?)', (id, name, sex, speciality, classno, date))
# 提交事务
conn.commit()
#删除教师sql语句
def Del(id):
c.execute("delete from teachers where id = '%s'" % id)
# 提交事务
conn.commit()
#删除学生sql语句
def DelStudent(id):
c.execute("delete from students where id = '%s'" % id)
# 提交事务
conn.commit()
#修改教师sql语句
def Update(id, name, sex, speciality, Title, date):
c.execute('update teachers set name = (?),sex = (?),speciality = (?),Title = (?),date = (?) where id = (?)',
(name, sex, speciality, Title, date, id))
# 提交事务
conn.commit()
#修改学生sql语句
def UpdateStudent(id, name, sex, speciality, classno, date):
c.execute('update students set name = (?),sex = (?),speciality = (?),classno = (?),date = (?) where id = (?)',
(name, sex, speciality, classno, date, id))
# 提交事务
conn.commit()
#查询教师sql语句
def Serch():
c.execute('select * from teachers')
li = c.fetchall()
return li
#查询学生sql语句
def SerchStudent():
c.execute('select * from students')
li = c.fetchall()
return li
#根据id查询教师sql语句
def Serchone(id):
c.execute("select * from teachers where teachers.id = '%s'" % id)
return c.fetchall()
#根据id查询学生sql语句
def SerchoneStudent(id):
c.execute("select * from students where students.id = '%s'" % id)
return c.fetchall()
#主窗体
class WelcomeFrame(Frame): # 继承Frame类
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.usrname = name
self.createPage()
def createPage(self):
Label(self, text='欢迎管理员'+self.usrname+'登录', font=("黑体", 20)).pack()
#添加教师类
class InputTeacherFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.id = StringVar()
self.name = StringVar()
self.sex = StringVar()
self.speciality = StringVar()
self.Title = StringVar()
self.date = StringVar()
self.createPage()
def createPage(self):
Label(self).grid(row=0, stick=W, pady=10)
Label(self, text='工号: ').grid(row=1, stick=W, pady=10)
Entry(self, textvariable=self.id).grid(row=1, column=1, stick=E)
Label(self, text='姓名: ').grid(row=2, stick=W, pady=10)
Entry(self, textvariable=self.name).grid(row=2, column=1, stick=E)
Label(self, text='性别: ').grid(row=3, stick=W, pady=10)
Entry(self, textvariable=self.sex).grid(row=3, column=1, stick=E)
Label(self, text='专业: ').grid(row=4, stick=W, pady=10)
Entry(self, textvariable=self.speciality).grid(row=4, column=1, stick=E)
Label(self, text='职称: ').grid(row=5, stick=W, pady=10)
Entry(self, textvariable=self.Title).grid(row=5, column=1, stick=E)
Label(self, text='入职年月: ').grid(row=6, stick=W, pady=10)
Entry(self, textvariable=self.date).grid(row=6, column=1, stick=E)
Button(self, text='创建教师账号', command=self.AddTeacher).grid(row=8, column=1, stick=E, pady=10)
#添加教师信息
def AddTeacher(self):
id = self.id.get()
name = self.name.get()
sex = self.sex.get()
speciality = self.speciality.get()
Title = self.Title.get()
date = self.date.get()
if id == '' or name == '':
mb.showerror("错误", "信息不能为空!")
else:
Insert(id,name,sex,speciality,Title,date)
mb.showinfo("成功", "新增教师信息成功")
self.id.set('')
self.name.set('')
self.sex.set('')
self.speciality.set('')
self.Title.set('')
self.date.set('')
#添加学生类
class InputStudentFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.id = StringVar()
self.name = StringVar()
self.sex = StringVar()
self.speciality = StringVar()
self.classno = StringVar()
self.date = StringVar()
self.createPage()
def createPage(self):
Label(self).grid(row=0, stick=W, pady=10)
Label(self, text='学号: ').grid(row=1, stick=W, pady=10)
Entry(self, textvariable=self.id).grid(row=1, column=1, stick=E)
Label(self, text='姓名: ').grid(row=2, stick=W, pady=10)
Entry(self, textvariable=self.name).grid(row=2, column=1, stick=E)
Label(self, text='性别: ').grid(row=3, stick=W, pady=10)
Entry(self, textvariable=self.sex).grid(row=3, column=1, stick=E)
Label(self, text='专业: ').grid(row=4, stick=W, pady=10)
Entry(self, textvariable=self.speciality).grid(row=4, column=1, stick=E)
Label(self, text='班级: ').grid(row=5, stick=W, pady=10)
Entry(self, textvariable=self.classno).grid(row=5, column=1, stick=E)
Label(self, text='入学时间: ').grid(row=6, stick=W, pady=10)
Entry(self, textvariable=self.date).grid(row=6, column=1, stick=E)
Button(self, text='创建学生账号', command=self.AddStudent).grid(row=8, column=1, stick=E, pady=10)
#添加学生信息
def AddStudent(self):
id = self.id.get()
name = self.name.get()
sex = self.sex.get()
speciality = self.speciality.get()
classno = self.classno.get()
date = self.date.get()
if id == '' or name == '':
mb.showerror("错误", "信息不能为空!")
else:
InsertStudent(id,name,sex,speciality,classno,date)
mb.showinfo("成功", "新增学生信息成功")
self.id.set('')
self.name.set('')
self.sex.set('')
self.speciality.set('')
self.classno.set('')
self.date.set('')
#查询操作类
class QueryFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.itemName = StringVar()
self.createPage()
def createPage(self):
Label(self, text='查询界面', font=('华文行楷', 20), fg='purple').pack()
Button(self, text='查询教师', command=self.show_teacher_frame).pack(anchor='center', pady=5)
Button(self, text='查询学生', command=self.show_student_frame).pack(anchor='center', pady=5)
#查询教师信息
def show_teacher_frame(self):
win2 = tkinter.Toplevel()
win2.title('查询教师信息')
win2.geometry('700x300')
sw = win2.winfo_screenwidth()
sh = win2.winfo_screenheight()
win2.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
Label(win2, text='欢迎进入查询页面', font=('华文行楷', 20), fg='purple').pack()
ListB = tkinter.Listbox(win2)
ListB.place(relx=0.3, rely=0.3, anchor='nw', width=350)
li = Serch()
for item in li:
ListB.insert(0, item)
# 按钮
b2 = tkinter.Button(win2, text='退出', width=10, height=3, bg='gray', command=win2.destroy)
b2.place(relx=1, rely=1, anchor='se')
#查询学生信息
def show_student_frame(self):
win2 = tkinter.Toplevel()
win2.title('查询学生信息')
win2.geometry('700x300')
sw = win2.winfo_screenwidth()
sh = win2.winfo_screenheight()
win2.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
Label(win2, text='欢迎进入查询页面', font=('华文行楷', 20), fg='purple').pack()
ListB = tkinter.Listbox(win2)
ListB.place(relx=0.3, rely=0.3, anchor='nw', width=350)
li = SerchStudent()
for item in li:
ListB.insert(0, item)
# 按钮
b2 = tkinter.Button(win2, text='退出', width=10, height=3, bg='gray', command=win2.destroy)
b2.place(relx=1, rely=1, anchor='se')
#修改操作类
class maintainFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.id = StringVar()
self.name = StringVar()
self.sex = StringVar()
self.speciality = StringVar()
self.Title = StringVar()
self.classno = StringVar()
self.date = StringVar()
self.createPage()
def createPage(self):
Label(self, text='信息维护界面', font=('华文行楷', 20), fg='purple').pack()
Button(self, text='修改教师', command=self.update_teacher_frame).pack(anchor='center', pady=5)
Button(self, text='删除教师', command=self.del_teacher_frame).pack(anchor='center', pady=5)
Button(self, text='修改学生', command=self.update_student_frame).pack(anchor='center', pady=5)
Button(self, text='删除学生', command=self.del_student_frame).pack(anchor='center', pady=5)
#修改教师信息
def update_teacher_frame(self):
def update_show():
li = Serchone(id.get())
if len(li) == 0:
tkinter.messagebox.showerror("查询失败", "此教师不存在")
win4.destroy()
pth = li[0]
print(pth)
tkinter.Label(win4, text='%s' % pth[1]).place(relx=0.65, rely=0.22, anchor='center')
tkinter.Label(win4, text='%s' % pth[2]).place(relx=0.65, rely=0.32, anchor='center')
tkinter.Label(win4, text='%s' % pth[3]).place(relx=0.65, rely=0.42, anchor='center')
tkinter.Label(win4, text='%s' % pth[4]).place(relx=0.65, rely=0.52, anchor='center')
tkinter.Label(win4, text='%s' % pth[5]).place(relx=0.69, rely=0.63, anchor='center')
def UpdateDate():
Update(id.get(),name.get(),sex.get(),speciality.get(),Title.get(),date.get())
tkinter.messagebox.showerror("成功", "修改成功")
win4.destroy()
# 设置窗口位置
# 不能使用两次Tk去创建窗体因为tkinter中只能有一个主线程
win4 = tkinter.Toplevel()
win4.title('修改教师信息')
win4.geometry('500x400')
sw = win4.winfo_screenwidth()
sh = win4.winfo_screenheight()
win4.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
l = tkinter.Label(win4, text='欢迎进入修改页面', font=('华文行楷', 20), fg='purple')
l.place(relx=0.5, rely=0.05, anchor='center')
id = tkinter.StringVar()
name = tkinter.StringVar()
sex = tkinter.StringVar()
speciality = tkinter.StringVar()
Title = tkinter.StringVar()
date = tkinter.StringVar()
tkinter.Label(win4, text='工号:').place(relx=0.4, rely=0.12, anchor='center')
tkinter.Entry(win4, textvariable=id).place(relx=0.45, rely=0.1, width=70)
#姓名输入框
tkinter.Label(win4, text='姓名:').place(relx=0.4, rely=0.22, anchor='center')
tkinter.Entry(win4, textvariable=name).place(relx=0.45, rely=0.2, width=70)
# 性别输入框
tkinter.Label(win4, text='性别:').place(relx=0.4, rely=0.32, anchor='center')
tkinter.Entry(win4, textvariable=sex).place(relx=0.45, rely=0.3, width=70)
# 专业输入框
tkinter.Label(win4, text='专业:').place(relx=0.4, rely=0.42, anchor='center')
tkinter.Entry(win4, textvariable=speciality).place(relx=0.45, rely=0.4, width=70)
# 职称输入框
tkinter.Label(win4, text='职称:').place(relx=0.4, rely=0.52, anchor='center')
tkinter.Entry(win4, textvariable=Title).place(relx=0.45, rely=0.5, width=70)
# 入职年月输入框
tkinter.Label(win4, text='入职年月:').place(relx=0.36, rely=0.62, anchor='center')
tkinter.Entry(win4, textvariable=date).place(relx=0.45, rely=0.6, width=70)
# 按钮
tkinter.Button(win4, text='查询', width=10, height=3, bg='gray', command=update_show).place(relx=0, rely=1, anchor='sw')
tkinter.Button(win4, text='确认修改', width=10, height=3, bg='gray', command=UpdateDate).place(relx=0.15, rely=1, anchor='sw')
tkinter.Button(win4, text='退出', width=10, height=3, bg='gray', command=win4.destroy).place(relx=1, rely=1, anchor='se')
#删除教师信息
def del_teacher_frame(self):
def show():
li = Serchone(id.get())
if len(li) == 0:
tkinter.messagebox.showerror("错误", "此教师不存在")
win3.destroy()
pth = li[0]
print(pth)
tkinter.Label(win3, text='%s' % pth[1]).place(relx=0.5, rely=0.2, anchor='center')
tkinter.Label(win3, text='%s' % pth[2]).place(relx=0.5, rely=0.3, anchor='center')
tkinter.Label(win3, text='%s' % pth[3]).place(relx=0.5, rely=0.4, anchor='center')
tkinter.Label(win3, text='%s' % pth[4]).place(relx=0.5, rely=0.5, anchor='center')
tkinter.Label(win3, text='%s' % pth[5]).place(relx=0.55, rely=0.6, anchor='center')
def delDate():
Del(id.get())
tkinter.messagebox.showerror("成功", "删除成功")
win3.destroy()
# 设置窗口位置
# 不能使用两次Tk去创建窗体因为tkinter中只能有一个主线程
win3 = tkinter.Toplevel()
win3.title('删除教师信息')
win3.geometry('500x400')
sw = win3.winfo_screenwidth()
sh = win3.winfo_screenheight()
win3.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
l = tkinter.Label(win3, text='欢迎进入删除页面', font=('华文行楷', 20), fg='purple')
l.place(relx=0.5, rely=0.05, anchor='center')
# 工号输入框
# id = self.id.get()
id = tkinter.StringVar()
tkinter.Label(win3, text='工号:').place(relx=0.4, rely=0.12, anchor='center')
tkinter.Entry(win3, textvariable=id).place(relx=0.45, rely=0.1, width=70)
#姓名展示框
tkinter.Label(win3, text='姓名:').place(relx=0.4, rely=0.2, anchor='center')
# 性别展示框
tkinter.Label(win3, text='性别:').place(relx=0.4, rely=0.3, anchor='center')
# 专业展示框
tkinter.Label(win3, text='专业:').place(relx=0.4, rely=0.4, anchor='center')
# 职称展示框
tkinter.Label(win3, text='职称:').place(relx=0.4, rely=0.5, anchor='center')
# 入职年月展示框
tkinter.Label(win3, text='入职年月:').place(relx=0.4, rely=0.6, anchor='center')
# 按钮
tkinter.Button(win3, text='查询', width=10, height=3, bg='gray', command=show).place(relx=0, rely=1, anchor='sw')
tkinter.Button(win3, text='确认删除', width=10, height=3, bg='gray', command=delDate).place(relx=0.15, rely=1, anchor='sw')
tkinter.Button(win3, text='退出', width=10, height=3, bg='gray', command=win3.destroy).place(relx=1, rely=1, anchor='se')
#修改学生信息
def update_student_frame(self):
def student_show():
li = SerchoneStudent(id.get())
if len(li) == 0:
tkinter.messagebox.showerror("查询失败", "此学生不存在")
win4.destroy()
pth = li[0]
print(pth)
tkinter.Label(win4, text='%s' % pth[1]).place(relx=0.65, rely=0.22, anchor='center')
tkinter.Label(win4, text='%s' % pth[2]).place(relx=0.65, rely=0.32, anchor='center')
tkinter.Label(win4, text='%s' % pth[3]).place(relx=0.73, rely=0.42, anchor='center')
tkinter.Label(win4, text='%s' % pth[4]).place(relx=0.65, rely=0.52, anchor='center')
tkinter.Label(win4, text='%s' % pth[5]).place(relx=0.69, rely=0.63, anchor='center')
def UpdateDate():
UpdateStudent(id.get(),name.get(),sex.get(),speciality.get(),classno.get(),date.get())
tkinter.messagebox.showerror("成功", "修改成功")
win4.destroy()
# 设置窗口位置
# 不能使用两次Tk去创建窗体因为tkinter中只能有一个主线程
win4 = tkinter.Toplevel()
win4.title('修改学生信息')
win4.geometry('500x400')
sw = win4.winfo_screenwidth()
sh = win4.winfo_screenheight()
win4.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
l = tkinter.Label(win4, text='欢迎进入修改页面', font=('华文行楷', 20), fg='purple')
l.place(relx=0.5, rely=0.05, anchor='center')
id = tkinter.StringVar()
name = tkinter.StringVar()
sex = tkinter.StringVar()
speciality = tkinter.StringVar()
classno = tkinter.StringVar()
date = tkinter.StringVar()
# 学号输入框
tkinter.Label(win4, text='学号:').place(relx=0.4, rely=0.12, anchor='center')
tkinter.Entry(win4, textvariable=id).place(relx=0.45, rely=0.1, width=70)
#姓名输入框
tkinter.Label(win4, text='姓名:').place(relx=0.4, rely=0.22, anchor='center')
tkinter.Entry(win4, textvariable=name).place(relx=0.45, rely=0.2, width=70)
# 性别输入框
tkinter.Label(win4, text='性别:').place(relx=0.4, rely=0.32, anchor='center')
tkinter.Entry(win4, textvariable=sex).place(relx=0.45, rely=0.3, width=70)
# 专业输入框
tkinter.Label(win4, text='专业:').place(relx=0.4, rely=0.42, anchor='center')
tkinter.Entry(win4, textvariable=speciality).place(relx=0.45, rely=0.4, width=70)
# 班级输入框
tkinter.Label(win4, text='班级:').place(relx=0.4, rely=0.52, anchor='center')
tkinter.Entry(win4, textvariable=classno).place(relx=0.45, rely=0.5, width=70)
# 入学时间输入框
tkinter.Label(win4, text='入学时间:').place(relx=0.36, rely=0.62, anchor='center')
tkinter.Entry(win4, textvariable=date).place(relx=0.45, rely=0.6, width=70)
# 按钮
tkinter.Button(win4, text='查询', width=10, height=3, bg='gray', command=student_show).place(relx=0, rely=1, anchor='sw')
tkinter.Button(win4, text='确认修改', width=10, height=3, bg='gray', command=UpdateDate).place(relx=0.15, rely=1, anchor='sw')
tkinter.Button(win4, text='退出', width=10, height=3, bg='gray', command=win4.destroy).place(relx=1, rely=1, anchor='se')
#删除学生信息
def del_student_frame(self):
def show():
li = SerchoneStudent(id.get())
if len(li) == 0:
tkinter.messagebox.showerror("错误", "此学生不存在")
win3.destroy()
pth = li[0]
print(pth)
tkinter.Label(win3, text='%s' % pth[1]).place(relx=0.5, rely=0.2, anchor='center')
tkinter.Label(win3, text='%s' % pth[2]).place(relx=0.5, rely=0.3, anchor='center')
tkinter.Label(win3, text='%s' % pth[3]).place(relx=0.5, rely=0.4, anchor='center')
tkinter.Label(win3, text='%s' % pth[4]).place(relx=0.5, rely=0.5, anchor='center')
tkinter.Label(win3, text='%s' % pth[5]).place(relx=0.55, rely=0.6, anchor='center')
def delDate():
DelStudent(id.get())
tkinter.messagebox.showerror("成功", "删除成功")
win3.destroy()
# 设置窗口位置
# 不能使用两次Tk去创建窗体因为tkinter中只能有一个主线程
win3 = tkinter.Toplevel()
win3.title('删除学生信息')
win3.geometry('500x400')
sw = win3.winfo_screenwidth()
sh = win3.winfo_screenheight()
win3.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
l = tkinter.Label(win3, text='欢迎进入删除页面', font=('华文行楷', 20), fg='purple')
l.place(relx=0.5, rely=0.05, anchor='center')
# 学号输入框
id = tkinter.StringVar()
tkinter.Label(win3, text='学号:').place(relx=0.4, rely=0.12, anchor='center')
tkinter.Entry(win3, textvariable=id).place(relx=0.45, rely=0.1, width=70)
#姓名展示框
tkinter.Label(win3, text='姓名:').place(relx=0.4, rely=0.2, anchor='center')
# 性别展示框
tkinter.Label(win3, text='性别:').place(relx=0.4, rely=0.3, anchor='center')
# 专业展示框
tkinter.Label(win3, text='专业:').place(relx=0.4, rely=0.4, anchor='center')
# 班级展示框
tkinter.Label(win3, text='班级:').place(relx=0.4, rely=0.5, anchor='center')
# 入学日期展示框
tkinter.Label(win3, text='入学日期:').place(relx=0.4, rely=0.6, anchor='center')
# 按钮
tkinter.Button(win3, text='查询', width=10, height=3, bg='gray', command=show).place(relx=0, rely=1, anchor='sw')
tkinter.Button(win3, text='确认删除', width=10, height=3, bg='gray', command=delDate).place(relx=0.15, rely=1, anchor='sw')
tkinter.Button(win3, text='退出', width=10, height=3, bg='gray', command=win3.destroy).place(relx=1, rely=1, anchor='se')
#修改密码类
class UpdateKeywordFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Label(self, text='更新密码界面').pack()

@ -0,0 +1,280 @@
import os
import tkinter
import psutil,time,threading
import ttkbootstrap
from tkinter import *
from tkinter import ttk, messagebox
import zipfile
import tkinter as tk
import _sqlite3
# 数据库
conn = _sqlite3.connect("data.db")
c = conn.cursor()
# c.execute("create table score(itemName char(20),importPrice char(20),"
# "sellPrice char(20),deductPrice char(20))")
def Serchone(sellPrice):
c.execute("select itemName,deductPrice from score where score.sellPrice = '%s'" % sellPrice)
return c.fetchall()
def Serchone2():
c.execute("select itemName,deductPrice from score order by deductPrice desc")
return c.fetchall()
#根据id查询教师个人信息sql语句
def SerchMy(name):
c.execute("select * from students where students.name = '%s'" % name)
return c.fetchall()
#修改密码sql语句
def UpdatePassWord(id, name):
c.execute('update students set id = (?) where name = (?)',
(id, name))
# 提交事务
conn.commit()
#主窗体
class InputFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Label(self, text='欢迎登录信息管理系统!!!', font=('华文行楷', 20), fg='purple').pack()
# #实现测网速
# def _():
# meter = ttkbootstrap.Meter(
# metersize=180,
# padding=50,
# amountused=0,
# metertype="semi",
# subtext="当前网速(kB/s)",
# subtextstyle="warning",
# interactive=False,
# bootstyle='primary',
# )
# meter.pack(side=ttkbootstrap.LEFT, padx=5)
# while True:
# meter.configure(amountused=round(getNet(), 2))
# def getNet():
# recv_before = psutil.net_io_counters().bytes_recv
# time.sleep(1)
# recv_now = psutil.net_io_counters().bytes_recv
# recv = (recv_now - recv_before) / 1024
# return recv
# t = threading.Thread(target=_)
# t.setDaemon(True)
# t.start()
#我的信息
class MyFrame(Frame):
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.name = name
self.createPage()
def createPage(self):
Button(self, text='个人信息', command=self.My_Page).pack()
def My_Page(self):
li = SerchMy(self.name)
pth = li[0]
print(pth)
Label(self, text='工号: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[0]).pack(side=LEFT,ipady=10)
Label(self, text='姓名: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[1]).pack(side=LEFT,ipady=10)
Label(self, text='性别: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[2]).pack(side=LEFT,ipady=10)
Label(self, text='专业: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[3]).pack(side=LEFT,ipady=10)
Label(self, text='职称: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[4]).pack(side=LEFT,ipady=10)
Label(self, text='入职年月: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[5]).pack(side=LEFT,ipady=10)
#修改密码
class UpdatepwdFrame(Frame):
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.name = name
self.id = StringVar()
self.createPage()
def createPage(self):
Button(self, text='修改密码', command=self.My_Page).grid()
def My_Page(self):
li = SerchMy(self.name)
pth = li[0]
print(pth)
self.id = tkinter.StringVar()
self.ids = tkinter.StringVar()
Label(self).grid(row=0, stick=W, pady=10)
Label(self, text='请输入新密码: ').grid(row=1, stick=W, pady=10)
Entry(self, textvariable=self.id).grid(row=1, column=1, stick=E)
Label(self, text='确认密码: ').grid(row=2, stick=W, pady=10)
Entry(self, textvariable=self.ids).grid(row=2, column=1, stick=E)
Button(self, text='确认修改', width=8, height=2, command=self.UpdateDate).grid(row=3, column=1, stick=E)
self.id.set('')
self.ids.set('')
def UpdateDate(self):
UpdatePassWord(self.id.get(),self.name)
tkinter.messagebox.showerror("成功", "修改成功")
#查看成绩类
class QueryFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.itemName = StringVar()
self.sellPrice = StringVar()
self.createPage()
def createPage(self):
Label(self, text='我的成绩', font=('华文行楷', 20), fg='purple').pack()
columns = ("itemName", "deductPrice")
columns_values = ("课程名称", "成绩")
self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
self.tree_view.column('itemName', width=80, anchor='center')
self.tree_view.column('deductPrice', width=80, anchor='center')
self.tree_view.heading('itemName', text='课程名称')
self.tree_view.heading('deductPrice', text='成绩')
self.tree_view.pack(fill=tk.BOTH, expand=True)
scores = Serchone2()
print(scores)
index = 0
for s in scores:
print(s)
self.tree_view.insert('', index + 1, values=(
s[0], s[1],
))
#意见反馈类
class CountFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Label(self, text='请说出你的想法', font=('华文行楷', 20), fg='purple').pack()
text = tk.Text(self, width=100, height=20)
text.pack()
text.insert("insert", "")
text.insert('end', '\n')
mytxtfile = "mytxtfile.txt"
# 读取TXT文件显示在tkinter的Text
def in_f_txt():
if os.path.exists(mytxtfile):
a = open(mytxtfile, 'r', encoding='utf-8')
for id_names in a:
text.insert('insert', id_names)
a.close()
text.insert('end', '\n')
# 输入文本框
input_txt = tk.Entry(self, width=20)
input_txt.pack()
def add():
# 通过get()函数获得Textinput_txt的输入内容
var_id = input_txt.get()
h = open(mytxtfile, 'a+', encoding='utf-8')
h.write(var_id + '\n') # 添加到文件夹中的txt
h.close()
b2 = tk.Button(text, text="提交意见", command=add)
text.window_create("insert", window=b2)
text.insert('end', '\n')
#提交作业
class SubmitFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Button(self, text='提交作业', font=('华文行楷', 20), command=self.show_submit_frame).pack(anchor='center', pady=5)
#提交作业
def show_submit_frame(self):
window = tk.Tk()
window.title("提交作业")
window.geometry("800x600") # 窗口设置
window.resizable(0, 0) # 固定窗口大小
var = tk.StringVar() # 输入框内容
self.num = 1 # 已生成的作业数量+1
source = str() # 单个源代码的内容
self.path = str() # 打包相对路径
# __Labels
head = tk.Label(window, text=" 请将第{num}题源代码复制到框中:".format(num=self.num),
font=('Arial', 15), width=20, height=1)
# 这里的长宽以字符为单位
head.place(x=40, y=100, anchor='nw')
name = tk.Label(window, text="请输入姓名:", font=('Arial', 15), )
name.place(x=3, y=5, anchor='nw')
xuehao = tk.Label(window, text="请输入学号:", font=('Arial', 15), )
xuehao.place(x=3, y=35, anchor='nw')
ok_txt = tk.Label(window, text="点击确定即可\n以框中内容\n生成一个.py文件:", font=('Arial', 15))
ok_txt.place(x=600, y=20, anchor='nw')
# __Entrys
name_en = tk.Entry(window)
name_en.place(x=145, y=8, anchor='nw')
xuehao_en = tk.Entry(window)
xuehao_en.place(x=145, y=38, anchor='nw')
# __Buttons
def make_zip(floder, backupfilename): # floder要打包的文件夹backupfilename:指定文件名
backupfilename = backupfilename + '.zip'
f = zipfile.ZipFile(backupfilename, 'w') # c创建一个zip对象
for floderName, subFolders, fileNames in os.walk(floder):
f.write(floderName)
for subFolder in subFolders:
f.write(os.path.join(floderName, subFolder))
for fileName in fileNames:
f.write(os.path.join(floderName, fileName))
f.close()
def ok_hit(): ##确认 键的功能
# global path
self.path = "./{xuehao}_{name}".format(xuehao=xuehao_en.get(), name=name_en.get())
folder = os.path.exists(self.path)
if not folder:
os.makedirs(self.path)
source = content.get("0.0", "end")
with open(self.path + '/' + "{num}题.py".format(num=self.num), 'w') as f:
f.write(source)
self.num += 1
head.config(text="请将第{num}题源代码复制到框中:".format(num=self.num))
content.delete("0.0", 'end')
pass
def zip_them_hit(): ##打包键功能
make_zip(self.path, "{xuehao}_{name}".format
(xuehao=xuehao_en.get(), name=name_en.get()))
messagebox.showinfo(message="你的 {num} 个.py语言源代码\n已经打包入zip压缩包中\n在当前目录即可找到".format(num=self.num-1), title="Packing has been complished!")
os.system("explorer " + os.getcwd())
window.destroy() ##结束程序
pass
#创建Buttons
ok = tk.Button(window, text="确 定", command=ok_hit, width=10, height=2, font=40)
ok.place(x=650, y=120, anchor='nw')
zip_them = tk.Button(window, text="打包成zip", command=zip_them_hit, width=10,height=2, font=40)
zip_them.place(x=650, y=250, anchor='nw')
# __Texts
content = tk.Text(window, width=65, height=30)
content.place(x=20, y=130, anchor='nw')
window.mainloop()

@ -0,0 +1,405 @@
import os
import tkinter
from tkinter import *
import tkinter.messagebox as mb
from tkinter import ttk
import tkinter as tk
import _sqlite3
# 数据库
# conn = _sqlite3.connect(":memory:")
conn = _sqlite3.connect("data.db")
c = conn.cursor()
#创建表score
# c.execute("create table score(itemName char(20),importPrice char(20),"
# "sellPrice char(20),deductPrice char(20))")
#添加成绩sql语句
def Insert(itemName, importPrice, sellPrice, deductPrice):
c.execute('insert into score values(?,?,?,?)', (itemName, importPrice, sellPrice, deductPrice))
# 提交事务
conn.commit()
#根据学号删除成绩
def Del(sellPrice):
c.execute("delete from score where sellPrice = '%s'" % sellPrice)
# 提交事务
conn.commit()
#查询成绩sql语句
def Serch():
c.execute('select * from score')
li = c.fetchall()
# 提交事务
conn.commit()
return li
#显示所有的学生信息,先按照成绩从大-->小排序,当成绩相同时 按照学号从高-->矮排序:
def Serchone2():
c.execute("select * from score order by deductPrice")
# c.execute("select * from score order by deductPrice desc,sellPrice desc")
# 提交事务
conn.commit()
return c.fetchall()
#根据学号查询成绩
def Serchone(sellPrice):
c.execute("select * from score where score.sellPrice = '%s'" % sellPrice)
# 提交事务
conn.commit()
return c.fetchall()
# 修改成绩
def Update(itemName, importPrice, sellPrice, deductPrice):
c.execute('update score set itemName = (?),importPrice = (?),deductPrice = (?) where sellPrice = (?)',
(itemName, importPrice, deductPrice, sellPrice))
# 提交事务
conn.commit()
#根据id查询教师个人信息sql语句
def SerchMy(name):
c.execute("select * from teachers where teachers.name = '%s'" % name)
return c.fetchall()
#修改密码sql语句
def UpdatePassWord(id, name):
c.execute('update teachers set id = (?) where name = (?)',
(id, name))
# 提交事务
conn.commit()
#主窗体
class WelcomeFrame(Frame): # 继承Frame类
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.usrname = name
self.createPage()
def createPage(self):
Label(self, text='欢迎教师'+self.usrname+'登录', font=("黑体", 20)).pack()
#我的信息
class MyFrame(Frame):
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.name = name
self.createPage()
def createPage(self):
Button(self, text='个人信息', command=self.My_Page).pack()
def My_Page(self):
li = SerchMy(self.name)
pth = li[0]
print(pth)
Label(self, text='工号: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[0]).pack(side=LEFT,ipady=10)
Label(self, text='姓名: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[1]).pack(side=LEFT,ipady=10)
Label(self, text='性别: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[2]).pack(side=LEFT,ipady=10)
Label(self, text='专业: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[3]).pack(side=LEFT,ipady=10)
Label(self, text='职称: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[4]).pack(side=LEFT,ipady=10)
Label(self, text='入职年月: ').pack(side=LEFT,ipady=10)
Label(self, text='%s' % pth[5]).pack(side=LEFT,ipady=10)
#修改密码
class UpdatepwdFrame(Frame):
def __init__(self, name, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.name = name
self.id = StringVar()
self.createPage()
def createPage(self):
Button(self, text='修改密码', command=self.My_Page).grid()
def My_Page(self):
li = SerchMy(self.name)
pth = li[0]
print(pth)
self.id = tkinter.StringVar()
self.ids = tkinter.StringVar()
Label(self).grid(row=0, stick=W, pady=10)
Label(self, text='请输入新密码: ').grid(row=1, stick=W, pady=10)
Entry(self, textvariable=self.id).grid(row=1, column=1, stick=E)
Label(self, text='确认密码: ').grid(row=2, stick=W, pady=10)
Entry(self, textvariable=self.ids).grid(row=2, column=1, stick=E)
Button(self, text='确认修改', width=8, height=2, command=self.UpdateDate).grid(row=3, column=1, stick=E)
self.id.set('')
self.ids.set('')
def UpdateDate(self):
UpdatePassWord(self.id.get(),self.name)
tkinter.messagebox.showerror("成功", "修改成功")
#成绩录入
class InputFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.itemName = StringVar()
self.importPrice = StringVar()
self.sellPrice = StringVar()
self.deductPrice = StringVar()
self.createPage()
def createPage(self):
Label(self).grid(row=0, stick=W, pady=10)
Label(self, text='课程名称: ').grid(row=1, stick=W, pady=10)
Entry(self, textvariable=self.itemName).grid(row=1, column=1, stick=E)
Label(self, text='班级: ').grid(row=2, stick=W, pady=10)
Entry(self, textvariable=self.importPrice).grid(row=2, column=1, stick=E)
Label(self, text='学号: ').grid(row=3, stick=W, pady=10)
Entry(self, textvariable=self.sellPrice).grid(row=3, column=1, stick=E)
Label(self, text='成绩: ').grid(row=4, stick=W, pady=10)
Entry(self, textvariable=self.deductPrice).grid(row=4, column=1, stick=E)
Button(self, text='成绩录入',command=self.AddScore).grid(row=6, column=1, stick=E, pady=10)
#成绩录入
def AddScore(self):
itemName = self.itemName.get()
importPrice = self.importPrice.get()
sellPrice = self.sellPrice.get()
deductPrice = self.deductPrice.get()
if sellPrice == '' or deductPrice == '':
mb.showerror("错误", "信息不能为空!")
else:
Insert(itemName, importPrice, sellPrice, deductPrice)
mb.showinfo("成功", "录入成绩成功")
self.itemName.set('')
self.importPrice.set('')
self.sellPrice.set('')
self.deductPrice.set('')
#查询
class QueryFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.itemName = StringVar()
self.sellPrice = StringVar()
self.createPage()
def createPage(self):
Label(self, text='查询界面', font=('华文行楷', 20), fg='purple').pack(pady=12)
#查询所有成绩按钮
Button(self, text='查询所有成绩', command=self.show_score_frame).place(relx=0.18, rely=0.2, anchor='center')
# 根据学号查询框
self.sellPrice = tkinter.StringVar()
tkinter.Label(self, text='学号:').place(relx=0.4, rely=0.2, anchor='center')
tkinter.Entry(self, textvariable=self.sellPrice).place(relx=0.46, rely=0.17, width=70)
#学号查询按钮
Button(self, text='根据学号查询', command=self.show_score_frame2).place(relx=0.85, rely=0.2, anchor='center')
Label(self, text='', font=('华文行楷', 20), fg='purple').pack(pady=2,anchor='w')
columns = ("itemName", "importPrice", "sellPrice", "deductPrice")
columns_values = ("课程名称", "班级", "学号", "成绩")
self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
self.tree_view.column('itemName', width=80, anchor='center')
self.tree_view.column('importPrice', width=80, anchor='center')
self.tree_view.column('sellPrice', width=80, anchor='center')
self.tree_view.column('deductPrice', width=80, anchor='center')
self.tree_view.heading('itemName', text='课程名称')
self.tree_view.heading('importPrice', text='班级')
self.tree_view.heading('sellPrice', text='学号')
self.tree_view.heading('deductPrice', text='成绩')
self.tree_view.pack(fill=tk.BOTH, expand=True)
self.show_score_frame()
#查询全部学生成绩信息
def show_score_frame(self):
# 删除旧的数据
for _ in map(self.tree_view.delete, self.tree_view.get_children('')):
pass
students = Serch()
index = 0
for stu in students:
print(stu)
self.tree_view.insert('', index + 1, values=(
stu[0], stu[1], stu[2], stu[3],
))
#根据学号查询学生信息
def show_score_frame2(self):
li = Serchone(self.sellPrice.get())
print(li)
# 删除旧的数据
for _ in map(self.tree_view.delete, self.tree_view.get_children('')):
pass
index = 0
for stu in li:
print(stu)
self.tree_view.insert('', index + 1, values=(
stu[0], stu[1], stu[2], stu[3],
#设置输入框为空
self.sellPrice.set('')
))
#统计
class CountFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Label(self, text='统计界面', font=('华文行楷', 20), fg='purple').pack()
Button(self, text='根据成绩排序', command=self.show_score).pack(anchor='center', pady=5)
columns = ("itemName", "importPrice", "sellPrice", "deductPrice")
columns_values = ("课程名称", "班级", "学号", "成绩")
# # 创建滚动条
self.VScroll1 = Scrollbar(self, orient='vertical')
# 给treeview添加配置
#,yscrollcommand=self.VScroll1.setm
self.tree_view = ttk.Treeview(self, show='headings', columns=columns,yscrollcommand=self.VScroll1.set)
self.tree_view.column('itemName', width=80, anchor='center')
self.tree_view.column('importPrice', width=80, anchor='center')
self.tree_view.column('sellPrice', width=80, anchor='center')
self.tree_view.column('deductPrice', width=80, anchor='center')
self.tree_view.heading('itemName', text='课程名称')
self.tree_view.heading('importPrice', text='班级')
self.tree_view.heading('sellPrice', text='学号')
self.tree_view.heading('deductPrice', text='成绩')
self.tree_view.pack(fill=tk.BOTH, expand=True)
self.show_score()
#根据成绩排序查询全部学生成绩信息
def show_score(self):
# 删除旧的数据
for _ in map(self.tree_view.delete, self.tree_view.get_children('')):
pass
students = Serchone2()
index = 0
for stu in students:
print(stu)
self.tree_view.insert('', index + 1, values=(
stu[0], stu[1], stu[2], stu[3],
))
#编辑
class EditFrame(Frame): # 继承Frame类
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.itemName = StringVar()
self.importPrice = StringVar()
self.sellPrice = StringVar()
self.deductPrice = StringVar()
self.createPage()
def createPage(self):
Label(self, text='编辑界面', font=('华文行楷', 20), fg='purple').pack()
Button(self, text='修改成绩', command=self.update_score_frame).pack(anchor='center', pady=5)
Button(self, text='删除成绩', command=self.del_score_frame).pack(anchor='center', pady=5)
# 修改成绩信息
def update_score_frame(self):
def update_show():
li = Serchone(sellPrice.get())
if len(li) == 0:
tkinter.messagebox.showerror("查询失败", "学号不存在")
win4.destroy()
pth = li[0]
print(pth)
tkinter.Label(win4, text='%s' % pth[1]).place(relx=0.67, rely=0.22, anchor='center')
tkinter.Label(win4, text='%s' % pth[0]).place(relx=0.67, rely=0.32, anchor='center')
tkinter.Label(win4, text='%s' % pth[3]).place(relx=0.67, rely=0.42, anchor='center')
def UpdateDate():
Update(itemName.get(), importPrice.get(), sellPrice.get(), deductPrice.get())
tkinter.messagebox.showerror("成功", "修改成功")
win4.destroy()
# 设置窗口位置
# 不能使用两次Tk去创建窗体因为tkinter中只能有一个主线程
win4 = tkinter.Toplevel()
win4.title('修改学生成绩')
win4.geometry('500x400')
sw = win4.winfo_screenwidth()
sh = win4.winfo_screenheight()
win4.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
l = tkinter.Label(win4, text='欢迎进入修改页面', font=('华文行楷', 20), fg='purple')
l.place(relx=0.5, rely=0.05, anchor='center')
itemName = tkinter.StringVar()
importPrice = tkinter.StringVar()
sellPrice = tkinter.StringVar()
deductPrice = tkinter.StringVar()
#学号输入框
tkinter.Label(win4, text='学号:').place(relx=0.4, rely=0.12, anchor='center')
tkinter.Entry(win4, textvariable=sellPrice).place(relx=0.47, rely=0.1, width=70)
# 班级输入框
tkinter.Label(win4, text='班级:').place(relx=0.4, rely=0.22, anchor='center')
tkinter.Entry(win4, textvariable=importPrice).place(relx=0.47, rely=0.2, width=70)
# 课程名称输入框
tkinter.Label(win4, text='课程名称:').place(relx=0.4, rely=0.32, anchor='center')
tkinter.Entry(win4, textvariable=itemName).place(relx=0.47, rely=0.3, width=70)
# 成绩输入框
tkinter.Label(win4, text='成绩:').place(relx=0.4, rely=0.42, anchor='center')
tkinter.Entry(win4, textvariable=deductPrice).place(relx=0.47, rely=0.4, width=70)
# 按钮
tkinter.Button(win4, text='查询', width=10, height=3, bg='gray', command=update_show).place(relx=0, rely=1,anchor='sw')
tkinter.Button(win4, text='确认修改', width=10, height=3, bg='gray', command=UpdateDate).place(relx=0.15,rely=1,anchor='sw')
tkinter.Button(win4, text='退出', width=10, height=3, bg='gray', command=win4.destroy).place(relx=1, rely=1,anchor='se')
# 删除成绩信息
def del_score_frame(self):
def show():
li = Serchone(sellPrice.get())
if len(li) == 0:
tkinter.messagebox.showerror("错误", "学号不存在")
win3.destroy()
pth = li[0]
print(pth)
tkinter.Label(win3, text='%s' % pth[0]).place(relx=0.52, rely=0.2, anchor='center')
tkinter.Label(win3, text='%s' % pth[1]).place(relx=0.52, rely=0.3, anchor='center')
tkinter.Label(win3, text='%s' % pth[3]).place(relx=0.52, rely=0.4, anchor='center')
def delDate():
Del(sellPrice.get())
tkinter.messagebox.showerror("成功", "删除成功")
win3.destroy()
# 设置窗口位置
# 不能使用两次Tk去创建窗体因为tkinter中只能有一个主线程
win3 = tkinter.Toplevel()
win3.title('删除教师信息')
win3.geometry('500x400')
sw = win3.winfo_screenwidth()
sh = win3.winfo_screenheight()
win3.geometry('+%d+%d' % ((sw - 500) / 2, (sh - 300) / 2))
# 欢迎语
l = tkinter.Label(win3, text='欢迎进入删除页面', font=('华文行楷', 20), fg='purple')
l.place(relx=0.5, rely=0.05, anchor='center')
# 学号输入框
sellPrice = tkinter.StringVar()
tkinter.Label(win3, text='学号:').place(relx=0.41, rely=0.12, anchor='center')
tkinter.Entry(win3, textvariable=sellPrice).place(relx=0.47, rely=0.1, width=70)
# 课程名称展示框
tkinter.Label(win3, text='课程名称:').place(relx=0.38, rely=0.2, anchor='center')
# 班级展示框
tkinter.Label(win3, text='班级:').place(relx=0.41, rely=0.3, anchor='center')
# 成绩展示框
tkinter.Label(win3, text='成绩:').place(relx=0.41, rely=0.4, anchor='center')
# 按钮
tkinter.Button(win3, text='查询', width=10, height=3, bg='gray', command=show).place(relx=0, rely=1,anchor='sw')
tkinter.Button(win3, text='确认删除', width=10, height=3, bg='gray', command=delDate).place(relx=0.15, rely=1,anchor='sw')
tkinter.Button(win3, text='退出', width=10, height=3, bg='gray', command=win3.destroy).place(relx=1, rely=1,anchor='se')
#意见反馈
class FeedbackFrame(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.root = master # 定义内部变量root
self.createPage()
def createPage(self):
Label(self, text='学生意见收集箱', font=('华文行楷', 20), fg='purple').pack()
text = tk.Text(self, width=100, height=20)
text.pack()
text.insert("insert", "")
text.insert('end', '\n')
mytxtfile = "mytxtfile.txt"
# 读取TXT文件显示在tkinter的Text
def in_f_txt():
if os.path.exists(mytxtfile):
a = open(mytxtfile, 'r', encoding='utf-8')
for id_names in a:
text.insert('insert', id_names)
a.close()
b3 = tk.Button(text, text="查看", command=in_f_txt)
text.window_create("insert", window=b3)
text.insert('end', '\n')

Binary file not shown.

@ -0,0 +1,118 @@
import tkinter as tk
from tkinter import messagebox
import os
import zipfile
window = tk.Tk()
window.title("Homework Packer 1.0 Beta")
window.geometry("800x600") # 窗口设置
window.resizable(0, 0) # 固定窗口大小
var = tk.StringVar() # 输入框内容
num = 1 # 已生成的作业数量+1
source = str() # 单个c源代码的内容
path = str() # 打包相对路径
#__Labels
head = tk.Label(window, text="请将第{num}题源代码复制到框中:".format(num=num),
font=('Arial', 15), width=20, height=1)
# 这里的长宽以字符为单位
head.place(x=20, y=100, anchor='nw')
name = tk.Label(window, text="请输入姓名:",font=('Arial', 15), )
name.place(x=2, y=5, anchor='nw')
xuehao = tk.Label(window, text="请输入学号:",font=('Arial', 15), )
xuehao.place(x=2, y=35, anchor='nw')
ok_txt = tk.Label(window, text="点击确定即可\n以框中内容\n生成一个.py文件:", font=('Arial', 15))
ok_txt.place(x=600, y=20, anchor='nw')
#__Entrys
name_en = tk.Entry(window)
name_en.place(x=122, y=8, anchor='nw')
xuehao_en = tk.Entry(window)
xuehao_en.place(x=122, y=38, anchor='nw')
#__Buttons
def make_zip(floder, backupfilename): # floder要打包的文件夹backupfilename:指定文件名
backupfilename = backupfilename + '.zip'
f = zipfile.ZipFile(backupfilename, 'w') # c创建一个zip对象
for floderName, subFolders, fileNames in os.walk(floder):
f.write(floderName)
for subFolder in subFolders:
f.write(os.path.join(floderName, subFolder))
for fileName in fileNames:
f.write(os.path.join(floderName, fileName))
f.close()
def ok_hit(): ##确认 键的功能
global path
path = "./{xuehao}_{name}".format(xuehao=xuehao_en.get(),name=name_en.get())
folder = os.path.exists(path)
if not folder:
os.makedirs(path)
source = content.get("0.0", "end")
global num
with open(path + '/' + "{num}题.py".format(num=num), 'w') as f:
f.write(source)
num += 1
head.config(text="请将第{num}题源代码复制到框中:".format(num=num))
content.delete("0.0", 'end')
pass
def zip_them_hit(): ##打包键功能
make_zip(path, "{xuehao}_{name}".format
(xuehao=xuehao_en.get(), name=name_en.get()))
messagebox.showinfo(message="你的 {num} 个c语言源代码\n已经打包入zip压缩包中\n\
在当前目录即可找到".format(
num=num - 1), title="Packing has been complished!")
os.system("explorer " + os.getcwd())
window.destroy() ##结束程序
pass
def about_file(): ##文件介绍
win = tk.Tk()
win.title("关于本软件")
win.geometry("400x500") # 窗口设置
win.resizable(0, 0) # 固定窗口大小
tk.Label(win, text="========================================\n\
使用方法很简单\n\
1.输入姓名和学号\n\
2.每完成一题编程作业就将源码复制到框里\n\
3.点击<确定>\n\
4.重复23步直到作业做完\n\
5.点击<打包成zip> 即可在程序所在的目录\n\
下找到压缩包\n\
\n\
包名字都是按本班 C语言作业命\n\
名要求设置的所以这个软件基本上就给自\n\
己人使用\n\
========================================\n\
========================================", anchor='ne').pack()
pass
# # # # # # # # # # # ## 创建Buttons
ok = tk.Button(window, text="确 定", command=ok_hit, width=10, height=2, font=40)
ok.place(x=650, y=120, anchor='nw')
zip_them = tk.Button(window, text="打包成zip", command=zip_them_hit, width=10,
height=2, font=40)
zip_them.place(x=650, y=250, anchor='nw')
# about HMPacker1.0Beta
about = tk.Button(window, text="关于本软件", command=about_file, font=5)
about.place(x=600, y=550, anchor='nw')
#__Texts
content = tk.Text(window, width=80, height=30)
content.place(x=20, y=130, anchor='nw')
about_file() # 运行的时候打开以下about_file 因为里面有操作方法
window.mainloop()

@ -0,0 +1,32 @@
import tkinter
from tkinter import *
from tkinter.ttk import Style
import ttkbootstrap as ttk
from ttkbootstrap.constants import *
import MainPages
import tkinter.messagebox as mb
def callback():
if mb.askokcancel("退出系统", "你确定要退出系统吗?"):
root.destroy()
#想要切换主题修改theme值即可有以下这么多的主题自己尝试吧['vista', 'classic', 'cyborg', 'journal',
# 'darkly', 'flatly', 'clam', 'alt', 'solar', 'minty', 'litera', 'united', 'xpnative',
# 'pulse', 'cosmo', 'lumen', 'yeti', 'superhero', 'winnative', 'sandstone', 'default']
root = ttk.Window(title="窗口名字", #设置窗口的标题
themename="flatly", #设置主题
size=(2066,600), #窗口的大小
position=(100,100), #窗口所在的位置
minsize=(0,0), #窗口的最小宽高
maxsize=(1920,1080), #窗口的最大宽高
resizable=None, #设置窗口是否可以更改大小
alpha=1.0, )
root.title('教务管理系统')
root.protocol("WM_DELETE_WINDOW", callback)
MainPages.LoginPage(root)
root.mainloop()

@ -0,0 +1,4 @@
1.课好多
2.作业好多
3.不想上学
4.好多作业呀

@ -0,0 +1 @@
Subproject commit 4d94f463fc3cd8bd89bdbee7eb7181e3e5a56fa9

12
first

@ -0,0 +1,12 @@
import tkinter as tk
# 创建一个简单的Tkinter窗口
root = tk.Tk()
root.title("Tkinter检查")
# 添加一个标签
label = tk.Label(root, text="Tkinter已安装")
label.pack()
# 启动主事件循环
root.mainloop()
Loading…
Cancel
Save