INTEGRANTES: 201323354 MITANI YAURI, JOSE LUIS 201322993 MORENO RIOS, JOSE LUIS 201323454 LOPEZ SILVA, MARIA INES
ASIGNATURA: ESTRUCTURA DE DATOS Y ALGORITMOS
PROFESOR: SILVA UBALDO, LIZARDO
SECCIN: E11A
Lima, 13 de febrero 2014
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
PRESENTACION El presente trabajo se desarrolla a partir de la situacin actual de MICRODEV S.A.C. empresa especializada en el diseo electrnico. Se realiza la descripcin de la empresa y se analizan los procesos de manera general, para identificar problemas y plantear soluciones. Este caso de estudio comprende especficamente la implementacin de una estrategia que mejore las ventas de los productos en beneficio de la organizacin, esta estrategia es la de liderazgo en costos y diferenciacin, para la cual ser necesaria la creacin a largo plazo de un ambicioso proyecto de ampliacin de capacidad de la planta actual.
Para la ejecucin de la estrategia mencionada se realiz el rediseo de la organizacin por lo que se modific el organigrama en el que se incluy la gerencia de proyectos y darle mayor nfasis al rea de ventas.
Los anlisis realizados se centraron principalmente en las carencias identificadas en los sub- procesos mencionados, para los cuales se elaboraron los diagramas de procesos, caracterizacin y anlisis de causa-efecto, con lo cual quedaron identificadas las causas de la problemtica existente, y se determinaron las actividades a realizar para solucionar los inconvenientes encontrados. Estas mejoras van desde modificacin de los trminos de referencia e implementar una alianza con empresas de distribucin de nuestros productos terminados.
Los principales resultados estimados a partir de esta mejora aumentaran la produccin que lo que alcanzara para cumplir las metas propuesta por la organizacin, as como brindar un mejor flujo de ingresos debido a la venta de nuestros productos finales. En trminos econmicos, se estima como resultado un incremento que asciende los 120 mil nuevos soles al ao.
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
1. OBJETIVOS DEL TRABAJO
Automatizar el Proceso de Ventas y apoyo a logstica para llevar un mejor control del stock de los productos en el almacn, es decir, los productos vendidos y devueltos actualizarn en lnea dicho stock, as mismo informar los productos que estn a punto de quedar con el stock mnimo para que logstica pueda hacer las compras oportunas. Adems el software brindar informacin detallada de las ventas y devoluciones del da. Tambin se llevar un control de las ventas pagadas y ventas a credito, esta informacin es muy importante para el rea de administracin.
2. DESCRIPCION DE LA EMPRESA
MICRODEV S.A.C.
2.1 DESCRIPCION
Creada el 17 de abril del 2007, empresa especializada en el diseo electrnico. Se dedica exclusivamente al diseo y desarrollo electrnico en sus distintas reas, contando con experiencia en diversos desarrollos y diseos electrnicos comerciales en circulacin por varios pases de Sud-Amrica, Centro Amrica e incluso Norte Amrica.
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
2.2 ACTIVIDAD
Fabricacin, distribucin y venta de productos elctricos y electrnicos.
3. ORGANIGRAMA
GERENCIA GENERAL ADMINISTRACION DESARROLLO VENTAS PRODUCCION ALMACEN
4. PROCESOS
4.1 Proceso de Venta
4.1.1 Catlogo de producto
El vendedor empezara la atencin al cliente, mostrndole la gama de productos con los que se cuenta. Indicndole los beneficios de cada equipo, as como sus precios.
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
4.1.2 Pedidos a produccin Si los tems seleccionados por el cliente no se encuentran en stock, el vendedor generara una Orden de Pedido, para poder contar con el stock necesario para el despacho del pedido.
4.1.3 Registro de clientes Cuando un cliente es atendido, el vendedor proceder a buscar sus datos en el sistema, si este no existe deber crear un registro nuevo.
4.1.4 Emisiones de Orden de pedido del cliente Se emitir a las reas de administracin y almacn la cotizacin (orden de venta) del cliente para su respectiva verificacin de la cancelacin y despacho.
4.1.5 Emisin de los comprobantes de pago Cuando almacn ha atendido el pedido del cliente, ventas emitir la respectiva documentacin que acompaara el paquete (Facturas, Guas de remisin).
4.1.6 Entrega de los productos al cliente El vendedor coordinara la entrega del pedido a la direccin pactada previamente.
Cuando los pedidos son entregados en Lima (Provincia), estos no representaran un gasto adicional por transporte. Pero para los dems casos, se incrementara un costo por flete sobre la factura del cliente.
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
4.2 Proceso de Administracin
4.2.1 Verificacin de las cancelaciones del cliente La secretaria se encargara de las verificaciones de las cancelaciones de los pedidos pactadas con el cliente. Para ello deber utilizar la orden de pedido del cliente y har las consultas del caso a las cuentas de la empresa (verificacin de depsitos).
4.2.2 Descuentos Si un cliente lleva productos por un valor mayor a los S/10,000, a este se le podr ofrecer descuentos que van desde el 5% al 20% dependiendo del volumen final.
4.2.3 Crdito Dependiendo del record de compras del cliente, se les podr otorgar facilidades de 60 das de pago a los mejores clientes.
4.3 Procesos logsticos
4.3.1 Recepcin de la Orden de Venta El almacn verificara en su mdulo de pedidos, las cotizaciones que estn autorizadas por la administracin, para su respectivo despacho.
4.3.2 Consulta de stock disponible Tomando la hoja de pedido del cliente, el operador de almacn, har una consulta del stock disponible, para su despacho.
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
4.3.3 Pedido de productos a Produccin En los casos en que un cliente haya solicitado un producto que no se tiene en el almacn, el operador deber emitir una orden de produccin, para poder contar con el stock necesario para el despacho de los pedidos.
4.3.4 Picking Teniendo ya el stock disponible se proceder con el picking (preparacin del pedido), segn especificaciones de la orden de venta.
5. AREA DONDE OCURRE EL PROBLEMA
Las reas donde ocurren los problemas son: Ventas y Almacn.
6. DESCRIPCION DEL PROBLEMA
Registro manual de las ventas, falta de control del stock del producto en el almacn lo cual retrasa las compras de logstica. Adems no se tiene un control de las ventas y devoluciones de productos tampoco de los clientes morosos.
7. DESCRIPCION DE LA SOLUCION PLANTEADA
Implementar un software que automatice el registro de las ventas y devoluciones, y al mismo tiempo actualizar el stock de los productos en el almacn.
8. ALGORITMO O CODIGO FUENTE DE LA SOLUCION Cdigo fuente est grabado en la sgte ruta: CD\Fuentes
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
VENTAS.JAVA
package ventas; import java.util.HashSet; import javax.swing.JOptionPane; /** * Autor: Ins Lpez Silva * Jose Mittani * Jose Moreno */ import java.util.Scanner;
public class ListaRegVentas { RegVenta inicio, nuevo, p, q; //Los aributos son privados String detalle[][]=new String[100][6]; String[][] arrProd={{"01","VELOCIMETRO GPS 400", "350","50","5"}, {"02","VELOCIMETRO 100","250","120","50"}, {"03","PANELES LDS","300","1000","5"}}; String[][] arrCli={{"001","JOSE MORENO", "10101010","AV. PERU 2011"}, {"002","INES LOPEZ","10673146","AV. LIMA 4511"}, {"003","EDUARDO SANTIAGO","20202020","JR. LOS ALAMOS 5011"}}; Scanner objScanner = new Scanner (System.in);
double nTotalDoc; int nNroDoc=0,posicion=0;
public void mostrarA(){
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
for (int i=0;i<4;i++) for(int j=0;j<5;j++) System.out.println(" "+detalle[i][j]); }
public String ReporteporFecha(String Fecha){ String cadena= " ";int cont=0; if (inicio!=null){ p=inicio; while (p!=null){ if (Fecha.equalsIgnoreCase(p.getFecha())){ cont++; System.out.println("Numero de Factura : " + p.getCodDoc()); System.out.println("Fecha de Factura : " + p.getFecha()); System.out.println("Forma de Pago : " + p.getFormaPago()); System.out.println("Total Pagado : " + p.getTotalPagar()); } p=p.getSgte(); }
} if (cont > 0) System.out.println("Se encontro " + cont + " coincidencias en la fecha ingresada "); else System.out.println("No Existe Facturas registradas con la fecha " + Fecha );
return cadena; }
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
public String obtienelistaTotales(){ String cadena = ""; if (inicio!=null){ p=inicio; while (p!=null){ cadena = cadena +p.getTotalPagar()+" "; p = p.getSgte(); } } return cadena; } public String obtienelistaCantidad(){ String cadena = ""; if (inicio!=null){ p=inicio; while (p!=null){ cadena = cadena +p.getCantidad()+" "; p = p.getSgte(); } } return cadena; } public String obtienelistaPunitario(){ String cadena = ""; if (inicio!=null){ p=inicio; while (p!=null){
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
cadena = cadena +p.getPrecioUnitario()+" "; p = p.getSgte(); } } return cadena; } public void IngresaProductos(){ double nPreUni,nCantTotalProd; String cCodProd, cDescProd,cRpta="S" ; int nCant = 0, ind = -1 ; // Scanner objScanner = new Scanner (System.in);
while (cRpta.equals("S") ){
detalle[posicion][0]="00000"+Integer.toString(nNroDoc); while (ind==-1){ //System.out.println("Ingrese Cod. Prod"); cCodProd = JOptionPane.showInputDialog("Ingrese Codigo de Producto"); ind = BuscarProducto(cCodProd ); if (ind == -1) JOptionPane.showMessageDialog(null,"Codigo de Producto Ingresado No Existe"); //System.out.println("Cdigo Producto No existe"); else{ cDescProd=arrProd[ind][1]; nPreUni=Double.parseDouble(arrProd[ind][2]); System.out.println("Descripcin Producto:"+cDescProd+ " Precio Unitario:"+arrProd[ind][2]
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
nStock = Integer.parseInt(arrProd[pIndarrProd][3]); bContinua=true; while (bContinua==true){ //System.out.println("Ingrese Cantidad:"); nCant = Integer.parseInt(JOptionPane.showInputDialog("Ingrese Cantidad"));// Integer.parseInt(objScannerS.nextLine()); if (nStock==0){ JOptionPane.showMessageDialog(null,"No hay Stock Disponible para el producto"); IngresaProductos(); bContinua=false; } else{ if (nCant>nStock){
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
JOptionPane.showMessageDialog(null,"La Cantidad supera el Stock actual" + arrProd[pIndarrProd][3] ); //System.out.println("La Cantidad supera el stock actual " + arrProd[pIndarrProd][3]); } else{ nStock=nStock-nCant; arrProd [pIndarrProd][3]=Integer.toString(nStock); //Actualiza stock actual nuevo.setCantidad(nCant); if (nStock <= Double.parseDouble(arrProd [pIndarrProd][4])) JOptionPane.showMessageDialog(null,"Alerta: El Stock Actual es menor al minimo : " + arrProd[pIndarrProd][4] ); //System.out.println("Alerta: El Stock actual es menor " // + "al mnimo:" + arrProd[pIndarrProd][4]); bContinua=false; } } } }
public int BuscarCliente(String pNroDocCli ){ int indice = -1; for (int i=0; i<=arrCli.length-1; i++) { if ( arrCli[i][2].equals(pNroDocCli)){ return i; } }
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
return indice; } public int longitudDetalle(){ int i=0,j=0; while(detalle[j][0]!=null) {i++;j++;} return i; } public void reporteProducto(){ int longitud=longitudDetalle();int c1=0,c2=0,c3=0; double p1=0,p2=0,p3=0; for(int i=0;i<longitud;i++) if(detalle[i][5].equals("Activo")){ switch(detalle[i][1]){ case "01": c1=c1+Integer.parseInt(detalle[i][2]); p1=p1+Double.parseDouble(detalle[i][4]); case "02": c2=c2+Integer.parseInt(detalle[i][2]); p2=p2+Double.parseDouble(detalle[i][4]); case "03": c3=c3+Integer.parseInt(detalle[i][2]); p3=p3+Double.parseDouble(detalle[i][4]); } } System.out.println("Cantidad de Productos Vendidos "+arrProd[0][1]+": "+c1+ " Unidades"); System.out.println("Costo Total: "+p1);
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
//System.out.println("No se Encontro Documento a Eliminar"); JOptionPane.showMessageDialog(null,"No se Encontro Documento a Eliminar"); } else{ p=inicio; if (p.getCodDoc().equals(Doc)) inicio=inicio.getSgte(); else{ while(llave==0){ q=p; p=p.getSgte(); if(p.getCodDoc().equals(Doc)) {q.setSgte(p.getSgte()); JOptionPane.showMessageDialog(null,"Registro " + Doc + " Eliminado Correctamente"); llave=1; }} if (p.getSgte()==null) {llave=1; JOptionPane.showMessageDialog(null,"No se Encontro Documento a Eliminar"); //System.out.println("No se Encontro Documento a Eliminar");} } } }} } public void InsertaRegVenta ( ){ String cFecha,cNroDocCli,cCodCli,cRpta="S",cFormaPago="E"; int indCli=-1;
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
// Scanner objScanner = new Scanner (System.in);
while (cRpta.equals("S")){ nuevo = new RegVenta(); nNroDoc=nNroDoc+1; System.out.println("Nro Factura: "+"00000" + Integer.toString(nNroDoc)); nuevo.setCodDoc("00000"+Integer.toString(nNroDoc)); detalle[posicion][0]="00000"+Integer.toString(nNroDoc); // System.out.println("Ingrese Fecha Venta:"); cFecha = JOptionPane.showInputDialog("Ingrese Fecha Venta:"); //objScanner.nextLine(); nuevo.setFecha(cFecha); //System.out.println("Ingrese Nro.Doc.Cliente:"); cNroDocCli= JOptionPane.showInputDialog("Ingrese Nro.Doc.Cliente:");//objScanner.nextLine(); indCli=BuscarCliente(cNroDocCli);
if (indCli!=-1){ System.out.println("Cliente:" + arrCli[indCli][0]+ " - " +arrCli[indCli][1]+ " Direccin:"+arrCli[indCli][3] ); nuevo.setCodCliente(arrCli[indCli][0]); } else JOptionPane.showMessageDialog(null,"El cliente no existe en el Sistema, favor registrarlo");
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
//System.out.println("Cliente No existe en el Sistema.. " // + "favor registrarlo" );
IngresaProductos (); //System.out.println("Forma de pago: Efectivo o Credito= E/C ?"); cFormaPago = JOptionPane.showInputDialog("Forma de pago: Efectivo o Credito= E/C ?"); //objScanner.nextLine(); nuevo.setFormaPago(cFormaPago);
if (inicio == null) inicio = nuevo; else { p = inicio; while(p.getSgte() != null ) p = p.getSgte(); p.setSgte( nuevo );
}
System.out.println("Total a Pagar: S/." + Double.toString(nTotalDoc)); nuevo.setTotalPagar(nTotalDoc); nTotalDoc=0; // System.out.println("Desea ingresar otro documento? S/N"); cRpta = JOptionPane.showInputDialog("Desea ingresar otro documento? S/N"); //objScanner.nextLine(); } } }
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
public double getTotalPagar() { return TotalPagar; } public void setTotalPagar(double TotalPagar) { this.TotalPagar = TotalPagar; }
public RegVenta getSgte() { return sgte; }
public void setSgte(RegVenta sgte) { this.sgte = sgte; }
}
VENTAS.JAVA
package ventas; /**
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
* @author Ins Lpez Silva. * Jose Mittani Yauri * Jose Moreno Rios */ import java.util.Scanner; import javax.swing.JOptionPane; import javax.swing.JTextArea;
public class Ventas { public static void Menu(ListaRegVentas vtas){ int N=0; String entrada, Fecha, NDoc; entrada = JOptionPane.showInputDialog("Ingrese el numero de elemento que desea ejecutar\n\n 1. Registro de Ventas \n 2. Reporte de ventas por fecha \n 3. Reporte de productos vendidos \n 4. Registro de Anulaciones \n 5.Salir \n"); //System.out.println(N); //if (Integer.parseInt(entrada) > 0) { N = Integer.parseInt( entrada ); switch (N) { case 1: vtas.InsertaRegVenta(); Menu(vtas); break; case 2: Fecha = JOptionPane.showInputDialog("Introduzca la Fecha del reporte"); vtas.ReporteporFecha(Fecha); Menu(vtas); break;
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
case 3: vtas.reporteProducto(); Menu(vtas); break; case 4: NDoc = JOptionPane.showInputDialog("Introduzca el documento a anular"); vtas.eliminaDoc(NDoc); Menu(vtas); break; case 5: JOptionPane.showMessageDialog(null,"Gracias por usar el sistema"); break; case 0: break; default: JOptionPane.showMessageDialog(null,"Numero ingreso incorrecto"); break;
} }
public static void main(String[] args) { ListaRegVentas vtas = new ListaRegVentas();
JOptionPane.showMessageDialog(null,"Bienvenido al Sistema de Ventas"); Menu(vtas);
}
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
}
9. PANTALLAS PRINCIPALES DE LA EJECUCUION DE LA SOLUCION
FACULTAD DE INGENIERA CARRERA DE INGENIERA DE SISTEMAS
10. CONCLUCIONES Y RECOMENDACIONES
Se recomienda la compra de 2 PCs e implementar el software para que agilice la atencin a los clientes.