Aqui está os arquivos para posterior reformulação e adaptação de acordo com o que é pedido. Em questão aos throws e esceptions, não sei se é exatamente daquela forma. Qualquer coisa me avise!