Упражнение - добавьте поиск собак

Завершено

В этом упражнении вы добавите функцию "Отображение всех собак с указанной характеристикой" (пункт меню #2) в приложение. В упражнении используется проект решения из предыдущего упражнения, в котором были добавлены данные suggestedDonation.

Замечание

Этот проект является функцией "минимально работоспособного продукта" (MVP). Функции MVP предназначены для базового рабочего прототипа функции, которая обеспечивает быструю и простую доставку. MVP обычно не является конечным продуктом, его целью является помощь в работе с идеей, тестированием и сбором дополнительных требований.

Функция поиска предлагает пользователю ввести поисковый запрос, описывающий характеристику, желаемую для принятия домашнего животного. Затем в описаниях приемных собак ищут точные совпадения с входными данными пользователя. Сведения о собаках, которые соответствуют, выводятся в консоль. Если совпадений не найдено, отображается сообщение "Ни одна из наших собак не соответствует" вместе с используемым поисковым термином.

Задачи, выполненные во время этого упражнения, являются следующими:

  1. Сбор данных пользователей для термина поиска характеристик домашних животных
  2. Пройдите по массиву животных и определите "собаки"
  3. Проверьте описание питомца каждой собаки на совпадение с термином.
  4. Покажите собак, у которых совпадают термины

В Visual Studio Code откройте завершенный Project.cs файл из предыдущего упражнения, который добавил информацию о пожертвовании для начала работы.

  1. Просмотрите инструкцию переключателя меню после комментария #5 в коде Project.cs. Вы обнаружите код, отображающий сообщение "UNDER CONSTRUCTION".

  2. Удалите код Console.WriteLine("\nUNDER CONSTRUCTION - please check back next month to see progress."); между case "2": и Console.WriteLine("Press the Enter key to continue."); таким образом, чтобы код соответствовал следующему образцу.

    case "2":
        // Display all dogs with a specified characteristic
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
        break; 
    
  3. Добавьте код для сбора входных данных пользователя для dogCharacteristic строки. Для сбора входных данных требуется while цикл, который продолжает запрашивать пользователя до отправки входных данных. Цикл указывает пользователю Enter one desired dog characteristic to search for. Ввод пустой строки повторяет цикл. Поместите следующий case "2: код непосредственно перед инструкцией break; , как показано ниже:

    case "2":
        // Display all dogs with a specified characteristic
        string dogCharacteristic = "";
    
        while (dogCharacteristic == "")
        {
            // have the user enter physical characteristics to search for
            Console.WriteLine($"\nEnter one desired dog characteristics to search for");
            readResult = Console.ReadLine();
            if (readResult != null)
            {
                dogCharacteristic = readResult.ToLower().Trim();
            }
        } 
        Console.WriteLine("Press the Enter key to continue.");
        readResult = Console.ReadLine();
        break;
    

    Просмотрите добавленный код. Основными функциями case "2": кода являются:

    • Код начинается с объявления string dogCharacteristic = ""; строки, для которой задана case "2":область действия. Вы не можете использовать dogCharacteristic в любом месте за пределами кода инструкции case.
    • После того как Console.ReadLine() собирает данные от пользователей, dogCharacteristic проверяет, что значение не равно NULL, и преобразует строку в нижний регистр и обрезает окружающие пробелы.
    • Если dogCharacteristic имеет значение NULL, цикл повторяет сбор входных данных.
  4. Сохраните код, а затем скомпилируйте его с помощью dotnet build терминала (см. шаги, описанные в предыдущем упражнении) и исправьте все ошибки.

  5. Запустите код с помощью dotnet run.

  6. Чтобы проверить функциональность ввода термина поиска приложения, введите 2, выберите пункт 2меню для поиска.

  7. Нажмите «Введите» без ввода данных в поле «Введите одну желаемую характеристику собаки для поиска». Программа должна вернуться к Enter one desired dog characteristics to search for приглашению.

  8. Программа должна вернуться к приглашению, пока не будут введены какие-либо символы.

  9. На командной строке проверьте ввод поискового запроса с golden. Программа должна вернуться в меню без ошибок.

  10. В меню введите "Выход", чтобы выйти из программы.

Определите, какие животные являются собаками

Теперь вы добавляете функцию для поиска с использованием пользовательского ввода dogCharacteristic в описаниях собак, следуя предыдущему коду под case "2". Но сначала необходимо определить собак.

  1. В конце case "2" кода непосредственно перед кодом Console.WriteLine("\n\rPress the Enter key to continue");, который находится перед break;, добавьте следующий код:

    // #6 loop through the ourAnimals array to search for matching animals
    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 1].Contains("dog"))
        {
            // #7 Search combined descriptions and report results
        }
    }
    
  2. Потратьте минуту, чтобы изучить цикл, добавленный в конец кода case "2":.

    Код фильтрует "собак" с помощью ourAnimals[i,1], где данные хранятся в animalSpecies. Если animalSpecies в качестве значения хранится "собака" , код перемещается в скобки оператора if, где может происходить поиск объединенных описаний.

  3. Скомпилируйте код с помощью dotnet build и исправьте все ошибки.

Поиск комбинированной информации о собаках

Код гарантирует, что поиск происходит только по описаниям собак. Теперь вам нужно искать описания собак и предоставить информацию о совпадениях.

Думая об описаниях, вы понимаете, что есть два описания animalPhysicalDescription и animalPersonalityDescription;. Команда обсуждает функциональные возможности и решает, что объединенное описание подходит для поиска.

Замечание

Некоторые разработчики называют добавление требований во время разработки "разрастанием объема". Хотя объединение описаний не требует много усилий, это по-прежнему добавляет времени и сложности. По этой причине вы должны сообщить команде, что добавленные требования часто задерживают завершение проекта.

Необходимо объявить строку dogDescription, чтобы хранить данные, которые поступают из animalPhysicalDescription и animalPersonalityDescription; и объединяются.

  1. Объявите dogDescription непосредственно перед комментарием #6, используя следующий код:

    string dogDescription = "";
    

    Теперь используйте ранее объявленную dogDescription строку и заполните её физическими и личностными описаниями для каждого животного.

  2. dogDescription Заполните переменную значениями для animalPhysicalDescription и animalPersonalityDescription;.

    Добавьте следующий код после комментария # 7:

    dogDescription = ourAnimals[i, 4] + "\n" + ourAnimals[i, 5];
    

Поиск объединенных описаний собак и их отображение

Теперь вы добавите поиск dogCharacteristic в объединенных dogDescriptionданных. Необходимо добавить инструкцию if , чтобы определить, соответствует ли вам поиск каждой собаки.

  1. Обновите код, следующий за примечанием #7, после dogDescription = ourAnimals[i, 4] + "\n" + ourAnimals[i, 5]; с кодом:

    if (dogDescription.Contains(dogCharacteristic))
    {
        Console.WriteLine($"\nOur dog {ourAnimals[i, 3]} is a match!");
        Console.WriteLine(dogDescription);
    }
    

    Изучите предыдущий пример кода: когда оператор if находит совпадение с dogCharacteristic в dogDescription, в консоль выводится сообщение о совпадении и описании собаки. Вам всё ещё нужно учитывать сообщение «совпадения не найдены».

  2. Добавьте код noMatchesDog = true:

    Добавьте следующий код непосредственно перед комментарием #6:

    bool noMatchesDog = true;
    

    Теперь можно отслеживать отсутствие совпадений с этой переменной отслеживания. Если по умолчанию задано true, это означает, что "правда, что ни одна собака не соответствует запросу". Теперь, когда собака найдена, вы можете "перевернуть" noMatchesDog с true на false.

  3. В скобках инструкции if (dogDescription.Contains(dogCharacteristic)) добавьте следующий код:

    noMatchesDog = false;
    
  4. Проверьте правильность ввода кода в квадратных скобках if (dogDescription.Contains(dogCharacteristic)) .

    У вас должен быть следующий код:

        if (dogDescription.Contains(dogCharacteristic))
        {
            Console.WriteLine($"\nOur dog {ourAnimals[i, 3]} is a match!");
            Console.WriteLine(dogDescription);
    
            noMatchesDog = false;
        }
    

    Наконец, необходимо создать код, который решает, следует ли записать сообщение "не найдено совпадений" в консоль.

  5. В конце case "2" кода непосредственно перед кодом Console.WriteLine("\n\rPress the Enter key to continue");, который находится перед break;, добавьте следующий код:

    if (noMatchesDog)
    {
        Console.WriteLine("None of our dogs are a match found for: " + dogCharacteristic);
    }
    
    

    Этот пример кода является окончательным кодом для этого упражнения!

  6. Сохраните ваши изменения.

Проверь свою работу

  1. В командной строке ТЕРМИНАЛА, чтобы собрать код вашего проекта, введите следующую команду: dotnet build.

    Если возникают ошибки, необходимо прочитать сообщения об ошибках, выполнить поиск и устранение неисправностей, внести исправления или просмотреть код решения в папке "Final".

  2. Запустите код проекта в терминале.dotnet run

После запуска кода отображаются два пункта меню.

  1. В меню введите "2" и нажмите "Enter", чтобы многократно протестировать поиск собаки.

     - Enter nothing as input to test the null entry behavior
     - Enter "scuba" as input to test the "match not found"
     - Enter "golden" to get two matches
     - Enter "medium" to get one match
    

    Если все работало как ожидалось в обоих шагах, поздравляем! В противном случае ищите ошибки, проверяя шаги упражнения. При необходимости начните заново или проверьте код в папке 'Final' для решения этого упражнения.

  2. Введите exitв меню приложения, чтобы завершить программу, а затем закройте панель терминала.