در این مقاله درمورد ساخت دفترچه تلفن با پایتون صحبت شده است. این مقاله به بررسی نحوه ساخت یک دفتر تلفن ساده با استفاده از زبان برنامهنویسی پایتون میپردازد که با قابلیتهایی مانند افزودن، جستجو، حذف و ذخیرهسازی مخاطبین همراه است. با ما همراه باشید.
مقدمه
در دنیای دیجیتال امروز، مدیریت مؤثر اطلاعات از اهمیت بالایی برخوردار است. یکی از سادهترین و در عین حال کاربردیترین نمونههای این نوع مدیریت، نگهداری اطلاعات تماس افراد یا همان دفتر تلفن است. دفتر تلفن به عنوان یک ابزار پایه در بسیاری از برنامههای نرمافزاری و سیستمهای اطلاعاتی بهکار میرود و میتواند به اشکال مختلفی، از فرمهای کاغذی گرفته تا برنامههای موبایلی و دسکتاپ، پیادهسازی شود.
در این میان، زبان برنامهنویسی پایتون به دلیل سادگی و خوانایی بالا، بستر مناسبی برای آموزش مفاهیم اولیه برنامهنویسی و پیادهسازی پروژههای کوچک و آموزشی فراهم کرده است. هدف این مقاله، آموزش ساخت دفترچه تلفن با پایتون به گونهای است که علاوه بر پوشش نیازهای اولیه، امکان توسعه و ارتقاء آن در مراحل بعدی نیز فراهم باشد.
مفهوم ساخت دفترچه تلفن با پایتون
دفتر تلفن، به عنوان یک ساختار اطلاعاتی، مجموعهای از دادههای مرتبط با مخاطبین را شامل میشود. این دادهها معمولاً شامل نام، شماره تلفن، نشانی ایمیل و آدرس میباشند. در فرآیند دفتر تلفن در پایتون، هدف طراحی سیستمی است که بتواند این اطلاعات را بهصورت منظم ذخیره، بازیابی و مدیریت کند.
در محیط پایتون، برای پیادهسازی چنین سیستمی، از ساختارهای دادهای مناسب مانند لیست و دیکشنری استفاده میشود. هر مخاطب بهصورت یک دیکشنری تعریف شده و مجموعهای از مخاطبین درون یک لیست نگهداری میگردد. این ساختار به برنامهنویس امکان میدهد تا عملیات مختلفی از جمله جستجو، ویرایش، حذف و افزودن مخاطب را به سادگی انجام دهد.
همچنین برای ذخیرهسازی دائمی دادهها، ابزارهایی نظیر ماژول pickle یا فرمتهای استاندارد مانند JSON به کار گرفته میشوند. این رویکرد باعث میشود اطلاعات تماس حتی پس از بسته شدن برنامه نیز حفظ شوند و در اجرای بعدی قابل بازیابی باشند.
ساختار دادهای مخاطبین
در فرآیند ساخت دفترچه تلفن با پایتون، انتخاب ساختار دادهای مناسب برای نگهداری اطلاعات مخاطبین نقش تعیینکنندهای در کارایی و خوانایی برنامه دارد. در این پروژه، هر مخاطب به صورت یک دیکشنری (Dictionary) تعریف میشود که شامل کلیدهایی مانند Name، Phone، Email و Address است. این ساختار امکان دسترسی مستقیم به هر ویژگی مخاطب را فراهم میسازد.
برای نگهداری مجموعهای از مخاطبین، از یک لیست (List) استفاده میشود که در آن، هر عنصر یک دیکشنری مربوط به یک مخاطب است. این ترکیب از لیست و دیکشنری، قابلیت افزودن، حذف، و جستجوی مخاطبین را به سادگی فراهم میکند.
بهعنوان نمونه، ساختار دادهای یک مخاطب به صورت زیر خواهد بود:
{
'Name': 'Ali Rezaei',
'Phone': '09123456789',
'Email': 'ali@example.com',
'Address': 'Tehran, Iran'
}
مجموعه مخاطبین نیز به شکل یک لیست از این دیکشنریها تعریف میشود:
contact_list = [contact1, contact2, contact3, ...]
استفاده از این ساختار باعث سادگی در پیادهسازی و افزایش خوانایی کد میگردد و امکان مدیریت پویا و قابل انعطاف مخاطبین را فراهم میآورد.
مدیریت فایلها و پایداری دادهها
یکی از ارکان مهم در طراحی هر سیستم مدیریت داده، قابلیت ذخیرهسازی پایدار اطلاعات است؛ به این معنا که دادهها پس از بستن برنامه نیز باقی بمانند. در پروژهی ساخت دفترچه تلفن با پایتون، برای ذخیره و بازیابی اطلاعات مخاطبین از فایل استفاده میشود. این فایل به عنوان پایگاه داده سادهای عمل میکند که اطلاعات را در قالبی قابل پردازش نگهداری مینماید.
برای سریالسازی دادهها از ماژول استاندارد pickle بهره گرفته شده است.این ماژول، امکان سریالسازی اشیاء پایتون را فراهم میکند؛ به این معنا که میتوان لیست مخاطبین (که شامل دیکشنریهاست) را به یک فایل باینری تبدیل کرد و سپس در مواقع لازم، آن را از فایل بازیابی نمود.
ذخیره سازی اطلاعات در فایل
«در این بخش، اطلاعات مخاطبین با استفاده از pickle.dump() بهصورت باینری در فایل contacts.dat ذخیره میشود.»
with open('contacts.dat', 'wb') as f:
pickle.dump(contact_list, f)
«در این بخش، فایل بهصورت باینری خوانده میشود و با استفاده از pickle.load()، اطلاعات مخاطبین از آن بازیابی و در لیست قرار میگیرد.»
with open('contacts.dat', 'rb') as f:
contact_list = pickle.load(f)
توابع کلیدی در ساخت دفترچه تلفن با پایتون
در طراحی و پیادهسازی دفتر تلفن با زبان پایتون، از مجموعهای از توابع برای مدیریت و ساماندهی اطلاعات مخاطبین استفاده میشود.
توابع زیر هرکدام نقش مشخصی در انجام عملیاتهای مختلف دارد:
- add_contact():
برای دریافت اطلاعات کاربر و افزودن مخاطب جدید به لیست استفاده میشود و دادهها را در فایل ذخیره میکند. - display_contacts():
تمامی مخاطبین موجود را بهصورت منظم نمایش میدهد تا کاربر بتواند اطلاعات آنها را مرور کند. - search_contact():
با دریافت نام از کاربر، مخاطب مورد نظر را در لیست جستجو کرده و در صورت وجود، اطلاعات آن را چاپ مینماید. - delete_contact():
با تطبیق نام ورودی، مخاطب مربوطه را از لیست حذف کرده و تغییرات را در فایل ذخیره میکند. - edit_contact():
برای ویرایش اطلاعات یک مخاطب خاص به کار میرود و امکان بهروزرسانی تمامی فیلدها را فراهم میسازد.
عملیات کلیدی دفتر تلفن در پایتون
برای عملیاتیسازی پروژهی ساخت دفترچه تلفن با پایتون، مجموعهای از توابع تعریف میشود که هر یک وظیفهای خاص در مدیریت مخاطبین بر عهده دارند. این توابع، از طریق رابط کاربری متنی (که در بخش بعدی توضیح داده میشود) فراخوانی میگردند و امکان تعامل با دادهها را فراهم میکنند.
در ادامه، عملیات اصلی و کاربردی که در ساخت دفترچه تلفن با پایتون نقش اساسی دارند، معرفی و شیوه پیادهسازی آنها بررسی میشود.
1- افزودن مخاطب جدید
در این کد، با استفاده از ماژولهای pickle و os، فرآیند ساخت دفترچه تلفن با پایتون بهصورت ساده پیادهسازی شده است. ابتدا با بررسی وجود فایل، لیست مخاطبین از روی دیسک بارگذاری یا ایجاد میشود. سپس تابع add_contact() اطلاعات ورودی کاربر را دریافت کرده، در قالب یک دیکشنری ذخیره میکند و با استفاده از تابع pickle.dump() آن را در فایل ثبت مینماید.
import pickle
import os
filename = 'contacts.pkl'
# بارگذاری دادهها اگر فایل وجود داشت
if os.path.exists(filename):
with open(filename, 'rb') as f:
contact_list = pickle.load(f)
else:
contact_list = []
def add_contact():
name = input("Enter Name: ")
phone = input("Enter Phone Number: ")
email = input("Enter Email: ")
address = input("Enter Address: ")
contact = {
'Name': name,
'Phone': phone,
'Email': email,
'Address': address
}
contact_list.append(contact)
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("Contact Added Successfully!\n")
add_contact()
نمایی از خروجی تابع اضافه کردن مخاطب در دفتر تلفن پایتون:
2- نمایش تمام مخاطبین
در این بخش از ساخت دفترچه تلفن با پایتون، یک لیست نمونه شامل مخاطبین بهصورت دیکشنری تعریف شده است که اطلاعاتی نظیر نام، شماره تلفن، ایمیل و آدرس هر فرد را در بر دارد. تابع display_contacts() با استفاده از حلقهی enumerate مخاطبین را به همراه شمارهی ترتیب نمایش میدهد و با یک حلقهی داخلی، کلید و مقدار هر مخاطب چاپ میگردد. این ساختار به منظور مرور آسان و سریع اطلاعات طراحی شده است.
# اول یک لیست نمونه برای نمایش مخاطبین تعریف میکنیم
contact_list = [
{'Name': 'علی رضایی', 'Phone': '09121234567', 'Email': 'ali@example.com', 'Address': 'تهران'},
{'Name': 'سارا محمدی', 'Phone': '09351234567', 'Email': 'sara@example.com', 'Address': 'اصفهان'}
]
def display_contacts():
if not contact_list:
print("No contacts found.\n")
return
for i, contact in enumerate(contact_list):
print(f"\nContact {i+1}")
for key, value in contact.items():
print(f"{key}: {value}")
# صدا زدن تابع برای نمایش مخاطبین
display_contacts()
نمایی از خروجی تابع نمایش مخاطب در دفتر تلفن پایتون:
3- جستجوی مخاطب
در این بخش از ساخت دفترچه تلفن با پایتون، ابتدا لیستی از مخاطبین بهصورت دیکشنری تعریف میشود. تابع search_contact() با دریافت نام مورد نظر از کاربر و استفاده از متد lower()، امکان جستجوی غیرحساس به حروف بزرگوکوچک را فراهم میسازد. در صورت یافتن مخاطب، اطلاعات مربوط نمایش داده میشود؛ در غیر اینصورت، پیام مناسبی مبنی بر عدم وجود مخاطب ارائه میگردد.
# مرحله 1: تعریف لیست مخاطبین
contact_list = [
{'Name': 'علی رضایی', 'Phone': '09121234567', 'Email': 'ali@example.com', 'Address': 'تهران'},
{'Name': 'سارا محمدی', 'Phone': '09351234567', 'Email': 'sara@example.com', 'Address': 'اصفهان'}
]
# مرحله 2: تعریف تابع جستجو
def search_contact():
search_name = input("Enter name to search: ")
found = False
for contact in contact_list:
if contact['Name'].lower() == search_name.lower():
print("\nContact Found:")
for key, value in contact.items():
print(f"{key}: {value}")
found = True
break
if not found:
print("Contact not found.\n")
# مرحله 3: اجرای تابع
search_contact()
نمایی از خروجی تابع جستجو مخاطب در دفتر تلفن پایتون:
4- حذف مخاطب
در این بخش از ساخت دفترچه تلفن با پایتون، با بهرهگیری از ماژول pickle و لیستی اولیه از مخاطبین، قابلیت حذف مخاطب بر اساس نام کاربر پیادهسازی شده است. تابع delete_contact() پس از دریافت نام ورودی، مخاطب مربوطه را در لیست جستجو کرده و در صورت تطابق، آن را حذف کرده و لیست بهروزشده را در فایل ذخیره مینماید. در صورتی که مخاطب موردنظر یافت نشود، پیامی مبنی بر عدم وجود آن نمایش داده میشود.
import pickle
filename = 'contacts.pkl'
contact_list = [
{'Name': 'علی رضایی', 'Phone': '09121234567'},
{'Name': 'سارا محمدی', 'Phone': '09351234567'}
]
def delete_contact():
name = input("Enter name to delete: ")
for i, c in enumerate(contact_list):
if c['Name'].lower() == name.lower():
del contact_list[i]
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("Deleted.\n")
return
print("Not found.\n")
delete_contact()
نمایی از خروجی تابع حذف مخاطب در دفتر تلفن پایتون:
5- ویرایش مخاطب
در این مرحله از ساخت دفترچه تلفن با پایتون، تابعی با نام edit_contact() پیادهسازی شده که امکان ویرایش اطلاعات یک مخاطب را فراهم میسازد. این تابع ابتدا نام مخاطب را از کاربر دریافت کرده و در صورت یافتن، اطلاعات جدید شامل نام، شماره تلفن، ایمیل و آدرس را جایگزین مقادیر قبلی میکند. در پایان، لیست بهروزرسانیشده با استفاده از ماژول pickle در فایل ذخیره میگردد. در صورتی که مخاطب موردنظر موجود نباشد، پیام مناسبی به کاربر نمایش داده میشود.
import pickle
filename = 'contacts.pkl'
contact_list = [
{'Name': 'علی رضایی', 'Phone': '09121234567', 'Email': 'ali@example.com', 'Address': 'تهران'},
{'Name': 'سارا محمدی', 'Phone': '09351234567', 'Email': 'sara@example.com', 'Address': 'اصفهان'}
]
# تابع ویرایش مخاطب
def edit_contact():
name = input("Enter name to edit: ")
for c in contact_list:
if c['Name'].lower() == name.lower():
print("Enter new details:")
c['Name'] = input("New Name: ")
c['Phone'] = input("New Phone: ")
c['Email'] = input("New Email: ")
c['Address'] = input("New Address: ")
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("Updated.\n")
return
print("Not found.\n")
edit_contact()
نمایی از خروجی تابع ویرایش مخاطب در دفتر تلفن پایتون:
طراحی رابط تعاملی خط فرمان(CLI)
برای تعامل کاربر با سیستم، یک رابط کاربری متنی (Command Line Interface) طراحی شده است. این رابط ساده، اما کارآمد، مجموعهای از گزینهها را در اختیار کاربر قرار میدهد تا بتواند عملیات مختلف مانند افزودن، جستجو، حذف و نمایش مخاطبین را اجرا کند.
ساختار این رابط بهگونهای طراحی شده که با اجرای مداوم در یک حلقه، تا زمان خروج کاربر از برنامه، امکان استفاده از تمامی قابلیتها را فراهم میسازد.
طراحی منوی تعاملی برای مدیریت مخاطبین
در این کد، ابتدا فایل اطلاعات مخاطبین در صورت وجود بارگذاری میشود. سپس منوی متنی بهصورت مکرر نمایش داده شده و با توجه به ورودی کاربر، توابع مربوطه فراخوانی میشوند.
import pickle
import os
filename = 'contacts.dat'
contact_list = []
# بازیابی اطلاعات از فایل اگر وجود داشته باشد
if os.path.exists(filename):
with open(filename, 'rb') as f:
contact_list = pickle.load(f)
# تابع افزودن مخاطب
def add_contact():
name = input("نام: ")
phone = input("شماره تلفن: ")
email = input("ایمیل: ")
address = input("آدرس: ")
contact = {
'Name': name,
'Phone': phone,
'Email': email,
'Address': address
}
contact_list.append(contact)
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("مخاطب با موفقیت اضافه شد.\n")
# تابع نمایش همه مخاطبین
def display_contacts():
if not contact_list:
print("هیچ مخاطبی یافت نشد.\n")
return
for i, contact in enumerate(contact_list):
print(f"\nمخاطب {i+1}:")
for key, value in contact.items():
print(f"{key}: {value}")
# تابع جستجوی مخاطب
def search_contact():
search_name = input("نام مخاطب مورد نظر برای جستجو: ")
found = False
for contact in contact_list:
if contact['Name'].lower() == search_name.lower():
print("\nمخاطب یافت شد:")
for key, value in contact.items():
print(f"{key}: {value}")
found = True
break
if not found:
print("مخاطب مورد نظر یافت نشد.\n")
# تابع حذف مخاطب
def delete_contact():
delete_name = input("نام مخاطب برای حذف: ")
for i, contact in enumerate(contact_list):
if contact['Name'].lower() == delete_name.lower():
del contact_list[i]
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("مخاطب با موفقیت حذف شد.\n")
return
print("مخاطب مورد نظر یافت نشد.\n")
# تابع ویرایش مخاطب
def edit_contact():
edit_name = input("نام مخاطب برای ویرایش: ")
for contact in contact_list:
if contact['Name'].lower() == edit_name.lower():
print("اطلاعات جدید را وارد کنید:")
contact['Name'] = input("نام جدید: ")
contact['Phone'] = input("شماره جدید: ")
contact['Email'] = input("ایمیل جدید: ")
contact['Address'] = input("آدرس جدید: ")
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("اطلاعات مخاطب با موفقیت بهروزرسانی شد.\n")
return
print("مخاطب مورد نظر یافت نشد.\n")
# منوی اصلی
while True:
print("\n--- دفتر تلفن ---")
print("1. افزودن مخاطب")
print("2. نمایش همه مخاطبین")
print("3. جستجوی مخاطب")
print("4. حذف مخاطب")
print("5. ویرایش مخاطب")
print("6. خروج")
choice = input("انتخاب کنید (1 تا 6): ")
if choice == '1':
add_contact()
elif choice == '2':
display_contacts()
elif choice == '3':
search_contact()
elif choice == '4':
delete_contact()
elif choice == '5':
edit_contact()
elif choice == '6':
print("خروج از برنامه...")
break
else:
print("ورودی نامعتبر است. لطفاً گزینهای بین 1 تا 6 انتخاب کنید.")
این روش، روشی ساده و کاربردی است که امکان مدیریت و ویرایش مخاطبین را به راحتی فراهم میکند.
نمایی از خروجی تابع مدیریت و ویرایش مخاطب در دفتر تلفن پایتون:
ساخت یک دفتر تلفن ساده با Python
در این بخش، یک نمونهی کامل و کاربردی از برنامهی ساخت دفترچه تلفن با پایتون ارائه شده است. این برنامه از ماژول pickle برای ذخیرهسازی و بازیابی اطلاعات استفاده میکند و به کمک یک رابط متنی ساده، امکاناتی نظیر افزودن، نمایش، جستجو، حذف و ویرایش مخاطبین را در اختیار کاربر قرار میدهد. ساختار برنامه بهگونهای طراحی شده که استفاده از آن برای کاربران مبتدی نیز آسان باشد، در حالی که پایهای مناسب برای گسترشهای آینده فراهم میکند.
import pickle
import os
filename = 'contacts.dat'
contact_list = []
# بارگذاری مخاطبین در صورت وجود فایل
if os.path.exists(filename):
with open(filename, 'rb') as f:
contact_list = pickle.load(f)
def add_contact():
name = input("Enter Name: ")
phone = input("Enter Phone Number: ")
email = input("Enter Email: ")
address = input("Enter Address: ")
contact = {
'Name': name,
'Phone': phone,
'Email': email,
'Address': address
}
contact_list.append(contact)
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("Contact Added Successfully!\n")
def display_contacts():
if not contact_list:
print("No contacts found.\n")
return
for i, contact in enumerate(contact_list):
print(f"\nContact {i+1}")
for key, value in contact.items():
print(f"{key}: {value}")
def search_contact():
search_name = input("Enter name to search: ")
found = False
for contact in contact_list:
if contact['Name'].lower() == search_name.lower():
print("\nContact Found:")
for key, value in contact.items():
print(f"{key}: {value}")
found = True
break
if not found:
print("Contact not found.\n")
def delete_contact():
delete_name = input("Enter name to delete: ")
for i, contact in enumerate(contact_list):
if contact['Name'].lower() == delete_name.lower():
del contact_list[i]
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("Contact Deleted Successfully!\n")
return
print("Contact not found.\n")
def edit_contact():
edit_name = input("Enter name to edit: ")
for contact in contact_list:
if contact['Name'].lower() == edit_name.lower():
print("Enter new details:")
contact['Name'] = input("New Name: ")
contact['Phone'] = input("New Phone Number: ")
contact['Email'] = input("New Email: ")
contact['Address'] = input("New Address: ")
with open(filename, 'wb') as f:
pickle.dump(contact_list, f)
print("Contact Updated Successfully!\n")
return
print("Contact not found.\n")
# رابط کاربری متنی
while True:
print("\n--- Contact Book ---")
print("1. Add Contact")
print("2. Display All Contacts")
print("3. Search Contact")
print("4. Delete Contact")
print("5. Edit Contact")
print("6. Exit")
choice = input("Enter your choice (1-6): ")
if choice == '1':
add_contact()
elif choice == '2':
display_contacts()
elif choice == '3':
search_contact()
elif choice == '4':
delete_contact()
elif choice == '5':
edit_contact()
elif choice == '6':
print("Exiting the program...")
break
else:
print("Invalid input. Please choose a valid option.")
این اسکریپت یک برنامهی کامل و مستقل است که میتوانید آن را در محیط پایتون اجرا کرده و با آن مانند یک دفتر تلفن ساده تعامل داشته باشید.
مزایای ساخت دفترچه تلفن با پایتون برای یادگیری
دفتر تلفن در پایتون یک پروژه آموزشی ساده اما مفید است که به یادگیری مفاهیم پایه برنامهنویسی مانند ساختارهای داده، توابع و مدیریت فایلها کمک میکند؛ با این حال، برای پیادهسازی ویژگیهای پیشرفتهتر مانند رابط کاربری گرافیکی یا امنیت دادهها، نیاز به توسعه و دانش بیشتر خواهد بود.
جدول زیر، مروری بر مهمترین مزایا و محدودیتهای پروژهی ساخت دفتر تلفن با زبان پایتون در زمینهی یادگیری و آموزش دارد.
| مزایا | معایب |
| یادگیری مفاهیم پایهای پایتون مانند لیست، دیکشنری، توابع، شرط و حلقه | فاقد رابط گرافیکی (GUI) برای تعامل کاربرپسند |
| آشنایی با ذخیرهسازی و بازیابی دادهها از فایل | مناسب نبودن برای یادگیری مفاهیم پیشرفته مانند برنامهنویسی شیگرا |
| تجربهی ساخت یک پروژهی واقعی و ساده | ذخیرهسازی باینری با pickle خوانایی انسانی ندارد |
| امکان گسترش پروژه در آینده (مثل افزودن GUI یا پایگاه داده) | امنیت پایین در ذخیرهسازی دادهها (مثلاً بدون رمزنگاری) |
| تقویت تفکر منطقی و حل مسئله |
عملکرد محدود در مقیاس بزرگ یا با دادههای زیاد |
نتیجه گیری
در این مقاله، مراحل گامبهگام ساخت دفترچه تلفن با پایتون مورد بررسی قرار گرفت. با بهرهگیری از مفاهیم پایهای مانند لیستها، دیکشنریها، توابع، مدیریت فایلها و استفاده از ماژول pickle، توانستیم سیستمی ساده اما کارآمد برای ذخیرهسازی و مدیریت مخاطبین طراحی کنیم.
این پروژه، نمونهای مناسب برای یادگیری و تمرین مهارتهای ابتدایی برنامهنویسی در پایتون است و بهعنوان پایهای قابل گسترش، میتواند در پروژههای بزرگتر یا با رابط گرافیکی نیز توسعه یابد. در مجموع، ساخت چنین ابزاری نهتنها موجب تقویت درک مفاهیم اساسی میشود، بلکه کاربرد عملی برنامهنویسی در حل مسائل روزمره را نیز بهخوبی نشان میدهد.
















