static void Main(string[] args) { string text, key; while (true) { Console.WriteLine("What to do?"); Console.WriteLine("1. Encrypt"); Console.WriteLine("2. Decrypt"); Console.WriteLine("0. Exit"); Task task = (Task)Convert.ToInt32(Console.ReadLine()); if (task == Task.Exit) { break; } Console.WriteLine("Which cipher?"); Console.WriteLine("1. Vigenere"); Console.WriteLine("2. Caesar"); Cipher cipher = (Cipher)Convert.ToInt32(Console.ReadLine()) - 1; switch (task) { case Task.Encrypt: text = GetText(); key = GetKey(); switch (cipher) { case Cipher.Vigenere: Encode.Encoder encVig = new VigenereEncoder(text, key); EncodedMessage msgVig = encVig.Create(); Console.WriteLine("Encrypted message: {0}", msgVig.text); break; case Cipher.Caesar: Encode.Encoder encCaesar = new CaesarEncoder(text, key); EncodedMessage msgCaesar = encCaesar.Create(); Console.WriteLine("Encrypted message: {0}", msgCaesar.text); break; } break; case Task.Decrypt: text = GetText(); key = GetKey(); switch (cipher) { case Cipher.Vigenere: Decode.Decoder decVig = new VigenereDecoder(text, key); DecodedMessage msgVig = decVig.Create(); Console.WriteLine("Decrypted message: {0}", msgVig.text); break; case Cipher.Caesar: Decode.Decoder decCaesar = new CaesarDecoder(text, key); DecodedMessage msgCaesar = decCaesar.Create(); Console.WriteLine("Decrypted message: {0}", msgCaesar.text); break; } break; } } Console.ReadKey(); }