Last active
December 19, 2015 12:59
-
-
Save lrlucena/5958782 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package banco | |
class Banco() { | |
val taxaJuros: Double = 0.11 | |
var contas: List[Conta] = Nil; | |
var proximoNumero: Int = 1; | |
def abrirContaEspecial(quantia: Double): Option[Conta] = { | |
if (quantia > 0) { | |
val c = new ContaEspecial(proximoNumero.toString, quantia, 500); | |
proximoNumero += 1 | |
contas = c :: contas | |
Some(c) | |
} else None | |
} | |
def abrirContaCorrente(quantia: Double) = { | |
if (quantia > 0) { | |
val c = new ContaCorrente(proximoNumero.toString, quantia); | |
proximoNumero += 1; | |
contas = c :: contas; | |
Some(c); | |
} else None; | |
} | |
def getConta(numero: String): Option[Conta] = { | |
for (c <- contas) { | |
if (c.numero == numero) { | |
return Some(c) | |
} | |
} | |
None | |
} | |
def fecharConta(numero: String) = { | |
val conta = getConta(numero); | |
conta match { | |
case Some(c) if c.saldo == 0 => | |
contas.filter(conta == _) | |
true | |
case _ => false | |
} | |
} | |
def sacar(numero: String, quantia: Double) = { | |
val c = getConta(numero); | |
c match { | |
case Some(c) => c.sacar(quantia) | |
case None => false | |
} | |
} | |
def depositar(numero: String, quantia: Double) = { | |
val conta = getConta(numero); | |
conta match { | |
case Some(c) if quantia > 0 => | |
val quantia2 = quantia + | |
(if (c.saldo < 0) c.saldo * taxaJuros else 0) | |
c.depositar(quantia2) | |
true | |
case _ => false | |
} | |
} | |
} | |
trait Conta { | |
val numero: String | |
def saldo: Double | |
def sacar(valor: Double): Boolean | |
def depositar(valor: Double): Boolean | |
override def toString = s"Conta no $numero" | |
} | |
class ContaCorrente(val numero: String, private var _saldo: Double) extends Conta { | |
def saldo = _saldo | |
def disponivel = saldo | |
def depositar(valor: Double) = { | |
if (valor >= 0) { | |
_saldo += valor | |
true | |
} else | |
false | |
} | |
def sacar(valor: Double) = { | |
if (valor >= 0 && disponivel >= valor) { | |
_saldo -= valor | |
true | |
} else | |
false | |
} | |
override def toString = s"Conta no. $numero" | |
} | |
class ContaEspecial(numero: String, _saldo: Double, limite: Double) extends ContaCorrente(numero, _saldo) { | |
override def disponivel = saldo + limite | |
override def toString = s"${super.toString}. Limite R$$ $limite" | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main extends App { | |
val banco = new Banco(); | |
println("**** BEM-VINDO AO BANCO ****"); | |
main | |
println("*** Aplicativo banco encerrado ***"); | |
def main { | |
println("1 - Abrir conta corrente"); | |
println("2 - Abrir conta especial"); | |
println("3 - Fechar conta"); | |
println("4 - Realizar saque"); | |
println("5 - Realizar dep�sito"); | |
println("6 - Ver saldo"); | |
println("0 - Sair"); | |
val opcao = readInt; | |
if(opcao == 1 || opcao == 2){ | |
System.out.print("Quantia inicial: "); | |
val quantia = readDouble(); | |
var c: Option[Conta] = None; | |
if(opcao == 1){ | |
c = banco.abrirContaCorrente(quantia); | |
} | |
else{//2 | |
c = banco.abrirContaEspecial(quantia); | |
} | |
if(c != null){ | |
println("Conta criada com o numero " + c.get.numero); | |
} | |
else{ | |
println("A operacao falhou!"); | |
} | |
} | |
else if(opcao == 3){ | |
System.out.print("Numero da conta: "); | |
val numero = readLine; | |
val ok = banco.fecharConta(numero); | |
if(ok){ | |
println("Conta fechada com sucesso."); | |
} | |
else{ | |
println("A operacao falhou!"); | |
} | |
} | |
else if(opcao == 4){ | |
System.out.print("Numero da conta: "); | |
val numero = readLine; | |
System.out.print("Quantia: "); | |
val quantia = readDouble; | |
val ok = banco.sacar(numero, quantia); | |
if(ok){ | |
println("Saque realizado com sucesso!"); | |
} | |
else{ | |
println("A opera��o falhou. Verifique se o saldo ou limite � suficiente."); | |
} | |
} | |
else if(opcao == 5){ | |
System.out.print("Numero da conta: "); | |
val numero = readLine; | |
System.out.print("Quantia: "); | |
val quantia = readDouble; | |
val ok = banco.depositar(numero, quantia); | |
if(ok){ | |
println("Dep�sito realizado com sucesso!"); | |
} | |
else{ | |
println("A opera��o falhou!"); | |
} | |
} | |
else if(opcao == 6){ | |
System.out.print("Numero da conta: "); | |
val numero = readLine; | |
val c = banco.getConta(numero); | |
if(c != None){ | |
println("Saldo: " + c.get.saldo); | |
} | |
else{ | |
println("Conta nao encontrada!."); | |
} | |
} | |
if (opcao!=0) main | |
} | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main2 extends App { | |
val banco = new Banco(); | |
println("**** BEM-VINDO AO BANCO SCALA****") | |
main | |
println("*** Aplicativo banco encerrado ***") | |
def main { | |
println( | |
"""1 - Abrir conta corrente | |
|2 - Abrir conta especial | |
|3 - Fechar conta | |
|4 - Realizar saque | |
|5 - Realizar deposito | |
|6 - Ver saldo | |
|0 - Sair""".stripMargin) | |
val opcao = readInt; | |
if (opcao == 1 || opcao == 2) { | |
print("Quantia inicial: ") | |
val quantia = readDouble | |
val c = if (opcao == 1) { | |
banco.abrirContaCorrente(quantia); | |
} else { //2 | |
banco.abrirContaEspecial(quantia); | |
} | |
c match { | |
case Some(conta) => println(s"Conta criada com o numero ${conta.numero}") | |
case None => println("A operacao falhou!") | |
} | |
} else if (opcao == 3) { | |
print("Numero da conta: ") | |
val numero = readLine; | |
val ok = banco.fecharConta(numero); | |
if (ok) { | |
println("Conta fechada com sucesso."); | |
} else { | |
println("A operacao falhou!"); | |
} | |
} else if (opcao == 4) { | |
print("Numero da conta: "); | |
val numero = readLine; | |
print("Quantia: "); | |
val quantia = readDouble; | |
val ok = banco.sacar(numero, quantia); | |
if (ok) { | |
println("Saque realizado com sucesso!"); | |
} else { | |
println("A operacao falhou. Verifique se o saldo ou limite é suficiente."); | |
} | |
} else if (opcao == 5) { | |
print("Numero da conta: "); | |
val numero = readLine; | |
print("Quantia: "); | |
val quantia = readDouble; | |
val ok = banco.depositar(numero, quantia); | |
if (ok) { | |
println("Deposito realizado com sucesso!"); | |
} else { | |
println("A operacao falhou!"); | |
} | |
} else if (opcao == 6) { | |
print("Numero da conta: "); | |
val numero = readLine; | |
val c = banco.getConta(numero); | |
c match { | |
case Some(conta) => println(s"Saldo: ${conta.saldo}") | |
case None => println("Conta nao encontrada!.") | |
} | |
} | |
if (opcao != 0) main | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
object Main2 extends App { | |
val banco = new Banco(); | |
println("**** BEM-VINDO AO BANCO SCALA****") | |
main | |
println("*** Aplicativo banco encerrado ***") | |
def main { | |
println( | |
"""1 - Abrir conta corrente | |
|2 - Abrir conta especial | |
|3 - Fechar conta | |
|4 - Realizar saque | |
|5 - Realizar deposito | |
|6 - Ver saldo | |
|0 - Sair""".stripMargin) | |
val opcao = readInt; | |
opcao match { | |
case 1 => abrirConta(false) | |
case 2 => abrirConta(true) | |
case 3 => fecharConta | |
case 4 => sacar | |
case 5 => depositar | |
case 6 => verSaldo | |
case _ => Unit | |
} | |
if (opcao != 0) main | |
} | |
def abrirConta(especial: Boolean = false) { | |
print("Quantia inicial: ") | |
val quantia = readDouble | |
val c = if (especial) { | |
banco.abrirContaEspecial(quantia); | |
} else { | |
banco.abrirContaCorrente(quantia); | |
} | |
c match { | |
case Some(conta) => println(s"Conta criada com o numero ${conta.numero}") | |
case None => println("A operacao falhou!") | |
} | |
} | |
def fecharConta { | |
print("Numero da conta: ") | |
val numero = readLine; | |
val ok = banco.fecharConta(numero); | |
if (ok) { | |
println("Conta fechada com sucesso."); | |
} else { | |
println("A operacao falhou!"); | |
} | |
} | |
def sacar { | |
print("Numero da conta: "); | |
val numero = readLine; | |
print("Quantia: "); | |
val quantia = readDouble; | |
val ok = banco.sacar(numero, quantia); | |
if (ok) { | |
println("Saque realizado com sucesso!"); | |
} else { | |
println("A operacao falhou. Verifique se o saldo ou limite é suficiente."); | |
} | |
} | |
def depositar { | |
print("Numero da conta: "); | |
val numero = readLine; | |
print("Quantia: "); | |
val quantia = readDouble; | |
val ok = banco.depositar(numero, quantia); | |
if (ok) { | |
println("Deposito realizado com sucesso!"); | |
} else { | |
println("A operacao falhou!"); | |
} | |
} | |
def verSaldo { | |
print("Numero da conta: "); | |
val numero = readLine; | |
val c = banco.getConta(numero); | |
c match { | |
case Some(conta) => println(s"Saldo: ${conta.saldo}") | |
case None => println("Conta nao encontrada!.") | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment