hola mil disculpas bueno el codigo q tengo es este:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#define MAXSTR 0xFF
using namespace std;
typedef struct ClaseAlumno {
int matricula;
char* nombre;
} Alumno;
int comparar_alumno (const void *alumno1, const void *alumno2);
void imprimir_alumno (Alumno *alumno);
Alumno* agregar_alumno (Alumno *alumnos, Alumno *alumno, int *n);
char* leer_linea (const char *mensaje);
char* leer_cadena (const char *mensaje, char *cadena);
int leer_entero (const char *mensaje, int menor, int mayor);
float leer_real (const char *mensaje);
char leer_caracter (const char *mensaje);
int leer_campo (FILE *archivo, char *cadena);
int main ()
{
Alumno alumno, *alumnos = NULL, *p;
int opcion, n=0, i;
char cadena[MAXSTR], *ruta = "D:\\alumnos.txt";
FILE *archivo;
archivo = fopen (ruta, "r");
if (archivo!=NULL)
{
while (leer_campo (archivo, cadena))
{
alumno.matricula = atoi (cadena);
leer_campo (archivo, cadena);
alumno.nombre = strdup (cadena);
alumnos = agregar_alumno (alumnos, &alumno, &n);
}
fclose (archivo);
}
do {
system ("cls");
cout<<endl
<<"MENU"<<endl
<<"1.- Nuevo"<<endl
<<"2.- Salir"<<endl
<<endl;
opcion = leer_entero ("Seleccione una opcion: ", 1, 2);
if (opcion < 2)
{
alumno.matricula = leer_entero ("Ingrese el matricula del alumno: ", 0, INT_MAX);
p = n==0? NULL: (Alumno*) bsearch (&alumno, alumnos, n, sizeof (Alumno), comparar_alumno);
if (p!=NULL)
imprimir_alumno (p);
}
if (p!=NULL && opcion==1)
cout<<"El alumno ya existe"<<endl;
else if (p==NULL && opcion>=2 && opcion<=1)
cout<<"Alumno no encontrado"<<endl;
else switch (opcion)
{
case 1:
alumno.nombre = leer_linea ("Ingrese el nombre: ");
alumnos = agregar_alumno (alumnos, &alumno, &n);
cout<<"Registro agregado correctamente"<<endl;
break;
}
if (opcion<2 && opcion>=1)
{
system ("pause");
}
} while (opcion!=2);
archivo = fopen (ruta, "w");
if (archivo!=NULL)
{
for (i=0; i<n; i++)
fprintf (archivo, "%d,%s\n", alumnos[i].matricula, alumnos[i].nombre);
fclose (archivo);
}
return EXIT_SUCCESS;
}
int comparar_alumno (const void *alumno1, const void *alumno2)
{
return ((Alumno*)alumno1)->matricula - ((Alumno*)alumno2)->matricula;
}
void imprimir_alumno (Alumno *alumno)
{
printf ("matricula: %d\n", alumno->matricula);
printf ("nombre : %s\n", alumno->nombre);
}
Alumno* agregar_alumno (Alumno *alumnos, Alumno *alumno, int *n)
{
*n = *n + 1;
alumnos = (Alumno*) realloc (alumnos, sizeof (Alumno)*(*n));
memcpy (&alumnos[(*n)-1], alumno, sizeof (Alumno));
qsort (alumnos, *n, sizeof (Alumno), comparar_alumno);
return alumnos;
}
char *leer_linea (const char *mensaje)
{
char linea[MAXSTR];
leer_cadena (mensaje, linea);
return strdup (linea);
}
char* leer_cadena (const char *mensaje, char *cadena)
{
char *salto;
cout<<mensaje;
fgets (cadena, MAXSTR, stdin);
salto = strchr (cadena, '\n');
if (salto!=NULL)
*salto = '\0';
return cadena;
}
int leer_entero (const char *mensaje, int menor, int mayor)
{
int valor;
do {
valor = (int) leer_real (mensaje);
if (valor<menor || valor>mayor)
cout<<"Numero no valido"<<endl;
} while (valor<menor || valor>mayor);
return valor;
}
float leer_real (const char *mensaje)
{
char cadena[MAXSTR];
leer_cadena (mensaje, cadena);
return atof (cadena);
}
char leer_caracter (const char *mensaje)
{
char linea[MAXSTR];
leer_cadena (mensaje, linea);
return linea[0];
}
int leer_campo (FILE *archivo, char *cadena)
{
fscanf (archivo, "%[^,\n\r]", cadena);
if (feof (archivo))
return 0;
fgetc (archivo);
return 1;
}
es un trabajo el cual me piden explicar todo el codigo hay cosas q entiendo como otras q no haber si me dan una mano ixplicando algunas partes.
hay posibilidad de que este codigo se redusca a mas y solo usando el cout o q sea mas orientado a C++
PD: sobre los menus me faltan añadir las demas opciones q son 6 ejem: editar busqueda el codigo lo hace solo q lo qite para poder probar algunas cosas
gracias de antemano
saludos