Ir ao conteúdo
  • Cadastre-se

simulação de banco em C


Haiek

Posts recomendados

Estou fazendo um trabalho para simular um banco em linguagem C. Vou colocar o que preciso fazer:

"Devemos ter os seguintes arquivos:

cadastro (nome, cpf, data de nascimento)

conta (cpf, nro da conta e senha)

movimento(depósitos e saques)

saldo (com o saldo corrente)

O programa deverá permitir a realização de saques e depósitos em conta, desde que a senha informada para a conta corrente esteja correta. Se o usuário inserir uma senha errada por 3 vezes, o programa deverá inibir o acesso à conta. Somente o gerente poderá habilitar o acesso. Portanto, simular a existencia de um gerente.

As consultas possíveis são: extrato da conta e saldo.

As movimentações possíveis são depósitos e saques.

Não se altera o saldo diretamente.

Abertura de conta (registro da conta) iniciará o saldo com um valor 0 ou R$ 100,00. Criar o módulo de registro da conta.

Senhas deverão ser criptografadas (forma simples). Por exemplo, se a senha for alfabética do tipo abc você poderá transformá-la em hij. Isso inibirá alguém que queira ver o arquivo e utilizar a senha.

É aconselhável o uso de struct."

Eu até fiz os dois primeiros arquivos neste código(faltou criptografar a senha):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

struct cadastro{
char nome[15];
int cpf,dia,mes,ano;
};
struct conta_banco{
int nro_conta;
char senha[8];
};
int main(int argc, char** argv) {
/*Criação dos arquivos*/
FILE *entrada, *conta;
struct cadastro cliente;
struct conta_banco dados;
srand(time(NULL));

/*Arquivos onde serão armazenados os dados*/
entrada = fopen("cadastro.txt", "w");
conta = fopen("conta.txt","w");

/*Realizar o cadastro do cliente*/
printf("Entre com o nome: ");
scanf("%s",cliente.nome);

/*Condição para terminar o cadastro*/
while (strcmp(cliente.nome,"FIM")){
printf("Entre com o CPF: ");
scanf("%d",&cliente.cpf);
printf("Entre com o dia de nascimento: ");
scanf("%d",&cliente.dia);
printf("Entre com o mes de nascimento: ");
scanf("%d",&cliente.mes);
printf("Entre com o ano de nascimento: ");
scanf("%d",&cliente.ano);

/*Criação de uma conta, feita aleatoriamente*/
dados.nro_conta = rand()%100000;
printf("Crie uma senha para sua conta: ");
scanf("%s",dados.senha);

/*Gravação de dados nos arquivos cadastro.txt e conta.txt*/
fprintf(entrada,"Nome: %s CPF: %d Data de Nascimento:%d/ %d/ %d \r\n",cliente.nome,cliente.cpf,cliente.dia,cliente.mes,cliente.ano);
fprintf(conta,"CPF: %d conta: %d senha: %s\r\n",cliente.cpf,dados.nro_conta,dados.senha);

/*Realizar um novo cadastro*/
printf("Entre com o nome: ");
scanf("%s",cliente.nome);
}

/*Fechar os arquivos*/
fclose(entrada);
fclose(conta);
return(0);
}

