[C con Clase] ayuda con ficheros y estructura porfiss :)
felician draghici
felix1900toamna en yahoo.es
Lun Jun 3 17:17:38 CEST 2013
Hola tengo una duda con los ficheros y las estructuras,si alguien me puede echar una mano
Resulta que es un proyecto final y no se si esta bien utilizar una estructura para guardar todos los datos introducidos en un fichero o habra que utilizar una estructura de tipo array struct ejemplo estructura[]..ya sabeis,mi profe me esta volviendo un poco loco y necesito vuestra ayuda,tengo este programa de pedidos telefonicos(como por ejemplo un telecomida china),la pregunta es: si guardo todo en una estructura y se escribe luego en el fichero,luego puedo utilizar la misma estructura o habra que hacer una estructura "array"
,si se hace con una estructura nada mas los datos de ella deberan ser escritos en una fila del fichero o da igual de la escritora de este porque a mi me la escribe a continuacion y no puede hacer la comparacion entre numeros si los busco...gracias un saludo
/*Programa de pedidos telefonicos de comida rapida a domicilio
-Almacenar numero de telefono
-Almacenar la calle y el total de pedidos realizados junto con el precio
-Sacar pedidos de un fichero con el numero correspondiente a cada cosa
-Imprimir la cantidad de cada cosa pedida y el precio de esta
-Imprimir la cantidad total del pedido
-Modificar el pedido entero
-Total de pedidos mostrando los numeros de telefono
-Utilizar las ultimas cuatro cifras del telefono para modificar el pedido
-Mostrar la hora en pantalla cuando se ha realizado el pedido
-Marcar suplemento adicional(poder cambiar cosas del menu y añadirle precio)
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
struct pedido introducir_datos(struct pedido telef);
int menu_programa(void);
int ver_menu(void);
void mostrar_pedidos(struct pedido telef);
struct pedido{
char telefono[10];//numero de telefono del cliente
char calle[40];//nombre de calle del cliente
char portal[4];
char piso[5];
float pedidos;//valor pedido
float total_pedidos;//valor total de los pedidos
};
int main(void)
{
struct pedido comanda, pedidos[50];
int opcion,i=0;
char tecla;
FILE *fichero;
do
{
opcion = menu_programa();
switch(opcion)
{
case 1:do
{
comanda=introducir_datos(comanda);
printf("\nDesea introducir otro pedido?\n(S)i o (N)o: ");
tecla=tolower(getche());//convertir de mayusculas a minusculas
}while(tecla != 'n');
break;
case 2:
break;
case 3:
break;
case 4:ver_menu();
break;
case 5:mostrar_pedidos(comanda);
break;
case 6:
break;
}
}while(opcion != 0);
return 0;
}
int menu_programa(void)
{//FUNCION QUE PERMITE MOSTRAR EL MENU PRINCIPAL DEL PROGRAMA
int var;
system("cls");
printf("\n\tMENU PRINCIPAL");
printf("\n\n1) Insertar telefono ");
printf("\n2) Modificar pedido(ultimos 4 digitos telefonicos) ");
printf("\n3) Ver total dinero sacado en el dia ");
printf("\n4) Consultar precios productos y modificarlos ");
printf("\n5) Mostrar total pedidos(numeros de telefonos)");
printf("\n6) Borrar pedido por pedido");
printf("\n0) Salir programa");
printf("\n\nTeclea opcion: ");
scanf("%d",&var);
fflush(stdin);
return var;
getchar();
}
struct pedido introducir_datos(struct pedido telef)
{//FUNCION QUE PERMITE AÑADIR DATOS EN EL FICHERO DE LOS PEDIDOS
struct pedido {
char num_tel[50];
char direccion[50];
char portal2[50];
char piso2[50];
}lectura;
FILE *fichero;
int a,b,encontrado=0;//contador
char t,p,po,c;
for(b=0;b<50;b++)
{
lectura.direccion[b] = '\0';
lectura.piso2[b] = '\0';
lectura.portal2[b] = '\0';
lectura.num_tel[b] = '\0';
}
system("cls");
fichero = fopen("C://c_files//proyecto//productos.txt","ab+");
if(fichero==NULL)
{
printf("\nEl fichero esta vacio");
}
else
{
printf("\nMarque el numero de telefono: ");
scanf("%s",&lectura.num_tel);
fflush(stdin);
fread(&telef.telefono,sizeof(telef.telefono),1,fichero);
//empieza el fichero desde el principio
/* do
{
// fread(&telef.telefono,strlen(telef.telefono),1,fichero);
if(strcmp(telef.telefono,num_tel)==0)
{
printf("\nSi");
encontrado=1;
}
}while(feof(fichero) == 0);*/
fseek(fichero,0L,0);
/* do
{
if(strcmp(telef.telefono,lectura.num_tel)==0)
{
encontrado=1;
}
fread(&telef.telefono,strlen(telef.telefono),1,fichero);
fgets(telef.telefono,1,fichero);
printf("\n%s",telef.telefono);
}while(feof(fichero)==0);*/
if(strcmp(telef.telefono,lectura.num_tel)!=0)
//if(encontrado==0)
{
printf("\nEscriba el nombre de la calle:");
scanf("%s",&lectura.direccion);
fflush(stdin);
printf("\nPortal:");
scanf("%s",&lectura.portal2);
fflush(stdin);
printf("\nPiso y letra:");
scanf("%s",&lectura.piso2);
fflush(stdin);
strcpy(telef.telefono,lectura.num_tel);
strcpy(telef.portal,lectura.portal2);
strcpy(telef.piso,lectura.piso2);
strcpy(telef.calle,lectura.direccion);
fwrite(&telef.telefono,sizeof(telef.telefono),1,fichero);
fwrite(&telef.calle,strlen(telef.calle),1,fichero);
fwrite(&telef.portal,strlen(telef.portal),1,fichero);
fwrite(&telef.piso,strlen(telef.piso),1,fichero);
}
else
{
fread(&telef.telefono,sizeof(telef.telefono),1,fichero);
fread(&telef.calle,strlen(telef.calle),1,fichero);
fread(&telef.portal,strlen(telef.portal),1,fichero);
fread(&telef.piso,strlen(telef.piso),1,fichero);
// fgets(telef.calle,1,fichero);
// fgets(telef.portal,1,fichero);
// fgets(telef.piso,1,fichero);
printf("\nTelefono: %s",telef.telefono);
printf("\nCalle: %s",telef.calle);
printf("\nPortal: %s",telef.portal);
printf("\nPiso: %s",telef.piso);
}
}
/// }//fin operaciones con el fichero
fclose(fichero);
getchar();
}
//FUNCION PARA VER EL LISTADO DE LAS COMIDAS Y PRECIOS QUE HAY EN EL RESTAURANTE
int ver_menu(void)
{
system("cls");
FILE *fm;//fichero menu comidas
char letra;
fm = fopen("C://c_files//proyecto//comidas.txt","rb");
if(fm==NULL)
{
printf("\nError de lectura de fichero menu");
}
else
{
letra = fgetc(fm);
while(feof(fm)==0)
{
printf("%c",letra);
letra = fgetc(fm);
}
}
fclose(fm);
getchar();
return 0;
}
//FUNCION QUE MUESTRA TODOS LOS PEDIDOS QUE SE HAN REALIZADO
void mostrar_pedidos(struct pedido telef)
{
FILE *fichero;
char l;
fichero = fopen("C://c_files//proyecto//productos.txt","rb");
system("cls");
if(fichero == NULL)
{
printf("\nEl fichero no tiene pedidos");
}
else
{
// fread(&telef,sizeof(telef),1,fichero);
l=fgetc(fichero);
while(feof(fichero)==0)
{
printf("%c",l);
l=fgetc(fichero);
}
}
fclose(fichero);
getchar();
}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130603/95121cd6/attachment.html>
Más información sobre la lista de distribución Cconclase