Este documento presenta un proyecto final de una aplicación llamada "FreeKare" desarrollada por tres estudiantes para visualizar y manejar datos de empleados. Incluye una introducción, diseño con tablas de registros y diagramas de flujo, menús y código de la aplicación escrita en Java con clases y métodos para leer, escribir y procesar datos. El propósito general es ofrecer una interfaz para ver y editar ventas de diferentes empleados.
1. Universidad Interamericana de Puerto Rico
Recinto de Aguadilla
Departamento de Ciencias y Tecnología
Proyecto Final: “FreeKare”
Realizado por: Abdías Vidal Valentín, Cristian Rosario Acevedo y Kevin Martínez Ramírez
Curso: COMP 2400
Sección: 36587
Fecha: 11 de mayo de 2016
Profesor Eduardo Vargas Moya
2. 1
Tabla de Contenido
Introducción.................................................................................................................................... 2
Diseño: ............................................................................................................................................ 3
Records:....................................................................................................................................... 3
Diagramas de Flujo: ...................................................................Error! Bookmark not defined.
Menús:......................................................................................................................................... 5
Código:........................................................................................................................................ 5
Conclusión: ..................................................................................................................................... 6
Referencias.................................................................................................................................... 28
3. 2
Introduccción:
Dentro de este código, usted podrá encontrar todo lo relacionado con la aplicación para la
visualización y manejo de datos de empleados dentro de una empresa.
4. 3
Diseño:
Records:
Mes Abril Mayo
Día
9AM -
10:20AM
martes,
12
Jueves, 14 Martes,
19
Jueves 21 Martes,
26
Jueves, 29 Martes, 3 Jueves, 5
Notas Flujo
grama
algoritmo Comienzo
de
codificar
Enlazar
códigos
applets Enlazar
applet
Bug run fiesta
7. 6
Código:
import java.applet.Applet;
import java.awt.*;
import java.util.concurrent.TimeUnit;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.net.*;
/*Autores: Cristian J. Rosario Acevedo
* Abdías Vidal Valentín
* Kevin Martínez Ramírez
* Curso: object oriented progrming
* Institucion Educativa: Universidad Interamericana de Puerto
Rico, Recinto de Aguadilla
* Propocito: Dentro de este codigo, usted podrá encontrar todo
lo relacionado con la aplicación para la visualización y manejo
de datos de empleados dentro de una empresa..
*/
public class OfficialMain extends Applet{
public static void main (String args[]) {
JFrame frame = new JFrame("Loading...");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = (JPanel)frame.getContentPane();
JLabel label = new JLabel();
label.setIcon(new ImageIcon("load.gif"));// your image
here
10. 9
class start {
public static void main(String[] args) {//corre el main del
main
MainPassword.main(null);
}
}
class ThanksYou {
public static void main (String args[])
{
JFrame frame3 = new JFrame("Hasta Luego!");
frame3.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel3 = (JPanel)frame3.getContentPane();
JLabel label3 = new JLabel();
label3.setIcon(new ImageIcon("GoodBye.png"));// your
image here
panel3.add(label3);
frame3.pack();
frame3.setVisible(true);
frame3.setLocationRelativeTo(null);
try
{
Thread.sleep(5000);
frame3.dispose();
}
catch (Exception e)
{
//Excepcion
}
}
}
11. 10
import javax.swing.*;
/*Autores: Cristian J. Rosario Acevedo
* Abdías Vidal Valentín
* Kevin Martínez Ramírez
* Clase: object oriented programming
* Institucion Educativa: Universidad Interamericana de Puerto
Rico, recinto de Aguadilla
* Propocito: Dentro de este codigo, usted podrá encontrar todo
lo relacionado con la aplicación para la visualización y manejo
de datos de empleados dentro de una empresa..
*/
class Password {
String temporary;
Password()
{
temporary = "freekare2016";
}
static String setPassword(String passwordValue) {//se crea el
password
JLabel jPassword = new JLabel("Ingrese la nueva
contrasena");
JTextField password = new JPasswordField();
Object[] ob = { jPassword, password };
int result = JOptionPane.showConfirmDialog(null, ob,
"Acceso", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, new
ImageIcon(MainPassword.class.getResource("FreeKareicon.png")));
if (result == JOptionPane.OK_OPTION) {
passwordValue = password.getText();
}
return passwordValue;//se guarda el pass key y lo pasa a
otro codigo
}//termina de crear
12. 11
static void lockSession() {//le have lock al y te vota del
codigo
JOptionPane.showMessageDialog(null, "No hay intentos
disponibles. Terminando el programa en 3 segundos...",
"Aviso", JOptionPane.PLAIN_MESSAGE);
MainPassword.delay(3000);
System.exit(0);
}//termina
static String getPassword(String passwordValue, String tmp)
{//deja que el usario ingrese el pass word 3 veces
int attempts = 3;
while (!passwordValue.equalsIgnoreCase(tmp) && attempts >=
1) {
JLabel jPassword = new JLabel("Ingrese su contrasena");
JTextField password = new JPasswordField();
Object[] ob = { jPassword, password };
int result = JOptionPane.showConfirmDialog(null, ob,
"Acceso", JOptionPane.OK_CANCEL_OPTION,
JOptionPane.QUESTION_MESSAGE, new
ImageIcon(MainPassword.class.getResource("FreeKareicon.png")));
if (result == JOptionPane.OK_OPTION) {
passwordValue = password.getText();
}
else
return null;
if (!passwordValue.equalsIgnoreCase(tmp)) {
attempts--;
JOptionPane.showMessageDialog(null, "Contrasena
incorrecta. Usted tiene " + attempts + " intentos",
"Acceso Denegado", JOptionPane.ERROR_MESSAGE);
}
else {
attempts = 3;
}
13. 12
} // while ends here
if (attempts == 0) {
lockSession();
}
return passwordValue;
}
}//termia
import javax.swing.*;
import java.awt.*;
import java.util.concurrent.TimeUnit;
/*Autores: Cristian J. Rosario Acevedo
* Abdías Vidal Valentín
* Kevin Martínez Ramírez
* Clase: object oriented programming
* Institucion Educativa: Universidad Interamericana de Puerto
Rico, Recinto de Aguadilla
* Propocito: Dentro de este codigo, usted podrá encontrar todo
lo relacionado con la aplicación para la visualización y manejo
de datos de empleados dentro de una empresa..
*/
public class MainPassword {
static void delay (int i){//delay mas manejable.
try {
TimeUnit.SECONDS.sleep(1);
}
catch (Exception e){
}
}
public static void main(String args[]) {//comienza main
String password = " ", selection, def = FileIO.readPassword();
//System.out.println("debug password: "+def);
14. 13
int option;
Password key = new Password();
password = key.getPassword(password, def);
boolean passed = true;
while(passed){
try{
do {
selection = (String) JOptionPane.showInputDialog(null,
"~ Menu Principal ~ n 1. Cambiar Password n 2. Vendedores
n 9. Salir n", "Hola",
JOptionPane.INFORMATION_MESSAGE, new
ImageIcon(MainPassword.class.getResource("icon32.png")), null,
null);
if ((selection == null)){
ThanksYou.main(null);
break;
}
option = Integer.parseInt(selection);
switch (option) {
case 1: {//cambia el password
password = " ";
password = key.getPassword(password, def);
password = key.setPassword(password);
def = password;
FileIO.writePassword(def);
break;
}
case 2: {//entras a venta
15. 14
DataIO.mainVentas();
break;
}
case 3:{//entras a unsecreto
JOptionPane.showMessageDialog(null,"creado por n Kevin n
Abdias n Cristian n Finalizado en 5/5/16 a las 6:02",
"Secreto", JOptionPane.INFORMATION_MESSAGE, new
ImageIcon(MainPassword.class.getResource("icon33.png")));
break;
}
case 9: {//sales
ThanksYou.main(null);
break;
}
default: {
JOptionPane.showMessageDialog(null,"Solo escriba
numeros no letras", "Error", JOptionPane.INFORMATION_MESSAGE,
new ImageIcon(MainPassword.class.getResource("icon32.png")));
}
}
delay(1000);
}
while (option != 9);
passed = false;
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"Solo ingrese
numeros para seleccionar unas de las opciones del menu
principal",
"Mensaje de Error", JOptionPane.INFORMATION_MESSAGE,
new ImageIcon(MainPassword.class.getResource("icon34.png")));
}
}
}
}
//end
16. 15
import java.io.*;
import java.util.Scanner;
/*Autores: Cristian J. Rosario Acevedo
* Abdías Vidal Valentín
* Kevin Martínez Ramírez
* Curso: object oriented programming
* Institucion Educativa: Universidad Interamericana de Puerto
Rico, Recinto de Aguadilla
* Propocito: Dentro de este codigo, usted podrá encontrar todo
lo relacionado con la aplicación para la visualización y manejo
de datos de empleados dentro de una empresa. .
*/
public class FileIO {//se salvan los datos.
public static void write(String[][] data) {//escribe el
mesaje un, array de dos dimensine es su parametro
PrintWriter fileOutput;
try {
fileOutput = new PrintWriter("database.db");
fileOutput.println(data.length);
for (int i = 0; i < data.length; i++) {
fileOutput.println(data[i].length);
for (int j = 0; j < data[i].length; j++) {
fileOutput.println(data[i][j]);
}
}//
fileOutput.close();
}
catch (IOException e) {
System.out.println("Error escribiendo archivo: " + e);
}
}//termina
public static String readPassword(){// lee el password
escrito
String password = null;
FileReader reader;
Scanner fileInput;
if (!(new File("passwd.key").exists())){
try {
System.out.println("No password found, creating
17. 16
default one.");
PrintWriter pw = new PrintWriter(new
File("passwd.key"));
pw.print("admin");
pw.close();
}
catch (IOException ex) {
System.out.println("Failed to create password file:
"+ex);
}
}
try {
reader = new FileReader("passwd.key");
fileInput = new Scanner(reader);
password = fileInput.nextLine();
fileInput.close();
}
catch (FileNotFoundException e) {
}
return password;
}//Termina de leer el password
public static void writePassword(String pass){//escribe el
nuevo password
String password = pass;
FileReader reader;
Scanner fileInput;
try {
System.out.println("Writing new password.");
PrintWriter pw = new PrintWriter(new
File("passwd.key"));
pw.print(password);
pw.close();
}
catch (IOException ex) {
System.out.println("Failed to write password file:
"+ex);
}
}// termina
public static String[][] read() {//lee el documento
18. 17
String data[][] = null;
FileReader reader;
Scanner fileInput;
try {
reader = new FileReader("database.db");
fileInput = new Scanner(reader);
int blocks = Integer.valueOf(fileInput.nextLine());
data = new String[blocks][];
for (int i = 0; i < blocks; i++) {
int lines = Integer.valueOf(fileInput.nextLine());
data[i] = new String[lines];
for (int j = 0; j < lines; j++) {
data[i][j] = fileInput.nextLine();
}
}
fileInput.close();
}
catch (IOException e) {
System.out.println("Error leyendo archivo: " + e);
}
return data;
}//termina de leer el documento
public static void parseData(String[][] data) {//separa los
dias
String day = null;
for (int i = 0; i < data.length; i++) {
if (data[i].length != 9) {
System.out.println("Wrong format!");
return;
}
System.out.println("Nombre de empleado: " +
data[i][0]);
int sum = 0;
for (int j = 1; j < 8; j++) {
if (Integer.valueOf(data[i][j]) == -1)
continue;
switch (j) {
case 1:
19. 18
day = "Domingo";
break;
case 2:
day = "Lunes";
break;
case 3:
day = "Martes";
break;
case 4:
day = "Miercoles";
break;
case 5:
day = "Jueves";
break;
case 6:
day = "Viernes";
break;
case 7:
day = "Sabado";
break;
}
sum += Integer.valueOf(data[i][j]);
System.out.printf("%s: $%2d.n", day,
Integer.valueOf(data[i][j]));
}
System.out.printf("Su promedio de la semana fue:
%.2fn", (float)sum/5);
}
}
}//end
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;
/*Autores: Cristian J. Rosario Acevedo
* Abdías Vidal Valentín
* Kevin Martínez Ramírez
* Curso: object oriented progrming
* Institucion Educativa: Universidad Interamericana de Puerto
Rico, Recinto de Aguadilla
* Propocito: Dentro de este codigo, usted podrá encontrar todo
20. 19
lo relacionado con la aplicación para la visualización y manejo
de datos de empleados dentro de una empresa..
*/
public class DataIO {
static String data[][] = FileIO.read();
// main for test
public static void main(String[] args) {
FileIO.parseData(data);
mainVentas();
}
// main for tests
public static void mainVentas() {
String selection;
int option = 0;
do {
selection = paneInput(
"~ Menu de Ventas ~ n 1. Ver Ventas n 2. Entrada de
Ventas n n 0. Salir n",
"Ventas");
if ((selection == null) || (selection.length() == 0))
break;
try {
option = Integer.parseInt(selection);
} catch (Exception e) {
paneMsg("Numero Invalido", "Error");
}
switch (option) {
case 1: {
System.out.println("VENTAS!!!!");
viewSales();
break;
}
case 2: {
System.out.println("ENTRADA DE VENTAS!!!!");
editSales();
break;
}
case 4: {
21. 20
JOptionPane.showMessageDialog(null,"I really wanted this in
the program but sadly, I didn't deliver", "hidden",
JOptionPane.INFORMATION_MESSAGE, new
ImageIcon(MainPassword.class.getResource("Loading.gif")));
break;
}
case 0: {
System.out.println("saliendo de ventas");
break;
}
}
} while (option != 0);
}
public static void editSales() {
int option = -1;
do {
String selection = paneInput("~ Menu de Editor ~ n Escoje
empleado a editar (1 a 10) n 0. Salir n",
"Editar datos");
if (selection == null)
break;
try {
option = Integer.parseInt(selection);
} catch (Exception e) {
paneMsg("Numero Invalido", "Error");
continue;
}
System.out.println(option);
if (option == 0)
break;
if (option > 0 && option < 11) {
editEmpleado(option);
} else {
paneMsg("Numero Invalido", "Error");
}
} while (option != 0);
System.out.println("exit");
22. 21
FileIO.write(data);
}
public static void editEmpleado(int emp) {
int e = emp - 1;
int option = -1;
do {
String selection = paneInput("~ Menu de ventas de Empleado#"
+ emp
+ " ~ n Escoje dia a editar n 1. Domingo n 2. Lunes n
3. Martes n "
+ "4. Miercoles n 5. Jueves n 6. Viernes n 7. Sabado n
0. Salir n", "Editar datos");
if (selection == null)
break;
try {
option = Integer.parseInt(selection);
} catch (Exception e1) {
paneMsg("Numero Invalido", "Error");
continue;
}
if (option > 0 && option < 8)
editDia(e, option);
else if (option != 0)
paneMsg("Numero Invalido", "Error");
} while (option != 0);
}
public static void editDia(int e, int d) {
int emp = e + 1;
String dia = getDay(d);
int v = Integer.parseInt(data[e][d]);
do {
String edit = paneInput(
"~ Empleado#" + emp + " genero $" + v + " en ventas."
+ "n -1 denota que empleado no trabaja este dia",
"Ventas del " + dia + " por Empleado#" + emp);
if (edit == null)
return;
try {
Integer.parseInt(edit);
23. 22
} catch (Exception e1) {
paneMsg("Numero Invalido", "Error");
continue;
}
data[e][d] = edit;
break;
} while (true);
}
public static void viewSales() {
int option;
do {
String selection = paneInput("~ Menu de Ventas ~ n 1. Ventas
por Empleado n "
+ "2. ventas por dia n 3. Ventas totales n 0. Salir
n", "Ver Ventas");
if (selection == null)
return;
try {
option = Integer.parseInt(selection);
} catch (Exception e1) {
paneMsg("Numero Invalido", "Error");
continue;
}
switch (option) {
case 0:
return;
case 1:
viewEmpleado();
continue;
case 2:
viewDia();
continue;
case 3:
viewTotal();
continue;
default:
paneMsg("Numero Invalido", "Error");
24. 23
}
} while (true);
}
private static void viewTotal() {
// TODO Auto-generated method stub
int total = 0;
for (int empleado = 0; empleado < 10; empleado++) {
for (int dia = 1; dia < 8; dia++) {
if (Integer.parseInt(data[empleado][dia]) == -1)
continue;
total = total + Integer.parseInt(data[empleado][dia]);
}
}
paneMsg("El total de ventas es: $" + total, "Total de
Ventas");
}
private static void viewDia() {
// TODO Auto-generated method stub
int option = -1;
do {
String selection = paneInput(
"~ Menu de ventas por dia" + " ~ n Escoje dia a ver n 1.
Domingo n 2. Lunes n 3. Martes n "
+ "4. Miercoles n 5. Jueves n 6. Viernes n 7. Sabado
n 0. Salir n",
"Ver Ventas");
if (selection == null)
break;
try {
option = Integer.parseInt(selection);
} catch (Exception e1) {
paneMsg("Numero Invalido", "Error");
continue;
}
if (option > 0 && option < 8) {
int total = 0;
for (int e = 0; e < 10; e++) {
if (Integer.parseInt(data[e][option]) == -1)
25. 24
continue;
total = total + Integer.parseInt(data[e][option]);
}
String dia = getDay(option);
paneMsg("Total generado en " + dia + " es: $" + total,
"Total dia " + dia);
} else if (option != 0)
paneMsg("Numero Invalido", "Error");
} while (option != 0);
}
private static void viewEmpleado() {
// TODO Auto-generated method stub
int option = -1;
do {
String selection = paneInput("~ Vetas por Empleado ~ n
Escoje empleado a ver (1 a 10) n 0. Salir n",
"Ver Ventas");
if (selection == null)
break;
try {
option = Integer.parseInt(selection);
} catch (Exception e) {
paneMsg("Numero Invalido", "Error");
continue;
}
System.out.println(option);
if (option == 0)
break;
if (option > 0 && option < 11) {
parseEmpleado(option);
} else {
paneMsg("Numero Invalido", "Error");
}
} while (option != 0);
}
private static void parseEmpleado(int option) {
int e = option - 1;
int sum = 0;
26. 25
String s = "Empleado#" + option + "n";
for (int i = 1; i < 8; i++) {
String dia = getDay(i);
System.out.println(i + " raw data: " + data[e][i]);
if (Integer.parseInt(data[e][i]) == -1) {
continue;
} else {
s = s + dia + ": $" + data[e][i] + " n";
}
sum += Integer.valueOf(data[e][i]);
}
s = s + String.format("Su promedio de la semana fue: $%.2fn",
(float) sum / 5);
paneMsg(s, "Ventas por Empleado#" + (option) + "");
}
public static String paneInput(String body, String head) {
String input = (String) JOptionPane.showInputDialog(null,
body, head, JOptionPane.INFORMATION_MESSAGE,
new ImageIcon(MainPassword.class.getResource("icon32.png")),
null, null);
return input;
}
public static void paneMsg(String body, String head) {
JOptionPane.showMessageDialog(null, body, head,
JOptionPane.INFORMATION_MESSAGE,
new
ImageIcon(MainPassword.class.getResource("icon32.png")));
}
public static String getDay(int d) {
String dia = "Payday";
switch (d) {
case 1:
dia = "Domingo";
break;
case 2:
27. 26
dia = "Lunes";
break;
case 3:
dia = "Martes";
break;
case 4:
dia = "Miercoles";
break;
case 5:
dia = "Jueves";
break;
case 6:
dia = "Viernes";
break;
case 7:
dia = "Sabado";
break;
}
return dia;
}
}
29. 28
Conclusión:
Este Proyecto nos hizo realizar que programación orientada a objeto es la manera más
cansilla y eficaz de codificar.
30. 29
Referencias
(2008). In Deitel, & 9th (Ed.), Java How to Program -early objects.
Deitel, P. (2012). Java How to Program Early Objects 9rd Edition. Massachusetts: Prentice Hall.
Horstmann, C. (2007). Big Java 3rd Edition. Wiley.
Oracle. (2015). BufferedReader. Retrieved April 8, 2015, from Java Documentation:
https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html
Oracle. (2015). BufferedWriter. Retrieved April 8, 2015, from Java Documentation:
http://docs.oracle.com/javase/8/docs/api/java/io/BufferedWriter.html
Oracle. (2015). Pausing Execution with Sleep. Retrieved April 13, 2015, from Java
Documentation: https://docs.oracle.com/javase/tutorial/essential/concurrency/sleep.html