O resto não sei como fazer. :(

Por favor me ajudem.

Link para o comentário
Compartilhar em outros sites

No caso da senha e das três tentativas, você pode resolver com um simples if e um while.

int func_pede.senha()
{
while(erros <= 3)
{
int erros;
printf("Digite sua senha");
scanf("%d", &senha);

if(senha == dados.senha)
{
printf("Acesso garantido.");
return 5; //apenas para exemplo... não sei exatamente quais valores podem ser retornados
}
else
{
printf("Senha errada.");
erros++;
}

if(erros > 3)
{
printf("A senha foi digitada errada tres vezes. A conta esta bloqueada\ne so poderá ser desbloqueada pelo gerente");
break;
acesso.negado = 1;
}
}

}

Não sei se está certo, mas acho que dá pra entender a lógica.

Link para o comentário
Compartilhar em outros sites

Bem, antes de usar a função que o Reenan criou, eu teria que abrir o arquivo para extrair o número da conta e da senha.

Então criei este código para fazer o teste:

abrir = fopen("conta.txt","rb");
fread(&dados.senha,sizeof(dados.senha),8,abrir);
printf("Digite a conta");
scanf("%d",&numero_conta;
if (numero_conta == dados.nro_conta)
printf("\nOK");
fclose(abrir);

Quando cadastra apenas 1 pessoa até funciona, mas para 2 ou mais cadastros esta dando erro. O que há de errado?

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

Bem, um colega de classe que está fazendo o trabalho comigo fez este código onde tem os 4 arquivos pedidos.


#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define NRO_CLIENTES 100

typedef struct {
int dia;
int mes;
int ano;
} tData;

typedef struct {
char Nome_do_cliente[100];
int CPF;
tData data_de_nascimento;
int Numero_da_conta, senha;
float deposito, saque, saldo;
} dados;

int main(int argc, char *argv[]) {
int tipo_conta, senha_tipo, cadastro_plus, conta_plus, i;
char nome [100];

dados dados[NRO_CLIENTES];

//Abertura dos arquivos onde serão escritas as informações

FILE *cadastro;
cadastro = fopen ("C:\\Dev-Cpp\\banco\\cadastro.txt","a+");

FILE *conta;
conta = fopen ("C:\\Dev-Cpp\\banco\\conta.txt","a+");

FILE *movimento;
movimento = fopen ("C:\\Dev-Cpp\\banco\\movimento.txt","a+");

FILE *saldo;
saldo = fopen ("C:\\Dev-Cpp\\banco\\saldo.txt","a+");

printf ("Bem-vindo ao Banco Projeto. Digite:\n\n 1 - Se sua conta for tipo gerente\n 2 - Se sua conta for tipo cliente.\n" );
scanf("%d",&tipo_conta);
while (tipo_conta < 1 || tipo_conta > 2)
{
printf ("voce digitou um numero invalido. Digite 1 ou 2: ");
scanf("%d",&tipo_conta);}
getchar();
printf ("\n");

if (tipo_conta == 1)
{
printf("Sr. Gerente, digite sua senha: ");
scanf ("%d",&senha_tipo);

while (senha_tipo != 4598)
{printf ("O Sr. digitou a senha errada. Por favor digite a senha correta: ");
scanf ("%d",&senha_tipo);}
getchar();
system("cls");
printf ("Bem-vindo Sr. Gerente\n\n");

//Cadastro um cliente

i = 0;
cadastro_plus = 1;
while (cadastro_plus == 1){

//Cadastro do Cliente

printf ("CADASTRO DE CLIENTES\n\n");
printf("Nome do cliente: ");
gets(dados[i].Nome_do_cliente);
printf ("\n");
fprintf (cadastro,"Nome do Cliente: %s\n",dados[i].Nome_do_cliente);

printf ("CPF: ");
scanf("%d",&dados[i].CPF);
printf ("%\n");
fprintf (cadastro,"CPF: %d\n",dados[i].CPF);

printf("Digite a data de nascimento ...\n");

printf("Digite o dia ");
scanf("%d", &dados[i].data_de_nascimento.dia);
while (dados[i].data_de_nascimento.dia > 31 || dados[i].data_de_nascimento.dia < 1)
{printf ("Você digitou um dia invalido. Digite um dia valido: ");
scanf("%d", &dados[i].data_de_nascimento.dia);}

printf("Digite o mes ");
scanf("%d", &dados[i].data_de_nascimento.mes);
while (dados[i].data_de_nascimento.mes > 12 || dados[i].data_de_nascimento.mes < 1)
{printf ("Você digitou um mes invalido. Digite um mes valido: ");
scanf("%d", &dados[i].data_de_nascimento.mes);}

printf("Digite o ano ");
scanf("%d", &dados[i].data_de_nascimento.ano);
while (dados[i].data_de_nascimento.ano > 2000 || dados[i].data_de_nascimento.ano < 1850)
{printf ("Você digitou um ano invalido. Digite um ano valido (Pessoas com menos de 10 anos nao sao permitidas): ");
scanf("%d", &dados[i].data_de_nascimento.ano);}
printf ("\n");

fprintf (cadastro,"Data de Nascimento: %d\\%d\\%d\n",dados[i].data_de_nascimento.dia, dados[i].data_de_nascimento.mes, dados[i].data_de_nascimento.ano);

//Registro da Conta

fprintf (conta,"CPF: %d\n",dados[i].CPF);

printf ("Numero da Conta: ");
scanf("%d",&dados[i].Numero_da_conta);
printf ("%\n");
fprintf (conta,"Numero da Conta: %d\n",dados[i].Numero_da_conta);

printf ("Senha: ");
scanf("%d",&dados[i].senha);
printf ("%\n");
fprintf (conta,"Senha: %d",dados[i].senha);

dados[i].saldo = 0.00;
fprintf (saldo,"Saldo corrente: R$ %f",&dados[i].saldo);

system("cls");

printf ("CADASTRO CONCLUIDO COM SUCESSO.\n\n");

printf ("Deseja cadastrar mais algum cliente? Digite 1 para sim ou 2 para nao.\n");
scanf ("%d",&cadastro_plus);
while (cadastro_plus < 1 || cadastro_plus > 2)
{printf ("voce digitou um numero invalido. Digite 1 ou 2: ");
scanf("%d",&cadastro_plus);}
system("cls");
getchar();
}

fclose (cadastro);
fclose (conta);
fclose (movimento);
fclose (saldo);
}

else
{
printf("Digite seu nome completo: ");
gets (nome);
printf ("\n");
printf ("Digite sua senha: ");
scanf ("%d",&senha_tipo);
system("cls");

{printf ("Bem-vindo Sr.(a) %s. ",nome);

conta_plus = 1;
while (conta_plus == 1)

{printf ("Digite: \n\n 1 - Se deseja movimentar sua conta. \n 2 - Se deseja consultar sua conta.\n");
scanf("%d",&tipo_conta);
while (tipo_conta < 1 || tipo_conta > 2)
{printf ("voce digitou um numero invalido. Digite 1 ou 2: ");
scanf("%d",&tipo_conta);}
system("cls");

i=0;
if (tipo_conta == 1)
{printf ("Digite: \n\n 1 - Se deseja realizar depositos. \n 2 - Se deseja realizar saques.\n");
scanf("%d",&tipo_conta);
while (tipo_conta < 1 || tipo_conta > 2)
{printf ("voce digitou um numero invalido. Digite 1 ou 2: ");
scanf("%d",&tipo_conta);}
system("cls");

if (tipo_conta == 1)
{printf("DEPOSITO\n\n");
printf ("Digite a quantia a ser depositada: R$ ");
scanf ("%f",&dados[i].deposito);
printf ("\n");
fprintf (movimento, "Deposito: %f\n",dados[i].deposito);
dados[i].saldo = dados[i].saldo + dados[i].deposito;
fprintf (saldo,"Saldo corrente: R$ %f",dados[i].saldo);
system("cls");
printf ("DEPOSITO CONCLUIDO COM SUCESSO\n\n");}

else
{printf("SAQUE\n\n");
printf ("Digite a quantia a ser sacada: R$ ");
scanf ("%f",&dados[i].saque);
printf ("\n");
while (dados[i].saque > dados[i].saldo)
{printf ("Quantia a ser retirada maior do que a existente na conta. Por favor, insira uma quantia valida (menor ou igual a %f): ",dados[i].saldo);
printf ("%f");
scanf ("%f",&dados[i].saque);}

fprintf (movimento, "Saque: %f\n",dados[i].saque);
dados[i].saldo = dados[i].saldo - dados[i].saque;
fprintf (saldo,"Saldo corrente: R$ %f",dados[i].saldo);
system("cls");
printf ("SAQUE CONCLUIDO COM SUCESSO\n\n");}}

else
{printf ("Digite: \n 1 - Se deseja visualizar o extrato da conta. \n 2 - Se deseja visualizar o saldo corrente.\n");
scanf("%d",&tipo_conta);
while (tipo_conta < 1 || tipo_conta > 2)
{printf ("voce digitou um numero invalido. Digite 1 ou 2: ");
scanf("%d",&tipo_conta);}}

system("cls");

printf ("Deseja fazer mais consultas ou movimentos na conta? Digite 1 para sim ou 2 para nao.\n");
scanf ("%d",&conta_plus);
while (conta_plus < 1 || conta_plus > 2)
{printf ("voce digitou um numero invalido. Digite 1 ou 2: ");
scanf("%d",&conta_plus);}}}}

system("PAUSE");
return 0;
}
#include <stdio.h>

Mas além de faltar algumas coisas, nós queriamos fazer algumas funções ou procedimentos para simplificar o código.

Alguém poderia nos dar uma dica?

Estou fazendo no Dev-C++.

Link para o comentário
Compartilhar em outros sites

Senhas deverão ser criptografadas (forma simples). Por exemplo, se a senha for alfabética do tipo abc você poderá transformá-la em hij. Isso inibirá alguém que queira ver o arquivo e utilizar a senha.

int x;

char nome[20] = "abcdef";

for (x=0; x<6; x++) nome[x] = nome[x] + 6;

printf("%s\n", nome);

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!