Nombres: Your Your name and second name name goes here Vargas Mantilla Kevin
Taller No 9
1. Desarrollar el diseño de datos y procedimental de los siguientes problemas. a. Se tiene datos acerca del número de cedula, el código de sexo y el sueldo de n empleados, se pide obtener el total de sueldos y el promedio de los mismos para los l os empleados varones y mueres de la empresa.
Diagrama de Datos
Diseño Diagrama de Casos de Uso
Procedimental
Diagrama de Clases
Diagrama de secuencias
Código import java.io.File; import java.io.FileNotFoundException; import java.util.canner; java.util.canner; import java.util.Vector; public class Empresa ! private Vector"Empleado# empleados; $%% % & onstru'e una empresa sin empleados %$ public Empresa() ! empleados * ne+ Vector"Empleado#(); , $%% % & uenta cu-ntos empleados ha' en la empresa con el sexo indicado % % param sexo % el sexo de los empleados /ue se /uieren contar % return el conteo de los empleados con el sexo indicado %$ public int contarEmpleados(char sexo) ! int conteo * 0;
1or (int i * 0; i " empleados.si2e(); i33) i1 (empleados.get(i).esexo(sexo)) conteo33; return conteo; , $%% % &alcula la sumatoria de todos los sueldos de los empleados con el sexo % indicado % % param sexo % el sexo de los empleados /ue participar-n en la sumatoria % return la sumatoria de los sueldos %$ public double totalueldos(char sexo) ! double totalueldos * 0; 1or (int i * 0; i " empleados.si2e(); i33) i1 (empleados.get(i).esexo(sexo)) totalueldos 3* empleados.get(i).getueldo(); return totalueldos; , public double promedioueldos(char sexo) ! return totalueldos(sexo) $ contarEmpleados(sexo); , $%% % 4ee empleados de un archivo. Esta 1unci5n es s5lamente para 6nes de % testing % % param in % el archivo en el /ue est- la in1ormaci5n de los empleados %$ protected void obtenerEmpleados(File in) ! 'stem.out.println(7obteniendo datos de testeo de archivo de datos...7); tr' ! canner 6n * ne+ canner(in); +hile (6n.hasNext()) ! empleados.add(ne+ Empleado(6n.next4ine()8 6n.next().char9t(0)8 6n.nextouble())); 6n.next4ine(); 'stem.out.println(7aadido: 7 3 empleados.get(empleados.si2e() < =)); , , catch (FileNotFoundException e) ! 'stem.out.println(7el archivo de lectura no existe7); e.printtac>?race(); , , public static void main(tring@A args) ! Empresa x * ne+ Empresa(); File datos * ne+ File(7empleados.txt7); x.obtenerEmpleados(datos); int accion * 0; char sexo; canner cin * ne+ canner('stem.in); +hile (true) ! 'stem.out.println(7BCuD /uieres hacer7 3 7n=: &onsultar sumatoria de sueldos7 3 7nG: &onsultar promedio de sueldos7 3 7nH: alir7); accion * cin.nextInt(); i1 (accion ** H) brea>; i1 (accion J* = accion J* G) continue; 'stem.out.println(7Be /uD sexo (L)ombre$(M)ujer7); sexo * &haracter.topper&ase(cin.next().char9t(0)); i1 (accion ** =) 'stem.out.print1(7.G1n78 x.totalueldos(sexo));
else 'stem.out.print1(7.G1n78 x.promedioueldos(sexo)); , 'stem.out.println(7b'eJ7); cin.close(); , , public class Empleado ! private tring cedula; private char sexo; private double sueldo; public Empleado(tring cedula8 char sexo8 double sueldo) ! this.cedula * cedula; this.sexo * sexo; this.sueldo * sueldo; , public boolean esexo(char sexo) ! return this.sexo ** sexo; , public double getueldo() ! return sueldo; , Override public tring totring() ! return 7empleado: !cedula : 7 3 cedula 3 78 sexo: 7 3 sexo 3 78 sueldo: 7 3 sueldo 3 7,7; , ,
Código en acción
b. Dados los datos de los docentes de la !arrera de "n#orm$tica, y en atención al plan de austeridad elaborado por la Dirección, se pide descontar un 1%& a todos los docentes 'ue ganan m$s de (s. 1)***.
Diagrama de Datos
Diseño Procedimental Diagrama de Casos de Uso
Diagrama de Clases
Diagrama de secuencias
Código public class administrador { private String nombre; private String codigo; private String sueldo; private docente[] doc; administrador(String n,String c,String s){ nombre=n; codigo=c; sueldo=s; doc=new docente[100]; } public docente[] getDoc() { return doc; } public void pagar(){ for(int i=0;i<;i!!){ if(doc[i]"getSueldo()#1000){ doc[i]"set$agar(doc[i]"getSueldo()%0"&&); } S'stem"out"print(nDocente *!doc[i]"get+ombre()! Sueldo * !doc[i]"getSueldo()! as $lan de -usteridad* !doc[i]"get$agar()); }
} public static void main(String [] args){ administrador -=new administrador(.e/in,111,100000); (-"getDoc())[0]= new docente(2raian,113,100"04); (-"getDoc())[1]= new docente(5uan,3,10"0); (-"getDoc())[4]= new docente(+apo,&64,1000"0); (-"getDoc())[3]= new docente(Dennisse,717&6,1000"6); (-"getDoc())[7]= new docente(8oc9',11&6,110"6); -"pagar(); } }
public class docente{ private double sueldo; private String nombre;
private String codigo; private double pagar; docente(String nom, String cod, Double suel){ sueldo=suel; nombre=nom; codigo=cod; pagar=sueldo; } public double getSueldo() { return sueldo; } public double get$agar() { return pagar; } public void set$agar(double sueldo) { this "pagar = sueldo; } public String get+ombre() { return nombre; } public String get:odigo() { return codigo; } }
c. +mitir la #actura correspondiente a una compra de un artculo determinado, del 'ue se ad'uieren una o varias unidades. +l "- es del 1)& y si el precio bruto, 'ue es igual al precio de venta m$s el "-, es mayor de (s. 1/*** se debe reali0ar un descuento del )&.
Diagrama de Datos
Diseño Procedimental Diagrama de Casos de Uso
Diagrama de Clases
Diagrama de secuencias
Código public class producto ! private tring nombre; private double precio;
producto(tring n8 double p)! nombre*n; precio*p; , public tring getNombre() ! return nombre; , public double getPrecio() ! return precio; , , public class venta ! private producto prod; private double prebrut; private double pretot; venta(producto p)! prod*p; prebrut*p.getPrecio()%=.=Q; pretot*prebrut#=H000(prebrut%0.RQ):prebrut; , public void mostrar() ! 'stem.out .println(7Producto :73prod.getNombre()37 ttPrecio total:73pretot37tt Precio Sruto: 73prebrut); , public static void main (tring @A args) ! venta a*new venta(new producto(7automovil78=Q0000.RR)); venta b*new venta(new producto(7revista ed. limitada78=G00.RR)); venta c*new venta(new producto(7samsung galaxi sT78H=000.RR)); venta d*new venta(new producto(7violin arcano78TG00.RR)); a.mostrar(); b.mostrar(); c.mostrar(); d.mostrar(); , ,
d. Se solicita calcular el monto a pagar por el servicio de estacionamiento, teniendo en cuenta 'ue por la primera ora de estada se tiene una tari#a de (s. 1* y las restantes tienen un costo de (s. 2. Se tiene como datos3 4ora de entrada, ora de salida. "niciada una ora se contabili0a como ora total.
Diseño de Datos
Diseño Procedimental Casos de uso
Diagrama de Clases
Diagrama de Secuencias
Código public class &arro ! private int horaEntrada; private boolean estaPar/ueado;
public &arro(int horaEntrada) ! this.horaEntrada * horaEntrada; estaPar/ueado * true; ,
public double calcularPago(double horaInicial8 double hora8 int hora9ctual) ! return (hora9ctual < horaEntrada) % hora 3 horaInicial; ,
public void sacar() ! estaPar/ueado * 1alse; ,
public boolean estaPar/ueado() ! return estaPar/ueado; , ,
import java.util.canner; import java.util.Vector;
public class Par/ueo ! private double costoLora; private double costoLoraInicial; private Vector"&arro# carros;
public Par/ueo(double costoLora8 double costoLoraInicial) ! this.costoLora * costoLora; this.costoLoraInicial * costoLoraInicial; carros * ne+ Vector"&arro#(); ,
public int meter&arro(int hora9ctual) ! carros.add(ne+ &arro(hora9ctual)); return carros.si2e() < =; ,
public double sacar&arro(int indice&arro8 int hora9ctual) ! double cobro * 0;
tr' ! &arro c * carros.get(indice&arro);
i1 (c.estaPar/ueado()) ! cobro * (hora9ctual < c.getLoraEntrada()) % costoLora 3 costoLoraInicial; c.sacar(); , else ! 'stem.err.println(7El carro con Undice 7 3 indice&arro 3 7 'a sali57); ,
, catch (IndexOutO1SoundsException e) ! 'stem.err.println(7El carro con Undice 7 3 indice&arro 3 7 no existe7); ,
return cobro; ,
public static void main(tring@A args) ! Par/ueo x * ne+ Par/ueo(8 =0); canner cin * ne+ canner('stem.in); int seleccion8 hora;
+hile (true) ! 'stem.out.println(7CuD /uieres hacer7 3 7n=: Meter carro7 3 7nG: acar carro7 3 7nH: alir7); seleccion * cin.nextInt();
i1 (seleccion ** H) brea>;
i1 (seleccion J* = seleccion J* G) continue;
'stem.out.println(7CuD hora es7); hora * cin.nextInt();
i1 (seleccion ** =) ! 'stem.out.println(7&arro metido con I * 7 3 x.meter&arro(hora)); , else ! 'stem.out.println(7Undice del carro /ue va a salir7); int indice * cin.nextInt();
'stem.out.println(7Monto a cobrar * 7 3 x.sacar&arro(indice8 hora)); , ,
'stem.out.println(7b'eJ7); cin.close(); ,
,
Código en Acción
e. Dado un numero entero positivo obtener el numero invertido, es decir si se tiene el numero 1%/ obtener el numero /%1.
Diseño de Datos es solo un nWmero
Diseño Procedimental Diagrama de Casos de Uso
Diagrama de Clases
Diagrama de Secuencias
Código import java.util.canner;
public class Proceso !
public static int invertido(int numero) ! tring trampa * numero 3 77; tring invertido * 77;
1or (int i * 0; i " trampa.length(); i33) invertido * trampa.char9t(i) 3 invertido;
return Integer.parseInt(invertido); ,
public static void main(tring@A args) ! 'stem.out.println(7nWmero7); canner cin * ne+ canner('stem.in); int numero * cin.nextInt(); 'stem.out.println(invertido(numero)); cin.close(); , ,
Código en Acción
%. !alcular la compleidad ciclom$tica y determinar los casos de prueba asociados al diseño procedimental de los problemas del eercicio 1.
Grafo de Flujo y complejidad ciclomática problema a)
V(X) total * Prueba 1: promedioueldos para mujeres
(promedioueldos est- integrado con totalueldos ' contarEmpleados8 asU /ue8 al ejecutar la prueba8 se recorrer-n todos los nodos.
Grafo de Flujo y complejidad ciclomática problema b)
V(X) total * G Prueba 1: ?rabajar con un sueldo ma'or a =Q000. Prueba 1: ?rabajar con un sueldo menor a =Q000.
Grafo de Flujo y complejidad ciclomática problema c)
V(X) total * G Prueba 1: ?rabajar con un producto8 cu'o precio bruto sea ma'or a =H000. Prueba 1: ?rabajar con un producto8 cu'o precio bruto sea menor a =H000.
Grafo de Flujo y complejidad ciclomática problema d)
V(X) total * T Prueba 1: Meter&arro en cual/uier hora Prueba 2: acar&arro con un Undice /ue no existe Prueba 3: acar&arro con el Undice del carro metido en la prueba G8 en cual/uier hora posterior a la hora en la /ue se meti5 el carro de la prueba G. Prueba 4: acar&arro con el mUsmo Undice de la prueba H8 ' en cual/uier hora.
/. 5roponga un plan de pruebas 'ue considere la estrategia general de prueba para los problemas a6 y b6 del eercicio 1.
Para problema a) Prueba de las Unidades Probar cada una de las unidades con las siguientes aserciones: Empleado.esexo(sexo) si sexo ** Empleado.sexo8 ○ Empleado.esexo ser- verdadero ● Empresa.contarEmpleados(sexo) ○ nunca ser- negativo ○ siempre ser- menor o igual a la cantidad total de empleados en la empresa ●
Prueba de Integración Probar los siguientes m5dulos /ue integran a las unidades8 con las siguientes aserciones: Empresa.totalueldos(sexo) ser- m-s grande o igual /ue el sueldo ○ m-s grande del Empleado.sexo ** sexo en la empresa. ● Empresa.promedioueldos(sexo) ○ ser- m-s grande o igual /ue el sueldo m-s pe/ueo del Empleado.sexo ** sexo en la empresa. ○ ser- m-s pe/ueo o igual /ue el sueldo m-s grande del Empleado.sexo ** sexo en la empresa. ●
Prueba del Sistema y Validación No aplica.
Para problema b) Prueba de las Unidades Probamos las unidades: Para el docente8 probar /ue los sueldos sean reales (nada desorbitante)8 /ue los nombres sean coherentes8 veri6car unicidad del c5digo de docente. ● Para el administrador se considerara los mismos puntos /ue para el docente ●
Prueba de Integración Probamos los m5dulos: e controla /ue no 1alle el sistema de descuentos8 estar constantemente pendiente de la ta2a de descuentos. ●
Prueba del Sistema y Validación No aplica.