Está en la página 1de 5

PROGRAMACIN ORIENTADA A OBJETOS

EXAMEN DICIEMBRE

Curso: 2012/13
18/12/2012

Sea el tipo Medicamento con las siguientes propiedades:

Cdigo, de tipo entero, consultable.


Nombre, de tipo cadena, consultable.
Precio, de tipo real, consultable y modificable. Debe tomar un valor mayor que cero.
Receta, de tipo lgico, consultable y modificable.

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.

1. Para el tipo Medicamento:


1.1. Cree una clase excepcin que herede de RuntimeException y que se denomine
ExcepcionPrecioMenorCero. (0.5 P)
1.2. Proporcione un constructor con cuatro argumentos, que proporcionen el cdigo, el nombre, el precio y si tiene
receta. Compruebe que el precio es vlido; en caso contrario, debe lanzarse la excepcin
ExcepcionPrecioMenorCero, con un mensaje adecuado. (1 P)
1.3. Implemente el mtodo para el criterio de igualdad. (0.5 P)
1.4. Proporcinese un mtodo incrementaPrecio que recibe un valor entero entre 1 y 100 representando un
porcentaje y actualiza el precio del medicamento en ese valor. Por ejemplo, si el precio del medicamento es de
100.00 y se recibe un valor de 10 se actualizar el precio a 110.00. (1 P)

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)

3. Para el tipo Vademecum implemente los siguientes mtodos:


3.1 Un mtodo que calcule el precio medio de todos los medicamentos del vademecum. (1 P)
3.2 Un mtodo que devuelva una lista con los nombres de aquellos medicamentos que tienen un precio menor que uno
dado. (1 P)
3.3 Un mtodo que calcule el nmero de medicamentos que necesitan receta. (1 P)
3.4 Un mtodo que devuelva un SortedMap<String, List<Medicamento>> en la que a cada nombre de
principio activo que aparezca como clave se le asociar la lista de medicamentos que tienen ese principio activo. (1 P)
3.5 Usando el mtodo 3.4, construye otro tal que dado el nombre de un principio activo devuelva el medicamento ms
barato de entre los que incluyan ese principio activo. (1 P)
3.6 Un mtodo que dado el nombre de un fichero escriba en l los medicamentos y su composicin mediante una
estructura como (1 P):
Augmentine: amoxicilina 75.7% + cido clavulnico 24.3%
Frenadol : paracetamol 55.0% + clorfenamina 35.0% + dextrometorfano 20.0%
....

Curso: 2012/13
PROGRAMACIN ORIENTADA A OBJETOS

EXAMEN DICIEMBRE. SOLUCIONES

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);
}
}

También podría gustarte