在做python大作業自己設計學生信息管理的增刪改查操作遇到的問題


數據庫的創建

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后的語句無法運行?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM