Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



domingo, 3 de julio de 2011

Gambas2 y OOP Trabajando con clases (03) Practica 5C

GAMBAS Y OOP:

3º EJEMPLO DE MANEJOS DE CLASES Y OBJETOS




Seguimos con los ejemplos de Gambas OOP.

Ahora la práctica 5c:

Desarrollar una clase llamada Motor que:
Tenga dos atributos private de tipo int (litros de aceite) y de tipo int (CV).
Tenga un constructor con un parámetro de tipo int para los CV. Los litros
de aceite por defecto serán 0.
Tenga un getter para cada uno de los atributos.
Tenga un setter para los litros.

Desarrollar una clase llamada Coche que:
Tenga un atributo private de tipo Motor, un atributo de tipo String (marca),
otro de tipo String (modelo) y otro de tipo double con el precio acumulado
con las averías.
Tenga un constructor con dos parámetros de tipo String que inicialice la
marca y el modelo.
Tenga un getter para cada uno de los atributos.
Un método acumularAveria que incrementará el importe gastado en
averías.

Desarrollar una clase llamada Garaje que:
Tendrá tres atributos, un coche, un String con la avería asociada y el
número de coches que ha ido atendiendo.
El garaje solo podrá atender a un coche en cada momento. Controlar esta
premisa.
Tenga un método aceptarCoche que recibe un parámetro de tipo Coche y
la avería asociada. El garaje solo podrá atender a un coche en cada
momento. Si ya esta atendiendo uno, que devuelva un false.
Tenga un método devolverCoche que dejara al garaje en estado de
aceptar un nuevo coche.

Desarrollar una clase llamada Practica5c que en su método main:
Cree un garaje.
Cree 2 coches.
El garaje irá cogiendo los coches y devolviéndolos, acumulando un
importe aleatorio (Math.random()) de la avería tratada.
Si la averia del coche es “aceite” incrementar en 10 los litros de aceite.
Los coches entrarán al menos 2 veces en el garaje.
Mostrar la información de los coches al final del main.

Nota: Para calcular un número aleatorio usaremos Math.random() que devuelve
un double entre 0.0 y 1.0



Resolución
Clase Motor:

' Gambas class file

'atributos
PRIVATE aceite AS Integer = 0
PRIVATE CV AS Integer = 0

'constructor
PUBLIC SUB _new(c AS Integer)
CV = c
END

'getter
PUBLIC FUNCTION getAceite() AS Integer
RETURN aceite
END

PUBLIC FUNCTION getCV() AS Integer
RETURN CV
END

'setter
PUBLIC SUB setAceite(a AS Integer)
aceite = a
END


Clase Coche:

' Gambas class file

'atributos
PRIVATE motor1 AS Motor
PRIVATE marca AS String = ""
PRIVATE modelo AS String = ""
PRIVATE importeAveria AS Float = 0

'constructor
PUBLIC SUB _new(ma AS String, mo AS String)
motor1 = NEW motor(50) 'valor standard, a todos los coches le ponemos lo mismo al crearlos
marca = ma
modelo = mo
END


'getter
PUBLIC FUNCTION getMotor() AS Motor
RETURN motor1
END


PUBLIC FUNCTION getMarca() AS String
RETURN marca
END

PUBLIC FUNCTION getModelo() AS String
RETURN modelo
END

PUBLIC FUNCTION getImporteAveria() AS Float
RETURN importeAveria
END

PUBLIC SUB acumularAveria(d AS Float)
importeAveria += d
END



Clase Garaje:

' Gambas class file

PRIVATE coche1 AS NEW Coche("", "")
PRIVATE averia AS String
PRIVATE numCochesAtentidos AS Integer

PUBLIC SUB _new()
coche1 = NULL
averia = ""
numCochesAtentidos = 0
END



PUBLIC FUNCTION getNumCochesAtendidos() AS Integer
RETURN numCochesAtentidos
END





