You are on page 1of 14

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>
//opcoes do menu principal
#define LISTAR 1
#define DEPOSITAR 2
#define SACAR 3
#define SAIR 4
#define CADASTRAR 9
//Opcoes utilizadas nos menus
#define CONTA_CORRENTE 1
#define CONTA_POUPANCA 2
#define LISTAR_POR_NUMERO_CONTA 1
#define LISTAR_POR_NOME 2
#define LISTAR_VOLTAR 3
#define DEPOSITAR_VOLTAR 3
#define SACAR_VOLTAR 3
#define CADASTRAR_VOLTAR 3
//O sistema so aceita ate x contas de cada tipo
//(corrente ou poupan a).
#define MAXIMO_CONTAS 50
//Define o tipo Conta Corrente
typedef struct {
int numero;
char nomeCliente[31];
double saldo;
double limite;
} cc;
//Define o tipo Conta Corrente com Limite
typedef struct {
int numero;
char nomeCliente[31];
double saldo;
double limite;
} ccl;
//Define o tipo Conta Poupan a
typedef struct {
int numero;
char nomeCliente[31];
double saldo;
} cp;
//Cont m todas as contas corrente e poupan a
//que o banco pode ter.
cc contasCorrente[MAXIMO_CONTAS];
cp contasPoupanca[MAXIMO_CONTAS];
ccl contasCorrenteLimite[MAXIMO_CONTAS];
//Estas duas vari veis trabalham juntas
//com "contasCorrente" e "contasPoupanca"
//Elas marcam a posi o de cada conta no vetor
//de contas a fim de n o inicializar o vetor de
//contas j com contas vazias, mas sim, apenas

//incluir uma conta zerada quando for criada


