0

Hey :)

Damn I hate pointers in C :P Worse thing possible. Anything I post my code:

main.c

#include <assert.h> 
#include <ctype.h> 
#include <errno.h> 
#include <float.h> 
#include <iso646.h> 
#include <limits.h> 
#include <locale.h> 
#include <math.h> 
#include <setjmp.h> 
#include <signal.h> 
#include <stdarg.h> 
#include <stddef.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>
#include <time.h> 
#include <wchar.h> 
#include <wctype.h> 
#include <conio.h>


#include "estructuras.h"
#include "funciones.h"
#include "menus.h"


#define num 999

/* Localizado en menus.h */
void menuprincipal(cli *);
//void menucliente(cli *);
//void menuproductos();
//void menuempleado();



/* Localizado en funciones.h */
//void inicializar ();
//void confirmarcliente();
//void insertarcliente(cli *);
//void insertarempleado();
//void mostrarcliente(cli *);
//void inicializarporarchivo(cli *);



void main()
{
	
	cli *pc;
	pro *pp;
	emp *pe;

 	*pc=c[0];
	*pp=p[0];
	*pe=e[0];


	
	
	
	
		

	
	
	
	
	
//system("cls");
//inicializar();
//menuprincipal();
	//inicializarporarchivo(pc,pp,pe);
	menuprincipal(*pc);
	//guardarenfichero();
}

estructuras.h

#define num 999 // Para que sean todos las estructuras de 999

/* Estructuras principales */
struct direccion
		{
			char calle[15]; //Limitado a 15 characteres
			int numportal; //1 digito
			int piso; //1 digito
}; 
struct poblacion
		{
			char nombrepoblacion[15]; //Limitado a 15 characteres
			int codpostal; //Limitado a 5 digitos
			char provincia[15]; //Limitado a 15 characteres
}; 

struct empleados
{
	int id; // Limitado a una letra E seguido de 3 numeros
	char dni[11]; //Limitado a 8 numeros, un guion y una letra
	char nombre[15]; //Limitado a 15 characteres
	char apellido[15]; //Limitado a 15 characteres
	int telefono; //Limitado a 9 digitos
	struct direccion dir; // Una variable que es de tipo estructura dirrecion: acesso a calle,
						  //Numportal, y piso
	struct poblacion pob; // Una variable que es de tipo estructura poblacion: accesso a
						  // nombrepoblacion, codpostal, y provincia
};
typedef struct empleados e[num];
typedef struct empleados emp; 




/* Asi podemos insertar hasta 999 productos, porque he creado 
la tabla que contiene num elementos de tipo empleados: Este numero es el mismo que el id */



struct clientes
{
	int id; // Limitado a una letra C seguido de 3 numeros
	char dni[11]; //Limitado a 8 numeros, un espacio y una letra
	char nombre[15];//Limitado a 15 characteres
	char apellido[15];//Limitado a 15 characteres
	int telefono;//Limitado a 6 digitos
	struct direccion dir; // Una variable que es de tipo estructura dirrecion: acesso a calle,
						  //Numportal, y piso
	struct poblacion pob; // Una variable que es de tipo estructura poblacion: accesso a
						  // nombrepoblacion, codpostal, y provincia
	int cantcompras; // La cantidad de comprars para los descuentos

}; 
typedef struct clientes c[num];
typedef struct clientes cli;

/* Asi podemos insertar hasta 999 productos, porque he creado 
la tabla que contiene num elementos de tipo cliente: Este numero es el mismo que el id */




struct productos
{
	
	int id; // Limitado a una letra P seguido de 3 numeros
	char nombre[15]; //Limitado a 15 characteres
	char descripcion[50]; //Limitado a 50 characteres
	float precio; // Precio con decimal
	int cantidad; //Lo que queda en stock

}; 
typedef struct productos p[num];
typedef struct productos pro;
/* Asi podemos insertar hasta 999 productos, porque he creado 
la tabla que contiene num elementos de tipo producto: Este numero es el mismo que el id */

funciones.h

//#include "estructuras.h"



void menuprincipal(cli *);
//void menuempleado();
void menucliente(cli *);
//void menuproductos();



