import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
import java.io.Serializable;
class Contact implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private String phoneNumber;
private String email;
private String birthDate;
private String address;
public Contact(String name, String phoneNumber, String email, String birthDate, String address) {
this.name = name;
this.phoneNumber = phoneNumber;
this.email = email;
this.birthDate = birthDate;
this.address = address;
}
public String getName() {
return name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public String getEmail() {
return email;
}
public String getBirthDate() {
return birthDate;
}
public String getAddress() {
return address;
}
public boolean isValid() {
// Implement logic to validate contact attributes here
// For example, check that the phone number is the correct format, the email is valid, etc.
return true; // For now, we return true for simplicity
}
}
class ContactManager {
private ArrayList contacts;
private static final String FILENAME = "contacts.dat";
public ContactManager() {
contacts = new ArrayList();
loadContacts();
}
public void addContact(Contact contact) {
if (contact.isValid()){
contacts.add(contact);
saveContacts();
System.out.println("Contact added successfully!");
} else {
System.out.println("Invalid contact! Pleas check your input.");
}
}
public void listContacts() {
for (Contact contact : contacts) {
System.out.println("Name: " + contact.getName() + ", Phone: " + contact.getPhoneNumber() +
", Email: " + contact.getEmail() + ", Birth Date: " + contact.getBirthDate() +
", Address: " + contact.getAddress());
}
}
public Contact searchContact(String name) {
for (Contact contact : contacts) {
if (contact.getName().equalsIgnoreCase(name)) {
return contact;
}
}
return null;
}
public void editContact(String name, Contact newContact) {
Contact existingContact = searchContact(name);
if (existingContact != null) {
int index = contacts.indexOf(existingContact);
contacts.set(index, newContact);
saveContacts();
System.out.println("Contact edited successfully!");
} else {
System.out.println("Contact not found!");
}
}
public void deleteContact(String name) {
Contact contactToRemove = searchContact(name);
if (contactToRemove != null) {
contacts.remove(contactToRemove);
saveContacts();
System.out.println("Contact deleted successfully!");
} else {
System.out.println("Contact not found!");
}
}
private void saveContacts() {
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(FILENAME))) {
oos.writeObject(contacts);
} catch (IOException e) {
e.printStackTrace();
}
}
private void loadContacts() {
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(FILENAME))) {
contacts = (ArrayList) ois.readObject();
} catch (IOException | ClassNotFoundException e) {
// If an exception occurs while loading contacts,
// simply ignore it and keep the list empty
}
}
}
public class ContactApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ContactManager contactManager = new ContactManager();
while (true) {
System.out.println("\n1. Add Contact\n2. List Contacts\n3. Search Contacts\n4. Edit Contact\n5. Delete Contact\n6. Exit");
System.out.print("Enter your choice: ");
int choice = scanner.nextInt();
scanner.nextLine(); // Consume newline
switch (choice) {
case 1:
System.out.print("Enter name: ");
String name = scanner.nextLine();
System.out.print("Enter phone number: ");
String phoneNumber = scanner.nextLine();
System.out.print("Enter email: ");
String email = scanner.nextLine();
System.out.print("Enter birt date: ");
String birthDate = scanner.nextLine();
System.out.print("Enter address: ");
String address = scanner.nextLine();
Contact newContact = new Contact(name, phoneNumber, email, birthDate, address);
contactManager.addContact(newContact);
System.out.println("Contact added successfully!");
break;
case 2:
System.out.println("Contacts:");
contactManager.listContacts();
break;
case 3:
System.out.print("Enter name to search: ");
String searchName = scanner.nextLine();
Contact searchedContact = contactManager.searchContact(searchName);
if (searchedContact != null) {
System.out.println("Contact found - Name: " + searchedContact.getName() +
", Phone: " + searchedContact.getPhoneNumber() +
", Email: " + searchedContact.getEmail() +
", Birth Date: " + searchedContact.getBirthDate() +
", Address: " + searchedContact.getAddress());
} else {
System.out.println("Contact not found!");
}
break;
case 4:
System.out.println("Enter name to edit: ");
String editName = scanner.nextLine();
Contact existingContact = contactManager.searchContact(editName);
if (existingContact != null) {
System.out.print("Enter new name: ");
String newName = scanner.nextLine();
System.out.print("Enter new phone number: ");
String newPhoneNumber = scanner.nextLine();
System.out.print("Enter new email: ");
String newEmail = scanner.nextLine();
System.out.print("Enter new birth date: ");
String newBirthDate = scanner.nextLine();
System.out.print("Enter new address: ");
String newAddress = scanner.nextLine();
Contact editedContact = new Contact(newName, newPhoneNumber, newEmail, newBirthDate, newAddress);
contactManager.editContact(editName, editedContact);
} else {
System.out.println("Contact not found!");
}
break;
case 5:
System.out.print("Enter name to delete: ");
String deleteName = scanner.nextLine();
contactManager.deleteContact(deleteName);
break;
case 6:
System.out.println("Exiting...");
System.exit(0);
default:
System.out.println("Invalid choice. Please try again.");
}
}
}
}