PUBLIC FUNCTION aceptarCoche(c AS Coche, averia AS String) AS Boolean
IF c = NULL THEN
RETURN FALSE
ENDIF
IF averia = "aceite" THEN
c.getMotor().setAceite(c.getMotor().getAceite() + 10)
ENDIF
c.acumularAveria(Rnd(0, 100)) ' importe aleatorio de coste averia
numCochesAtentidos += 1
RETURN TRUE
END

PUBLIC SUB devolverCoche()
coche1 = NULL
averia = NULL
END



Clase Fmain:

' Gambas class file

PUBLIC SUB Form_Open()
DIM c1 AS NEW Coche("fiat", "cinquecento")
DIM c2 AS NEW Coche("Renault", "clio")
DIM c3 AS NEW Coche("Peuyot", "sw")


DIM g AS NEW Garaje
RANDOMIZE

TextArea1.text = "Numero de coses atendidos:" & Str$(g.getNumCochesAtendidos()) & "\n"

IF g.aceptarCoche(c1, "Pinchazo de una rueda") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche\n"
ENDIF

IF g.aceptarCoche(c1, "Se ha quedado sin gasolina") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche y no van a coger el nuestro\n"
ENDIF

g.devolverCoche()

IF g.aceptarCoche(c2, "Gripazo del motor") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche\n"
ELSE
'pasara un tiempo
g.devolverCoche()

ENDIF

IF g.aceptarCoche(c2, "aceite") = FALSE THEN
TextArea1.text &= "Ya estan atendiendo a otro coche\n"
ELSE
'pasara un tiempo
g.devolverCoche()
ENDIF

TextArea1.text &= "Numero de coches atendido: " & Str$(g.getNumCochesAtendidos()) & "\n"

TextArea1.text &= "Coche 1, importe averia= " & Str$(c1.getImporteAveria()) & " euros, litros Aceite " & Str(c1.getMotor().getAceite())

TextArea1.text &= "\n"
TextArea1.text &= "Coche 2,importe averia= " & Str$(c2.getImporteAveria()) & " euros, litros Aceite " & Str(c2.getMotor().getAceite())

END



Salida generada por el programa:



Saludos

Calendario Para tu Página Web para Seguimiento de Fechas libres de Alquileres CON PHP Y MYSQL REALIZADO POR Jamie McConnelL


Calendario Para tu Página Web para Usarlo en el 
Seguimiento de 
Fechas Libres de Alquiler




Pues iba buscando por internet implementar en mi pagina web un calendario donde se pudiera ver en diversos colores los eventos que tuviera, aunque no estuviera "logeado" el visitante de la página.

Me hacia falta para una amiga que le estoy haciendo su pagina web de alquiler de un piso que tiene en Portugal y quería que tuviera un calendario donde los clientes pudieran ver cuales eran las fechas ocupadas y libres para alguilar.


Pues después de mucho buscar y encontrar distintas soluciones, esta es la pagina web donde encontré la que más me gusto y cumplía mis especificaciones:



Su autor es Jamie McConnelL, y os podeis descargar el código fuente para utilizarlo.

Esta es una vista de la aplicación:
Esta muy bien, y es altamente configurable (los colores de los eventos los puedes cambiar, así como los de los días, y fines de semanas).

Para usarlo, hay que modificar el archivo "databaseConnection.php", poniendo vuestros datos de la base de dato MySql. 

NOTA IMPORTANTE:
El código que te bajas le estuve haciendo  pruebas, y tiene un pequeño defecto, el programa en el combox solo te deja usar los años 2006 al 2009.

Con solo modificar el código del archivo: rpc.php, en la linea nº 66
para que empiece en el año 2011, la variable $yStart:

Bueno, espero que os sea útil esta información.
Saludos.

Nota:
Aqui veis una muestra de lo que se puede conseguir:

www.reservaportimao.tk

viernes, 1 de julio de 2011

Gambas2 y OOP Trabajando con clases (02) Practica 5b



GAMBAS Y OOP:
2º EJEMPLO DE MANEJOS DE CLASES Y OBJETOS




Bueno, pues seguimos con los ejemplos de Gambas OOP.

Ahora la práctica 5b:

