Taller #6
Taller #6
Taller #6
Taller #6
Autores: Juan David Roman - Sebastian Rivas Rubio
Fecha: 19/11/2023
*/
// Inclusion de librerias
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
#include <conio.h>
#include <windows.h>
// Macros
#define SONIDO "\7"
#define BEEP printf(SONIDO)
#define LIMPIAPANTALLA system("cls")
#define FONDOPANTALLA system("color F3")
#define PAUSA system("pause")
#define NDTO 100
#define ANIOACTUAL 2023
#define BISIESTO(Anio) (Anio % 4 == 0 && Anio % 100 != 0 || Anio % 400 == 0)
#define FINCADENA '\0'
#define SALTOLINEA(N) { for (int i = 0; i < N; i++) printf("\n"); }
#define ENTER 13
#define SPACE ''
typedef enum Meses {Enero = 1, Febrero, Marzo, Abril, Mayo, Junio, Julio, Agosto,
Septiembre, Octubre, Noviembre, Diciembre};
typedef enum Colores {Blanco=1, Negro, Plateado, Militar, Desconocido};
typedef enum TiposPropulsion {Convencional=1, Semielectrico, Propulsionnuclear,
SubDesconocido};
typedef enum OpcionesMenu{Agregar = 1, Imprimir, Estadisticas, Salir};
typedef enum TipoEntrada {Letras, Digitos, Todo};
// Definicion de estructuras
typedef struct Fecha {
usi Dia;
Meses Mes;
usi Anio;
};
Cadena[NroCarLeidos] = FINCADENA;
printf ("\n");
return NroCarLeidos;
}
switch (Mes) {
case Enero :
case Marzo :
case Mayo :
case Julio :
case Agosto :
case Octubre :
case Diciembre : DiaMax = 31;
break;
case Abril :
case Junio :
case Septiembre :
case Noviembre : DiaMax = 30;
break;
}
return DiaMax;
}
while (1) {
scanf("%f", &SumergibilidadValida);(fflush(stdin));
if (SumergibilidadValida > 0) return SumergibilidadValida;
BEEP;
printf(" *** AVISO: sumergibilidad no valida, debe de ser un valor mayor a 0
***");
printf("\n Sumergibilidad: ");
}
}
while (1) {
scanf("%d", &DormitoriosValido);(fflush(stdin));
if (DormitoriosValido > 0) return DormitoriosValido;
BEEP;
printf(" *** AVISO: dormitorios no valido, debe de ser un valor mayor a 0 ***");
printf("\n Dormitorios: ");
}
}
while (1) {
scanf("%d", &CapacidadValida);(fflush(stdin));
if (CapacidadValida > 0) return CapacidadValida;
BEEP;
printf("*** AVISO: capacidad de la tripulacion no valida, debe de ser un valor mayor a
0 ***");
printf("\nCapacidad de tripulacion: ");
}
}
while (1) {
scanf("%d", &TipoValido);(fflush(stdin));
if (TipoValido >= Blanco && TipoValido <= Desconocido) return
(TiposPropulsion)TipoValido;
BEEP;
printf(" *** AVISO: tipo de submarino no valido ***");
printf("\n Tipos de Propulsion:\n 1 - Convencional\n 2 - Semielectrico\n 3 -
Propulsion nuclear");
printf("\n Seleccione una opcion: ");
}
}
while(1) {
scanf("%u", &AnioValido);(fflush(stdin));
if (AnioValido <= ANIOACTUAL) return AnioValido;
BEEP;
printf(" *** AVISO: Anio no valido ***");
printf("\n Anio de creacion: ");
}
}
while(1) {
scanf("%u", &MesValido);(fflush(stdin));
if (MesValido >= Enero && MesValido <= Diciembre) return MesValido;
BEEP;
printf(" *** AVISO: Mes no valido ***");
printf("\n Mes de creacion: ");
}
}
while(1) {
scanf("%u", &DiaValido);(fflush(stdin));
if (DiaValido >= 1 && DiaValido <= DiaMaxMes(Anio, Mes)) return DiaValido;
BEEP;
printf(" *** Error: Dia invalido para el mes de %s ***", NomMes[Mes]);
printf("\n Dia de creacion: ");
}
}
while (1) {
scanf("%f", &PesoValido);(fflush(stdin));
if (PesoValido > 0) return PesoValido;
BEEP;
printf(" *** AVISO: peso no valido, debe de ser un valor mayor a 0
***");
printf("\n Peso: ");
}
}
BEEP;
printf(" *** AVISO: Color no valido ***");
printf("\n Colores:\n 1 - Blanco\n 2 - Negro\n 3 - Plateado\n 4 -
Militar\n 5 - Desconocido");
printf("\n Seleccione un color: ");
}
}
/* ---------------------------------------- */
return (OpcionesMenu)opcion;
}
usi NN = N;
char Decision;
do {
printf("\n-------- Ingrese los Datos de la MotoNave --------\n");
printf("\n Marca: "); LeerTexto(Sub[NN].Marca,
Letras, 20);
printf("\n Modelo: "); LeerTexto(Sub[NN].Modelo,
Todo, 30);
printf("\n Sumergibilidad: "); Sub[NN].Sumergibilidad =
LeeSumergibilidadValida();
printf("\n Dormitorios: "); Sub[NN].Dormitorios = LeeDormitoriosValido();
printf("\nCapacidad de tripulacion: "); Sub[NN].CapacidadTripulacion =
LeeCapacidadValida();
printf("\n Tipos de Propulsion:\n 1 - Convencional\n 2 - Semielectrico\n 3 -
Propulsion nuclear\n");
printf("\n Seleccione una opcion: "); Sub[NN].Tipo = LeeTipoValido();
printf("\n Anio de creacion: "); Sub[NN].Creacion.Anio = LeeAnioValido();
printf("\n Mes de creacion: "); Sub[NN].Creacion.Mes = LeeMesValido();
printf("\n Dia de creacion: "); Sub[NN].Creacion.Dia =
LeeDiaValido(Sub[NN].Creacion.Anio, Sub[NN].Creacion.Mes);
printf("\n Peso: "); Sub[NN].Peso = LeePesoValido();
printf("\n Colores:\n 1 - Blanco\n 2 - Negro\n 3 - Plateado\n 4 -
Militar\n 5 - Desconocido\n");
printf("\n Seleccione un color: "); Sub[NN].Color =
LeeColorValido();
ContadorTiposSubAgregar[Sub[NN].Tipo]++;
ContadorColoresAgregar [Sub[NN].Color]++;
NN ++;
return NN;
}
if (N == 0) {
BEEP;
printf("AVISO: No hay datos para imprimir \n\n");
PAUSA;
return;
}
if (N == 0) {
BEEP;
printf("AVISO: \t\n No hay datos para imprimir estadisticas \n\n");
PAUSA;
return;
}
printf("\n\n");
// Colores
for (int i = 1; i < 5; i++) {
printf(" %s: %u\n", NomColor[i], ContadorColores[i]);
}
printf("\n|--------------------------------------------------------------------|\n");
PAUSA;
}
/* ------------------------------------- */
// Funcion principal
int main() {
// Declaracion de variables
OpcionesMenu Opcion;
// Declaracion de contadores
int ContadorTiposSub [4] = {0, 0, 0, 0};
int ContadorColores [5] = {0, 0, 0, 0, 0};
// Control de Datos
usi NumSub = 0;
do {
Opcion = ImprimirMenu();
switch (Opcion) {
case Agregar:
// Insercion de Datos
NumSub = IngresarDatos(Submarinos, ContadorTiposSub, ContadorColores,
NumSub);
break;
case Imprimir:
// Impresion de Datos
ImprimirDatos(Submarinos, NumSub);
break;
case Estadisticas:
// Estadisticas de cada Enumerado
ImprimirEstadisticas(ContadorTiposSub, ContadorColores, NumSub);
break;
case Salir:
FONDOPANTALLA;
printf("Saliendo del programa.\n");
PAUSA;
break;
default:
printf("Opcion no valida. Intente de nuevo.\n");
PAUSA;
}
} while (Opcion != Salir);
return(0);
}