public Dictionary <string, PersonContactDetails> StateDictionaryCollection()
        {
            Dictionary <string, PersonContactDetails> stateDictionary = new Dictionary <string, PersonContactDetails>();

            Dictionary <string, AddressBookMain> .Enumerator enumerator = multipleAddressBooks.GetEnumerator();
            while (enumerator.MoveNext())
            {
                AddressBookMain searchAddressBook = enumerator.Current.Value;
                HashSet <PersonContactDetails>             addressBook = searchAddressBook.GetAddressBook();
                HashSet <PersonContactDetails> .Enumerator enumerator1 = addressBook.GetEnumerator();
                while (enumerator1.MoveNext())
                {
                    PersonContactDetails c = enumerator1.Current;
                    stateDictionary.Add(enumerator1.Current.state, c);
                }
            }
            return(stateDictionary);
        }
        static void Main(string[] args)
        {
            string nameOfAddressBook = "";
            int    choiceOfOperation;
            int    choiceOfAddressBookOperation;
            int    numberOfCities = 0;
            int    numberOFStates = 0;

            Console.WriteLine(" Welcome to Address Book Program ");
            Console.WriteLine(" =============================== ");
            AddressBookMain     addressBookMain     = null;
            MultipleAddressBook multipleAddressBook = new MultipleAddressBook();

            while (true)
            {
StartAddressBook:
                bool flag = true;
                Console.WriteLine("Enter your choice of operation(1 to 5)\n1.ADD ADDRESS BOOK\n2.GET ADDRESS BOOK\n3.VIEW PERSON BY CITY\n4.VIEW PERSON BY STATE\n5.EXIT");
                choiceOfOperation = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("Enter name of Address Book");
                nameOfAddressBook = Console.ReadLine();
                switch (choiceOfOperation)
                {
                case 1:
                    multipleAddressBook.AddNewAddressBook(nameOfAddressBook);
                    addressBookMain = multipleAddressBook.GetAddressBook(nameOfAddressBook);
                    break;

                case 2:
                    addressBookMain = multipleAddressBook.GetAddressBook(nameOfAddressBook);
                    if (addressBookMain == null)
                    {
                        Console.WriteLine("No such address book found");
                    }
                    break;

                case 3:
citySearch:
                    Console.WriteLine("Enter city name whose person details you want");
                    string nameOfCity = Console.ReadLine();
                    Dictionary <string, PersonContactDetails> cityDictionary = multipleAddressBook.CityDictionaryCollection();
                    foreach (var dict in cityDictionary)
                    {
                        if (cityDictionary.ContainsKey(nameOfCity))
                        {
                            Console.WriteLine("First Name:" + dict.Value.firstName + "Last Name:" + dict.Value.lastName + "Address:" + dict.Value.address + "City:" + dict.Value.city + "State:" + dict.Value.state + "pincode:" + dict.Value.zipCode + "phone: " + dict.Value.phoneNumber + "email address:" + dict.Value.emailID + "\n");
                        }
                        else
                        {
                            Console.WriteLine("City doesn't exist");
                            goto citySearch;
                        }
                        numberOfCities++;
                    }
                    Console.WriteLine("Total number of cities in address book: " + numberOfCities);
                    break;

                case 4:
stateSearch:
                    Console.WriteLine("Enter state name whose person details you want");
                    string stateRequired = Console.ReadLine();
                    Dictionary <string, PersonContactDetails> stateDictionary = multipleAddressBook.StateDictionaryCollection();
                    foreach (var dict in stateDictionary)
                    {
                        if (stateDictionary.ContainsKey(stateRequired))
                        {
                            Console.WriteLine("First Name:" + dict.Value.firstName + "Last Name:" + dict.Value.lastName + "Address:" + dict.Value.address + "City:" + dict.Value.city + "State:" + dict.Value.state + "pincode:" + dict.Value.zipCode + "phone: " + dict.Value.phoneNumber + "email address:" + dict.Value.emailID + "\n");
                        }
                        else
                        {
                            Console.WriteLine("State doesn't exist");
                            goto stateSearch;
                        }
                        numberOFStates++;
                    }
                    Console.WriteLine("Total number of states in address book: " + numberOFStates);
                    break;

                case 5:
                    flag = false;
                    break;

                default:
                    Console.WriteLine("Invalid Choice");
                    goto StartAddressBook;
                }
                while (flag)
                {
                    if (addressBookMain == null)
                    {
                        break;
                    }
OperationsOnAddressBook:
                    Console.WriteLine("Please enter your choice of operation(1 to 9)");
                    Console.WriteLine("\n1.ADD CONTACT\n2.EDIT CONTACT USING FIRST NAME\n3.REMOVE CONTACT USING FIRST NAME\n4.DISPLAY BOOK\n5.CHECK FOR DUPLICATE NAME\n6.SEARCH CONTACT BY CITY OR STATE\n7.SORT ALPHABETICALLY BY FIRST NAME\n8.SORT BY CITY, STATE AND ZIPCODE\n9.EXIT");
                    choiceOfAddressBookOperation = Convert.ToInt32(Console.ReadLine());
                    switch (choiceOfAddressBookOperation)
                    {
                    case 1:
                        Console.WriteLine("Enter number of contacts you want to add");
                        int numberOfContacts = Convert.ToInt32(Console.ReadLine());
                        for (int i = 1; i <= numberOfContacts; i++)
                        {
                            addressBookMain.AddContactToBook();
                        }
                        break;

                    case 2:
                        addressBookMain.EditUsingFirstName();
                        break;

                    case 3:
                        addressBookMain.RemoveUsingFirstName();
                        break;

                    case 4:
                        addressBookMain.DisplayAddressBook();
                        break;

                    case 5:
                        multipleAddressBook.CheckDuplicateName();
                        break;

                    case 6:
                        Console.WriteLine("Enter the city/state");
                        string cityOrState = Console.ReadLine();
                        multipleAddressBook.SearchPersonByCityStateOverMultipleAddressBook(cityOrState);
                        break;

                    case 7:
                        addressBookMain.SortByName();
                        goto OperationsOnAddressBook;

                    case 8:
                        addressBookMain.SortByCityStateZip();
                        goto OperationsOnAddressBook;

                    case 9:
                        flag = false;
                        break;

                    default:
                        Console.WriteLine("Please enter valid choice");
                        goto OperationsOnAddressBook;
                    }
                    //AddressBookMain.ImplementCSVOperations();
                    AddressBookMain.ImplementJSONOperations();
                }
            }
        }