Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EXAMEN DICIEMBRE
Curso: 2012/13
18/12/2012
Orden natural: los medicamentos se ordenan por nombre, y en caso de igualdad en el nombre por precio.
Sea el tipo PrincipioActivo con las siguientes propiedades:
Nombre, de tipo cadena, consultable.
Porcentaje, de tipo real, consultable y modificable. % de participacin en cada Medicamento.
Sea el tipo Vademecum con la siguiente propiedad:
Diccionario, de tipo SortedMap entre Medicamento y lista de PrincipioActivo, consultable.
El Diccionario relaciona cada medicamento con su composicin: un listado de principios activos que contiene el
medicamento y el porcentaje de su composicin. Suponga implementados todos los mtodos consultores y
modificadores que necesite para implementar los siguientes apartados.
2. Escriba un mtodo esttico en la clase de utilidad Medicamentos tal que dado el nombre de un fichero que
contiene una estructura como la siguiente
1015,
3526,
4567,
1234,
Aspirina,3.98
Neubrofen, 6.2
Frenadol, 7.5
Bisolgrip, 8.5
sea ledo y devuelva un objeto de tipo List<Medicamento> con la informacin contenida en el fichero.
Tenga en cuenta que los medicamentos contenidos en el fichero no necesitan receta. Compruebe que el precio
cumple con las restricciones y si no lance la excepcin adecuada indicando la lnea del fichero dnde se ha
producido el error. (1 P)
Curso: 2012/13
PROGRAMACIN ORIENTADA A OBJETOS
17/12/2012
1.
1.1
public class ExcepcionPrecioMenorCero extends RuntimeException{
public ExcepcionPrecioMenorCero( ) {
super();
}
public ExcepcionPrecioMenorCero(String texto ) {
super(texto);
}
}
1.2
public MedicamentoImpl(Integer codigo, String nombre, Double precio, Boolean
receta){
if (precio <= 0){
throw new ExcepcionPrecioMenorCero();
}
this.codigo
this.nombre
this.precio
this.receta
=
=
=
=
codigo;
nombre;
precio;
receta;
}
1.3
public boolean equals(Object o){
boolean r = false;
if(o instanceof Medicamento){
Medicamento m = (Medicamento) o;
r = getNombre().equals(m.getNombre()) &&
getPrecio().equals(m.getPrecio());
}
return r;
}
1.4
public void incrementaPrecio(Integer p){
setPrecio(getPrecio() + getPrecio()*p/100);
}
2.
public static List<Medicamento> leeMedicamentos(String nomFich) {
List <Medicamento> lp = new LinkedList<Medicamento>();
try{
Scanner sc=new Scanner(new File(nomFich));
int cont=0;
while (sc.hasNextLine()) {
String linea = sc.nextLine();
List<String> lisat= Utilidad.separaElementos(linea, ",");
if (lisat.size()!=3){
throw new IllegalArgumentException("linea"+ cont
+"Lectura de medicamento errnea "+lisat.size());
}
Integer codigo = new Integer(lisat.get(0));
String nombre = lisat.get(1);
Double precio = new Double(lisat.get(2));
Medicamento m = new MedicamentoImpl(codigo, nombre,
precio, false);
lp.add(m);
cont++;
}
} catch (FileNotFoundException e) {
System.out.println("Fichero no encontrado "+nomFich);
}
return lp;
}
3.
3.1
public Double mediaPrecios(){
Double suma = 0.0;
for (Medicamento m: getDiccionario().keySet()){
suma = suma + m.getPrecio();
}
return suma/getDiccionario().size();
}
3.2
public List<String> medicamentosPrecioMenor(Double precio){
List<String> lis = new LinkedList<String>();
for (Medicamento m: getDiccionario().keySet()){
if(m.getPrecio().compareTo(precio) < 0){
lis.add(m.getNombre());
}
}
return lis;
}
3.3
public SortedMap<String, List<Medicamento>> pActMed(){
SortedMap<String, List<Medicamento>> res =
new TreeMap<String, List<Medicamento>>();
for (Medicamento m: getDiccionario().keySet()){
for(PrincipioActivo pa: getDiccionario().get(m)){
if(res.containsKey(pa.getNombre())){
res.get(pa.getNombre()).add(m);
}
else{
List<Medicamento> l = new
LinkedList<Medicamento>();
l.add(m);
res.put(pa.getNombre(), l);
}
}
}
return res;
}
3.4
public Integer cuentaReceta(){
Integer cont = 0;
for (Medicamento m: getDiccionario().keySet()){
if(m.getReceta()){
cont++;
}
}
return cont;
}
3.5
public Medicamento masBaratoPrincipio(String pa){
SortedMap<String, List<Medicamento>> map = pActMed();
List<Medicamento> lm = map.get(pa);
Comparator<Medicamento> comprecio = new ComparadorPrecio();
return Collections.min(lm, comprecio);
}
public class ComparadorPrecio implements Comparator<Medicamento>{
public int compare(Medicamento m1, Medicamento m2){
return m1.getPrecio().compareTo(m2.getPrecio());
}
}
3.6
public void escribeFicheroMedicamentosComposicion(String nomFich){
File file = new File(nomFich);
try {
PrintWriter ps = new PrintWriter(file);
for (Medicamento m: getDiccionario().keySet()) {
String sPA = m.getNombre() + ": ";
for (PrincipioActivo pa: getDiccionario().get(m)){
sPA = sPA + pa.getNombre()+ " " +
pa.getPorcentaje()+"% + ";
}
ps.println(sPA);
}
ps.close();
} catch (FileNotFoundException e) {
System.out.println("Fichero no encontrado "+nomFich);
}
}