Mathematics">
Mundo". Se Trata de Un Programa Muy Básico Mediante El Cual Aprendes El
Mundo". Se Trata de Un Programa Muy Básico Mediante El Cual Aprendes El
Mundo". Se Trata de Un Programa Muy Básico Mediante El Cual Aprendes El
MI PRIMER JAVASCRIPT
Antes de empezar debes de crear una carpeta que será la carpeta que utilices
para ir guardando todos los ejercicios que vayas realizando durante todo el
libro. A la carpeta puedes llamarla Ejercicios.
Una vez abierto el terminal tienes que escribir el siguiente comando: “node
MiPrimerJavaScript.js” y presionar Enter. El programa se ejecutará:
La segunda forma de ejecución no es que sea más difícil, es que requiere de
un paso extra. En el menú principal de Visual Studio Code hay una opción
que se llama “Run” o “Ejecutar”, elige el submenú “Run without
debugging” o “Ejecutar sin depurar”:
Acto seguido Visual Studio Code te preguntará qué tiene que utilizar para
ejecutar el programa, selecciona la opción Node.js.
En este primer objetivo vamos a explicarte qué son las variables y las
constantes, cómo ponerles nombre y cómo declararlas en el código fuente.
Es un objetivo teórico pero esencial a la hora de programar y que
utilizaremos en el resto de los objetivos.
Conceptos teóricos
Variables
Las variables son datos que necesitas almacenar y utilizar en los programas
y que residen en la memoria del ordenador. Tienen las siguientes
características:
En JavaScript los nombres de las variables empiezan siempre por una letra
(mayúscula o minúscula) y pueden contener tantas letras (mayúsculas o
minúsculas) y números como necesites. A diferencia con otros lenguajes,
tienes que tener en cuenta que las letras minúsculas y las mayúsculas son
letras diferentes, una variable con el nombre edad será diferente a otra
llamada Edad.
let edad;
let nombre, apellidos;
edadUsuario = 36;
nombreUsuario = “Alfredo”;
Constantes
Las constantes son como las variables pero con una gran diferencia, que es
que la constante no puede cambiar de valor durante la ejecución del
programa.
const pi = 3.1416;
const velocidadLuz = 300000;
Ahora eres capaz de…
Definición de variables.
Definición de constantes.
Utilización del operador asignación.
OBJETIVO 2: MOSTRANDO INFORMACIÓN
console.log(TextoAMostrar);
Lo primero que tienes que hacer en el código fuente para poder utilizar el
paquete que instalamos en la fase anterior es incluirlo con la sentencia
siguiente:
Variable = prompt(TextoAMostrar);
Veámoslo en detalle:
Operadores aritméticos
Los operadores aritméticos son aquellos operadores que nos van a permitir
realizar operaciones aritméticas con los datos. JavaScript permite los
siguientes operadores aritméticos:
Veamos unos ejemplos:
resultadomultiplicacion = 8 * 4
coste = (6*11)-4
numerochucheriasporpersona = 50/4
El primer ejercicio de la fase consiste en realizar una suma, una resta, una
multiplicación, una división, un módulo y un exponente de dos números. El
código fuente es el siguiente:
let numero1 = 8;
let numero2 = 3;
let resultadosuma = numero1 + numero2;
let resultadoresta = numero1 - numero2;
let resultadomultiplicacion = numero1 * numero2;
let resultadodivision = numero1 / numero2;
let resultadomodulo = numero1 % numero2;
let resultadoexponente = numero1 ** numero2;
console.log("Número 1:", numero1);
console.log("Número 2:", numero2);
console.log("Resultado suma:",resultadosuma);
console.log("Resultado resta:",resultadoresta);
console.log("Resultado multiplicacion:",resultadomultiplicacion);
console.log("Resultado división:",resultadodivision);
console.log("Resultado módulo:",resultadomodulo);
console.log("Resultado exponente:",resultadoexponente);
parseInt(CadenaDeTexto)
let variable = 7;
console.log("Valor:", variable);
variable++;
console.log("Valor después del incremento:", variable);
variable--;
console.log("Valor después del decremento:", variable);
let numero1 = 8;
let numero2 = 3;
numero1 += numero2;
console.log("numero1+=numero2:",numero1);
numero1 = 8;
numero1 -= numero2;
console.log("numero1-=numero2:",numero1);
numero1 = 8;
numero1 *= numero2;
console.log("numero1*=numero2:",numero1);
numero1 = 8;
numero1 /= numero2;
console.log("numero1/=numero2:",numero1);
numero1 = 8;
numero1 %= numero2;
console.log("numero1%=numero2:",numero1);
numero1 = 8;
numero1 **= numero2;
console.log("numero1**=numero2:",numero1);
parseFloat(CadenaDeTexto)
CadenaDeTexto.Método(Parámetros);
Veámoslos en detalle:
El sexto objetivo del libro consiste en el aprendizaje y uso del tipo de datos
fecha en JavaScript.
Tienes que tener en cuenta que para los meses en JavaScript se utilizan los
valores de 0 a 11, es decir, Enero será el 0, Febrero será el 1, etc, hasta
llegar a Diciembre que será el 11.
Para mostrar una fecha por pantalla hay que utilizar el método toString().
Existe un método que permite mostrar la fecha como cadena de texto
omitiendo la corrección horaria y mostrar la fecha UTC (fecha sin
corrección), el método es toUTCString().
Booleanos
El tipo de datos booleano es un tipo de datos que sólo puede tomar dos
posibles valores: True (verdadero o 1) o False (falso o 0).
Operadores relacionales
7<5
9==3
2<12
88>=4
Operadores lógicos
Fíjate que los valores true y false son introducidos como valores
propiamente dicho, no como cadenas de texto entre comillas; ésto se debe a
que dichos valores son parte del lenguaje de programación.
En este apartado vamos a explicarte la teoría sobre qué son los bloques de
instrucciones, la sentencia if y la sentencia switch.
Bloques de instrucciones
Sentencia IF
if (Condición)
BloqueInstrucciones
else
BloqueInstrucciones
Veámoslo en detalle:
numero1 = ValorAleatorio
numero2 = ValorAleatorio
if numero1>numero2
BloqueInstrucciones1
else
BloqueInstrucciones2
Por último, indicarte que dentro de los bloques de instrucciones que están
dentro de los posibles caminos es posible incluir nuevas sentencias if.
Sentencia SWITCH
switch(Variable)
case X:
BloqueSentencias
break
case Y:
BloqueSentencias
brea;
default:
BloqueSentencias
break
vocal = CaracterAleatorio
switch(vocal)
case 'a':
SentenciasA()
break
case 'e':
SentenciasE()
break
case 'i':
SentenciasI()
break
case 'o':
SentenciasO()
break
case 'u':
SentenciasU()
break
default:
SentenciasNoVocal()
break
if(numero>=10)
{
console.log("¡El número que has escrito es mayor o igual que 10!")
}
console.log("Has escrito el número", numero);
if(numero>=10)
{
console.log("¡El número que has escrito es mayor o igual que 10!")
}
else
{
console.log("¡El número que has escrito es menor que 10!")
}
console.log("Has escrito el número", numero);
Bucle
Cada tipo de bucle especifica los puntos anteriores de forma diferente, pero
con el mismo significado teórico.
WHILE
while (Condición)
BloqueInstrucciones
FOR
El tipo de bucle for está recomendado para contextos en los que se sabe el
número de iteraciones exactas que se van a dar en su ejecución, es decir, es
un bucle que busca ejecutar un conjunto de instrucciones de forma
repetitiva hasta llegar al número máximo de iteraciones definidas.
Los bucles for tienen la siguiente sintaxis:
DO
do
BloqueInstrucciones
while (Condición)
let i = 1;
while(i<10)
{
console.log(i);
i++;
}
let valor = 0;
let fin = false;
while(!fin)
{
valor = parseInt(prompt("Introduzca un número mayor que 100: "));
if(valor > 100)
{
fin = true;
}
else
{
console.log("El valor introducido no es mayor que 100");
}
}
console.log("Fin del programa");
for(let i = 1; i<10;i++)
{
console.log(i);
}
let valor = 0;
do
{
valor = parseInt(prompt("Introduzca un número mayor que 100: "));
if(valor <= 100)
{
console.log("El valor introducido no es mayor que 100");
}
} while (valor<=100)
console.log("Fin del programa");
La cuarta fase de este objetivo trata de aprender a usar bucles anidados, que
consisten en la utilización de bucles como parte de los bloques de
instrucciones de otros bucles. El bucle que se encuentra dentro de otro bucle
se suele llamar bucle interno o interior, mientras que el bucle que contiene
un bucle interior se llama bucle externo o exterior. Puedes tener tantos
niveles de anidamiento como necesites, es decir, un bucle dentro de otro
bucle, que a su vez esté dentro de otro bucle que está dentro de otro bucle,
etc.
El primer ejercicio de la fase consiste en ejecutar dos bucles for que están
anidados. Cada iteración mostrará la iteración en la que se encuentra cada
bucle para que puedas observar el flujo del mismo (item1 indica la iteración
del primer bucle e item2 la del segundo).
for(let i = 0; i<3;i++)
{
for(let j = 0; j<5;j++)
{
console.log("item1 = %s, item2 = %s",i,j);
}
}
let i = 0;
while(i<3)
{
for (let j = 0; j < 5; j++)
{
console.log("item1 = %s, item2 = %s", i, j);
}
i++;
}
let i = 0;
let j = 0;
while (i < 3)
{
j = 0;
while(j<5)
{
console.log("item1 = %s, item2 = %s", i, j);
j++;
}
i++;
}
console.log("************\nCALCULADORA\n************");
console.log("Menú:");
console.log("1.- Sumar");
console.log("2.- Restar");
console.log("3.- Multiplicación");
console.log("4.- División");
console.log("5.- Salir");
Dentro del bucle while está la lectura de la opción elegida por el usuario y
la estructura switch, que dependiendo de la operación seleccionada por el
usuario tomará un camino u otro.
Funciones
Variable = NombreFuncion(parámetros);
function Saludar()
{
console.log("¡Hola Time of Software!");
}
Saludar();
function EsMayorQueCero(valor)
{
if (valor > 0)
console.log("El valor introducido es mayor que cero");
else
console.log("El valor introducido no es mayor que cero");
}
function SolicitarNumero()
{
let valor = parseInt(prompt("Introduzca un número: "));
return valor;
}
function Sumar()
{
let valor1 = SolicitarNumero();
let valor2 = SolicitarNumero();
console.log("Resultado suma: %s", (valor1 + valor2));
}
Sumar();
Utilización de funciones.
Utilización de funciones anidadas.
PROYECTO INTERMEDIO 2 Descargado en: www.detodoprogramacion.org
Una vez tengas las funciones creadas, tienes que crear el código fuente para
mostrar las opciones y la sentencia de invocación de la función
Calculadora. El código fuente quedaría así:
function Sumar()
{
let sumando1 = parseInt(prompt("Inserte primer sumando: "));
let sumando2 = parseInt(prompt("Inserte segundo sumando: "));
console.log("Resultado de la suma: " + (sumando1 + sumando2));
}
function Restar()
{
let minuendo = parseInt(prompt("Inserte minuendo: "));
let sustraendo = parseInt(prompt("Inserte sustraendo: "));
console.log("Resultado de la resta: " + (minuendo - sustraendo));
}
function Multiplicar()
{
let multiplicando = parseInt(prompt("Inserte multiplicando: "));
let multiplicador = parseInt(prompt("Inserte multiplicador: "));
console.log("Resultado de la multiplicación: " + (multiplicando * multiplicador));
}
function Dividir()
{
let dividendo = parseInt(prompt("Inserte dividendo: "));
let divisor = parseInt(prompt("Inserte divisor: "));
console.log("Resultado de la division: " + (dividendo / divisor));
}
function Calculadora()
{
let fin = false;
let opcion = 0;
while (!fin)
{
opcion = parseInt(prompt("Opción: "));
switch (opcion)
{
case 1:
Sumar();
break;
case 2:
Restar();
break;
case 3:
Multiplicar();
break;
case 4:
Dividir();
break;
case 5:
fin = true;
break;
}
}
}
console.log("************\nCALCULADORA\n************");
console.log("Menú:");
console.log("1.- Sumar");
console.log("2.- Restar");
console.log("3.- Multiplicación");
console.log("4.- División");
console.log("5.- Salir");
Calculadora();
console.log("Programa finalizado");
En la primera fase del objetivo vas a aprender las nociones básicas de los
arrays.
Array[Elemento]
La primera sentencia splice añadirá los dos elementos a partir del índice 1 y
sin borrar elementos. La segunda sentencia añadirá los dos elementos
borrando un elemento (Pez). La tercera sentencia eliminará tres elementos
(Caballo, Rana y Periquito).
for(VariableControl in Array)
{
BloqueCódigo;
}
En el bucle, la variable de control irá tomando los diferentes valores de los
índices de los elementos que lo componen. Utilizando la variable de control
podrás acceder a los elementos.
for(Variable of Array)
{
BloqueCódigo;
}
Utilización de arrays.
Utilización de métodos propios de arrays.
OBJETIVO 12: PROGRAMACIÓN ORIENTADA A OBJETOS
Cambio de paradigma
Piensa ahora en el coche de antes, la clase coche podría tener atributos tales
como número de marchas, número de asientos, cilindrada... y podría
realizar las operaciones tales como subir marcha, bajar marcha, acelerar,
frenar, encender el intermitente… Un objeto es un modelo de coche
concreto.
Encapsulación
Los atributos y métodos que componen una clase pueden ser de dos tipos:
Para poder encapsular los atributos lo que se tiene que hacer es definirlos
como privados y generar un método público en la clase para poder acceder
a ellos. De esta forma, únicamente son accesibles de forma directa los
atributos por la clase, mientras que el acceso a los mismos por elementos
externos a la clase se deberá de hacer utilizando dichos métodos públicos.
Composición
Cuando hablemos de composición tienes que pensar que entre las dos clases
existe una relación del tipo “tiene un”.
Herencia
Cuando hablemos de herencia tienes que pensar que entre las dos clases
existe una relación del tipo “es un”.
Sintaxis en JavaScript
class NombreClase {
constructor(ParámetrosConstructor) { BloqueCódigoConstructor; }
método1(Parámetros1) { BloqueCódigo1; }
método2(Parámetros2) { BloqueCódigo2; }
}
Veámosla en detalle:
class Punto
{
constructor(X, Y)
{
this.X = X;
this.Y = Y;
}
}
class Punto
{
constructor(X, Y)
{
this.X = X;
this.Y = Y;
}
mostrarPunto()
{
console.log("El punto es (%s, %s)", this.X, this.Y);
}
}
get Atributo()
{
return this.NombreAtributo;
}
Veámosla en detalle:
set Atributo(valor)
{
this.NombreAtributo = valor;
}
Veámosla en detalle:
class Punto
{
constructor(X, Y)
{
this._X = X;
this._Y = Y;
}
mostrarPunto()
{
console.log("El punto es (%s, %s)", this.X, this.Y);
}
get X()
{
return this._X;
}
set X(nuevaX)
{
this._X = nuevaX;
}
get Y()
{
return this._Y;
}
set Y(nuevaY)
{
this._Y = nuevaY;
}
}
class Punto
{
constructor(X, Y)
{
this._X = X;
this._Y = Y;
}
mostrarPunto()
{
console.log("(%s, %s)", this.X, this.Y);
}
get X()
{
return this._X;
}
set X(nuevaX)
{
this._X = nuevaX;
}
get Y()
{
return this._Y;
}
set Y(nuevaY)
{
this._Y = nuevaY;
}
}
class Triangulo
{
constructor(punto1, punto2, punto3)
{
this._punto1 = punto1;
this._punto2 = punto2;
this._punto3 = punto3;
}
get Punto1()
{
return this._punto1;
}
set Punto1(punto1)
{
this._punto1 = punto1;
}
get Punto2()
{
return this._punto2;
}
set Punto2(punto2)
{
this._punto2 = punto2;
}
get Punto3()
{
return this._punto3;
}
set Punto3(punto3)
{
this._punto3 = punto3;
}
MostrarTriangulo()
{
console.log("--- Triángulo ---")
this._punto1.mostrarPunto();
this._punto2.mostrarPunto();
this._punto3.mostrarPunto();
console.log(" ------------------")
}
}
let p1 = new Punto(3, 4);
let p2 = new Punto(6, 8);
let p3 = new Punto(9, 2);
let triangulo = new Triangulo(p1, p2, p3);
triangulo.MostrarTriangulo();
p1.X = 4;
p2.Y = 1;
p3.X = 5;
p3.Y = 5;
triangulo.Punto1 = p1;
triangulo.Punto2 = p2;
triangulo.Punto3 = p3;
triangulo.MostrarTriangulo();
class Electrodomestico
{
constructor()
{
this._Encendido = false;
this._Tension = 220;
}
Encender() { this._Encendido = true; }
Apagar() { this._Encendido = false; }
EstaEncendido(){ return this._Encendido; }
get Tension(){ return this._Tension; }
set Tension(tension){ this._Tension = tension;}
}
class Electrodomestico
{
constructor(encendido, tension)
{
this._Encendido = encendido;
this._Tension = tension;
}
Encender() { this._Encendido = true; }
Apagar() { this._Encendido = false; }
EstaEncendido(){ return this._Encendido; }
get Tension(){ return this._Tension; }
set Tension(tension){ this._Tension = tension;}
}
class Electrodomestico
{
constructor(encendido, tension)
{
this._Encendido = encendido;
this._Tension = tension;
}
Encender() { this._Encendido = true; }
Apagar() { this._Encendido = false; }
EstaEncendido(){ return this._Encendido; }
get Tension(){ return this._Tension; }
set Tension(tension){ this._Tension = tension;}
}
Definición de clases.
Utilización de objetos.
Utilización de la composición de clases.
Utilización de la herencia de clases.
OBJETIVO 13: CONTROL DE EXCEPCIONES
En este apartado vamos a explicarte los conceptos teóricos que tienes que
conocer para trabajar con excepciones.
Excepciones
try
BloqueInstruccionesPrograma
catch
BloqueInstruccionesError:
finally
BloqueCodigoFinally
function Sumar()
{
let sumando1 = parseInt(prompt("Inserte primer sumando: "));
let sumando2 = parseInt(prompt("Inserte segundo sumando: "));
console.log("Resultado de la suma: " + (sumando1 + sumando2));
}
Smar();
function Sumar()
{
let sumando1 = parseInt(prompt("Inserte primer sumando: "));
let sumando2 = parseInt(prompt("Inserte segundo sumando: "));
console.log("Resultado de la suma: " + (sumando1 + sumando2));
}
try
{
Smar();
}
catch
{
console.log("ERROR: Se ha producido un error")
}
function Sumar()
{
let sumando1 = parseInt(prompt("Inserte primer sumando: "));
let sumando2 = parseInt(prompt("Inserte segundo sumando: "));
console.log("Resultado de la suma: " + (sumando1 + sumando2));
}
try
{
Smar();
}
catch
{
console.log("ERROR: Se ha producido un error")
}
finally
{
console.log("Programa finalizado")
}
function Sumar()
{
let sumando1 = parseInt(prompt("Inserte primer sumando: "));
let sumando2 = parseInt(prompt("Inserte segundo sumando: "));
console.log("Resultado de la suma: " + (sumando1 + sumando2));
}
try
{
Smar();
}
catch (e)
{
console.log("ERROR: %s", e.message)
}
finally
{
console.log("Programa finalizado")
}
throw CadenaTexto;
function SolicitarNumero()
{
let numero = parseInt(prompt("Inserte número entre 0 y 10: "));
if(isNaN(numero)) throw "El valor introducido no es un número";
if(numero > 10) throw "Número muy grande";
if(numero < 0) throw "Número muy pequeño";
return numero;
}
try
{
console.log("Número introducido: %s", SolicitarNumero());
}
catch (e)
{
console.log("ERROR: %s", e)
}
finally
{
console.log("Programa finalizado")
}
Time of Software
http://www.timeofsoftware.com
Aprende JavaScript en un fin de semana
Aprende C# en un fin de semana
Aprende Python en un fin de semana
Aprende Arduino en un fin de semana
const fs = require('fs');
Veámoslo en detalle:
datosLeidos: variable o constante que almacenará el texto leído
con el método.
RutaFichero: cadena de texto que especifica la ruta en la que se
encuentra el fichero en el ordenador.
Codificación: cadena de texto que especifica la codificación del
fichero, en el libro utilizaremos únicamente utf8.
const fs = require('fs');
const fs = require('fs');
try
{
fs.statSync('fichero.txt')
console.log("--- El archivo existe ---");
const datos = fs.readFileSync('fichero.txt', 'utf8');
console.log(datos);
}
catch(e)
{
console.log("ERROR: %s",e.message);
}
writeFileSync(RutaFichero, CadenaTexto);
var fs = require('fs');
fs.writeFileSync("nuevo.txt", cadena);
console.log("El archivo fue creado correctamente");
Para escribir al final del fichero hay que añadir como parámetro lo
siguiente: {flag: "a+"}. De esta forma estaremos indicándole al método que
escriba al final del fichero en caso de que el fichero exista en vez de
reemplazar el contenido de este.
var fs = require('fs');
En este apartado vamos a explicarte el código fuente del proyecto con cada
uno de sus componentes y realizaremos una ejecución de éste para que veas
cómo funciona.
Clase Persona
class Persona
{
constructor()
{
this._Nombre = "";
this._Apellidos = "";
this._FechaNacimiento = "";
}
get Nombre() { return this._Nombre; }
get Apellidos() { return this._Apellidos; }
get FechaNacimiento() { return this._FechaNacimiento; }
set Nombre(nombre) { this._Nombre = nombre; }
set Apellidos(apellidos) { this._Apellidos = apellidos; }
set FechaNacimiento(fechanacimiento) { this._FechaNacimiento = fechanacimiento; }
}
module.exports = Persona;
Clase Dirección
class Direccion
{
constructor()
{
this._Calle = "";
this._Piso = "";
this._Ciudad = "";
this._CodigoPostal = "";
}
get Calle() { return this._Calle; }
get Piso() { return this._Piso; }
get Ciudad() { return this._Ciudad; }
get CodigoPostal() { return this._CodigoPostal; }
set Calle(calle) { this._Calle = calle; }
set Piso(piso) { this._Piso = piso; }
set Ciudad(ciudad) { this._Ciudad = ciudad; }
set CodigoPostal(codigopostal) { this._CodigoPostal = codigopostal; }
}
module.exports = Direccion;
Clase Teléfono
class Telefono
{
constructor()
{
this._TelefonoMovil = "";
this._TelefonoFijo = "";
this._TelefonoTrabajo = "";
}
get TelefonoMovil() { return this._TelefonoMovil; }
get TelefonoFijo() { return this._TelefonoFijo; }
get TelefonoTrabajo() { return this._TelefonoTrabajo; }
set TelefonoMovil(telefonomovil) { this._TelefonoMovil = telefonomovil; }
set TelefonoFijo(telefonofijo) { this._TelefonoFijo = telefonofijo; }
set TelefonoTrabajo(telefonotrabajo) { this._TelefonoTrabajo = telefonotrabajo; }
}
module.exports = Telefono;
Clase Contacto
La clase contacto es una clase que tiene un atributo de la clase Persona, otro
de la clase Dirección y otro de la clase Teléfono. Para no declararlos como
públicos y permitir que un contacto se vea como un único ente a la hora de
programar, se han definido todos los métodos que tienen esas clases y se
redirige a sus métodos de forma interna en la clase contacto.
class Contacto
{
constructor()
{
this._Persona = new Persona();
this._Direccion = new Direccion();
this._Telefono = new Telefono();
this._Email = "";
}
MostrarContacto()
{
console.log("----- Contacto ----- ");
console.log("Nombre: " + this._Persona.Nombre);
console.log("Apellidos: " + this._Persona.Apellidos);
console.log("Fecha de nacimiento:" + this._Persona.FechaNacimiento);
console.log("Teléfono móvil: " + this._Telefono.TelefonoMovil);
console.log("Teléfono fijo: " + this._Telefono.TelefonoFijo);
console.log("Teléfono trabajo: " + this._Telefono.TelefonoTrabajo);
console.log("Calle: " + this._Direccion.Calle);
console.log("Piso: " + this._Direccion.Piso);
console.log("Ciudad: " + this._Direccion.Ciudad);
console.log("Código postal: " + this._Direccion.CodigoPostal);
console.log("Email: " + this._Email);
console.log(" --------------------- ");
}
}
module.exports = Contacto;
Clase Agenda
const fs = require('fs');
const Contacto = require("./contacto.js");
class Agenda
{
constructor(path)
{
this._Path = path;
this._ListaContactos = new Array();
}
CargarContactos()
{
try
{
fs.statSync(this._Path)
if(cadenas.length > 0)
{
for (let cad of cadenas)
{
let datos = cad.split("#");
if(datos.length == 11)
{
let contacto = new Contacto();
contacto.Nombre = datos[0];
contacto.Apellidos = datos[1];
contacto.FechaNacimiento = datos[2];
contacto.TelefonoMovil = datos[3];
contacto.TelefonoFijo = datos[4];
contacto.TelefonoTrabajo = datos[5];
contacto.Calle = datos[6];
contacto.Piso = datos[7];
contacto.Ciudad = datos[8];
contacto.CodigoPostal = datos[9];
contacto.Email = datos[10];
this._ListaContactos.push(contacto);
}
}
}
CrearNuevoContacto(contacto)
{
this._ListaContactos.push(contacto);
}
GuardarContactos()
{
try
{
let cadena = "";
for(let contacto of this._ListaContactos)
{
cadena = cadena.concat(contacto.Nombre + "#");
cadena = cadena.concat(contacto.Apellidos + "#");
cadena = cadena.concat(contacto.FechaNacimiento + "#");
cadena = cadena.concat(contacto.TelefonoMovil + "#");
cadena = cadena.concat(contacto.TelefonoFijo + "#");
cadena = cadena.concat(contacto.TelefonoTrabajo + "#");
cadena = cadena.concat(contacto.Calle + "#");
cadena = cadena.concat(contacto.Piso + "#");
cadena = cadena.concat(contacto.Ciudad + "#");
cadena = cadena.concat(contacto.CodigoPostal + "#");
cadena = cadena.concat(contacto.Email + "\n");
}
fs.writeFileSync(this._Path, cadena);
console.log("INFO: Contactos guardados correctamente.");
return true;
}
catch(ex)
{
console.log("ERROR: " + ex.Message);
}
return false;
}
MostrarAgenda()
{
console.log("########## AGENDA ##########");
console.log("Número de contactos: %s", this._ListaContactos.length);
for(let i of this._ListaContactos)
{
i.MostrarContacto();
}
console.log("############################");
BuscarContactosPorNombre(nombre)
{
let listaEncontrados = new Array();
for(let contacto of this._ListaContactos)
{
if(contacto.Nombre==nombre)
listaEncontrados.push(contacto);
}
return listaEncontrados;
}
BuscarContactosPorTelefono(telefono)
{
let listaEncontrados = new Array();
for (let contacto of this._ListaContactos)
{
if (contacto.TelefonoMovil == telefono
|| contacto.TelefonoFijo == telefono
|| contacto.TelefonoTrabajo == telefono)
listaEncontrados.push(contacto);
}
return listaEncontrados;
}
BorrarContactosPorNombre(nombre)
{
let listaFinal = new Array();
for (let contacto of this._ListaContactos)
{
if (!(contacto.Nombre == nombre))
listaFinal.push(contacto);
}
console.log("INFO: Se han borrado %s contactos.", (this._ListaContactos.length -
listaFinal.length));
this._ListaContactos = listaFinal;
}
BorrarContactosPorTelefono(telefono)
{
let listaFinal = new Array();
for (let contacto of this._ListaContactos)
{
if (!(contacto.TelefonoMovil == telefono
|| contacto.TelefonoFijo == telefono
|| contacto.TelefonoTrabajo == telefono))
listaFinal.push(contacto);
}
console.log("INFO: Se han borrado %s contactos.", (this._ListaContactos.length -
listaFinal.length));
this._ListaContactos = listaFinal;
}
}
module.exports = Agenda;
Programa
El fichero contiene el programa principal del proyecto junto con una serie
de funciones que son las siguientes:
function ObtenerOpcion(texto)
{
let leido = false;
let valorLeido = 0;
while(!leido)
{
try
{
valorLeido = parseInt(prompt(texto));
leido = true;
}
catch
{
console.log("ERROR: Tienes que introducir un número.");
}
}
return valorLeido;
}
function MostrarMenu()
{
console.log("--- Menú ---");
console.log("1.- Mostrar contactos");
console.log("2.- Buscar contactos");
console.log("3.- Crear contacto nuevo");
console.log("4.- Borrar contactos");
console.log("5.- Guardar contactos");
console.log("6.- Salir");
}
function BuscarContactos()
{
console.log("Buscar contactos: ");
console.log("1.- Por nombre");
console.log("2.- Por teléfono");
console.log("3.- Volver");
let finBuscar = false;
while (!finBuscar)
{
let opcion = ObtenerOpcion("Opción: ");
switch (opcion)
{
case 1:
let nombre = prompt("Introduzca el nombre a buscar: ");
let encontradosNombre = AgendaContactos.BuscarContactosPorNombre(nombre);
if (encontradosNombre.length > 0)
{
console.log("########## CONTACTOS ENCONTRADOS ##########");
for (contacto of encontradosNombre)
contacto.MostrarContacto();
console.log("###########################################");
}
else
console.log("INFO: No se han encontrado contactos con ese nombre.");
finBuscar = true;
break;
case 2:
let telefono = prompt("Introduzca el teléfono a buscar: ");
let encontradosTelefono = AgendaContactos.BuscarContactosPorTelefono(telefono);
if (encontradosTelefono.length > 0)
{
console.log("########## CONTACTOS ENCONTRADOS ##########");
for (contacto of encontradosTelefono)
contacto.MostrarContacto();
console.log("###########################################");
}
else
console.log("INFO: No se han encontrado contactos con ese teléfono.");
finBuscar = true;
break;
case 3:
finBuscar = true;
break;
}
}
}
function ProcesoCrearContactos()
{
let contacto = new Contacto();
contacto.Nombre = prompt("Introduzce el nombre: ");
contacto.Apellidos = prompt("Introduzce los apellidos: ");
contacto.FechaNacimiento = prompt("Introduzce la fecha de nacimiento: ");
contacto.TelefonoMovil = prompt("Introduzce el teléfono móvil: ");
contacto.TelefonoFijo = prompt("Introduzce el teléfono fijo: ");
contacto.TelefonoTrabajo = prompt("Introduzce el teléfono del trabajo: ");
contacto.Calle = prompt("Introduzce la calle: ");
contacto.Piso = prompt("Introduzce el piso: ");
contacto.Ciudad = prompt("Introduzce la ciudad: ");
contacto.CodigoPostal = prompt("Introduzce el código postal: ");
contacto.Email = prompt("Introduzce el email: ");
AgendaContactos.CrearNuevoContacto(contacto);
}
function BorrarContacto()
{
console.log("Buscar contactos a borrar por: ");
console.log("1.- Por nombre");
console.log("2.- Por teléfono");
console.log("3.- Volver");
let finBuscar = false;
while (!finBuscar)
{
let opcion = ObtenerOpcion("Opción: ");
switch (opcion)
{
case 1:
let nombre = prompt("Introduzca el nombre: ");
AgendaContactos.BorrarContactosPorNombre(nombre);
finBuscar = true;
break;
case 2:
let telefono = prompt("Introduzca el teléfono: ");
AgendaContactos.BorrarContactosPorTelefono(telefono);
finBuscar = true;
break;
case 3:
finBuscar = true;
break;
}
}
}
let AgendaContactos = new Agenda("Agenda.txt");
if (!AgendaContactos.CargarContactos())
console.log("ERROR: No se pueden cargar los contactos del fichero.");
let fin = false;
while(!fin)
{
MostrarMenu();
switch(ObtenerOpcion("Opción: "))
{
case 1:
AgendaContactos.MostrarAgenda();
break;
case 2:
BuscarContactos();
break;
case 3:
ProcesoCrearContactos();
break;
case 4:
BorrarContacto();
break;
case 5:
AgendaContactos.GuardarContactos();
break;
case 6:
fin = true;
break;
}
}
console.log("FIN DEL PROGRAMA");
Ejecución
http://timeofsoftware.com/aprendejavascript/
DETODOPROGRAMACION.ORG
www.detodoprogramacion.org
www.detodopython.com
www.gratiscodigo.com