0% found this document useful (0 votes)
185 views

Student Management System Project in Python

1. The document defines a student management system using Tkinter and SQLite that allows users to add, remove, update and view student records from a database table. 2. It connects to a SQLite database called "StudentManagement.db", creates a student table if needed, and defines functions for resetting, adding, removing, viewing and displaying student records. 3. The GUI is created with frames to hold labels, entries, buttons and a tree view to display records from the database table. Functions link the GUI elements to the database operations.

Uploaded by

Yash
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
185 views

Student Management System Project in Python

1. The document defines a student management system using Tkinter and SQLite that allows users to add, remove, update and view student records from a database table. 2. It connects to a SQLite database called "StudentManagement.db", creates a student table if needed, and defines functions for resetting, adding, removing, viewing and displaying student records. 3. The GUI is created with frames to hold labels, entries, buttons and a tree view to display records from the database table. Functions link the GUI elements to the database operations.

Uploaded by

Yash
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 9

import datetime

from tkinter import *


import tkinter.messagebox as mb
from tkinter import ttk
from tkcalendar import DateEntry # pip install
tkcalendar
import sqlite3

# Creating the universal font variables


headlabelfont = ("Noto Sans CJK TC", 15, 'bold')
labelfont = ('Garamond', 14)
entryfont = ('Garamond', 12)

# Connecting to the Database where all information will


be stored
connector = sqlite3.connect('StudentManagement.db')
cursor = connector.cursor()

connector.execute(
"CREATE TABLE IF NOT EXISTS STUDENT_MANAGEMENT
(STUDENT_ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
NAME TEXT, EMAIL TEXT, PHONE_NO TEXT, GENDER TEXT, DOB
TEXT, STREAM TEXT)"
)

# Creating the functions


def reset_fields():
global name_strvar, email_strvar, contact_strvar,
gender_strvar, dob, stream_strvar

for i in ['name_strvar', 'email_strvar',


'contact_strvar', 'gender_strvar', 'stream_strvar']:
exec(f"{i}.set('')")
dob.set_date(datetime.datetime.now().date())

def reset_form():
global tree
tree.delete(*tree.get_children())

reset_fields()

def display_records():
tree.delete(*tree.get_children())

