2015-07-29 8 views
5

Próbuję utworzyć program menedżerów kontaktów w aplikacji konsoli przy użyciu listy do przechowywania i wyświetlania danych. Muszę wyświetlić raport, który wyświetla podsumowanie dostępnych kontaktów, a następnie mieć menu umożliwiające użytkownikowi interakcję z programem. Mam metodę tworzenia kontaktu i obiektu kontaktu. Mam również metodę usuwania kontaktu, ale chcę, aby użytkownik mógł wybrać nazwę kontaktu i móc usunąć wybrany kontakt. Jednak nie jestem pewien, jak to zrobić.usuwa element wybrany przez użytkownika z listy

Wszelkie wskazówki będą mile widziane.

static void Main(string[] args) 
     {   
      //Declare the list 

      List<Contact> contactList = new List<Contact>(); 

      //Main Driver 
      char menuItem; 
      Console.WriteLine("Contact List\n"); 
      menuItem = GetMenuItem(); 
      while (menuItem != 'Q') 
      { 

       ProcessMenuItem(menuItem, contactList); 
       menuItem = GetMenuItem(); 

      } 
      Console.WriteLine("\nThank you, goodbye"); 
      Console.ReadLine(); 
     } 
     //Returns either a 'C', 'R', 'U', 'D', 'L', or 'X' to the caller 
     static char GetMenuItem() 
     { 
      char menuItem; 
      DisplayMenu(); 
      menuItem = char.ToUpper(IOConsole.GetChar("\nPlease pick an item: ")); 
      while (menuItem != 'C' 
       && menuItem != 'R' && menuItem != 'Q' && menuItem != 'U' && menuItem != 'D' && menuItem != 'S' && menuItem != 'L' && menuItem != 'F' && menuItem != 'P' && menuItem != 'T') 
      { 
       Console.WriteLine("\nError - Invalid menu item"); 
       DisplayMenu(); 
       menuItem = char.ToUpper(IOConsole.GetChar("\nEnter option or M for menu:")); 
      } 
      return menuItem; 
     } 

     static void DisplayMenu() 
     { 
      Console.WriteLine("C-> Create Contacts"); 
      Console.WriteLine("R-> Remove Contacts"); 
      Console.WriteLine("U-> Update Contacts"); 
      Console.WriteLine("D -> Load data from file"); 
      Console.WriteLine("S-> Save data to file"); 
      Console.WriteLine("L-> View sorted by last name"); 
      Console.WriteLine("F-> View sorted by first name"); 
      Console.WriteLine("P-> View by partial name search"); 
      Console.WriteLine("T-> View by contact type"); 
      Console.WriteLine("Q-> Quit"); 
     } 

     //Routes to the appropriate process routine based on the user menu choice 
     static void ProcessMenuItem(Char menuItem, List<Contact> contactList) 
     { 
      switch (menuItem) 
      { 
       case 'C': 
        createContact(); 
        break; 
       case 'R': 
        removeContact(contactList); 
        break; 
       case 'U': 
        updateContact(contactList); 
        break; 
       case 'D': 
        LoadFromFile(); 
        break; 
       case 'S': 
        saveToFile(); 
        break; 

       case 'L': 
        sortByLastName(contactList); 
        break; 
       case 'F': 
        sortByFirstName(contactList); 
         break; 
       case 'P': 
         DisplayList(contactList); 
         break; 
       case 'T': 
         sortByContactType(); 
         break; 
       case 'Q': 

         break; 

      }     
     } 
//allows the user to remove a contact 
     public static void removeContact(List<Contact> contactList) 
     { 

      for (int i = 0; i < contactList.Count; i++) 
       if (i % 5 == 0) 
      contactList.RemoveAt(i); 

     } 

Odpowiedz

1

Można dokonać funkcję tak: który zaakceptuje List i contact name to usunie pierwsze wystąpienie nazwy kontaktu z listy kontaktów.

public static void removeContact(List<Contact> contactList, object ContactName) 
     { 
      Contact contactToRemove = (Contact)contactList.AsEnumerable().Where 
             (x => x.ContactName == ContactName || 
             x.ContactNumber == (int)ContactName).First(); 
      contactList.Remove(contactToRemove); 
     } 

moja klasa kontaktowy:

class Contact 
    { 
     private int _ContactNumber; 

     public int ContactNumber 
     { 
      get { return _ContactNumber; } 
      set { _ContactNumber = value; } 
     } 
     private string _ContactName; 

     public string ContactName 
     { 
      get { return _ContactName; } 
      set { _ContactName = value; } 
     }    
    } 

Więc sprawa będzie coś takiego:

case 'R': 
     Console.WriteLine("enter the contact name/Contact Number To delete"); 
     removeContact(contactList, Console.Read().ToString()); 
     break; 
+0

W tym przypadku nazwa kontaktu może być taka sama, należy wybrać unikalne pole, które nie może się równać, zamiast tego użyj numeru telefonu, który byłby lepszy – VizardCrawler

+0

@ vishal: zaktualizowałem swoją odpowiedź teraz, gdy jest ona w stanie usunąć szczegóły na podstawie nazwa kontaktu lub numer kontaktowy –

+0

Ale kontaktu nie należy nigdy usuwać, używając nazwy kontaktu !! , jak nazwisko można powtórzyć, może być dwie osoby o tym samym imieniu !! , I doceniam, że zaktualizowałeś to nadal, powinieneś zawsze usunąć lub edytować coś, co jest unikalne, powiedziałbym użyć samego numeru lub Id, jeśli ma on – VizardCrawler

4

Można to zrobić łatwo za pomocą LINQ lub lambda wyrażenie:

W klasie modelu styku uczynić pole powiedzieć sam numer telefonu.

Przy wyborze styku dwóch parametrów w

removeContact(List<Contact> contactList,int selectedContactPhoneNo) 

Można po prostu zrobić wtedy:

contactList.RemoveAll(x => x.PhoneNo == selectedContactPhoneNo); 
1

Prostym rozwiązaniem byłoby pętli na liście kontaktów, a następnie użyć jednego nieruchomości z twojego kontaktu jako klucz wyszukiwania.

//Search contact via number 
//Depending which key you would want for example Contact's Number: 
int number = 1; 
Contact contact = null; 
for (int i = 0; i < contactList.Count; i++) 
{ 
    if (contactList[i].Number == number) 
    { 
     contact = contactList[i]; //Assign contact 
     break; 
    } 
} 

//Remove contact from list 
if (contact != null) //If not null, it means we found it. Remove it from the list: 
{ 
    contactList.Remove(contact); 
} 

Możesz utworzyć funkcję dla powyższej implementacji, aby przekazać konkretne słowo kluczowe podczas wyszukiwania i usuwania pozycji z listy.

Powiązane problemy