primer commit

This commit is contained in:
Isidoro Nevares Martín 2025-10-03 12:44:24 +02:00
commit aa6458c39e
15 changed files with 534 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_5</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,69 @@
package es.palomafp.aadd.inm;
import java.util.List;
import es.palomafp.aadd.inm.dao.IFamiliaProfesionalDAO;
import es.palomafp.aadd.inm.dao.impl.FamiliaProfesionalDaoCSV;
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];
String operacion = "B";
String codigoFamilia = args[1];
String nombreFamilia = args[2];
// Se declaran las variables como Interfaces y se construyen como
// implementaciones.
IFamiliaProfesionalDAO iFamiliaProfesionalDAO = new FamiliaProfesionalDaoCSV();
// IGradoDAO iGradoDAO = new GradoDao();
// ICicloDAO iCicloDAO = new CicloDao();
switch (operacion) {
case "L":
List<FamiliaProfesional> listaFamilias = iFamiliaProfesionalDAO.obtenerListaFamiliasProfesionales();
System.out.println(listaFamilias);
break;
case "C": {
FamiliaProfesional familiaProfesional = iFamiliaProfesionalDAO.obtenerFamiliaProfesional(codigoFamilia);
System.out.println(familiaProfesional);
break;
}
case "I": {
FamiliaProfesional familiaProfesional = iFamiliaProfesionalDAO.obtenerFamiliaProfesional(codigoFamilia);
// 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(codigoFamilia);
familiaProfesional.setNombre(nombreFamilia);
iFamiliaProfesionalDAO.insertarFamiliaProfesional(familiaProfesional);
}
break;
}
case "B": {
iFamiliaProfesionalDAO.eliminarFamiliaProfesional(codigoFamilia);
}
case "M": {
FamiliaProfesional familiaProfesional =new FamiliaProfesional();
familiaProfesional.setCodigo(codigoFamilia);
familiaProfesional.setNombre(nombreFamilia);
iFamiliaProfesionalDAO.actualizarFamiliaProfesional(familiaProfesional);
}
}
}
}

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,32 @@
package es.palomafp.aadd.inm.dao.impl;
import java.util.List;
import es.palomafp.aadd.inm.dao.ICicloDAO;
import es.palomafp.aadd.inm.vo.Ciclo;
/**
*
* 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 {
@Override
public Ciclo obtenerCiclo(String codigoCiclo) {
// TODO Auto-generated method stub
return null;
}
@Override
public List<Ciclo> obtenerListaCiclosPorFamiliaGrado(String codigoFamilia, String codigoGrado) {
// TODO Auto-generated method stub
return null;
}
}

View File

@ -0,0 +1,166 @@
package es.palomafp.aadd.inm.dao.impl;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
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 File fichero = new File(RUTA_FICHERO_FAMILIAS_PROFESIONALES);
@Override
public FamiliaProfesional obtenerFamiliaProfesional(String codigoFamilia) {
FamiliaProfesional familiaProfesional = null;
try (BufferedReader bf = new BufferedReader(new FileReader(fichero))) {
String linea;
bf.readLine(); // Salta la línea de cabecera.
while ((linea = bf.readLine()) != null) {
// 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 (
FileNotFoundException e) {
System.err.println("Fichero no encontrado: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES);
e.printStackTrace();
} 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;
try (BufferedReader bf = new BufferedReader(new FileReader(fichero))) {
String linea;
listaFamilias = new ArrayList<FamiliaProfesional>();
bf.readLine(); // Salta la línea de cabecera.
while ((linea = bf.readLine()) != null) {
// 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);
listaFamilias.add(familiaProfesional);
}
} catch (
FileNotFoundException e) {
System.err.println("Fichero no encontrado: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES);
e.printStackTrace();
} catch (IOException e) {
System.err.println("Error al leer el fichero: " + RUTA_FICHERO_FAMILIAS_PROFESIONALES);
e.printStackTrace();
}
return listaFamilias;
}
@Override
public void insertarFamiliaProfesional(FamiliaProfesional familiaProfesional) {
String nuevaFamilia = String.format("%s|%s", familiaProfesional.getCodigo(), familiaProfesional.getNombre());
try (BufferedWriter writer = new BufferedWriter(new FileWriter(RUTA_FICHERO_FAMILIAS_PROFESIONALES, true))) {
writer.newLine(); // Añadir salto de línea antes
writer.write(nuevaFamilia); // Escribir la nueva fila
} catch (IOException e) {
System.err.println("Error al escribir en el archivo: " + e.getMessage());
}
}
@Override
public void eliminarFamiliaProfesional(String codigoFamilia) {
List<FamiliaProfesional> listaFamilias = obtenerListaFamiliasProfesionales();
listaFamilias.removeIf(familiaProfesional -> familiaProfesional.getCodigo().equals(codigoFamilia));
insertarFamiliasProfesionalesFichero(listaFamilias);
}
@Override
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);
}
private void insertarFamiliasProfesionalesFichero(List<FamiliaProfesional> listaFamilias) {
File ficheroTMP= new File(RUTA_FICHERO_TMP_FAMILIAS_PROFESIONALES);
try (BufferedWriter writer = new BufferedWriter(new FileWriter(ficheroTMP))) {
writer.write("codigo_familia|nombre_familia"); // Escribir la nueva fil
for (FamiliaProfesional familiaProfesional : listaFamilias) {
String nuevaFamilia = String.format("%s|%s", familiaProfesional.getCodigo(),
familiaProfesional.getNombre());
writer.newLine(); // Añadir salto de línea antes
writer.write(nuevaFamilia); // Escribir la nueva fila
}
// Se elimina el fichero original y se renombra el temporal
} catch (IOException e) {
System.err.println("Error al escribir en el archivo: " + e.getMessage());
}
fichero.delete();
boolean renombrado = ficheroTMP.renameTo(fichero);
if (!renombrado) {
System.err.println("No se pudo renombrar el fichero temporal: " + ficheroTMP.getAbsolutePath());
}
}
}

View File

@ -0,0 +1,24 @@
package es.palomafp.aadd.inm.dao.impl;
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 {
@Override
public Grado obtenerGrado(String codigoGrado) {
// TODO Auto-generated method stub
return null;
}
}

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 + "]";
}
}