From 6207a9f4b57d4fc89a3547b73c7f85ef3db89523 Mon Sep 17 00:00:00 2001 From: sword-demon <2013482345@qq.com> Date: Fri, 31 May 2024 17:00:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=99=E5=8A=A1=E7=AE=A1=E7=90=86=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 3 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/pythonProject.iml | 10 + HumanManages/.idea/.gitignore | 3 + HumanManages/.idea/HumanManage.iml | 8 + .../inspectionProfiles/Project_Default.xml | 12 + .../inspectionProfiles/profiles_settings.xml | 6 + HumanManages/.idea/misc.xml | 4 + HumanManages/.idea/modules.xml | 8 + HumanManages/.idea/vcs.xml | 6 + HumanManages/MainPages.py | 392 +++++++++++++++ HumanManages/Managerview.py | 470 ++++++++++++++++++ HumanManages/Studentview.py | 280 +++++++++++ HumanManages/Teacherview.py | 405 +++++++++++++++ .../__pycache__/MainPages.cpython-310.pyc | Bin 0 -> 11742 bytes .../__pycache__/MainPages.cpython-312.pyc | Bin 0 -> 29674 bytes .../__pycache__/MainPages.cpython-39.pyc | Bin 0 -> 10159 bytes .../__pycache__/Managerview.cpython-310.pyc | Bin 0 -> 14219 bytes .../__pycache__/Managerview.cpython-312.pyc | Bin 0 -> 35689 bytes .../__pycache__/Managerview.cpython-39.pyc | Bin 0 -> 16788 bytes .../__pycache__/Studentview.cpython-310.pyc | Bin 0 -> 9750 bytes .../__pycache__/Studentview.cpython-312.pyc | Bin 0 -> 17525 bytes .../__pycache__/Studentview.cpython-39.pyc | Bin 0 -> 3805 bytes .../__pycache__/Teacherview.cpython-310.pyc | Bin 0 -> 14311 bytes .../__pycache__/Teacherview.cpython-312.pyc | Bin 0 -> 28848 bytes .../__pycache__/Teacherview.cpython-39.pyc | Bin 0 -> 7991 bytes HumanManages/data.db | Bin 0 -> 16384 bytes HumanManages/demo1.py | 118 +++++ HumanManages/main.py | 32 ++ HumanManages/mytxtfile.txt | 4 + J123 | 1 + first | 12 + 34 files changed, 1795 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/pythonProject.iml create mode 100644 HumanManages/.idea/.gitignore create mode 100644 HumanManages/.idea/HumanManage.iml create mode 100644 HumanManages/.idea/inspectionProfiles/Project_Default.xml create mode 100644 HumanManages/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 HumanManages/.idea/misc.xml create mode 100644 HumanManages/.idea/modules.xml create mode 100644 HumanManages/.idea/vcs.xml create mode 100644 HumanManages/MainPages.py create mode 100644 HumanManages/Managerview.py create mode 100644 HumanManages/Studentview.py create mode 100644 HumanManages/Teacherview.py create mode 100644 HumanManages/__pycache__/MainPages.cpython-310.pyc create mode 100644 HumanManages/__pycache__/MainPages.cpython-312.pyc create mode 100644 HumanManages/__pycache__/MainPages.cpython-39.pyc create mode 100644 HumanManages/__pycache__/Managerview.cpython-310.pyc create mode 100644 HumanManages/__pycache__/Managerview.cpython-312.pyc create mode 100644 HumanManages/__pycache__/Managerview.cpython-39.pyc create mode 100644 HumanManages/__pycache__/Studentview.cpython-310.pyc create mode 100644 HumanManages/__pycache__/Studentview.cpython-312.pyc create mode 100644 HumanManages/__pycache__/Studentview.cpython-39.pyc create mode 100644 HumanManages/__pycache__/Teacherview.cpython-310.pyc create mode 100644 HumanManages/__pycache__/Teacherview.cpython-312.pyc create mode 100644 HumanManages/__pycache__/Teacherview.cpython-39.pyc create mode 100644 HumanManages/data.db create mode 100644 HumanManages/demo1.py create mode 100644 HumanManages/main.py create mode 100644 HumanManages/mytxtfile.txt create mode 160000 J123 create mode 100644 first diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..0f6dba6 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..e15ec35 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/pythonProject.iml b/.idea/pythonProject.iml new file mode 100644 index 0000000..4bf8ccf --- /dev/null +++ b/.idea/pythonProject.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/HumanManages/.idea/.gitignore b/HumanManages/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/HumanManages/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/HumanManages/.idea/HumanManage.iml b/HumanManages/.idea/HumanManage.iml new file mode 100644 index 0000000..8437fe6 --- /dev/null +++ b/HumanManages/.idea/HumanManage.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/HumanManages/.idea/inspectionProfiles/Project_Default.xml b/HumanManages/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..7df2b6e --- /dev/null +++ b/HumanManages/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/HumanManages/.idea/inspectionProfiles/profiles_settings.xml b/HumanManages/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/HumanManages/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/HumanManages/.idea/misc.xml b/HumanManages/.idea/misc.xml new file mode 100644 index 0000000..dc9ea49 --- /dev/null +++ b/HumanManages/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/HumanManages/.idea/modules.xml b/HumanManages/.idea/modules.xml new file mode 100644 index 0000000..4ed92d3 --- /dev/null +++ b/HumanManages/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/HumanManages/.idea/vcs.xml b/HumanManages/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/HumanManages/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/HumanManages/MainPages.py b/HumanManages/MainPages.py new file mode 100644 index 0000000..97dfd51 --- /dev/null +++ b/HumanManages/MainPages.py @@ -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) \ No newline at end of file diff --git a/HumanManages/Managerview.py b/HumanManages/Managerview.py new file mode 100644 index 0000000..9bddde1 --- /dev/null +++ b/HumanManages/Managerview.py @@ -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() \ No newline at end of file diff --git a/HumanManages/Studentview.py b/HumanManages/Studentview.py new file mode 100644 index 0000000..6a14492 --- /dev/null +++ b/HumanManages/Studentview.py @@ -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()函数获得Text(input_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() diff --git a/HumanManages/Teacherview.py b/HumanManages/Teacherview.py new file mode 100644 index 0000000..1fd0558 --- /dev/null +++ b/HumanManages/Teacherview.py @@ -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') + diff --git a/HumanManages/__pycache__/MainPages.cpython-310.pyc b/HumanManages/__pycache__/MainPages.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f402ed3383247c01267509f9da214889f7ac0206 GIT binary patch literal 11742 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 BusZ+% literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/MainPages.cpython-39.pyc b/HumanManages/__pycache__/MainPages.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f3aa77811903e9e66309fbfbff41fcb21d7b7503 GIT binary patch literal 10159 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 Q0y^4`ng3e;ME-aF7Xxt6b8QT)8l{h=X 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 literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/Managerview.cpython-39.pyc b/HumanManages/__pycache__/Managerview.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d37b1a9f3b697a94ec6b331704d0df929ebb7073 GIT binary patch literal 16788 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 literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/Studentview.cpython-310.pyc b/HumanManages/__pycache__/Studentview.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0ae70cf0947f676c0c2b93f0d2612dd22cc9fd94 GIT binary patch literal 9750 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 literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/Studentview.cpython-312.pyc b/HumanManages/__pycache__/Studentview.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fb801ce949351e228da32d0b972ef749aa62ffb2 GIT binary patch literal 17525 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 literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/Studentview.cpython-39.pyc b/HumanManages/__pycache__/Studentview.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6ba04599260862d3505234cefa3cd1fb98277a34 GIT binary patch literal 3805 zcmb_f&2JmW6`$EJE-6Z)CCjcGAZ3HJF584Hl1mymX=2xnTR5r%3vEESAXc1_M0vTC zXJ;dcpbn`VOKPpyO%Wpr3RDanBmx?%sEfF+oTh(44?WJcCMlhK@}-ydy;)LXWEm-t zF12so?9RM>U%&T8UVndz!1ebZyi+(V58W2Vp^+_QfX@SDr@ab4Q zH!5bqqR5**t=I)y^VFvWNAF7%5 z%)D~Xa#4acJcFj8jf4(R(FbD*C%u;m6YYT^U}6vKwf@Eb(fVvvFfOv=^VweaFdmi! z>Yy#_A((0^*;VzaVVHJwO;M4C*}l5IfXf~Q!U?8a!C($En0b*FOlC0~(#FzhkWi@~ z2Q!iUk$`xOmJHa@y^!AtJc>fI>!eN_1_fFtMWasE%m%@nJxkW<=(?qBEl9b=VmTX`3JejrJ4 zy$;b=fRUsQxI>efwQ8-=u9i7_G&&0JTYq?e>$5l8?`}3fef#cbjn?ZM?Hi5u)l2Q0 zo9)ft-@EgA{I_mI=;G$;o2_e0TaC-D4{mKAga^u*iNuW0AzLlU=cKYGs)1C-#AMD; z_GxdN`^uW}O6PM_jKKQ6Mq(7vrJ;5>t&Q{;xa+DMxYR~p1`r(ZWvW=LR9WOBpDq?J zM4lhN(M}U6wC6*J5P{hv`hlQRbl$i$W$PzjHg8^uxS0QY2q{rY6b+y)+lPb1OzJipK7w@Q2$?Y0A=Kl-dx+HB;ZdE{t>xde-@DjazS`bg7l*-2fw&W2 z1(GwwH(^kHJtZn<+(#^IZTzkM(XX3VSKA-{@jiMg7NFcI?lFi^2nevksp_msl&XGI z2|_Ju`wYr+N>G2fK#DR1q1-|2=X}~V<>8(?EA{$b2DDR1U4f@ zwsC-l;JoJf5f5`|fmjk>Lt^3zcT8}OWnLvEa7E2Ju{tWzQB)c7yt0n}bnKKaqspFv z1e3}s2O$?S=fuE$0_6>KEGfnxEI7J%g~~1mjL#_=?oB<+Nwgru{3G-rwct0Te;JyA z(Sby?;C7+or2kVJ=}F1Y;a_B7e~^6R8*C8poLMy&Kmy>>tsCqBqOf-_tV{s%9mMAfS%&V2HEfA2 zQIIyw4uUkZBWcVW4_cR3w%@vO@6Php#%A-%wdSoq zwKuOcKYpkAyN}=tW3P@iFTK&car@q#%gx)L#9QE1>*MRq>lg3cS;;Ds2Tajat-mra z=Omz#=VAO@zF{-NC}H-8$ACyOP1lTNI4Fu|q`BPb$lz6|RZzP!3v`)6T&(y^ap6(u z19rC$K&Mtz{M(M?#FNjgQ|0oYRK)_L?aMjJsD{{Mv54@wawuU|o#BCgt?ZIt4LQ^g z>J{8F(;XBmQ*uZ9xXkR}3A##9oG5}xKSAxgEn`3EjH58gsLkp@{H5?mA?WWa5-4(^1MvkvRC zH_Ud9U*N8q;eAKE1bf9PBqxF7EM-n|DP9I1O0Iy;DMs(YYTjm8xoj3Dk0B9E8#*7 zb(nmGhant($E$NH)x#T=aow?mc8OaIFZd9mr!i@Q0RELy7BbK_BN0NEL~!ZmT_&oN_5c@ke9_ literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/Teacherview.cpython-310.pyc b/HumanManages/__pycache__/Teacherview.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ec3b1b02ef6bb6ed0a265fd823bbb6e078dc990e GIT binary patch literal 14311 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 literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/Teacherview.cpython-312.pyc b/HumanManages/__pycache__/Teacherview.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..267f73de307dec533006ebfab2e7a45c6dac940c GIT binary patch literal 28848 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 literal 0 HcmV?d00001 diff --git a/HumanManages/__pycache__/Teacherview.cpython-39.pyc b/HumanManages/__pycache__/Teacherview.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1902cf949cc1e48495b3f72965a969daf5a198c2 GIT binary patch literal 7991 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 Eze6!Ub^rhX literal 0 HcmV?d00001 diff --git a/HumanManages/demo1.py b/HumanManages/demo1.py new file mode 100644 index 0000000..5a424fd --- /dev/null +++ b/HumanManages/demo1.py @@ -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.重复2,3步直到作业做完\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() \ No newline at end of file diff --git a/HumanManages/main.py b/HumanManages/main.py new file mode 100644 index 0000000..c244cdc --- /dev/null +++ b/HumanManages/main.py @@ -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() \ No newline at end of file diff --git a/HumanManages/mytxtfile.txt b/HumanManages/mytxtfile.txt new file mode 100644 index 0000000..82f88ad --- /dev/null +++ b/HumanManages/mytxtfile.txt @@ -0,0 +1,4 @@ +1.课好多 +2.作业好多 +3.不想上学 +4.好多作业呀 diff --git a/J123 b/J123 new file mode 160000 index 0000000..4d94f46 --- /dev/null +++ b/J123 @@ -0,0 +1 @@ +Subproject commit 4d94f463fc3cd8bd89bdbee7eb7181e3e5a56fa9 diff --git a/first b/first new file mode 100644 index 0000000..a569435 --- /dev/null +++ b/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()