Sie sind auf Seite 1von 23

GALGOTIAS COLLEGE OF ENGINEERING

AND TECHNOLOGY

Session 2019-20
MINI PROJECT/INTERNSHIP
ON
TOPIC:-
BACHELOR OF ENGINEERING
(DEPARTMENT OF INFORMATION TECHNOLOGY)
SUBMITTED TO:
MR.RANJEET

SUBMITTED BY:-
AYESHA FALAK

3RD SEMESTER
DEPARTMENT OF INFORMATION AND TECHNOLOGY
ABSTRACT

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 can easily delete any
contact details.

This GUI based Contact Management system provides the simplest management of
contact details. In short, this project mainly focuses on CRUD.
TABLE OF CONTENT

1. INTRODUCTION
1.1. SCOPE
1.2. FUNCTIONAL REQUIREMENT
1.3. NON-FUNCTIONAL REQUIREMENT
1.4. GOAL AND CONSTRAINTS
2. DESIGN
3. IMPLEMENTATION
4. OUTPUT
5. CONCLUSION
6. REFRENCES
1.INTRODUCTION
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.

This system should be capable of not just storing the details about the pre-existing
customers but also performing necessary updates, as well as adding new
information about recent customer activities. Such a system can be referred to as a
Contact Management System.

1.1.SCOPE
The principle behind constructing a Contact Management System is to effectively
retrieve and implement any information that an organization may have on a pre-
existing customer.
All the information related to a particular customer can be linked and archived only
to be retrieved later when they are required most. What should be more noteworthy
is the fact that all of this can be arranged over every single terminal and at an
affordable cost.

Once a company has established a Contact Management System, it can cater to the
needs of the customer better. The records of the customer can now be studied to
understand his or her preferences and implement them for each individual lead.
This gives way to contact personalization.

By managing contacts, the organization can also look for opportunities to upsell
and cross-sell a product or service depending on the customer’s current situation.
By doing so, the company achieves a two-part objective.
On one hand, it establishes a relationship and wins the trust of the customer with
consistent assistance. On the other hand, a happy customer can also generate the
maximum profits as well as an assured guarantee that he or she will visit the
company again sooner or later.

1.2.FUNCTIONAL REQUIREMENTS

1. Integration of Email, Contacts, Tasks, and Calendar. Supporting your


