Java - ayuda con este proyecto de codigo en java para una peluqueria

 
Vista:
sin imagen de perfil

ayuda con este proyecto de codigo en java para una peluqueria

Publicado por celsa (1 intervención) el 30/04/2023 05:51:55
se requiere hacer un sistema para la peluquería X. este negocio brinda diferentes servicios como corte decabello,tratamiento facial,manicure,entre otros. La empresa le pago a cada empleado según el tipo y cantidad de servicios que realiza cada uno de ellos. Se pide hacer un menü que permita:
l. Contratar empleados
2. Asignar servicios los a empleados
3. Reportar los slos que hizo cada empleado
4. Reportar el monto total que cada empleado logró para la empresa con los servios que realizó
S. Eliminar servicio asignado a un empleado (si hay alguna queja el servicio no se tomará en cuenta para saber cuento se le deberá pagar)
6. Reportar todos los empleados con cada uno delos servicios que realizó cada uno de ellos .
porfi u.u
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda con este proyecto de codigo en java para una peluqueria

Publicado por Kabuto (1383 intervenciones) el 30/04/2023 12:30:20
Hola

Lo primero es crear una clase que modele los servicios que ofrece la peluquería.
Un Servicio debería tener, al menos, un nombre y un precio, es decir, un String y un double.

Aunque ya que los servicios van a tener unos nombres concretos, si queremos, podemos usar una enumeración(enum) para crear una lista de los servicios que se ofrecen.
Así se evitan cosas como que un mismo servicio tenga nombres dispares porque cada empleado lo escribe como quiere al registrarlo en el sistema. Por ejemplo: cortar pelo, pelo cortado, corte de pelo, cortar cabello, corte....
Hay decenas de formas de escribir el nombre de un mismo servicio, mejor si se unifica en un único nombre a elegir de una lista.

Así que el nombre del Servicio, en lugar de usar un String, usaremos un enumerador llamado Servicios (y si lo ves más fácil, puedes usar un String y listo)

Este enum podemos declararlo dentro de la clase Servicio, pero como "public" y "static", así estará disponible para usarlo desde otras clases del programa.

Igual que hacemos una lista de servicios, podemos hacer también una lista de precios prefijados que correspondan a cada uno de los servicios.
Pero para los precios no usaremos un enum, nos será más útil crear un array de tipo double.

Así, para construir un objeto Servicio solo necesitaremos recibir por constructor uno de los valores del enum de la lista de servicios.
Dicho valor del enum posee además un valor ordinal que puede ser 0,1,2,3... etc...
Pues ese mismo valor ordinal nos servirá para saber que precio del array le corresponde.

Esta podría ser la clase Servicio, que incluye en su interior el enum Servicios. Cuidado de no confundir uno con otro, porque son cosas distintas.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class Servicio {
 
	//Servicios disponibles
	public static enum Servicios {
		CORTE_PELO, COLORACION, MECHAS, TRATAMIENTO_FACIAL, MANICURA
	}
 
	//Precios de los servicios
	private final double[] PRECIOS  = {10.5, 18, 12,5, 20, 8.5};
 
	//Atributos de clase
	private Servicios servicio;
	private double precio;
 
	//Constructor
	public Servicio(Servicios servicio) {
		this.servicio = servicio;
		//La posición ordinal que el servicio ocupa en el enum, coincide con la posición del precio correspondiente
		precio = PRECIOS[servicio.ordinal()];
	}
 
	//Métodos
	public Servicios getServicio() {
		return servicio;
	}
 
	public double getPrecio() {
		return precio;
	}
 
	@Override
	public String toString() {
		return String.format("Servicio: %s --- Precio: %.2f", servicio.toString(), precio);
	}
 
	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Servicio) {
			Servicio otroServicio = (Servicio) obj;
			return servicio.equals(otroServicio.getServicio());
		}
		else
			return false;
	}
 
}

Lo siguiente es crear una clase Empleado.
Bastará con que tenga un nombre y un ArrayList donde podamos añadirle los servicios que el empleado vaya realizando.
Si necesitará métodos para agregar/eliminar un Servicio de su lista y otros para listar los servicios realizados y calcular el monto total que sumarían esos servicios.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
public class Empleado {
 
	//Atributos de clase
	private String nombre;
	private ArrayList<Servicio> servicios;
 
	//constructor
	public Empleado(String nombre) {
		this.nombre = nombre;
		servicios = new ArrayList<Servicio>();
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public void agregarServicio(Servicio serv) {
		servicios.add(serv);
	}
 
	public void eliminarServicio(Servicio serv) {
		if (servicios.isEmpty())
			System.out.println("Este Empleado no tiene Servicios registrados");
		else {
			if (servicios.remove(serv))
				System.out.println("Servicio eliminado");
			else
				System.out.println("Este Empleado no ha realizado ningún: " + serv.getServicio());
		}
	}
 
	public void reporteDeServicios() {
		System.out.println("Servicios realizados por " + nombre + "\n");
		if (servicios.isEmpty())
			System.out.println("Este Empleado no tiene Servicios registrados");
		else {
			for (Servicio serv: servicios)
				System.out.println("\t" + serv.getServicio());
			System.out.println("Total: " + servicios.size() + " servicios.\n");
		}
	}
 
	public void reporteMontoTotal() {
		double monto = 0;
		for (Servicio serv: servicios)
			monto += serv.getPrecio();
		System.out.println("Monto total: " + monto);
	}
 
	@Override
	public boolean equals(Object obj) {
		if (obj instanceof Empleado) {
			Empleado otroEmpleado = (Empleado) obj;
			return nombre.equals(otroEmpleado.getNombre());
		}
		else
			return false;
	}
 
}

Y ya solo queda hacer una clase principal donde ofrecer un menú y gestionar empleados y servicios.

En esta clase necesitaremos un ArrayList donde poder añadir los Empleados que se van contratando.

Cuando el usuario tenga que elegir un Servicio para agregar a un Empleado, accederemos al enum (por eso lo hemos hecho publico y estático) para crear una lista en pantalla y poder elegirlo solo con introducir un número.
Necesario hacer un import adecuado para poder acceder a la enumeración con la lista de servicios.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
import java.util.ArrayList;
import java.util.Scanner;
 
import peluqueriaServicios.Servicio.Servicios;
 
public class Peluqueria {
 
	private static ArrayList<Empleado> empleados;
	private static Scanner teclado;
 
	public static void main(String[] args) {
		empleados = new ArrayList<Empleado>();
		teclado = new Scanner(System.in);
		int opcion = 0;
 
		do {
			System.out.println("\n\t\tMENU PELUQUERIA");
			System.out.println("\t\t---- ----------");
			System.out.println("\t(1) -- Contratar Empleado");
			System.out.println("\t(2) -- Asignar Servicio a un Empleado");
			System.out.println("\t(3) -- Eliminar Servicio a un Empleado");
			System.out.println("\t(4) -- Reportar Servicios de un Empleado");
			System.out.println("\t(5) -- Reportar Monto total de un Empleado");
			System.out.println("\t(6) -- Reporte total de todos los Empleados y sus Servicios");
			System.out.println("\t(9) -- TERMINAR PROGRAMA");
			System.out.print("Opcion: ");
			opcion = Integer.parseInt(teclado.nextLine());
 
			switch(opcion) {
				case 1:
					contratar();
					break;
				case 2:
					asignarServicio();
					break;
				case 3:
					eliminarServicio();
					break;
				case 4:
					reporteServicioEmpleado();
					break;
				case 5:
					reporteMontoEmpleado();
					break;
				case 6:
					reporteTotalEmpleados();
					break;
				case 9:
					System.out.println("\n\t\tFIN DE PROGRAMA");
					break;
				default:
					System.out.println("Opcion equivocada");
			}
		} while(opcion != 9);
 
	}
 
	private static void contratar() {
		System.out.println("\n\tContratar Empleado");
		System.out.print("Nombre completo: ");
		String nombre = teclado.nextLine();
		empleados.add(new Empleado(nombre));
		System.out.println("\nNuevo empleado contratado");
	}
 
	private static void asignarServicio() {
		System.out.println("\n\tAsignar Servicio");
		if (empleados.isEmpty())
			System.out.println("No hay Empleados contratados...");
		else {
			System.out.print("Nombre del Empleado: ");
			String nombre = teclado.nextLine();
			//Buscamos el empleado
			Empleado buscar = null;
			for (Empleado emp: empleados)
				if (emp.getNombre().equals(nombre))
					buscar = emp;
			//Comprobamos si lo hemos encontrado
			if (buscar == null)
				System.out.println("\nNo se encuentra el empleado: " + nombre);
			else {
				System.out.println("\nElija el Servicio que quiere asignar.");
				buscar.agregarServicio(new Servicio(elegirServicio()));
			}
		}
	}
 
	private static void eliminarServicio() {
		System.out.println("\n\tEliminar Servicio");
		if (empleados.isEmpty())
			System.out.println("No hay Empleados contratados...");
		else {
			System.out.print("Nombre del Empleado: ");
			String nombre = teclado.nextLine();
			//Buscamos el empleado
			Empleado buscar = null;
			for (Empleado emp: empleados)
				if (emp.getNombre().equals(nombre))
					buscar = emp;
			//Comprobamos si lo hemos encontrado
			if (buscar == null)
				System.out.println("\nNo se encuentra el empleado: " + nombre);
			else {
				System.out.println("\nElija el Servicio que quiere eliminar.");
				buscar.eliminarServicio(new Servicio(elegirServicio()));
			}
		}
	}
 
	private static void reporteServicioEmpleado() {
		System.out.println("\n\tReporte Servicios de un Empleado");
		if (empleados.isEmpty())
			System.out.println("No hay Empleados contratados...");
		else {
			System.out.print("Nombre del Empleado: ");
			String nombre = teclado.nextLine();
			//Buscamos el empleado
			Empleado buscar = null;
			for (Empleado emp: empleados)
				if (emp.getNombre().equals(nombre))
					buscar = emp;
			//Comprobamos si lo hemos encontrado
			System.out.println(); //Salto de linea
			if (buscar == null)
				System.out.println("\nNo se encuentra el empleado: " + nombre);
			else
				buscar.reporteDeServicios();
		}
	}
 
	private static void reporteMontoEmpleado() {
		System.out.println("\n\tReporte Monto de un Empleado");
		if (empleados.isEmpty())
			System.out.println("No hay Empleados contratados...");
		else {
			System.out.print("Nombre del Empleado: ");
			String nombre = teclado.nextLine();
			//Buscamos el empleado
			Empleado buscar = null;
			for (Empleado emp: empleados)
				if (emp.getNombre().equals(nombre))
					buscar = emp;
			//Comprobamos si lo hemos encontrado
			System.out.println(); //Salto de linea
			if (buscar == null)
				System.out.println("\nNo se encuentra el empleado: " + nombre);
			else
				buscar.reporteMontoTotal();
		}
	}
 
	private static void reporteTotalEmpleados() {
		System.out.println("\n\tReporte total de Empleados");
		if (empleados.isEmpty())
			System.out.println("No hay Empleados contratados...");
		else {
			for (Empleado emp: empleados) {
				System.out.println("\n\t****************");
				emp.reporteDeServicios();
				emp.reporteMontoTotal();
				System.out.println("\t****************");
			}
		}
	}
 
	/**
	 * Muestra una lista de los Servicios disponibles y
	 * permite escoger uno indicando su número.
	 */
	private static Servicios elegirServicio() {
		Servicios elegido = null;
		//Creamos un array a partir de los valores del enum Servicios
		Servicios[] lista = Servicios.values();
		while (elegido == null) {
			System.out.println("\n\t\tLista de Servicios");
			for (int i = 0; i < lista.length; i++)
				System.out.println("\t#" + i + " ---> " + lista[i].toString());
			System.out.print("Numero de Servicio: ");
			int numero = Integer.parseInt(teclado.nextLine());
			if (numero < 0 || numero >= lista.length)
				System.out.println("Servicio incorrecta. Escoja un numero de la lista.");
			else
				elegido = lista[numero];
		}
 
		return elegido;
	}
}


Y ya está.
Analiza el código, pruébalo y pregunta si algo no se entiende.
Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

gracias :)

Publicado por sin nombre (1 intervención) el 30/04/2023 22:13:36
gracias una pregunta haces videos explicativos me gustaria aprnder mas y explicas muy bien gracias :3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

ayuda con este proyecto de codigo en java para una peluqueria

Publicado por pepe (2 intervenciones) el 30/04/2023 22:58:00
enves deusar static void se puede usar private void?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

ayuda con este proyecto de codigo en java para una peluqueria

Publicado por Kabuto (1383 intervenciones) el 01/05/2023 00:15:32
1
enves deusar static void se puede usar private void?

En la clase Peluquería, no.


El método main(), como ya sabréis, obligatoriamente ha de ser estático.

Estático significa que no es necesario crear un objeto Peluqueria para poder ejecutarlo. Puesto que main() es el método que pone "todo en marcha", es necesario que pueda invocarse sin tener que crear previamente un objeto de la clase, ya que de hecho es imposible crear nada si primero no se pone "todo en marcha"

Entonces, main(), al ser static, solo va a poder interactuar de forma directa con atributos y métodos que TAMBIÉN sean static.
Por eso dentro de Peluquería TODO es static.

Si NO los declaramos como static, entonces dentro de main() NO podríamos llamar a esos métodos de forma directa, habría que crear un objeto Peluqueria y a través de él, ya si podríamos invocar a los métodos y atributos "no estáticos".

Por lo general, vamos a preferir que sean static para facilitar las cosas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar