Как я могу улучшить метод addEntry () моей адресной книги? - PullRequest
0 голосов
/ 19 февраля 2011

У меня есть программа адресной книги, которая [1] добавляет запись [2] удаляет запись [3] обновляет / редактирует запись [4] просматривает все записи и [5] просматривает конкретную запись ..

Записи былихранится в массиве entry[], например:

entry[counter] = new AddressBookEntry();

Все работает правильно, но дело в том ... я хочу, чтобы была проверка, было ли уже введено имя пользователя или пользователь этого не делаетнабрал что-нибудь, когда я спросил «Введите имя»:

вот мой addEntry() метод:

public void addEntry() {

    entry[counter] = new AddressBookEntry();
    entry[counter].setName(JOptionPane.showInputDialog("Enter name: "));
    entry[counter].setAdd(JOptionPane.showInputDialog("Enter add: "));
    entry[counter].setPhoneNo(JOptionPane.showInputDialog("Enter Phone No.: "));
    entry[counter].setEmail(JOptionPane.showInputDialog("Enter E-mail: "));
    counter++;
}

Он позволяет пользователю вводить любую запись, которую он хочет ... но не проверяет, если имяуже используется, и если пользователь оставит поле «Ввести имя:» пустым, он по-прежнему позволяет пользователю перейти к «Ввод Добавить .:»

вот мой полный код в моей основной программе:

import javax.swing.JOptionPane;
import javax.swing.JTextArea;

public class AddressBook {

    private AddressBookEntry entry[];
    private int counter;
    private String SName;
    private int notfound = 0;

    public static void main(String[] args) {
        AddressBook a = new AddressBook();
        a.entry = new AddressBookEntry[100];
        int option = 0;
        try {
            while (option != 5) {
                String content = "Choose an Option\n\n"
                        + "[1] Add an Entry\n"
                        + "[2] Delete an Entry\n"
                        + "[3] Update an Entry\n"
                        + "[4] View all Entries\n"
                        + "[5] View Specific Entry\n"
                        + "[6] Exit";
                option = Integer.parseInt(JOptionPane.showInputDialog(content));
                switch (option) {
                    case 1:
                        a.addEntry();
                        break;
                    case 2:
                        a.deleteEntry();
                        break;
                    case 3:
                        a.editEntry();
                        break;
                    case 4:
                        a.viewAll();
                        break;
                    case 5:
                        a.searchEntry();
                        break;
                    case 6:
                        System.exit(1);
                        break;
                    default:
                        JOptionPane.showMessageDialog(null, "Invalid Choice!");
                }
            }
        }catch(NumberFormatException e){
            JOptionPane.showMessageDialog(null, "Please Choose a Number in the displayed Menu");
        }
    }

    public void addEntry() {
        entry[counter] = new AddressBookEntry();
        entry[counter].setName(JOptionPane.showInputDialog("Enter name: "));
        entry[counter].setAdd(JOptionPane.showInputDialog("Enter add: "));
        entry[counter].setPhoneNo(JOptionPane.showInputDialog("Enter Phone No.: "));
        entry[counter].setEmail(JOptionPane.showInputDialog("Enter E-mail: "));
        counter++;
    }

    public void viewAll() {
        String addText = "  NAME\tADDRESS\tPHONE NO.\tE-MAIL ADD\n\n";
        int nonNull = 0;
        for (int i = 0; i < entry.length; i++) {
            if (entry[i] != null) {
                addText = addText + entry[i].getInfo() + "\n";
                nonNull++;
            }
            if (nonNull == counter) {
                break;
            }
        }
        JOptionPane.showMessageDialog(null, new JTextArea(addText));
    }

    public void searchEntry() {
        SName = JOptionPane.showInputDialog("Enter Name to find: ");
        searchMethod();
    }

    public void searchMethod() {
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(SName)) {
                JOptionPane.showMessageDialog(null, entry[i].getInfo2());
                notfound = 0;
                break;
            } else {
                notfound++;
            }
        }
        if (notfound != 0) {
            JOptionPane.showMessageDialog(null, "Name Not Found!");
        }
    }

    public void editEntry() {
        SName = JOptionPane.showInputDialog("Enter Name to edit: ");
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(SName)) {
                entry[i] = new AddressBookEntry();
                entry[i].setName(JOptionPane.showInputDialog("Enter new name: "));
                entry[i].setAdd(JOptionPane.showInputDialog("Enter new add: "));
                entry[i].setPhoneNo(JOptionPane.showInputDialog("Enter new Phone No.: "));
                entry[i].setEmail(JOptionPane.showInputDialog("Enter new E-mail: "));
                notfound = 0;
                break;
            } else {
                notfound++;
            }
        }
        if (notfound != 0) {
            JOptionPane.showMessageDialog(null, "Name Not Found!");
        }
    }

    public void deleteEntry() {
        SName = JOptionPane.showInputDialog("Enter Name to delete: ");
        for (int i = 0; i < counter; i++) {
            if (entry[i].getName().equals(SName)) {
                JOptionPane.showMessageDialog(null, "Found!");
                entry[i] = null;
                break;
            }
        }
    }
}

Надеюсь, вы можете мне помочь. Я новичок в Java, и я действительно не знаю, что добавить в код для проверки.
* Что мне добавить в метод addEntry(), чтобы проверить, было ли имя ужеиспользуется или имя не введено?* Мне нужно условие, как в моем searchMethod()?

1 Ответ

1 голос
/ 19 февраля 2011

Адресная книга, как правило, это вещь, для которой задано имя, вы ищите адрес и другую информацию.

, так что это подпадает под общую схему, в которой у вас есть Ключ (имя) изначение (другая информация)

Когда вы видите это, вы хотите подумать об использовании карты

Итак, я бы рекомендовал вместо помещения AddressBookEntry в массив использовать картукак это

Map<String, AddressBookEntry> addressBook = new HashMap<String, AddressBookEntry>();

, тогда, когда вы хотите добавить новую запись, сделайте

addressBook.put("John", new AddressBookEntry());

хорошая вещь о карте, что вы можете иметь только одну запись для одного человека.

Так что вам не нужно беспокоиться о том, что произойдет, если вы дважды поместите Джона в книгу.Это позволит только один там.

...