Książka adresowa - pomoc

0

Witam Serdecznie. Próbuję naisać swój pierwszy projekt książki adresowej, ale trochę się pogubiłem i nie wiem jak ugryźć dwie ostatnie opcje w tym programie.
Chcę jeszcze zaimplementwać możliwość edytowania i usuwania kontaktów z listy. Ale nie wiem czy czegoś mi nie brakuje.
Klasa ControlPanel:

public class AddressBookControlPanel {
    private enum Action {
        ADD_CONTACT,
        SEARCH_CONTACT,
        DISPLAY_ALL_CONTACTS,
        EDIT_CONTACT,
        DELETE_CONTACT,
        EXIT
    }
 
    private enum Options {
        First_Name,
        Surname,
    }
 
    private Data data;
    private Scanner sc;
    private List<Contact> contacts;
 
    public AddressBookControlPanel(Data data) {
        sc = new Scanner(System.in);
        this.data = data;
        try {
            contacts = data.loadAllContacts();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    public AddressBookControlPanel(String MyContacts) {
        this(new Data(MyContacts));
    }
 
    public AddressBookControlPanel(File file) {
        this(new Data(file));
    }
 
    private List<Contact> searchContact(String searchString, Options options) {
        switch (options) {
            case First_Name:
                return contacts.stream().filter(person ->
                        person.getSurname().equals(searchString)).collect(Collectors.toList());
            case Surname:
                return contacts.stream().filter(person ->
                        person.getFirstName().equals(searchString)).collect(Collectors.toList());
            default:
                System.out.println("Invalid filter option");
                return new ArrayList<>();
        }
    }
 
    public void start() {
        while (true) {
            Action option = showMenuAndChoose();
            switch (option) {
                case ADD_CONTACT:
                    Contact contact = getContactInformation();
                    data.saveContactToFile(contact);
                    contacts.add(contact);
                    break;
 
                case EDIT_CONTACT:  System.out.println("Put the name of contact which you want edit ");
                    int index = sc.nextInt();
                    break;
                case SEARCH_CONTACT:
                    Options selectedFilter = showFindPersonFilterOptionsAndGetSelection();
                    System.out.print("Enter name: ");
                    String searchString = sc.nextLine();
                    List<Contact> filteredContacts = searchContact(searchString, selectedFilter);
                    if (filteredContacts.size() == 0) {
                        System.out.println("No matches");
                    } else {
                        for (Contact c : filteredContacts)
                            System.out.println(c);
                        break;
                    }
                case DISPLAY_ALL_CONTACTS:
                    System.out.println(this.contacts);
                    System.out.println();
                    break;
                case DELETE_CONTACT: // coming soon
                    break;
                case EXIT:
                    System.out.println(" Program is closed. ");
                    System.exit(0);
                    break;
            }
 
        }
 
    }
 
    private Action showMenuAndChoose() {
        System.out.println(" 1. Add new contact ");
        System.out.println(" 2. Edit exisisted contact");
        System.out.println(" 3. Search contact ");
        System.out.println(" 4. Show all contacts ");
        System.out.println(" 5. Delete contact ");
        System.out.println(" 6. Close program ");
 
        String option;
        option = sc.nextLine();
        switch (option) {
            case "1":
                return Action.ADD_CONTACT;
 
            case "2":
                return Action.EDIT_CONTACT;
 
            case "3":
                return Action.SEARCH_CONTACT;
 
            case "4":
                return Action.DISPLAY_ALL_CONTACTS;
 
            case "5":
                return Action.DELETE_CONTACT;
 
            case "6":
                return Action.EXIT;
            default:
                System.out.println(" Choose number from 1 to 6 ");
        }
        while (!option.equals("6")) ;
        return null;
    }
private Contact getContactInformation(){
    System.out.println(" Put name ");
    String firstName = sc.nextLine();
    System.out.println(" Put surname ");
    String surname = sc.nextLine();
    System.out.println(" Put phone number ");
    String phoneNumber = sc.nextLine();
    System.out.println(" Put e-mail address ");
    String email = sc.nextLine();
    System.out.println(" Put address ");
    String address = sc.nextLine();
    return new Contact(firstName,surname,phoneNumber,email,address);
}
private Options showFindPersonFilterOptionsAndGetSelection(){
    System.out.println(" 1. Search by name ");
    System.out.println(" 2. Search by surname ");
    System.out.println();
    String option;
    do{
        option = sc.nextLine();
        switch (option){
            case "1": return Options.First_Name;
            case "2": return  Options.Surname;
            default:
                System.out.println(" Choose number 1 or 2 ");
        }
    }while (option.equals("1")&& option.equals("2"));
    return null;
}
 
 
}

Klasa Contact:

public class Contact {
    private static AtomicInteger nextID = new AtomicInteger(1);
    private int Id;
    private String FirstName;
    private String Surname;
    private String phoneNumber;
    private String email;
    private String address;
 
    Contact(int Id, String FirstName, String Surname, String phoneNumber, String email, String address) {
        this.Id = Id;
        this.FirstName = FirstName;
        this.Surname = Surname;
        this.phoneNumber = phoneNumber;
        this.email = email;
        this.address = address;
    }
 
    Contact(String FirstName, String Surname, String phoneNumber, String email, String address) {
        this(nextID.getAndIncrement(), FirstName, Surname, phoneNumber, email, address);
    }
 
    int getId() {
        return Id;
    }
 
    String getFirstName() {
        return FirstName;
    }
 
    String getSurname() {
        return Surname;
    }
 
    String
    getPhoneNumber() {
        return phoneNumber;
    }
    String getEmail(){
        return email;
    }
    String getAddress(){
        return address;
    }
 
    @Override
    public String toString() {
        return"\n\nId: " + getId() + "\nName: " + getFirstName() + "\nSurname: " + getSurname() + "\nPhone number: "
                + getPhoneNumber() + "\nEmail: "  +getEmail() + "\nAddress: " + getAddress();
    }
    
}

Proszę o pomoc.

0

Posłuchaj cwaniaku. Nie chcesz pomagać twoja sprawa i nie komentuj.
Owszem sugerowałem się pewnym wzorem kodu, ale starałem się go przepisywać i modyfikować do swoich potrzeb. Uczę się dopiero i nie oczekuj, że każdy będzie takim zadufanym alfa programistą jak ty.

0

Woooow ale dupsko pękło. Słuchaj, nie zadałeś nawet konkretnego pytania - "czy czegoś tu nie brakuje" to nie jest pytanie.

Przykłady pytań to:

  • zapisuję X do bazy ale dostaje problem Y
  • uruchamiam ten program ale dostaje błąd - oto stacktrace ...
  • oto moje rozwiązanie problemu X, jak myślicie czy lepiej klasę Y wrzucić do Z

Popracuj trochę nad tym kodem, a gdy będziesz miał konkretne problemy wróć tu to z pewnością ktoś chętnie pomoże

2
Tomasz Moch napisał(a):

Posłuchaj cwaniaku. Nie chcesz pomagać twoja sprawa i nie komentuj.

Zabrzmiało jak:

Owszem sugerowałem się pewnym wzorem kodu, ale starałem się go przepisywać i modyfikować do swoich potrzeb.

Nie pisałeś co za potrzeby, tylko coś tam o dwóch ostatnich opcjach:

   DELETE_CONTACT,
   EXIT

Widzę, że przy dodawania kontaktu robisz 2 rzeczy:

data.saveContactToFile(contact);
contacts.add(contact);

Przy usuwaniu wypadałoby:

  • usunąć z kolekcji
  • zapisać zmodyfikowaną kolekcję

Jeśli chodzi o EXIT, to nie wiem jaki masz pomysł na funkcjonalność. Co powinno się dziać przy wychodzeniu?
Naiwna implementacja, to po prostu System.exit(0);.

1 użytkowników online, w tym zalogowanych: 0, gości: 1