diff --git a/a.out b/a.out
new file mode 100755
index 0000000000000000000000000000000000000000..d131d5974aa9397f735dd38822648408d1ff9497
Binary files /dev/null and b/a.out differ
diff --git a/funcoes.cpp b/funcoes.cpp
index 98eb97a49fd3d1c829f662b4f68d5a7489124a54..00ef827b57ea37d7e49ea7d5c5318f29f8b1ffd1 100644
--- a/funcoes.cpp
+++ b/funcoes.cpp
@@ -1,27 +1,169 @@
-int criarConta(nome, saldo){
+#include "funcoes.hpp"
+#include <iostream>
+using namespace std;
 
-    nContas++;
-    numeroContas = // Gerar valor aleatória
-    contas[nContas] = // Armazena novo struct da conta
 
+
+void menuInicial(){
+	cout << "1- Logar na conta." << endl << "2- Criar conta." << endl << "3- Sair." << endl;
+}
+
+void menuOpcoes(){
+	cout << "1- Deposito." << endl << "2- Saque." << endl << "3- Transferência." << endl <<"4- Exibir saldo atual." << endl << "5- Sair." << endl;
+}
+
+int escolheOp(){
+	int n;
+	cin >> n;
+	return n;
+}
+
+void criarConta(conta *contas, int *indice){
+	cout << "Digite o seu nome:" << endl;
+	
+	cin >> contas[*indice].nomeCliente;
+
+	cout << "Digite o número da conta a ser criada:" << endl;
+
+	cin >> contas[*indice].numeroConta;
+
+	contas[*indice].saldo = 0.0;
+
+	*indice += 1;
+
+}
+
+int procurarConta(conta *contas, int indice, int nConta){
+
+	for (int i = 0; i < indice; i++){
+		
+		if(contas[i].numeroConta == nConta){
+			return i;
+		}
+	}
+
+	return -1;
+}
+
+void deposito(conta *contas, int indice){
+	double n;
+	cout << "Digite o valor a ser depositado: ";
+	cin >> n;
+	cout << endl;
+
+	contas[indice].saldo += n;
+	system("clear");
+	cout << "Transação efetuada com sucesso!!" << endl;
+	system("sleep 4");
 }
 
-int transferirDinheiro(numero_conta, valor){
+void saque(conta *contas, int indice){
+	double n;
+	cout << "Digite o valor a ser sacado: ";
+	cin >> n;
+	cout << endl;
 
-    for(int i = 0; i < contas.length; i++){
-        contas[i].n_conta == numero_conta;
-        contas[i].saldo += valor;
-    }
+	if(n > contas[indice].saldo){
+		system("clear");
+		cout << "Saldo indisponível" << endl;
+		system("sleep 4");
+	}else{
+		contas[indice].saldo -= n;
+		system("clear");
+		cout << "Transação efetuada com sucesso!!" << endl;
+		system("sleep 4");
+	}
 
 }
 
-int sacar(valor, indice){
-    contas[indice].saldo -= valor;
+void tranferencia(conta *contas, int indice, int indiceG){
+	int indT, nCT, op;
+	double n;
+
+	do{
+		cout << "Digite o número da conta para a tranferencia: ";
+		cin >> nCT;
+
+		indT = procurarConta(contas, indiceG, nCT);
+
+		if(indT < 0){
+			system("clear");
+			cout << "Número da conta invalido!!" << endl;
+			system("sleep 4");
+			system("clear");
+			cout << "1- Tentar novamente." << endl << "2- Sair" << endl;
+			op = escolheOp();
+		}else{
+			system("clear");
+			cout << "Digite o valor da tranferencia: ";
+			cin >> n;
+			cout << endl;
+
+			if(n > contas[indice].saldo){
+				system("clear");
+				cout << "Saldo indisponível!!" << endl;
+				cout << "1- Tentar novamente." << endl << "2- Sair" << endl;
+				op = escolheOp();
+			}else{
+				contas[indice].saldo -= n;
+				contas[indT].saldo += n;
+				system("clear");
+				cout << "Transação efetuada com sucesso!!" << endl;
+				system("sleep 4");
+				op = 2;
+			}
+		}
+	}while(op != 2);
 }
 
-int depositar(valor, indice){
 
-    contas[indice].saldo += valor;
-    
+void exibirSaldo(conta *contas, int indice){
+	system("clear");
+	cout << "Saldo: " << contas[indice].saldo << endl;
+
+	system("sleep 5");
 }
- 
+
+void logarConta(conta *contas, int indice){
+	int indiceAt, nConta, op, op2;
+	do{
+		system("clear");
+		cout << "Digite o número da conta: ";
+		cin >> nConta;
+
+		indiceAt = procurarConta(contas, indice, nConta);
+
+		if (indiceAt < 0){
+			cout << "Conta não encontrada!!" << endl;
+			cout << "1- tentar novamente." << endl << "2- Sair" << endl;
+			op = escolheOp();
+		}else{
+			do{
+				system("clear");
+				cout << "Usuario: " << contas[indiceAt].nomeCliente << endl << endl;
+				menuOpcoes();
+				op2 = escolheOp();
+
+				switch(op2){
+					case 1:
+					deposito(contas, indiceAt);
+					break;
+					case 2:
+					saque(contas, indiceAt);
+					break;
+					case 3:
+					tranferencia(contas, indiceAt, indice);
+					break;
+					case 4:
+					exibirSaldo(contas, indiceAt);
+					break;
+				}
+
+				if(op2 == 5){
+					op = 2;
+				}
+			}while(op2 != 5);
+		}
+
+	}while(op != 2);
+}
\ No newline at end of file
diff --git a/funcoes.hpp b/funcoes.hpp
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..667a33a5ae59cf29a35e6c1c725c22da4c3bc59b 100644
--- a/funcoes.hpp
+++ b/funcoes.hpp
@@ -0,0 +1,30 @@
+#include <iostream>
+#ifndef funcoes_hpp
+#define funcoes_hpp
+
+typedef struct {
+	int numeroConta;
+	double saldo;
+	char nomeCliente[20];
+
+}conta;
+
+void menuInicial();
+
+int escolheOp();
+
+void criarConta(conta *contas, int *indice);
+
+int procurarConta(conta *contas, int indice, int nConta);
+
+void logarConta(conta *contas, int indice);
+
+void deposito(conta *contas, int indice);
+
+void exibirSaldo(conta *contas, int indice);
+
+void saque(conta *contas, int indice);
+
+void tranferencia(conta *contas, int indice, int indiceG);
+
+#endif
\ No newline at end of file
diff --git a/main.cpp b/main.cpp
index 359d3a38a3675f640609d833b889e4f70c092d74..2238a796172020ec2f01315bed99018507b56813 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,15 +1,40 @@
+#include "funcoes.hpp"
 #include <iostream>
-
 using namespace std;
 
-int main(){
 
-    
-    int valor = 200;
+int main()
+{
+	int n, indice = 0;
+	conta * contas = new conta[50];
+	
+	do{
+		system("clear");
+		cout << "#############################" << endl;
+		cout << "# BEM VINDO AO CAIXA XABLAU #" << endl;
+		cout << "#############################" << endl << endl;
+		menuInicial();
+		n = escolheOp();
+
+		if(n != 1 && n != 2 && n != 3){
+			cout << "Opção invalida" << endl;
+			system("sleep 3");			
+			system("clear");
+		}
+
+		switch(n){
+			case 1:
+			logarConta(contas, indice);
+			break;
+			case 2:
+			criarConta(contas, &indice);
+			break;
+		}
+
+	}while(n != 3);
 
-    if(valor % 100){
-        
-    }
+	cout << indice;
 
 
+	return 0;
 }
\ No newline at end of file
diff --git a/teste b/teste
index acfa3f1d5482627c152c5ef8fa4563c40384be97..42eed55c54aa5e1950e6f96f11c1b8d8e5b61828 100755
Binary files a/teste and b/teste differ