ವಿಷಯಕ್ಕೆ ತೆರಳಿ

ಪ್ರಾಜೆಕ್ಟ್ 10: ಸಂಪರ್ಕ ಪುಸ್ತಕ (Contact Book)

ಈ ಪ್ರಾಜೆಕ್ಟ್‌ನಲ್ಲಿ, ನಾವು ಒಂದು ಕಮಾಂಡ್-ಲೈನ್ ಆಧಾರಿತ ಸಂಪರ್ಕ ಪುಸ್ತಕವನ್ನು ನಿರ್ಮಿಸುತ್ತೇವೆ. ಈ ಅಪ್ಲಿಕೇಶನ್‌ನಲ್ಲಿ, ಬಳಕೆದಾರರು ಸಂಪರ್ಕಗಳನ್ನು (ಹೆಸರು, ಫೋನ್ ಸಂಖ್ಯೆ, ಇಮೇಲ್) ಸೇರಿಸಬಹುದು, ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳನ್ನು ವೀಕ್ಷಿಸಬಹುದು, ನಿರ್ದಿಷ್ಟ ಸಂಪರ್ಕವನ್ನು ಹುಡುಕಬಹುದು, ಮತ್ತು ಅಳಿಸಬಹುದು. ನಾವು ಸಂಪರ್ಕಗಳನ್ನು json ಫೈಲ್‌ನಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತೇವೆ, ಇದರಿಂದ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮರುಪ್ರಾರಂಭಿಸಿದಾಗಲೂ ಡೇಟಾ ಉಳಿಯುತ್ತದೆ.

ಕಲಿಕೆಯ ಪರಿಕಲ್ಪನೆಗಳು

  • ಆಬ್ಜೆಕ್ಟ್-ಓರಿಯೆಂಟೆಡ್ ಪ್ರೋಗ್ರಾಮಿಂಗ್ (OOP) - Contact ಕ್ಲಾಸ್ ರಚಿಸಲು.
  • ಡಿಕ್ಷನರಿಗಳು - ಸಂಪರ್ಕ ಪುಸ್ತಕವನ್ನು ನಿರ್ವಹಿಸಲು.
  • json ಮಾಡ್ಯೂಲ್ - ಡೇಟಾವನ್ನು ಫೈಲ್‌ನಲ್ಲಿ ಉಳಿಸಲು ಮತ್ತು ಲೋಡ್ ಮಾಡಲು (Data Persistence).
  • ಫಂಕ್ಷನ್‌ಗಳು - ಕೋಡ್ ಅನ್ನು ವಿಭಜಿಸಲು.
  • ಫೈಲ್ ಹ್ಯಾಂಡ್ಲಿಂಗ್.

ಕೋಡ್

import json

CONTACTS_FILE = "contacts.json"

def load_contacts():
    """JSON ಫೈಲ್‌ನಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ಲೋಡ್ ಮಾಡುತ್ತದೆ."""
    try:
        with open(CONTACTS_FILE, 'r') as file:
            return json.load(file)
    except (FileNotFoundError, json.JSONDecodeError):
        # ಫೈಲ್ ಇಲ್ಲದಿದ್ದರೆ ಅಥವಾ ಖಾಲಿಯಾಗಿದ್ದರೆ, ಖಾಲಿ ಡಿಕ್ಷನರಿ ಹಿಂತಿರುಗಿಸಿ
        return {}

def save_contacts(contacts):
    """ಸಂಪರ್ಕಗಳನ್ನು JSON ಫೈಲ್‌ಗೆ ಉಳಿಸುತ್ತದೆ."""
    with open(CONTACTS_FILE, 'w') as file:
        json.dump(contacts, file, indent=4)

def add_contact(contacts):
    """ಹೊಸ ಸಂಪರ್ಕವನ್ನು ಸೇರಿಸುತ್ತದೆ."""
    name = input("ಹೆಸರನ್ನು ನಮೂದಿಸಿ: ")
    if name in contacts:
        print("ಈ ಹೆಸರಿನ ಸಂಪರ್ಕ ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದೆ.")
        return
    phone = input("ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ನಮೂದಿಸಿ: ")
    email = input("ಇಮೇಲ್ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ: ")
    contacts[name] = {'phone': phone, 'email': email}
    save_contacts(contacts)
    print(f"'{name}' ಸಂಪರ್ಕವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಸೇರಿಸಲಾಗಿದೆ.")

def view_contacts(contacts):
    """ಎಲ್ಲಾ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರದರ್ಶಿಸುತ್ತದೆ."""
    if not contacts:
        print("ಸಂಪರ್ಕ ಪುಸ್ತಕ ಖಾಲಿಯಾಗಿದೆ.")
        return
    print("\n--- ನಿಮ್ಮ ಸಂಪರ್ಕಗಳು ---")
    for name, info in contacts.items():
        print(f"ಹೆಸರು: {name}, ಫೋನ್: {info['phone']}, ಇಮೇಲ್: {info['email']}")
    print("----------------------")

def search_contact(contacts):
    """ಒಂದು ಸಂಪರ್ಕವನ್ನು ಹುಡುಕುತ್ತದೆ."""
    name = input("ಹುಡುಕಬೇಕಾದ ಸಂಪರ್ಕದ ಹೆಸರನ್ನು ನಮೂದಿಸಿ: ")
    contact = contacts.get(name)
    if contact:
        print(f"ಹೆಸರು: {name}, ಫೋನ್: {contact['phone']}, ಇಮೇಲ್: {contact['email']}")
    else:
        print(f"'{name}' ಹೆಸರಿನ ಸಂಪರ್ಕ ಕಂಡುಬಂದಿಲ್ಲ.")

def delete_contact(contacts):
    """ಒಂದು ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುತ್ತದೆ."""
    name = input("ಅಳಿಸಬೇಕಾದ ಸಂಪರ್ಕದ ಹೆಸರನ್ನು ನಮೂದಿ��ಿ: ")
    if name in contacts:
        del contacts[name]
        save_contacts(contacts)
        print(f"'{name}' ಸಂಪರ್ಕವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಅಳಿಸಲಾಗಿದೆ.")
    else:
        print(f"'{name}' ಹೆಸರಿನ ಸಂಪರ್ಕ ಕಂಡುಬಂದಿಲ್ಲ.")

def main():
    """ಅಪ್ಲಿಕೇಶನ್‌ನ ಮುಖ್ಯ ಫಂಕ್ಷನ್."""
    contacts = load_contacts()

    while True:
        print("\n--- ಸಂಪರ್ಕ ಪುಸ್ತಕ ಮೆನು ---")
        print("1. ಸಂಪರ್ಕಗಳನ್ನು ವೀಕ್ಷಿಸಿ (View)")
        print("2. ಸಂಪರ್ಕವನ್ನು ಸೇರಿಸಿ (Add)")
        print("3. ಸಂಪರ್ಕವನ್ನು ಹುಡುಕಿ (Search)")
        print("4. ಸಂಪರ್ಕವನ್ನು ಅಳಿಸಿ (Delete)")
        print("5. ನಿರ್ಗಮಿಸಿ (Exit)")

        choice = input("ನಿಮ್ಮ ಆಯ್ಕೆಯನ್ನು ನಮೂದಿಸಿ: ")

        if choice == '1':
            view_contacts(contacts)
        elif choice == '2':
            add_contact(contacts)
        elif choice == '3':
            search_contact(contacts)
        elif choice == '4':
            delete_contact(contacts)
        elif choice == '5':
            print("ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ನಿರ್ಗಮಿಸಲಾಗುತ್ತಿದೆ.")
            break
        else:
            print("ತಪ್ಪಾದ ಆಯ್ಕೆ. ದಯವಿಟ್ಟು ಮೆನುವಿನಿಂದ ಆಯ್ಕೆಮಾಡಿ.")

if __name__ == "__main__":
    main()

ವಿವರಣೆ

  1. import json: ಪೈಥಾನ್ ಆಬ್ಜೆಕ್ಟ್‌ಗಳನ್ನು (ಡಿಕ್ಷನರಿ, ಲಿಸ್ಟ್) JSON ಸ್ಟ್ರಿಂಗ್ ಆಗಿ ಪರಿವರ್ತಿಸಲು ಮತ್ತು JSON ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಪೈಥಾನ್ ಆಬ್ಜೆಕ್ಟ್‌ಗಳಾಗಿ ಪರಿವರ್ತಿಸಲು ಈ ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಬಳಸಲಾಗುತ್ತದೆ.
  2. load_contacts():
    • ಅಪ್ಲಿಕೇಶನ್ ಪ್ರಾರಂಭವಾದಾಗ, ಈ ಫಂಕ್ಷನ್ contacts.json ಫೈಲ್‌ನಿಂದ ಡೇಟಾವನ್ನು ಲೋಡ್ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತದೆ.
    • json.load(file): JSON ಫೈಲ್‌ನಿಂದ ಡೇಟಾವನ್ನು ಓದಿ ಅದನ್ನ�� ಪೈಥಾನ್ ಡಿಕ್ಷನರಿಯಾಗಿ ಪರಿವರ್ತಿಸುತ್ತದೆ.
    • try-except ಬ್ಲಾಕ್: ಫೈಲ್ ಮೊದಲ ಬಾರಿಗೆ ರನ್ ಆಗುವಾಗ ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲದಿದ್ದರೆ (FileNotFoundError) ಅಥವಾ ಖಾಲಿಯಾಗಿದ್ದರೆ (json.JSONDecodeError), ಎರರ್ ಬರುವುದನ್ನು ತಡೆಯಲು ಇದು ಖಾಲಿ ಡಿಕ್ಷನರಿಯನ್ನು {} ಹಿಂತಿರುಗಿಸುತ್ತದೆ.
  3. save_contacts(contacts):
    • ಸಂಪರ್ಕಗಳಲ್ಲಿ ಯಾವುದೇ ಬದಲಾವಣೆಯಾದಾಗ (ಸೇರಿಸಿದಾಗ ಅಥವಾ ಅಳಿಸಿದಾಗ), ಈ ಫಂಕ್ಷನ್ ಸಂಪೂರ್ಣ contacts ಡಿಕ್ಷನರಿಯನ್ನು contacts.json ಫೈಲ್‌ಗೆ ಬರೆಯುತ್ತದೆ.
    • json.dump(contacts, file, indent=4): contacts ಡಿಕ್ಷನರಿಯನ್ನು JSON ಫಾರ್ಮ್ಯಾಟ್‌ನಲ್ಲಿ ಫೈಲ್‌ಗೆ ಬರೆಯುತ್ತದೆ. indent=4 JSON ಫೈಲ್ ಅನ್ನು ಓದಲು ಸುಲಭವಾಗುವಂತೆ ಫಾರ್ಮ್ಯಾಟ್ ಮಾಡುತ್ತದೆ.
  4. ಡೇಟಾ ರಚನೆ: ನಾವು ಸ��ಪರ್ಕಗಳನ್ನು ಸಂಗ್ರಹಿಸಲು ಡಿಕ್ಷನರಿಯನ್ನು ಬಳಸಿದ್ದೇವೆ. ಇಲ್ಲಿ, ಸಂಪರ್ಕದ ಹೆಸರು ಕೀ (key) ಆಗಿರುತ್ತದೆ ಮತ್ತು ಫೋನ್ ಸಂಖ್ಯೆ ಹಾಗೂ ಇಮೇಲ್ ಅನ್ನು ಒಳಗೊಂಡ ಇನ್ನೊಂದು ಡಿಕ್ಷನರಿ ವ್ಯಾಲ್ಯೂ (value) ಆಗಿರುತ್ತದೆ.
    {
        "Ravi": {
            "phone": "1234567890",
            "email": "[email protected]"
        },
        "Suma": {
            "phone": "0987654321",
            "email": "[email protected]"
        }
    }
    
  5. ಇತರ ಫಂಕ್ಷನ್‌ಗಳು (add, view, search, delete): ಈ ಫಂಕ್ಷನ್‌ಗಳು contacts ಡಿಕ್ಷನರಿಯ ಮೇಲೆ ಸರಳವಾದ CRUD (Create, Read, Update, Delete) ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿರ್ವಹಿಸುತ್ತವೆ.
  6. main() ಫಂಕ್ಷನ್: ಇದು ಅಪ್ಲಿಕೇಶನ್‌ನ ಮುಖ್ಯ ಲೂಪ್ ಆಗಿದ್ದು, ಬಳಕೆದಾರರ ಇನ್‌ಪುಟ್ ಆಧರಿಸಿ ಸೂಕ್ತ ಫಂಕ್ಷನ್��ಗಳನ್ನು ಕಾಲ್ ಮಾಡುತ್ತದೆ.