Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*******************************************************************************
- CONSIGNA:
- Genere una aplicación que permita ingresar una lista alumnos, cuya cantidad de alumnos debe ser ingresada por el usuario.
- La aplicación debe permitir mediante un menú de opciones, mostrar la estructura según su fecha de inscripción,
- o según su orden de carga o alfabéticamente de acuerdo al nombre del alumno.
- Es de interés registrar la siguiente información de cada alumno: su dni, su nombre y su fecha de inscripción.
- La fecha de inscripción como es de amplio conocimiento esta formada por sus 3 componentes enteres día, mes y año.
- Nota: Utilice vectores dinámicos de estructuras para gestionar las inscripciones, y una estructura para modelar la fecha.
- Utilice qsort para ordenar los datos.
- *******************************************************************************/
- #include <stdio.h>
- #include <stdlib.h>
- // Maximos caracteres para el nombre
- #define MAX_NAME_SIZE 70
- // Constantes del menú
- #define MENU_ORDEN_FECHA 1
- #define MENU_ORDEN_CARGA 2
- #define MENU_ORDEN_ALFAB 3
- #define MENU_ORDEN_DNI 4
- #define MENU_CARGAR_DATOS 5
- #define MENU_SALIR 6
- // Constantes generales
- #define TRUE 1
- #define FALSE 0
- // Definición de estructuras
- typedef struct
- {
- unsigned int day,
- month,
- year;
- } fecha; // Día/mes/año de inscripción del alumno.
- typedef struct
- {
- unsigned short key; // Key de ordenamiento
- unsigned long int dni; // DNI del alumno
- char name[MAX_NAME_SIZE]; // Nombre del alumno
- fecha fecha_ins;
- } person;
- // Funciones
- int cmp_key(const void *e1, const void *e2); // Orden de carga
- int cmp_dni(const void *e1, const void *e2); // Orden DNI
- int cmp_fecha(const void *e1, const void *e2); // Orden fecha
- int cmp_alfab(const void *e1, const void *e2); // Orden alfab
- void mostrar_alumnos(person *v, unsigned int size); // Mostrar vector
- int main(int argc, char *argv[])
- {
- // Variables
- unsigned int cant_alumnos, aux_cant_alumnos;
- unsigned int i;
- unsigned int opc;
- unsigned short flag_salir;
- // Estructura
- person *alumnos;
- // Inicio del programa
- printf("Lista de Alumnos:\n-----------------\n");
- printf("Cantidad de alumnos que desea ingresar: ");
- // Cantidad de alumnos a ingresar
- scanf("%u", &cant_alumnos);
- // Warning (1) - Cantidad de alumnos no válida
- while(cant_alumnos < 1)
- {
- printf("\nWARNING: La cantidad de alumnos no es valida!\n--------\nIngrese la cantidad de alumnos (mayor a 0): ");
- scanf("%u", &cant_alumnos);
- }
- // Vector dinámico
- alumnos = (person *)calloc(cant_alumnos, sizeof(person));
- if(alumnos == NULL)
- {
- // Warning (2) - No hay espacio en la memoria
- printf("\nWARNING: No hay suficiente espacio en la memoria.\n");
- system("PAUSE");
- return -1;
- }
- // Proceso de carga
- for(i = 0; i < cant_alumnos; i++)
- {
- system("CLS");
- alumnos[i].key = i;
- printf("Alumno %u:\n-----------------\n", i);
- printf("DNI: ");
- scanf("%u", &alumnos[i].dni);
- printf("Nombre: ");
- fflush(stdin);
- fgets(alumnos[i].name, MAX_NAME_SIZE, stdin);
- printf("Fecha de inscripcion:\n");
- printf("DD: ");
- scanf("%u", &alumnos[i].fecha_ins.day);
- printf("MM: ");
- scanf("%u", &alumnos[i].fecha_ins.month);
- printf("AAAA: ");
- scanf("%u", &alumnos[i].fecha_ins.year);
- }
- system("CLS");
- // Mostrar datos cargados
- printf("Datos cargados:\n---------------\n");
- mostrar_alumnos(alumnos, cant_alumnos);
- system("PAUSE");
- // Mostrar menu inicial y ordenamiento
- system("CLS");
- do
- {
- system("CLS");
- printf("MENU:\n-----\n\n");
- printf("\t%u- Mostrar datos ordenados segun fecha de inscripcion.\n", MENU_ORDEN_FECHA);
- printf("\t%u- Mostrar datos ordenados segun orden de carga.\n", MENU_ORDEN_CARGA);
- printf("\t%u- Mostrar datos ordenados alfabeticamente.\n", MENU_ORDEN_ALFAB);
- printf("\t%u- Mostrar datos ordenados segun DNI.\n", MENU_ORDEN_DNI);
- printf("\t%u- Cargar mas datos.\n", MENU_CARGAR_DATOS);
- printf("\t%u- Salir.\n\n", MENU_SALIR);
- flag_salir = FALSE;
- printf("Opcion elegida: ");
- scanf("%u", &opc);
- switch(opc)
- {
- case MENU_ORDEN_FECHA: // Ordenamiento por fecha
- {
- system("CLS");
- printf("Ordenamiento de datos por fecha:\n--------------------------------\n");
- qsort(alumnos, cant_alumnos, sizeof(person), cmp_fecha);
- mostrar_alumnos(alumnos, cant_alumnos);
- system("PAUSE");
- break;
- }
- case MENU_ORDEN_CARGA: // Ordenamiento original
- {
- system("CLS");
- printf("Ordenamiento dado por la carga original de datos:\n-------------------------------------------------\n");
- qsort(alumnos, cant_alumnos, sizeof(person), cmp_key);
- mostrar_alumnos(alumnos, cant_alumnos);
- system("PAUSE");
- break;
- }
- case MENU_ORDEN_ALFAB: // Ordenamiento alfabetico
- {
- system("CLS");
- printf("Ordenamiento por orden alfebetico:\n-----------------------------------\n");
- qsort(alumnos, cant_alumnos, sizeof(person), cmp_alfab);
- mostrar_alumnos(alumnos, cant_alumnos);
- system("PAUSE");
- break;
- }
- case MENU_ORDEN_DNI: // Ordenamiento por DNI
- {
- system("CLS");
- printf("Ordenamiento dado por DNI:\n--------------------------\n");
- qsort(alumnos, cant_alumnos, sizeof(person), cmp_dni);
- mostrar_alumnos(alumnos, cant_alumnos);
- system("PAUSE");
- break;
- }
- case MENU_CARGAR_DATOS: // Cargar más datos
- {
- printf("\nIngrese la cantidad de datos nuevos que desea agregar: ");
- aux_cant_alumnos = cant_alumnos;
- scanf("%u", &cant_alumnos);
- cant_alumnos += aux_cant_alumnos;
- alumnos = (person *)realloc(alumnos, cant_alumnos*sizeof(person));
- for(i = aux_cant_alumnos; i < cant_alumnos; i++)
- {
- system("CLS");
- alumnos[i].key = i;
- printf("Alumno %u:\n-----------------\n", i);
- printf("DNI: ");
- scanf("%u", &alumnos[i].dni);
- printf("Nombre: ");
- fflush(stdin);
- fgets(alumnos[i].name, MAX_NAME_SIZE, stdin);
- printf("Fecha de inscripcion:\n");
- printf("DD: ");
- scanf("%u", &alumnos[i].fecha_ins.day);
- printf("MM: ");
- scanf("%u", &alumnos[i].fecha_ins.month);
- printf("AAAA: ");
- scanf("%u", &alumnos[i].fecha_ins.year);
- }
- mostrar_alumnos(alumnos, cant_alumnos);
- system("PAUSE");
- break;
- }
- case MENU_SALIR: // Salir
- {
- flag_salir = TRUE;
- break;
- }
- }
- }
- while(!flag_salir);
- system("CLS");
- free((void *)alumnos);
- printf("La ejecuccion ha terminado exitosamente. Presione una tecla para continuar.\n");
- system("PAUSE>NULL");
- return 0;
- }
- // Orden KEY
- int cmp_key(const void *e1, const void *e2)
- {
- person * aux_e1 = (person *)e1;
- person * aux_e2 = (person *)e2;
- return (aux_e1->key) - (aux_e2->key);
- }
- // Orden DNI
- int cmp_dni(const void *e1, const void *e2)
- {
- person * aux_e1 = (person *)e1;
- person * aux_e2 = (person *)e2;
- return (aux_e1->dni) - (aux_e2->dni);
- }
- // Orden FECHA
- int cmp_fecha(const void *e1, const void *e2)
- {
- long int f1, f2;
- person * aux_e1 = (person *)e1;
- person * aux_e2 = (person *)e2;
- f1 = aux_e1->fecha_ins.year*1000 + aux_e1->fecha_ins.month*100 + aux_e1->fecha_ins.day;
- f2 = aux_e2->fecha_ins.year*1000 + aux_e2->fecha_ins.month*100 + aux_e2->fecha_ins.day;
- return f1 - f2;
- }
- // Orden ALFABETICO
- int cmp_alfab(const void *e1, const void *e2)
- {
- person * aux_e1 = (person *)e1;
- person * aux_e2 = (person *)e2;
- return (strcmp(aux_e1->name, aux_e2->name));
- }
- // Mostrar alumnos
- void mostrar_alumnos(person *v, unsigned int size)
- {
- int i;
- for(i = 0; i < size; i++)
- {
- printf("Alumno %u: ", v[i].key);
- printf("DNI: %u | Fecha: %u\\%u\\%u | Nombre: %s\n", v[i].dni, v[i].fecha_ins.day, v[i].fecha_ins.month, v[i].fecha_ins.year, v[i].name);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment