Agenda de Citas - Ejercicio A

Ejercicio hecho por Fabian Chollet. C.I: 31.864.832
 avatar
unknown
c_cpp
11 days ago
6.9 kB
7
Indexable
#include <iostream>
#include <iomanip>
#include <string>
#include <locale.h>
using namespace std;

int cantidadCitas = 0;
//Clase Fecha
class Fecha {
	private:
		int anio, mes, dia, hora;
		string mesStr;
	public:
		Fecha(int = 2000, int = 1, int = 1, int = 12, string = "");
		bool verificFecha(int, int, int, int);
		bool anioBisiesto();
		void verFecha() const {
			cout<<"La fecha de la cita es "<<dia<<'/'<<mes<<'/'<<anio<<" a las "<<hora<<"."<<endl;
		}
};
Fecha::Fecha(int aaaa, int mm, int dd, int hr, string mStr){
	anio = aaaa;
	mes = mm;
	dia = dd;
	hora = hr;
	mesStr = mStr;
}
bool Fecha::verificFecha(int aaaa, int mm, int dd, int hr){
	int DiasPorMes[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; //Se añade un mes cero 0 para que se pueda evaluar enero
	if (anioBisiesto()){
		DiasPorMes[2] = 29; //29 de febrero
	}
	if (mes == 0){
		cout<<endl<<"Mes cero"<<endl;
		return false;
	} else if (mes < 1 or mes > 12){
		cout<<endl<<"Mes incorrecto"<<endl;
		return false;
	} else if (hora < 0 or hora > 23){
		cout<<endl<<"Hora incorrecta"<<endl;
		return false;
	} else if (dia > DiasPorMes[mes]){
		cout<<endl<<"Dia incorrecto"<<endl;
		return false;
	} else {
		return true;
	}
}
bool Fecha::anioBisiesto(){
	if (anio % 4 == 0 && anio % 100 !=0){
		return true;
	} else if (anio % 4 == 0 && anio % 100 == 0 && anio % 400 == 0){
		return true;
	} else {
		return false;
	}
}
//Clase Cita
class Cita {
	private:
		string persona1, persona2, lugarCita;
		Fecha fechaCita;
	public:
		Cita(string = "", string = "", string = "", Fecha = (0,0,0,0));
		void verCita();
};
Cita::Cita(string p1, string p2, string lugar, Fecha fecha) {
    persona1 = p1;
    persona2 = p2;
    lugarCita = lugar;
    fechaCita = fecha;
}
void Cita::verCita() { //GET Cita
	cout<<"La cita será de: "<<persona1<<" y "<<persona2<<" en "<<lugarCita<<"."<<endl
		<<"-----------------------------------"<<endl;
	fechaCita.verFecha();
}
//Clase ClaseExterna
class ClaseExterna{
	public:
		Cita listaCitas[10];
		ClaseExterna();
		void crearCita(string, string, string, Fecha);
		void verLista();
};
ClaseExterna::ClaseExterna() {
    for (int i = 0; i < 10; i++) {
        listaCitas[i] = Cita("", "", "", Fecha());
    }
}
void ClaseExterna::crearCita(string p1, string p2, string lugar, Fecha fecha){ //Crear un objeto cita y añadirlo a la lista
	if (cantidadCitas < 10){
		listaCitas[cantidadCitas] = Cita(p1, p2, lugar, fecha);
		cantidadCitas++;
		cout<<"Se agendó una cita. Los participantes son:\n"
			<<p1<<" y "<<p2<<". Se reunirán en: "<<lugar<<endl;
	} else {
		cout<<"La lista de citas está llena [10 citas guardadas]."<<endl
			<<"Si quiere guardar una nueva cita, debe borrar una de la lista."<<endl;
	}
	return;
}
void ClaseExterna::verLista(){
	for (int i = 0; i < cantidadCitas; i++){
		listaCitas[i].verCita();
	}
}

void defMes(int&, string&);
void consultarCita(ClaseExterna&);
void borrarCita(ClaseExterna&);

int main (){
	setlocale(LC_CTYPE, "Spanish");
	ClaseExterna Agenda;
	int Anio = 0, Mes = 0, Dia = 0, Hora = 0, opcionMenu; 
	bool fechaValida;
	char comprobacion, tipoMes;
	string Persona1, Persona2, LugarCita, mesFecha;
	Fecha FechaCita(Anio, Mes, Dia, Hora);
	
	cout<<"Bienvenido usuario(a). Esta será su agenda de citas con una capacidad de hasta 10 citas agendables."<<endl
		<<"Su agenda fue creada con éxito."<<endl<<endl;
	bool Menu = true;
	
	while (Menu){
		cout<<"/------------------------------------------------/\n"
			<<"/-- ¿Qué quiere hacer?                         --/\n"
			<<"/--                                            --/\n"
			<<"/-- Crear una cita [1]                         --/\n"
			<<"/-- Borrar una cita [2]                        --/\n"
			<<"/-- Ver citas [3]                              --/\n"
			<<"/-- Cerrar agenda [4]                          --/\n"
			<<"/------------------------------------------------/\n"<<endl<<"[...] <= "; cin>>opcionMenu; cout<<endl<<endl;
		
		switch (opcionMenu){
			case 1:
				cout<<"Por favor, introduzca los datos de la cita.\n\n";
				do{
					cout<<"Primera persona: "; cin>>Persona1;
					cout<<"Segunda persona: "; cin>>Persona2;
					cout<<"Lugar de cita: "; cin>>LugarCita;
					cout<<"Día: "; cin>>Dia;
					cout<<"<<Selección de mes. Elija ingresar el mes en letras [s] o en número [i]"<<endl;
					do{
						cin>>tipoMes;
						if (tipoMes != 's' && tipoMes != 'i'){
							cout<<"Opción inválida."<<endl<<endl;
						}
					} while(tipoMes != 's' && tipoMes != 'i');
					if (tipoMes == 's'){
						cout<<"Mes: "; cin>>mesFecha;
					} else if (tipoMes == 'i') {
						cout<<"Mes: "; cin>>Mes;
					}
					cout<<"Año: "; cin>>Anio;
					cout<<"Hora: "; cin>>Hora;
					defMes(Mes, mesFecha);
					//Fecha FechaCita(Anio,Mes,Dia,Hora, mesFecha);
					Fecha* FechaCita = new Fecha (Anio, Mes, Dia, Hora, mesFecha);
					cout<<endl<<"¿La información es correcta? [s/n] <= "; cin>>comprobacion; cout<<endl;
				} while (comprobacion != 's' && comprobacion != 'n');
				if (FechaCita.verificFecha(Anio, Mes, Dia, Hora)){
					Agenda.crearCita(Persona1, Persona2, LugarCita, FechaCita);
				} else {
					cout<<"La fecha no es válida. Por favor ingrese una fecha real."<<endl;
				}
				break;
			case 2:
				borrarCita(Agenda);
				break;
			case 3:
				consultarCita(Agenda);
				break;
			case 4:
				cout<<"Cerrando agenda. Gracias por usar este servicio."<<endl;
				Menu = false;
				break;
			default:
				cout<<"Por favor, elija una de las cuatro(4) opciones del menú."<<endl<<endl;
		}
	}
	
	return 0;
}
void defMes(int& mm, string& mStr){
	int DiasPorMes[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
	string DiasPorMesStr[12] = {"Enero", "Febrero", "Marzo", "Abril", "Mayo",
								"Junio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"};
	if (mm == 0){
		for(int i = 0; i < 13; i++){
			if (mStr == DiasPorMesStr[i]){
				mm = DiasPorMes[i + 1];
			}
		}
	} else {
		for(int i = 0; i < 13; i++){
			if (mm == DiasPorMes[i + 1]){
				mStr = DiasPorMesStr[i];
			}
		}
	}
	return;
}
void consultarCita(ClaseExterna& Ag){
	cout<<"Lista de Citas:"<<endl;
	for (int i = 0; i <= cantidadCitas; i++){
		cout<<endl<<"Cita Nro. "<<i + 1<<endl;
		Ag.listaCitas[i].verCita();
	}
	return;
}
void borrarCita(ClaseExterna& Age){
	int indiceCitas;
	cout<<"Elija el Nro. de la cita que desea borrar: ";
	do{
		cin>>indiceCitas;
		if (indiceCitas < 0 or indiceCitas > cantidadCitas){
			cout<<endl<<"Usted ha escogido una cita inexistente."<<endl;
		}
	} while (indiceCitas < 0 or indiceCitas > cantidadCitas);
	for (int i = 1; i <= cantidadCitas; i++){
		if (i == indiceCitas){
			Age.listaCitas[i] = Cita("", "", "", Fecha());
		}
	}
}
Leave a Comment