MAHARAJA PUBLIC
SCHOOL
BELA, SATNA (MP)
(AFFILATED OF CBSE NEW DELHI)
A PROJECT REPORT ON
"SCHOOL MANAGEMENT SYSTEM"
FOR
AISSCE EXAMINATION 2019-20
AS A PART OF THE
COMPUTER SCIENCE[NEW] (083)
SUBMITTED BY:
SARWANG JAIN
CLASS: XIITH SCIENCE
UNDER THE GUIDENCE OF
MR.RAMASHANKAR DWIVEDI
PGT (COMPUTER SCIENCE)
CERTIFICATE
This is certified SARWANG JAIN
student of class 12th PCM of MAHARAJA
PUBLIC SCHOOL has successfully completed
project on "SCHOOL MANAGEMENT
SYSTEM"
under the guidance of
MR. RAMASHANKAR DWIVEDI
Signature of Internal Signature of External
Signature of Principal
Roll Number:- ..........
Date:- ..........
ACKNOWLEDGEMENT
I would like to express my special thanks of
gratitude to my Computer teacher
"MR. RAMASHANKAR DWIVEDI" for their
able guidance and support in completing my
Project.
I would also like extend my gratitude to my
principal "MR. NITIN MASIH" and
Vice Principal sir
"MR. TAPAN KUMAR DWIVEDI"for
providing with all the facility that was required.
DATE SARWANG
JAIN
CLASS 12TH PCM
INDEX
1.Certificate
2.Acknowledgement
3.Additional file
4.Coding
5.ScreenShots(Output)
6.Requirement
7.Bibliography
ADDITIONAL FILE
(Libraries)
tkinter :- For GUI designing for project.
mysql.connector :- For connecting with mysql.
CODING
# ==============modules================
from tkinter import *
import mysql.connector as my
conn = my.connect(host="localhost", user="root", passwd="mps",
database="login_system",charset="utf8")
mycursor = conn.cursor()
mycursor.execute("CREATE TABLE If NOT EXISTS UserDetail (id int
auto_increment primary key, name varchar(35), username varchar(25), phone
varchar(11), password varchar(255))")
#updation data on server
def update_user():
cname = name_upd.get()
cuser = user_upd.get()
cphone = phone_upd.get()
cid = c_id
cuser_valid = cname_valid = cphone_valid = False
error_list.delete(0,END)
if len(cuser) > 0 and len(cname) > 0 and len(cphone) > 0:
if len(cname) > 30:
error = "Fullname contains only 30 character"
error_list.insert(END, error)
else:
cname_valid = True
if (len(cuser) >= 4 and len(cuser) < 20) == False:
error = "Username must be between 4 to 30 character long"
error_list.insert(END, error)
else:
cuser_valid = True
if (cphone.isdigit() and (len(cphone) == 10)) == False:
error = "Please enter valid phone number"
error_list.insert(END, error)
else:
cphone_valid = True
if cname_valid == cuser_valid == cphone_valid:
# ============Updation code
mycursor.execute("SELECT * FROM UserDetail WHERE (username =
'"+cuser+"' AND NOT id = '"+cid+"') OR (phone = '"+cphone+"' AND NOT id =
'"+cid+"')")
result = mycursor.fetchall()
if (len(result) == 0):
name_upd.delete(0, END)
phone_upd.delete(0, END)
user_upd.delete(0, END)
query = "UPDATE UserDetail SET name = '"+cname+"' ,username =
'"+cuser+"', phone = '"+cphone+"' WHERE id = '"+cid+"' "
mycursor.execute(query)
conn.commit()
if (mycursor.rowcount > 0):
error_list.insert(END,"Successfully Registered")
else:
error_list.insert(END,"Some problem occurs during updation")
else:
error_list.insert(END, "Please enter Another username or phone number")
# ============Updation end
else:
error = "All fields are required"
error_list.insert(END, error)
#registered users
def user_form():
global frame_user
frame_user = Frame(screen3)
row=0
mycursor.execute("SELECT * FROM UserDetail ORDER BY id asc")
Label(frame_user,text="Id",fg="#fff",bg="#373737",pady=10,width=5,font=("Bold",1
0)).grid(row=row,column=0)
Label(frame_user,text="FullName",bg="#373737",fg="#fff",pady=10,width=15,font=(
"bold",10)).grid(row=row,column=1)
Label(frame_user,text="UserName",bg="#373737",fg="#fff",pady=10,width=20,font=
("bold",10)).grid(row=row,column=2)
Label(frame_user,text="Phone",bg="#373737",fg="#fff",pady=10,width=15,font=("bo
ld",10)).grid(row=row,column=3)
Label(frame_user, width=15, font=("bold", 10)).grid(row=0, column=4)
row=row+1
results = mycursor.fetchall()
for result in results:
id=str(result[0])
if row%2==0:
bg="#fff"
fg="#999"
else:
bg="#999"
fg="#fff"
Label(frame_user, text=id, bg=bg, fg=fg, width=5, pady=10, font=("bolder",
10)).grid(row=row, column=0)
Label(frame_user, text=result[1], bg=bg, fg=fg, width=15, pady=10, font=("bold",
10)).grid(row=row, column=1)
Label(frame_user, text=result[2], bg=bg, fg=fg, width=20, pady=10, font=("bold",
10)).grid(row=row, column=2)
Label(frame_user, text=result[3], bg=bg, fg=fg, width=15, pady=10, font=("bold",
10)).grid(row=row, column=3)
Button(frame_user,text="UPDATE" ,bg="green",
fg="#fff",font=("bold",10),command=lambda
upd=id:update(upd)).grid(row=row,column=4)
Button(frame_user, text="DELETE", bg="#d9534f", fg="#f9f9f9",font=("bold",
10),command=lambda det=id:delete(det)).grid(row=row, column=5)
row = row+1
if len(results) == 0:
Label(frame_user,text="No User existed",fg="#969696",font=("dancing
script",15)).grid(row=row,column=0,columnspan=5)
try:
screen3.destroy()
except:
pass
frame_user.place(x=100,y=150)
#update user data form
def update(id):
global upd_screen1,name_upd,user_upd, phone_upd, c_id, error_list
c_id=id
mycursor.execute("SELECT * FROM UserDetail WHERE id = '"+id+"'")
result = mycursor.fetchall()
name_val = result[0][1]
user_val = result[0][2]
phone_val = result[0][3]
screen3.destroy()
upd_screen1 = Toplevel(screen)
upd_screen1.title("Update detail of "+user_val)
upd_screen1.geometry("700x1000")
upd_screen = Frame(upd_screen1,width=100)
name = StringVar()
phone = StringVar()
username = StringVar()
Label(upd_screen, text="Enter Fullname
*",padx=100,pady=20).grid(row=1,column=0)
name_upd = Entry(upd_screen, textvariable=name, bg="#eee")
name_upd.grid(row=1,column=1)
Label(upd_screen, text="Enter Username *",pady=20).grid(row=2,column=0)
user_upd = Entry(upd_screen,textvariable=username, bg="#eee")
user_upd.grid(row=2,column=1)
Label(upd_screen, text="Enter Phone number *",pady=20).grid(row=3,column=0)
phone_upd = Entry(upd_screen, textvariable=phone, bg="#eee")
phone_upd.grid(row=3,column=1)
Label(upd_screen).grid(row=4,column=0)
Button(upd_screen, text="Update", bg="green", fg="#fff", width="20", height="1",
font=("arial", 10),command=update_user).grid(row=5,column=0,columnspan=2)
Button(upd_screen, text="Back", width="12", bg="#d9534f", fg="#f9f9f9",
font=("bold", 10),command=welcome).grid(row=6,column=0,columnspan=2)
name_upd.insert(END,name_val)
user_upd.insert(END,user_val)
phone_upd.insert(END,phone_val)
frame = Frame(upd_screen)
scroll = Scrollbar(frame, bg="#efefef", activebackground="#999", width='15')
scroll.pack(side=RIGHT, fill=Y)
error_list = Listbox(frame, bg="#ddd", fg="#000", border=0, width='55',height='4',
yscrollcommand=scroll.set)
error_list.pack(side=LEFT)
scroll.config(command=error_list.yview)
frame.grid(row=8,column=0,columnspan=2)
upd_screen.place(x=100,y=50)
#delete user function
def delete(id):
mycursor.execute("SELECT * FROM UserDetail WHERE id = '"+id+"'")
result=mycursor.fetchall()
if(len(result) > 0):
mycursor.execute("delete from userdetail where id='"+id+"'")
frame_user.destroy()
print("hello")
user_form()
#welcome page
def welcome():
global screen3
try:
screen1.destroy()
except:
try:
upd_screen1.destroy()
except:
pass
screen3 = Toplevel(screen)
screen3.geometry("1000x1000")
Button(screen3, text="LogOut", bg="#d9534f", fg="#f9f9f9", width='10',
font=("bold", 10), command=screen3.destroy).place(x=800,y=0)
#Label(screen3, text="Welcome " + data[0][1] + ", its a very nice meeting of
you", width=40, fg="#262626", font=("dancing script", 10)).place(x=15, y=90)
user_form()
#login user function
def login_user():
global data
user = username.get()
passcode = password.get()
error_list.delete(0, END)
if len(user) > 0 and len(passcode) > 0:
user_field.delete(0, END)
pass_field.delete(0, END)
mycursor.execute('SELECT * FROM UserDetail WHERE username ="' + user +
'"')
data = mycursor.fetchall()
if (len(data) == 1):
if (data[0][4] == passcode):
for i in range(5):
if (i == 0):
error_list.insert(END, "WELCOME " + data[0][1])
welcome()
else:
error_list.insert(END, "Please input valid password")
else:
error_list.insert(END, "Username not found")
else:
error = "Please input Your username and password"
error_list.insert(END, error)
#registor user function
def register_user():
user = username.get()
passcode = password.get()
fullname = name.get()
number = phone.get()
error_list.delete(0, END)
user_valid = passcode_valid = fullname_valid = number_valid = False
if len(user) > 0 and len(passcode) > 0 and len(fullname) > 0 and len(number) > 0:
if len(fullname) > 30:
error = "Fullname contains only 30 character"
error_list.insert(END, error)
else:
fullname_valid = True
if (len(user) >= 4 and len(user) < 20) == False:
error = "Username must be between 4 to 30 character long"
error_list.insert(END, error)
else:
user_valid = True
if (number.isdigit() and (len(number) == 10)) == False:
error = "Please enter valid phone number"
error_list.insert(END, error)
else:
number_valid = True
if len(passcode) < 6:
error = "Password must be atleast 6 character long"
error_list.insert(END, error)
else:
passcode_valid = True
if fullname_valid == user_valid == passcode_valid == number_valid:
# ============Insertion code
mycursor.execute("SELECT * FROM UserDetail WHERE username =%s OR
phone=%s", (user, number))
result = mycursor.fetchall()
if (len(result) == 0):
user_registor_field.delete(0, END)
phone_registor_field.delete(0, END)
name_registor_field.delete(0, END)
password_registor_field.delete(0, END)
query = "INSERT INTO UserDetail(name,username,phone,password)
VALUES(%s,%s,%s,%s)"
values = (fullname, user, number, passcode)
mycursor.execute(query, values)
conn.commit()
if (mycursor.rowcount > 0):
error_list.insert(END, "Successfully Registered")
else:
error_list.insert(END, "Some problem occurs during registration")
else:
error_list.insert(END, "Please enter Another username or phone number")
else:
error = "All fields are required"
error_list.insert(END, error)
#login form
def login():
global username, password, screen1, user_field, pass_field, error_list
screen1 = Toplevel(screen)
screen1.geometry("700x800")
screen1.title("Login")
logScr= Frame(screen1)
Label(logScr, text="Enter following detail to login", bg="#fe51ad",padx=120,
fg="#fff",
font=("dancing script", 14)).grid(row=0,column=0,columnspan=2)
username = StringVar()
password = StringVar()
Label(logScr, text="Enter Username *",padx=100,pady=20).grid(row=1,column=0)
user_field = Entry(logScr, textvariable=username, bg="#eee")
user_field.grid(row=1,column=1)
Label(logScr, text="Enter Password *",pady=20).grid(row=2,column=0)
pass_field = Entry(logScr, textvariable=password, show="*", bg="#eee")
pass_field.grid(row=2,column=1)
Label(logScr).grid(row=3,column=0)
Button(logScr, text="LOGIN", bg="#fe51ab", fg="#fff", width="20", height="1",
font=("arial", 10),
command=login_user).grid(row=4,column=0,columnspan=2)
Button(logScr, text="Back", width=12, bg="#d9534f", fg="#f9f9f9", font=("bold",
10), command= screen1.destroy).grid(row=5, column=0,columnspan=2)
Label(logScr).grid(row=6,column=0)
frame = Frame(logScr, width=250)
error_list = Listbox(frame, border=0, width='75', bg="#ddd",
fg="#ff9494",font=(7))
error_list.pack(side=LEFT)
frame.grid(row=7,column=0,columnspan=2)
logScr.place(x=0,y=0)
#registor form
def register():
global screen2, name, phone, username, password, error_list, user_registor_field,
name_registor_field, phone_registor_field, password_registor_field
screen2 = Toplevel(screen)
screen2.geometry("700x800")
screen2.title("Register yourself")
regScr= Frame(screen2)
Label(regScr, text="Enter following detail to be with us", bg="#fe51ad", fg="#fff",
padx=120,
font=("dancing script", 14)).grid(row=0,column=0,columnspan=2)
name = StringVar()
phone = StringVar()
username = StringVar()
password = StringVar()
Label(regScr, text="Enter Fullname *",padx=100,pady=20).grid(row=1,column=0)
name_registor_field = Entry(regScr, textvariable=name, bg="#eee")
name_registor_field.grid(row=1,column=1)
Label(regScr, text="Enter Username *",pady=20).grid(row=2,column=0)
user_registor_field = Entry(regScr, textvariable=username, bg="#eee")
user_registor_field.grid(row=2,column=1)
Label(regScr, text="Enter Phone number *",pady=20).grid(row=3,column=0)
phone_registor_field = Entry(regScr, textvariable=phone, bg="#eee")
phone_registor_field.grid(row=3,column=1)
Label(regScr, text="Enter Password *",pady=20).grid(row=4,column=0)
password_registor_field = Entry(regScr, textvariable=password, bg="#eee")
password_registor_field.grid(row=4,column=1)
Label(regScr).grid(row=5,column=0)
Button(regScr, text="PROCEDE", bg="#fe51ab", fg="#fff", width="20",
height="1", font=("arial", 10),
command=register_user).grid(row=6,column=0,columnspan=2)
Button(regScr, text="Back", width="12", bg="#d9534f", fg="#f9f9f9", font=("bold",
10),
command=screen2.destroy).grid(row=7,column=0,columnspan=2)
Label(regScr).grid(row=8,column=0,columnspan=2)
# ===========================
frame = Frame(regScr)
scroll = Scrollbar(frame, bg="#efefef", activebackground="#999", width=15)
scroll.pack(side=RIGHT, fill=Y)
error_list = Listbox(frame, bg="#ddd", fg="#ff9494", border=0, width='75',font=(7),
yscrollcommand=scroll.set)
error_list.pack(side=LEFT)
scroll.config(command=error_list.yview)
frame.grid(row=9,column=0,columnspan=2)
regScr.place(x=0,y=0)
def home():
global screen
screen = Tk()
screen.title("WELCOME TO SCHOOL MANAGEMENT SYSTEM")
screen.geometry("1000x1000")
Label(screen, text="WELCOME TO SCHOOL MANAGEMENT SYSTEM",
bg="#fe51ad", width=1000, height=2, fg="#fff",
font=("dancing script", 15)).pack()
Label().pack()
Button(text="Login", height=3, width=40, bg="green", fg="#fff", font=("Arial", 12),
command=login).pack()
Label().pack()
Button(text="Register", height=3, width=40, bg="gold", fg="#fff", font=("arial",
12), command=register).pack()
Label().pack()
Label().pack()
Button(text="EXIT", width=20, bg="#d9534f", fg="#f9f9f9", font=("bold", 10),
command=screen.destroy).pack()
screen.mainloop()
home()
ScreenShots
(Output)
Requirement
Hard Disk :- 500GB
RAM :- 1GB
PyCharm IDE :-A python editor/IDE
Processor :- Intel i3 7th Generation
Printer
Bibliography
1. Https://youtube.com
2. Https://google.com
3. NCERT Textbook
4. Self Learning
5. Self Analyzing