PASOAPASO ProyectoFinal
PASOAPASO ProyectoFinal
public class ProyectoFinal {: Esta línea declara una clase pública llamada ProyectoFinal. Público
significa que se puede acceder a esta clase desde otras partes de su programa.
static Scanner scanner = new Scanner(System.in);: Esta línea crea una variable estática llamada
scanner de tipo Scanner. static significa que esta variable pertenece a la clase misma y no a
ninguna instancia específica de la clase. Se inicializa con un nuevo objeto Scanner que lee la
entrada del estándar de entrada (generalmente el teclado).
static String[] vistas = new String[255];: Esta línea declara otra variable estática llamada vistas
de tipo arreglo de cadenas (String). Esencialmente, es un arreglo que puede almacenar hasta
255 cadenas de texto. Este arreglo podría usarse para almacenar información sobre diferentes
"vistas" (pantallas en la interfaz), lo que podría estar relacionado con un sistema de menús o
diferentes pantallas en su programa.
static int numVistas = 0;: Esta línea declara una variable entera estática llamada numVistas y la
inicializa a 0. Esta variable podría llevar un control de la cantidad de elementos utilizados
actualmente en el arreglo vistas.
static int[][] compras = new int[255][3];: Esta línea declara otra variable estática llamada
compras de tipo arreglo bidimensional de enteros. Puede contener hasta 255 filas (que
representan potencialmente 255 compras) y cada fila tiene 3 columnas para enteros. Este
arreglo podría usarse para almacenar información sobre compras, donde cada fila representa
una compra y las tres columnas almacenan detalles como ID del artículo, cantidad o precio
(dependiendo de la lógica de su programa).
static int numCompras = 0;: Esta línea declara una variable entera estática llamada
numCompras y la inicializa a 0. Esta variable podría llevar un control de la cantidad de filas
utilizadas actualmente en el arreglo compras, esencialmente la cantidad de compras
almacenadas.
2
public static void main(String[] args) {
cargarVistas();
public static void principal(String[] argumentos) {: Esta línea declara el método principal, que
es el punto de entrada de la ejecución de su programa en Java.
cargarVistas();: Esta línea llama a un método llamado cargarVistas. El punto y coma indica el
final de la declaración
while (true) {
System.out.println("Menú Principal");
System.out.println("1. Administrador");
System.out.println("2. Comprador");
System.out.println("3. Salir");
System.out.print("Ingrese su opción: ");
int opcion = scanner.nextInt();
scanner.nextLine();
while (true) {: Este bucle while se ejecuta mientras la condición true sea cierta. En este caso, la
condición siempre será cierta, lo que significa que el bucle se repetirá indefinidamente hasta
que se encuentre una instrucción break dentro del bucle.
int opcion = scanner.nextInt();: Esta línea lee un número entero del usuario utilizando el objeto
Scanner y lo almacena en la variable opcion.
scanner.nextLine();: Esta línea consume la línea restante en el búfer de entrada del Scanner,
evitando que el siguiente System.in.read() lea la misma línea. Esto es importante para evitar
problemas al leer la entrada del usuario en la siguiente iteración del bucle.
4
switch (opcion) {
case 1:
menuAdministrador();
break;
case 2:
menuComprador();
break;
case 3:
System.out.println("Saliendo del programa...");
guardarVistas(); // Guardar las vistas al salir del programa
return;
default:
System.out.println("Opción no válida. Intente de nuevo.");
Este fragmento de código Java utiliza una instrucción switch para evaluar la variable
opcion y ejecutar el código correspondiente a la opción seleccionada por el usuario.
switch (opcion) {: Esta línea inicia una instrucción switch. La variable opcion se utiliza
como la expresión de control para determinar qué bloque de código se ejecutará.
break;: Similar al caso anterior, esta instrucción break hace que el flujo de control salga
del bloque case 2 y del switch completo.
case 3:: Este bloque de código se ejecuta si la variable opcion es igual a 3.
guardarVistas();: Esta línea llama a una función llamada guardarVistas(). Se asume que
esta función guarda las "vistas" (pantallas o interfaces) utilizadas en el programa antes
de salir.
return;: Esta instrucción return hace que la función actual (posiblemente la función
main) finalice su ejecución y devuelva el control al programa que la llamó. Esto
significa que si el usuario elige la opción 3, se guardarán las vistas y el programa
terminará.
Función: cargarVistas()
Propósito: Esta función carga las vistas del programa desde un archivo de texto.
public static void cargarVistas() {: Esta línea declara una función pública y estática llamada
cargarVistas que no devuelve ningún valor (void).
try {: Esta línea inicia un bloque try para manejar posibles excepciones que puedan ocurrir
durante la lectura del archivo.
File file = new File("vistas.txt");: Esta línea crea un objeto File que representa el archivo de
texto llamado "vistas.txt". El archivo se supone que está ubicado en el mismo directorio que el
código fuente del programa.
Scanner fileScanner = new Scanner(file);: Esta línea crea un objeto Scanner asociado al archivo
file para leer su contenido línea por línea.
while (fileScanner.hasNextLine()) {: Esta línea inicia un bucle while que se repetirá mientras el
Scanner tenga líneas por leer en el archivo.
String vista = fileScanner.nextLine();: Esta línea lee una línea del archivo y la almacena en la
variable vista de tipo cadena de texto (String).
vistas[numVistas++] = vista;: Esta línea agrega la vista leída (vista) al arreglo vistas.
vistas[numVistas]: Accede a la posición actual del arreglo vistas indicada por el índice
numVistas.
numVistas++: Incrementa el valor de numVistas después de usarlo como índice. Esto asegura
que la próxima vista se agregue a la siguiente posición disponible en el arreglo.
Dentro del bloque catch se podría agregar código para manejar el error, como imprimir un
mensaje de aviso al usuario o finalizar el programa.
fileScanner.close();
System.out.println("Vistas cargadas correctamente.");
} catch (IOException e) {
System.out.println("Error al cargar las vistas desde el
archivo.");
Se podría agregar código adicional dentro del bloque catch para manejar
el error de manera más específica, como registrar el error en un archivo
de log o realizar acciones de recuperación.
Función: guardarVistas()
Propósito: Esta función guarda las vistas del programa en un archivo de texto.
public static void guardarVistas() {: Esta línea declara una función pública y estática
llamada guardarVistas que no devuelve ningún valor (void).
try {: Esta línea inicia un bloque try para manejar posibles excepciones que puedan
ocurrir durante la escritura en el archivo.
for (int i = 0; i < numVistas; i++) {: Esta línea inicia un bucle for que se repetirá desde i =
0 hasta i < numVistas.
i: Variable de control del bucle que itera a través de los elementos del arreglo vistas.
writer.write(vistas[i] + "\n");: Esta línea dentro del bucle escribe el contenido de la
posición actual i del arreglo vistas seguido de un salto de línea (\n) al archivo utilizando
el objeto writer.
}: Esta llave cierra el bloque for. Este bucle iterará y escribirá todas las vistas
almacenadas en el arreglo vistas al archivo "vistas.txt".
catch (IOException e) {: Este bloque catch se ejecutará si ocurre una excepción de tipo
IOException durante la escritura en el archivo. Esto podría deberse a problemas como
falta de permisos para escribir en el archivo o errores en el disco.
Dentro del bloque catch se podría agregar código para manejar el error, como imprimir
un mensaje de aviso al usuario o finalizar el programa.
}: Esta llave cierra el bloque try-catch.
8
writer.close();
System.out.println("Vistas guardadas correctamente.");
} catch (IOException e) {
System.out.println("Error al guardar las vistas en el archivo.");
}
Se podría agregar código adicional dentro del bloque catch para manejar
el error de manera más específica, como registrar el error en un archivo o
tomar acciones de recuperación.
Función: menuAdministrador()
Propósito: Esta función presenta un menú interactivo para el
administrador del programa, permitiéndole elegir entre diferentes
opciones.
10
Función: insertarNuevaVista()
try { //investigacion
FileWriter writer = new FileWriter("vistas.txt", true);
writer.write(nuevaVista + "\n");
writer.close();
System.out.println("Vista insertada correctamente.");
} catch (IOException e) {
System.out.println("Error al guardar la vista en el archivo.");
Este código intenta guardar los detalles de una nueva vista en un archivo de texto
llamado "vistas.txt". Lo hace utilizando un bloque try-catch para manejar posibles
errores de entrada/salida (I/O).
try {: Inicia un bloque try. El código dentro de este bloque se intentará ejecutar
primero.
Si todo se ejecuta correctamente dentro del bloque try, esta línea se imprime en la
consola, informando al usuario que la vista se insertó exitosamente en el archivo.
} catch (IOException e) {:
Inicia un bloque catch. Este bloque solo se ejecutará si ocurre un error de
entrada/salida (cualquier tipo de excepción IOException) durante la ejecución del
código dentro del bloque try.
System.out.println("Error al guardar la vista en el archivo.");:
12
Función: imprimirVistas()
Propósito: Esta función imprime una lista de las vistas almacenadas en el
programa.
public static void imprimirVistas() {: Esta línea declara una función pública
y estática llamada imprimirVistas() que no devuelve ningún valor (void).
Dentro del bucle for, esta línea imprime el número de la vista actual
(comenzando en 1), un punto (.), un espacio y luego el contenido de la
vista almacenada en la posición i del arreglo vistas.
switch (opcion) {
case 1:
comprarVista();
break;
case 2:
imprimirCompras();
break;
case 3:
return;
default:
System.out.println("Opción no válida. Intente de
nuevo.");
Función: menuComprador()
Propósito: Esta función presenta un menú interactivo para el comprador,
permitiéndole elegir entre diferentes opciones.
public static void menuComprador() {: Esta línea declara una función pública y estática
llamada menuComprador() que no devuelve ningún valor (void).
while (true) {: Este bucle while infinito indica que el menú del comprador se repetirá
continuamente hasta que el usuario elija la opción "Menú Principal" (opción 3).
System.out.println("2. Ver Vistas");: Esta línea imprime la segunda opción del menú:
"2. Ver Vistas".
System.out.println("3. Menú Principal");: Esta línea imprime la tercera opción del
menú: "3. Menú Principal".
int opcion = scanner.nextInt();: Esta línea lee la opción ingresada por el usuario como
un número entero y lo almacena en la variable opcion.
scanner.nextLine();: Esta línea consume el resto de la línea de entrada del usuario (que
podría contener espacios en blanco o caracteres adicionales) para evitar problemas
con la lectura de la siguiente entrada.
switch (opcion) {: Esta declaración switch inicia un bloque switch que evalúa el valor de
la variable opcion para determinar qué acción se debe tomar en función de la opción
seleccionada.
case 1:: Si el valor de opcion es 1, se ejecuta el código dentro de este caso. En este
caso, se llama a la función comprarVista() para iniciar el proceso de compra de una
vista.
case 2:: Si el valor de opcion es 2, se ejecuta el código dentro de este caso. En este
caso, se llama a la función imprimirCompras() para mostrar al comprador las vistas que
ha comprado anteriormente.
case 3:: Si el valor de opcion es 3, se ejecuta el código dentro de este caso. En este
caso, se utiliza la instrucción return para salir de la función menuComprador(), lo que
significa que el usuario regresa al menú principal.
14
public static void comprarVista() {
if (numVistas == 0) {
System.out.println("No hay vistas disponibles para comprar.");
return;
Función: comprarVista()
Dentro del bucle for, esta línea imprime el número de la vista actual
(comenzando en 1), un punto (.), un espacio y luego el contenido de la
vista almacenada en la posición i del arreglo vistas.
Se inicia un bucle for que se repetirá 3 veces (una vez por cada elemento
del arreglo). La variable i se utiliza como contador para iterar a través de
cada posición del arreglo.
numerosAleatorios[i] = random.nextInt(numVistas);:
Se inicia un bucle for externo que se ejecuta 3 veces (una vez por cada
número aleatorio generado anteriormente). La variable i se utiliza como
contador para iterar a través de cada elemento del arreglo
numerosAleatorios.
boolean vistaExiste = false;:
Dentro del bucle for externo, se inicia otro bucle for interno que itera a
través de todas las compras registradas en el arreglo compras. La variable j
se utiliza como contador para iterar a través de cada elemento del arreglo
compras.
if (compras[j][0] == numerosAleatorios[i]) {:
Se verifica si el valor en la columna 0 (índice 0) del elemento actual j del
arreglo compras coincide con el número aleatorio actual en la posición i
del arreglo numerosAleatorios.
Si esta condición se cumple, significa que la vista del número aleatorio
actual ya se encuentra en el registro de compras.
compras[j][2]++;:
if (!vistaExiste) {:
18
try { //investigacion
FileWriter writer = new FileWriter("compras.txt", true);
for (int i = 0; i < numCompras; i++) {
writer.write(compras[i][0] + " " + vistas[compras[i][1]] + " "
+ compras[i][2] + "\n");
}
writer.close();
System.out.println("Vistas compradas correctamente.");
} catch (IOException e) {
System.out.println("Error al guardar las compras en el archivo.");
try {:
FileWriter writer = new FileWriter("compras.txt", true);:
Se inicia un bucle for que se ejecuta numCompras veces (una vez por cada
registro de compra). La variable i se utiliza como contador para iterar a
través de cada elemento del arreglo compras.
writer.write(compras[i][0] + " " + vistas[compras[i][1]] + " " + compras[i][2]
+ "\n");:
Dentro del bucle for, se utiliza el método write del objeto writer para
escribir información en el archivo de texto.
La línea que se escribe en el archivo se construye concatenando:
El valor en la columna 0 (índice 0) del elemento actual i del arreglo
compras (posiblemente el identificador de la vista).
Un espacio en blanco (" ").
El contenido de la vista correspondiente obtenida del arreglo vistas
utilizando el valor en la columna 1 (índice 1) del elemento actual i del
arreglo compras.
Un espacio en blanco (" ").
El valor en la columna 2 (índice 2) del elemento actual i del arreglo
compras (posiblemente la cantidad comprada).
Un salto de línea ("\n").
writer.close();:
Fuera del bucle for, se utiliza el método close del objeto writer para cerrar
el archivo de texto. Es importante cerrar el archivo para liberar recursos.
System.out.println("Vistas compradas correctamente.");:
19
Función: imprimirCompras()
Propósito: Esta función imprime una lista de las compras realizadas por el
usuario.
public static void imprimirCompras() {: Esta línea declara una función
pública y estática llamada imprimirCompras() que no devuelve ningún
valor (void).
Se inicia un bucle for que se ejecuta numCompras veces (una vez por cada
registro de compra). La variable i se utiliza como contador para iterar a
través de cada elemento del arreglo compras.
System.out.println(compras[i][0] + "\t" + vistas[compras[i][1]] + "\t" +
compras[i][2]);:
Dentro del bucle for, se imprime una línea en la consola que muestra la
información de la compra actual:
El valor en la columna 0 (índice 0) del elemento actual i del arreglo
compras (posiblemente el identificador de la vista).
Un tabulador ("\t").
El contenido de la vista correspondiente obtenida del arreglo vistas
utilizando el valor en la columna 1 (índice 1) del elemento actual i del
arreglo compras.
Un tabulador ("\t").
El valor en la columna 2 (índice 2) del elemento actual i del arreglo
compras (posiblemente la cantidad comprada).