Es mas que nada un juguete , nada serio, ya que tiene muchos pero muchos detalles, a medida que iré lvl en Python voy publicando algunas casillas .
El asunto Dice así:
“Se le a pedido crear un sistema de administración para una cadena hotelera, la cual ha solicitado crear un sistema de registro de clientes, los cuales al llegar al hotel solicitan la disponibilidad de habitaciones, en caso de haber habitaciones disponibles se debe imprimir en pantalla que habitaciones están disponibles, en caso de no haber habitaciones disponibles se debe informar al cliente que no se posee habitaciones para asignar. Este sistema debe poseer funciones para listar los precios de las habitaciones, como también para asignar la habitación al cliente.
Esta plataforma debe contar con un inicio de sesión antes de entrar al sistema. El hotel consta de 100 habitaciones entre ellas un penthouse, 9 habitaciones king, 70 habitaciones dobles y 20 habitaciones simples.
Como está de moda, a querido implementar una estructura distribuida, cliente-servidor, utilizando socket TCP, para la comunicación entre cliente y servidor, donde en el servidor estarán almacenadas las funciones que procesaran la información del hotel y en el cliente se mostrará la interfaz para comunicarse con dicho servidor, el cual estará a la espera de los parámetros para ser procesados.”

primero cree la estructura del hotel , cree una clase para las pesas y mediante herencia las subdividí en los != tipo que tenia, otra opción es crear una matriz y otra opción es utilizar una Base de datos , etc hasta el infinito de opciones. (La idea de la Base de datos me gusto, el único problema es que ya tenia echa la tarea cuando se me ocurrió
)
el asunto me quedo así:
#!/usr/bin/python
class habitacion:
def __init__(self,numero, estado, precio):
self.numero = numero
self.estado = estado
self.precio = precio
def tell(self):
print 'Numero = "%i" , Estado = "%i" , Precio = "%i" ' %(self.numero, self.estado, self.precio),
def getNumero(self):
return self.numero
def getEstado(self):
return self.estado
def getPrecio(self):
return self.precio
def setEstado(self, estado):
self.estado=estado
class penthouse(habitacion):
def __init__(self,numero, estado, precio):
habitacion.__init__(self,numero, estado,precio)
self.tipo="Penthouse"
def getTipo(self):
return self.tipo
def getNumero(self):
return self.numero
def getEstado(self):
return self.estado
def getPrecio(self):
return self.precio
def setEstado(self, estado):
self.estado=estado
def tell(self):
print 'Tipo = "%s",Numero = "%i" , Estado = "%i" , Precio = "%i" ' %(self.tipo, self.numero, self.estado, self.precio),
class h_king(habitacion):
def __init__(self, numero, estado, precio):
habitacion.__init__(self,numero, estado,precio)
self.tipo="King"
def getTipo(self):
return self.tipo
def getNumero(self):
return self.numero
def getEstado(self):
return self.estado
def getPrecio(self):
return self.precio
def setEstado(self, estado):
self.estado=estado
def tell(self):
print 'Tipo = "%s",Numero = "%i" , Estado = "%i" , Precio = "%i" ' %(self.tipo, self.numero, self.estado, self.precio),
class h_dobles(habitacion):
def __init__(self, numero, estado, precio):
habitacion.__init__(self,numero, estado,precio)
self.tipo="Doble"
def getTipo(self):
return self.tipo
def getNumero(self):
return self.numero
def getEstado(self):
return self.estado
def getPrecio(self):
return self.precio
def setEstado(self, estado):
self.estado=estado
def tell(self):
print 'Tipo = "%s",Numero = "%i" , Estado = "%i" , Precio = "%i" ' %(self.tipo, self.numero, self.estado, self.precio),
class h_simple(habitacion):
def __init__(self, numero, estado, precio):
habitacion.__init__(self,numero, estado,precio)
self.tipo="Simple"
def getTipo(self):
return self.tipo
def getNumero(self):
return self.numero
def getEstado(self):
return self.estado
def getPrecio(self):
return self.precio
def setEstado(self, estado):
self.estado=estado
def tell(self):
print 'Tipo = "%s",Numero = "%i" , Estado = "%i" , Precio = "%i" ' %(self.tipo, self.numero, self.estado, self.precio),
ahora vamos a crear el servidor, por allí explique el mecanismo cliente servidor , en este programa agregue solamente algunas funciones para que interactuaran a lvl de habitaciones , pero básicamente es el mismo.
acá el servidor tanto como el cliente se responden.
#!/usr/bin/python
import hab
import socket
s = socket.socket()
s.bind(("localhost", 4949))
s.listen(1)
sc, addr = s.accept()
print "Cargando Usuarios"
usuarios =['admin', 'leo', 'otro'] #todos los usuarios
claves=['admin', '123qwe', '123'] #las contrasenas de los usuarios
u="false" #validar usuario
p="false" #validar contrasena
cont=-1 #contador para relacionar usuario[cont] con su contrasena ( clave[cont])
cont2=0 #contador de intentos para ingresar contrasena
print "Cargando Habitaciones ....."
h = {}
#Creando el arreglo de habitaciones :
for i in range(1, 100):
if i == 1:
h[i] = hab.penthouse(i,0,150000)
if i >1 and i <= 10:
h[i]= hab.h_king(i,0,85000)
if i>10 and i<=71:
h[i]= hab.h_dobles(i,0,35000)
if i>71:
h[i] = hab.h_simple(i,0,17000)
print "Conectado ..."
#ingreso de usuario
while u == "false":
recibido = sc.recv(1024)
if recibido == "exit":
print "Cerrando"
break
for i in range(0, 3):
if usuarios[i] == recibido:
u = "true"
cont =i
sc.send(u)
#ingreso de clave
while p == "false" and cont2 <=3:
recibido = sc.recv(1024)
if claves[cont]==recibido:
p="true"
cont2 = cont2+1
if cont2 > 3:
p="error"
sc.send(p)
if p=="error":
break
#Hotel
while True and p != "error":
recibido = sc.recv(1024)
if recibido == "exit":
break
#ver habitaciones disponibles
#ver habitaciones Penthouse
if recibido == "1":
mensaje = "Penthouse diponible \n"
bool = "false"
for i in range(1,100):
if h[i].getTipo()=="Penthouse" and h[i].getEstado() == 0:
if bool == "false":
mensaje = "----------------------\n| Numero | Estado |\n----------------------\n"
numero = h[i].getNumero()
mensaje = mensaje + "| %i |Disponble|\n" %numero
bool = "true"
if bool == "false":
mensaje = mensaje + "===> No hay habitaciones disponibles\n"
if bool == "true":
mensaje = mensaje + "----------------------\n"
sc.send(mensaje)
#ver habitaciones king
if recibido == "2":
mensaje = "Habitaciones King disponibles \n"
bool = "false"
for i in range(1,100):
if h[i].getTipo()=="King" and h[i].getEstado() == 0:
if bool == "false":
mensaje = "----------------------\n| Numero | Estado |\n----------------------\n"
numero = h[i].getNumero()
mensaje = mensaje + "| %i |Disponble|\n" %numero
bool = "true"
if bool == "false":
mensaje = mensaje + "===> No hay habitaciones disponibles\n"
if bool == "true":
mensaje = mensaje + "----------------------\n"
sc.send(mensaje)
#ver habitaciones dobles
if recibido == "3":
mensaje = "Habitaciones Dobles disponibles"
bool = "false"
for i in range(1,100):
if h[i].getTipo()=="Doble" and h[i].getEstado() == 0:
if bool == "false":
mensaje = "----------------------\n| Numero | Estado |\n----------------------\n"
numero = h[i].getNumero()
mensaje = mensaje + "| %i |Disponble|\n" %numero
bool = "true"
if bool == "false":
mensaje = mensaje + "===> No hay habitaciones disponibles\n"
if bool == "true":
mensaje = mensaje + "----------------------\n"
sc.send(mensaje)
#ver habitaciones simples
if recibido == "4":
mensaje = "Habitaciones Simple disponibles"
bool = "false"
for i in range(1,100):
if h[i].getTipo()=="Simple" and h[i].getEstado() == 0:
if bool == "false":
mensaje = "----------------------\n| Numero | Estado |\n----------------------\n"
numero = h[i].getNumero()
mensaje = mensaje + "| %i |Disponble|\n" %numero
bool = "true"
if bool == "false":
mensaje = mensaje + "===> No hay habitaciones disponibles\n"
if bool == "true":
mensaje = mensaje + "----------------------\n"
sc.send(mensaje)
#Ocupar una habitacion
if recibido == "5":
print "entro en 5"
mensaje =" "
recibido2 = sc.recv(1024)
for i in range(1,100):
if h[i].getNumero() == int(recibido2) and h[i].getEstado() == 1:
mensaje = "===> Habitacion Ocupada"
if h[i].getNumero() == int(recibido2) and h[i].getEstado() == 0:
h[i].setEstado(1)
mensaje = mensaje + "===> Habitacion %i tomada" %i
sc.send(mensaje)
#Desocupar una habitacion
if recibido == "6":
print "entro en 6"
mensaje =" "
recibido2 = sc.recv(1024)
for i in range(1,100):
if h[i].getNumero() == int(recibido2) and h[i].getEstado() == 0:
mensaje = "===> Habitacion ya estaba Desocupada"
if h[i].getNumero() == int(recibido2) and h[i].getEstado() == 1:
h[i].setEstado(0)
mensaje = "===> Habitacion %i Desocupada" %i
sc.send(mensaje)
if recibido == "7":
print "entro en 7"
mensaje = "----------------------\n"
mensaje = mensaje + "|Habitacion | $ |\n"
mensaje = mensaje + "----------------------\n"
mensaje = mensaje + "| Penthouse | %i |\n" %h[1].getPrecio()
mensaje = mensaje + "| King | %i |\n" %h[2].getPrecio()
mensaje = mensaje + "| Doble | %i |\n" %h[50].getPrecio()
mensaje = mensaje + "| Simple | %i |\n" %h[90].getPrecio()
mensaje = mensaje + "----------------------"
sc.send(mensaje)
if recibido >"7":
sc.send("===> Opcion no valida")
print "Recibido:", recibido
print "Desconectado"
sc.close()
s.close()
y por ultimo el cliente
, lo más fácil, ya que solo consulta y espera respuesta, nada que procesar.
import socket
import os, sys
s = socket.socket()
s.connect(("localhost", 4949))
#s.connect(("localhost", 9999))
u="false"
p="false"
#usuario
while u=="false":
print "USUARIO:\n"
mensaje = raw_input("> ")
s.send(mensaje)
if mensaje == "exit":
print "===> Cerrando"
break
datos = s.recv(1024)
if datos == "true":
u="true"
#clave
while p=="false":
print "CLAVE:\n"
mensaje = raw_input("> ")
s.send(mensaje)
datos = s.recv(1024)
if datos == "error":
print "===> limite de intentos"
p = "error"
break
if datos == "true":
p="true"
while True and p != "error":
os.system("clear")
print "----------------------"
print "- -"
print "- MENU HOTEL -"
print "- -"
print "----------------------"
print
print "HABITACIONES DISPONIBLES"
print " 1-Ver Penthouse "
print " 2-Ver King"
print " 3-Ver Dobles"
print " 4-Ver Simples"
print
print "TOMAR UNA HABITACION"
print " 5-Tomar Habitacion"
print
print "DESOCUPAR HABITACION"
print " 6-Desocupar Habitacion"
print
print "VER PRECIOS"
print " 7-Ver Precios"
print
print "exit para salir ..."
mensaje = raw_input("> ")
s.send(mensaje)
if mensaje == "exit":
break
if mensaje == "5":
#s.send("5")
print "Ingrese el numero de la habitacion"
mensaje = raw_input("> ")
s.send(mensaje)
#datos = s.recv(1024)
#print datos
if mensaje == "6":
#s.send("5")
print "Ingrese el numero de la habitacion"
mensaje = raw_input("> ")
s.send(mensaje)
#datos = s.recv(1024)
#print datos
print "Mensaje enviado, esperando respuesta..."
# Imprimimos la respuesta del server.
datos = s.recv(2048)
print datos
raw_input("Enter para continuar...")
print "adios"
s.close()
bueno espero que por allí , saquen más de una duda, el código esta bien simple por todos lados.
obviamente hay mejor formas de implementar una solución mejor pero el fin de esto es usar socket TCP .
“Supuestamente” ahora debería estar trabajando en una especie de Skype para GNU Linux, onda mandar mensaje (chat) + Video + Sonido , en cuando lo tenga màs o menos armado lo publico
Saludos!