Upload
ivan-pantaleon-zuluaga
View
216
Download
0
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