Proyecto Final Aplicaciones moviles.pdf

Embed Size (px)

Citation preview

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    1/31

    29-5-2016

    Proyecto FinalAplicaciones móviles para bases de

    datos XA

      Abigail Delgado Hernández

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    2/31

    Primeramente creamos nuestra base de datos en el BDMS de SQL Server agregando las siguientes tablas que son

    pintura, venta y venta-detalle.

    Ahora vamos a hacer las siguientes inserciones en la tabla de pintura

    insert into pintura values 

    (1,'blanco',20,'agua',200,10), (2,'verde',15,'aceite',150,10), (3,'amarillo',15,'agua',150,10), 

    (4,'rojo',20,'aceite',200,10), (5,'azul',15,'aceite',150,10), (6,'morado',20,'agua',200,10), (7,'naranja',15,'aceite',150,10), 

    (8,'cafe',20,'agua',200,10); 

    Comprobamos las inserciones con un select * from pintura 

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    3/31

    Ahora vamos a crear un nuevo proyecto en Android Studio con la siguiente ruta File/New/New Project y después

    de crearlo vamos a importar el driver JTDS que va a hacer posible la conexión remota con la base de datos en SQL

    Server. La colocamos en la siguiente ruta. 

    Project/app/libs

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    4/31

    Ahora vamos a ir a la siguiente ventana ubicada en File/Project Structure/Dependencies y vamos a agregar una nueva

    dependencia seleccionando el driver JTDS que acabamos de importar.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    5/31

    Después vamos a crear la clase de conexión donde vamos a establecer los valores de la conexión que se va a realizar

    hacia la base de datos con la dirección ip específica de la red en la que estemos conectados; en este caso es un punto

    de acceso creado desde un teléfono con la dirección IP: 192.168.43.109.

     public class ConexionSQLServer {

     public static Connection conectar_a_BD_Pinturas() throws SQLException {StrictMode.ThreadPolicy policy =

    new StrictMode.ThreadPolicy.Builder().permitAll().build();StrictMode.setThreadPolicy (policy);try{

    Class.forName("net.sourceforge.jtds.jdbc.Driver");}catch (ClassNotFoundException e){}return

    DriverManager.getConnection("jdbc:jtds:sqlserver://192.168.43.109:1433;databaseName=pinturas;user=sa;password=root;");

    }}

    También vamos a crear el archive datosPinturas.java con el siguiente código donde vamos establecer los setters y

    getters de los datos que van a ser almacenados en la base de datos.

     public class datosPinturas { private int idPintura; private int idPedido; private String color; private String tipo; private int litros; private int cantidad ; private int precio; private int subtotal; private Object fecha; private int IdVenta; private int total; public datosPinturas(){

    } public int getIdPintura() {

    return idPintura;}

     public void setIdPintura(int idPintura) {this.idPintura = idPintura;

    }

     public int getIdPedido() {return idPedido;

    }

     public void setIdPedido(int idPedido) {this.idPedido = idPedido;

    }

     public String getColor() {return color;

    }

     public void setColor(String color) {this.color = color;

    }

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    6/31

       public String getTipo() {return tipo;

    }

     public void setTipo(String tipo) {this.tipo = tipo;

    }

     public int getLitros() {

    return litros;}

     public void setLitros(int litros) {this.litros = litros;

    }

     public int getCantidad() {return cantidad ;

    }

     public void setCantidad(int cantidad) {this.cantidad = cantidad;

    }

     public int getPrecio() {return precio;

    }

     public void setPrecio(int precio) {this. precio = precio;

    }

     public int getSubtotal() {return subtotal;

    }

     public void setSubtotal(int subtotal) {this.subtotal = subtotal;}

     public Object getFecha() {return fecha;

    }

     public void setFecha(Object fecha) {this.fecha = fecha;

    }

     public int getIdVenta() {return IdVenta;

    }

     public void setIdVenta(int idVenta) {IdVenta = idVenta;

    }

     public int getTotal() {return total;

    }

     public void setTotal(int total) { this.total = total; }}

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    7/31

    Ahora vamos a crear la clase tabla.java la cual nos va a servir para pintar los resultados de una consulta en un objecto

    tabla. Establecemos los métodos agregarFila, agregarCabecera y obtenerAnchoPixeles.

    class Tabla { private TableLayout tabla; private ArrayList filas; private Activity actividad ; private Resources rs; private int FILAS,COLUMNAS;

     public Tabla(Activity actividad, TableLayout tabla){this.actividad = actividad;this.tabla = tabla;rs = this.actividad .getResources();FILAS = COLUMNAS = 0;filas = new ArrayList();¿

    }

     public void agregarCabecera(int recursocabecera){TableRow.LayoutParams layoutCelda;TableRow fila = new TableRow(actividad );TableRow.LayoutParams layoutFila = new

    TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT ,TableRow.LayoutParams.WRAP_CON 

    TENT ); fila.setLayoutParams(layoutFila);

    String [] arrayCabecera = rs.getStringArray(recursocabecera);COLUMNAS = arrayCabecera.length;

    for (int i = 0; i

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    8/31

      fila.addView(texto);}tabla.addView(fila);filas.add(fila);FILAS++;

    } private int obtenerAnchoPixelesTexto(String texto){

    Paint p = new Paint();Rect bounds = new Rect();

    p.setTextSize(50);p.getTextBounds(texto, 0, texto.length(), bounds);return bounds.width();

    }

    También vamos crear la clase Querys en la cual vamos a definir los querys que van a mostrarse en las tablas de la

    aplicación.

     public class Querys {

     public static void ejecutaQuery(String query) throws SQLException {Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();

    Statement s = conectar.createStatement();s.executeUpdate(query);s.close();conectar.close();

    }

     public static ArrayList selpintutas() throws SQLException {ArrayList datos = new ArrayList();Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();Statement s = conectar.createStatement();ResultSet rs = s.executeQuery("select idVenta from venta order by idVenta");int idVenta = 0; while (rs.next()) {

    idVenta = rs.getInt("idVenta");

    }ResultSet r = s.executeQuery("select color,tipo,litros,cantidad,precio,subtotal

    \n" +" from pintura p, venta v, venta_detalle vd \n" +"where p.idPintura=vd.idPintura and v.idVenta=vd.idVenta and

    v.idVenta="+idVenta);

     while (r.next()){datosPinturas dat = new datosPinturas();//dat.setIdPedido(r.getInt("Venta"));//dat.setIdPintura(r.getInt("idPintura"));dat.setColor(r.getString("color"));dat.setTipo(r.getString("tipo"));

    dat.setLitros(r.getInt("litros"));dat.setCantidad(r.getInt("cantidad"));dat.setPrecio(r.getInt("precio"));dat.setSubtotal(r.getInt("subtotal"));

    datos.add(dat);}s.close();conectar.close();return datos;

    }

     public static ArrayList reporte_general() throws SQLException {

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    9/31

      ArrayList datos = new ArrayList();Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();Statement s = conectar.createStatement();ResultSet rs = s.executeQuery("select idVenta from venta order by idVenta");int idVenta = 0; while (rs.next()) {

    idVenta = rs.getInt("idVenta");}ResultSet r = s.executeQuery("select idVenta,total,fecha from venta;");

     while (r.next()){datosPinturas datG = new datosPinturas(); datG.setIdVenta(r.getInt("idVenta"));datG.setFecha(r.getObject("fecha"));datG.setTotal(r.getInt("total"));

    datos.add(datG);}s.close();conectar.close();return datos;

    }

    }

    Dentro del archivo activity_main ponemos el siguiente código para crear los elementos que van a estar presentes

    en la primera interfaz de nuestra aplicación.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    10/31

     

    Lo que nos va a generar la siguiente interfaz con únicamente dos botones. El boton “INICIAR VENTA” va a inicar

    una venta. El botón “REGISTROS DE VENTA” nos va a mandar a una interfaz donde en una tabla se van a mostrar

    las ventas realizadas. 

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    11/31

    Ahora vamos al archivo java llamado MainActivity.java y ponemos el siguiente código donde establecemos las

    acciones que hará al momento de presionar alguno de los botones.

     public class MainActivity extends AppCompatActivity { private Button botonIniciaVenta; private Button botonReportes;

    @Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);

     botonIniciaVenta = (Button) findViewById(R.id.b_iniciar_venta); botonReportes = (Button) findViewById(R.id.b_reporte); botonIniciaVenta.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    int idVenta_ant = 0;int idVenta_act = 0;try {

    Connection c = ConexionSQLServer.conectar_a_BD_Pinturas();Statement s = c.createStatement();

    ResultSet r = s.executeQuery("select idVenta from venta order byidVenta"); while (r.next()) {

    idVenta_ant = r.getInt("idventa");}idVenta_act = idVenta_ant + 1;

    Querys.ejecutaQuery ("insert into venta values (" + idVenta_act +"," + 0 + ",GETDATE())");

    Toast.makeText(getApplicationContext(),"Venta " + idVenta_act + " Iniciada",

    Toast.LENGTH_LONG ).show();Intent i = new Intent(getApplicationContext(), venta.class);startActivity(i);

    } catch (SQLException e) {

    }}

    });

     botonReportes.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {

    Intent i = new Intent(getApplicationContext(), Reportes.class);startActivity(i);

    }});

    }}

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    12/31

    Ahora creamos una nueva actividad con nombre activity_venta con el siguiente código para generar los elementos

    que va a tener esta interfaz.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    13/31

     

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    14/31

    Según los elementos establecidos en este archivo nos genera la siguiente interfaz. Donde tenemos una lista varios

    campos de texto y dos botones. La lista tendrá los diferentes colores que están disponibles para nuestra aplicación.

    En las etiquetas de litros y precio se van a llenar automáticamente según se seleccione el color de la lista. Y tenemos

    un campo de texto donde vamos a establecer la cantidad requerida para esta venta.

    Establecemos el archivo venta.java con el cual vamos a vincular esta interfaz y colocamos el siguiente código. Dentro

    de esta clase establecemos la inserción a la tabla de venta detalle donde vamos a ingresar el id del producto que

    está seleccionado en la lista y también establece la cantidad de pinturas que va a comprar. Tenemos los botones de

    Registrar y Finalizar venta donde va a pasar a otra interfaz si presiona el botón de finalizar y va a guardar la pintura

    seleccionada con el botón de registrar.

     public class venta extends AppCompatActivity { private TextView idPintuta;

     private TextView precio; private EditText cantidad ; private Button botonRegistrar; private Button botonFinalizar; private Spinner listaPinturas; private TextView litros;@Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);setContentView(R.layout.activity_venta);idPintuta = (TextView) findViewById(R.id.textId ); precio = (TextView) findViewById(R.id.textPrecio );

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    15/31

      cantidad = (EditText) findViewById(R.id.c_cantidad );litros = (TextView) findViewById(R.id.textLitros); botonRegistrar = (Button) findViewById(R.id.b_registrar ); botonFinalizar = (Button) findViewById(R.id.b_finalizar );listaPinturas = (Spinner) findViewById(R.id.lista);ArrayAdapter spinner_adapter = ArrayAdapter.createFromResource(this,

    R.array. pinturas, android.R.layout.simple_spinner_item );

    spinner_adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item );

    listaPinturas.setAdapter(spinner_adapter);listaPinturas.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() {

    @Override public void onItemSelected(AdapterView parent, View view, int position,

    long id) {int precio_int = 0;int litros_int = 0;int idPintura = 0;String color = listaPinturas.getSelectedItem().toString();try {

    Connection c1 = ConexionSQLServer.conectar_a_BD_Pinturas();Statement s1 = c1.createStatement();ResultSet r1 = s1.executeQuery("select idPintura,precio,litros from

     pintura where color='" + color + "'"); while (r1.next()) {

    idPintura = r1.getInt("idPintura");precio_int = r1.getInt("precio");litros_int = r1.getInt("litros");

    }idPintuta.setText("IDPintura = " + idPintura); precio.setText("Precio = " + precio_int + "");litros.setText("Litros = " + litros_int + "");

    } catch (SQLException e) {e.printStackTrace();

    }

    }

    @Override public void onNothingSelected(AdapterView parent) {

    }});

     botonFinalizar.setOnClickListener(new View.OnClickListener() {

    @Override

     public void onClick(View v) {

    }});

     botonRegistrar.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {

    //String p = precio.getText().toString();int ca=0;String c=null;try {

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    16/31

      c = cantidad .getText().toString();

    ca = Integer. parseInt(c);}catch (NumberFormatException e){

    }int pr = 0;

    int idVenta = 0;int idPintura = 0;int subtotal = 0;int existencias = 0;int NuevaExistencia = 0;String color = listaPinturas.getSelectedItem().toString();try {

    Connection co = ConexionSQLServer.conectar_a_BD_Pinturas();Statement s = co.createStatement();ResultSet r = s.executeQuery("select idVenta from venta order by

    idVenta");

     while (r.next()) {idVenta = r.getInt("idVenta");

    }ResultSet r2 = s.executeQuery("select idPintura,precio,existencias

    from pintura where color='" + color +"'"); while(r2.next()){

    pr = r2.getInt("precio");idPintura = r2.getInt("idPintura");existencias = r2.getInt("existencias");

    }

    if(ca 0) {NuevaExistencia = existencias - ca;subtotal = pr * ca;if (ca==0 ||c.matches("")) {

    Toast.makeText(getApplicationContext(), "Agrega unacantidad", Toast.LENGTH_LONG ).show();} else {

    try {Querys.ejecutaQuery ("insert into venta_detalle values

    (" + idVenta + "," + idPintura+ "," + cantidad .getText() +","+ subtotal + ")");Toast.makeText(getApplicationContext(),

    "Datos Guardados Correctamente",Toast.LENGTH_LONG ).show();

    Connection conec =ConexionSQLServer.conectar_a_BD_Pinturas();

    Statement st = conec.createStatement();ResultSet rs = st.executeQuery("select sum(subtotal) as

    subtotal from venta_detalle where idVenta="+idVenta);int total = 0; while(rs.next()){

    total = rs.getInt("subtotal");}

    Querys.ejecutaQuery ("update venta set total="+total + " where idVenta="+idVenta);

    Querys.ejecutaQuery ("update pintura set existencias="+NuevaExistencia +" where color='"+color+"'");

    } catch (SQLException e) {

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    17/31

      Toast.makeText(getApplicationContext(),"Ya tienes ese producto en tu compra",

    Toast.LENGTH_LONG ).show();}

    }

    }if(existencias==0){Toast.makeText(getApplicationContext(), "Ya no hay más pinturas

    de este color", Toast.LENGTH_LONG ).show();

    }else if(ca>existencias){Toast.makeText(getApplicationContext(),"La cantidad debe ser menor a "+(existencias+1),

    Toast.LENGTH_LONG ).show();}

    } catch (SQLException e) {e.printStackTrace();

    }

    }});

     botonFinalizar.setOnClickListener(new View.OnClickListener() {@Override public void onClick(View v) {

    Intent i = new Intent(getApplicationContext(), SegundaActivity.class);startActivity(i);

    }});}

    }

    Creamos una nueva actividad llamada activity_segunda la cual será llamada justo después de presionar el botón de

    finalizar venta. Colocamos el siguiente código.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    18/31

     

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    19/31

    Con este código generamos la siguiente interfaz con los siguientes elementos. Donde se van a mostrar las ventas de

    las diferentes pinturas que han sido agregadas a esta venta. Y también va a asignar en el campo de texto el total de

    la venta actual.

    Ahora vamos a vincular este archivo XML con un archivo java llamándolo SegundaActivity.java en este archivo vamosa establecer la consulta que va a mostrar como si fuera un ticket de venta. Llamando a la clase tabla para poder

    pintar la consulta en una tabla. El botón menú principal nos manda a la actividad MainActivity.

     public class SegundaActivity extends AppCompatActivity { private Button boton;

     private TextView texto_total; private TextView Ticket;@Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_segunda

    ); boton = (Button) findViewById(R.id.bot);texto_total = (TextView) findViewById(R.id.text_total);Tabla tabla = new Tabla(this, (TableLayout) findViewById(R.id.tabla));

    tabla.agregarCabecera(R.array.cabecera_tabla);

    ArrayList pinturas = new ArrayList();try {

    pinturas = Querys.selpintutas();for (int i = 0; i < pinturas.size(); i++) {

    datosPinturas dat = new datosPinturas();dat = (datosPinturas) pinturas.get(i);

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    20/31

      ArrayList elementos = new ArrayList();//elementos.add(dat.getIdPedido() + "");//elementos.add(dat.getIdPintura() + "");elementos.add(dat.getColor());elementos.add(dat.getTipo());elementos.add(dat.getLitros() + "");elementos.add(dat.getCantidad() + "");elementos.add(dat.getPrecio() + "");elementos.add(dat.getSubtotal() + "");

    //elementos.add(dat.getFecha()+"");//tabla.agregarFilaTabla(elementos);tabla.agrgarFilaTabla(elementos);

    }Connection conectar = ConexionSQLServer.conectar_a_BD_Pinturas();Statement s = conectar.createStatement();ResultSet rs = s.executeQuery("select idVenta from venta order by

    idVenta");int idVenta = 0; while (rs.next()) {

    idVenta = rs.getInt("idVenta");}ResultSet rs2 = s.executeQuery("select total from venta where

    idVenta="+idVenta);

    int total = 0; while(rs2.next()){

    total = rs2.getInt("total");}texto_total.setText("Total Venta "+idVenta+ " = $"+total );

    } catch (SQLException e) {

    } boton.setOnClickListener(new View.OnClickListener() {

    @Override public void onClick(View v) {

    Intent i = new Intent(getApplicationContext(), MainActivity.class);startActivity(i);

    try {int idVenta=0;Connection conec = ConexionSQLServer.conectar_a_BD_Pinturas();Statement st = conec.createStatement();

    ResultSet rs = st.executeQuery("select idVenta from venta order byidVenta");

     while(rs.next()){idVenta = rs.getInt("idVenta");

    }ResultSet rs1 = st.executeQuery("select total from venta where

    idVenta="+idVenta);int total=0; while (rs1.next()){

    total = rs1.getInt("total");}if(total==0){

    Querys.ejecutaQuery ("delete from venta whereidVenta="+idVenta);

    }} catch (SQLException e) {

    e.printStackTrace();}

    } }); }}

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    21/31

    Ahora vamos a crear una nueva actividad donde vamos a tener los reportes de usuario. La actividad se llamará

    activity_reportes y tendrá el siguiente código.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    22/31

      android :layout_width="wrap_content"android :layout_height="wrap_content"android :text="Menú Principal"android :layout_gravity="bottom"android :layout_weight="6.16"android :layout_alignParentBottom="true"android :layout_centerHorizontal="true" />

    Según el código nos genera la siguiente interfaz donde tenemos el botón menú principal y una tabla donde se van a

    mostrar las ventas generales y sus respectivas fechas y totales.

    Ahora creamos la clase reportes.java donde vamos a referenciar la clase de activity_reportes. Colocamos el siguiente

    código. Aquí vamos a colocar el código para establecer las acciones que va a realizar esta interfaz al momento de

    llamarse y de presionar el botón.

     public class Reportes extends AppCompatActivity {

     private TextView texto; private Button boton_menu;

    @Override protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_reportes);Tabla tabla = new Tabla(this, (TableLayout) findViewById(R.id.tabla));tabla.agregarCabecera(R.array.cabecera_tabla_reportes);

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    23/31

       boton_menu = (Button) findViewById(R.id.bot);

    ArrayList pinturas = new ArrayList();try {

    pinturas = Querys.reporte_general();for (int i = 0; i < pinturas.size(); i++) {

    datosPinturas dat = new datosPinturas();dat = (datosPinturas) pinturas.get(i);ArrayList elementos = new ArrayList();

    elementos.add(dat.getIdVenta()+"");elementos.add(dat.getFecha().toString());elementos.add(dat.getTotal() + "");

    tabla.agrgarFilaTabla(elementos);}

    } catch (SQLException e) {

    }

     boton_menu.setOnClickListener(new View.OnClickListener() {@Override

     public void onClick(View v) {Intent i = new Intent(getApplicationContext(), MainActivity.class);startActivity(i);

    }});

    }}

    Antes de ejecutar nuestra aplicación necesitamos las actividades dentro del archivo AndroidManifest para que

    pueda reconocerlas como tal. Colocamos el siguiente código.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    24/31

    Para poder crear las cabeceras de las tablas que vamos a mostrar debemos crear los siguientes String-Array dentro

    del archivo Strings.xml

    Vamos a crear dos String Array con los siguientes elementos que van a ponerse como nombres de columnas al

    momento de mandar la consulta a la tabla. Las tablas que van a ocupar estas caberas son de las actividades

    activity_reportes y activity_segunda.

    Proyecto Color Tipo Lts Cantidad Precio SubTotal

    Venta Fecha Total

    Como en la actividad de activity_venta tenemos un objeto spinner vamos a llenarlo con los nombres de pinturas

    disponibles. En este caso será necesario crear String Array donde vamos a poner los elementos de la lista que se van

    a mostrar en el objecto Spinner. Colocamos el siguiente código.

    blancoverdeamarillo

    rojoazulmoradonaranja

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    25/31

    Antes de ejecutar nuestra aplicacion debemos verificar nuestra direccion ip. Lo haremos por medio de un ipconfig

    en la consola de Windows. 

    Ahora ejecutamos nuestra aplicación.

    Primero tenemos la siguiente interfaz donde tenemos estos dos botones. Vamos a presionar el botón de inicar una

    venta, como no hay ninguna venta registrada nos va a aparecer lo siguiente.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    26/31

    Vamos a seleccionar una pintura de la lista y los valores de los campos litros y precio van a cambiar. Después vamos

    a presionar el botón de Registrar y nos va a mandar el siguiente mensaje. Vamos a seleccionar otro elemento

    diferente de la lista y colocamos nuevamente una cantidad.

    Ahora vamos a provocar un error en la aplicación mandando un 0 como cantidad y aparecerá el siguiente mensaje.

    También vamos a dejar el espacio en blanco y vamos a presionar el botón.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    27/31

    Ya que agregamos dos pinturas a la venta vamos a presionar el botón de finalizar venta. Nos mandará a la siguiente

    interfaz donde nos muestra el ticket de venta con las pinturas que elegimos y el total de la venta.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    28/31

    Ahora desde la interfaz principal vamos a elegir la opción de Registros de venta. Solamente hemos realizado una

    venta con un total de $1000 y se muestra en la siguiente tabla. Ahora vamos a presionar el botón de menú principal.

    Vamos a agregar otra venta el sistema detecta que ahora está en curso la venta 2. Y agregamos una pintura a esta

    venta. Pero ahora vamos a poner una cantidad de 11. En la base de datos todas las pinturas en su campo de

    existencias tienen por default 10. Por lo que estaría violando esta regla. Nos manda este mensaje.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    29/31

    Ahora vamos a colocar la cantidad de para el color blanco. Debe de aceptarla porque 8 son la cantidad de existencias

    de ese color. Después presionamos el botón finalizar venta.

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    30/31

    Nuevamente vamos al menu principal y seleccionamos la opcion de registros de venta. Tenemos las 2 ventas

    registradas en esta tabla, la venta 1 con un total de $1000 y la venta 2 con un total de $1600

    En la base de datos haremos las siguientes consultas para verificar los resultados de la aplicación.

    Ticket de Venta 1

    Total de la venta 1

  • 8/16/2019 Proyecto Final Aplicaciones moviles.pdf

    31/31

    Ticket Venta 2

    Total venta 2

    Ahora hacemos un select * from pintura en la base de datos para ver las existencias de los productos después de

    haber hecho 2 ventas.

    Conclusiones:

    Esta aplicación agrega ventas según los productos seleccionados agregándolos a la tabla de ventas detalle. También

    controla posibles y comunes errores de usuario al momento de ingresar un elemento a la venta como pueden ser:

    Dejar el campo cantidad vacío o poner una cantidad de 0. También tiene la funcionalidad de no registrar ninguna

    venta que no tenga una pintura ingresado, esto lo hace con una condición que pregunta el total de esa venta y si la

    venta es igual a 0 (no tiene pinturas agregadas) la va a eliminar. Cuando termina de agregar los productos a la venta

    d ifi l ti k t d t E t li ió t bié t f ió d t d t