curr = connector.execute('SELECT * FROM


STUDENT_MANAGEMENT')
data = curr.fetchall()

for records in data:


tree.insert('', END, values=records)

def add_record():
global name_strvar, email_strvar, contact_strvar,
gender_strvar, dob, stream_strvar

name = name_strvar.get()
email = email_strvar.get()
contact = contact_strvar.get()
gender = gender_strvar.get()
DOB = dob.get_date()
stream = stream_strvar.get()
if not name or not email or not contact or not
gender or not DOB or not stream:
mb.showerror('Error!', "Please fill all the
missing fields!!")
else:
try:
connector.execute(
'INSERT INTO STUDENT_MANAGEMENT (NAME,
EMAIL, PHONE_NO, GENDER, DOB, STREAM) VALUES
(?,?,?,?,?,?)', (name, email, contact, gender, DOB,
stream)
)
connector.commit()
mb.showinfo('Record added', f"Record of
{name} was successfully added")
reset_fields()
display_records()
except:
mb.showerror('Wrong type', 'The type of the
values entered is not accurate. Pls note that the
contact field can only contain numbers')

def remove_record():
if not tree.selection():
mb.showerror('Error!', 'Please select an item
from the database')
else:
current_item = tree.focus()
values = tree.item(current_item)
selection = values["values"]
tree.delete(current_item)

connector.execute('DELETE FROM
STUDENT_MANAGEMENT WHERE STUDENT_ID=%d' % selection[0])
connector.commit()

mb.showinfo('Done', 'The record you wanted


deleted was successfully deleted.')

display_records()

def view_record():
global name_strvar, email_strvar, contact_strvar,
gender_strvar, dob, stream_strvar

current_item = tree.focus()
values = tree.item(current_item)
selection = values["values"]

date = datetime.date(int(selection[5][:4]),
int(selection[5][5:7]), int(selection[5][8:]))

name_strvar.set(selection[1]);
email_strvar.set(selection[2])
contact_strvar.set(selection[3]);
gender_strvar.set(selection[4])
dob.set_date(date); stream_strvar.set(selection[6])

# Initializing the GUI window


main = Tk()
main.title('DataFlair Student Management System')
main.geometry('1000x600')
main.resizable(0, 0)

# Creating the background and foreground color variables


lf_bg = 'MediumSpringGreen' # bg color for the
left_frame
cf_bg = 'PaleGreen' # bg color for the center_frame

# Creating the StringVar or IntVar variables


name_strvar = StringVar()
email_strvar = StringVar()
contact_strvar = StringVar()
gender_strvar = StringVar()
stream_strvar = StringVar()

# Placing the components in the main window


Label(main, text="STUDENT MANAGEMENT SYSTEM",
font=headlabelfont, bg='SpringGreen').pack(side=TOP,
fill=X)

left_frame = Frame(main, bg=lf_bg)


left_frame.place(x=0, y=30, relheight=1, relwidth=0.2)

center_frame = Frame(main, bg=cf_bg)


center_frame.place(relx=0.2, y=30, relheight=1,
relwidth=0.2)

right_frame = Frame(main, bg="Gray35")


right_frame.place(relx=0.4, y=30, relheight=1,
relwidth=0.6)
# Placing components in the left frame
Label(left_frame, text="Name", font=labelfont,
bg=lf_bg).place(relx=0.375, rely=0.05)
Label(left_frame, text="Contact Number", font=labelfont,
bg=lf_bg).place(relx=0.175, rely=0.18)
Label(left_frame, text="Email Address", font=labelfont,
bg=lf_bg).place(relx=0.2, rely=0.31)
Label(left_frame, text="Gender", font=labelfont,
bg=lf_bg).place(relx=0.3, rely=0.44)
Label(left_frame, text="Date of Birth (DOB)",
font=labelfont, bg=lf_bg).place(relx=0.1, rely=0.57)
Label(left_frame, text="Stream", font=labelfont,
bg=lf_bg).place(relx=0.3, rely=0.7)

Entry(left_frame, width=19, textvariable=name_strvar,


font=entryfont).place(x=20, rely=0.1)
Entry(left_frame, width=19, textvariable=contact_strvar,
font=entryfont).place(x=20, rely=0.23)
Entry(left_frame, width=19, textvariable=email_strvar,
font=entryfont).place(x=20, rely=0.36)
Entry(left_frame, width=19, textvariable=stream_strvar,
font=entryfont).place(x=20, rely=0.75)

OptionMenu(left_frame, gender_strvar, 'Male',


"Female").place(x=45, rely=0.49, relwidth=0.5)

dob = DateEntry(left_frame, font=("Arial", 12),


width=15)
dob.place(x=20, rely=0.62)
Button(left_frame, text='Submit and Add Record',
font=labelfont, command=add_record,
width=18).place(relx=0.025, rely=0.85)

# Placing components in the center frame


Button(center_frame, text='Delete Record',
font=labelfont, command=remove_record,
width=15).place(relx=0.1, rely=0.25)
Button(center_frame, text='View Record', font=labelfont,
command=view_record, width=15).place(relx=0.1,
rely=0.35)
Button(center_frame, text='Reset Fields',
font=labelfont, command=reset_fields,
width=15).place(relx=0.1, rely=0.45)
Button(center_frame, text='Delete database',
font=labelfont, command=reset_form,
width=15).place(relx=0.1, rely=0.55)

# Placing components in the right frame


Label(right_frame, text='Students Records',
font=headlabelfont, bg='DarkGreen',
fg='LightCyan').pack(side=TOP, fill=X)

tree = ttk.Treeview(right_frame, height=100,


selectmode=BROWSE,
columns=('Student ID', "Name",
"Email Address", "Contact Number", "Gender", "Date of
Birth", "Stream"))

X_scroller = Scrollbar(tree, orient=HORIZONTAL,


command=tree.xview)
Y_scroller = Scrollbar(tree, orient=VERTICAL,
command=tree.yview)

X_scroller.pack(side=BOTTOM, fill=X)
Y_scroller.pack(side=RIGHT, fill=Y)

tree.config(yscrollcommand=Y_scroller.set,
xscrollcommand=X_scroller.set)

tree.heading('Student ID', text='ID', anchor=CENTER)


tree.heading('Name', text='Name', anchor=CENTER)
tree.heading('Email Address', text='Email ID',
anchor=CENTER)
tree.heading('Contact Number', text='Phone No',
anchor=CENTER)
tree.heading('Gender', text='Gender', anchor=CENTER)
tree.heading('Date of Birth', text='DOB', anchor=CENTER)
tree.heading('Stream', text='Stream', anchor=CENTER)

tree.column('#0', width=0, stretch=NO)


tree.column('#1', width=40, stretch=NO)
tree.column('#2', width=140, stretch=NO)
tree.column('#3', width=200, stretch=NO)
tree.column('#4', width=80, stretch=NO)
tree.column('#5', width=80, stretch=NO)
tree.column('#6', width=80, stretch=NO)
tree.column('#7', width=150, stretch=NO)

tree.place(y=30, relwidth=1, relheight=0.9, relx=0)

display_records()
# Finalizing the GUI window
main.update()
main.mainloop()

You might also like