network requires all of those, so a tool to help you manage it should too. (I refer
bellow to an entry in any one of these as an event.) My favorite piece of
integration is the automatic add of new contacts to my contact lists.
2. Reminders for events relevant to your contacts. Any good calendar should do
this. Unfortunately, most require the calendar to be open to perform
this. Hosted calendars like Google’s and Yahoo’s, allow you to be reminded by
email. A handy function for those of us on the run.
3. Reminders to reach out to your contacts. You can do this manually now
through tasks or using your calendar, but this is ripe for automation.
4. Provide context about each contact. This should be presented when you are
reading or creating a task/email/meeting in your system. How you know the
person, and the last time you saw them, etc., are usually available through
searching your contacts and calendar if you keep track of these, but again, ripe
for automation.
5. Provide context about each conversation. Latest emails, events, etc. each time
you are creating a task/email/meeting in your system.
6. Show tasks outstanding and recently completed for the individuals in each
action. A summary of the tasks you owe someone can help define a productive
conversation.
7. Show tasks outstanding and recently completed by the individuals in each
action. A summary of what you are owed, similarly can help define a
productive conversation.
8. Automatic tagging of actions and participants. With all of the natural
language processing developments over the recent years, it would be relatively
simple to pull themes from the content of each event and record those along
with the participants. When you create new events, the tag database could be
polled as you are creating a new event to recommend people who may be
interested, and other relevant topics. Would be a helpful plugin for your word
processor too.
1.3. NON-FUNCTIONAL REQUIREMENTS
Usability:
Prioritize the important functions of the system based on usage patterns.
Frequently used functions should be tested for usability, as should
complex and critical functions. Be sure to create a requirement for this.
Reliability:
Users have to trust the system, even after using it for a long time.
Your goal should be a long MTBF (mean time between failures).
Create a requirement that data created in the system will be retained for a
number of years without the data being changed by the system.
It’s a good idea to also include requirements that make it easier to monitor
system performance.
Performance:
What should system response times be, as measured from any point, under
what circumstances?
Are there specific peak times when the load on the system will be
unusually high?
Think of stress periods, for example, at the end of the month or in
conjunction with payroll disbursement.
Supportability:
The system needs to be cost-effective to maintain.
Maintainability requirements may cover diverse levels of documentation,
such as system documentation, as well as test documentation, e.g. which
test cases and test plans will accompany the system.
1.4.GOALS AND CONSTRAINTS
1 – Customer Satisfaction
Every company needs their customers to be satisfied. Satisfied
customers are more likely to return to make further purchases, as well as
to promote a company’s good name and recommend services to others.
Customers more than ever want to feel engaged with the companies that
they are dealing with, one way CRM can help with this is through
contact management. Contact management software allows you to track
each customer interaction, so your customers feel like you personally
remember every interaction you have had with them. This gives your
client a more enjoyable, personalized customer experience and can be
the key to smoothing sales.
2 – Become More Efficient
Implementing CRM software helps your customer service team react to
customer queries and concerns more quickly and efficiently, which will
boost productivity as well as customer satisfaction. In sales and
marketing departments, CRM can even help track all leads and
campaigns from beginning to end, making the entire process more
effective.
3 – Produce Better Marketing Campaigns
As well as making the process of conducting a marketing campaign
easier, CRM software can also help you design the most efficient
campaign. With the data provided by these various campaigns, you will
have an extremely well-rounded view of what makes certain audiences
tick and what doesn’t. By knowing your target market and how your
audience responds to communications, you will be able to easily
segment your customers to produce more effective marketing
campaigns.
CRM data can enable you to quickly profile target groups which may be
not be performing as well as they could be, in order to try and boost this
area of your business, with the goal of increasing profits.
2.DESIGN
E-R DIAGRAM:
An entity relationship diagram (ERD) shows the relationships of entity sets stored in a database.
An entity in this context is an object, a component of data. An entity set is a collection of similar
entities. These entities can have attributes that define its properties.
By defining the entities, their attributes, and showing the relationships between them, an ER
diagram illustrates the logical structure of databases.
ER diagrams are used to sketch out the design of a database.

DATA FLOW DIAGRAM:


A data-flow diagram (DFD) is a way of representing a flow of a data of a process or a system
(usually an information system). The DFD also provides information about the outputs and
inputs of each entity and the process itself. A data-flow diagram has no control flow; there are no
decision rules and no loops. Specific operations based on the data can be represented by
a flowchart.
There are several notations for displaying data-flow diagrams. The notation presented above was
described in 1979 by Tom DeMarco as part of Structured Analysis.
For each data flow, at least one of the endpoints (source and / or destination) must exist in a
process. The refined representation of a process can be done in another data-flow diagram, which
subdivides this process into sub-processes.
The data-flow diagram is part of the structured-analysis modeling tools. When using UML,
the activity diagram typically takes over the role of the data-flow diagram. A special form of
data-flow plan is a site-oriented data-flow plan.
Data-flow diagrams can be regarded as inverted Petri nets, because places in such networks
correspond to the semantics of data memories. Analogously, the semantics of transitions from
Petri nets and data flows and functions from data-flow diagrams should be considered
equivalent.

SOFTWARE USED:
 Pycharm
 Python 3.7
 Idle Python 3.7
3.IMPLEMENTATION

from tkinter import *


import sqlite3
import tkinter.ttk as ttk
import tkinter.messagebox as tkMessageBox

#DEVELOPED BY Mark Arvin


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()
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("")
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']
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)

#===================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==============================
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()
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)
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)
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==================================
=====
#============================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=================================
=====
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()
4.OUTPUT
5.CONCLUSION
In this article, you’ve seen a couple of Python project ideas you may find
interesting.

The project ideas cover a range of platforms. You saw project ideas for the Web,
GUI, and Command-line platforms.

You can choose to build a project for different platforms. Using the URL Shortener
as an example, you may choose to build one for the Web, GUI, or the Command-
line.

Since you’re an intermediate Python developer, these projects can be quite


challenging but interesting.

The best way to make a project happen is to just get started. In no time, you’ll be
finished and discover how much you’ve benefited from working on a project!

6. REFRENCES

 https://www.geeksforgeeks.org/computer-science-projects/
 https://data-flair.training/blogs/python-projects-with-source-code/
 https://www.edureka.co/blog/python-projects/

Das könnte Ihnen auch gefallen