Hola!
Tengo un programa hecho en Java en el cual he empleado 5 clases, cómo os vendría traducirlo a C++, emplea ArrayList e instancias de clases claro. Solo el esqueleto, toda la algoritmia la intentaría pasar yo.
Saludos
La clase principal es esta, las demas son como registros con gets y sets (javabeans)
////////////////
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class Aparcamiento {
public static void main (String args[])
{
///// lista de vehiculos registrados (residentes)
ArrayList registrado = new ArrayList();
//// LO INICIALIZO Y CARGO
registrado.add("O8976");
registrado.add("P7564");
registrado.add("S7534");
registrado.add("P1111");
registrado.add("Z6966");
registrado.add("M1122");
registrado.add("L5897");
registrado.add("T2349");
boolean estaReg = false;
///// ALMACEN PARA INFORMES
ArrayList almacen = new ArrayList();
//// declaro un ArrayList de Vehiculos que hacen estancias (otro ArrayList)
ArrayList<EstanciaVehiculo> estanciado = new ArrayList<EstanciaVehiculo>();
//////////////////////
/* MODULO PARA INTRODUCIR VEHICULO */
//////////////////////
//// primero cojo un coche y lo estaciono
Vehiculo vehiculo = new Vehiculo();
vehiculo.setMatricula("Z1234A");
vehiculo.setOficial(false);
Estancia estancia = new Estancia();
estancia.setHoraEntrada("19:00:23");
estancia.setHoraSalida("00:00:00");
estancia.estaEstacionado=true;
//// e introduzco el vehiculo en el arraylist de los que estan
EstanciaVehiculo ev = new EstanciaVehiculo();
ev.estancia = estancia;
ev.vehiculo = vehiculo;
estanciado.add(ev);
/////////// otro coche
vehiculo = new Vehiculo();
vehiculo.setMatricula("M1122");
vehiculo.setOficial(false);
estancia = new Estancia();
estancia.setHoraEntrada("09:00:23");
estancia.setHoraSalida("00:00:00");
estancia.estaEstacionado=true;
//// e introduzco el vehiculo en el arraylist de los que estan
ev = new EstanciaVehiculo();
ev.estancia = estancia;
ev.vehiculo = vehiculo;
estanciado.add(ev);
//////////////////////
/* MODULO PARA SACAR VEHICULO */
//////////////////////
String matriculaSalida = "Z1234A";
String horaSalida = "21:12:00";
estancia.estaEstacionado=true;
/////// comprobar que esta estacionado (aunque ya lo tiene el booleano)
boolean encontrado = false;
estancia.horaSalida=horaSalida;
EstanciaVehiculo evbuscado = null;
for (int i = 0; i< estanciado.size();i ++)
{
evbuscado = estanciado.get(i);
System.out.println("matricula estanciado::::: " + evbuscado.vehiculo.getMatricula());
if (evbuscado.vehiculo.getMatricula().equals(matriculaSalida))
{
System.out.println("ENCONTRADO");
encontrado = true;
///////// ahora vemos si esta registrado
for (int j = 0; j < registrado.size();j++)
{
if (((String)registrado.get(j)).equals(evbuscado.vehiculo.getMatricula()))
{
System.out.println("ESTA REGISTRADO ES OFICIAL O RESIDENTE");
estaReg = true;
}
}
////// lo quitamos
estanciado.remove(i);
darSalida(evbuscado, estancia, estaReg, almacen);
}
}
}
public static void darSalida(EstanciaVehiculo evbuscado, Estancia estancia, boolean estaReg, ArrayList almacen)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
float importe = 0;
evbuscado.estancia.estaEstacionado = false;
if (evbuscado.vehiculo.isOficial()) importe = 0;
Date tiempoSalida=null;
try {
tiempoSalida = sdf.parse("2017-01-11 "+ estancia.horaSalida);
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Date tiempoEntrada = null;
try {
tiempoEntrada = sdf.parse("2017-01-11 "+ estancia.getHoraEntrada());
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int minutosEstacionado = tiempoSalida.getMinutes() - tiempoEntrada.getMinutes();
int horasEstacionado = tiempoSalida.getHours() - tiempoEntrada.getHours();
System.out.println("El Coche " + evbuscado.vehiculo.getMatricula() + " ha permanecido "+ horasEstacionado + " : " + minutosEstacionado + " minutos.");
if (!estaReg)
{
importe = horasEstacionado * 60 * evbuscado.estancia.getImporteMinutoNoRes();
importe = importe + minutosEstacionado* evbuscado.estancia.getImporteMinutoNoRes();
System.out.println(" tiene que pagar " + importe + " al tratarse de un no residente.");
}
else
{
if (evbuscado.vehiculo.isOficial())
{
importe = 0;
System.out.println(" Su estancia es gratuita ");
}
else if (evbuscado.vehiculo.isResidente())
{
importe = horasEstacionado * 60 * evbuscado.estancia.getImporteMinutoResidente();
importe = importe + minutosEstacionado* evbuscado.estancia.getImporteMinutoResidente();
System.out.println(" tiene que pagar " + importe + " al tratarse de un residente.");
}
}
almacenGlobal(evbuscado, importe, minutosEstacionado, horasEstacionado, almacen);
}
public static void almacenGlobal(EstanciaVehiculo ev, float importe, int minEst, int horEst, ArrayList almacen)
{
EstancVehImporte evi = new EstancVehImporte();
evi.setEv(ev);
evi.setImporte(importe);
evi.setTiempoHoras(horEst);
evi.setTiempoMinutos(minEst);
almacen.add(evi);
}
· Los códigos deben ir en etiquetas GeSHi
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex
Las clases las replicas. El ArrayList lo puedes cambiar por un vector.
Las operaciones con tiempos y fechas, puedes usar funciones de la librería ctime (http://www.cplusplus.com/reference/ctime/). Échale un ojo a time y strftime. En sus respectivas páginas en esa web tienes ejemplos.
Para todo lo demás, si tienes alguna duda en alguna conversión, pregunta por aquí.