Contact Management Final
Contact Management Final
Contact Management Final
1
SYSTEM REQUIREMENT
2
FEASIBILITY STUDY
3
ERRORS AND ITS TYPES
4
TESTING
5
MAINTENANCE
6
FUNCTION USED
7
FLOW CHART OF PROGRAM
8
SOURCE CODE
9
OUTPUT
10
CONCLUSION
11
BIBLIOGRAPHY
1
SYSTEM
REQUIREMENTS
HARDWARE:
✓ Processor
✓ Keyboard
✓ Minimum memory - 2GB
SOFTWARE:
✓ Operating System –OS7, OS8
✓ Python IDLE
2
FEASIBILITY STUDY
Feasibility study is a system proposal according to its work, ability,
impact on the operation ability to meet the needs of users and efficient
use of resources. An important outcome of preliminary investigations
the determination of that system requested feasible.
ECONOMICAL FEASIBILITY:
Economics analysis is the most frequent use method for evaluating the
effectiveness of the candidates the benefits and savings that are
expected from system and compare them with cost. This software is
not very costly. It just worth Rs.5500/-.So users records can be
maintained at a cheaper cost and every school would like to use this
software so that the student’s records can be managed easily.
TECHNICAL FEASIBILTY :
Technical feasibility center on the existing computer system and to
what extent it can support the proposed task. This involves financial
consideration to accommodate technical enhancements. It is technically
feasible because whatever technology is needed to develop this
software is easily available.
3
ERRORS AND ITS
TYPES
An error, some time called “A BUG” is anything in the code that
prevents a program from compiling and running correctly. There are
broadly three types of errors as follows:
Compile- time errors: Errors that occurs during compilation of a
program is called compile time error. It has two types as follows:
a. Syntax error: It refers to formal rules governing the construction of
valid statements in a language.
b. Semantics error: It refers to the set of rules which give the meaning
of a statement.
Run time Errors: Errors that occur during the execution of program
are run time errors. These are harder to detect errors. Some run-time
error stop the execution of program which is then called program
“Crashed”.
Logical Errors: Sometimes, even if you don’t encounter any error
during compiling-time and runtime, your program does not provide the
correct result. This is because of the programmer’s mistaken analysis
of the problem he or she is trying to solve. Such errors are called
logical error.
4
TESTING
5
MAINTENANCE
Programming maintenance refers to the modifications in the program.
After it has been completed, in order to meet changing requirement or
to take care of the errors that shown up. There are four types of
maintenance:
Corrective Maintenance: When the program after compilation shows
error because of some unexpected situations, untested areas such errors
are fixed up by Corrective maintenance.
Adaptive Maintenance: Changes in the environment in which an
information system operates may lead to system management. To
accommodate changing needs time to time maintenance is done and is
called Adaptive maintenance.
Preventive Maintenance: If possible the errors could be anticipated
before they actually occur; the maintenance is called Preventive
maintenance.
Perfective Maintenance: In this rapidly changing world, information
technology is the fastest growing area. If the existing system is
maintained to keep tuned with the new features, new facilities, new
capabilities, it is said to be Perfective maintenance.
6
ABSTRACT
The aim of this project is to create a platform for people to find the
contact details in an easy and better way through python.
Some of the features of this program are:
7
MODULES USED
DATABASE()
Python SQLite3 module is used to integrate the DQLite database with Python. It
is a standardized Python DBI API 2.0 and provides a straightforward and simple-
to-use interface for interacting with SQLite databases. There is no need to install
this module separately as it comes along with Python after the 2.5x version.
8
Extract result using fetchall()
Use cursor.fetchall() or fetchone() or fetchmany() to read query result.
9
DELETE DATA
As we all are aware that Python considers everything as an object, that is why
we can easily use del to delete a dictionary in Python by deleting elements
individually. Python del keyword can also be used to delete a key-value pair from
the input dictionary values. Syntax: del dict [key]
10
FLOW CHART
Contact
Management
Contact
Manageme
nt
System
Reminders Mobile’s
Management Management
Address
Management
11
ABOUT CONTACT MANAGEMENT
12
SOURCE CODE
from tkinter import *
import sqlite3
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox
#============================VARIABLES===================================
FIRSTNAME = StringVar()
LASTNAME = StringVar()
GENDER = StringVar()
AGE = StringVar()
ADDRESS = StringVar()
CONTACT = StringVar()
#============================METHODS=====================================
def Database():
conn = sqlite3.connect("pythontut.db")
cursor = conn.cursor()
13
cursor.execute("CREATE TABLE IF NOT EXISTS `member` (mem_id
INTEGER NOT NULL PRIMARY KEY
AUTOINCREMENT, firstname TEXT, lastname TEXT, gender TEXT, age
TEXT, address TEXT, contact TEXT)")
cursor.execute("SELECT * FROM `member` ORDER BY `lastname` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
def SubmitData():
if FIRSTNAME.get() == "" or LASTNAME.get() == "" or GENDER.get()
== "" or AGE.get() == "" or ADDRESS.get() == "" or CONTACT.get() == "":
result = tkMessageBox.showwarning('', 'Please Complete The Required
Field', icon="warning")
else:
tree.delete(*tree.get_children())
conn = sqlite3.connect("pythontut.db")
cursor = conn.cursor()
cursor.execute("INSERT INTO `member` (firstname, lastname, gender, age,
address, contact) VALUES(?, ?, ?, ?, ?, ?)", (str(FIRSTNAME.get()),
str(LASTNAME.get()), str(GENDER.get()), int(AGE.get()),
str(ADDRESS.get()), str(CONTACT.get())))
conn.commit()
cursor.execute("SELECT * FROM `member` ORDER BY `lastname` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
FIRSTNAME.set("")
LASTNAME.set("")
GENDER.set("")
AGE.set("")
14
ADDRESS.set("")
CONTACT.set("")
def UpdateData():
if GENDER.get() == "":
result = tkMessageBox.showwarning('', 'Please Complete The Required
Field', icon="warning")
else:
tree.delete(*tree.get_children())
conn = sqlite3.connect("pythontut.db")
cursor = conn.cursor()
cursor.execute("UPDATE `member` SET `firstname` = ?, `lastname` = ?,
`gender` =?, `age` = ?, `address` = ?, `contact` = ? WHERE `mem_id` = ?",
(str(FIRSTNAME.get()), str(LASTNAME.get()), str(GENDER.get()),
str(AGE.get()), str(ADDRESS.get()), str(CONTACT.get()), int(mem_id)))
conn.commit()
cursor.execute("SELECT * FROM `member` ORDER BY `lastname` ASC")
fetch = cursor.fetchall()
for data in fetch:
tree.insert('', 'end', values=(data))
cursor.close()
conn.close()
FIRSTNAME.set("")
LASTNAME.set("")
GENDER.set("")
AGE.set("")
ADDRESS.set("")
CONTACT.set("")
def OnSelected(event):
global mem_id, UpdateWindow
curItem = tree.focus()
contents =(tree.item(curItem))
selecteditem = contents['values']
15
mem_id = selecteditem[0]
FIRSTNAME.set("")
LASTNAME.set("")
GENDER.set("")
AGE.set("")
ADDRESS.set("")
CONTACT.set("")
FIRSTNAME.set(selecteditem[1])
LASTNAME.set(selecteditem[2])
AGE.set(selecteditem[4])
ADDRESS.set(selecteditem[5])
CONTACT.set(selecteditem[6])
UpdateWindow = Toplevel()
UpdateWindow.title("Contact List")
width = 400
height = 300
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = ((screen_width/2) + 450) - (width/2)
y = ((screen_height/2) + 20) - (height/2)
UpdateWindow.resizable(0, 0)
UpdateWindow.geometry("%dx%d+%d+%d" % (width, height, x, y))
if 'NewWindow' in globals():
NewWindow.destroy()
#===================FRAMES==============================
FormTitle = Frame(UpdateWindow)
FormTitle.pack(side=TOP)
ContactForm = Frame(UpdateWindow)
ContactForm.pack(side=TOP, pady=10)
RadioGroup = Frame(ContactForm)
Male = Radiobutton(RadioGroup, text="Male", variable=GENDER,
value="Male", font=('arial', 14)).pack(side=LEFT)
Female = Radiobutton(RadioGroup, text="Female", variable=GENDER,
value="Female", font=('arial', 14)).pack(side=LEFT)
16
#===================LABELS==============================
lbl_title = Label(FormTitle, text="Updating Contacts", font=('arial', 16),
bg="orange", width = 300)
lbl_title.pack(fill=X)
lbl_firstname = Label(ContactForm, text="Firstname", font=('arial', 14),
bd=5)
lbl_firstname.grid(row=0, sticky=W)
lbl_lastname = Label(ContactForm, text="Lastname", font=('arial', 14),
bd=5)
lbl_lastname.grid(row=1, sticky=W)
lbl_gender = Label(ContactForm, text="Gender", font=('arial', 14), bd=5)
lbl_gender.grid(row=2, sticky=W)
lbl_age = Label(ContactForm, text="Age", font=('arial', 14), bd=5)
lbl_age.grid(row=3, sticky=W)
lbl_address = Label(ContactForm, text="Address", font=('arial', 14), bd=5)
lbl_address.grid(row=4, sticky=W)
lbl_contact = Label(ContactForm, text="Contact", font=('arial', 14), bd=5)
lbl_contact.grid(row=5, sticky=W)
#===================ENTRY===============================
firstname = Entry(ContactForm, textvariable=FIRSTNAME, font=('arial',
14))
firstname.grid(row=0, column=1)
lastname = Entry(ContactForm, textvariable=LASTNAME, font=('arial',
14))
lastname.grid(row=1, column=1)
RadioGroup.grid(row=2, column=1)
age = Entry(ContactForm, textvariable=AGE, font=('arial', 14))
age.grid(row=3, column=1)
address = Entry(ContactForm, textvariable=ADDRESS, font=('arial', 14))
address.grid(row=4, column=1)
contact = Entry(ContactForm, textvariable=CONTACT, font=('arial', 14))
contact.grid(row=5, column=1)
#==================BUTTONS==============================
17
btn_updatecon = Button(ContactForm, text="Update", width=50,
command=UpdateData)
btn_updatecon.grid(row=6, columnspan=2, pady=10)
#fn1353p
def DeleteData():
if not tree.selection():
result = tkMessageBox.showwarning('', 'Please Select Something First!',
icon="warning")
else:
result = tkMessageBox.askquestion('', 'Are you sure you want to delete
this record?', icon="warning")
if result == 'yes':
curItem = tree.focus()
contents =(tree.item(curItem))
selecteditem = contents['values']
tree.delete(curItem)
conn = sqlite3.connect("pythontut.db")
cursor = conn.cursor()
cursor.execute("DELETE FROM `member` WHERE `mem_id` =
%d" % selecteditem[0])
conn.commit()
cursor.close()
conn.close()
def AddNewWindow():
global NewWindow
FIRSTNAME.set("")
LASTNAME.set("")
GENDER.set("")
AGE.set("")
ADDRESS.set("")
CONTACT.set("")
NewWindow = Toplevel()
18
NewWindow.title("Contact List")
width = 400
height = 300
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = ((screen_width/2) - 455) - (width/2)
y = ((screen_height/2) + 20) - (height/2)
NewWindow.resizable(0, 0)
NewWindow.geometry("%dx%d+%d+%d" % (width, height, x, y))
if 'UpdateWindow' in globals():
UpdateWindow.destroy()
#===================FRAMES==============================
FormTitle = Frame(NewWindow)
FormTitle.pack(side=TOP)
ContactForm = Frame(NewWindow)
ContactForm.pack(side=TOP, pady=10)
RadioGroup = Frame(ContactForm)
Male = Radiobutton(RadioGroup, text="Male", variable=GENDER,
value="Male", font=('arial', 14)).pack(side=LEFT)
Female = Radiobutton(RadioGroup, text="Female", variable=GENDER,
value="Female", font=('arial', 14)).pack(side=LEFT)
#===================LABELS==============================
lbl_title = Label(FormTitle, text="Adding New Contacts", font=('arial', 16),
bg="#66ff66", width = 300)
lbl_title.pack(fill=X)
lbl_firstname = Label(ContactForm, text="Firstname", font=('arial', 14),
bd=5)
lbl_firstname.grid(row=0, sticky=W)
lbl_lastname = Label(ContactForm, text="Lastname", font=('arial', 14),
bd=5)
lbl_lastname.grid(row=1, sticky=W)
lbl_gender = Label(ContactForm, text="Gender", font=('arial', 14), bd=5)
lbl_gender.grid(row=2, sticky=W)
lbl_age = Label(ContactForm, text="Age", font=('arial', 14), bd=5)
19
lbl_age.grid(row=3, sticky=W)
lbl_address = Label(ContactForm, text="Address", font=('arial', 14), bd=5)
lbl_address.grid(row=4, sticky=W)
lbl_contact = Label(ContactForm, text="Contact", font=('arial', 14), bd=5)
lbl_contact.grid(row=5, sticky=W)
#===================ENTRY===============================
firstname = Entry(ContactForm, textvariable=FIRSTNAME, font=('arial',
14))
firstname.grid(row=0, column=1)
lastname = Entry(ContactForm, textvariable=LASTNAME, font=('arial',
14))
lastname.grid(row=1, column=1)
RadioGroup.grid(row=2, column=1)
age = Entry(ContactForm, textvariable=AGE, font=('arial', 14))
age.grid(row=3, column=1)
address = Entry(ContactForm, textvariable=ADDRESS, font=('arial', 14))
address.grid(row=4, column=1)
contact = Entry(ContactForm, textvariable=CONTACT, font=('arial', 14))
contact.grid(row=5, column=1)
#==================BUTTONS==============================
btn_addcon = Button(ContactForm, text="Save", width=50,
command=SubmitData)
btn_addcon.grid(row=6, columnspan=2, pady=10)
#============================FRAMES======================================
Top = Frame(root, width=500, bd=1, relief=SOLID)
Top.pack(side=TOP)
Mid = Frame(root, width=500, bg="#6666ff")
Mid.pack(side=TOP)
20
MidLeft = Frame(Mid, width=100)
MidLeft.pack(side=LEFT, pady=10)
MidLeftPadding = Frame(Mid, width=370, bg="#6666ff")
MidLeftPadding.pack(side=LEFT)
MidRight = Frame(Mid, width=100)
MidRight.pack(side=RIGHT, pady=10)
TableMargin = Frame(root, width=500)
TableMargin.pack(side=TOP)
#============================LABELS======================================
lbl_title = Label(Top, text="Contact Management System", font=('arial', 16),
width=500)
lbl_title.pack(fill=X)
#============================ENTRY=======================================
firstname = Entry(ContactForm, textvariable=FIRSTNAME, font=('arial',
14))
firstname.grid(row=0, column=1)
lastname = Entry(ContactForm, textvariable=LASTNAME, font=('arial',
14))
lastname.grid(row=1, column=1)
RadioGroup.grid(row=2, column=1)
age = Entry(ContactForm, textvariable=AGE, font=('arial', 14))
age.grid(row=3, column=1)
address = Entry(ContactForm, textvariable=ADDRESS, font=('arial', 14))
address.grid(row=4, column=1)
contact = Entry(ContactForm, textvariable=CONTACT, font=('arial', 14))
contact.grid(row=5, column=1)
#============================BUTTONS=====================================
btn_add = Button(MidLeft, text="+ ADD NEW", bg="#66ff66",
command=AddNewWindow)
btn_add.pack()
btn_delete = Button(MidRight, text="DELETE", bg="red",
command=DeleteData)
btn_delete.pack(side=RIGHT)
#============================TABLES======================================
21
scrollbarx = Scrollbar(TableMargin, orient=HORIZONTAL)
scrollbary = Scrollbar(TableMargin, orient=VERTICAL)
tree = ttk.Treeview(TableMargin, columns=("MemberID", "Firstname",
"Lastname", "Gender", "Age", "Address", "Contact"), height=400,
selectmode="extended", yscrollcommand=scrollbary.set,
xscrollcommand=scrollbarx.set)
scrollbary.config(command=tree.yview)
scrollbary.pack(side=RIGHT, fill=Y)
scrollbarx.config(command=tree.xview)
scrollbarx.pack(side=BOTTOM, fill=X)
tree.heading('MemberID', text="MemberID", anchor=W)
tree.heading('Firstname', text="Firstname", anchor=W)
tree.heading('Lastname', text="Lastname", anchor=W)
tree.heading('Gender', text="Gender", anchor=W)
tree.heading('Age', text="Age", anchor=W)
tree.heading('Address', text="Address", anchor=W)
tree.heading('Contact', text="Contact", anchor=W)
tree.column('#0', stretch=NO, minwidth=0, width=0)
tree.column('#1', stretch=NO, minwidth=0, width=0)
tree.column('#2', stretch=NO, minwidth=0, width=80)
tree.column('#3', stretch=NO, minwidth=0, width=120)
tree.column('#4', stretch=NO, minwidth=0, width=90)
tree.column('#5', stretch=NO, minwidth=0, width=80)
tree.column('#6', stretch=NO, minwidth=0, width=120)
tree.column('#7', stretch=NO, minwidth=0, width=120)
tree.pack()
tree.bind('<Double-Button-1>', OnSelected)
#============================INITIALIZATION==============================
if __name__ == '__main__':
Database()
root.mainloop()
22
OUTPUT
Table creation
23
Adding Details
24
Details Added
25
Deleting Details
26
Contact Deleted
27
CONCLUSION
Python supports both function-oriented and structure-oriented
programming. It has features of dynamic memory management
which can make use of computational resources efficiently. It is
also compatible with all popular operating systems and platforms.
Hence, this language can be universally accepted by all
programmers.
28
BIBLIOGRAPHY
Textbooks:
Computer Science with python by Sumita Arora
Computer Science with python by Preeti Arora
Websites:
https://en.wikipedia.org/
http://python.mykvs.in/
29