You are on page 1of 4

#include <stdio.

h>
#include <stdlib.h>
#include <string.h>

struct nodo
{
int edad;
char nombre[20];
struct nodo * ste;
};

struct celda
{
char materia[20];
struct nodo * lista;
};

int agregar(struct celda arreglo[30], int cant, struct celda nueva)
{
arreglo[cant]=nueva;
cant++;
return cant;
}

struct nodo * crearnodo(int edad, char nombre[20])
{
struct nodo * aux = (struct nodo*)malloc(sizeof(struct nodo));
aux->edad = edad;
strcpy(aux->nombre, nombre);
aux->ste = NULL;
return aux;
}

int existe(struct celda arreglo[100], int cant, char materia[20])
{
int rta = -1;
int i = 0;
while (i<cant && rta == -1)
{
if (arreglo[i].materia == materia)
{
rta = i;
}
i++;
}
return rta;
}

int posicion(struct celda arreglo[100], int cant, char materia[20])
{
int pos;
int i=0;
while (i<cant)
{
if (arreglo[i].materia == materia)
{
pos=i;
}
i++;
}
return pos;
}

/*void pedirdatos()
{
int edad;
char materia[20];
char nombre[20];
system("cls");
printf("\nIngrese MATERIA: ");
scanf("%s", materia);
fflush(stdin);
printf("\nIngrese NOMBRE DEL ALUMNO: ");
scanf("%s", nombre);
fflush(stdin);
printf("\nIngrese EDAD: ");
scanf("%d", &edad);
fflush(stdin);
}*/

struct nodo * agregarppio(struct celda arreglo[30], struct nodo * aux, int i)
{
if(arreglo[i].lista == NULL)
{
arreglo[i].lista = aux;
}
else
{
aux->ste = arreglo[i].lista;
arreglo[i].lista = aux;
}
return arreglo[i].lista;
}

int agregartodo(struct celda arreglo[30],int cant, char materia[20], int edad,
char nombre[20])
{
struct nodo *aux = crearnodo(edad,nombre);
int i = existe(arreglo, cant, materia);
if (i == -1)
{
struct celda una;
strcpy(una.materia,materia);
una.lista=NULL;
cant = agregar(arreglo, cant, una);
i = 1-cant;
}
arreglo[i].lista = agregarppio(arreglo,aux,i);
return cant;
}

void mostrarnodo(struct nodo * aux)
{
printf("\nNOMBRE: %s", aux->nombre);
printf("\nEDAD: %d", aux->edad);
}

void mostrartodo(struct celda arreglo[30], int cant, char materia[20])
{
int i = posicion(arreglo,cant,materia);

struct nodo * seg = arreglo[i].lista;
while (seg != NULL)
{
mostrarnodo(seg);
seg= seg->ste;
}
}

int main()
{
struct celda arreglo[30];
int cant = 0;
int op;
int edad;
char materia[20];
char nombre[20];
char cont='s';

do
{
printf("\n\n----MENU----");
printf("\n1: Agregar persona");
printf("\n2: Mostrar materia");
printf("\n3: Salir");
printf("\nSu opcion es:");
scanf("%d", &op);
fflush(stdin);

switch(op)
{
case 1: while (cont == 's')
{
system("cls");
printf("\nIngrese MATERIA: ");
scanf("%s", materia);
fflush(stdin);
printf("\nIngrese NOMBRE DEL ALUMNO: ");
scanf("%s", nombre);
fflush(stdin);
printf("\nIngrese EDAD: ");
scanf("%d", &edad);
fflush(stdin);
agregartodo(arreglo,cant,materia,edad,nombre);
printf("\n\nPresione s para continuar");
cont = getch();
}
break;

case 2: system("cls");
printf("Ingrese MATERIA que desea ver: ");
scanf("%s", materia);
mostrartodo(arreglo,cant,materia);
break;
}
} while (op != 3);

return 0;
}