-
-
Save ricardosiri68/5653756 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
ayuda = """ | |
"ADD":añadir una nueva empresa, | |
"USE":seleccionar una empresa de la lista por su nombre, USE [nombre de la empresa]. | |
"VETERANO":obtener los datos del empleado con mayor antiguedad en la empresa. | |
"COMPARAR":comparar la empresa seleccionada con otra ingresando el nombre de esta ultima COMPARAR [nombre de la empresa] | |
"FUSIONAR":fusionar la empresa selaccionada con otra ingresando el nombre de esta ultima FUSIONAR [nombre de la empresa] | |
"SET":reescribir atributos de la empresa seleccionada [ opciones: NOMBRE, DESCRIPCION], SET [opcion] [valor] | |
"EMPRESAS":lista todas las empreas existentes | |
"DELETE": borra una empresa pasando el nombre como argumento. De no recibir argumento borra la empresa seleccionada, DELETE [nombre de la empresa] | |
# ----- EMPLEADOS ---- | |
"ADD_EMPLEADO":añade empleados a la empresa seleccionada | |
"GET_EMPLEADO":selecciona un empleado de la empresa seleccionada | |
pasandole el DNI del empleado como parametro, GET_EMPLEADO [dni] | |
"SET_EMPLEADO":define atributos del empleado seleccionado [ opciones NOMBRE,DNI,EDAD,SUELDO,PUESTO,ANTIGUEDAD], | |
SET_EMPLEADO [opcion] [valor] | |
"DELETE_EMPLEADO":borra un empleado pasandole el dni como parametro, de no ingresar el dni borra el empleado que se encuentre seleccionado | |
"EMPLEADOS":lista todos los empleados de la empresa seleccionada | |
"AYUDA": imprime la lista de comandos | |
"QUIT": cierre total del sistema | |
""" | |
class Empleado: | |
def __init__(self, nombre, dni, edad, sueldo, antiguedad): | |
self.__nombre= nombre | |
self.__dni = dni | |
self.__edad = edad | |
self.__sueldo = sueldo | |
self.__antiguedad = antiguedad | |
self.__puesto = None | |
self.__puestos = ('Presidente', 'Gerente General', | |
'Gerente de Departamento', 'Jefe de Departamento', 'Empleado') | |
# ----- NOMBRE ---------- | |
def setNombre(self, nombre): | |
nombre = reduce(lambda x,y: x+" "+y,nombre) | |
self.__nombre= nombre | |
def getNombre(self): | |
return self.__nombre | |
# ------- DNI ----------- | |
def setDni(self, dni): | |
if dni[0].isdigit(): | |
self.__dni= int(dni[0]) | |
else: | |
print "EL DNI DEBE SER UN DIGITO" | |
def getDni(self): | |
return self.__dni | |
# ------- EDAD ---------- | |
def setEdad(self, edad): | |
if edad[0].isdigit(): | |
self.__edad = edad[0] | |
else: | |
print "LA EDAD DEBE SER UN DIGITO" | |
def getEdad(self): | |
return self.__edad | |
# ------- SUELDO -------- | |
def setSueldo(self, sueldo): | |
if sueldo[0].isdigit(): | |
self.__sueldo = sueldo[0] | |
else: | |
print "EL SUELDO DEBE SER UN DIGITO" | |
def getSueldo(self): | |
return self.__sueldo | |
# ------- PUESTO -------- | |
def setPuesto(self,empresa, puesto): | |
if puesto in self.getPuestos(): | |
if puesto == 'Presidente' and not empresa.hasPresidente(): | |
self.__puesto = puesto | |
return "FELICITACIONES ES EL NUEVO PRECIDENTE" | |
elif puesto != 'Presidente': | |
self.__puesto = puesto | |
return "PUESTO OTORGADO" | |
else: | |
return "LA EMPRESA YA TIENE PRECIDENTE" | |
else: | |
return "NO EXISTE EL PUESTO PRETENDIDO" | |
def getPuesto(self): | |
return self.__puesto if self.__puesto else "----" | |
def getPuestos(self): | |
return self.__puestos | |
# ------- ANTIGUEDAD ---- | |
def setAntiguedad(self, antiguedad): | |
if antiguedad[0].isdigit(): | |
self.__antiguedad = antiguedad[0] | |
else: | |
print "LA ANTIGUEDAD DEBE SER UN DIGITO" | |
def getAntiguedad(self): | |
return self.__antiguedad | |
def __str__(self): | |
return "%s - %s" % (self.__nombre,self.__dni) | |
class Empresa: | |
def __init__(self, nombre, descripcion): | |
self.__nombre= nombre | |
self.__descripcion = descripcion | |
self.__empleados = set() | |
# ------- NOMBRE ------- | |
def setNombre(self, nombre): | |
self.__nombre = reduce(lambda x,y: x+" "+y,nombre) | |
print "NOMBRE GUARDADO !!" | |
def getNombre(self): | |
return self.__nombre | |
# ------ DESCRIPCION --- | |
def setDescripcion(self, descripcion): | |
if type(descripcion) == type(""): | |
self.__descripcion = descripcion | |
else: | |
self.__descripcion = reduce(lambda y,x: y+" "+x,descripcion) | |
print "DESCRIPCION GUARDADA !!" | |
def getDescripcion(self): | |
return self.__descripcion | |
# ------ EMPLEADO ------ | |
def addEmpleado(self,empleado): | |
self.__empleados.add(empleado) | |
def deleteEmpleado(self, empleado): | |
self.__empleados.remove(empleado) | |
def getEmpleado(self,i): | |
empleados = list(self.__empleados) | |
return empleados[i] | |
def getEmpleadosPuestos(self): | |
return [ empleado.getPuesto() for empleado in self.__empleados] | |
def hasPresidente(self): | |
return 'Presidente' in self.getEmpleadosPuestos() | |
def findPresidente(self): | |
for empleado in self.__empleados: | |
if 'Presidente' == empleado.getPuesto(): | |
return empleado | |
return False | |
def getEmpleados(self): | |
return self.__empleados | |
def countEmpleados(self): | |
return len(self.__empleados) | |
def getEmpladoMoreOld(self): | |
# retorna el empleado con mas antiguedad | |
maxAntiguedad = 0 | |
maxEmpleado = None | |
for empleado in self.__empleados: | |
if maxAntiguedad < empleado.getAntiguedad(): | |
maxAntiguedad = empleado.getAntiguedad() | |
maxEmpleado = empleado | |
return maxEmpleado | |
def getEmpleadoByDni(self,dni): | |
for empleado in self.__empleados: | |
if empleado.getDni() == dni: | |
return empleado | |
return False | |
# ------- COMPARADORES ---- | |
def getSumSueldos(self): | |
result = 0 | |
for empleado in self.__empleados: | |
result += empleado.getSueldo() | |
return result | |
def compararEmpresa(self, empresa): | |
if self.getSumSueldos() > empresa.getSumSueldos(): | |
return self | |
else: | |
return empresa | |
# ------- FUSION ----- | |
def funsionarEmpresa(self, empresa): | |
presidenteA = self.findPresidente() | |
nombreA = self.getNombre() | |
descripcionA = self.getDescripcion() | |
presidenteB = empresa.findPresidente() | |
nombreB = empresa.getNombre() | |
descripcionB = empresa.getDescripcion() | |
if presidenteA and presidenteB: | |
if presidenteB.getAntiguedad() > presidenteA.getAntiguedad(): | |
presidenteA.setPuesto(self,'Gerente General') | |
self.setNombre("%s & %s" % (nombreB,nombreA)) | |
self.setDescripcion("%s.\n%s." % (descripcionB,descripcionA)) | |
else: | |
presidenteB.setPuesto(self,'Gerente General') | |
self.setNombre("%s & %s" % (nombreA,nombreB)) | |
self.setDescripcion("%s.\n%s." % (descripcionA,descripcionB)) | |
else: | |
print "UNA DE LAS EMPRESAS NO TIENE PRESIDENTE VERIFIQUE SUS NOMINAS" | |
self.__empleados = self.__empleados.union(empresa.getEmpleados()) | |
class Esso(Empresa): | |
def __init__(self): | |
Empresa.__init__(self,"esso","distribucion de hidrocarburos") | |
self.addEmpleado(Empleado("Richar",33,25,5000,4)) | |
self.addEmpleado(Empleado("Noemi",22,64,5000,3)) | |
self.addEmpleado(Empleado("Diego",11,17,4000,4)) | |
class Edersa(Empresa): | |
def __init__(self): | |
Empresa.__init__(self,"edersa","tendido electrico") | |
self.addEmpleado(Empleado("Juan",23,24,5000,4)) | |
self.addEmpleado(Empleado("Javier",33596925,33,2000,2)) | |
self.addEmpleado(Empleado("Checho",33,50,7000,10)) | |
class Main: | |
__empresas = set([Esso(),Edersa()]) | |
__empresa = None | |
__empleado = None | |
def __init__(self): | |
self.__commands = { | |
"ADD":self.addEmpresa, | |
"USE":self.useEmpresa, | |
"VETERANO":self.getVeterano, | |
"COMPARAR":self.getComparar, | |
"FUSIONAR":self.setFusion, | |
"SET":self.setEmpresa, | |
"EMPRESAS":self.getEmpresas, | |
"DELETE": self.deleteEmpresa, | |
# ----- EMPLEADOS ---- | |
"ADD_EMPLEADO":self.addEmpleado, | |
"GET_EMPLEADO":self.getEmpleado, | |
"SET_EMPLEADO":self.setEmpleado, | |
"DELETE_EMPLEADO":self.deleteEmpleado, | |
"EMPLEADOS":self.getEmpleados, | |
"AYUDA":self.ayuda, | |
"QUIT":quit, | |
} | |
print "Bienvenido al systema de gestion de empresas FUCKYOU" | |
while True: | |
if not self.__empresas: | |
print "aun no hay ninguna empresa definida" | |
self.addEmpresa("") | |
empresa = self.__empresa.getNombre() if self.__empresa else "-" | |
empleado = self.__empleado.getNombre() if self.__empleado else "-" | |
enter = raw_input("%s@%s>>" % (empleado,empresa)) | |
command = enter.split() | |
if len(command) > 1: | |
if self.__commands.has_key(command[0]): | |
self.__commands[command[0]](command[1:]) | |
else: | |
self.uknowCommandError(command[0]) | |
elif len(command) > 0: | |
if self.__commands.has_key(command[0]): | |
self.__commands[command[0]]() | |
else: | |
self.uknowCommandError(command[0]) | |
def ayuda(self): | |
global ayuda | |
print ayuda | |
def addEmpleado(self): | |
if self.__empresa: | |
msj = """ | |
Ingrese los empleados con sus dados separados por coma (,) sin espacios | |
NOMBRE,DNI,EDAD,SUELDO,ANTIGUEDAD | |
<<< para salir ingrese \q >>> | |
""" | |
print msj | |
enter = raw_input(">") | |
while enter != "\q": | |
datos = enter.split(",") | |
if len(datos)==5: | |
nombre = datos[0] | |
try: | |
dni = int(datos[1]) | |
edad = int(datos[2]) | |
sueldo = float(datos[3]) | |
antiguedad = int(datos[4]) | |
self.__empresa.addEmpleado(Empleado(nombre,dni,edad,sueldo,antiguedad)) | |
except: | |
print "DATOS MAL INGRESADOS INTENTE NUEVAMENTE" | |
else: | |
self.notArgumentsError() | |
enter = raw_input(">") | |
# ---- EMPLEADOS ------ | |
def getEmpleados(self): | |
if self.__empresa: | |
print " NOMBRE - DNI - EDAD - SUELDO - PUESTO - ANTIGUEDAD " | |
for e in self.__empresa.getEmpleados(): | |
print "%s%s%s$ %s%s%s" % (self.wrap(e.getNombre()), | |
self.wrap(e.getDni(),10), | |
self.wrap(e.getEdad(),6), | |
self.wrap(e.getSueldo(),9), | |
self.wrap(e.getPuesto(),20), | |
e.getAntiguedad() | |
) | |
else: | |
self.notEmpresaError() | |
def wrap(self, enter,num=15): | |
minLen = len(str(enter)) | |
wp = " "*num | |
return "%s%s" % (enter,wp[minLen:]) | |
def getEmpleado(self, enter= None): | |
if self.__empresa: | |
if enter: | |
empleado = self.__empresa.getEmpleadoByDni(int(enter[0])) | |
else: | |
empleado = None | |
print "DEBES INGRESAR EL DNI DEL EMPLEADO QUE QUIERES OBTENER" | |
if empleado: | |
self.__empleado = empleado | |
else: | |
self.notEmpresaError() | |
def setEmpleado(self, enter): | |
if self.__empleado: | |
if len(enter) > 1: | |
commands = { | |
"NOMBRE":self.__empleado.setNombre, | |
"DNI":self.__empleado.setDni, | |
"EDAD":self.__empleado.setEdad, | |
"SUELDO":self.__empleado.setSueldo, | |
"ANTIGUEDAD":self.__empleado.setAntiguedad, | |
"PUESTO":self.setPuesto | |
} | |
commands[enter[0]](enter[1:]) | |
elif enter[0] == "PUESTO": | |
self.setPuesto() | |
else: | |
self.notArgumentsError() | |
else: | |
self.notEmpleadoError() | |
def setPuesto(self, enter = None): | |
if self.__empresa: | |
if self.__empleado: | |
if enter: | |
enter = reduce(lambda x,y: x+" "+y,enter) | |
print self.__empleado.setPuesto(self.__empresa,enter) | |
else: | |
print self.__empleado.getPuestos() | |
enter = raw_input("Ingrese el puesto pretendido eligiendo uno de la lista\n>") | |
print self.__empleado.setPuesto(self.__empresa,enter) | |
else: | |
self.notEmpleadoError() | |
else: | |
self.notEmpresaError() | |
def deleteEmpleado(self, enter = None): | |
if self.__empresa: | |
if not enter: | |
empleado = self.__empleado | |
if empleado: | |
self.__empresa.deleteEmpleado(empleado) | |
self.__empleado = None | |
else: | |
self.notEmpleadoError() | |
else: | |
empleado = self.__empresa.getEmpleadoByDni(int(enter[0])) | |
if empleado: | |
self.__empresa.deleteEmpleado(empleado) | |
else: | |
print "El DNI del empleado no coincide con ninguno en la nomina de la empresa" | |
else: | |
self.notEmpresaError() | |
# ------ EMPRESAS ------- | |
def getEmpresa(self, nombre): | |
for empresa in self.__empresas: | |
if nombre == empresa.getNombre(): | |
return empresa | |
def useEmpresa(self, enter): | |
if enter: | |
enter = reduce(lambda x,y: x+" "+y,enter) | |
if self.getEmpresa(enter): | |
self.__empresa = self.getEmpresa(enter) | |
self.__empleado = None | |
else: | |
self.unknowEmpresaError() | |
def addEmpresa(self, enter = None): | |
msj = """ | |
Por fabor ingrese el nombre de una empresa | |
seguido de dos puntos (:) y un descriptivo: | |
<<< para salir ingrese \q >>> | |
""" | |
print msj | |
enter = raw_input(">") | |
while enter != "\q": | |
datos = enter.split(":") | |
if len(datos) > 1: | |
self.__empresas.add(Empresa(datos[0],datos[1])) | |
print "DATOS AÑADIDOS" | |
enter = raw_input(">") | |
def getEmpresas(self): | |
print "NOBMRE - CANT.EMPLEADOS -PRECIDENTE" | |
for empresa in self.__empresas: | |
presidente = empresa.findPresidente().getNombre() if empresa.findPresidente() else "----" | |
print "%s - %s - %s" % (empresa.getNombre(),empresa.countEmpleados(),presidente) | |
def getVeterano(self): | |
if self.__empresa: | |
empleado = self.__empresa.getEmpladoMoreOld() | |
print """ | |
NOMBRE Y DNI: %s | |
EDAD: %s | |
SUELDO: $ %s | |
PUESTO: %s | |
ANTIGUEDAD: %s | |
""" % (empleado,empleado.getEdad(),empleado.getSueldo(), | |
empleado.getPuesto(),empleado.getAntiguedad()) | |
def setEmpresa(self, enter): | |
if self.__empresa and enter: | |
commands = { | |
"NOMBRE":self.__empresa.setNombre, | |
"DESCRIPCION":self.__empresa.setDescripcion | |
} | |
if len(enter) > 1: | |
if commands.has_key(enter[0]): | |
commands[enter[0]](enter[1:]) | |
else: | |
self.uknowCommandError(enter[0]) | |
elif enter[0] == "DESCRIPCION": | |
self.setDescripcion() | |
else: | |
self.uknowCommandError(enter[0]) | |
else: | |
self.notEmpresaError() | |
def setFusion(self, enter): | |
if self.__empresa: | |
data = reduce(lambda x,y: x+" "+y,enter) | |
empresa = self.getEmpresa(data) | |
if empresa: | |
self.__empresa.funsionarEmpresa(empresa) | |
self.__empresas.remove(empresa) | |
else: | |
self.unknowEmpresaError(data) | |
else: | |
self.notEmpresaError() | |
def getComparar(self, enter): | |
if self.__empresa: | |
data = reduce(lambda x,y: x+" "+y,enter) | |
empresa = self.getEmpresa(data) | |
if empresa: | |
mayor = self.__empresa.compararEmpresa(empresa) | |
print "EMPRESA MAS GRANDE:",mayor.getNombre().upper() | |
print self.__empresa.getNombre(),self.__empresa.getSumSueldos() | |
print empresa.getNombre(),empresa.getSumSueldos() | |
else: | |
self.unknowEmpresaError(data) | |
else: | |
self.notEmpresaError() | |
def setDescripcion(self): | |
print "Ingrse la descripcion de la empresa %s " % self.__empresa.getNombre() | |
descripcion = raw_input(">") | |
self.__empresa.setDescripcion(descripcion) | |
def deleteEmpresa(self, enter): | |
if enter: | |
emp = enter[0] | |
else: | |
emp = self.__empresa.getNombre() | |
self.__empresa = None | |
self.__empleado = None | |
empresas = list(self.__empresas) | |
for empresa in empresas: | |
if empresa.getNombre() == emp: | |
self.__empresas.remove(empresa) | |
print "EMPRESA %s BORRADA" % emp | |
# ------- ERRORS ----- | |
def uknowCommandError(self,enter): | |
print "COMANDO DESCONOCIDO: <<<%s>>>" % enter | |
def unknowEmpresaError(self, enter): | |
print "EMPRESA <<<%s>>> DESCONOCIDA" % enter | |
def notArgumentsError(self): | |
print "FALTAN ARGUMENTOS PARA PODER EJECUTAR EL COMANDO" | |
def notEmpresaError(self): | |
print "NO SE ENCUENTRA DENTRO DE UNA EMPRESA" | |
def notEmpleadoError(self): | |
print "NO TIENE DEFINIDO UN EMPLEADO" | |
Main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment