在做python大作业自己设计学生信息管理的增删改查操作遇到的问题

时间:2024-03-08 08:19:29

数据库的创建

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后的语句无法运行?