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