├── README.md ├── project1_backend.py └── project1_frontend.py /README.md: -------------------------------------------------------------------------------- 1 | # students-database-management-system 2 | This project is about GUI Student Database Management system with frontend using Tkinter and backend using MYSQL in Python. 3 | user can add newrecords,display existingrecords,delete records,search forexistingrecords,update existingrecords,clear entrys,exit. 4 | ![myproj](https://user-images.githubusercontent.com/25838179/58758549-62946300-853a-11e9-9547-f9562ffad9d1.JPG) 5 | ![project1-2](https://user-images.githubusercontent.com/25838179/58758618-5bba2000-853b-11e9-918c-2644bde80d5d.JPG) 6 | -------------------------------------------------------------------------------- /project1_backend.py: -------------------------------------------------------------------------------- 1 | import mysql.connector 2 | #import project1_frontend 3 | 4 | def studentData(): 5 | con = mysql.connector.connect(host="localhost",user="root",passwd="#password",database="project") 6 | cur=con.cursor() 7 | 8 | cur.execute("CREATE TABLE IF NOT EXISTS srikanth(id integer primary key AUTO_INCREMENT,StdID text,Firstname text,Surname text,DoB text,Age text,Gender text,Address text,Mobile text)") 9 | con.commit() 10 | con.close() 11 | def addStdRec(StdID,Firstname,Surname,DoB,Age,Gender,Address,Mobile): 12 | con=con = mysql.connector.connect(host="localhost",user="root",passwd="#password") 13 | cur=con.cursor() 14 | cur.execute("use project") 15 | cur.execute("INSERT INTO srikanth VALUES(NULL,%s,%s,%s,%s,%s,%s,%s,%s)",(StdID,Firstname,Surname,DoB,Age,Gender,Address,Mobile)) 16 | con.commit() 17 | con.close() 18 | def viewData(): 19 | con=con = mysql.connector.connect(host="localhost",user="root",passwd="#password") 20 | cur=con.cursor() 21 | cur.execute("use project") 22 | cur.execute("select * from srikanth") 23 | row=cur.fetchall() 24 | con.close() 25 | return row 26 | def deleteRec(id): 27 | con=con = mysql.connector.connect(host="localhost",user="root",passwd="#password") 28 | cur=con.cursor() 29 | cur.execute("use project") 30 | cur.execute("DELETE FROM srikanth WHERE id=%s",(id,)) 31 | con.commit() 32 | con.close() 33 | def searchData(StdID,Firstname,Surname,DoB,Age,Gender,Address,Mobile): 34 | con=con = mysql.connector.connect(host="localhost",user="root",passwd="#password") 35 | cur=con.cursor() 36 | cur.execute("use project") 37 | cur.execute("SELECT * FROM srikanth WHERE StdID=%s or Firstname=%s or Surname=%s or DoB=%s or Age=%s or Gender=%s or Address=%s or Mobile=%s",(StdID,Firstname,Surname,DoB,Age,Gender,Address,Mobile)) 38 | rows=cur.fetchall() 39 | con.close() 40 | return rows 41 | def dataUpdate(id,StdID="",Firstname="",Surname="",DoB="",Age="",Gender="",Address="",Mobile=""): 42 | con = mysql.connector.connect(host="localhost",user="root",passwd="#password") 43 | cur=con.cursor() 44 | cur.execute("use project") 45 | cur.execute("UPDATE srkanth SET StdID=%s,Firstname=%s,Surname=%s,DoB=%s,Age=%s,Gender=%s,Address=%s,Mobile=%s WHERE id=%s",(StdID,Firstname,Surname,DoB,Age,Gender,Address,Mobile)) 46 | con.commit() 47 | con.close() 48 | -------------------------------------------------------------------------------- /project1_frontend.py: -------------------------------------------------------------------------------- 1 | #front end 2 | from tkinter import * 3 | import tkinter.messagebox 4 | import project1_backend as pb 5 | 6 | class Student: 7 | 8 | def __init__(self,root): 9 | self.root=root 10 | self.root.title("student database management system") 11 | self.root.geometry(newGeometry="1328x585+0+0") 12 | self.root.config(bg="red") 13 | #ASSIGN SOME VARIABLE TO STORE OUR ENTRY FILELD VALUES 14 | stdId=StringVar() 15 | Firstname=StringVar() 16 | Surname=StringVar() 17 | DoB=StringVar() 18 | Age=StringVar() 19 | Gender=StringVar() 20 | Adress=StringVar() 21 | Mobile=StringVar() 22 | ###########################FUNCTIONS############# 23 | pb.studentData() 24 | def iExit(): 25 | iExit=tkinter.messagebox.askyesno("srikanth's student dbms","conform if you want to exit") 26 | if iExit>0: 27 | root.destroy() 28 | return 29 | def clearData(): 30 | self.txtStdId.delete(0,END) 31 | self.txtFirstname.delete(0,END) 32 | self.txtSurname.delete(0,END) 33 | self.txtDob.delete(0,END) 34 | self.txtAge.delete(0,END) 35 | self.txtGender.delete(0,END) 36 | self.txtAdress.delete(0,END) 37 | self.txtMobile.delete(0,END) 38 | pb.studentData() 39 | def addData(): 40 | if(len(stdId.get())!=0): 41 | 42 | pb.addStdRec(stdId.get(),Firstname.get(),Surname.get(),DoB.get(),Age.get(),Gender.get(),Adress.get(),Mobile.get()) 43 | studentlist.delete(0,END) 44 | studentlist.insert(END,(stdId.get(),Firstname.get(),Surname.get(),DoB.get(),Age.get(),Gender.get(),Adress.get(),Mobile.get())) 45 | 46 | def DisplayData(): 47 | studentlist.delete(0,END) 48 | for row in pb.viewData(): 49 | studentlist.insert(END,row) 50 | def StudentRec(event): 51 | global sd 52 | searchstd = studentlist.curselection()[0] 53 | sd=studentlist.get(searchstd) 54 | self.txtStdId.delete(0,END) 55 | self.txtStdId.insert(END,sd[0]) 56 | self.txtFirstname.delete(0,END) 57 | self.txtFirstname.insert(END,sd[1]) 58 | self.txtSurname.delete(0,END) 59 | self.txtSurname.insert(END,sd[2]) 60 | self.txtDob.delete(0,END) 61 | self.txtDob.insert(END,sd[3]) 62 | self.txtAge.delete(0,END) 63 | self.txtAge.insert(END,sd[4]) 64 | self.txtGender.delete(0,END) 65 | self.txtGender.insert(END,sd[5]) 66 | self.txtAdress.delete(0,END) 67 | self.txtAdress.insert(END,sd[6]) 68 | self.txtMobile.delete(0,END) 69 | self.txtMobile.insert(END,sd[7]) 70 | def DeleteData(): 71 | 72 | if(len(stdId.get())!=0): 73 | pb.deleteRec(sd[0]) 74 | clearData() 75 | DisplayData() 76 | def searchDatabase(): 77 | studentlist.delete(0,END) 78 | for row in pb.searchData(stdId.get(),Firstname.get(),Surname.get(),DoB.get(),Age.get(),Gender.get(),Adress.get(),Mobile.get()): 79 | studentlist.insert(END,row,str("")) 80 | def update(): 81 | if(len(stdId.get())!=0): 82 | pb.deleteRec(sd[0]) 83 | if(len(stdId.get())!=0): 84 | pb.addStdRec(stdId.get(),Firstname.get(),Surname.get(),DoB.get(),Age.get(),Gender.get(),Adress.get(),Mobile.get()) 85 | studentlist.delete(0,END) 86 | studentlist.insert(END,(stdId.get(),Firstname.get(),Surname.get(),DoB.get(),Age.get(),Gender.get(),Adress.get(),Mobile.get())) 87 | 88 | #####################################FRAMES################################################################### 89 | MainFrame=Frame(self.root,bg="white") 90 | MainFrame.grid() #THIS IS MAIN FRAME OUR WINDOW 91 | TitFrame=Frame(MainFrame,bd=1,padx=54,pady=8,bg="red",relief=RIDGE) 92 | TitFrame.pack(side=TOP)#THIS IS STITLE FRAME 93 | 94 | self.lblTit=Label(TitFrame,font=('arial',47,'bold'),text="Students Database Management System",bg="red",fg="black") 95 | self.lblTit.grid() 96 | 97 | self.lblTit=Label(TitFrame,font=('arial',25,'bold'),text="K L UNIVERSITY",bg="red",fg="black") 98 | self.lblTit.grid() 99 | 100 | self.lblTit=Label(TitFrame,font=('arial',12),text="(ALURU VISVA SAI SRIKANTH)",bg="red",fg="black") 101 | self.lblTit.grid() 102 | 103 | ButtonFrame=Frame(MainFrame,bd=1,width=1350,height=70,padx=18,pady=10,bg="red",relief=RIDGE) 104 | ButtonFrame.pack(side=BOTTOM)# 105 | 106 | DataFrame=Frame(MainFrame,bd=9,width=1300,height=400,padx=20,pady=20,bg="#555",relief=RIDGE) 107 | DataFrame.pack(side=BOTTOM)#THIS IS STI 108 | 109 | DataFrameLeft=LabelFrame(DataFrame,font=('arial',12,'bold'),bd=1,width=450,height=300,bg="Ghost White",relief=RIDGE,text="STUDENT INFO\n") 110 | DataFrameLeft.pack(side=LEFT) 111 | 112 | DataFrameRight=LabelFrame(DataFrame,font=('arial',12,'bold'),bd=1,width=450,height=300,bg="Ghost White",relief=RIDGE,text="STUDENT DETAILS\n") 113 | DataFrameRight.pack(side=RIGHT) 114 | #########################################################Lables and entry widget ####################################################################### 115 | 116 | self.lblStdId=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="student Id:",bg="ghost white") 117 | self.lblStdId.grid(row=0,column=0,sticky=W) 118 | 119 | self.txtStdId=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=stdId,bg="ghost white",width=39) 120 | self.txtStdId.grid(row=0,column=1)#student id 121 | 122 | self.lblFirstname=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="First Name:",bg="ghost white") 123 | self.lblFirstname.grid(row=1,column=0,sticky=W) 124 | 125 | self.txtFirstname=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=Firstname,bg="ghost white",width=39) 126 | self.txtFirstname.grid(row=1,column=1)#firstname 127 | 128 | 129 | self.lblSurname=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="Surname:",bg="ghost white") 130 | self.lblSurname.grid(row=2,column=0,sticky=W) 131 | 132 | self.txtSurname=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=Surname,bg="ghost white",width=39) 133 | self.txtSurname.grid(row=2,column=1)#surname 134 | 135 | self.lblDob=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="Date of Birth",bg="ghost white") 136 | self.lblDob.grid(row=3,column=0,sticky=W) 137 | 138 | self.txtDob=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=DoB,bg="ghost white",width=39) 139 | self.txtDob.grid(row=3,column=1)#dateof birth 140 | 141 | self.lblAge=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="Age:",bg="ghost white") 142 | self.lblAge.grid(row=4,column=0,sticky=W) 143 | 144 | self.txtAge=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=Age,bg="ghost white",width=39) 145 | self.txtAge.grid(row=4,column=1)#age 146 | 147 | self.lblGender=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="Gender:",bg="ghost white") 148 | self.lblGender.grid(row=5,column=0,sticky=W) 149 | 150 | self.txtGender=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=Gender,bg="ghost white",width=39) 151 | self.txtGender.grid(row=5,column=1)#gender 152 | 153 | self.lblAdress=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="Address:",bg="ghost white") 154 | self.lblAdress.grid(row=6,column=0,sticky=W) 155 | 156 | self.txtAdress=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=Adress,bg="ghost white",width=39) 157 | self.txtAdress.grid(row=6,column=1)#adress 158 | 159 | self.lblMobile=Label(DataFrameLeft,font=('arial',12,'bold'),padx=2,pady=3,text="Mobile:",bg="ghost white") 160 | self.lblMobile.grid(row=7,column=0,sticky=W) 161 | 162 | self.txtMobile=Entry(DataFrameLeft,font=('arial',12,'bold'),textvariable=Mobile,bg="ghost white",width=39) 163 | self.txtMobile.grid(row=7,column=1)#mobile 164 | 165 | ###############################List Box and ScrollBar Widget############################################ 166 | scrollbar=Scrollbar(DataFrameRight) 167 | scrollbar.grid(row=0 ,column=1,sticky='ns')#scroll bar 168 | 169 | studentlist=Listbox(DataFrameRight,width=68,height=12,font=('arial',12,'bold'), yscrollcommand=scrollbar.set) 170 | studentlist.bind('<>',StudentRec) 171 | studentlist.grid(row=0,column=0,padx=10) 172 | scrollbar.config(command= studentlist.yview) 173 | 174 | #######################################Button Widget#################################################### 175 | self.btnAddData=Button(ButtonFrame,text="Add New",font=('arial',20,'bold'),height=1,width=10,bd=4,fg="#555",command=addData) 176 | self.btnAddData.grid(row=0,column=0)#ADD NEW 177 | 178 | self.btnDisplay=Button(ButtonFrame,text="Display",font=('arial',20,'bold'),height=1,width=10,bd=4,fg="#555",command=DisplayData) 179 | self.btnDisplay.grid(row=0,column=1)#DISPLAY 180 | 181 | self.btnClear=Button(ButtonFrame,text="Clear",font=('arial',20,'bold'),height=1,width=10,bd=4,fg="#555",command=clearData) 182 | self.btnClear.grid(row=0,column=2)#CLEAR 183 | 184 | self.btnDelete=Button(ButtonFrame,text="Delete",font=('arial',20,'bold'),height=1,width=10,bd=4,fg="#555",command=DeleteData) 185 | self.btnDelete.grid(row=0,column=3)#DELETE 186 | 187 | self.btnSearch=Button(ButtonFrame,text="Search",font=('arial',20,'bold'),height=1,width=10,bd=4,fg="#555",command=searchDatabase) 188 | self.btnSearch.grid(row=0,column=4)#SEARCH 189 | 190 | self.btnUpdate=Button(ButtonFrame,text="Update",font=('arial',20,'bold'),height=1,width=10,bd=4,fg="#555",command=update) 191 | self.btnUpdate.grid(row=0,column=5)#UPDATE 192 | 193 | self.btnExit=Button(ButtonFrame,text="Exit",font=('arial',20,'bold'),height=1,width=10,bd=4,fg="#555",command=iExit) 194 | self.btnExit.grid(row=0,column=6)#EXIT 195 | 196 | if __name__=='__main__': 197 | root=Tk()#CREATE AN OBJECT 198 | application=Student(root)#PASS IT TO OUR CLASS WHITH ITS PROPERTIES IN CLASS 199 | root.mainloop()#RUN UNTIL CLOSING THE WINDOW MANUALLY --------------------------------------------------------------------------------