primer commit

This commit is contained in:
Isidoro Nevares Martín 2025-10-09 14:18:02 +02:00
commit 2f038f639a
15 changed files with 669 additions and 0 deletions

10
.classpath Normal file
View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER">
<attributes>
<attribute name="module" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" path="src"/>
<classpathentry kind="output" path="bin"/>
</classpath>

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
/bin/
*.class

17
.project Normal file
View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>aadd_act1_6</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

View File

@ -0,0 +1,2 @@
eclipse.preferences.version=1
encoding/<project>=UTF-8

View File

@ -0,0 +1,11 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.targetPlatform=24
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=24
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
org.eclipse.jdt.core.compiler.release=enabled
org.eclipse.jdt.core.compiler.source=24

View File

@ -0,0 +1,82 @@
package es.palomafp.aadd.inm;
import java.util.List;
import es.palomafp.aadd.inm.dao.ICicloDAO;
import es.palomafp.aadd.inm.dao.IFamiliaProfesionalDAO;
import es.palomafp.aadd.inm.dao.impl.CicloDao;
import es.palomafp.aadd.inm.dao.impl.FamiliaProfesionalDaoCSV;
import es.palomafp.aadd.inm.vo.Ciclo;
import es.palomafp.aadd.inm.vo.FamiliaProfesional;
/**
*
* GestorFormacion: Clase que se encarga de gestionar Formación (Familias,
* Grados y Ciclos)
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class GestorFormacion {
public static void main(String[] args) {
String operacion = args[0]; // L: Listar, C: Consultar, I: Insertar, B: Borrar, M: Modificar
String parametro1 = args[1];
String parametro2 = args[2];
// Se declaran las variables como Interfaces y se construyen como
// implementaciones.
IFamiliaProfesionalDAO iFamiliaProfesionalDAO = new FamiliaProfesionalDaoCSV();
switch (operacion) {
case "L":
List<FamiliaProfesional> listaFamilias = iFamiliaProfesionalDAO.obtenerListaFamiliasProfesionales();
System.out.println(listaFamilias);
break;
case "C": {
FamiliaProfesional familiaProfesional = iFamiliaProfesionalDAO.obtenerFamiliaProfesional(parametro1);
System.out.println(familiaProfesional);
break;
}
case "I": {
FamiliaProfesional familiaProfesional = iFamiliaProfesionalDAO.obtenerFamiliaProfesional(parametro1);
// Si el código existe en el fichero se lanza mensaje
if (familiaProfesional != null) {
System.out.println("El código de familia profesional ya existe.");
} else { // Inserción
familiaProfesional = new FamiliaProfesional();
familiaProfesional.setCodigo(parametro1);
familiaProfesional.setNombre(parametro2);
iFamiliaProfesionalDAO.insertarFamiliaProfesional(familiaProfesional);
}
break;
}
case "B": {
iFamiliaProfesionalDAO.eliminarFamiliaProfesional(parametro1);
break;
}
case "M": {
FamiliaProfesional familiaProfesional = new FamiliaProfesional();
familiaProfesional.setCodigo(parametro1);
familiaProfesional.setNombre(parametro2);
iFamiliaProfesionalDAO.actualizarFamiliaProfesional(familiaProfesional);
break;
}
case "1": {
ICicloDAO iCicloDAO = new CicloDao();
List<Ciclo> listaCiclos = iCicloDAO.obtenerListaCiclosPorFamiliaGrado(parametro1, parametro2);
for (Ciclo ciclo : listaCiclos) {
String textoImprimir = "El ciclo %s incluido en la familia de %s es un %s de la categoría %s";
textoImprimir = String.format(textoImprimir, ciclo.getDescripcion(), ciclo.getFamilia().getNombre(),
ciclo.getGrado().getNombre(), ciclo.getGrado().getCategoria());
System.out.println(textoImprimir);
}
break;
}
}
}
}

View File

@ -0,0 +1,22 @@
package es.palomafp.aadd.inm.dao;
import java.util.List;
import es.palomafp.aadd.inm.vo.Ciclo;
/**
*
* ICicloDAO: Interfaz que contiene las operaciones a realizar sobre un Ciclo
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public interface ICicloDAO {
Ciclo obtenerCiclo(String codigoCiclo);
List<Ciclo> obtenerListaCiclosPorFamiliaGrado(String codigoFamilia, String codigoGrado);
}

View File

@ -0,0 +1,24 @@
package es.palomafp.aadd.inm.dao;
import java.util.List;
import es.palomafp.aadd.inm.vo.FamiliaProfesional;
/**
*
* IFamiliaProfesionalDAO: Interfaz que contiene las operaciones a realizar
* sobre una Familia Profesional.
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public interface IFamiliaProfesionalDAO {
FamiliaProfesional obtenerFamiliaProfesional(String codigoFamilia);
List<FamiliaProfesional> obtenerListaFamiliasProfesionales();
void insertarFamiliaProfesional(FamiliaProfesional familiaProfesional);
void eliminarFamiliaProfesional(String codigoFamiliia);
void actualizarFamiliaProfesional(FamiliaProfesional familiaProfesional);
}

View File

@ -0,0 +1,17 @@
package es.palomafp.aadd.inm.dao;
import es.palomafp.aadd.inm.vo.Grado;
/**
*
* IGradoDAO: Interfaz que contiene las operaciones a realizar sobre un Grado.
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public interface IGradoDAO {
Grado obtenerGrado(String codigoGrado);
}

View File

@ -0,0 +1,86 @@
package es.palomafp.aadd.inm.dao.impl;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import es.palomafp.aadd.inm.dao.ICicloDAO;
import es.palomafp.aadd.inm.dao.IFamiliaProfesionalDAO;
import es.palomafp.aadd.inm.dao.IGradoDAO;
import es.palomafp.aadd.inm.vo.Ciclo;
import es.palomafp.aadd.inm.vo.FamiliaProfesional;
import es.palomafp.aadd.inm.vo.Grado;
/**
*
* Ciclo: Clase que implementa las operaciones del interfaz ICicloDAO.
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public class CicloDao implements ICicloDAO {
private final static String RUTA_FICHERO_CICLOS = "C:\\Users\\ineva\\aadd\\inm\\act16\\informacion_titulaciones.txt";
private static final String DELIMITADOR = ",";
private Path pathFichero = Paths.get(RUTA_FICHERO_CICLOS);
@Override
public Ciclo obtenerCiclo(String codigoCiclo) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Ciclo> obtenerListaCiclosPorFamiliaGrado(String codigoFamilia, String codigoGrado) {
List<Ciclo> listaCiclos = null;
List<String> lineas;
try {
lineas = Files.readAllLines(pathFichero, StandardCharsets.UTF_8);
List<String> lineasSinCabecera = lineas.subList(1, lineas.size());
if (!lineasSinCabecera.isEmpty()) {
listaCiclos = new ArrayList<Ciclo>();
IGradoDAO iGradoDAO = new GradoDao();
IFamiliaProfesionalDAO iFamiliaProfesionalDAO = new FamiliaProfesionalDaoCSV();
for (String linea : lineasSinCabecera) {
// Procesar información de Ciclo
String[] camposCiclo = linea.split(DELIMITADOR);
String codCiclo = camposCiclo[0].strip();
String nombreCiclo = camposCiclo[1].strip();
String numeroHoras = camposCiclo[2].strip();
String codFamilia = camposCiclo[3].strip();
String codGrado = camposCiclo[4].strip();
if ((codigoFamilia != null && codigoFamilia.equals(codFamilia))
&& (codigoGrado != null && codigoGrado.equals(codGrado))) {
Ciclo ciclo = new Ciclo();
FamiliaProfesional familiaProfesional = iFamiliaProfesionalDAO
.obtenerFamiliaProfesional(codigoFamilia);
Grado grado = iGradoDAO.obtenerGrado(codGrado);
ciclo.setCodigo(codCiclo);
ciclo.setDescripcion(nombreCiclo);
ciclo.setNumeroHoras(Integer.parseInt(numeroHoras));
ciclo.setFamilia(familiaProfesional);
ciclo.setGrado(grado);
listaCiclos.add(ciclo);
}
}
}
} catch (IOException e) {
System.err.println("Error al leer el fichero: " + RUTA_FICHERO_CICLOS);
e.printStackTrace();
}
return listaCiclos;
}
}

View File

@ -0,0 +1,196 @@
package es.palomafp.aadd.inm.dao.impl;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;
import es.palomafp.aadd.inm.dao.IFamiliaProfesionalDAO;
import es.palomafp.aadd.inm.vo.FamiliaProfesional;
/**
*
* FamiliaProfesionalDao: Clase que implementa las operaciones del interfaz
* IFamiliaProfesionalDAO.
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public class FamiliaProfesionalDaoCSV implements IFamiliaProfesionalDAO {
private final static String RUTA_FICHERO_FAMILIAS_PROFESIONALES = "C:\\Users\\ineva\\aadd\\inm\\act15\\familia_profesional.csv";
private final static String RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES = "C:\\Users\\ineva\\aadd\\inm\\act15\\familia_profesional_tmp.csv";
private static final String DELIMITADOR = "\\|";
private Path pathFichero = Paths.get(RUTA_FICHERO_FAMILIAS_PROFESIONALES);
private Path pathFicheroTMP = Paths.get(RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES);
@Override
public FamiliaProfesional obtenerFamiliaProfesional(String codigoFamilia) {
FamiliaProfesional familiaProfesional = null;
List<String> lineas;
try {
lineas = Files.readAllLines(pathFichero, StandardCharsets.UTF_8);
List<String> lineasSinCabecera = lineas.subList(1, lineas.size());
for (String linea : lineasSinCabecera) {
// Procesar información de la Familia Profesional
String[] camposFamilia = linea.split(DELIMITADOR);
String codFamilia = camposFamilia[0].trim();
String nombreFamilia = camposFamilia[1].trim();
if (codigoFamilia != null && codigoFamilia.equals(codFamilia)) {
familiaProfesional = new FamiliaProfesional();
familiaProfesional.setCodigo(codFamilia);
familiaProfesional.setNombre(nombreFamilia);
break;
}
}
} catch (IOException e) {
System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES);
e.printStackTrace();
}
return familiaProfesional;
}
@Override
public List<FamiliaProfesional> obtenerListaFamiliasProfesionales() {
List<FamiliaProfesional> listaFamilias = null;
List<String> lineas;
try {
lineas = Files.readAllLines(pathFichero, StandardCharsets.UTF_8);
List<String> lineasSinCabecera = lineas.subList(1, lineas.size());
if (!lineasSinCabecera.isEmpty()) {
listaFamilias = new ArrayList<>();
for (String linea : lineasSinCabecera) {
// Procesar información de la Familia Profesional
String[] camposFamilia = linea.split("\\|");
String codFamilia = camposFamilia[0].trim();
String nombreFamilia = camposFamilia[1].trim();
FamiliaProfesional familiaProfesional = new FamiliaProfesional();
familiaProfesional.setCodigo(codFamilia);
familiaProfesional.setNombre(nombreFamilia);
// System.out.println("familiaProfesional: " + familiaProfesional);
listaFamilias.add(familiaProfesional);
}
}
} catch (IOException e) {
System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES);
e.printStackTrace();
}
return listaFamilias;
}
/**
* Inserta una nueva familia profesional en el fichero CSV.
*
* @param familiaProfesional Familia profesional a insertar.
*/
public void insertarFamiliaProfesional(FamiliaProfesional familiaProfesional) {
String nuevaFamilia = String.format("%s|%s\n", familiaProfesional.getCodigo(), familiaProfesional.getNombre());
try {
Files.writeString(pathFichero, nuevaFamilia, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
} catch (IOException e) {
System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES);
e.printStackTrace();
}
}
/**
* Elimina una familia profesional del fichero CSV.
*
* @param codigoFamilia Código de la familia profesional a eliminar.
*/
public void eliminarFamiliaProfesional(String codigoFamilia) {
List<FamiliaProfesional> listaFamilias = obtenerListaFamiliasProfesionales();
if (listaFamilias != null) {
listaFamilias.removeIf(familiaProfesional -> familiaProfesional.getCodigo().equals(codigoFamilia));
insertarFamiliasProfesionalesFichero(listaFamilias);
}
}
/**
* Actualiza el nombre de una familia profesional.
*
* @param familiaProfesional Familia profesional con el código y el nuevo
* nombre.
*/
public void actualizarFamiliaProfesional(FamiliaProfesional familiaProfesional) {
List<FamiliaProfesional> listaFamilias = obtenerListaFamiliasProfesionales();
// Se cambia el valor del nombre de la familia.
for (FamiliaProfesional familiaProf : listaFamilias) {
if (familiaProf.getCodigo().equals(familiaProfesional.getCodigo())) {
familiaProf.setNombre(familiaProfesional.getNombre());
}
}
insertarFamiliasProfesionalesFichero(listaFamilias);
}
/**
* Inserta la lista de familias profesionales en el fichero CSV. Para ello
* primero crea un fichero temporal y luego renombra el fichero temporal al
* original.
*
* @param listaFamilias Lista de familias profesionales a insertar.
*/
private void insertarFamiliasProfesionalesFichero(List<FamiliaProfesional> listaFamilias) {
try {
String cabecera = String.format("codigo_familia|nombre_familia\n");
Files.writeString(pathFicheroTMP, cabecera, StandardOpenOption.CREATE, StandardOpenOption.APPEND);
for (FamiliaProfesional familiaProfesional : listaFamilias) {
String nuevaFamilia = String.format("%s|%s\n", familiaProfesional.getCodigo(),
familiaProfesional.getNombre());
Files.writeString(pathFicheroTMP, nuevaFamilia, StandardOpenOption.APPEND);
}
// Se elimina el fichero original y se renombra el temporal
} catch (IOException e) {
System.err.println("Error al leer el fichero: " + RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES);
e.printStackTrace();
}
// Se elimina el fichero original y se renombra el temporal
organizarFicheros();
}
private void organizarFicheros() {
try {
// Borrado del fichero original
Files.deleteIfExists(pathFichero);
// Renombrado del fichero temporal
Files.move(pathFicheroTMP, pathFichero, StandardCopyOption.REPLACE_EXISTING);
} catch (IOException e) {
System.err.println("Error al renombrar el fichero: " + RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES);
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,62 @@
package es.palomafp.aadd.inm.dao.impl;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import es.palomafp.aadd.inm.dao.IGradoDAO;
import es.palomafp.aadd.inm.vo.Grado;
/**
*
* GradoDao: Clase que implementa las operaciones del interfaz IGradoDAO.
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public class GradoDao implements IGradoDAO {
private final static String RUTA_FICHERO_GRADOS = "C:\\Users\\ineva\\aadd\\inm\\act16\\niveltitulacion.csv";
private static final String DELIMITADOR = "#";
private Path pathFichero = Paths.get(RUTA_FICHERO_GRADOS);
@Override
public Grado obtenerGrado(String codigoGrado) {
Grado grado = null;
List<String> lineas;
try {
lineas = Files.readAllLines(pathFichero, StandardCharsets.UTF_8);
List<String> lineasSinCabecera = lineas.subList(1, lineas.size());
for (String linea : lineasSinCabecera) {
// Procesar información de un Grado
String[] camposGrado = linea.split(DELIMITADOR);
String codGrado = camposGrado[0].strip();
String descripcionGrado = camposGrado[1].strip();
String categoriaGrado = camposGrado[2].strip();
if (codigoGrado != null && codigoGrado.equals(codGrado)) {
grado = new Grado();
grado.setCodigo(codGrado);
grado.setNombre(descripcionGrado);
grado.setCategoria(categoriaGrado);
break;
}
}
} catch (IOException e) {
System.err.println("Error al leer el fichero: " + RUTA_FICHERO_GRADOS);
e.printStackTrace();
}
return grado;
}
}

View File

@ -0,0 +1,66 @@
package es.palomafp.aadd.inm.vo;
/**
*
* Ciclo: Clase que representa el contenido de un Ciclo Formativo
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public class Ciclo {
private String codigo;
private String descripcion;
private int numeroHoras;
private FamiliaProfesional familia;
private Grado grado;
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getDescripcion() {
return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
public int getNumeroHoras() {
return numeroHoras;
}
public void setNumeroHoras(int numeroHoras) {
this.numeroHoras = numeroHoras;
}
public FamiliaProfesional getFamilia() {
return familia;
}
public void setFamilia(FamiliaProfesional familia) {
this.familia = familia;
}
public Grado getGrado() {
return grado;
}
public void setGrado(Grado grado) {
this.grado = grado;
}
@Override
public String toString() {
return "Ciclo [codigo=" + codigo + ", descripcion=" + descripcion + ", numeroHoras=" + numeroHoras
+ ", familia=" + familia + ", grado=" + grado + "]";
}
}

View File

@ -0,0 +1,34 @@
package es.palomafp.aadd.inm.vo;
/**
*
* FamiliaProfesional: Clase que representa el contenido de una Familia Profesional
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 3 oct 2025
*
*
*/
public class FamiliaProfesional {
private String codigo;
private String nombre;
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
@Override
public String toString() {
return "FamiliaProfesional [codigo=" + codigo + ", nombre=" + nombre + "]\n";
}
}

View File

@ -0,0 +1,38 @@
package es.palomafp.aadd.inm.vo;
/**
*
* Grado: Clase que representa el contenido de un Grado
*
* @author Isidoro Nevares Martín - IES Virgen de la Paloma
* @date 2 oct 2025
*/
public class Grado {
private String codigo;
private String nombre;
private String categoria;
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getCategoria() {
return categoria;
}
public void setCategoria(String categoria) {
this.categoria = categoria;
}
@Override
public String toString() {
return "Grado [codigo=" + codigo + ", nombre=" + nombre + ", categoria=" + categoria + "]";
}
}