! ===============================================
! Programa de ejemplo en Zero
! Pequeña aplicación de agenda
! ===============================================
object Persona
attribute + nombre = "Pepito perez"
attribute + edad = 50
attribute + telefono = "988310000"
method + putNombre ( n )
nombre = n
return
endMethod
method + putEdad ( ed )
isInstanceOf Int ed
jumpOnFalseTo else
edad = ed
jumpOnTrueTo fin
: else
throw ETypeMismatch
: fin
return
endMethod
method + putTelefono ( tlf )
telefono = tlf
return
endMethod
method + toString ( )
reference toret
toret = nombre
toret = toret.concat ( ": edad " )
toret = toret.concat ( edad.toString ( ) )
toret = toret.concat ( ", tlf: " )
toret = toret.concat ( telefono )
return toret
endMethod
endObject
object Agenda : Map
endObject
object AplicacionAgenda : ConsoleApplication
method + masPersonas ( )
reference nombre
reference edad
reference telefono
reference toret
System.console.write ( "Introduzca el nombre: " )
nombre = System.console.read ( )
System.console.write ( "Introduzca su edad: " )
edad = Int.parseString ( System.console.read ( ) )
System.console.write ( "Introduzca su teléfono: " )
telefono = System.console.read ( )
toret = Persona.copy ( "" )
toret.putNombre ( nombre )
toret.putEdad ( edad )
toret.putTelefono ( telefono )
Agenda.add ( nombre toret )
System.console.write ( nombre.concat ( " fue añadido a la agenda ... " ) )
System.console.lf ( )
System.console.lf ( )
return toret
System.console.write ( "La edad requiere un número." )
System.console.lf ( )
System.console.lf ( )
return Nothing
endMethod
method + buscarPersona ( )
reference nombrePersona
reference persona
System.console.write ( "Introduzca un nombre: " )
nombrePersona = System.console.read ( )
persona = Agenda.lookUp ( nombrePersona )
System.console.write ( persona )
System.console.lf ( )
System.console.lf ( )
return Nothing
System.console.write ( "No se encontró a esa persona." )
System.console.lf ( )
System.console.lf ( )
endMethod
method + doIt ( )
reference op
reference peticion
reference vectorOpciones = VectorInstance.copy ( "" )
reference opcionNoValida
reference numElementos
! Inicialización
vectorOpciones.add ( "1. Añadir persona a la agenda" )
vectorOpciones.add ( "2. Buscar persona en la agenda" )
vectorOpciones.add ( "3. Mostrar personas en la agenda" )
vectorOpciones.add ( "4. Salir" )
opcionNoValida = "Opción no válida."
peticion = "Introduzca opción: "
parent.prepare ( )
: Loop
! Mostrar menú
numElementos = Agenda.size ( )
System.console.lf ( )
vectorOpciones.process ( DisplayByConsoleProcessor )
System.console.lf ( )
System.console.lf ( )
System.console.write ( "Número de personas en la agenda: " )
System.console.write ( numElementos )
System.console.lf ( )
System.console.write ( peticion )
! Pedir opción
op = Int.parseString ( System.console.read ( ) )
System.console.lf ( )
! ¿Es la op final?
op.isEqualTo ( vectorOpciones.size ( ) )
jumpOnTrueTo fin
! ¿Es la op1?
op.isEqualTo ( 1 )
jumpOnTrueTo opcion1
! ¿Es la op2?
op.isEqualTo ( 2 )
jumpOnTrueTo opcion2
! ¿Es la op3?
op.isEqualTo ( 3 )
jumpOnTrueTo opcion3
:opcionInvalida
System.console.write ( opcionNoValida )
System.console.lf ( )
jumpOnTrueTo Loop
! Ejecutar cada opcion
:opcion1
__this.masPersonas ( )
jumpOnTrueTo Loop
:opcion2
__this.buscarPersona ( )
jumpOnTrueTo Loop
:opcion3
System.console.write ( "Personas en la agenda: " )
System.console.lf ( )
numElementos.isEqualTo ( 0 )
jumpOnTrueTo vacio
Agenda.process ( DisplayByConsoleProcessor )
jumpOnTrueTo Loop
:vacio
System.console.write ( "No hay personas en la agenda." )
System.console.lf ( )
jumpOnTrueTo Loop
:fin
System.console.write ( "Fin." )
System.console.lf ( )
return Nothing
isInstanceOf ETypeMismatch
jumpOnFalseTo errorIndefinido
System.console.write ( "Es necesario introducir un número." )
System.console.lf ( )
jumpOnTrueTo finExcep
:errorIndefinido
System.console.write ( "Ocurrió un error no esperado." )
System.console.lf ( )
:finExcep
return Nothing
endMethod
endObject