Ver Mensaje Individual
  #2 (permalink)  
Antiguo 09/05/2006, 14:00
Avatar de yournightmare86
yournightmare86
 
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 875
Antigüedad: 18 años, 1 mes
Puntos: 9
Otra tentativa fallida ha sido...
/*struct dentro de un struct.*/

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define N 100

struct fnac
{
int dia;
int mes;
int anyo;
}

struct estruct_tpersonas
{
char nombre[80];
char apellido[80];
struct fnac;
}tpersonas;

/*Prototipos de las funciones.*/

int introducenumpersonas(void);
int menu(void);
tpersonas* asignamemoria(int);
struct fnac* asignamemoria2(int);
int lee(tpersonas*,struct fnac*,int);
int visualiza(tpersonas*,struct fnac*,int);
int liberamemoria(tpersonas*,struct fnac*);

main()
{
int npersonas,op,i=0;
tpersonas *personas;
struct fnac *personas2;
while((op=menu())!=5)
{
switch(op)
{
case 1: introducenumpersonas();
break;

case 2: personas=asignamemoria(npersonas);
if(personas==NULL) return -1;
personas2=asignamemoria2(npersonas);
if(personas2==NULL) return -1;
break;

case 3: while(i<npersonas)
{
i=lee(personas,personas2,i);
}
break;

case 4: clrscr();
visualiza(personas,personas2,npersonas);
break;
}
}
liberamemoria(personas,personas2);
getch();
}

int menu()
{
int op;
do{
printf("\n\t\t 1.Introducir numero de personas.");
printf("\n\t\t 2.Asignar memoria.");
printf("\n\t\t 3.Entrada de datos.");
printf("\n\t\t 4.Visualizar datos.");
printf("\n\t\t 5.Salir.");
printf("\n\t Seleccione opcion: ");
scanf("%d",&op);
}while(op<1 || op>5);
return op;
}

int numpersonas(void)
{
int ok,np;
do{
clrscr();
printf("\n Introduce numero de personas: ");
ok=scanf("%d",&np);
}while((!ok) || (np<=0));
return np;
}

tpersonas * asignamemoria(int np)
{
tpersonas * q;
q=(tpersonas*)malloc(np*sizeof(tpersonas));
if(q==NULL) return NULL;
return q;
}

struct fnac * asignamemoria2(int np)
{
struct fnac * w;
w=(struct fnac*)malloc(np*sizeof(struct fnac));
if(w==NULL) return NULL;
return w;
}

int lee(tpersonas *p,struct fnac *p2,int n) //n equivale al i del main
{
char sn[1];
do{
clrscr();
printf("\n Persona %d.",n+1);
printf("\n\t Nombre: "); gets(p[n].nombre);
printf("\n\t Apellido: "); gets(p[n].apellido);
printf("\n\t Fecha de nacimiento: ");
printf("\n\t\t Dia: "); scanf("%d",&p[n].p2[n].dia);
printf("\n\t\t Mes: "); scanf("%d",&p[n].p2[n].mes);
printf("\n\t\t Anyo: "); scanf("%d",&p[n].p2[n].anyo);
printf("\n Datos correctos(s/n)? ");
scanf("%s",&sn);
}while((sn[0]!='s') || (sn[0]!='S'));
return n+1;
}

int visualiza(tpersonas *p,struct fnac *p2,int np)
{
int i;
for(i=0;i<np;i++)
{
clrscr();
printf("\n Persona %d."i+1);
printf("\n Nombre: "); puts(p[i].nombre);
printf("\n Apellido: "); puts(p[i].apellido);
printf("\n Fecha de nacimiento: ");
printf("\n\t Dia: %d",p[i].p2[i].dia);
printf("\n\t Mes: %d",p[i].p2[i].mes);
printf("\n\t Anyo: %d",p[i].p2[i].anyo);
getch();
}
return 0;
}

int liberamemoria(tpersonas *p,struct fnac *p2)
{
free(p);
free(p2);
return 0;
}