Powiem Ci że wygląda całkiem przyzwoicie. Korzystasz z Linuxa? Bo jeśli tak to proponuję Ci przerobić program tak żeby był do użytku ładnie z konsoli:
cesar --file message.txt --key -4 --screenout
# albo
cesar --file codes.txt --key 2 --fileout crypted.txt
Co do kodu... Funkcja decode nie powinna się nazywać decode Jak nazwa mówi decode ma dekodować, więc pobrać jakiś argument i coś zwrócić. Tymczasem u Ciebie czyści ekran, czyta plik, pisze po ekranie, co więcej nic nie zwraca.