Cajero en C

smallnett
06 de Diciembre del 2003
Hola
Tengo que hacer un cajero en C que haga depositos, retiro, de el estado de cuenta, etc, ya tengo el programa pero cuando corre no hace nada y no se donde esta el problema espero que alguien me lo pueda checar y me diga que esta mal o si alguien tiene un programa similar que me lo preste para checarlo gracias.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>



FILE *fp;

#define N 10

int i,nomov,cam,op,flag,n,check;
char nom [20],res;

struct cuenta {
int numero;
char nombre[30];
float mov[N];
}cliente;

void inicializa(void);
void buscam(void);
void Muestra(void);
void Muestrarch(void);
void venta(void);
void deposito(void);
void consulta(void);

void main(void)
{

if(fopen("datos.dat","r+")==NULL)
{
fp=fopen("datos.dat","w+");
flag=1;
}
do
{
system("cls");
printf("tt*******CAJERO*******nn");
printf("ttttMenu principal:nnn");
printf("tt1.Retiron");
printf("tt2.Depositon");
printf("tt3.Nueva cuentan");
printf("tt4.Cuentasn");
printf("tt5.Mostrar desglocen");
printf("tt6.Salir del Programan");
printf("Opcion:");
scanf("%d",&op);
switch(op)
{
case 1:
venta();
break;

case 2:
deposito();
break;

case 3:
inicializa();
break;

case 4:
consulta();
system ("pause");
break;

case 5:
Muestrarch();
break;

case 6:
system("cls");
exit(0);
break;

default:
printf("Opcion no Validan");
system("pause");
break;
}
}while(op!=6);
fclose(fp);
}

void inicializa()
{
if(flag==0)
{
fp=fopen("datos.dat","a+");
}

system("cls");
printf(" Nueva Cuentannn");
do
{
fseek(fp,0,2);
fflush(stdin);
n=ftell(fp)/sizeof(cuenta)+1;
printf("Captura de Datos de la cuenta %dnn",n);
printf("Numero de cuenta: ");
scanf("%d",&cliente.numero);
fflush(stdin);
printf("nNombre: ");
gets(cliente.nombre);
for(i=0;i<N;i++)
{
cliente.mov[i]=0;
}

if(fwrite(&cliente,sizeof(cuenta),1,fp)!=1)
{

printf("No se pudo completar la operacion n");
}
else
{
system("cls");
Muestra();
}
system("pause");
fflush(stdin);
printf("n ¿Desea agregar otra cuenta?:");
scanf("%c",&res);
system("cls");

}while(res=='s'||res=='S');
fclose(fp);
}

void consulta(void)
{
int j;
int nocuenta;
fflush(stdin);
fp=fopen("datos.dat","r+");
check=0;
printf("Introduzca el Numero de cuenta:");
scanf("%d",&nocuenta);
fflush(stdin);
fseek(fp,0,2);
n=ftell(fp)/sizeof(cuenta);
if(((fp==NULL)||(ftell(fp)/sizeof(cuenta)==0)))
{
printf("No existen datosn");
system("pause");
}
else
{
system("cls");

for(j=0;j<n;j++)
{
fseek(fp,j*sizeof(cuenta),0);
if(fread(&cliente,sizeof(cuenta),1,fp)!=1)
{
printf("No se pudo leer el dato");
system("pause");
}
if(cliente.numero==nocuenta)
{
system("cls");
cam=j;
Muestra();
check=1;
break;
}
}

if(check==0)
{
printf("No se encontro ningun dato.");
system("pause");
system("cls");
}
}
fclose(fp);
}

void Muestra(void)
{
printf(" Datos de la cuenta %d n n",cam+1);
printf("Numero de cuenta:");
printf("%d",cliente.numero);
printf("tNombre:");
printf("%s",cliente.nombre);
for (i=0;i<N;i++)
{

printf("nMovimiento %d :",i+1);
// puts(&cliente.mov[i]);
printf("%f",cliente.mov[i]);
fflush(stdin);
}
printf("n");

}

