تفضل هذا مثال بسيط لتطبيق مدير جهات الاتصال باستخدام لغة Python ومكتبة Tkinter:

```python
from tkinter import *
from tkinter import messagebox

class ContactManager:
    def __init__(self, root):
        self.root = root
        self.root.title("Contact Manager")

        self.contacts = []

        self.name_label = Label(root, text="Name:")
        self.name_label.pack()
        self.name_entry = Entry(root)
        self.name_entry.pack()

        self.phone_label = Label(root, text="Phone:")
        self.phone_label.pack()
        self.phone_entry = Entry(root)
        self.phone_entry.pack()

        self.add_button = Button(root, text="Add Contact", command=self.add_contact)
        self.add_button.pack()

        self.contacts_listbox = Listbox(root)
        self.contacts_listbox.pack()

        self.load_contacts()

        self.edit_button = Button(root, text="Edit Contact", command=self.edit_contact)
        self.edit_button.pack()

        self.delete_button = Button(root, text="Delete Contact", command=self.delete_contact)
        self.delete_button.pack()

        self.search_label = Label(root, text="Search:")
        self.search_label.pack()
        self.search_entry = Entry(root)
        self.search_entry.pack()

        self.search_button = Button(root, text="Search", command=self.search_contacts)
        self.search_button.pack()

    def add_contact(self):
        name = self.name_entry.get()
        phone = self.phone_entry.get()

        if name and phone:
            contact = (name, phone)
            self.contacts.append(contact)
            self.contacts_listbox.insert(END, name + " - " + phone)
            self.save_contacts()
            self.name_entry.delete(0, END)
            self.phone_entry.delete(0, END)
        else:
            messagebox.showerror("Error", "Please enter a name and phone number.")

    def edit_contact(self):
        selected_index = self.contacts_listbox.curselection()
        if selected_index:
            name, phone = self.contacts[selected_index[0]]
            self.name_entry.delete(0, END)
            self.phone_entry.delete(0, END)
            self.name_entry.insert(END, name)
            self.phone_entry.insert(END, phone)

    def delete_contact(self):
        selected_index = self.contacts_listbox.curselection()
        if selected_index:
            self.contacts.pop(selected_index[0])
            self.contacts_listbox.delete(selected_index)
            self.save_contacts()

    def search_contacts(self):
        search_term = self.search_entry.get()
        self.contacts_listbox.delete(0, END)
        for name, phone in self.contacts:
            if search_term.lower() in name.lower() or search_term in phone:
                self.contacts_listbox.insert(END, name + " - " + phone)

    def save_contacts(self):
        with open("contacts.txt", "w") as file:
            for name, phone in self.contacts:
                file.write(name + "," + phone + "\n")

    def load_contacts(self):
        try:
            with open("contacts.txt", "r") as file:
                lines = file.readlines()
                for line in lines:
                    name, phone = line.strip().split(",")
                    self.contacts.append((name, phone))
                    self.contacts_listbox.insert(END, name + " - " + phone)
        except FileNotFoundError:
            pass

root = Tk()
app = ContactManager(root)
root.mainloop()
```

يتم إنشاء نافذة رسومية باستخدام Tkinter حيث يتم عرض حقول الاسم ورقم الهاتف وزر إضافة جهة اتصال جديدة. بجانبها يتم عرض قائمة بجهات الاتصال المضافة حتى الآن. يتم تنفيذ وظائف إضافة وتعديل وحذف الجهات الموجودة مع إمكانية البحث عن جهات الاتصال.

تم تنفيذ الوظائف الأساسية لإضافة وتعديل وحذف الجهات والبحث عنها. تتم حفظ جهات الاتصال في ملف "contacts.txt" للاستمرارية بين عمليات تشغيل البرنامج.