Desarrollar una clase llamada Asignatura que:
Tenga dos atributos private de tipo int (el identificador) y de tipo double (la
calificación).
Tenga un constructor con un parámetro de tipo int.
Tenga un getter para cada uno de los atributos.
Tenga un setter para la calificación.
Desarrollar una clase llamada Alumno que:
Tenga tres atributos private de tipo Asignatura.
Tenga un constructor con tres parámetros de tipo Asignatura que inicialice
los tres atributos.
Tenga un constructor con tres parámetros de tipo int que inicialice los tres
atributos.
Tenga un getter para cada uno de los atributos.
Desarrollar una clase llamada Profesor que:
Tenga un método ponerNotas que recibe un parámetro de tipo Alumno y
que no devuelve nada. Pondrá una calificación aleatoria a cada una de
las asignaturas del alumno.
Tenga un método calcularMedia que recibe un parámetro de tipo Alumno
y devuelve un double.
Desarrollar una clase llamada Practica5b que en su método main:
Cree e inicialice tres Asignaturas.
Cree un Alumno con las tres Asignaturas.
Cree un Profesor que le ponga calificaciones al Alumno y muestre por
pantalla la media del Alumno.



Expongo el código de la solución al problema:

La clase Asignatura:

' Gambas class file

'atributos
PRIVATE identificador AS Integer
PRIVATE calificacion AS Float

'constructor
PUBLIC SUB _new(param AS Integer)
identificador = param
END


'getter
PUBLIC FUNCTION getIdentificador() AS Integer
RETURN identificador
END

PUBLIC FUNCTION getCalificacion() AS Float
RETURN calificacion
END


'setters
PUBLIC SUB setCalificacion(param AS Float)
calificacion = param
END


La clase Alumno:

' Gambas class file

'atributos
PRIVATE asignatura1 AS Asignatura
PRIVATE asignatura2 AS Asignatura
PRIVATE asignatura3 AS Asignatura

'constructores
PUBLIC SUB AlumnoConstAsig(param1 AS Asignatura, param2 AS Asignatura, param3 AS Asignatura)
asignatura1 = param1
asignatura2 = param2
asignatura3 = param3
END

PUBLIC SUB AlumnoConstInd(param1 AS Integer, param2 AS Integer, param3 AS Integer)
asignatura1 = NEW Asignatura(param1)
asignatura2 = NEW Asignatura(param2)
asignatura3 = NEW Asignatura(param3)
END

'getters
PUBLIC FUNCTION getAsignatura1() AS Asignatura
RETURN asignatura1
END

PUBLIC FUNCTION getAsignatura2() AS Asignatura
RETURN asignatura2
END

PUBLIC FUNCTION getAsignatura3() AS Asignatura
RETURN asignatura3
END


La clase Profesor:

' Gambas class file

PUBLIC SUB ponerNotas(param AS Alumno)
'inicio la semilla del generador de numeros aleatorios
RANDOMIZE
param.getAsignatura1().setCalificacion(Rnd(0, 10))
param.getAsignatura2().setCalificacion(Rnd(0, 10))
param.getAsignatura3().setCalificacion(Rnd(0, 10))

END

PUBLIC SUB calcularMedia(param AS Alumno) AS Float
DIM nota1, nota2, nota3 AS Float
nota1 = param.getAsignatura1().getCalificacion()
nota2 = param.getAsignatura2().getCalificacion()
nota3 = param.getAsignatura3().getCalificacion()
RETURN (nota1 + nota2 + nota3) / 3
END
 


La clase Practica5b (creo un formulario Fmain, con un textbox para mostrar la solución)

' Gambas class file

PUBLIC SUB Form_Open()
DIM programacion AS NEW Asignatura(1)
DIM redes AS NEW Asignatura(2)
DIM estadistica AS NEW Asignatura(3)
DIM a AS NEW Alumno
DIM p AS NEW Profesor

a.AlumnoConstAsig(programacion, redes, estadistica)

p.ponerNotas(a)

TextArea1.text = " La media del alumno es:" & p.calcularMedia(a)

END


Ahora os muestro una captura de la pantalla:

Saludos