跟大家分享一个学生信息管理系统,数据库用的是mysql,数据库信息,需要自己添加,下面是数据库中建立的表和表中的列,可视化界面采用的tkinter。
importpymysql
fromtkinter import*
fromtkinter importttk
#连接数据库host为本地IP,user是创建数据库时添加的用户,db是要连接的数据库
connect_db = pymysql.connect(host='127.0.0.1', user='root', passwd='123', port=3306, db='laolin')
#执行connect_db这个操作
db_denglu = connect_db.cursor()
#创建登录界面
classLoginPage(object):
def __init__(self):
#创建一个窗口
self.window = Tk()
#定义窗口标题名称
self.window.title('登录界面')
#定义窗口大小
self.window.geometry('500x300+500+600')
#定义4个可以工作栏,用于存放我们下面的功能
frame1 = Frame(self.window)
frame2 = Frame(self.window)
frame3 = Frame(self.window)
frame4 = Frame(self.window)
#执行定义
frame1.pack()
frame2.pack()
frame3.pack()
frame4.pack()
label11 = Label(frame1, text='学生管理系统',font=('Arial',20),width=15,height=5)
label1 = Label(frame2,text='用户名')
self.name = StringVar()
entryName = Entry(frame2, textvariable=self.name)
label2 = Label(frame3, text='密码:')
self.passwd = StringVar()
entryPasswd = Entry(frame3, textvariable=self.passwd)
confirm = Button(frame4, text='确认', command=self.confirmButton)
zhuce = Button(frame4, text='注册', command=self.zhuceButton)
label11.grid(row=1,column=1)
label1.grid(row=2, column=1)
entryName.grid(row=2, column=2)
label2.grid(row=3, column=1)
entryPasswd.grid(row=3, column=2)
confirm.grid(row=4, column=1)
zhuce.grid(row=4, column=3)
self.window.mainloop()
defconfirmButton(self):
user_name = self.name.get()
user_passwd = self.passwd.get()
sql = "select name from denglu where name = '%s'" % user_name
username_detect = db_denglu.execute(sql)
ifusername_detect > 0:
sql = "select passwd from denglu where passwd = '%s' and name = '%s'" % (user_passwd, user_name)
userpasswd_detect = db_denglu.execute(sql)
ifuserpasswd_detect != 0:
# print("输入正确,请稍后")
self.window.destroy()
# MainMenu()
app = MainMenu()
app.mainloop()
defzhuceButton(self):
user_name = self.name.get()
user_passwd = self.passwd.get()
sql = "select name from denglu where name = '%s'" % user_name
username_detect = db_denglu.execute(sql)
ifusername_detect == 0:
# print('用户名已存在!')
# else:
sql = "insert into denglu (name,passwd) values('%s','%s')" % (user_name, user_passwd)
db_denglu.execute(sql)
connect_db.commit()
# if userpasswd_detect != 0:
# print("注册成功,请稍后")
# else:
# print('注册失败')
classMainMenu(Tk):
def __init__(self):
super().__init__()
# self.window = Tk()
self.title('学生信息管理系统')
self.canvas = Canvas(self, bg='orange', width=335, height=400)
self.canvas.pack()
# create a menu bar
menubar = Menu(self)
self.config(menu=menubar) # display the menu bar
# create a pull-down menu,and add it to menubar
sysgl = Menu(menubar, tearoff=0)
menubar.add_cascade(label='系统管理', menu=sysgl)
stugl = Menu(menubar, tearoff=0)
menubar.add_cascade(label='学生管理', menu=stugl)
stugl.add_command(label='信息添加', command=self.info_add)
stugl.add_command(label='信息查询',command=self.info_detect)
kechenggl = Menu(menubar, tearoff=0)
menubar.add_cascade(label='课程管理', menu=kechenggl)
chengjigl = Menu(menubar, tearoff=0)
menubar.add_cascade(label='成绩管理', menu=chengjigl)
chengjigl.add_command(label='成绩查询',command=self.course_detect)
chengjigl.add_command(label='成绩维护')
chengjigl.add_command(label='成绩添加',command=self.grade_add)
guanyu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='关于', menu=guanyu)
tuichu = Menu(menubar, tearoff=0)
menubar.add_cascade(label='退出', menu=tuichu, command=self.quit)
tuichu.add_command(label='确认退出', command=self.quit)
# self.window.mainloop()
definfo_add(self):
# self.window.destroy()
inputDialog = Info_add()
self.wait_window(inputDialog) # 这一句很重要!!!
definfo_detect(self):
inputDialog = Info_detect()
self.wait_window(inputDialog)
defcourse_detect(self):
inputDialog = Course_detect()
self.wait_window(inputDialog)
defgrade_add(self):
inputDialog = Grade_add()
self.wait_window(inputDialog)
classInfo_add(Toplevel):
def __init__(self):
super().__init__()
print(123)
# self.window = Tk()
self.title('添加学生信息')
self.studentid = StringVar()
self.studentname = StringVar()
self.zhuanye = StringVar()
self.age = IntVar()
frame1 = Frame(self)
frame2 = Frame(self)
frame3 = Frame(self)
frame1.pack()
frame2.pack()
frame3.pack()
label1 = Label(frame1, text='学号:')
entryId = Entry(frame1, textvariable=self.studentid)
label2 = Label(frame1, text='姓名:')
entryName = Entry(frame1, textvariable=self.studentname)
label3 = Label(frame2, text='专业:')
entryZhuanye = Entry(frame2, textvariable=self.zhuanye)
label4 = Label(frame2, text='年龄:')
entryAge = Entry(frame2, textvariable=self.age)
add_confirm = Button(frame3, text='确认', command=self.add_confirmButton)
add_quxiao = Button(frame3, text='取消')
label1.grid(row=1, column=1)
entryId.grid(row=1, column=2)
label2.grid(row=1, column=3)
entryName.grid(row=1, column=4)
label3.grid(row=2, column=1)
entryZhuanye.grid(row=2, column=2)
label4.grid(row=2, column=3)
entryAge.grid(row=2, column=4)
add_confirm.grid(row=3, column=1)
add_quxiao.grid(row=3, column=2)
# self.window.mainloop()
defadd_confirmButton(self):
stu_id = self.studentid.get()
print(stu_id, "-------")
stu_na = self.studentname.get()
stu_zy = self.zhuanye.get()
stu_age = self.age.get()
sql = "insert into stu_info values('%s','%s','%s','%d')" % (stu_id, stu_na, stu_zy, stu_age)
db_denglu.execute(sql)
connect_db.commit()
classInfo_detect(Toplevel):
def __init__(self):
super().__init__()
#self.window = Tk()
self.title('查询学生信息')
self.stu_id = StringVar()
self.studentname = StringVar()
frame1 = Frame(self)
frame2 = Frame(self)
self.frame_center = Frame(self)
frame1.pack()
frame2.pack()
self.frame_center.pack()
label1 = Label(frame1, text='学号:')
entryId = Entry(frame1, textvariable=self.stu_id)
detect_confirm = Button(frame1, text='查询', command=self.detect_confirmButton)
back_confirm = Button(frame1, text='返回', command=self.get_data)
# 定义中心列表区域
self.tree = ttk.Treeview(self.frame_center, show="headings", height=18, columns=("a", "b", "c", "d", "e"))
self.vbar = ttk.Scrollbar(self.frame_center, orient=VERTICAL, command=self.tree.yview)
# 定义树形结构与滚动条
self.tree.configure(yscrollcommand=self.vbar.set)
# 表格的标题
self.tree.column("a", width=130, anchor="center")
self.tree.column("b", width=130, anchor="center")
self.tree.column("c", width=200, anchor="center")
self.tree.column("d", width=80, anchor="center")
self.tree.column("e", width=100, anchor="center")
self.tree.heading("a", text="学号")
self.tree.heading("b", text="姓名")
self.tree.heading("c", text="专业")
self.tree.heading("d", text="年龄")
self.tree.heading("e", text="备注")
# 调用方法获取表格内容插入
self.tree.grid(row=0, column=0, sticky=NSEW)
self.vbar.grid(row=0, column=1, sticky=NS)
label1.grid(row=1, column=1)
entryId.grid(row=1, column=2)
detect_confirm.grid(row=1, column=3)
back_confirm.grid(row=1, column=4)
self.get_data()
defget_data(self):
x = self.tree.get_children()
foritem inx:
self.tree.delete(item)
sql="select * from stu_info;"
db_denglu.execute(sql)
result=db_denglu.fetchall()
fori inrange(len(result)):
self.tree.insert("", "end", values=(result[i][0],result[i][1],result[i][2],result[i][3]))
defdetect_confirmButton(self):
stu_id = self.stu_id.get()
ss="stu_id = %s" % stu_id
x=self.tree.get_children()
foritem inx:
self.tree.delete(item)
ifss != "":
sql = "select * from stu_info where %s;" % ss
db_denglu.execute(sql)
result = db_denglu.fetchall()
self.tree.insert("","end",values=(result[0][0],result[0][1],result[0][2],result[0][3]))
connect_db.commit()
classCourse_detect(Toplevel):
def __init__(self):
super().__init__()
#self.window = Tk()
self.title('学生成绩查询')
self.studentid = StringVar()
self.course_name = StringVar()
frame1 = Frame(self)
frame2 = Frame(self)
self.frame_center = Frame(self)
frame1.pack()
frame2.pack()
self.frame_center.pack()
label1 = Label(frame1, text='学号:')
entryId = Entry(frame1, textvariable=self.studentid)
label2 = Label(frame1, text='课程编号:')
entryCourse = Entry(frame1, textvariable=self.course_name)
detect_confirm = Button(frame1, text='查询', command=self.detect_confirmButton)
# 定义中心列表区域
self.tree = ttk.Treeview(self.frame_center, show="headings", height=18, columns=("a", "b", "c", "d", "e"))
self.vbar = ttk.Scrollbar(self.frame_center, orient=VERTICAL, command=self.tree.yview)
# 定义树形结构与滚动条
self.tree.configure(yscrollcommand=self.vbar.set)
# 表格的标题
self.tree.column("a", width=130, anchor="center")
self.tree.column("b", width=130, anchor="center")
self.tree.column("c", width=200, anchor="center")
self.tree.column("d", width=80, anchor="center")
self.tree.column("e", width=100, anchor="center")
self.tree.heading("a", text="学号")
self.tree.heading("b", text="姓名")
self.tree.heading("c", text="课程")
self.tree.heading("d", text="成绩")
self.tree.heading("e", text="备注")
# 调用方法获取表格内容插入
self.tree.grid(row=0, column=0, sticky=NSEW)
self.vbar.grid(row=0, column=1, sticky=NS)
label1.grid(row=1, column=1)
entryId.grid(row=1, column=2)
label2.grid(row=1, column=3)
entryCourse.grid(row=1, column=4)
detect_confirm.grid(row=1, column=5)
defdetect_confirmButton(self):
studentid = self.studentid.get()
courseid = self.course_name.get()
courseid = int(courseid)
x=self.tree.get_children()
foritem inx:
self.tree.delete(item)
ifstudentid != "" andcourseid !="":
sql="select * from course_grade where studentid=%s and courseid=%d" %(studentid,courseid)
db_denglu.execute(sql)
result = db_denglu.fetchall()
self.tree.insert("","end",values=(result[0][0],result[0][4],result[0][1],result[0][2]))
connect_db.commit()
classGrade_add(Toplevel):
def __init__(self):
super().__init__()
# self.window = Tk()
self.title('添加学生成绩')
self.studentid = StringVar()
self.course = StringVar()
self.grade = IntVar()
self.courseid = IntVar()
self.stu_name = StringVar()
frame1 = Frame(self)
frame2 = Frame(self)
frame3 = Frame(self)
frame1.pack()
frame2.pack()
frame3.pack()
label1 = Label(frame1, text='学号:')
entryId = Entry(frame1, textvariable=self.studentid)
label2 = Label(frame1, text='姓名:')
entryName = Entry(frame1, textvariable=self.stu_name)
label3 = Label(frame2, text='课程:')
entryKecheng = Entry(frame2, textvariable=self.course)
label4 = Label(frame2, text='课程编号:')
entryCourseid = Entry(frame2, textvariable=self.courseid)
label5 = Label(frame2, text='成绩:')
entryGrade = Entry(frame2, textvariable=self.grade)
add_confirm = Button(frame3, text='确认', command=self.add_confirmButton)
add_quxiao = Button(frame3, text='取消')
label1.grid(row=1, column=1)
entryId.grid(row=1, column=2)
label2.grid(row=1, column=3)
entryName.grid(row=1, column=4)
label3.grid(row=2, column=1)
entryKecheng.grid(row=2, column=2)
label4.grid(row=2, column=3)
entryCourseid.grid(row=2, column=4)
label5.grid(row=2, column=5)
entryGrade.grid(row=2, column=6)
add_confirm.grid(row=3, column=1)
add_quxiao.grid(row=3, column=2)
# self.window.mainloop()
defadd_confirmButton(self):
stu_id = self.studentid.get()
stu_na = self.stu_name.get()
stu_kc = self.course.get()
stu_kcid = self.courseid.get()
stu_kcid = int(stu_kcid)
stu_grade = self.grade.get()
stu_grade = int(stu_grade)
sql = "insert into course_grade values('%s','%s','%d','%d','%s')" % (stu_id, stu_kc, stu_grade, stu_kcid,stu_na)
db_denglu.execute(sql)
connect_db.commit()
if__name__ == '__main__':
LoginPage()