Hola necesito ayuda con este codigo fuente!!!!!!!!
Hola necesito ayuda con este codigo fuente!!!!!!!!
El problema que tengo, es que mi codigo no guarda los datos, que yo he ingresado, necesito que me los guarde, estamos utilizando FILE, pero solo nos tira datos basura.
a tambien los datos que hay guardado los necesito recuperar, ahi tambien me dan una ayudita
si alguien sabe, porfa una ayudita,
ahi pongo mi codigo fuente.
-------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define cont 1
/*---------------------------------------------------------------------------*/
/*-----------Estructura para guardar los datos de vagon carga----------------*/
/*---------------------------------------------------------------------------*/
typedef struct{
char nombre_empre[25];
char material[25];
float peso;
float costo_vagon;
}carga;
/*---------------------------------------------------------------------------*/
/*---------Estructura para guardar los datos de vagon pasajerro--------------*/
/*---------------------------------------------------------------------------*/
typedef struct{
int num_pasajeros;
char destino[25];
float val_tolpas;
}pasajeros;
/*---------------------------------------------------------------------------*/
/*----------------Estructura para llevar los datos del tren------------------*/
/*---------------------------------------------------------------------------*/
typedef struct{
carga carg;
pasajeros past;
bool tipo; //lleva el control de los vagones para saber el tipo
float recaudado; //variable de la suma del total del pasaje mas costo por vagon
}tren;
tren bala[9];
/*---------------------------------------------------------------------------*/
/*------------------Declaracion de las Funciones Prototipo-------------------*/
/*---------------------------------------------------------------------------*/
void Insertar();
void guardar();
void Mostrar();
void recuperar();
void menu();
/*---------------------------------------------------------------------------*/
/*-----------------------------Variables globales----------------------------*/
/*---------------------------------------------------------------------------*/
float val_tolpas; /*Variable para identificar el valor total del pasaje*/
int van=6000;
int pas=300;
int numero; //guarda la cantidad de vagones por tren
FILE *dtb; // Puntero a Archivo
/*---------------------------------------------------------------------------*/
/*----------------------------Ejecucion del Main-----------------------------*/
/*---------------------------------------------------------------------------*/
main()
{ /*inicio del main*/
char res;
do{
menu();
res=getch();
switch(res)
{
case '1':
Insertar();
break;
case '2':
guardar();
break;
case '3':
Mostrar();
break;
case '4':
recuperar();
break;
case '5':exit(1);
default: printf(" Opcion no valida!!!\n"); getch();
break;
}
}
while (res!='6');
getch();
}//*fin del main*/
/*---------------------------------------------------------------------------*/
/*-------------------Ejecucion de lasFunciones Prototipo---------------------*/
/*---------------------------------------------------------------------------*/
void menu()// abre la funcion que me permite visualizar el menu
{
clrscr();
printf("\n******************************************************************************\n");
printf("\n\n\t\t\tBienvenido a INCOFER\n\n");
printf("\n******************************************************************************\n");
printf("\n\n\t\t\tElija una opcion para continuar\n\n");
printf("\n\t1- Insetar Datos del Tren\n");
printf("\t2- Guardar Datos\n");
printf("\t3- Mostrar todos los datos de los Vagones\n");
printf("\t4- Recuperar Datos\n");
printf("\t5- Salir\n");
printf("\nEscoja el numero de la opcion que desea realizar: ");
}//cierre de la funcion menu
/*Inserta los tipos de vagones*/
void Insertar(){
clrscr();
numero=0;
printf("\nCuantos Vagones desea ingresar:\n");
scanf("%d",&numero);
for(int i=0;i<numero;i++){
int cont_v=0; //lleva el dato del tipo de vagon escogido
printf("Digite el tipo de vagon");
printf("(1) Carga - (2) Pasajeros\n");
scanf("%d", &cont_v);
clrscr();
if (cont_v==1){ /*vagon de carga*/
printf("Digite los Datos del Vagon de Carga\n");fflush(stdin);
printf("\nNombre de la Empresa es:\t");
gets(bala.carg.nombre_empre);
flushall();
printf("\nTipo de Material transportado es:\t");fflush(stdin);
gets(bala.carg.material);
printf("\nIntroduzca el peso de la carga en toneladas es:\t");
scanf("%f", &bala.carg.peso);
bala.carg.costo_vagon=( bala.carg.peso*van);
flushall();
printf("\nEl costo por vagon es: %.2f\n",bala.carg.costo_vagon);fflush(stdin);
bala.tipo=0;
bala.recaudado+=bala.carg.costo_vagon;
getch ();
} //cierre del if
else if(cont_v==2) { /*vagon de pasajeros*/
printf("Digite los Datos del Vagon de Pasajeros\n");fflush(stdin);
printf("\nNumero de pasajeros\t");
scanf("%d", &bala.past.num_pasajeros);
flushall();
puts("\nRuta Directa Definida");
puts("San Jose, Alajuela, Heredia");
printf("\nLugar de destino\t");fflush(stdin);
gets(bala.past.destino);
bala.past.val_tolpas=(bala.past.num_pasajeros*pas);
flushall();
printf("\nEl valor total del pase es: %.2f\t", bala.past.val_tolpas);
printf("\nSu destino es: %s\t\n", bala.past.destino);fflush(stdin);
bala.tipo=1;
bala.recaudado+=bala.past.val_tolpas;
getch ();
clrscr();
}//cierre del else
}//cierre de for
}//fin el insertar
void guardar() //funcion de guardar datos
{ //Inicio de Guardar
FILE *dtb;
dtb = fopen ("C:\\TREN.txt", "w");
if(!dtb)
{
printf("\nNo Se puede escribir!!\a");
getch();
return;
}
fwrite(&numero,sizeof(int),1,dtb);
for(int i=0;i<numero;i++)
{
if(bala[numero].tipo==0)
{
fwrite(&bala[numero].tipo,sizeof(bool),1,dtb);
fwrite(bala[numero].carg.nombre_empre,sizeof(char[25]),1, dtb);
fwrite(bala[numero].carg.material,sizeof(char[25]),1, dtb);
fwrite(&bala[numero].carg.peso,sizeof(float),1, dtb);
fwrite(&bala[numero].carg.costo_vagon,sizeof(float),1, dtb);
}//fin del if bool==0
if(bala[numero].tipo==1)
{
fwrite(&bala[numero].tipo,sizeof(bool),1,dtb);
fwrite(&bala[numero].past.num_pasajeros,sizeof(int),1, dtb);
fwrite(bala[numero].past.destino,sizeof(char[25]),1, dtb);
fwrite(&bala[numero].past.val_tolpas,sizeof(float),1, dtb);
}//fin del if bool==1
fwrite(&bala[numero].recaudado,sizeof(float),1,dtb);
}//fin del for
printf("\n****Sus datos fueron guardados satisfactoriamente!!!!!!!****\n");
getch();
fclose(dtb);
} //Fin de Guardar
void Mostrar() //funcion de mostrar datos
{ //Inicio de Mostrar
for(int c=0;c<numero;c++)
{
flushall();
if(bala[c].tipo==0)
{
printf("\n\t\t**Datos del Vagon de carga**\n");
printf("\nNombre de la Empresa es:\t%s", bala[c].carg.nombre_empre);
printf("\nTipo de Material transportado es:\t%s", bala[c].carg.material);fflush(stdin);
printf("\nEl costo por vagon es: %.2f", bala[c].carg.costo_vagon);fflush(stdin);
flushall();
getch();
}
if(bala[c].tipo==1)
{
printf("\n\t\t**Datos del Vagon de pasajeros**\n");
printf("\nEl valor total del pase es: %.2f\t", bala[c].past.val_tolpas);
flushall();
printf("\nEl Destino es: %s\t", bala[c].past.destino);fflush(stdin);
getch();
}
printf("\nTotal recaudado en la Ruta %.2f", bala[c].recaudado); //solo lo muestra una ves
getch();
}
}//fin de la funcion mostrar
void recuperar()//funcion para recuperar datos
{ //Inicio de recuperar
dtb = fopen ("C:\\TREN.txt", "r");
while (!feof(dtb))
{
if (fread(&numero,sizeof(int),1,dtb))
for(int i=0;i<numero;i++)
{
fread(&bala[numero].tipo,sizeof(bool),1,dtb);
if(bala[numero].tipo==0)
{
printf("Nombre de la empresa: %s\t",bala[numero].carg.nombre_empre,sizeof(char[25]),1, dtb);fflush(stdout);
printf("Tipo de Material %s\t",bala[numero].carg.material,sizeof(char[25]),1, dtb); fflush(stdout);
printf("Peso de la material %.2f\t",&bala[numero].carg.peso,sizeof(float),1, dtb); fflush(stdout);
printf("Costo %.2f\t",&bala[numero].carg.costo_vagon,sizeof(float),1, dtb); fflush(stdout);
}//fin del if bool==0
fread(&bala[numero].tipo,sizeof(bool),1,dtb); fflush(stdout);
if(bala[numero].tipo==1)
{
printf("Cantidad de pasajeros %d\t",&bala[numero].past.num_pasajeros,sizeof(int),1, dtb); fflush(stdout);
printf("Lugar de Destino %s\t",bala[numero].past.destino,sizeof(char[25]),1, dtb); fflush(stdout);
printf("Costo %.2f",&bala[numero].past.val_tolpas,sizeof(float),1, dtb);fflush(stdout);
}//fin del if bool==1
fread(&bala[numero].recaudado,sizeof(float),1,dtb); fflush(stdout);
getch();
}//fin del for
}//fin de while
fclose(dtb);
} //Fin de Recuperar
-------------------------------------------------------------------------------------------------------
ok gracias este es el codigo, espero que alguien me ayude