void venta(void)
{

consulta();
fp=fopen("datos.dat","r+");
if(check==1)
{
do
{
fflush(stdin);
fseek(fp,cam*sizeof(cuenta),0);
if (fread(&cliente,sizeof(cuenta),1,fp)!=1)
{
printf("No se puede obetener datos");
system("Pause");
}
system("cls");
printf(" Retirosnn");
Muestra();
printf("¿Numero de movimiento (Marque 0 si no desea realizar el movimiento)?: ");
scanf("%d",&nomov);
if (nomov>0&& nomov<=N)
{
fflush(stdin);
printf("nCantidad :");
scanf("%d",cliente.mov[nomov-1]);
//cin>>cliente.mov[nomov-1];
//cliente.mov[nomov-1]=123;


cliente.mov[nomov-1]=cliente.mov[nomov-1]*-1;


fflush(stdin);
fseek(fp,cam*sizeof(cuenta),0);



if(fwrite(&cliente,sizeof(cuenta),1,fp)!=1)
{
printf("Lo sentimos no se completo el proceson");
system("pause");
}


}
system("cls");
printf(" retirosnn");
Muestra();
fflush(stdin);
printf("n¿Hacer otro retiro?:");
scanf("%c",&res);
system("cls");

}while(res=='s'||res=='S');
}
fclose(fp);
}

void deposito(void)
{
consulta();
fp=fopen("datos.dat","r+");
if(check==1)
{
do
{
fflush(stdin);
fseek(fp,cam*sizeof(cuenta),0);
if (fread(&cliente,sizeof(cuenta),1,fp)!=1)
{
printf("No se puede obetener datos");
system("Pause");
}
system("cls");
printf(" Depositosnn");
Muestra();
printf("¿Numero de movimiento (Marque 0 si no desea realizar el movimiento)?: ");
scanf("%d",&nomov);
if (nomov>0&& nomov<=N)
{
fflush(stdin);
printf("nCantidad :");
scanf("%d",cliente.mov[nomov-1]);





fflush(stdin);
fseek(fp,cam*sizeof(cuenta),0);



if(fwrite(&cliente,sizeof(cuenta),1,fp)!=1)
{
printf("Lo sentimos no se completo el proceson");
system("pause");
}


}
system("cls");
printf(" depositosnn");
Muestra();
fflush(stdin);
printf("n¿Desea hacer otro depositos?:");
scanf("%c",&res);
system("cls");

}while(res=='s'||res=='S');
}
fclose(fp);

}


void Muestrarch(void)
{
int j;
system("cls");
fp=fopen("datos.dat","r+");
fseek(fp,0,2);
if(((fp==NULL)||(ftell(fp)/sizeof(cuenta)==0)))
{
printf("Lo sentimos no se obtuvieron datosn");
system("pause");
if(fp!=NULL)
fclose(fp);
}
else
{
fseek(fp,0,2);
n=ftell(fp)/sizeof(cuenta);
for(j=0;j<n;j++)
{
fseek(fp,j*sizeof(cuenta),0);
fread(&cliente,sizeof(cuenta),1,fp);
system("cls");
printf("Registro %d de %d n",j+1,n);
cam=j;
Muestra();
system("pause");

}

}
fclose(fp);
}

Leonardo
06 de Diciembre del 2003
Hola compañero!
He estado investigando tu codigo y la verdad es que no entiendo mu bien lo que haces en algunos apartados. Tienes abierto en el main el fichero de datos ¿Para que?, no lo utilizas para nada, lo necesitas abrir dentro de cada una de las funciones. Por otro lado cuando haces un deposito o un retiro no almacenas la cantidad de dinero depositada o retirada, creo que deberias hacerlo e incluso insertar una variable que lleve el capital total disponible, es un punto de vista personal nada mas. El resto de funciones parecen correctas y funcionan bien a simple vista. He usado el borland builder 5. Si quieres codigos similares, te puedo dar mi Proyecto de fin de curso en el que gestione un instituto.
Saludos:
LEONARDO

Smallnett
06 de Diciembre del 2003
Hola Muchas gracias por tus comentarios, lo voy a checar, también te agradecería mucho si me pudieses pasar tu código de tu proyecto de fin de curso.
Saludos
Mely

Leonardo
06 de Diciembre del 2003
Hola Mely!!
El proyecto si quieres te lo paso , con sus manuales y todo. dejame tu direccion y te lo paso.
Saludos:
Leonardo

Smallnett
06 de Diciembre del 2003
Hola Leonardo!
Mil gracias de verdad , si puedes si me gustaría que me lo pasaras con manuales aqui te dejo mi direccion.
[email protected]