数据库的创建
conn = sqlite3.connect('student1.db')
"""
#在该数据库下创建学生信息表
conn.execute ('''CREATE TABLE StudentTable(
ID INTEGER PRIMARY KEY AUTOINCREMENT,
StuId INTEGER NOT NULL,
NAME TEXT NOT NULL,
CLASS INT NOT NULL,
AGE INTEGER Not NULL);''')
print("Table created successfully");
基于界面的设计有增删改查四个选项
1 from tkinter import * 2 from tkinter import messagebox 3 from tkinter import filedialog 4 from PIL import Image,ImageTk 5 import tkinter 6 import sqlite3 7 #打开本地数据库用于存储用户信息 8 conn = sqlite3.connect('student1.db') 9 #主界面 10 root=Tk() 11 root.title("学生信息管理系统") 12 root.config(width=600) 13 root.config(height=600) 14 15 #添加窗口背景图片 16 canvas=tkinter.Canvas(root, 17 width=600, #指定Canvas组件的宽度 18 height=600, #指定Canvas组件的高度 19 bg='white' #指定Canvas组件的背景色 20 #im=tkinter.PhotoImage(file='img.gif') 使用PhotoImage打开图片 21 ) 22 image=Image.open("F:\图片\python图片素材\爱心.jpg") 23 im=ImageTk.PhotoImage(image) 24 25 canvas.create_image(400,200,image=im) #使用creat_image将图片添加到Canvas 26 canvas.pack() 27 #创建*菜单及其下拉菜单 28 menubar=Menu(root) 29 filemenu=Menu(menubar,tearoff=False) 30 filemenu.add_command(label="增加",command=insert_stu) 31 filemenu.add_command(label="删除",command=delete_stu)#command接删除函数/下面接修改函数 32 filemenu.add_command(label="修改",command=change_stu) 33 filemenu.add_command(label="查询",command=sel_stu) 34 35 filemenu.add_separator() 36 filemenu.add_command(label="退出",command=root.destroy) 37 menubar.add_cascade(label="菜单",menu=filemenu) 38 39 #显示菜单 40 root.config(menu=menubar) 41 42 buttoninsert_stu=Button(root,text="录入学生信息",font=("微软雅黑 -20"),command=insert_stu) 43 #buttoninsert_stu.grid(row=2,column=0)由下面的代码将该代码覆盖,显示的是在界面上的位置 44 buttoninsert_stu.place(x=50,y=50,height=40,width=200) 45 46 buttondelete_stu=Button(root,text="删除学生信息",font=("微软雅黑 -20"),command=delete_stu) 47 #buttondelete_stu.grid(row=2,column=1) 48 buttondelete_stu.place(x=50,y=150,height=40,width=200) 49 50 buttonchange_stu=Button(root,text="修改学生信息",font=("微软雅黑 -20"),command=change_stu) 51 #buttonchange_stu.grid(row=4,column=0) 52 buttonchange_stu.place(x=50,y=250,height=40,width=200) 53 54 buttonsel_stu=Button(root,text="查询学生信息",font=("微软雅黑 -20"),command=sel_stu) 55 #buttonsel_stu.grid(row=4,column=1) 56 buttonsel_stu.place(x=50,y=350,height=40,width=200)
进入录入学生信息
代码:
1 #增加学生信息 2 def insert_stu(): #录入学生信息 3 root1=Tk() 4 root1.title("录入学生信息") 5 root1.config(width=600) 6 root1.config(height=600) 7 8 9 10 11 12 13 #创建关联字符变量 14 varName=StringVar(root1,value='') 15 varId=StringVar(root1,value='') 16 varClass=StringVar(root1,value='') 17 varAge=StringVar(root1,value='') 18 varNum=StringVar(root1,value='') 19 20 label=Label(root1,text="编号",font=("微软雅黑 -20")) 21 label.place(x=30,y=10,height=40,width=80) 22 23 #创建标签组件 24 label=Label(root1,text="姓名:",font=("微软雅黑 -20")) 25 #label.grid(row=0,sticky=E) 26 label.place(x=30,y=60,height=40,width=80) 27 28 label=Label(root1,text="学号:",font=("微软雅黑 -20")) 29 #label.grid(row=1,sticky=E) 30 label.place(x=30,y=110,height=40,width=80) 31 32 33 label=Label(root1,text="班级:",font=("微软雅黑 -20")) 34 #label.grid(row=2,sticky=E) 35 label.place(x=30,y=160,height=40,width=80) 36 37 38 label=Label(root1,text="年龄:",font=("微软雅黑 -20")) 39 #label.grid(row=3,sticky=E) 40 label.place(x=30,y=210,height=40,width=80) 41 42 #创建文本框组件,同时设置关联的变量 43 # 姓名entryName 44 # 学号entryId 45 # 班级entryClass 46 # 年龄entryAge 47 entryNum=Entry((root1),textvariable=varNum) 48 entryNum.place(x=120,y=10,height=40,width=200) 49 50 entryName=Entry((root1),textvariable=varName) 51 #entryName.grid(row=0,column=1,sticky=W) 52 entryName.place(x=120,y=60,height=40,width=200) 53 54 entryId=Entry((root1),textvariable=varId) 55 #entryId.grid(row=1,column=1,sticky=W) 56 entryId.place(x=120,y=110,height=40,width=200) 57 58 entryClass=Entry((root1),textvariable=varClass) 59 #entryClass.grid(row=2,column=1,sticky=W) 60 entryClass.place(x=120,y=160,height=40,width=200) 61 62 entryAge=Entry((root1),textvariable=varAge) 63 #entryAge.grid(row=3,column=1,sticky=W) 64 entryAge.place(x=120,y=210,height=40,width=200) 65 66 67 def buttonOK(): 68 conn = sqlite3.connect('student1.db') 69 stu_num=eval(entryNum.get()) 70 stu_id = eval(entryId.get())#学号输入 71 stu_name =str(entryName.get())#姓名录入 72 stu_class =eval(entryClass.get())#班级录入 73 stu_age=eval(entryAge.get())#年龄录入 74 75 cursor = conn.execute("SELECT * from StudentTable where StuId = '%s';"%stu_id) 76 conn.commit() 77 for row in cursor: 78 if stu_id == row[1]: 79 messagebox.showerror('警告',message='学号重复,请重新输入') 80 break 81 else: 82 try: 83 84 sql1 = "INSERT INTO StudentTable(ID,StuId,NAME,CLASS,AGE)" 85 sql1+="VALUES(%d,%d,'%s',%d,%d)"%(stu_num,stu_id,stu_name,stu_class,stu_age) 86 conn.execute(sql1) 87 conn.commit() 88 messagebox.showinfo(title='恭喜',message='录入成功!') 89 except: 90 messagebox.showerror('警告',message='未录入成功') 91 92 93 94 95 96 buttonbuttonOK=Button(root1,text="录入学生信息",font=("微软雅黑 -20"),command=buttonOK) 97 buttonbuttonOK.place(x=150,y=300,height=40,width=200) 98 def cancel(): 99 varName.set('') 100 varId.set('') 101 varClass.set('') 102 varAge.set('') 103 varNum.set('') 104 105 #取消键 106 buttonCancel=Button(root1,text="取消",font=("微软雅黑 -20"),command=cancel) 107 buttonCancel.place(x=150,y=350,height=40,width=200) 108 109 #退出键 110 buttondel=Button(root1,text="退出",font=("微软雅黑 -20"),command=root1.destroy) 111 buttondel.place(x=150,y=400,height=40,width=200) 112 root1.mainloop() 113 114 115 116 #录入完成
在该部分在进行学生信息录入的时候运用if ...else....语句但在else后面的语句无法运行,在网上查资料也没找到。该部分代码还存在问题,有待将else后的语句为什么不能运行的问题弄清楚。
查询的操作
该部分代码如下:
1 #查询学生信息 2 def sel_stu(): 3 root3=Tk() 4 root3.title("查询学生信息") 5 root3.config(width=600) 6 root3.config(height=600) 7 8 9 10 11 #创建关联变量 12 sId=StringVar(root3,value='') 13 14 #创建文本组件框\标签组件 15 label=Label(root3,text="学号",font=("微软雅黑 -20")) 16 label.place(x=30,y=10,height=40,width=80) 17 18 selId=Entry((root3),textvariable=sId) 19 selId.place(x=120,y=10,height=40,width=200) 20 21 22 23 def select(): 24 25 #创建关联字符变量 26 varName=StringVar(root3,value='') 27 varId=StringVar(root3,value='') 28 varClass=StringVar(root3,value='') 29 varAge=StringVar(root3,value='') 30 31 32 conn = sqlite3.connect('student1.db') 33 stu_id = eval(selId.get())#学号输入 34 cursor = conn.execute("SELECT * from StudentTable where StuId = '%d';"%stu_id) 35 conn.commit() 36 for row in cursor: 37 if stu_id == row[1]: 38 stu_name=row[2] 39 stu_class=row[3] 40 stu_age=row[4] 41 42 43 44 45 #创建标签组件 46 label=Label(root3,text="姓名:",font=("微软雅黑 -20")) 47 #label.grid(row=0,sticky=E) 48 label.place(x=30,y=110,height=40,width=80) 49 50 label=Label(root3,text="学号:",font=("微软雅黑 -20")) 51 #label.grid(row=1,sticky=E) 52 label.place(x=30,y=160,height=40,width=80) 53 54 55 label=Label(root3,text="班级:",font=("微软雅黑 -20")) 56 #label.grid(row=2,sticky=E) 57 label.place(x=30,y=210,height=40,width=80) 58 59 60 label=Label(root3,text="年龄:",font=("微软雅黑 -20")) 61 #label.grid(row=3,sticky=E) 62 label.place(x=30,y=260,height=40,width=80) 63 64 #创建文本框组件,同时设置关联的变量 65 # 姓名entryName 66 # 学号entryId 67 # 班级entryClass 68 # 年龄entryAge 69 70 entryName=Entry((root3),textvariable=varName) 71 #entryName.grid(row=0,column=1,sticky=W) 72 entryName.place(x=120,y=110,height=40,width=200) 73 74 entryId=Entry((root3),textvariable=varId) 75 #entryId.grid(row=1,column=1,sticky=W) 76 entryId.place(x=120,y=160,height=40,width=200) 77 78 entryClass=Entry((root3),textvariable=varClass) 79 #entryClass.grid(row=2,column=1,sticky=W) 80 entryClass.place(x=120,y=210,height=40,width=200) 81 82 entryAge=Entry((root3),textvariable=varAge) 83 #entryAge.grid(row=3,column=1,sticky=W) 84 entryAge.place(x=120,y=260,height=40,width=200) 85 86 varName.set(stu_name) 87 varId.set(stu_id) 88 varClass.set(stu_class) 89 varAge.set(stu_age) 90 91 #查询键 92 buttonselect=Button(root3,text="查询",font=("微软雅黑 -20"),command=select) 93 buttonselect.place(x=200,y=60,height=40,width=100) 94 95 #取消键 96 def cancel(): 97 sId.set('') 98 99 buttoncancel=Button(root3,text="取消",font="微软雅黑 -20",command=cancel) 100 buttoncancel.place(x=50,y=60,height=40,width=100) 101 102 #退出键 103 buttondel=Button(root3,text="退出",font="微软雅黑 -20",command=root3.destroy) 104 buttondel.place(x=350,y=60,height=40,width=100) 105 root3.mainloop() 106 107 108 #查询完成
删除的操作:
1 def delete_stu(): 2 root2=Tk() 3 root2.title("删除学生信息") 4 root2.config(width=600) 5 root2.config(height=600) 6 7 8 #添加窗口背景图片 9 10 11 12 #创建标签 13 label=Label(root2,text="学号:",font=("微软雅黑 -20")) 14 #label.grid(row=1,sticky=E) 15 label.place(x=30,y=20,height=40,width=80) 16 17 entryId=Entry(root2) 18 entryId.place(x=120,y=20,height=40,width=200) 19 20 def delete(): 21 22 conn = sqlite3.connect('student1.db') 23 stu_id = eval(entryId.get())#学号输入 24 cursor = conn.execute("SELECT * from StudentTable where StuId = '%s';"%stu_id) 25 conn.commit() 26 27 for row in cursor: 28 if stu_id == row[0]: 29 sql1 = "DELETE INTO StudentTable(ID,StuId,NAME,CLASS,AGE)" 30 sql1 += " VALUES(%d,%d,'%s',%d,%d);"%('','','','','') 31 conn.execute(sql1) 32 conn.commit() 33 34 35 36 37 38 #删除键 39 buttondelete=Button(root2,text="删除",font=("微软雅黑 -20"),command=delete) 40 buttondelete.place(x=150,y=160,height=40,width=200) 41 42 #退出键 43 buttondel=Button(root2,text="退出",font=("微软雅黑 -20"),command=root2.destroy) 44 buttondel.place(x=150,y=210,height=40,width=200) 45 46 47 root2.mainloop() 48 #删除完成
修改的操作:
1 #修改学生信息 2 def change_stu(): 3 root4=Tk() 4 root4.title("修改学生信息") 5 root4.config(width=600) 6 root4.config(height=600) 7 8 #创建关联变量 9 sId=StringVar(root4,value='') 10 11 #创建文本组件框\标签组件 12 label=Label(root4,text="学号",font=("微软雅黑 -20")) 13 label.place(x=30,y=10,height=40,width=80) 14 15 selId=Entry((root4),textvariable=sId) 16 selId.place(x=120,y=10,height=40,width=200) 17 18 19 20 def select(): 21 22 #创建关联字符变量 23 varName=StringVar(root4,value='') 24 varId=StringVar(root4,value='') 25 varClass=StringVar(root4,value='') 26 varAge=StringVar(root4,value='') 27 28 29 conn = sqlite3.connect('student1.db') 30 stu_id = eval(selId.get())#学号输入 31 cursor = conn.execute("SELECT * from StudentTable where StuId = '%s';"%stu_id) 32 conn.commit() 33 for row in cursor: 34 if stu_id == row[1]: 35 36 stu_name=row[2] 37 stu_class=row[3] 38 stu_age=row[4] 39 40 41 42 43 #创建标签组件 44 label=Label(root4,text="姓名:",font=("微软雅黑 -20")) 45 #label.grid(row=0,sticky=E) 46 label.place(x=30,y=110,height=40,width=80) 47 48 label=Label(root4,text="学号:",font=("微软雅黑 -20")) 49 #label.grid(row=1,sticky=E) 50 label.place(x=30,y=160,height=40,width=80) 51 52 53 label=Label(root4,text="班级:",font=("微软雅黑 -20")) 54 #label.grid(row=2,sticky=E) 55 label.place(x=30,y=210,height=40,width=80) 56 57 58 label=Label(root4,text="年龄:",font=("微软雅黑 -20")) 59 #label.grid(row=3,sticky=E) 60 label.place(x=30,y=260,height=40,width=80) 61 62 #创建文本框组件,同时设置关联的变量 63 # 姓名entryName 64 # 学号entryId 65 # 班级entryClass 66 # 年龄entryAge 67 68 entryName=Entry((root4),textvariable=varName) 69 #entryName.grid(row=0,column=1,sticky=W) 70 entryName.place(x=120,y=110,height=40,width=200) 71 72 entryId=Entry((root4),textvariable=varId) 73 #entryId.grid(row=1,column=1,sticky=W) 74 entryId.place(x=120,y=160,height=40,width=200) 75 76 entryClass=Entry((root4),textvariable=varClass) 77 #entryClass.grid(row=2,column=1,sticky=W) 78 entryClass.place(x=120,y=210,height=40,width=200) 79 80 entryAge=Entry((root4),textvariable=varAge) 81 #entryAge.grid(row=3,column=1,sticky=W) 82 entryAge.place(x=120,y=260,height=40,width=200) 83 84 varName.set(stu_name) 85 varId.set(stu_id) 86 varClass.set(stu_class) 87 varAge.set(stu_age) 88 89 def save(): 90 91 conn = sqlite3.connect('student1.db') 92 93 stu_id=eval(entryId.get()) 94 stu_name = entryName.get()#姓名录入 95 stu_class = entryClass.get()#班级录入 96 stu_age=entryAge.get()#年龄录入 97 98 sql1 = "UPDATE INTO StudentTable(StuId,NAME,CLASS,AGE)" 99 sql1 += "SET NAME=%s CLASS=%d AGE=%d WHERE StuId=%d" 100 arge=(stu_name,stu_class,stu_age,selId) 101 update(sql1,args) 102 conn.commit() 103 messagebox.showinfo(title='恭喜',message='录入成功!') 104 105 106 107 def cancel(): 108 sId.set('') 109 110 #取消键 111 buttoncancel=Button(root4,text="取消",font="微软雅黑 -20",command=cancel) 112 buttoncancel.place(x=20,y=60,height=40,width=60) 113 114 #查询键 115 buttonselect=Button(root4,text="查询",font=("微软雅黑 -20"),command=select) 116 buttonselect.place(x=100,y=60,height=40,width=60) 117 118 119 #保存键 120 buttonsave=Button(root4,text="保存",font="微软雅黑 -20",command=save) 121 buttonsave.place(x=180,y=60,height=40,width=60) 122 123 #退出键 124 buttondel=Button(root4,text="退出",font="微软雅黑 -20",command=root4.destroy) 125 buttondel.place(x=260,y=60,height=40,width=60) 126 127 128 129 root4.mainloop()
在这些操作当中有些问题对于我这个学数学的外行来说还有待解决。
现在就是想搞懂if...else...语句当中
为什么else后的语句无法运行?