연습 - 개 검색 추가

완료됨

이 연습에서는 "지정된 특성을 가진 모든 개 표시" 기능(메뉴 항목 #2)을 애플리케이션에 추가합니다. 이 연습에서는 데이터를 추가 suggestedDonation 한 이전 연습의 솔루션 프로젝트를 사용합니다.

비고

이 프로젝트는 "MVP(최소 실행 가능한 제품) 기능입니다. MVP 기능은 빠르고 쉽게 배달할 수 있도록 하는 기능의 기본 작업 프로토타입을 위한 것입니다. MVP는 일반적으로 최종 제품이 아니며, 그 목적은 아이디어를 통해 작업하고, 테스트하고, 추가 요구 사항을 수집하는 데 도움이 되는 것입니다.

검색 기능은 사용자가 입양을 원하는 애완동물의 특성을 설명하는 검색어 또는 구문을 입력하도록 요청합니다. 그런 다음, 입양 가능한 개의 설명에서 사용자 입력과 정확히 일치하는 내용을 검색합니다. 일치하는 개에 대한 정보는 콘솔에 출력됩니다. 일치하는 항목이 식별되지 않으면 사용된 검색어와 함께 "우리 개들 중에 일치하는 개가 없습니다" 라는 메시지가 표시됩니다.

이 연습 중에 완료하는 작업은 다음과 같습니다.

  1. 애완 동물 특성 검색 용어에 대한 사용자 입력 수집
  2. 동물 배열을 반복하고 "개"를 식별합니다.
  3. 각 강아지의 애완 동물 설명에서 용어 일치를 검색합니다.
  4. 용어가 일치하는 개 표시

Visual Studio Code에서 시작하기 위해 기부 정보를 추가한 이전 연습에서 완료된 Project.cs 파일을 엽니다.

  1. Project.cs 코드에서 주석 #5 다음에 있는 메뉴 스위치 문을 검토합니다. "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 수 없습니다.
    • Console.ReadLine() 사용자 입력 dogCharacteristic 을 수집하면 값이 null이 아닌지 확인하고 문자열을 소문자로 설정하고 주변 공간을 자른다.
    • null 값이 있는 경우 dogCharacteristic 루프는 입력 수집을 반복합니다.
  4. 코드를 저장한 다음 터미널에서 사용하여 dotnet build 컴파일하고(이전 연습의 단계를 참조할 수 있음) 오류를 수정합니다.

  5. 를 사용하여 코드를 실행합니다 dotnet run.

  6. 앱의 검색 용어 입력 기능을 테스트하려면 2을 입력하고, 검색을 위해 메뉴 옵션 2을 선택합니다.

  7. "검색할 원하는 개 특성 입력" 프롬프트에서 데이터를 입력하지 않고 "Enter"를 누릅니다. 프로그램은 다시 Enter one desired dog characteristics to search for 프롬프트로 돌아가야 할 것입니다.

  8. 프로그램이 문자가 입력될 때까지 프롬프트로 돌아가야 합니다.

  9. 프롬프트에 golden를 입력하여 검색어를 테스트합니다. 프로그램은 오류 없이 메뉴로 돌아가야 합니다.

  10. 메뉴에서 "Exit"를 입력하여 프로그램을 종료합니다.

어떤 동물이 개인지 식별

이제 아래의 이전 코드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. 코드 끝에 추가된 루프를 검사하는 데 1분 정도 걸릴 수 있습니다 case "2": .

    코드는 ourAnimals[i, 데이터가 저장되는 1]animalSpecies를 사용하여 “개”를 필터링합니다. animalSpecies를 해당 값으로 저장하는 경우 코드는 결합된 설명의 검색이 발생할 수 있는 if 문의 대괄호로 이동합니다.

  3. dotnet build를 사용하여 코드를 컴파일하고 오류를 수정하세요.

강아지의 결합된 설명 정보 검색

이전 코드는 개 설명만 검색하도록 합니다. 이제 개 설명을 검색하고 일치하는 항목에 대한 정보를 출력해야 합니다.

설명에 대해 생각하는 동안 두 가지 설명 animalPhysicalDescriptionanimalPersonalityDescription;가 있다는 것을 알게 됩니다. 팀은 기능에 대해 설명하고 결합된 설명이 검색에 적합하다는 것을 결정합니다.

비고

일부 개발자는 개발 중 요구 사항 추가를 "범위 크리프"라고 부릅니다. 설명을 결합하는 것은 별로 일이 아니지만, 시간과 복잡성을 더합니다. 이러한 이유로 추가된 요구 사항이 프로젝트 완료를 지연시키는 경우가 많다는 것을 팀에 알려야 합니다.

dogDescriptionanimalPhysicalDescription에서 발생한 결합 데이터를 저장할 문자열 animalPersonalityDescription;을 선언해야 합니다.

  1. 다음 코드를 사용하여 주석 #6 바로 앞에 선언 dogDescription 합니다.

    string dogDescription = "";
    

    이제 이전에 선언된 문자열을 dogDescription 사용하고 각 동물에 대한 물리적 및 성격 설명으로 채웁니다.

  2. 변수를 dogDescriptionanimalPhysicalDescriptionanimalPersonalityDescription;값으로 채웁다.

    주석 # 7 다음에 다음 코드를 추가합니다.

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

개에 대한 결합된 설명을 검색하고 표시합니다.

이제 (c1)의 결합된 데이터에 대한 (c0) 검색을 추가합니다. 각 개의 검색에 대한 일치를 확인하기 위해 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일 경우 "검색과 일치하는 개가 없다는 것이 사실"을 의미합니다. 이제 개가 발견되면 noMatchesDogtrue에서 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. TERMINAL 명령 프롬프트에서 프로젝트 코드를 빌드하려면 다음 명령을 dotnet build입력합니다.

    오류가 있는 경우 오류 메시지를 읽고 문제를 해결하고 수정하거나 "최종" 폴더의 솔루션 코드를 검토해야 합니다.

  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
    

    모든 것이 두 단계에서 예상대로 작동하면 축하합니다! 그렇지 않으면 연습 단계를 확인하여 오류를 찾습니다. 필요한 경우 이 연습에 대한 솔루션 코드에 대한 최종 폴더 코드를 다시 시작하거나 확인합니다.

  2. 앱 메뉴에서 exit를 입력하여 프로그램을 종료한 다음 터미널 패널을 닫습니다.