По поводу ввода данных, на мой взгляд, удачное решение сделано в ideone.com
то есть, пользователь сперва вводит все данные, которые ему придется ввести, а потом они передаются программе. Если же хотите, что пользователь вводил данные именно в тот момент, когда, например, программа выдала приглашение на их ввод, то придется поработать.