Cs Project
Cs Project
Computer
science
PROJECT
Aadhil Nandan
TABLE OF
CONTENTS
01 INTRODUCTION
02 FLOWCHART
03 DATABASE STRUCTURE
04 SOURCE CODE
05 OUTPUT
07 CONCLUSION
08 LIST OF REFERENCES
Introduction
1
Flowchart
FLOW OF OPERATIONS
2
Source
code
DATABASE NAME: SMS
TABLE NAME: STUDENTS
CLASS
VACHAR (4) NOT NULL
AGE INT -
3
Database
structure
import customtkinter as ctk
import tkinter.messagebox as tkmb
import tkinter as tk
import mysql.connector as csql
from customtkinter import CTkFrame, CTkLabel, CTkEntry, CTkRadioButton
root = ctk.CTk()
# Basic personalization
ctk.set_appearance_mode("System")
ctk.set_default_color_theme("green")
s_width, s_height = root.winfo_screenwidth(), root.winfo_screenheight()
s_size = f"{s_width} x {s_height}"
root.geometry(s_size)
# Login Function
def login(new_window):
# Credentials
username = "Admin"
password = "pass"
# User Entry
input_username = user_entry.get()
input_password = user_pass.get()
4
tkmb.showinfo(title="Login Successful", message="You have logged in
successfully")
print(main_window(login_window))
else:
tkmb.showerror("Login Failed", "Invalid username and password.")
# Login window
def open_login_window():
global login_window, user_entry, user_pass
root.withdraw()
login_window = ctk.CTkToplevel(root)
login_window.title("Login")
login_window.geometry(s_size)
login_window.state('zoomed')
def main_window(login_win):
# Main window
root.deiconify()
root.state('zoomed')
login_win.destroy()
root.title("Student Management System")
appearance_mode_menu = ctk.CTkOptionMenu(btn_frame,
values=["Light", "Dark", "System"],
command=lambda mode: change_mode(root,
mode))
appearance_mode_menu.grid(row=8, column=0, padx=10, pady=100,
sticky="s")
btn_head = ctk.CTkLabel(btn_frame, text='Welcome to SMS ',
fg_color="gray30",
corner_radius=6, font=("Georgia", 15))
btn_head.grid(row=0, column=0, padx=5, pady=70, ipady=20,
sticky="ew")
def clear_frame(frame):
for widget in frame.winfo_children():
widget.destroy()
root.geometry(s_size)
def submit_data():
student_data = (
int(admission_entry.get()),
name_entry.get(),
class_option_menu.get(),
int(age_entry.get()),
fathers_name_entry.get(),
gender_var.get(),
int(phone_entry.get()),
email_entry.get(),
address_entry.get()
)
add_data(student_data, frame)
my_cursor = my_database.cursor()
add = """
INSERT INTO students (admn_no, name, class, age, father_name,
gender, ph_no, email, address)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)
"""
my_cursor.execute(add, x)
my_database.commit()
tkmb.showinfo(title="Success", message="Data Added Successfully")
addinfo_window(frame)
my_database.close()
def db_connect():
try:
database = csql.connect(
host="localhost",
user="root",
password="NSad*1807",
database="sms"
)
return database
except csql.Error as err:
tkmb.showerror("Error", "Couldn't connect to database.")
return None
def db_data_retriever():
global data, headers
extract_db = db_connect()
cursor = extract_db.cursor()
cursor.execute("SELECT * FROM students")
data = cursor.fetchall()
headers = [desc[0] for desc in cursor.description]
extract_db.close()
return data, headers
def view_details(frame):
clear_frame(frame)
root.title("View Student Data")
view_frame = ctk.CTkFrame(frame, corner_radius=5, height=(s_height-
500), width=(s_width - s_width//8))
view_frame.grid(row=0, column=0, padx=50, pady=50, ipadx=200,
ipady=50, sticky="ew")
except Exception as e:
tkmb.showerror("Error", f"Could not load database: {e}")
table.update_idletasks()
resize_canvas(None, table)
# Horizontal scrollbar
scrollbar_x = ctk.CTkScrollbar(table_frame, orientation="horizontal",
command=table_canvas.xview)
scrollbar_x.grid(row=1, column=0, sticky="ew")
table_canvas.configure(xscrollcommand=scrollbar_x.set)
# Vertical scrollbar
scrollbar_y = ctk.CTkScrollbar(table_frame, orientation="vertical",
command=table_canvas.yview)
scrollbar_y.grid(row=0, column=1, sticky="ns", )
table_canvas.configure(yscrollcommand=scrollbar_y.set)
load_data(table_canvas, table_content)
def edit_student_details(frame):
clear_frame(frame)
root.title("Edit Student Data")
def search_student(find_admission_no):
global mydb
admission_no = find_admission_no.get()
if not admission_no.isdigit():
tkmb.showerror("Error", "Please enter a valid Admission Number.")
return
try:
mydb = db_connect()
my_cursor = mydb.cursor()
query = "SELECT * FROM students WHERE admn_no = %s"
my_cursor.execute(query, (admission_no,))
student = my_cursor.fetchone()
if not student:
tkmb.showinfo("Not Found", "Student Not Found.")
return
name_entry.delete(0, ctk.END)
name_entry.insert(0, student[1])
class_entry.set(student[2])
age_entry.delete(0, ctk.END)
age_entry.insert(0, student[3])
father_name_entry.delete(0, ctk.END)
father_name_entry.insert(0, student[4])
gender_var.set(student[5])
phone_entry.delete(0, ctk.END)
phone_entry.insert(0, student[6])
email_entry.delete(0, ctk.END)
email_entry.insert(0, student[7])
address_entry.delete(0, ctk.END)
address_entry.insert(0, student[8])
except Exception as e:
tkmb.showerror("Error", f"An error occurred: {e}")
finally:
mydb.close()
def update_student():
global db
admission_no = search_entry.get()
updated_data = (
name_entry.get(),
class_entry.get(),
age_entry.get(),
father_name_entry.get(),
gender_var.get(),
phone_entry.get(),
email_entry.get(),
address_entry.get(),
admission_no,
)
try:
db = db_connect()
my_cursor = db.cursor()
query = """
UPDATE students
SET name = %s, class = %s, age = %s, father_name = %s, gender =
%s, ph_no = %s, email = %s, address = %s
WHERE admn_no = %s
"""
my_cursor.execute(query, updated_data)
db.commit()
tkmb.showinfo("Success", "Student details updated successfully.")
except Exception as e:
tkmb.showerror("Error", f"An error occurred: {e}")
finally:
db.close()
def exit_fn():
if tkmb.askyesno(title="Quit SMS", message="Do you want to exit?"):
root.destroy()
open_login_window()
root.mainloop()
output
STEPS
5
5
‘
‘
‘
‘
Pros & cons
"The table below outlines the key pros and cons of the Student
Management System (SMS), offering a comprehensive overview of its
strengths and areas that may require further enhancement."
PROS CONS
6
conclusion
7
LIST OF
REFERENCES
01 PYTHON DOCUMENTATION
02 MYSQL DOCUMENTATION
03 GEEKSFORGEEKS
04 CUSTOMTKINTER