Professional Documents
Culture Documents
Untitled
Untitled
JULY-DECEMBER,2021
CONTENTS
1.1. Objective……………………………………………………………….……..….4
1.2. Introduction…………………………………………………………….………5
1.3. Scope…………………………………………………………………….…………6
CHAPTER 6: TESTING……………………………………..………………………………………………………………………………….…...…....36-39
CHAPTER 7: BENEFITS……………………………………………………………………………………………………………………………………..40-41
CHAPTER 8: LIMITATIONS…………………………………………………………………………………………………………………………….…42-43
ABSTRACT
Our project Student Management system includes registration of students, storing their
details into the system i.e. computerized the process. Our software has the facility to give a
unique id for every student and stores the details of every student. It includes a search
facility also –search by name, contact and roll number .The data can be retrieved easily. The
interface is very User-friendly. The data are well protected for personal use and makes the
data processing very fast.
Page | 2
CHAPTER 1
INTRODUCTION
Page | 3
1.1 OBJECTIVE
Student Management System is software which is helpful for college as well as the school
authorities. In the current system all the activities are done manually. It is very time
consuming and costly. Our Student Management System deals with the various activities
related to managing student records. Our Objective is computerizing the process of student
records management.
Page | 4
1.2 INTRODUCTION
This project is aimed to automate the student management system. This project is
developed mainly to administrate student records.
The purpose of the project entitled as STUDENT MANAGEMENT SYSTEM is to computerize
the Front Office Management of student records in colleges, schools and
coaching’s, to develop software which is user friendly, simple, fast, and cost – effective.
Traditionally, it was done manually.
The main function of the system is to register and store student details, retrieve these
details as and when required, and also to manipulate these details meaningfully.
Page | 5
1.3 SCOPE
The proposed software product is the Student Management System. The system will be
used in any School, College and coaching institute to get the information from the student
and the storing that data for future usage.
The current system in use is a paper-based system. It is too slow and cannot provide
updated lists of students within a reasonable timeframe. The intentions of the system are
to reduce over-time pay and increase the productivity. Requirements statements in this
document are both functional and non-functional.
Page | 6
CHAPTER 2
HARDWARE & SOFTWARE
REQUIREMENT
Page | 7
SYSTEM REQUIREMENT
OS-Windows 7/8/10
Python Interpreter
Pycharm IDE or VS code
Xampp (For Mysql) or Mysql Workbench
Page | 8
CHAPTER 3
TECHNICAL DESCRIPTION
Page | 9
Python is a programming language that lets you work quickly and integrate systems
more efficiently.
TKINTER
Tkinter is a Python binding to the Tk GUI toolkit. It is the standard Python interface
to the Tk GUI toolkit, and is Python's de facto standard GUI. Tkinter is included with
standard GNU/Linux, Microsoft Window and mac OS X installs of Python.
The name Tkinter comes from Tk interface. Tkinter was written by Fredrik Lundh.
Page | 10
CHAPTER 4
SOFTWARE ANALYSIS &
DESIGN
Page | 11
Requirements
Design
Implementation
Fig. SDLC
Verification
Maintenance
Fig :- SDLC
Page | 12
To follow the waterfall model, one proceeds from one phase to the next in a sequential
manner. For example, one first completes requirements specification, which after sign-off
is considered "set in stone." When the requirements are fully completed, one proceeds to
design. The software in question is designed and a blueprint is drawn for implementers
(coders) to follow — this design should be a plan for implementing the requirements given.
When the design is fully completed, an implementation of that design is made by coders.
Towards the later stages of this implementation phase, separate software components
produced are combined to introduce new functionality and reduced risk through the
removal of errors.
Thus the waterfall model maintains that one should move to a phase only when it’s
proceeding phase is completed and perfected. However, there are various modified
waterfall models (including Royce's final model) that may include slight or major variations
upon this process .Time spent early in the software production cycle can lead to greater
economy at later stages. It has been shown that a bug found in the early stages (such as
requirements specification or design) is cheaper in terms of money, effort and time, to fix
than the same bug found later on in the process. To take an extreme example, if a program
design turns out to be impossible to implement, it is easier to fix the design at the design
stage than to realize months later, when program components are being integrated, that all
the work done so far has to be scrapped because of a broken design.
This is the central idea behind the waterfall model - time spent early on making sure that
requirements and design are absolutely correct will save you much time and effort later.
Thus, the thinking of those who follow the waterfall process goes, one should make sure
that each phase is 100% complete and absolutely correct before proceeding to the next
phase of program creation. Program requirements should be set in stone before design is
started (otherwise work put into a design based on incorrect requirements is wasted).
Page | 13
The program's design should be perfect before people begin work on implementing the
design (otherwise they are implementing the wrong design and their work is wasted), etc.
A further argument for the waterfall model is that it places emphasis on documentation
(such as requirements documents and design documents) as well as source code. In less
designed and documented methodologies, should team members leave, much knowledge
is lost and may be difficult for a project to recover from. Should a fully working design
document be present (as is the intent of Big Design Up Front and the waterfall model) new
team members or even entirely new teams should be able to familiarize themselves by
reading the documents.
Project is divided into sequential phases, with some overlap and splash back acceptable
between phases.
Tight control is maintained over the life of the project through the use of extensive written
documentation, as well as through formal reviews and approval/signoff by the user and
information technology management occurring at the end of most phases before beginning
the next phase.
Page | 14
The data flow diagram enables the software engineer to develop models of the information
domain and functional domain at the same time. As the DFD refined in to levels of greater
detail, the analyst perform an implicit functional decomposition of the system. Also DFD
refinement results in a corresponding refinement of data as it moves through the processes
that embody the application.
Page | 15
Level-0
Page | 16
4.2.2 ER DIAGRAM
Std.
Class Division
Address Email Id Name
Roll no
Teacher
Gender
Department
Std. Id
Course
Semester
Year
Fig. ER DIAGRAM
Page | 17
UPDATE STUDENT
RECORD
DELETE STUDENT
RECORD
ADMIN SYSTEM
SEARCH RECORD
Page | 18
CHAPTER 5
DEVELOPMENT
Page | 19
Page | 20
SOURCE CODE
class Student:
def __init__(self,root):
self.root=root
self.root.geometry("1530x760+0+0")
self.root.title("student management system")
#variables
self.var_dep=StringVar()
self.var_course=StringVar()
self.var_year=StringVar()
self.var_semester=StringVar()
self.va_std_id=StringVar()
self.var_std_name=StringVar()
self.var_div=StringVar()
self.var_roll=StringVar()
self.var_gender=StringVar()
self.var_dob=StringVar()
self.var_email=StringVar()
self.var_phone=StringVar()
self.var_address=StringVar()
self.var_teacher=StringVar()
#1st image...............
img=Image.open(r"F:\STUDENT MANAGEMENT SYSTEM\pic\image2.jpeg")
img=img.resize((683,160),Image.ANTIALIAS)
self.photoimg=ImageTk.PhotoImage(img)
self.btn_1=Button(self.root,command=self.open_img,image=self.photoimg,cursor="hand2")
self.btn_1.place(x=0,y=0,width=683,height=160)
Page | 21
#2nd image....................
img_2=Image.open(r"D:\STUDENT MANAGEMENT SYSTEM\pic\ggg.png")
img_2=img_2.resize((683,160),Image.ANTIALIAS)
self.photoimg_2=ImageTk.PhotoImage(img_2)
self.btn_2=Button(self.root,command=self.open_img_2,image=self.photoimg_2,cursor="hand2")
self.btn_2.place(x=683,y=0,width=683,height=160)
#bg img
img_3=Image.open(r"F:\STUDENT MANAGEMENT SYSTEM\pic\rrr.jpg")
img_3=img_3.resize((1366,608),Image.ANTIALIAS)
self.photoimg_3=ImageTk.PhotoImage(img_3)
bg_lbl=Label(self.root,image=self.photoimg_3,bd=2,relief=RIDGE)
bg_lbl.place(x=0,y=160,width=1366,height=608)
btn_exit=Button(lbl_title,text="Exit",command=self.exit_screen,font=("arial",12,"bold"),width=70,bg="red",fg="black")
btn_exit.place(x=1250,y=0,width=70,height=35)
#............................manage Frame.................................#
manage_frame=Frame(bg_lbl,bd=2,relief=RIDGE,bg="white")
manage_frame.place(x=13,y=45,width=1335,height=500)
DataLeftFrame.place(x=5,y=0,width=600,height=486)
#leftframe img
img_4=img_4.resize((650,100),Image.ANTIALIAS)
self.photoimg_4=ImageTk.PhotoImage(img_4)
my_img=Label(DataLeftFrame,image=self.photoimg_4,bd=2,relief=RIDGE)
Page | 22
my_img.place(x=0,y=0,width=590,height=130)
#Department
lbl_dep=Label(std_lbl_info_Frame,text="Department:",font=("arial",12,"bold",),bg="white")
lbl_dep.grid(row=0,column=0,padx=2,pady=10,sticky=W)
combo_dep=ttk.Combobox(std_lbl_info_Frame,textvariable=self.var_dep,font=("arial",10,"bold"),width=17,state="readonly")
combo_dep["value"]=("Select Department","Computer Science","IT","Art","Science","Biology")
combo_dep.current(0)
combo_dep.grid(row=0,column=1,padx=2,pady=10,sticky=W)
#Course
course_std=Label(std_lbl_info_Frame,text="Courses:",font=("arial",12,"bold",),bg="white")
course_std.grid(row=0,column=2,padx=2,pady=10,sticky=W)
com_txtcourse_std=ttk.Combobox(std_lbl_info_Frame,textvariable=self.var_course,font=("arial",10,"bold"),width=17,state="re
adonly")
com_txtcourse_std['value']=("Select Course","MCA","BCA","BE","B.Sc","B.A","B.com")
com_txtcourse_std.current(0)
com_txtcourse_std.grid(row=0,column=3,padx=2,pady=10,sticky=W)
#year ………………………………………………………..
current_year=Label(std_lbl_info_Frame,text="Year:",font=("arial",12,"bold",),bg="white")
current_year.grid(row=1,column=0,padx=2,pady=10,sticky=W)
com_txt_current_year=ttk.Combobox(std_lbl_info_Frame,textvariable=self.var_year,font=("arial",10,"bold"),width=17,state="re
adonly")
com_txt_current_year['value']=("Select Year","2019-2020","2020-2021","2021-2022","2022-2023","2023-2024")
com_txt_current_year.current(0)
com_txt_current_year.grid(row=1,column=1,padx=2,pady=10,sticky=W)
#semester
lebel_sem=Label(std_lbl_info_Frame,text="Semester:",font=("arial",12,"bold",),bg="white")
lebel_sem.grid(row=1,column=2,padx=2,pady=10,sticky=W)
Page | 23
comsem=ttk.Combobox(std_lbl_info_Frame,textvariable=self.var_semester,font=("arial",10,"bold"),width=17,state="readonly")
comsem['value']=("Select Semester","5th-sem","4th-sem","3ird-sem","2nd-sem","1st-sem")
comsem.current(0)
comsem.grid(row=1,column=3,padx=2,pady=10,sticky=W)
#student id
lbl_id=Label(std_lbl_class_Frame,text="StudentID No:",font=("arial",12,"bold",),bg="white")
lbl_id.grid(row=0,column=0,padx=2,pady=5,sticky=W)
id_entery=ttk.Entry(std_lbl_class_Frame,textvariable=self.va_std_id,font=("arial",10,"bold"),width=20)
id_entery.grid(row=0,column=1,sticky=W,padx=2,pady=5)
#student name
lbl_name=Label(std_lbl_class_Frame,text="Student Name:",font=("arial",12,"bold",),bg="white")
lbl_name.grid(row=0,column=2,padx=2,pady=5,sticky=W)
text_name=ttk.Entry(std_lbl_class_Frame,textvariable=self.var_std_name,font=("arial",10,"bold"),width=20)
text_name.grid(row=0,column=3,sticky=W,padx=2,pady=5)
#class Division
lbl_div=Label(std_lbl_class_Frame,text="Class Division:",font=("arial",12,"bold",),bg="white")
lbl_div.grid(row=1,column=0,padx=2,pady=3,sticky=W)
com_div=ttk.Combobox(std_lbl_class_Frame,textvariable=self.var_div,font=("arial",10,"bold"),width=17,state="readonly")
com_div['value']=("Select Division","A","B","C","D")
com_div.current(0)
com_div.grid(row=1,column=1,padx=2,pady=3,sticky=W)
#roll no.
lbl_roll=Label(std_lbl_class_Frame,text="Roll No:",font=("arial",12,"bold",),bg="white")
lbl_roll.grid(row=1,column=2,padx=2,pady=5,sticky=W)
text_roll=ttk.Entry(std_lbl_class_Frame,textvariable=self.var_roll,font=("arial",10,"bold"),width=20)
text_roll.grid(row=1,column=3,sticky=W,padx=2,pady=5)
#gender
lbl_gen=Label(std_lbl_class_Frame,text="Gender:",font=("arial",12,"bold",),bg="white")
lbl_gen.grid(row=2,column=0,padx=2,pady=3,sticky=W)
Page | 24
com_gen=ttk.Combobox(std_lbl_class_Frame,textvariable=self.var_gender,font=("arial",10,"bold"),width=17,state="readonly")
com_gen['value']=("Select Gender","Male","Female","others")
com_gen.current(0)
com_gen.grid(row=2,column=1,padx=2,pady=3,sticky=W)
#dob
lbl_dob=Label(std_lbl_class_Frame,text="DOB:",font=("arial",12,"bold",),bg="white")
lbl_dob.grid(row=2,column=2,padx=2,pady=5,sticky=W)
text_std_dob=ttk.Entry(std_lbl_class_Frame,textvariable=self.var_dob,font=("arial",10,"bold"),width=20)
text_std_dob.grid(row=2,column=3,sticky=W,padx=2,pady=5)
#email
lbl_eml=Label(std_lbl_class_Frame,text="Email:",font=("arial",12,"bold",),bg="white")
lbl_eml.grid(row=3,column=0,padx=2,pady=5,sticky=W)
text_std_eml=ttk.Entry(std_lbl_class_Frame,textvariable=self.var_email,font=("arial",10,"bold"),width=20)
text_std_eml.grid(row=3,column=1,sticky=W,padx=2,pady=5)
#mobile no
lbl_mob=Label(std_lbl_class_Frame,text="Mobile No:",font=("arial",12,"bold",),bg="white")
lbl_mob.grid(row=3,column=2,padx=2,pady=5,sticky=W)
text_std_mob=ttk.Entry(std_lbl_class_Frame,textvariable=self.var_phone,font=("arial",10,"bold"),width=20)
text_std_mob.grid(row=3,column=3,sticky=W,padx=2,pady=5)
#address
lbl_add=Label(std_lbl_class_Frame,text="Address:",font=("arial",12,"bold",),bg="white")
lbl_add.grid(row=4,column=0,padx=2,pady=5,sticky=W)
text_std_add=ttk.Entry(std_lbl_class_Frame,textvariable=self.var_address,font=("arial",10,"bold"),width=20)
text_std_add.grid(row=4,column=1,sticky=W,padx=2,pady=5)
# teacher
lbl_add=Label(std_lbl_class_Frame,text="Teacher:",font=("arial",12,"bold",),bg="white")
lbl_add.grid(row=4,column=2,padx=2,pady=5,sticky=W)
Page | 25
com_gen=ttk.Combobox(std_lbl_class_Frame,textvariable=self.var_teacher,font=("arial",10,"bold"),width=17,state="readonly")
btn_frame=Frame(DataLeftFrame,bd=2,relief=RIDGE,bg="white")
btn_frame.place(x=0,y=422,width=590,height=34)
#save
btn_save=Button(btn_frame,text="Save",command=self.add_data,font=("arial",11,"bold"),width=15,bg="blue",fg="white")
btn_save.grid(row=0,column=0,padx=1)
#update
btn_update=Button(btn_frame,text="Update",command=self.update_data,font=("arial",11,"bold"),width=15,bg="blue",fg="whi
te")
btn_update.grid(row=0,column=1,padx=1)
#delete
btn_delete=Button(btn_frame,text="Delete",command=self.delete_data,font=("arial",11,"bold"),width=15,bg="blue",fg="white
")
btn_delete.grid(row=0,column=2,padx=1)
#add new/reset
btn_add=Button(btn_frame,text="Reset",command=self.reset_data,font=("arial",11,"bold"),width=15,bg="blue",fg="white")
btn_add.grid(row=0,column=3,padx=1)
DataRightFrame.place(x=610,y=0,width=715,height=486)
# img1
Page | 26
img_5=img_5.resize((700,140),Image.ANTIALIAS)
self.photoimg_5=ImageTk.PhotoImage(img_5)
my_img=Label(DataRightFrame,image=self.photoimg_5,bd=2,relief=RIDGE)
my_img.place(x=0,y=0,width=705,height=130)
#search frame
Search_Frame=LabelFrame(manage_frame,bd=4,relief=RIDGE,padx=2,text="Search Student Records",font=("times new
roman",12,"bold"),fg="green",bg="white")
Search_Frame.place(x=615,y=155,width=705,height=60)
search_by=Label(Search_Frame,font=("arial",11,"bold"),text="Search By:",fg="red",bg="white")
search_by.grid(row=0,column=0,sticky=W,padx=2,pady=2)
self.var_com_search=StringVar()
com_txt_search=ttk.Combobox(Search_Frame,textvariable=self.var_com_search,
font=("arial",10,"bold"),width=17,state="readonly")
com_txt_search['value']=("Select Option","Roll","Phone","Student_id","Name")
com_txt_search.current(0)
com_txt_search.grid(row=0,column=1,padx=2,pady=3,sticky=W)
self.var_search=StringVar()
text_search=ttk.Entry(Search_Frame,textvariable=self.var_search,font=("arial",10,"bold"),width=20)
text_search.grid(row=0,column=2,sticky=W,padx=5)
btn_search=Button(Search_Frame,command=self.search_data,text="Search",font=("arial",11,"bold"),width=15,bg="blue",fg="w
hite")
btn_search.grid(row=0,column=3,padx=3,pady=1)
btn_search=Button(Search_Frame,command=self.fetch_data,text="Show
all",font=("arial",11,"bold"),width=15,bg="blue",fg="white")
btn_search.grid(row=0,column=4,padx=3,pady=1)
table_frame=Frame(DataRightFrame,bd=4,relief=RIDGE)
table_frame.place(x=0,y=190,width=705,height=268)
scroll_x=ttk.Scrollbar(table_frame,orient=HORIZONTAL)
scroll_y=ttk.Scrollbar(table_frame,orient=VERTICAL)
Page | 27
self.student_table=ttk.Treeview(table_frame,column=("dep","course","year","sem","id","name","div","roll","gender","dob","em
ail","phone","address","teacher"),xscrollcommand=scroll_x.set,yscrollcommand=scroll_y.set)
scroll_x.pack(side=BOTTOM,fill=X)
scroll_y.pack(side=RIGHT,fill=Y)
scroll_x.config(command=self.student_table.xview)
scroll_y.config(command=self.student_table.yview)
self.student_table.heading("dep",text="Department")
self.student_table.heading("course",text="Course")
self.student_table.heading("year",text="Year")
self.student_table.heading("sem",text="Semester")
self.student_table.heading("id",text="Student ID")
self.student_table.heading("name",text="Student Name")
self.student_table.heading("div",text="Class Div")
self.student_table.heading("roll",text="Roll No")
self.student_table.heading("gender",text="Gender")
self.student_table.heading("dob",text="DOB")
self.student_table.heading("email",text="Email")
self.student_table.heading("phone",text="Phone No")
self.student_table.heading("address",text="Address")
self.student_table.heading("teacher",text="Teacher")
self.student_table["show"]="headings"
self.student_table.column("dep",width=100)
self.student_table.column("course",width=100)
self.student_table.column("year",width=100)
self.student_table.column("sem",width=100)
self.student_table.column("id",width=100)
self.student_table.column("name",width=100)
self.student_table.column("div",width=100)
self.student_table.column("roll",width=100)
self.student_table.column("gender",width=100)
self.student_table.column("dob",width=100)
self.student_table.column("email",width=100)
self.student_table.column("phone",width=100)
self.student_table.column("address",width=100)
self.student_table.column("teacher",width=100)
self.student_table.pack(fill=BOTH,expand=1)
self.student_table.bind("<ButtonRelease>",self.get_cursor)
self.fetch_data()
Page | 28
def add_data(self):
if(self.var_dep.get()==""or self.var_email.get()==""or self.va_std_id.get()==""):
messagebox.showerror("Error","All Fields Are required")
else:
try:
conn=mysql.connector.connect(host="localhost",username="root",password="root123",database="studentdatabase")
my_cursur=conn.cursor()
my_cursur.execute("insert into student values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",(
self.var_dep.get(),
self.var_course.get(),
self.var_year.get(),
self.var_semester.get(),
self.va_std_id.get(),
self.var_std_name.get(),
self.var_div.get(),
self.var_roll.get(),
self.var_gender.get(),
self.var_dob.get(),
self.var_email.get(),
self.var_phone.get(),
self.var_address.get(),
self.var_teacher.get()
))
conn.commit()
self.fetch_data()
conn.close()
messagebox.showinfo("Success","Student has been added!",parent=self.root)
except Exception as es:
messagebox.showerror("Error",f"Due To:{str(es)}",parent=self.root)
# fetch function
def fetch_data(self):
conn=mysql.connector.connect(host="localhost",username="root",password="root123",database="studentdatabase")
my_cursur=conn.cursor()
my_cursur.execute("select * from student")
data=my_cursur.fetchall()
if len(data)!=0:
self.student_table.delete(*self.student_table.get_children())
for i in data:
self.student_table.insert("",END,values=i)
conn.commit()
conn.close()
# get cursor
def get_cursor(self,event=""):
cursor_row=self.student_table.focus()
Page | 29
content=self.student_table.item(cursor_row)
data=content["values"]
self.var_dep.set(data[0])
self.var_course.set(data[1])
self.var_year.set(data[2])
self.var_semester.set(data[3])
self.va_std_id.set(data[4])
self.var_std_name.set(data[5])
self.var_div.set(data[6])
self.var_roll.set(data[7])
self.var_gender.set(data[8])
self.var_dob.set(data[9])
self.var_email.set(data[10])
self.var_phone.set(data[11])
self.var_address.set(data[12])
self.var_teacher.set(data[13])
def update_data(self):
if(self.var_dep.get()=="" or self.var_email.get()=="" or self.va_std_id.get()==""):
messagebox.showerror("Error","All Fields Are required")
else:
try:
update=messagebox.askyesno("Update","Are you sure update this student data",parent=self.root)
if update>0:
conn=mysql.connector.connect(host="localhost",username="root",password="root123",database="studentdatabase")
my_cursur=conn.cursor()
my_cursur.execute("update student set
Dep=%s,Course=%s,Year=%s,Semester=%s,Name=%s,Division=%s,Roll=%s,Gender=%s,Dob=%s,Email=%s,Phone=%s,Address=%s,
Teacher=%s where Student_id=%s",(
self.var_dep.get(),
self.var_course.get(),
self.var_year.get(),
self.var_semester.get(),
self.var_std_name.get(),
self.var_div.get(),
self.var_roll.get(),
self.var_gender.get(),
self.var_dob.get(),
self.var_email.get(),
self.var_phone.get(),
self.var_address.get(),
self.var_teacher.get(),
self.va_std_id.get()
))
else:
if not update:
return
Page | 30
conn.commit()
self.fetch_data()
conn.close()
def delete_data(self):
if self.va_std_id.get()=="":
else:
try:
if Delete>0:
conn=mysql.connector.connect(host="localhost",username="root",password="root123",database="studentdatabase")
my_cursur=conn.cursor()
value=(self.va_std_id.get(),)
my_cursur.execute(sql,value)
else:
if not Delete:
return
conn.commit()
self.fetch_data()
conn.close()
messagebox.showerror("Error",f"Due To:{str(es)}",parent=self.root)
Page | 31
def reset_data(self):
self.var_dep.set("Select Department")
self.var_course.set("Select Course")
self.var_year.set("Select Year")
self.var_semester.set("Select Semester")
self.va_std_id.set("")
self.var_std_name.set("")
self.var_div.set("Select Division")
self.var_roll.set("")
self.var_gender.set("")
self.var_dob.set("")
self.var_email.set("")
self.var_phone.set("")
self.var_address.set("")
self.var_teacher.set("")
def search_data(self):
if self.var_com_search.get()=="" or self.var_search.get()=="":
messagebox.showerror("Error","Pease Select Option")
else:
try:
conn=mysql.connector.connect(host="localhost",username="root",password="root123",database="studentdatabase")
my_cursur=conn.cursor()
my_cursur.execute("select * from student where " +str(self.var_com_search.get())+" LIKE
'%"+str(self.var_search.get())+"%'")
rows=my_cursur.fetchall()
if len(rows)!=0:
self.student_table.delete(*self.student_table.get_children())
for i in rows:
self.student_table.insert("",END,values=i)
conn.commit()
conn.close()
except Exception as es:
messagebox.showerror("Error",f"Due To:{str(es)}",parent=self.root)
def open_img(self):
fln=filedialog.askopenfilename(initialdir=os.getcwd(),title="Open Images",filetypes=(("JPG File","*.jpg"),("PNG
File","*.png"),("ALL Files","*.*")))
img=Image.open(fln)
img_browse=img.resize((683,160),Image.ANTIALIAS)
Page | 32
self.photoimg_browse=ImageTk.PhotoImage(img_browse)
self.btn_1.config(image=self.photoimg_browse)
def open_img_2(self):
fln=filedialog.askopenfilename(initialdir=os.getcwd(),title="Open Images",filetypes=(("JPG File","*.jpg"),("PNG
File","*.png"),("ALL Files","*.*")))
img_2=Image.open(fln)
img_browse_2=img_2.resize((683,160),Image.ANTIALIAS)
self.photoimg_browse_2=ImageTk.PhotoImage(img_browse_2)
self.btn_2.config(image=self.photoimg_browse_2)
def exit_screen(self):
root.destroy()
if __name__ =="__main__":
root=Tk()
obj=Student(root)
root.mainloop()
Page | 33
5.2 SNAPSHOTS
Page | 34
Page | 35
CHAPTER 6
TESTING
Page | 36
6.1 TESTING
Testing is more than just debugging. The purpose of testing can be quality assurance,
verification and validation, or reliability estimation. Correctness testing and reliability
testing are two major areas of testing. Software testing is a trade-off between budget, time
and quality.
Software Testing
Software Testing is the process of executing a program or system with the intent of finding
errors. Or, it involves any activity aimed at evaluating an attribute or capability of a
program or system and determining that it meet sits required results. Software is not unlike
other physical processes where inputs are received and outputs are produced. Where
software differs is in the manner in which it fails. Unlike most physical systems, most of the
defects in software are design errors, not manufacturing defects.
To improve quality
As computers and software are used in critical applications, the outcome of a bug can be
severe. Bugs can cause huge losses.
Black-box testing
The black-box approach is a testing method in which test data are derived from the
specified function requirements without regard to the final program structure. It is also
termed data-driven, input/output driven or requirements-based testing. A testing method
Emphasized on executing the functions and examination of their input and output data.
White-box testing
Contrary to black-box testing, software is viewed as a white-box, or glass-box in white-box
testing, as the structure and flow of the software under test are visible to the tester.
Page | 37
This testing is based on knowledge of the internal logic of an application’s code. Testing
plans are made according to the details of the software implementation, such as
programming language, logic, and styles. Test cases are derived from the program
structure. White-box testing is also called glass-box testing, logic-driven testing or design-
based testing.
Unit testing
This involves testing of individual software components or modules. Typically done by the
programmer and not by testers, as it requires detailed knowledge of the internal program
design and code.
System testing
Entire system is tested as per the requirements. Black-box type testing that is based on
overall requirements specifications, covers all combined parts of a system.
End-to-end testing
Similar to system testing, involves testing of a complete application environment in a
situation that mimics real-world use, such as interacting with a database, using network
communications, or interacting with other hardware, applications, or systems if
appropriate.
Usability testing
User-friendliness check. Application flow is tested, Can new user understand the application
easily, Proper help documented whenever user stuck at any point. Basically system
navigation is checked in this testing.
Install/uninstall testing
Tested for full, partial, or upgrade install/uninstall processes on different operating systems
under different hardware, software environment.
Recovery testing
Testing how well a system recovers from crashes, hardware failures, or other catastrophic
problems.
Security testing
Can system be penetrated by any hacking way. Testing how well the system protects
against unauthorized internal or external access. Checked if system, database is safe from
external attacks.
Page | 38
Compatibility testing
Compatibility Testing is a type of Software testing to check whether your software is
capable of running on different hardware, operating systems, applications, network
environments or Mobile devices.
Compatibility Testing is a type of Non-functional testing.
Comparison testing
Comparison testing refers to a type of testing where the strength and weakness of the
currently developed software produced is compared with already existing software
products in the market.
Alpha testing
Alpha testing is a type of testing that is done on an application towards the end of a
development process when the product is almost in a usable state.
Beta testing
Beta testing is one of the final steps in your software development lifecycle (SDLC) before a
product goes live.
Page | 39
CHAPTER 7
BENEFITS
Page | 40
7.1 BENEFITS
Page | 41
CHAPTER 8
LIMITATIONS
Page | 42
8.1 LIMITATIONS
Software is limited to Desktop only.
System requires python interpreter installed on the system.
All options of student management are not included in current version.
Security options provide only low level security against beginner attackers.
GUI is in English only.
Page | 43
CHAPTER 9
FUTURE ENHANCEMENT
Page | 44
Page | 45
CHAPTER 10
CONCLUSION
Page | 46
10.1 CONCLUSION
The project entitled “Student Management System” is developed using Python Tkinter as
front end and MYSQL database in back end to computerize the process of management of
student records. This project covers only the basic features required.
Page | 47
CHAPTER 11
REFERENCES
Page | 48
11.1 REFERENCES
https://www.geeksforgeeks.org/python-gui-tkinter/
https://www.javatpoint.com/python-tkinter
https://www.python.org/
https://www.tutorialspoint.com/python/python_gui_programming.htm
Wikipedia
Page | 49