Gestión de Estrellas en C: Programa con Menú, Inserción, Consulta y Persistencia en Disco
int mostrarMenu(void){
int opcion;
do{
system("cls");
printf ("1) Mostrar la lista de las estrellas\n");
printf ("2) Inserción de una nueva estrella\n");
printf ("3) Consulta de los datos de alguna de las estrellas\n");
printf ("4) Modificación de los datos de alguna estrella\n");
printf ("5) Borrado de alguna estrella de la lista\n");
printf ("6) Guardar la lista actualizada en disco\n");
printf ("7) Recuperar datos de la lista guardada en disco\n");
printf ("8) Salir\n");
scanf("%d", &opcion);
if (opcion < 1 || opcion > 8){
printf("Opción no válida \n");
system("pause");
}
}
while (opcion <1 || opcion > 8);
return opcion;
}
void Insertar(){
system("cls");
int hayVida;
printf("Introducir el nombre de la estrella: ");
fflush(stdin);
gets(lista.vector[lista.cursor].nombre);
//SI HAY PROBLEMAS PARA COGER EL DATO PONER fflush(stdin);
printf("Introducir el nombre de la galaxia: ");
gets(lista.vector[lista.cursor].galaxia);
printf("Introducir el número de planetas: ");
scanf("%d", &lista.vector[lista.cursor].planetas);
do {
printf("Posibilidad de vida (0 No, 1 Sí): ");
scanf("%d", &hayVida);
if (hayVida == 1) {
lista.vector[lista.cursor].vida = true;
printf("Estrella añadida con éxito \n");
} else if (hayVida == 0) {
lista.vector[lista.cursor].vida = false;
printf("Estrella añadida con éxito \n");
} else {
printf("Valor no válido. Por favor, introduzca 0 o 1.\n");
}
} while (hayVida != 0 && hayVida != 1);
lista.cursor++;
}
void Mostrar(){
system("cls");
int i=0;
printf("Lista cursor es %d \n", lista.cursor);
while(i<lista.cursor){
printf("Nombre de la estrella: %s \n", lista.vector[i].nombre);
printf("Nombre de la galaxia: %s \n", lista.vector[i].galaxia);
printf("Número de planetas: %d \n", lista.vector[i].planetas);
printf("¿Hay vida? (No 0, Sí 1): %d \n \n", lista.vector[i].vida);
i++;
}
printf("Pulse cualquier tecla para continuar");
system("pause");
}
void Consultar_estrella(){
system("cls");
char nombre[Maximo_1];
printf("Ingrese el nombre de la estrella que desea consultar: ");
scanf("%s", nombre);
for (int i=0; i < lista.cursor; i++){
if (strcmp(lista.vector[i].nombre, nombre) == 0) {
printf("\nDatos de la estrella %s:\n", lista.vector[i].nombre);
printf("Galaxia: %s\n", lista.vector[i].galaxia);
printf("Número de planetas: %d\n", lista.vector[i].planetas);
printf("Posibilidad de vida: %s\n", lista.vector[i].vida ? "Sí" : "No");
system("pause");
return;
}
}
printf("Estrella no encontrada.\n");
system("pause");
}
void Borrar_estrella(){
system("cls");
char nombre[Maximo_1];
int j;
printf("Introduce el nombre de la estrella que quieres borrar: ");
scanf("%s", nombre);
for (int i = 0; i < lista.cursor; i++) {
if (strcmp(lista.vector[i].nombre, nombre) == 0) {
for (int j = i; j < (lista.cursor) - 1; j++) {
lista.vector[j] = lista.vector[j + 1];
}
(lista.cursor)--;
printf("Estrella borrada exitosamente.\n");
system("pause");
return;
}
}
printf("Estrella no encontrada.\n");
system("pause");
}
void Guardar_lista(){
int j;
Estrellas=fopen("ListaEstrellas.dat", "wb");
for(j=0; j<lista.cursor; j++){
fwrite(&lista.vector[j], sizeof(struct T_estrella), 1, Estrellas);
}
fclose(Estrellas);
}
void Recup_estrella(){
lista.cursor=0;
Estrellas=fopen("ListaEstrellas.dat", "rb");
while(!feof(Estrellas)){ //feof -> final del fichero
fread(&lista.vector[lista.cursor],sizeof(struct T_estrella),1,Estrellas);
lista.cursor++;
}
fclose(Estrellas);
system("pause");
lista.cursor--;
}
int main (void)
{
int opcion = 0;
lista.cursor = 0;
while(opcion != 8){
opcion= mostrarMenu();
printf("He recogido el número %d \n",opcion);
switch(opcion){
case 1: //Mostrar estrella//
Mostrar();
break;
case 2: //Introducir estrella//
Insertar();
break;
case 3: //Consultar estrella//
Consultar_estrella();
break;
case 4: //Modificar estrella//
Modificar();
break;
case 5: //Borrar estrella//
Borrar_estrella();
break;
case 6: //Guardar lista//
Guardar_lista();
break;
case 7: //Recuperar lista//
Recup_estrella();
break;
case 8: //Salir//
break;
}
}
}