void inicializarporarchivo(cli *pc)
{
	FILE *ficheroc;
	FILE *ficheroe;
	FILE *ficherop;

	int i=0;
	char tid[4];
	char ttelefono[9];
	char tcantcompras[1];
	char tnumportal[2];
	char tpiso[1];
	char tcodpostal[5];


	//malloc????

	ficheroc=fopen("clientes.txt","r");
	ficheroe=fopen("empleados.txt","r");
	ficherop=fopen("productos.txt","r");
	
	if (ficheroc==NULL)
	{
		printf ("no Encuentro!");
		getch();
		//inicializar();
		inicializar (*pc);
	}
	
	

	if (ficheroc!=NULL)
	{
		printf ("Encuentro!");

		do
		{
			for (i=0;i<999;i++) 
			{
			/*	c=fgetc(ficheroc);
				if ((c!=EOF) && (c!='\n'))
					c[i].nombre=c;
			}


			do
			{
				getc(c[i].id);
				ficheroc++;

			}while (ficheroc!="\n");*/
			
				fgets(tid,sizeof(tid),ficheroc);
				pc->id=atoi(tid);
			
		/*	do
			{*/
				
				fgets(pc->dni,sizeof(pc->dni),ficheroc);
		/*	}while (fgets!='\n');*/
			
		/*	do
			{*/
				fgets(pc->nombre,sizeof(pc->nombre),ficheroc);
		/*	}while (fgets!='\n');*/

			/*do
			{*/
				fgets(pc->apellido,sizeof(pc->apellido),ficheroc);
		/*	}while (fgets!='\n');*/

			/*do
			{*/
				fgets(ttelefono,sizeof(ttelefono),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->telefono=atoi(ttelefono);

			/*do
			{*/
				fgets(tcantcompras,sizeof(tcantcompras),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->cantcompras=atoi(tcantcompras);

		/*	do
			{*/
				fgets(pc->dir.calle,sizeof(pc->dir.calle),ficheroc);
		/*	}while (fgets!='\n');*/
			
			/*do
			{*/
				fgets(tnumportal,sizeof(tnumportal),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->dir.numportal=atoi(tnumportal);

			/*do
			{*/
				fgets(tcodpostal,sizeof(tcodpostal),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->pob.codpostal=atoi(tcodpostal);

			/*do
			{*/
				fgets(tpiso,sizeof(tpiso),ficheroc);
		/*	}while (fgets!='\n');*/
				pc->dir.piso=atoi(tpiso);

		/*	do
			{*/
				fgets(&pc->pob.nombrepoblacion,sizeof(pc->pob.nombrepoblacion),ficheroc);
			/*}while (fgets!='\n');*/

			//do
			//{
				fgets(pc->pob.provincia,sizeof(pc->pob.provincia),ficheroc);
				pc++;
		/*	}while (fgets!='\n');*/
			}
		}while (!feof(ficheroc));
		fclose(ficheroc);
		
	}		
}




/* Esta funcion nos permite inicializar todas las estructuras */
/* Recorremos todos los clientes, empleados y productos hasta 999 y ponemos sus campos a 0*/
void inicializar (cli *pc)
{ // Principio de funciones inicizalizar
	int a=0; // 1 Contador

	/********************* Inicializamos la estructura de clientes *************************/
	/* Campos int id, char dni, char nombre, char apellido, int telefono */
	
	
	for (a=0;a<999;a++) 
	{
		
		pc->id=0;
		strcpy(pc->dni,"0");
		strcpy(pc->nombre,"0");
		strcpy(pc->apellido,"0");
		pc->telefono=0;
		pc->cantcompras=0;
		strcpy(pc->dir.calle,"0");
		pc->dir.numportal=0;
		pc->dir.piso=0;
		pc->pob.codpostal=0;
		strcpy(pc->pob.nombrepoblacion,"0");
		strcpy(pc->pob.provincia,"0");
		pc++;
	}
	/***************** Fin de inicializacion de clientes ******************************/


	/********************* Inicializamos la estructura de empleados *************************/
	/* Campos: int id, char dni, char nombre, char apellido, int telefono */
/*
	for (a=0;a<999;a++) 
	{
		*pe->id=0;
		strcpy(*pe->dni,"0");
		strcpy(*pe->nombre,"0");
		strcpy(*pe->apellido,"0");
		*pe->telefono=0;
		strcpy(*pe->dir.calle,"0");
		*pe->dir.numportal=0;
		*pe->dir.piso=0;
		*pe->pob.codpostal=0;
		strcpy(*pe->pob.nombrepoblacion,"0");
		strcpy(*pe->pob.provincia,"0");
		pe++;
	
		
	}*/
	/********************* Fin de inicializacion de empleados ******************************/
	

	


	/***************** Inicializamos la estructura de productos ***********************/

/*	for (a=0;a<999;a++) // Este for permite que cada 999 de los productos lo ponga a 0
	{
		*pp->id=0;
		strcpy(*pp->nombre,"0");
		strcpy(*pp->descripcion,"0");
		*pp->precio=0.0;
		*pp->cantidad=0;
		pp++;
	}*/

	/***************** Fin de inicializacion de productos ******************************/

} // Fin de funciones de inicializar


/********************************FUNCIONES DE INSERTAR***************************************/
/*
void guardarenfichero(cli pc, empleados *pe,productos *pp)
{
	int i=1;
	FILE *ficheroc;
	FILE *ficheroe;
	FILE *ficherop;

	//printf ("Hola");
	//getch();
	ficheroc=fopen("clientes.txt","w");
	
	fputs("Cliente ",ficheroc);
	fputs(&i,ficheroc);
	fputs(":",ficheroc);
	fputs('\n',ficheroc);
	fputs(pc->id,ficheroc);
	fputs("\n",ficheroc);
	fputs(pc->nombre,ficheroc);
	fclose(ficheroc);
}
*/
void insertarcliente(cli *pc)
{
	char dni[11];
	char letra;
	int id;
	int val=0;


	do
	{
	system ("cls");
	printf ("Que numero deseas utilizar de indentificador? (1-999)");
	scanf ("%d",&id);

		if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
		if ((id>=1) && (id<=999))
		{
		val=1;
			if (pc->id!=0)
			{
				printf ("Este numero ya esta siendo utilizado!");
				getch();
				val=0;
			}
		}
	}while ((val!=1) || (val==0));
		
		pc->id=id;
		
		system("cls");
		printf ("Estas en el cliente C-%d\nIntroduce los 8 digitos del DNI\n",pc->id);
		fflush(stdin);
		flushall();
		scanf ("%8s",dni);

		printf ("Introduce la letra del DNI\n");
		flushall();
		scanf("%1c",letra);
		strcpy(pc->dni,dni);
		strcat(pc->dni,"-");
		strcat(pc->dni,letra);
		
		printf ("Introduce el nombre del cliente\n");
		fflush(stdin);
		fgets(pc->nombre,15,stdin);
		
		printf ("Introduce el apellido del cliente\n");
		fflush(stdin);
		fgets(pc->apellido,15,stdin);

		printf ("Introduce la calle donde vive el cliente\n");
		fflush(stdin);
		fgets(pc->dir.calle,15,stdin);
	
		printf ("Introduce el numero de portal/casa del cliente\n");
		fflush(stdin);
		scanf ("%1i",&(pc->dir.numportal));

		printf ("Introduce el numero de piso (0 si es un bajo/casa individual)\n");
		fflush(stdin);
		scanf ("%1i",&(pc->dir.piso));

		printf ("Introduce la poblacion donde vive el cliente\n");
		fflush(stdin);
		fgets(pc->pob.nombrepoblacion,sizeof(pc->pob.nombrepoblacion),stdin);

		printf ("Introduce la provincia donde vive el cliente\n");
		fflush(stdin);
		fgets(pc->pob.provincia,sizeof(pc->pob.provincia),stdin);

		printf ("Introduce el codigo postal de 5 digitos del cliente\n");
		fflush(stdin);
		scanf ("%5i",&(pc->pob.codpostal));
		flushall();

		printf ("Introduce el numero de telefono, con prefijo, del cliente\n");
		fflush(stdin);
		scanf ("%9i",&(pc->telefono));

	//	printf ("ID: C-%d\nDNI: %s\nNombre: %s\nApellido: %s\nCalle: %s\nNumero portal/casa: %d\nNumero piso: %d\nPoblacion: %s\nProvincia: %s\nCodigo Postal: %d\nTelefono: %d\n",c[id].id,c[id].dni,c[id].nombre,c[id].apellido,c[id].dir.calle,c[id].dir.numportal,c[id].dir.piso,c[id].pob.nombrepoblacion,c[id].pob.provincia,c[id].pob.codpostal,c[id].telefono);
		printf ("Pulse intro para volver al menu principal\n");
		getch();
menuprincipal(pc);
}


/*

void insertarempleado()
{
	char dni[11];
	char letra[1];
	int id;
	int val=0;

	do
	{
	system ("cls");
	printf ("Que numero deseas utilizar de indentificador? (1-999)");
	scanf ("%d",&id);

		if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
		if ((id>=1) && (id<=999))
		{
		val=1;
			if (e[id].id!=0)
			{
				printf ("Este numero ya esta siendo utilizado!");
				getch();
				val=0;
			}
		}
	}while ((val!=1) || (val==0));
		
		e[id].id=id;
		
		system("cls");
		printf ("Estas en el empleado E-%d\nIntroduce los 8 digitos del DNI\n",e[id].id);
		fflush(stdin);
		flushall();
		scanf ("%8s",dni);

		printf ("Introduce la letra del DNI\n");
		flushall();
		scanf("%1s",letra);
		strcpy(e[id].dni,dni);
		strcat(e[id].dni,"-");
		strcat(e[id].dni,letra);
		
		printf ("Introduce el nombre del empleado\n");
		fflush(stdin);
		fgets(e[id].nombre,sizeof e[id].nombre,stdin);
		
		printf ("Introduce el apellido del empleado\n");
		fflush(stdin);
		fgets(e[id].apellido,sizeof e[id].apellido,stdin);

		printf ("Introduce la calle donde vive el empleado\n");
		fflush(stdin);
		fgets(e[id].dir.calle,sizeof e[id].dir.calle,stdin);
	
		printf ("Introduce el numero de portal/casa del empleado\n");
		fflush(stdin);
		scanf ("%1i",&e[id].dir.numportal);

		printf ("Introduce el numero de piso (0 si es un bajo/casa individual)\n");
		fflush(stdin);
		scanf ("%1i",&e[id].dir.piso);

		printf ("Introduce la poblacion donde vive el empleado\n");
		fflush(stdin);
		fgets(e[id].pob.nombrepoblacion,sizeof e[id].pob.nombrepoblacion,stdin);

		printf ("Introduce la provincia donde vive el empleado\n");
		fflush(stdin);
		fgets(e[id].pob.provincia,sizeof e[id].pob.provincia,stdin);

		printf ("Introduce el codigo postal de 5 digitos del empleado\n");
		fflush(stdin);
		scanf ("%5i",&e[id].pob.codpostal);
		flushall();

		printf ("Introduce el numero de telefono, con prefijo, del empleado\n");
		fflush(stdin);
		scanf ("%9i",&e[id].telefono);

		printf ("ID: E-%d\nDNI: %s\nNombre: %s\nApellido: %s\nCalle: %s\nNumero portal/casa: %d\nNumero piso: %d\nPoblacion: %s\nProvincia: %s\nCodigo Postal: %d\nTelefono: %d\n",e[id].id,e[id].dni,e[id].nombre,e[id].apellido,e[id].dir.calle,e[id].dir.numportal,e[id].dir.piso,e[id].pob.nombrepoblacion,e[id].pob.provincia,e[id].pob.codpostal,e[id].telefono);
		printf ("Pulse intro para volver al menu principal\n");
		getch();
menuprincipal();
}


void insertarproducto()
{
	int id;
	int val=0;
	

	do
	{
	system ("cls");
	printf ("Que numero deseas utilizar de indentificador? (1-999)");
	scanf ("%d",&id);
		if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
		if ((id>=1) && (id<=999))
		{
		val=1;
			if (p[id].id!=0)
			{
				printf ("Este numero ya esta siendo utilizado!");
				getch();
				val=0;
			}
		}
	}while ((val!=1) || (val=0));
		
		p[id].id=id;
		
		system("cls");
		printf ("Estas en el producto P-%d\n",p[id].id);
		

		printf ("Introduce el nombre del producto ");
		fflush(stdin);
		fgets(p[id].nombre,sizeof p[id].nombre,stdin);

		printf ("Introduce una descripcion para el producto ");
		fflush(stdin);
		fgets(p[id].descripcion,sizeof p[id].descripcion,stdin);

		printf ("Introduce el precio del producto ");
		scanf ("%2f",p[id].precio);

		printf ("Introduce el stock de este producto ");
		scanf ("%i",p[id].cantidad);

		printf ("Nombre: %s/n Descripcion: %s/n Precio: %2f/n Stock: %i/n",p[id].nombre,p[id].descripcion,p[id].precio,p[id].cantidad);
		getch();
		

menuprincipal();

}



/*****************************FIN DE FUNCIONES DE INSERTAR*************************************/

/****************************FUNCIONES DE MOSTRAR********************************************/

/* Las funciones de mostrar funcionan de la siguiente manera: Se le pone un limite al ID que se
va mostrar. Hasta ese limite se mostrara todos los datos de ese cliente/empleado/producto si 
existe y se a creado previamente el cliente/empleado/producto */

void mostrarcliente(cli *pc)
{
	int nu;
	int i;
	do
	{
		system("cls");
		printf ("Introduce hasta que numero quieres mostrar:");
		scanf ("%d",&nu);
		if ((nu>999) || (nu<1)) //Otra comprobacion si es normal el numero insertado
			{
			system ("cls");
			printf ("No es valido este numero!");
			}
	}while ((nu>999) || (nu<1));
	
	for (i=0;i<=nu;i++)
	{
		if (pc->id!=0)
		{
		printf ("ID: C-%d\n",pc->id);
		printf ("DNI: %s\n",pc->dni);
		printf ("Nombre: %s\n",pc->nombre);
		printf ("Apellido: %s\n",pc->apellido);
		printf ("Direccion \n Calle: %s \n Numero Portal:%d \n Piso:%d \n",pc->dir.calle,pc->dir.numportal,pc->dir.piso);
		printf ("Poblacion \n Codigo Postal: %d \n Nombre: %s \n Provincia %s \n",pc->pob.codpostal,pc->pob.nombrepoblacion,pc->pob.provincia);
		printf ("Telefono: %d \n",pc->telefono);
		printf ("Cantidad de compras realizadas: %d \n",pc->cantcompras);
		getch();
		}
	}
menuprincipal(pc);
}
/*
void mostrarempleado()
{
	int nu;
	int i;
	do
	{
		system("cls");
		printf ("Introduce hasta que numero quieres mostrar:");
		scanf ("%d",&nu);
		if ((nu>999) || (nu<1))
			{
			system ("cls");
			printf ("No es valido este numero!");
			}
	}while ((nu>999) || (nu<1));
	
	for (i=0;i<=nu;i++)
	{
		if (e[i].id!=0)
		{
		printf ("ID: E-%d\n",e[i].id);
		printf ("DNI: %s\n",e[i].dni);
		printf ("Nombre: %s\n",e[i].nombre);
		printf ("Apellido: %s\n",e[i].apellido);
		printf ("Direccion: \n Calle: %s \n Numero Portal: %d \n Piso: %d\n",e[i].dir.calle,e[i].dir.numportal,e[i].dir.piso);
		printf ("Poblacion: Codigo Postal: %d \n Nombre: %s \n Provincia %s \n",e[i].pob.codpostal,e[i].pob.nombrepoblacion,e[i].pob.provincia);
		printf ("Telefono: %d \n",e[i].telefono);
		getch();
		}
	}
menuprincipal();
}

void mostrarproducto()
{
	int nu;
	int i;
	do
	{
		system("cls");
		printf ("Introduce hasta que numero quieres mostrar:");
		scanf ("%d",&nu);
		if ((nu>999) || (nu<1))
			{
			system ("cls");
			printf ("No es valido este numero!");
			}
	}while ((nu>999) || (nu<1));
	
	for (i=0;i<=nu;i++)
	{
		if (p[i].id!=0)
		{
		printf ("ID: P-%d\n",p[i].id);
		printf ("Nombre: %s\n",p[i].nombre);
		printf ("Descripcion: %s\n",p[i].descripcion);
		printf ("Precio: %f2\n",p[i].precio);
		printf ("Stock: %i\n",p[i].cantidad);
		printf (" \n");
		getch();
		}
	}
menuprincipal();
}

/************************************FIN DE FUNCIONES DE MOSTRAR*******************************/


/*************************************FUNCIONES DE ELIMINAR****************************/
void eliminarcliente(cli *pc)
{
	int id;
	int val;
	char confir=' ';

	do
	{
	system("cls");
	printf ("Que ID quieres eliminar?\n");
	scanf ("%d",&id);
	

	if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
	}while (val=0);


	if ((id>=1) && (id<=999))
		{
			if (pc->id==0)
			{
				printf ("Este cliente no existe!");
				getch();
				menucliente(pc);
			}
			else
				val=1;
		}
	

	
	if (val==1)
		{
			
			printf ("ID: C-%d\n",pc->id);
			printf ("DNI: %s\n",pc->dni);
			printf ("Nombre: %s\n",pc->nombre);
			printf ("Apellido: %s\n",pc->apellido);
			printf ("Telefono: %i\n",pc->telefono);
			printf ("Direccion: %s\n",pc->dir.calle);
			printf ("Nombre de poblacion: %s\n",pc->pob.nombrepoblacion);
			printf ("Nombre de provincia: %s\n",pc->pob.provincia);
			printf ("Numero de codigo postal: %d\n",pc->pob.codpostal);
			printf ("Numero de portal: %d\n",pc->dir.numportal);
			printf ("Numero de piso: %d\n",pc->dir.piso);
			printf ("Canitdad de compras: %d\n",pc->cantcompras);
			
		
			do
				{
				printf ("\nEstas seguro que quieres eliminar este cliente? S o N");
				scanf ("%c",&confir);
				}while ((confir!='S') && (confir!='N') && (confir!='s') && (confir!='n'));

			if ((confir=='s') || (confir=='S'))
			{
				pc->id=0;
				strcpy(pc->dni,"0");
				strcpy(pc->nombre,"0");
				strcpy(pc->apellido,"0");
				pc->telefono=0;
				strcpy(pc->dir.calle,"0");
				pc->dir.numportal=0;
				pc->dir.piso=0;
				pc->pob.codpostal=0;
				strcpy(pc->pob.nombrepoblacion,"0");
				strcpy(pc->pob.provincia,"0");
				pc->cantcompras=0;
				printf ("Eliminado!\n Pulse intro para continuar");
				getch();
				menuprincipal(pc);
			}
			if ((confir=='n') || (confir=='N'))
			{
				menuprincipal(pc);
			}
		}
}
/*
void eliminarempleado()
{
	int id;
	int val;
	char confir;

	do
	{
	system("cls");
	printf ("Que ID quieres eliminar?\n");
	scanf ("%d",&id);
	

	if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
	}while (val=0);


	if ((id>=1) && (id<=999))
		{
			if (e[id].id==0)
			{
				printf ("Este empleado no existe!");
				getch();
				menuempleado();
			}
			else
				val=1;
		}
	

	
	if (val==1)
		{
			
			printf ("ID: E-%d\n",e[id].id);
			printf ("DNI: %s\n",e[id].dni);
			printf ("Nombre: %s\n",e[id].nombre);
			printf ("Apellido: %s\n",e[id].apellido);
			printf ("Telefono: %i\n",e[id].telefono);
			printf ("Direccion: %s\n",e[id].dir.calle);
			printf ("Nombre de poblacion: %s\n",e[id].pob.nombrepoblacion);
			printf ("Nombre de provincia: %s\n",e[id].pob.provincia);
			printf ("Numero de codigo postal: %d\n",e[id].pob.codpostal);
			printf ("Numero de portal: %d\n",e[id].dir.numportal);
			printf ("Numero de piso: %d\n",e[id].dir.piso);
			
		
			do
				{
				printf ("\nEstas seguro que quieres eliminar este empleado? S o N");
				scanf ("%c",&confir);
				}while ((confir!='S') && (confir!='N') && (confir!='s') && (confir!='n'));

			if ((confir=='s') || (confir=='S'))
			{
				e[id].id=0;
				strcpy(e[id].dni,"0");
				strcpy(e[id].nombre,"0");
				strcpy(e[id].apellido,"0");
				e[id].telefono=0;
				strcpy(e[id].dir.calle,"0");
				e[id].dir.numportal=0;
				e[id].dir.piso=0;
				e[id].pob.codpostal=0;
				strcpy(e[id].pob.nombrepoblacion,"0");
				strcpy(e[id].pob.provincia,"0");
				printf ("Eliminado!\n Pulse intro para continuar");
				getch();
				menuprincipal();
			}
			if ((confir=='n') || (confir=='N'))
			{
				menuprincipal();
			}
		}
}




void eliminarproducto()
{
int id;
	int val;
	char confir;

	do
	{
	system("cls");
	printf ("Que ID quieres eliminar?\n");
	scanf ("%d",&id);
	

	if ((id<1) || (id>999))
		{
			printf ("El numero de id no es valido!");
			getch();
			val=0;
		}
	}while (val=0);




	if ((id>=1) && (id<=999))
		{
			if (p[id].id==0)
			{
				printf ("Este producto no existe!");
				getch();
				menuproductos();
			}
			else
				val=1;
		}

	if (val==1)
		{
			
			printf ("ID: P-%d\n",p[id].id);
			printf ("Nombre: %s\n",p[id].nombre);
			printf ("Descripcion: %s\n",p[id].descripcion);
			printf ("Precio: %2f\n",p[id].precio);
			printf ("Stock: %i\n",p[id].cantidad);
		}

				do
				{
				printf ("\nEstas seguro que quieres eliminar este producto? S o N");
				scanf ("%c",&confir);
				}while ((confir!='S') && (confir!='N') && (confir!='s') && (confir!='n'));

			if ((confir=='s') || (confir=='S'))
			{
				p[id].id=0;
				strcpy(p[id].nombre,"0");
				strcpy(p[id].descripcion,"0");
				p[id].precio=0.0;
				p[id].cantidad=0;
				printf ("Eliminado!\n Pulse intro para continuar");
				getch();
				menuprincipal();
			}
			if ((confir=='n') || (confir=='N'))
			{
				menuprincipal();
			}
}


*/
int dniesvalido(char dni[11],cli *cp)
{
	int inc=0;
	char *p;
	p=dni;


	if (strlen(dni)-1!=8)
	{
		printf ("El DNI tiene que tener 8 digitos!");
		getch();
		inc=1;
		return(0);
	}

	/*Metodo 2 con puntero*/
	do
	{
		if ((atoi(dni)==0) && (inc==0))
		{
			if (*p=="-" || (isalpha(*p)==0))
			{
			printf ("Los primeros 8 numeros del DNI incluye un caracter invalido!");
			getch();
			inc=1;
			return(0);
			}
		}
		p++;
		
	}while((p!="\0") && (inc==0));

	if (isalpha(dni[10])==0)
	{
		printf ("El DNI incluye una letra invalida!");
		getch();
		inc=1;
		return(0);
	}

	if (inc!=1)
	{
		return(1);
	}

}

menus.h

#include "funciones.h"

void menuprincipal(cli *);
void menucliente(cli *);
//void menuproductos();
//void menuempleado();



/* Localizado en funciones.h */
//void inicializar ();
//void confirmarcliente();
void insertarcliente(cli *);
//void insertarempleado();
void mostrarcliente(cli *);

//void menubuscar();
//void menubuscarp();


/*

void menuempleado()
{
	/*Menu principal del empleado*/
/*	int opc;
	
		do
		{
			system("cls");
			printf ("Menu Empleado: \n");
			printf ("1 - Eliminar \n");
			printf ("2 - Buscar \n");
			printf ("3 - Modificar Empleado \n");
			printf ("4 - Insertar Empleado \n");
			printf ("5 - Mostrar Tabla \n");
			printf ("6 - Salir al Menu Principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>6) ); 

			switch(opc)
		{
				case 1:
					eliminarempleado();
					break;

				case 2:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuempleado();
					break;

				case 3:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuempleado(); 
					break;

				case 4:
					insertarempleado();
					break;

				case 5:
					mostrarempleado(); 
					break;

				case 6:
					menuprincipal();
					break;
		}
}
*/
void menucliente(cli *pc)
{
	/*Menu principal del cliente*/
	int opc;


		do
		{
			system("cls");
			printf ("Menu Cliente: \n");
			printf ("1 - Eliminar \n");
			printf ("2 - Buscar \n");
			printf ("3 - Modificar Cliente \n");
			printf ("4 - Insertar Cliente \n");
			printf ("5 - Mostrar Tabla \n");
			printf ("6 - Salir al Menu Principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>6)); 

			switch(opc)
		{
				case 1:
					system("cls");
					printf ("Indisponible...");
					getch();
					menucliente(*pc);
				break;

				case 2:
					system("cls");
					printf ("Indisponible...");
					getch();
					menucliente(*pc);
				break;

				case 3:
					system("cls");
					printf ("Indisponible...");
					getch();
					menucliente(*pc);
				break;

				case 4:
					insertarcliente(*pc); 
					break; 

				case 5:
					mostrarcliente(*pc);
					break; 

				case 6:
					menuprincipal(*pc);
					break;
		}
}

/*void menuproductos()
{
	/* Menu de productos */
/*	int opc;
		do
		{
			system("cls");
			printf ("Menu Productos: \n");
			printf ("1 - Eliminar \n");
			printf ("2 - Buscar \n");
			printf ("3 - Modificar Producto \n");
			printf ("4 - Insertar Producto \n");
			printf ("5 - Mostrar Tabla \n");
			printf ("6 - Salir al Menu Principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>6)); 
			switch(opc)
		{
				case 1:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuproductos();
					break; 

				case 2:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuproductos();
					break;

				case 3:
					system("cls");
					printf ("Indisponible...");
					getch();
					menuproductos();
					break; 

				case 4:
					insertarproducto();
					break; 

				case 5:
					mostrarproducto();
					break; 

				case 6:
					menuprincipal(cli pc);
					break;
		}

}



void menubuscar()
{
	int opc;
		do
		{
			system("cls");
			printf ("Buscar por: \n");
			printf ("1 - Por ID \n");
			printf ("2 - Por nombre y apellido \n");
			printf ("3 - Salir al menu principal \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>3)); 

		switch(opc)
		{
			case 1:
			system("cls");
			printf ("Indisponible...");
			getch();
			menuprincipal(cli pc);
			break;

			case 2:
			system("cls");
			printf ("Indisponible...");
			getch();
			menuprincipal(cli pc); 
			break; 

			case 3:
			menuprincipal(cli pc);
			break;
		}
}

void menubuscarp()
{
	int opc;
		do
		{
			system("cls");
			printf ("Buscar por: \n");
			printf ("1 - Por Codigo \n");
			printf ("2 - Salir al menu principal \n");
			scanf ("%d",&opc);
		} while ((opc!=1) && (opc!=2)); 

		switch(opc)
		{
			case 1:
			system("cls");
			printf ("Indisponible...");
			getch();
			menuprincipal(cli pc); 
			break;

			case 2:
			menuprincipal(cli pc);
			break;
		}
	
}
*/
void menuprincipal(cli *pc)
{
	/* Esto es el menu principial del programa, el primer menu  al abrir el programa */

	int opc;

		do
		{
			system("cls");
			printf ("Hola! \n Bienvenidos a Deportes Rapidin! \n Menu principal: \n");
			printf ("1 - Empleado \n");
			printf ("2 - Cliente \n");
			printf ("3 - Producto \n");
			printf ("4 - Realizar Compra \n");
			printf ("5 - Salir \n");
			scanf ("%d",&opc);
		} while ((opc<1) || (opc>5)); 

		switch(opc)
		{
				case 1:
				//menuempleado();
				break;

				case 2:
				menucliente(*pc);
				break;

				case 3:
				//menuproductos();
				break;

				case 4:
				system("cls");
				printf ("Indisponible...");
				getch();
				//menuprincipal(); 
				break;

				case 5:
				exit(1);
				//guardarenfichero();
		}


}

Now the errors are the following:

Error 8 error C2371: 'inicializar' : redefinition; different basic types h:\***\funciones.h 141
Error 12 error C2084: function 'void inicializarporarchivo(cli *)' already has a body h:\***\funciones.h 13
Error 15 error C2371: 'inicializar' : redefinition; different basic types h:\***\funciones.h 141
Error 16 error C2084: function 'void insertarcliente(cli *)' already has a body h:\***\funciones.h 235
Error 19 error C2084: function 'void mostrarcliente(cli *)' already has a body h:\***\funciones.h 485
Error 20 error C2084: function 'void eliminarcliente(cli *)' already has a body h:\***\funciones.h 588
Error 21 error C2084: function 'int dniesvalido(char *,cli *)' already has a body h:\***\funciones.h 828
Error 23 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 100
Error 25 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 107
Error 27 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 114
Error 29 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 118
Error 31 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 122
Error 33 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 126
Error 35 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\menus.h 275
Error 37 error C2275: 'c' : illegal use of this type as an expression h:\***\main.c 54
Error 38 error C2275: 'p' : illegal use of this type as an expression h:\***\main.c 55
Error 39 error C2275: 'e' : illegal use of this type as an expression h:\***\main.c 56
Error 40 error C2440: 'function' : cannot convert from 'cli' to 'cli *' h:\***\main.c 74


Ive tried passing the pointers every single possible way and still more and more errors popup. Ive given up. If someone could lend me a hand, thank you very much.

2
Contributors
3
Replies
4
Views
9 Years
Discussion Span
Last Post by Ancient Dragon
0

You don't put the function implementation code in *.h files then include the header file in two or more *.c files, or include it more than once in the same *.c file. That is what is causing the duplicate declaration errors. Put only the function prototypes in the header files and the implementation code in one *.c file, then link all object files that your compiler produced from the *.c files together to create the executable program.

0

I searched but I can't find where I redeclare my .h files in .c more than once...Ive looked several times but just can't see it.

0

The best way to prevent that problem is by using code guards in header files. Most header files suppied by compilers include them

// *.h

#ifndef _MYHEADER_H
#define _MYHEADER_H

// headef file stuff goes here

#endif // end of coode guard

The above only prevents header files being included in the same *.c file more than once. If you include your header file in two or more *.c files then attempt to link them you will get duplicate function declarations because of the reason I stated previously.

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.