//uma nova conta.
int ccExistentes[MAXIMO_CONTAS];
int cpExistentes[MAXIMO_CONTAS];
int cclExistentes[MAXIMO_CONTAS];
//Contadores "eternos" das contas
//corrente e poupanca.
int contContas = 1;
//int contNumCP = 1;
//Apenas diz se
tipo 1 - corrente ou 2 - poupan a.
// utilizada para cadastrar e excluir contas.
int tipoConta;
//define o cabecalho dos relatorios
typedef struct{
char numero[11];
char nomeCliente[31];
char saldo[10];
char limite[10];
} header;
header headerRelatorio;
//Realiza um saque em conta corrente ou poupan a.
void sacar(){
int i, j, numConta, contaExiste, opcaoMascara;
char numContaRecebido[11], opcao;
double valorSaque, saldoELimite;
for(;;) {
printf("############ TELA SAQUES ###############\n\n");
printf("Digite o tipo da conta de acordo com as opcoes abaixo:\n");
printf(" 1 - Saque de conta corrente\n");
printf(" 2 - Saque de conta poupanca\n");
printf(" 3 - Voltar\n");
for(;;) {
contaExiste = 0;
printf("\nDigite o tipo:\t");
fflush(stdin);
opcao = getche();
opcaoMascara = (opcao - 48);
if((opcao == '1') || (opcao == '2') || (opcao == '3')){
if(opcaoMascara == CONTA_CORRENTE || opcaoMascara == CONTA_POUPA
NCA) {
break;
} else {
if(opcaoMascara == SACAR_VOLTAR) {
return;
}
printf("\n\nTipo de conta INVALIDO!\n\n");
system("pause");
continue;

}
}else{
printf("\n\nEntrada invalida\n\n");
system("pause");
continue;
}
}
for(;;) {
contaExiste = 0;
printf("\nDigite o numero da conta ao qual deseja efetuar o saque: "
);
scanf("%s", numContaRecebido);
j = 0;
//verifica se a string recebida contem apenas numeros
for(i=0;i<strlen(numContaRecebido);i++){
if(numContaRecebido[i] == '0' || numContaRecebido[i] == '1' || n
umContaRecebido[i] == '2'|| numContaRecebido[i] == '3'|| numContaRecebido[i] ==
'4'|| numContaRecebido[i] == '5'|| numContaRecebido[i] == '6'|| numContaRecebido
[i] == '7'|| numContaRecebido[i] == '8' || numContaRecebido[i] == '9'){
//implementa cada vez que um caractere numerico e encontrado
na string
j++;
}
}
//se o numero for aceito agora trabalha com ele
if(j == strlen(numContaRecebido)){
numConta = atoi(numContaRecebido);
//Coloca todos os numeros de conta num vetor de ordenacao
for(i = 0, j = 0; i < MAXIMO_CONTAS; i++) {
if(ccExistentes[i] != -1) {
if(contasCorrente[i].numero == numConta) {
printf("Digite o valor do saque: ");
scanf("%lf", &valorSaque);
saldoELimite = (contasCorrente[i].saldo + contasCorr
ente[i].limite);
//o cliente pode sacar
if(saldoELimite >= valorSaque) {
saldoELimite -= valorSaque;
//aloca o saldo remanescente
if(saldoELimite <= 500.0) {
contasCorrente[i].saldo = 0.0;
contasCorrente[i].limite = saldoELimite;
} else {
contasCorrente[i].saldo = (saldoELimite - 50
0.0);
contasCorrente[i].limite = 500.0;
}
printf("\nSAQUE realizado com SUCESSO!\n\n");

contaExiste = 1;
} else {
printf("\nO valor excede a sua conta. Nao pode s
er sacado!\n\n");
}
break;
}
}
if(cpExistentes[i] != -1) {
if(contasPoupanca[i].numero == numConta) {
printf("Digite o valor do saque: ");
scanf("%lf", &valorSaque);
//o cliente pode sacar
if(contasPoupanca[i].saldo >= valorSaque) {
contasPoupanca[i].saldo -= valorSaque;
printf("\nSAQUE realizado com SUCESSO!\n\n");
contaExiste = 1;
} else {
printf("\nO valor excede a sua conta. Nao pode s
er sacado!\n\n");
}
break;
}
}
}
}else{
printf("\nO numero de conta informado e invalido!\n\n");
}
system("pause");
break;
}
system("cls");
}
}
//Imprime o cabecalho do relatorio.
void cabecalho() {
strcpy(headerRelatorio.numero, "Conta");
strcpy(headerRelatorio.nomeCliente, "Nome cliente");
strcpy(headerRelatorio.saldo, "Saldo");
strcpy(headerRelatorio.limite, "Limite");
printf("\n| %11s | %-31s | %11s | %11s |\n", headerRelatorio.numero, headerR
elatorio.nomeCliente, headerRelatorio.saldo, headerRelatorio.limite);
}
//Faz um deposito em conta corrente
void depositarContaCorrente(double valorRecebido, int j){
double complementoDoLimite;
if(contasCorrente[j].limite < 500.0){

complementoDoLimite = 500.0 - contasCorrente[j].limite;


if (complementoDoLimite < valorRecebido){
contasCorrente[j].limite = contasCorrente[j].limite + complementoDoL
imite;
valorRecebido = valorRecebido - complementoDoLimite;
contasCorrente[j].saldo = contasCorrente[j].saldo + valorRecebido;
}else{
contasCorrente[j].limite = contasCorrente[j].limite + valorRecebido;
}
}else{
contasCorrente[j].saldo = contasCorrente[j].saldo + valorRecebido;
}
printf("\nDEPOSITO realizado com SUCESSO!\n\n");
}
//Faz um deposito em conta poupan a.
void depositarContaPoupanca(double valorRecebido, int j){
contasPoupanca[j].saldo = contasPoupanca[j].saldo + valorRecebido;
printf("\nDEPOSITO realizado com SUCESSO!\n\n");
}
//Realiza um dep sito em conta corrente ou poupan a.
void depositar(){
int i,
opcaoMascara,
posicaoConta,
numConta,
contaExiste;
char opcao;
double valorRecebido;
for(;;) {
printf("############ TELA DEPOSITOS ###############\n\n");
printf("Digite o tipo da conta de acordo com as opcoes abaixo:\n");
printf(" 1 - Deposito em conta corrente\n");
printf(" 2 - Deposito em conta poupanca\n");
printf(" 3 - Voltar\n");
for(;;) {
contaExiste = 0;
printf("\nDigite o tipo:\t");
fflush(stdin);
opcao = getche();
opcaoMascara = (opcao - 48);
if((opcao == '1') || (opcao == '2') || (opcao == '3')){
if(opcaoMascara == CONTA_CORRENTE || opcaoMascara == CONTA_POUPA
NCA) {
break;
} else {
if(opcaoMascara == DEPOSITAR_VOLTAR) {
return;
}
printf("\n\nTipo de conta INVALIDO!\n\n");

system("pause");
continue;
}
}else{
printf("\n\nEntrada invalida\n\n");
system("pause");
system("cls");
}
}
printf("\nDigite o numero da conta:\t");
fflush(stdin);
scanf("%5d", &numConta);
printf("\nDigite o valor que deseja depositar na conta:\t");
fflush(stdin);
scanf("%lf", &valorRecebido);
if(valorRecebido > 0){
if(opcaoMascara == CONTA_CORRENTE) {
for(i = 0; i < MAXIMO_CONTAS; i++) {
if(ccExistentes[i] != -1) {
if(contasCorrente[i].numero == numConta) {
depositarContaCorrente(valorRecebido, i);
contaExiste = 1;
break;
}
}
}
if(contaExiste == 0) {
printf("\nA conta corrente informada NAO EXISTE!\n\n");
system("pause");
}
} else {
for(i = 0; i < MAXIMO_CONTAS; i++) {
if(cpExistentes[i] != -1) {
if(contasPoupanca[i].numero == numConta) {
depositarContaPoupanca(valorRecebido, i);
contaExiste = 1;
break;
}
}
}
if(contaExiste == 0) {
printf("\nA conta poupanca informada NAO EXISTE!\n\n");
}
}
}else{
printf("\nNAO E POSSIVEL depositar valor negativo.\n\n");
}
system("pause");
system("cls");
}

}
void consultarPorNome() {
int escolha, condicao = 0, numConta, i, numCorreto = 1, j = 0, clienteExiste
;
char nomeConta[31], cNumConta[11];
printf("\nDigite o nome do cliente: ");
fflush(stdin);
scanf("%[A-Z a-z]s", nomeConta);
clienteExiste = 0;
for(i = 0; i< MAXIMO_CONTAS; i++) {
if(strcasecmp(contasCorrente[i].nomeCliente , nomeConta) == 0) {
cabecalho();
printf("| %11d | %-31s | %11.2lf | %11.2lf |\n\n",contasCorrente[i].
numero, contasCorrente[i].nomeCliente, contasCorrente[i].saldo);
system("PAUSE");
clienteExiste = 1;
break;
}
if(strcasecmp(contasPoupanca[i].nomeCliente , nomeConta) == 0){
cabecalho();
printf("| %11d | %-31s | %11.2lf | %11s |\n\n",contasPoupanca[i]
.numero, contasPoupanca[i].nomeCliente, contasPoupanca[i].saldo, "-");
system("PAUSE");
clienteExiste = 1;
break;
}
}
if(clienteExiste == 0) {
printf("\nCliente nao encontrado!\n\n");
system("pause");
}
}
void consultarPorNumConta() {
int escolha, condicao, numConta, i, numCorreto = 1, j = 0, testeString = 0;
char nomeConta[31], cNumConta[11];
while(numCorreto == 1){
strcpy(cNumConta , "\0");
printf("\nDigite o numero da conta do cliente : ");
fflush(stdin);
scanf("%s", cNumConta);
//verifica se a string recebida contem apenas numeros
for(i=0;i<strlen(cNumConta);i++){
if(cNumConta[i] == '0' || cNumConta[i] == '1' || cNumConta[i] == '2'
|| cNumConta[i] == '3'|| cNumConta[i] == '4'|| cNumConta[i] == '5'|| cNumConta[i
] == '6'|| cNumConta[i] == '7'|| cNumConta[i] == '8' || cNumConta[i] == '9'){
//implementa cada vez que um caractere numerico e encontrado na

string
j++;
}
}
//verifica se a quantidade de caracteres da string e igual a de caracter
es numericos da string
if(j == strlen(cNumConta)){
numCorreto = 0;
}else{
printf("\nO numero informado n o valido! \nTente novamente!");
system("pause");
}
}
fflush(stdin);
//converte a string para um inteiro
numConta = atoi(cNumConta);
for(i = 0, j = 0; i < MAXIMO_CONTAS; i++) {
fflush(stdin);
//faz a verifica o de existencia de constas
if(ccExistentes[i] != -1) {
if(contasCorrente[i].numero == numConta) {
cabecalho();
printf("| %11d | %-31s | %11.2lf | %11.2lf |\n\n",contasCorrente
[i].numero, contasCorrente[i].nomeCliente, contasCorrente[i].saldo);
escolha = 0;
system("PAUSE");
system("cls");
return;
}
if(contasPoupanca[i].numero == numConta){
cabecalho();
printf("| %11d | %-31s | %11.2lf | %11s |\n\n",contasPoupanca[i]
.numero, contasPoupanca[i].nomeCliente, contasPoupanca[i].saldo, "-");
system("PAUSE");
system("cls");
int opcao;
int opcaoMascara;
printf("############ TELA PRINCIPAL ###############\n\n");
printf("Digite a opcao de acordo com o menu abaixo:\n");
printf("1 - Visualizar contas\n");
printf("2 - Depositar\n");
printf("3 - Sacar\n");
printf("4 - Sair\n");
printf("\nDigite a opcao:\t");
opcao = getche();
opcaoMascara = (opcao - 48);
//laco infinito para o menu principal at
//escolhida a op o "sair"
for(;;) {

que seja

opcao = menuPrincipal();
if((opcao == 1) || (opcao == 2) || (opcao == 3) || (opcao ==
4)||(opcao == 9)){
switch(opcao) {
case LISTAR:
system("cls");
consultar();
break;
case DEPOSITAR:
system("cls");
depositar();
system("cls");
break;
case SACAR:
system("cls");
sacar();
break;
case SAIR:
exit(0);
break;
case CADASTRAR:
system("cls");
cadastrarConta();
system("cls");
break;
}
}else{
printf("\n\nEntrada invalida\n\n");
system("pause");
}
system("cls");
}
return;
}
}
}
//verifica utilizando o j se exxistiu algumna conta cadastrada com o numero
digitado
if(j == 0){
printf("\nN o existe conta referente ao numero digitado!! \n");
numCorreto = 1;
system("pause");
system("cls");
return;
}
}
//faz consulta na conta poupan a e/ou corrente

//uma fun o para consultar conta, por nome e/ou n mero da conta
void consultar() {
int escolhaMascara, numConta, i, numCorreto = 1, j = 0, testeString = 0;
char nomeConta[31], cNumConta[11], escolha;
while(1) {
fflush(stdin);
printf("############ TELA CONSULTAS ###############\n\n");
printf("Digite a opcao de acordo com o menu abaixo:\n");
printf("1 - Consultar por numero da conta\n");
printf("2 - Consultar pelo nome do titular\n");
printf("3 - Voltar \n");
printf("\nDigite a opcao:\t");
fflush(stdin);
escolha = getche();
escolhaMascara = (escolha - 48);
if((escolha == '1') || (escolha == '2') || (escolha == '3')){
//define a escolha por nome ou por numero da conta
switch(escolhaMascara) {
//consulta pelo numero da conta
case LISTAR_POR_NUMERO_CONTA:
consultarPorNumConta();
break;
//consulta pelo nome do titular
case LISTAR_POR_NOME:
consultarPorNome();
system("cls");
break;
case LISTAR_VOLTAR:
return;
break;
}
}else{
printf("\n\nEntrada invalida\n\n");
system("pause");
system("cls");
}
}
}
cc gerarContaCorrente(char nomeCliente[31]) {
cc nova;
nova.numero = contContas++;
strcpy(nova.nomeCliente, nomeCliente);
nova.limite = 500.0;
nova.saldo = 0.0;
return nova;
}
//Cria uma nova conta poupan a.
cp gerarContaPoupanca(char nomeCliente[31]) {
cp nova;

nova.numero = contContas++;
strcpy(nova.nomeCliente, nomeCliente);
nova.saldo = 0.0;
return nova;
}
void cadastrarConta() {
int i,
posicaoConta,
opcaoMascara;
char nomeClienteRecebido[31], opcao;
for(;;) {
printf("############ TELA CADASTRAR ###############\n\n");
printf("Digite o tipo da conta de acordo com as opcoes abaixo:\n");
printf(" 1 - Conta corrente\n");
printf(" 2 - Conta poupanca\n");
printf(" 3 - Voltar\n");
//Repete laco ate que seja informado um valor valido
//para o tipo de conta.
for(;;) {
printf("\nDigite o tipo:\t");
fflush(stdin);
opcao = getche();
opcaoMascara = (opcao - 48);
if((opcao == '1') || (opcao == '2') || (opcao == '3')){
if(opcaoMascara == CONTA_CORRENTE || opcaoMascara == CONTA_POUPA
NCA) {
break;
} else {
if(opcaoMascara == CADASTRAR_VOLTAR) {
return;
}
printf("\n\nTipo de conta INVALIDO!\n\n");
system("pause");
}
}else{
printf("\n\nEntrada invalida\n\n");
break;
}
}
posicaoConta = -1;
//Verifica se nao atingiu o limite maximo de contas do banco.
if(opcaoMascara == CONTA_CORRENTE) {
for(i = 0; i < MAXIMO_CONTAS; i++) {
//Caso n o haja mais espaco para contas corrente,
//ou seja, atingiu o limite m ximo de contas corrente,
//n o deve haver uma nica posi o com "-1". Se houver,
//significa que ainda tem espa o para inclus o de uma nova conta.
if(ccExistentes[i] == -1) {
posicaoConta = i;

break;
}
}
if(posicaoConta != -1) {
printf("\n\nA seguir, digite os dados da nova conta:\n");
printf("Digite o nome do cliente: ");
fflush(stdin);
scanf(" %[^\n]s", nomeClienteRecebido);
contasCorrente[posicaoConta] = gerarContaCorrente(nomeClienteRec
ebido);
ccExistentes[posicaoConta] = posicaoConta;
printf("\nConta CADASTRADA com SUCESSO!\n\n");
} else {
printf("\nNumero maximo de contas excedido (%d).\n\n", MAXIMO_CO
NTAS);
}
}
if(opcaoMascara == CONTA_POUPANCA) {
for(i = 0; i < MAXIMO_CONTAS; i++) {
//Caso n o haja mais espaco para contas poupan a,
//ou seja, atingiu o limite m ximo de contas poupan a,
//n o deve haver uma nica posi o com "-1". Se houver,
//significa que ainda tem espa o para inclus o de uma nova conta.
if(cpExistentes[i] == -1) {
posicaoConta = i;
break;
}
}
if(posicaoConta != -1) {
printf("\n\nA seguir, digite os dados da nova conta:\n");
printf("Digite o nome do cliente: ");
fflush(stdin);
scanf(" %[^\n]s", nomeClienteRecebido);
contasPoupanca[posicaoConta] = gerarContaPoupanca(nomeClienteRec
ebido);
cpExistentes[posicaoConta] = posicaoConta;
printf("\nConta CADASTRADA com SUCESSO!\n\n");
} else {
printf("\nNUMERO maximo de contas EXCEDIDO (%d).\n\n", MAXIMO_CO
NTAS);
}
}
system("pause");
system("cls");
}
}
void programa() {
int opcao;

//laco infinito para o menu principal at


//escolhida a op o "sair"
for(;;) {
opcao = menuPrincipal();

que seja

if((opcao == 1) || (opcao == 2) || (opcao == 3) || (opcao == 4)||(opcao


== 9)){
switch(opcao) {
case LISTAR:
system("cls");
consultar();
break;
case DEPOSITAR:
system("cls");
depositar();
system("cls");
break;
case SACAR:
system("cls");
sacar();
break;
case SAIR:
exit(0);
break;
case CADASTRAR:
system("cls");
cadastrarConta();
system("cls");
break;
}
}else{
printf("\n\nEntrada invalida\n\n");
system("pause");
}
system("cls");
}
}
//Recupera do usu rio a op
int menuPrincipal() {
int opcaoMascara;
char opcao;

o escolhida no menu principal

printf("############ TELA PRINCIPAL ###############\n\n");


printf("Digite a opcao de acordo com o menu abaixo:\n");
printf("1 - Visualizar contas\n");
printf("2 - Depositar\n");
printf("3 - Sacar\n");
printf("4 - Sair\n");
printf("\nDigite a opcao:\t");
opcao = getche();

opcaoMascara = (opcao - 48);


return opcaoMascara;
}
void inicializarContas() {
int i;
for(i = 0; i < MAXIMO_CONTAS; i++) {
ccExistentes[i] = -1;
cpExistentes[i] = -1;
}
}
//inicia o programa
int main() {
inicializarContas();
programa();
return 0;
}

You might also like