You are on page 1of 29

Index

S.No Contents Pg.No Signature

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

Alpha Testing: It is the most common type of testing used in the


software industry. The objective of this testing is to identify all
possible issues or defects before releasing it into the market or to the
user. It is conducted at the developer’s site.
Beta Testing: It is a formal type of software testing which is carried
out by the customers. It is performed in a real environment before
releasing the products into the market for the actual end-users. It is
carried out to ensure that there are no major failures in the software or
product and it satisfies the business requirement. Beta Testing is
successful when the customer accepts the software.
White Box Testing: White box testing is based on the knowledge about
the internal logic of an application’s code. It is also known as Glass box
Testing. Internal Software and code working should be known for
performing this type of testing. These tests are based on the coverage of
the code statements, branches, paths, conditions etc.
Black Box Testing: It is a software testing, method in which the
internal structure or design of the item to be tested is not known to the
tester. This method of testing can be applied virtually to every level of
the software 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:

1. Customers can give short and brief information of their contact


details.
2. The firm can get instant details about the customers in their
database.
3. With this python program, the firm can easily add and delete the
contact details of their customers.
4. The main details of the customers which are needed to be recorded
through this program are their:
 First name
 Last name
 Gender
 Age
 Address
 Contact
5. Contact management increases customer satisfaction.

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.

Import sqlite3 module


statement imports the sqlite3 module in the program. Using the classes and
import sqlite3
methods defined in the sqlite3 module we can communicate with the SQLite database.

Use the connect() method


Use the connect() method of the connector class with the database name. To establish a
connection to SQLite, you need to pass the database name you want to connect. If you
specify the database file name that already presents on the disk, it will connect to it. But if
your specified SQLite database file doesn’t exist, SQLite creates a new database for you.
This method returns the SQLite Connection Object if the connection is successful.

Use the cursor() method


Use the cursor() method of a connection class to create a cursor object to execute SQLite
command/queries from Python.

Use the execute() method


The execute() methods run the SQL query and return the result.

8
Extract result using fetchall()
Use cursor.fetchall() or fetchone() or fetchmany() to read query result.

Close cursor and connection objects


use cursor.clsoe() and connection.clsoe() method to close the cursor and SQLite connections after
your work completes

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]

UPDATE DATA pdateData


Update and EditThe terms "update" and "edit" are used synonymously to make
changes to text, data, images and video. ... However, "update" refers to changes
within the same version, while "upgrade" means switching to an entirely new
version (upgrades are huge updates).

10
FLOW CHART

Contact
Management

Phone Number People’s


Management Management

Contact
Manageme
nt
System

Reminders Mobile’s
Management Management

Address
Management

11
ABOUT CONTACT MANAGEMENT

Contact Management System project is written in Python. The project


file contains a python script (index.py). This is a simple GUI based project
which is very easy to understand and use. Talking about the system, it contains
all the required functions which include adding, viewing, deleting and updating
contact lists. While adding the contact of a person, he/she has to provide first
name, last name, gender, address and contact details. The user can also update
the contact list if he/she wants to. For this, the user has to double-click on a
record that he/she wishes to edit. The system shows the contact details in a list
view. And also the user easily delete any contact details.

This GUI based Contact Management system provides the simplest


management of contact details. In short, this projects mainly focus on CRUD.
There’s an external database connection file used in this mini project to save
user’s data permanently. In order to run the project, you must have
installed Python, on your PC. This is a simple GUI Based system, specially
written for the beginners.

12
SOURCE CODE
from tkinter import *
import sqlite3
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox

#DEVELOPED BY Adithi Jebaz Larkspur


root = Tk()
root.title("Contact List")
width = 700
height = 400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x = (screen_width/2) - (width/2)
y = (screen_height/2) - (height/2)
root.geometry("%dx%d+%d+%d" % (width, height, x, y))
root.resizable(0, 0)
root.config(bg="#6666ff")

#============================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

You might also like