Criar um aplicativo em Java que represente um sistema de controle de contas correntes bancárias de um correntista.
- Conta: porque seriam movimentadas uma ou várias contas. Para isso, serão necessários os seguintes dados (número, banco, saldo, etc.) para realizar operações de crédito, débito, entre outras operações bancárias nas contas.
- Banco: porque poderia ter um ou mais bancos a quem essas contas pertencessem. Correntista: porque toda conta pertence a uma pessoa no mundo real e geralmente têm atrelado a elas seus dados (nome, endereço, fone, documento de identidade, CPF, etc.).
Programação estruturada
Exemplo de um programa de conta de banco, com depósito, saque e transferência
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.util.Scanner;
public class ContaBancaria {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int opcao;
double saldo = 0;
do {
System.out.println("Escolha uma opção:");
System.out.println("1 - Depósito");
System.out.println("2 - Saque");
System.out.println("3 - Transferência");
System.out.println("4 - Saldo");
System.out.println("0 - Sair");
opcao = input.nextInt();
switch(opcao) {
case 1:
System.out.print("Digite o valor do depósito: ");
double deposito = input.nextDouble();
saldo += deposito;
break;
case 2:
System.out.print("Digite o valor do saque: ");
double saque = input.nextDouble();
if (saque <= saldo) {
saldo -= saque;
} else {
System.out.println("Saldo insuficiente");
}
break;
case 3:
System.out.print("Digite o valor da transferência: ");
double transferencia = input.nextDouble();
if (transferencia <= saldo) {
System.out.print("Digite o número da conta de destino: ");
int contaDestino = input.nextInt();
System.out.println("Transferência realizada com sucesso");
saldo -= transferencia;
} else {
System.out.println("Saldo insuficiente");
}
break;
case 4:
System.out.println("Saldo: " + saldo);
break;
case 0:
System.out.println("Saindo...");
break;
default:
System.out.println("Opção inválida");
}
System.out.println();
} while (opcao != 0);
}
}
Usando funções
Segue abaixo um exemplo de programa de conta bancária em Java com a classe principal usando funções:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import java.util.Scanner;
public class ContaBancaria {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double saldo = 0.0;
int opcao;
do {
System.out.println("Escolha uma opção:");
System.out.println("1 - Depósito");
System.out.println("2 - Saque");
System.out.println("3 - Transferência");
System.out.println("4 - Saldo");
System.out.println("0 - Sair");
opcao = input.nextInt();
switch(opcao) {
case 1:
System.out.print("Digite o valor do depósito: ");
double deposito = input.nextDouble();
saldo = depositar(saldo, deposito);
break;
case 2:
System.out.print("Digite o valor do saque: ");
double saque = input.nextDouble();
saldo = sacar(saldo, saque);
break;
case 3:
System.out.print("Digite o valor da transferência: ");
double transferencia = input.nextDouble();
System.out.print("Digite o número da conta de destino: ");
int contaDestino = input.nextInt();
saldo = transferir(saldo, transferencia, contaDestino);
break;
case 4:
System.out.println("Saldo: " + saldo);
break;
case 0:
System.out.println("Saindo...");
break;
default:
System.out.println("Opção inválida");
}
System.out.println();
} while (opcao != 0);
}
public static double depositar(double saldo, double valor) {
return saldo + valor;
}
public static double sacar(double saldo, double valor) {
if (valor <= saldo) {
return saldo - valor;
} else {
System.out.println("Saldo insuficiente");
return saldo;
}
}
public static double transferir(double saldo, double valor, int contaDestino) {
if (valor <= saldo) {
// Lógica para transferência
return saldo - valor;
} else {
System.out.println("Saldo insuficiente");
return saldo;
}
}
}
Neste exemplo, as operações de depósito, saque e transferência foram transformadas em funções que recebem o saldo atual e os valores necessários para realizar as operações e retornam o novo saldo após a operação. Na classe principal, as funções são chamadas dentro do switch-case correspondente a cada operação. O objeto da classe Conta não é mais necessário neste exemplo, uma vez que todas as operações são realizadas por meio das funções.
Usando Programação orientada a objetos
Diagrama UML de classe
Essas características devem estar presentes na classe e são chamadas de Atributos. Veja o diagrama a seguir que representa a classe conta, assim como alguns atributos:
classDiagram
class Conta{
-double saldo
void depositar(double valor)
boolean sacar(double valor)
boolean transferir(double valor, int contaDestino)
double getSaldo()
}
class ContaBancaria{
Scanner input
Conta conta
int opcao
static void main(String[] args)
}
ContaBancaria *-- Conta
Implementação:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
import java.util.Scanner;
public class ContaBancaria {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
Conta conta = new Conta();
int opcao;
do {
System.out.println("Escolha uma opção:");
System.out.println("1 - Depósito");
System.out.println("2 - Saque");
System.out.println("3 - Transferência");
System.out.println("4 - Saldo");
System.out.println("0 - Sair");
opcao = input.nextInt();
switch(opcao) {
case 1:
System.out.print("Digite o valor do depósito: ");
double deposito = input.nextDouble();
conta.depositar(deposito);
break;
case 2:
System.out.print("Digite o valor do saque: ");
double saque = input.nextDouble();
if (conta.sacar(saque)) {
System.out.println("Saque realizado com sucesso");
} else {
System.out.println("Saldo insuficiente");
}
break;
case 3:
System.out.print("Digite o valor da transferência: ");
double transferencia = input.nextDouble();
System.out.print("Digite o número da conta de destino: ");
int contaDestino = input.nextInt();
if (conta.transferir(transferencia, contaDestino)) {
System.out.println("Transferência realizada com sucesso");
} else {
System.out.println("Saldo insuficiente");
}
break;
case 4:
System.out.println("Saldo: " + conta.getSaldo());
break;
case 0:
System.out.println("Saindo...");
break;
default:
System.out.println("Opção inválida");
}
System.out.println();
} while (opcao != 0);
}
}
class Conta {
private double saldo;
public void depositar(double valor) {
this.saldo += valor;
}
public boolean sacar(double valor) {
if (valor <= this.saldo) {
this.saldo -= valor;
return true;
} else {
return false;
}
}
public boolean transferir(double valor, int contaDestino) {
if (valor <= this.saldo) {
// Lógica para transferência
this.saldo -= valor;
return true;
} else {
return false;
}
}
public double getSaldo() {
return this.saldo;
}
}
Neste exemplo, criamos uma classe Conta que possui os métodos depositar, sacar, transferir e getSaldo para realizar as operações na conta bancária. No método main, criamos um objeto da classe Conta e usamos seus métodos para realizar as operações de depósito, saque, transferência e consulta de saldo. As operações de saque e transferência verificam se há saldo suficiente na conta antes de realizar a operação e retornam um valor booleano indicando se a operação foi realizada com sucesso ou não.