Curso-lenguaje-C/curso-juantxi/Ejercicios/1202Garaje.c

243 lines
6.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include<stdio.h>
#include<stdlib.h>
/*
Programa que permita gestionar los coches de un garaje.
Cada plaza tiene un número del 0 al 44.
Para cada coche que se guarda en el garaje almacena:
- Matrícula cadena 10
- Modelo cadena 30
- Nombre conductor cadena 60
- Fecha de entrada en el garaje día mes y año. Todo números enteros.
El programa mostrará el menú
1 Meter coche. Comprobando que el garaje no está lleno.
2 Mostrar la información del garaje
3 Pedir una matrícula al usuario e indicar si ese coche está o no en el garaje.
0 Salir
*/
#define TAM 45
// estructura de la fecha de entrada
struct fecha {
int dia;
int mes;
int year;
};
//estructura de la plaza de garaje
struct plaza {
int estado; // 0 cuando la plaza está vacía y 1 cuando está ocupada
char matricula[10];
char modelo[30];
char nomConductor[60];
struct fecha fechaEntrada;
};
int main (){
// Defino variables
int menu;
int numPlaza;
int i;
int ocupado=0;
int libre=0;
char buscarMatr[10];
int encontrado;
// tipo nombre [Tamaño]
struct plaza garaje [TAM];
// Dejo el estado de las plazas de garaje a 0 (Vacías)
for(i=0; i<TAM; i++){
garaje[i].estado=0;
}
//elabora un menú con estas opciones: 1. cargar 2. mostrar 0 . salir
do{
printf("\nMenú");
printf("\n1 Introducir un coche."); // Comprobar que el garaje no está lleno
printf("\n2 Mostrar información de las plazas.");
printf("\n3 Introduce una matrícula para saber si está el coche en el garaje.");
printf("\n0 Salir\n");
printf("\nIntroduce una opción reseñada: ");
fflush(stdin);
scanf("%d", &menu);
switch(menu){
case 1:
/*
// Cuento las plazas libres y ocupadas.
for(i=0; i<TAM; i++){
if(garaje[i].estado==0){
libre=libre+1;
}else{
ocupado=ocupado+1;
}
}
if(libre==0){
printf("\nEL GARAJE ESTA COMPLETO.");
printf("\nVuelva más tarde.");
}else{
printf("\nTenemos libres las siguientes plazas: \n");
for(i=0; i<TAM; i++){
if(garaje[i].estado==0){
printf("%d \t", i);
}
if(i==14||i==29||i==44){
printf("\n");
}
}
printf("\n¿Qué plaza desea reservar?: \n");
// //////////////////////////////// ME HE QUEDADO AQUí
// scanf .....
}*/
/*Solucion sencilla*/
ocupado=0;
for(i=0;i<TAM;i++){
if(garaje[i].estado==1){
ocupado++;
}
}
if(ocupado==TAM){
printf("\nEste garaje estA completo");
}else{
libre=0;
while(garaje[libre].estado==1){
libre++;
}
printf("\n Introduce la matricula del coche: ");
fflush(stdin);
scanf("%s", garaje[libre].matricula);
garaje[libre].estado=1;
//y así, con el resto de los datos
}
break;
case 2: // Mostrar las plazas vacías y las plazas ocupadas
printf("\n####################");
printf("\nOCUPACIÓN DEL GARAJE");
printf("\n####################\n");
// Cuento las plazas libres y ocupadas.
/*
for(i=0; i<TAM; i++){
if(garaje[i].estado==0){
libre=libre+1;
}else{
ocupado=ocupado+1;
}
}
printf("\nEn estos momentos de las %d plazas que disponemos en nuestro garaje tenemos: ", TAM);
printf("\n %d plazas libre y %d plazas ocupadas.\n", libre, ocupado);
// Indico las plazas concretas y su estado.
printf("\n_____________________________________ \n");
printf("\nTenemos libres las siguientes plazas: \n");
for(i=0; i<TAM; i++){
if(garaje[i].estado==0){
printf("%d \t", i);
}
if(i==14||i==29||i==44){
printf("\n");
}
}
printf("\n_____________________________________ \n");
*/
/*Mostrar la información de las plazas*/
libre=0;
ocupado=0;
for(i=0; i<TAM; i++){
if(garaje[i].estado==0){
printf("\nPlaza %d -> libre", i);
libre++;
}else{
printf("\nPlaza %d -< ocupada matricula: %s, modelo: %s", i, garaje[i].matricula, garaje[i].modelo);
ocupado++;
}
}
printf("\nLibres: %d Ocupadas: %d", libre, ocupado);
break;
case 3:
//primero, pide la matrícula que la guardarás en una variable cualquiera (una cadena)
printf("\nDame la matrícula a buscar: ");
fflush(stdin);
scanf("%s", buscarMatr);
//recorre todo el garaje, comprueba que el estado es 1 y si el estado es 1, compara las matriculas
//recuerda que las cadenas se comparan con strcmp
//puedes valerte de un flag para indicar si has encontrado o no el coche.
encontrado=0;
for(i=0; i<TAM; i++){
if(garaje[i].estado==1){
if(strcmp(buscarMatr, garaje[i].matricula)==0){
printf("\nLo encontre!! es un %s", garaje[i].modelo);
encontrado=1;
}
}
}
if(encontrado==0){
printf("\nEse coche con esa matricula no esta en el garaje");
}
break;
case 0:
break;
// ERROR EN EL MENÚ
default:
printf("\nNo es un valor correcto para este menu.\nVuelva a intentarlo\n\n");
}
}while ( menu != 0 );
return 0;
printf("Hasta pronto!");
}