#include <iostream>
#include <sstream>
#include <iomanip>
#include <cstring.h>
#include <cstdlib.h>
#include <ctime.h>
#define MAXLINESIZE 250
#define MAXNRESERVAS 50
#define MAXNHOTELES 5
using namespace std;
//Estructura en la que se guarda la informacion de cada reserva
struct TReserva{
time_t fecha;
string nombre;
string dni;
int nHabitaciones;
int nNoches;
};
//Estructura en la que se guarda la informacion de cada hotel
struct THotel{
string nombre;
int nHabitaciones;
float precio;
int nReservas;
struct TReserva reservas[MAXNRESERVAS];
};
//---------------------------------------------------------------------------
int main(){
struct THotel Hotel[MAXNHOTELES];
int nHoteles=0;
char *parametros[10], *comando;
char linea[MAXLINESIZE];
int nParametros,i;
bool fin;
do{
//solicito la linea de comando con sus parametros
cout << "Introduce un comando: ";
cin.getline(linea,MAXLINESIZE);
fin=false; //esta es para saber si ya se obtuvieron todos los parametros y salir del bucle donde se obtienen
nParametros=0; //coloco el contador de parametros a 0
comando=strtok(linea," []"); //obtengo el comando
do{ //obtengo los parametros
parametros[nParametros]=strtok(NULL,"[]");
if(parametros[nParametros] != NULL)
nParametros++;
else
fin=true;
}while(fin != true);
//actuo segun el comando introducido
if(strcmp(comando,"crear_hotel")==0){
cout << "Intenta crear un hotel\n";
if(nParametros == 3){
if(nHoteles < MAXNHOTELES){ //si aun quedan hoteles por crearse procedemos a su creacion
//El formato tiene que ser:
//crear_hotel [nombre hotel][habitaciones][precio]
Hotel[nHoteles].nombre = parametros[0];
Hotel[nHoteles].nHabitaciones = atoi(parametros[1]);
//esta parte que sigue es para dar precision de 2 decimales al valor de la habitacion del hotel
stringstream precio;
precio.precision(2);
precio << fixed << atof(parametros[2]);
precio >> Hotel[nHoteles].precio;
Hotel[nHoteles].nReservas=0;
nHoteles++; //Incremento el contador de hoteles creados
cout << "Hotel creado satisfactoriamente\n";
}else{
cout << "Ya se han creado " << MAXNHOTELES << " hoteles" << endl;
}
}else{
cout << "Numero de parametros incorrecto\n";
}
}else if(strcmp(comando,"crear_reserva")==0){
cout << "Intenta crear una reserva\n";
if(nParametros == 8){
bool encontrado=false;
int i;
for(i=0; i < nHoteles; i++)
if(strcmp(Hotel[i].nombre.c_str(),parametros[0])==0){
encontrado=true;
break;
}
if(encontrado==true){
if(Hotel[i].nReservas < MAXNRESERVAS){
//El formato tiene que ser:
//crear_reserva [nombre hotel][dia][mes][año][nombre cliente][DNI cliente][noches][habitaciones]
//con esto de a continuacion obtengo el valor time_t de la fecha introducida
struct tm *fecha;
fecha->tm_mday=atoi(parametros[1]); //coloco el dia del mes en la estructura
fecha->tm_mon=atoi(parametros[2])-1; //coloco el mes en la estructura
fecha->tm_year=atoi(parametros[3])-1900; //coloco el año en la estructura
Hotel[i].reservas[Hotel[i].nReservas].fecha = mktime(fecha); //convierto la estructura al formato time_t
//Con eso ya tenemos una fecha en formato time_t con la que poder realizar operaciones
Hotel[i].reservas[Hotel[i].nReservas].nombre=parametros[4];
Hotel[i].reservas[Hotel[i].nReservas].dni=parametros[5];
Hotel[i].reservas[Hotel[i].nReservas].nNoches=atoi(parametros[6]);
Hotel[i].reservas[Hotel[i].nReservas].nHabitaciones=atoi(parametros[7]);
cout << "Reserva creada satisfactoriamente" << endl;
Hotel[i].nReservas++;
}
}else{
cout << "No se encuentra ningun hotel con ese nombre" << endl;
}
}else{
cout << "Numero de parametros incorrecto" << endl;
}
}else if(strcmp(comando,"borrar_reserva")==0){
cout << "Intenta borrar una reserva\n";
}else if(strcmp(comando,"salir")==0){
cout << "adios\n";
}else{
cout << "comando no valido\n";
continue;
}
}while (strcmp (comando,"salir") != 0);
return 0;
}
//---------------------------------------------------------------------------