{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "cf9d79ca",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Simple Contact Manager (With GUI)\n",
    "\n",
    "import tkinter as tk\n",
    "from tkinter import messagebox\n",
    "\n",
    "class ContactManagerApp:\n",
    "    def __init__(self, root):\n",
    "        self.root = root\n",
    "        self.root.title(\"Contact Manager\")\n",
    "        self.contacts = []\n",
    "        self.load_contacts()\n",
    "\n",
    "        self.name_label = tk.Label(root, text=\"Name:\")\n",
    "        self.name_label.grid(row=0, column=0, padx=5, pady=5)\n",
    "        self.name_entry = tk.Entry(root)\n",
    "        self.name_entry.grid(row=0, column=1, padx=5, pady=5)\n",
    "\n",
    "        self.phone_label = tk.Label(root, text=\"Phone:\")\n",
    "        self.phone_label.grid(row=1, column=0, padx=5, pady=5)\n",
    "        self.phone_entry = tk.Entry(root)\n",
    "        self.phone_entry.grid(row=1, column=1, padx=5, pady=5)\n",
    "\n",
    "        self.add_button = tk.Button(root, text=\"Add Contact\", command=self.add_contact)\n",
    "        self.add_button.grid(row=2, column=0, columnspan=2, padx=5, pady=5)\n",
    "\n",
    "        self.contact_listbox = tk.Listbox(root, width=40)\n",
    "        self.contact_listbox.grid(row=3, column=0, columnspan=2, padx=5, pady=5)\n",
    "\n",
    "        self.delete_button = tk.Button(root, text=\"Delete Contact\", command=self.delete_contact)\n",
    "        self.delete_button.grid(row=4, column=0, padx=5, pady=5)\n",
    "\n",
    "        self.edit_button = tk.Button(root, text=\"Edit Contact\", command=self.edit_contact)\n",
    "        self.edit_button.grid(row=4, column=1, padx=5, pady=5)\n",
    "\n",
    "        self.search_label = tk.Label(root, text=\"Search:\")\n",
    "        self.search_label.grid(row=5, column=0, padx=5, pady=5)\n",
    "        self.search_entry = tk.Entry(root)\n",
    "        self.search_entry.grid(row=5, column=1, padx=5, pady=5)\n",
    "\n",
    "        self.search_button = tk.Button(root, text=\"Search\", command=self.search_contact)\n",
    "        self.search_button.grid(row=6, column=0, columnspan=2, padx=5, pady=5)\n",
    "\n",
    "        self.load_contacts_to_listbox()\n",
    "\n",
    "    def add_contact(self):\n",
    "        name = self.name_entry.get()\n",
    "        phone = self.phone_entry.get()\n",
    "        if name and phone:\n",
    "            self.contacts.append((name, phone))\n",
    "            self.save_contacts()\n",
    "            self.load_contacts_to_listbox()\n",
    "            self.name_entry.delete(0, tk.END)\n",
    "            self.phone_entry.delete(0, tk.END)\n",
    "        else:\n",
    "            messagebox.showwarning(\"Error\", \"Please enter both name and phone number.\")\n",
    "\n",
    "    def delete_contact(self):\n",
    "        selected_index = self.contact_listbox.curselection()\n",
    "        if selected_index:\n",
    "            del self.contacts[selected_index[0]]\n",
    "            self.save_contacts()\n",
    "            self.load_contacts_to_listbox()\n",
    "\n",
    "    def edit_contact(self):\n",
    "        selected_index = self.contact_listbox.curselection()\n",
    "        if selected_index:\n",
    "            name, phone = self.contacts[selected_index[0]]\n",
    "            self.name_entry.insert(0, name)\n",
    "            self.phone_entry.insert(0, phone)\n",
    "            del self.contacts[selected_index[0]]\n",
    "            self.save_contacts()\n",
    "            self.load_contacts_to_listbox()\n",
    "\n",
    "    def search_contact(self):\n",
    "        search_term = self.search_entry.get().lower()\n",
    "        self.contact_listbox.delete(0, tk.END)\n",
    "        for name, phone in self.contacts:\n",
    "            if search_term in name.lower() or search_term in phone.lower():\n",
    "                self.contact_listbox.insert(tk.END, f\"{name} - {phone}\")\n",
    "\n",
    "    def load_contacts(self):\n",
    "        try:\n",
    "            with open(\"contacts.txt\", \"r\") as file:\n",
    "                for line in file:\n",
    "                    name, phone = line.strip().split(\":\")\n",
    "                    self.contacts.append((name, phone))\n",
    "        except FileNotFoundError:\n",
    "            pass\n",
    "\n",
    "    def save_contacts(self):\n",
    "        with open(\"contacts.txt\", \"w\") as file:\n",
    "            for name, phone in self.contacts:\n",
    "                file.write(f\"{name}:{phone}\\n\")\n",
    "\n",
    "    def load_contacts_to_listbox(self):\n",
    "        self.contact_listbox.delete(0, tk.END)\n",
    "        for name, phone in self.contacts:\n",
    "            self.contact_listbox.insert(tk.END, f\"{name} - {phone}\")\n",
    "\n",
    "if __name__ == \"__main__\":\n",
    "    root = tk.Tk()\n",
    "    app = ContactManagerApp(root)\n",
    "    root.mainloop()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "11c4102e",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "65632927",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
