Como hacer una agenda en programación C que contenga :nombre, e-mail y materia y que tenga la opción de búsqueda por materia.

Problema a resolver: La maestra de Fundamentos de Programación desea tener un directorio de sus alumnos, donde pueda guardar la siguiente información: nombre, correo electrónico, semestre que cursan y materia que está cursando actualmente. El programa debe permitir almacenar al menos 10 alumnos con sus respectivos datos y poder realizar la búsqueda por materia y mostrar como resultado los datos restantes.

1 Respuesta

Respuesta
1

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

#define M 11

typedef struct
{
char* nombre[M];
char* clases[M];
char* semestre[M];
char* correo[M];
}registro;

void registroalumnos(registro*a);
void registroclases(registro*a);
void registrosemestre(registro*a);
void registrocorreo(registro*a);

int main()
{
int i,n,j,p,aux,o=1;
char buffer[15],*clases;

registro datos;
while (o==1)
{system("cls");
printf("1.registrar alumnos 2.buscar 3.salir\n" );
printf("Digite una opcion\n");
scanf("%d",&p);
switch(p)
{
system("cls");
case 1:
registroalumnos(&datos);
registroclases(&datos);
registrosemestre(&datos);
registrocorreo(&datos);
system("cls");
getch();
break;

case 2:

printf("Ingrese el nombre a buscar : \n",i); fflush(stdin);gets(buffer);
for(i=1;i<M;i++)
{
if(!strcmp(datos.clases[i],buffer))
{

printf("\n Nombre de alumno %d : %s",i,datos.nombre[i]);

printf("\n materia que cursa : %s",datos.clases[i]);

printf("\n semestre actual: %s",datos.semestre[i]);

printf("\n Direccion de email : %s",datos.correo[i]);

printf("\n \n ");
}
}

getch();

break;
case 3:
o=0;
break;
default:
printf("\n La opcion no es valida");
break;
}
}
system("cls");

system("pause");

return 0;
}

void registroalumnos(registro*a)
{
char buffer[50],*auxiliar;
int i=1,j;
while (i<M)
{

printf("Ingrese el nombre del alumno %d: \n",i); fflush(stdin);gets(buffer);

auxiliar=(char*)malloc(sizeof (buffer));
if (auxiliar==NULL)
{
printf("Error No hay memoria suficiente en el sistema\n");
}

strcpy(auxiliar,buffer);
a->nombre[i]=auxiliar;
i++;
}
}

void registroclases(registro*a)
{
char buffer[50],*auxiliar;
int i=1,j;
while (i<M)
{

printf("Ingrese la materia del alumno %d: \n",i); fflush(stdin);gets(buffer);

auxiliar=(char*)malloc(sizeof (buffer));
if (auxiliar==NULL)
{
printf("Error No hay memoria suficiente en el sistema\n");
}

strcpy(auxiliar,buffer);
a->clases[i]=auxiliar;
i++;
}
}

void registrosemestre(registro*a)
{
char buffer[50],*auxiliar;
int i=1,j;
while (i<M)
{

printf("Ingrese el semestre que cursa el alumno %d: \n",i); fflush(stdin);gets(buffer);

auxiliar=(char*)malloc(sizeof (buffer));
if (auxiliar==NULL)
{
printf("Error No hay memoria suficiente en el sistema\n");
}

strcpy(auxiliar,buffer);
a->semestre[i]=auxiliar;
i++;
}
}

void registrocorreo(registro*a)
{
char buffer[50],*auxiliar;
int i=1,j;
while (i<M)
{

printf("Ingrese el email del alumno %d: \n",i); fflush(stdin);gets(buffer);

auxiliar=(char*)malloc(sizeof (buffer));
if (auxiliar==NULL)
{
printf("Error No hay memoria suficiente en el sistema\n");
}

strcpy(auxiliar,buffer);
a->correo[i]=auxiliar;
i++;
}
}

Buena noche mi buen amigo Aaron Daniel Carrillo torres, ya probé el programa enviado y no hace nada en la opción 2.Buscar. y ya avance en mi programa solo me falta como buscar por materia, ya que pude buscar variables enteras pero no entiendo como buscar caracteres.te envío mi programa en c ya realizado, pero buscando semestre y necesito buscar por cualquier materia.

sijala para encontrar por semestre con números, pero para buscar por materia no, te agradecería si me echaras la mano con eso. Gracias de todos modos por el programa enviado.

#include<stdio.h>

#include<stdlib.h>

#include<conio.h>

#include<string.h>

 

struct datos{

       char nombre[50];

       char e_mail[50];

       char materia[50];

       int semestre;

       }alumnos[5];

       void Capturar(){

            int indice;

            fflush(stdin);    

            for(indice=0;indice<5;indice++){

            printf("Ingresa el Nombre del Alumno#%d: ",(indice+1));

            gets(alumnos[indice].nombre);

            fflush(stdin);

            printf("Ingresa Correo Electronico del Alumno#%d:  ",(indice+1));

            scanf("%s",&alumnos[indice].e_mail);

            fflush(stdin);

            printf("Ingresa Materia que cursa el Alumno#%d:  ",(indice+1));

            scanf("%s",&alumnos[indice].materia);

            fflush(stdin);

            printf("Ingresa Semestre el alumno en numero#%d:  ",(indice+1));

            scanf("%d",&alumnos[indice].semestre);

            fflush(stdin);

            }

            }

       void MostrarTodos(){

            int indice;

            printf("Mostrando los datos de los alumnos\n");

            for (indice=0;indice<5;indice++){

            printf("________________________________________________________\n");

            printf("Alumno #%d\n",(indice+1));

            printf("Nombre: %s\n",alumnos[indice].nombre);

            printf("Correo Electronico: %s\n",alumnos[indice].e_mail);

            printf("Materia: %s\n",alumnos[indice].materia);

            printf("Semestre: %d\n",alumnos[indice].semestre);

            }

            }

       void Buscarsemestre(){

            int sem,indice,encontrado=0;

            printf("Ingresa el semstre a buscar: ");

            scanf("%d",&sem);

            for(indice=0;indice<5;indice++){

            if(alumnos[indice].semestre==sem){

            encontrado=1;

            printf("___________________________________________________________\n");

            printf("Alumno#%d\n",(indice+1));

            printf("Nombre: %s\n",alumnos[indice].nombre);

            printf("Correo Electronico: %s\n",alumnos[indice].e_mail);

            printf("Materia: %s\n",alumnos[indice].materia);

            printf("semestre: %d\n",alumnos[indice].semestre);

            }

      }

      if(encontrado==0){

            printf("No hay alumnos con ese semestre %d\n",sem);

            }

      }

       void salir(){

            printf("Programa Finalizado\n");

            }

       void menu(){

       int opcion;

       do{

           printf("Menu de Opciones\n");

           printf("1. Captura de Alumnos\n");

           printf("2. Mostrar todos los Alumnos\n");

           printf("3. Buscar alumno(s) por semestre\n");

           printf("4. Salir\n");

           printf("Selecciona una opcion: ");

           scanf("%d",&opcion);

           switch(opcion){

                  case 1:

                       Capturar();

                  break;

                  case 2:

                       MostrarTodos();

                  break;

                  case 3:

                       Buscarsemestre();

                  break;

                  case 4:

                       salir();

                  break;

                  default:

                  printf("Opcion Incorrecta\n");

                  }

                  }

Me parece raro que no haya funcionado la parte de buscar, puesto que lo he probado y ami me funciona en dos compiladores em turbo C y en dev c/c++

puedes usar la función strcmp (cadena1,cadena2==0)que sirve para comparar dos cadenas de caracteres en este caso :
Así quedaría la función para buscar las materias, te recomendaría que cambiaras los scanf por gets()

void Buscarsemestre(){

char materias[20];
int indice;

printf("Ingresa la materia a buscar : ");
fflush(stdin);gets(materias);

for(indice=0;indice<5;indice++)
{
if(!strcmp(alumnos[indice].materia,materias))
{

printf("___________________________________________________________\n");

printf("Alumno#%d\n",(indice+1));

printf("Nombre: %s\n",alumnos[indice].nombre);

printf("Correo Electronico: %s\n",alumnos[indice].e_mail);

printf("Materia: %s\n",alumnos[indice].materia);

printf("semestre: %d\n",alumnos[indice].semestre);

printf("\n \n ");
}

}

}

Otra recomendación seria que después de cada función limpiaras pantalla para que no se te acumulen el motón de mensajes innecesarios

Lo he probado muchas veces y si funciona en caso de que no te funcione puede ser por la versión de tu compilador

como puedes ver en el if(!strcmp(alumnos[indice].materia,materias))
Es que comparo la estructura donde tienes la materias ya introducidas con un arreglo en donde yo introduzco la materia a buscar suponiendo que dicha materia es "ciencias" entonces compara las dos cadenas de texto en caso de que sean iguales mostrara todos los alumnos que tengan esa materia en comun

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas