Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <ctype.h>
- struct conta{
- int numConta;
- char nomeCliente[30];
- char CPFCliente[14];
- char enderecoCliente[40];
- float saldoConta;
- };
- struct movimentacoes{
- char tipoMov;
- char data[10];
- float valorMov;
- int numCR;
- int numCD;
- int numCO;
- };
- int contaExistente;
- int contaEscolhida;
- char confirmacao;
- float valorTemp;
- conta c;
- conta cTemp;
- FILE* arqConta;
- FILE *arqContaTemp;
- movimentacoes m;
- FILE *arqMov;
- int verificaContaExistente(int contaEscolhida){
- arqConta = fopen("contas.txt", "rb");
- contaExistente = 0;
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if (contaEscolhida == c.numConta) {
- contaExistente = 1;
- break;
- }
- }
- fclose(arqConta);
- return(contaExistente);
- }
- float atualizarSaldo(float valorTemp){ //atualiza o saldo, nesse caso, quando é um decréscimo
- arqConta = fopen("contas.txt", "rb");
- arqContaTemp = fopen("contasTemp.txt", "wb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == contaEscolhida){
- c.saldoConta = c.saldoConta - valorTemp;
- fwrite(&c, sizeof(c), 1, arqContaTemp);
- }
- else{
- fwrite(&c, sizeof(c), 1, arqContaTemp);
- }
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- arqConta = fopen("contas.txt", "wb");
- arqContaTemp = fopen("contasTemp.txt", "rb");
- while (fread(&c, sizeof(c), 1, arqContaTemp)){
- fwrite(&c, sizeof(c), 1, arqConta);
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- }
- float atualizarSaldo2(float valorTemp){ //atualiza o saldo, nesse caso, quando é um acréscimo
- arqConta = fopen("contas.txt", "rb");
- arqContaTemp = fopen("contasTemp.txt", "wb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == contaEscolhida){
- c.saldoConta = c.saldoConta + valorTemp;
- fwrite(&c, sizeof(c), 1, arqContaTemp);
- }
- else{
- fwrite(&c, sizeof(c), 1, arqContaTemp);
- }
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- arqConta = fopen("contas.txt", "wb");
- arqContaTemp = fopen("contasTemp.txt", "rb");
- while (fread(&c, sizeof(c), 1, arqContaTemp)){
- fwrite(&c, sizeof(c), 1, arqConta);
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- }
- void mostrarConta(int contaEscolhida){ //mostra todos os dados da conta
- arqConta = fopen("contas.txt", "rb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == contaEscolhida){
- printf("\nNumero da conta: %d", c.numConta);
- printf("\nNome do cliente: %s", c.nomeCliente);
- printf("\nCPF do cliente: %s", c.CPFCliente);
- printf("\nEndereco do cliente: %s", c.enderecoCliente);
- printf("\nSaldo atual: %.2f\n", c.saldoConta);
- break;
- }
- }
- fclose(arqConta);
- }
- void mostrarContaMov(int contaEscolhida){ //mostra apenas o nome e o CPF do cliente (quando é movimentação)
- arqConta = fopen("contas.txt", "rb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == contaEscolhida){
- printf("\nNome do cliente: %s", c.nomeCliente);
- printf("\nCPF do cliente: %s", c.CPFCliente);
- break;
- }
- }
- fclose(arqConta);
- }
- void incluirConta(){
- printf("\t\tInclusao de Conta\n\n");
- do {
- printf("Digite o numero da conta: ");
- scanf("%d", &c.numConta);
- do{
- if(c.numConta <= 0){
- printf("Numero de conta invalido!");
- }
- }while(c.numConta <= 0); //o numero da conta não pode ser negativo
- arqConta = fopen("contas.txt", "rb");
- contaExistente = 0;
- while(fread(&cTemp, sizeof(cTemp), 1, arqConta) == 1){
- if (cTemp.numConta == c.numConta) {
- contaExistente = 1;
- break;
- }
- }
- fclose(arqConta);
- if (contaExistente == 1) {
- printf("\nNumero de conta ja existente. Digite um numero de conta diferente.\n\n");
- }
- } while (contaExistente == 1);
- printf("Nome do cliente: ");
- fflush(stdin);
- gets(c.nomeCliente);
- printf("CPF: ");
- gets(c.CPFCliente);
- printf("Endereco: ");
- gets(c.enderecoCliente);
- c.saldoConta = 0;
- printf("\nSaldo Inicial da Conta: R$ %4.2f", c.saldoConta);
- arqConta = fopen("contas.txt", "ab");
- fwrite(&c, sizeof(c), 1, arqConta);
- fclose(arqConta);
- printf("\nConta salva com sucesso!\n\n");
- }
- void excluirConta(){
- printf("\t\tExclusao de Conta\n\n");
- printf("Digite o numero da conta que deseja excluir: ");
- scanf("%d", &contaEscolhida);
- verificaContaExistente(contaEscolhida);
- if (contaExistente == 0) {
- printf("\nO numero de conta digitado nao existe. Repita a operacao.\n\n");
- }
- else{
- mostrarConta(contaEscolhida);
- do{
- printf("\n\nRealmente deseja excluir essa conta? Sim [S] / Nao [N]: ");
- fflush(stdin);
- scanf("%c", &confirmacao);
- confirmacao = toupper(confirmacao);
- }while ((confirmacao != 'S')&&(confirmacao != 'N'));
- if(confirmacao == 'S'){
- arqConta = fopen("contas.txt", "rb");
- arqContaTemp = fopen("contasTemp.txt", "wb");
- while (fread(&c, sizeof(c), 1, arqConta)){
- if(c.numConta != contaEscolhida){
- fwrite(&c, sizeof(c), 1, arqContaTemp);
- }
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- arqConta = fopen("contas.txt", "wb");
- arqContaTemp = fopen("contasTemp.txt", "rb");
- while (fread(&c, sizeof(c), 1, arqContaTemp)){
- fwrite(&c, sizeof(c), 1, arqConta);
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- printf("\nConta excluida com sucesso!\n\n");
- }//fim do if de confirmação
- else{
- printf("\nOperacao Cancelada\n\n");
- } //fim do else de confirmacao
- }//fim da operacao de exclusao
- }
- void alterarConta(){
- printf("\t\tAlteracao de Conta\n\n");
- printf("Digite o numero da conta que deseja alterar: ");
- scanf("%d", &contaEscolhida);
- verificaContaExistente(contaEscolhida);
- if (contaExistente == 0) {
- printf("\nO numero de conta digitado nao existe. Repita a operacao.\n\n");
- }
- else{
- mostrarConta(contaEscolhida);
- do{
- printf("\n\nRealmente deseja alterar essa conta? Sim [S] / Nao [N]: ");
- fflush(stdin);
- scanf("%c", &confirmacao);
- confirmacao = toupper(confirmacao);
- }while ((confirmacao != 'S')&&(confirmacao != 'N'));
- if(confirmacao == 'S'){
- arqConta = fopen("contas.txt", "rb");
- arqContaTemp = fopen("contasTemp.txt", "wb");
- while (fread(&c, sizeof(c), 1, arqConta)){
- if(c.numConta == contaEscolhida){
- printf("Nome do cliente: ");
- fflush(stdin);
- gets(c.nomeCliente);
- printf("CPF: ");
- gets(c.CPFCliente);
- printf("Endereco: ");
- gets(c.enderecoCliente);
- fwrite(&c, sizeof(c), 1, arqContaTemp);
- }
- else{
- fwrite(&c, sizeof(c), 1, arqContaTemp);
- }
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- arqConta = fopen("contas.txt", "wb");
- arqContaTemp = fopen("contasTemp.txt", "rb");
- while (fread(&c, sizeof(c), 1, arqContaTemp)){
- fwrite(&c, sizeof(c), 1, arqConta);
- }
- fclose(arqConta);
- fclose(arqContaTemp);
- printf("\nConta alterada com sucesso!\n\n");
- }//fim do if da confirmacao
- else{
- printf("\nOperacao Cancelada\n\n");
- } //fim do else de confirmacao
- }//fim da operacao de alteracao
- }
- void listarContas(){
- printf("\t\tListagem de Contas e Saldos\n\n");
- arqConta = fopen("contas.txt", "rb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- printf("\nNumero da conta: %d", c.numConta);
- printf("\nNome do cliente: %s", c.nomeCliente);
- printf("\nCPF do cliente: %s", c.CPFCliente);
- printf("\nEndereco do cliente: %s", c.enderecoCliente);
- printf("\nSaldo atual: %.2f\n", c.saldoConta);
- }
- fclose(arqConta);
- printf("\nListagem realizada com sucesso!\n\n");
- }
- void fazerSaque(){
- printf("Digite o numero da conta: ");
- scanf("%d", &contaEscolhida);
- verificaContaExistente(contaEscolhida);
- if (contaExistente == 0){
- printf("\nO numero de conta digitado nao existe. Repita a operacao.\n\n");
- getch();
- }
- else{
- mostrarContaMov(contaEscolhida);
- do{
- printf("\n\nDigite o valor do saque: ");
- scanf("%f", &valorTemp);
- if(valorTemp <= 0){
- printf("Valor de saque invalido!");
- }
- }while(valorTemp <= 0);
- arqConta = fopen("contas.txt", "rb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == contaEscolhida){
- if (c.saldoConta < valorTemp) {
- printf ("Voce nao pode sacar um valor superior ao saldo disponivel!\n");
- getch();
- }
- else{
- printf("Digite a data atual: ");
- fflush(stdin);
- gets(m.data);
- do{
- printf("\n\nRealmente deseja realizar o saque? Sim [S] / Nao [N]: ");
- fflush(stdin);
- scanf("%c", &confirmacao);
- confirmacao = toupper(confirmacao);
- }while ((confirmacao != 'S') && (confirmacao != 'N'));
- if(confirmacao == 'S'){
- m.valorMov = valorTemp;
- m.tipoMov = 'S';
- m.numCR = contaEscolhida;
- atualizarSaldo(valorTemp);
- arqMov = fopen("movimentacoes.txt", "ab");
- fwrite(&m, sizeof(m), 1, arqMov);
- printf("\nSaque realizado com sucesso!\n\n");
- fclose(arqMov);
- }//fim do if de confirmacao
- else{
- printf("\nOperacao Cancelada\n\n");
- } //fim do else de confirmacao
- }
- }
- }
- fclose(arqConta);
- }//fim do else de conta existente
- }
- void fazerDeposito(){
- printf("Digite o numero da conta: ");
- scanf("%d", &contaEscolhida);
- arqConta = fopen("contas.txt", "rb");
- contaExistente = 0;
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if (contaEscolhida == c.numConta) {
- contaExistente = 1;
- break;
- }
- }
- fclose(arqConta);
- if (contaExistente == 0){
- printf("\nO numero de conta digitado nao existe. Repita a operacao.\n\n");
- getch();
- }
- else{
- mostrarContaMov(contaEscolhida);
- do{
- printf("\n\nDigite o valor do deposito: ");
- scanf("%f", &valorTemp);
- if(valorTemp <= 0){
- printf("Valor de deposito invalido!");
- }
- }while(valorTemp <= 0);
- arqConta = fopen("contas.txt", "rb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == contaEscolhida){
- printf("Digite a data atual: ");
- fflush(stdin);
- gets(m.data);
- do{
- printf("\n\nRealmente deseja realizar o deposito? Sim [S] / Nao [N]: ");
- fflush(stdin);
- scanf("%c", &confirmacao);
- confirmacao = toupper(confirmacao);
- }while ((confirmacao != 'S') && (confirmacao != 'N'));
- if(confirmacao == 'S'){
- m.valorMov = valorTemp;
- m.tipoMov = 'D';
- m.numCR = contaEscolhida;
- atualizarSaldo2(valorTemp);
- arqMov = fopen("movimentacoes.txt", "ab");
- fwrite(&m, sizeof(m), 1, arqMov);
- fclose(arqMov);
- printf("\nDeposito realizado com sucesso!\n\n");
- }//fim do if de confirmacao
- else{
- printf("\nOperacao Cancelada\n\n");
- } //fim do else de confirmacao
- }
- }
- fclose(arqConta);
- }//fim do else de conta existente
- }
- void fazerTransferencia(){
- printf("\n\nDigite o numero da conta de origem: ");
- scanf("%d", &contaEscolhida);
- verificaContaExistente(contaEscolhida);
- if (contaExistente == 0) {
- printf("\n\nO numero de conta de origem nao existe. Repita a operacao.\n\n");
- }
- else{
- int origem = contaEscolhida;
- mostrarContaMov(contaEscolhida);
- printf("\n\nDigite o numero da conta de destino: ");
- scanf("%d", &contaEscolhida);
- verificaContaExistente(contaEscolhida);
- if (contaExistente == 0) {
- printf("\n\nO numero de conta de destino nao existe. Repita a operacao.\n\n");
- }
- else{
- int destino = contaEscolhida;
- mostrarContaMov(contaEscolhida);
- do{
- printf("\n\nDigite o valor da transferencia: ");
- scanf("%f", &valorTemp);
- if(valorTemp <= 0){
- printf("Valor da transferencia invalido!");
- }
- }while(valorTemp <= 0);
- arqConta = fopen("contas.txt", "rb");
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == origem){
- if (c.saldoConta < valorTemp) {
- printf ("\nNao se pode transferir um valor superior ao saldo disponivel na conta de origem!\n");
- fclose(arqConta);
- getch();
- }
- else{
- printf("Digite a data atual: ");
- fflush(stdin);
- gets(m.data);
- do{
- printf("\n\nRealmente deseja realizar a transferencia? Sim [S] / Nao [N]: ");
- fflush(stdin);
- scanf("%c", &confirmacao);
- confirmacao = toupper(confirmacao);
- }while ((confirmacao != 'S') && (confirmacao != 'N'));
- if(confirmacao == 'S'){
- m.valorMov = valorTemp;
- m.tipoMov = 'T';
- m.numCR = ' ';
- m.numCO = origem;
- m.numCD = destino;
- arqMov = fopen("movimentacoes.txt", "ab");
- fwrite(&m, sizeof(m), 1, arqMov);
- //atualizar origem saldo1 e destino saldo2
- contaEscolhida = origem;
- atualizarSaldo(valorTemp);
- contaEscolhida = destino;
- atualizarSaldo2(valorTemp);
- printf("\nTransferencia realizada com sucesso!\n\n");
- fclose(arqMov);
- }//fim do if de confirmacao
- else{
- printf("\nOperacao Cancelada\n\n");
- } //fim do else de confirmacao
- }
- }
- }
- }
- }
- }
- void listarExtrato(){
- printf("\n\nDigite o numero da conta: ");
- scanf("%d", &contaEscolhida);
- verificaContaExistente(contaEscolhida);
- if (contaExistente == 0) {
- printf("\nO numero de conta solicitado nao existe. Repita a operacao.\n\n");
- getch();
- }
- else{
- system("CLS");
- printf("\t\t\tExtrato da Conta: %d \n", contaEscolhida);
- arqConta = fopen("contas.txt", "rb");
- int contMov = 0;
- while(fread(&c, sizeof(c), 1, arqConta) == 1){
- if(c.numConta == contaEscolhida){
- printf("\n\nNome do cliente: %s", c.nomeCliente);
- printf("\nCPF do cliente: %s", c.CPFCliente);
- arqMov = fopen("movimentacoes.txt", "rb");
- while(fread(&m, sizeof(m), 1, arqMov) == 1){
- if(m.numCR == c.numConta){
- printf("\n\nTipo de movimentacao: ");
- switch(m.tipoMov){
- case 'S': printf("Saque");break;
- case 'D': printf("Deposito");break;
- }
- printf("\nData: %s", m.data);
- printf("\nValor: %4.2f\n\n", m.valorMov);
- contMov++;
- }//quando e saque ou deposito
- if(m.numCO == c.numConta){
- printf("\n\nTipo de movimentacao: Transferencia (origem)");
- printf("\nData: %s", m.data);
- printf("\nValor: %4.2f", m.valorMov);
- printf("\nConta destino: %d\n\n", m.numCD);
- contMov++;
- }//quando e transferencia origem
- if(m.numCD == c.numConta){
- printf("\n\nTipo de movimentacao: Transferencia (destino)");
- printf("\nData: %s", m.data);
- printf("\nValor: %4.2f", m.valorMov);
- printf("\nConta de origem: %d\n\n", m.numCO);
- contMov++;
- }//quando e transferencia origem
- }//fim do while das movimentacoes
- if(contMov == 0){
- printf("\nA conta escolhida ainda nao efetuou movimentacoes!\n\n\n");
- }
- }//fim do if de conta escolhida
- }//fim do while
- fclose(arqMov);
- fclose(arqConta);
- }
- }//fim da funcao
- /* --------------------------------- MENU ------------------------------------*/
- int main(){
- int opcao;
- do{
- system("CLS");
- printf("1. Incluir nova conta\n");
- printf("2. Excluir conta\n");
- printf("3. Alterar conta\n");
- printf("4. Movimentacoes bancarias\n");
- printf("5. Listar contas e saldos existentes\n");
- printf("6. Listar extrato\n");
- printf("0. Sair\n");
- printf("\nOpcao: ");
- scanf("%d", &opcao);
- switch(opcao){
- case 0:
- printf("\nSaindo do programa!\n\n");
- break;
- case 1:
- system("CLS");
- incluirConta();
- break;
- case 2:
- system("CLS");
- excluirConta();
- break;
- case 3:
- system("CLS");
- alterarConta();
- break;
- case 4:
- system("CLS");
- char opMovimentacao;
- printf("[S] Saque");
- printf("[D] Deposito");
- printf("[T] Transferencia");
- printf("\nEscolha o tipo de movimentacao: ");
- fflush(stdin);
- scanf("%c", &opMovimentacao);
- opMovimentacao = toupper(opMovimentacao);
- if(opMovimentacao == 'S'){
- fazerSaque();
- }
- else if(opMovimentacao == 'D'){
- fazerDeposito();
- }
- else if(opMovimentacao == 'T'){
- fazerTransferencia();
- }
- else{
- printf("\nOpcao Invalida!\n\n");
- }
- break;
- case 5:
- system("CLS");
- listarContas();
- break;
- case 6:
- system("CLS");
- listarExtrato();
- break;
- default:
- printf("\nOpcao invalida!\n\n");
- break;
- }
- system("PAUSE");
- }while(opcao != 0);
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement