Sei sulla pagina 1di 21

Nombres:

Your name and second name goes here


Vargas Mantilla Kevin

Taller No 9

1. Desarrollar el diseo de datos y procedimental de los


siguientes problemas.
a. Se tiene datos acerca del nmero de cedula, el cdigo de sexo
y el sueldo de n empleados, se pide obtener el total de sueldos y
el promedio de los mismos para los empleados varones y mujeres
de la empresa.

Diagrama de Datos

Diseo
Diagrama de Casos de Uso

Procedimental

Diagrama de Clases

Diagrama de secuencias

Cdigo
import
import
import
import

java.io.File;
java.io.FileNotFoundException;
java.util.Scanner;
java.util.Vector;

public class Empresa {


private Vector<Empleado> empleados;
/**
* Construye una empresa sin empleados
*/
public Empresa() {
empleados = new Vector<Empleado>();
}
/**
* Cuenta cuntos empleados hay en la empresa con el sexo indicado
*
* @param sexo
*
el sexo de los empleados que se quieren contar
* @return el conteo de los empleados con el sexo indicado
*/
public int contarEmpleados(char sexo) {
int conteo = 0;

for (int i = 0; i < empleados.size(); i++)


if (empleados.get(i).esSexo(sexo))
conteo++;

return conteo;

/**
* Calcula la sumatoria de todos los sueldos de los empleados con el sexo
* indicado
*
* @param sexo
*
el sexo de los empleados que participarn en la sumatoria
* @return la sumatoria de los sueldos
*/
public double totalSueldos(char sexo) {
double totalSueldos = 0;
for (int i = 0; i < empleados.size(); i++)
if (empleados.get(i).esSexo(sexo))
totalSueldos += empleados.get(i).getSueldo();
return totalSueldos;
}
public double promedioSueldos(char sexo) {
return totalSueldos(sexo) / contarEmpleados(sexo);
}
/**
* Lee empleados de un archivo. Esta funcin es slamente para fines de
* testing
*
* @param in
*
el archivo en el que est la informacin de los empleados
*/
protected void obtenerEmpleados(File in) {
System.out.println("obteniendo datos de testeo de archivo de datos...");
try {
Scanner fin = new Scanner(in);
while (fin.hasNext()) {
empleados.add(new Empleado(fin.nextLine(),
fin.next().charAt(0), fin.nextDouble()));
fin.nextLine();
System.out.println("aadido: "
+ empleados.get(empleados.size() - 1));
}
} catch (FileNotFoundException e) {
System.out.println("el archivo de lectura no existe");
e.printStackTrace();
}
}
public static void main(String[] args) {
Empresa x = new Empresa();
File datos = new File("empleados.txt");
x.obtenerEmpleados(datos);
int accion = 0;
char sexo;
Scanner cin = new Scanner(System.in);
while (true) {
System.out.println("Qu quieres hacer?"
+ "\n1: Consultar sumatoria de sueldos"
+ "\n2: Consultar promedio de sueldos" + "\n3: Salir");
accion = cin.nextInt();
if (accion == 3)
break;
if (accion != 1 && accion != 2)
continue;
System.out.println("De qu sexo? (H)ombre/(M)ujer");
sexo = Character.toUpperCase(cin.next().charAt(0));
if (accion == 1)
System.out.printf("%.2f\n", x.totalSueldos(sexo));

else
System.out.printf("%.2f\n", x.promedioSueldos(sexo));
}
System.out.println("bye!");
cin.close();
}

public class Empleado {


private String cedula;
private char sexo;
private double sueldo;
public Empleado(String cedula, char sexo, double sueldo) {
this.cedula = cedula;
this.sexo = sexo;
this.sueldo = sueldo;
}
public boolean esSexo(char sexo) {
return this.sexo == sexo;
}
public double getSueldo() {
return sueldo;
}
@Override
public String toString() {
return "empleado: {cedula : " + cedula + ", sexo: " + sexo
+ ", sueldo: " + sueldo + "}";
}
}

Cdigo en accin

b. Dados los datos de los docentes de la Carrera de Informtica, y


en atencin al plan de austeridad elaborado por la Direccin, se
pide descontar un 12% a todos los docentes que ganan ms de
Bs. 15000.

Diagrama de Datos

Diseo Procedimental
Diagrama de Casos de Uso

Diagrama de Clases

Diagrama de secuencias

Cdigo
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<5;i++){
if(doc[i].getSueldo()>15000){
doc[i].setPagar(doc[i].getSueldo()*0.88);
}
System.out.print("\nDocente :"+doc[i].getNombre()+"
Sueldo : "+doc[i].getSueldo()+" Mas Plan de
Austeridad:"+doc[i].getPagar());
}

}
public static void main(String [] args){
administrador A=new administrador("Kevin","5199711","1500000");
(A.getDoc())[0]=new docente("Braian","11593",100.02);
(A.getDoc())[1]=new docente("Juan","55355",150.07);
(A.getDoc())[2]=new docente("Napo","78652",15000.90);
(A.getDoc())[3]=new docente("Dennisse","41486",17000.69);
(A.getDoc())[4]=new docente("Rocky","11865",110.65);
A.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 getPagar() {
return pagar;
}
public void setPagar(double sueldo) {
this.pagar = sueldo;
}
public String getNombre() {
return nombre;
}
public String getCodigo() {
return codigo;
}
}

c. Emitir la factura correspondiente a una compra de un artculo


determinado, del que se adquieren una o varias unidades. El IVA
es del 15% y si el precio bruto, que es igual al precio de venta
ms el IVA, es mayor de Bs. 13000 se debe realizar un descuento
del 5%.

Diagrama de Datos

Diseo Procedimental
Diagrama de Casos de Uso

Diagrama de Clases

Diagrama de secuencias

Cdigo
public class producto {
private String nombre;
private double precio;

producto(String n, double p){


nombre=n;
precio=p;
}
public String 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()*1.15;
pretot=prebrut>13000?(prebrut*0.95):prebrut;
}
public void mostrar() {
System.out.println("Producto :"+prod.getNombre()+" \t\tPrecio
total:"+pretot+"\t\t Precio Bruto: "+prebrut);
}
public static void main (String [] args) {
venta a=new venta(new producto("automovil",150000.99));
venta b=new venta(new producto("revista ed. limitada",1200.99));
venta c=new venta(new producto("samsung galaxi s4",31000.99));
venta d=new venta(new producto("violin arcano",4200.99));
a.mostrar();
b.mostrar();
c.mostrar();
d.mostrar();
}
}

d. Se solicita calcular el monto a pagar por el servicio de


estacionamiento, teniendo en cuenta que por la primera hora de
estada se tiene una tarifa de Bs. 10 y las restantes tienen un
costo de Bs. 6. Se tiene como datos: Hora de entrada, hora de
salida. Iniciada una hora se contabiliza como hora total.

Diseo de Datos

Diseo Procedimental
Casos de uso

Diagrama de Clases

Diagrama de Secuencias

Cdigo
public class Carro {
private int horaEntrada;
private boolean estaParqueado;

public Carro(int horaEntrada) {


this.horaEntrada = horaEntrada;
estaParqueado = true;
}

public double calcularPago(double horaInicial, double hora, int horaActual) {


return (horaActual - horaEntrada) * hora + horaInicial;
}

public void sacar() {


estaParqueado = false;
}

public boolean estaParqueado() {


return estaParqueado;
}
}

import java.util.Scanner;
import java.util.Vector;

public class Parqueo {


private double costoHora;
private double costoHoraInicial;
private Vector<Carro> carros;

public Parqueo(double costoHora, double costoHoraInicial) {


this.costoHora = costoHora;
this.costoHoraInicial = costoHoraInicial;
carros = new Vector<Carro>();
}

public int meterCarro(int horaActual) {


carros.add(new Carro(horaActual));
return carros.size() - 1;
}

public double sacarCarro(int indiceCarro, int horaActual) {


double cobro = 0;

try {
Carro c = carros.get(indiceCarro);

if (c.estaParqueado()) {
cobro = (horaActual - c.getHoraEntrada()) * costoHora
+ costoHoraInicial;
c.sacar();
} else {
System.err.println("El carro con ndice " + indiceCarro
+ " ya sali");
}

} catch (IndexOutOfBoundsException e) {
System.err.println("El carro con ndice " + indiceCarro
+ " no existe");
}

return cobro;
}

public static void main(String[] args) {


Parqueo x = new Parqueo(6, 10);
Scanner cin = new Scanner(System.in);
int seleccion, hora;

while (true) {
System.out.println("Qu quieres hacer?" + "\n1: Meter carro"
+ "\n2: Sacar carro" + "\n3: Salir");
seleccion = cin.nextInt();

if (seleccion == 3)
break;

if (seleccion != 1 && seleccion != 2)


continue;

System.out.println("Qu hora es?");


hora = cin.nextInt();

if (seleccion == 1) {
System.out.println("Carro metido con ID = "
+ x.meterCarro(hora));
} else {
System.out.println("ndice del carro que va a salir?");
int indice = cin.nextInt();

System.out.println("Monto a cobrar = "


+ x.sacarCarro(indice, hora));
}
}

System.out.println("bye!");
cin.close();
}

Cdigo en Accin

e. Dado un numero entero positivo obtener el numero invertido,


es decir si se tiene el numero 123 obtener el numero 321.

Diseo de Datos
es solo un nmero

Diseo Procedimental
Diagrama de Casos de Uso

Diagrama de Clases

Diagrama de Secuencias

Cdigo
import java.util.Scanner;

public class Proceso {

public static int invertido(int numero) {


String trampa = numero + "";
String invertido = "";

for (int i = 0; i < trampa.length(); i++)


invertido = trampa.charAt(i) + invertido;

return Integer.parseInt(invertido);
}

public static void main(String[] args) {


System.out.println("nmero?");
Scanner cin = new Scanner(System.in);
int numero = cin.nextInt();
System.out.println(invertido(numero));
cin.close();
}
}

Cdigo en Accin

2. Calcular la complejidad ciclomtica y determinar los casos de


prueba asociados al diseo procedimental de los problemas del
ejercicio 1.

Grafo de Flujo y complejidad ciclomtica problema a)

V(G) total = 7
Prueba 1: promedioSueldos para mujeres
(promedioSueldos est integrado con totalSueldos y contarEmpleados, as que,
al ejecutar la prueba, se recorrern todos los nodos.

Grafo de Flujo y complejidad ciclomtica problema b)

V(G) total = 2
Prueba 1: Trabajar con un sueldo mayor a 15000.
Prueba 1: Trabajar con un sueldo menor a 15000.

Grafo de Flujo y complejidad ciclomtica problema c)

V(G) total = 2
Prueba 1: Trabajar con un producto, cuyo precio bruto sea mayor a 13000.
Prueba 1: Trabajar con un producto, cuyo precio bruto sea menor a 13000.

Grafo de Flujo y complejidad ciclomtica problema d)

V(G) total = 4
Prueba 1: MeterCarro en cualquier hora
Prueba 2: SacarCarro con un ndice que no existe
Prueba 3: SacarCarro con el ndice del carro metido en la prueba 2, en cualquier
hora posterior a la hora en la que se meti el carro de la prueba 2.
Prueba 4: SacarCarro con el msmo ndice de la prueba 3, y en cualquier hora.

3. Proponga un plan de pruebas que considere la estrategia


general de prueba para los problemas a) y b) del ejercicio 1.

Para problema a)
Prueba de las Unidades
Probar cada una de las unidades con las siguientes aserciones:
Empleado.esSexo(sexo)
si sexo == Empleado.sexo,
Empleado.esSexo ser verdadero
Empresa.contarEmpleados(sexo)
nunca ser negativo
siempre ser menor o igual a la cantidad
total de empleados en la empresa

Prueba de Integracin
Probar los siguientes mdulos que integran a las unidades, con las siguientes
aserciones:
Empresa.totalSueldos(sexo)
ser ms grande o igual que el sueldo
ms grande del Empleado.sexo == sexo en la empresa.
Empresa.promedioSueldos(sexo)
ser ms grande o igual que el sueldo
ms pequeo del Empleado.sexo == sexo en la empresa.
ser ms pequeo o igual que el sueldo
ms grande del Empleado.sexo == sexo en la empresa.

Prueba del Sistema y Validacin


No aplica.

Para problema b)
Prueba de las Unidades
Probamos las unidades:
Para el docente, probar que los sueldos sean reales (nada
desorbitante), que los nombres sean coherentes, verificar unicidad del
cdigo de docente.
Para el administrador se considerara los mismos puntos que
para el docente

Prueba de Integracin
Probamos los mdulos:
Se controla que no falle el sistema de descuentos, estar
constantemente pendiente de la taza de descuentos.

Prueba del Sistema y Validacin


No aplica.

Potrebbero piacerti anche