View
216
Download
0
Category
Preview:
Citation preview
8/16/2019 Proyecto Final Aplicaciones moviles.docx
1/33
• Abigail Delgado Hernández
Proyecto FinalAplicaciones móviles para
bases de datos XA
8/16/2019 Proyecto Final Aplicaciones moviles.docx
2/33
Primeramente creamos nuestra base de datos en el BDMS de SQL Server agregandolas siguientes tablas que son pintura, venta y venta-detalle.
Aora vamos a acer las siguientes inserciones en la tabla de pintura
insert into pintura values (1,blanco,!",agua,!"",1"#, (!,verde,1$,aceite,1$",1"#, (%,amarillo,1$,agua,1$",1"#,
(&,ro'o,!",aceite,!"",1"#, ($,azul,1$,aceite,1$",1"#, (,morado,!",agua,!"",1"#, (),naran'a,1$,aceite,1$",1"#, (*,ca+e,!",agua,!"",1"#
-omprobamos las inserciones con un select . +rom pintura
Aora vamos a crear un nuevo proyecto en Android Studio con la siguiente ruta!ile"#e$"#e$ Pro%ect y despu&s de crearlo vamos a importar el driver '(DS que va a
8/16/2019 Proyecto Final Aplicaciones moviles.docx
3/33
acer posible la cone)i*n remota con la base de datos en SQL Server. La colocamosen la siguiente ruta.Pro%ect"app"libs
Aora vamos a ir a la siguiente ventana ubicada en !ile"Pro%ectStructure"Dependencies y vamos a agregar una nueva dependencia seleccionandoel driver '(DS que acabamos de importar.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
4/33
Despu&s vamos a crear la clase de cone)i*n donde vamos a establecer los valoresde la cone)i*n que se va a reali+ar acia la base de datos con la direcci*n ipespecca de la red en la que estemos conectados en este caso es un punto deacceso creado desde un tel&/ono con la direcci*n 0P1 234.256.78.293.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
5/33
public class ConexionSQLServer {
public static Connection conectar_a_BD_Pinturas() throws SQLException { StrictMode.ThreadPoic! poic! " new StrictMode.ThreadPoic!.Buider().per#it$().%uid()& StrictMode.setThreadPolicy (poic!)& try{ Cass.forName("net.sourceforge.jtds.jdbc.Driver")& 'catch (CassotoundException e){'
returnDriverMana*er.getConnection("jdbc:jtds:sqlserver://192.1!.#.1$9:1##%database&a'e(pinturas%user(sa%password(root%")&
''
(ambi&n vamos a crear el arcive datosPinturas.%ava con el siguiente c*digo dondevamos establecer los setters y getters de los datos que van a ser almacenados en labase de datos.
public class datosPinturas { private int id)intura& private int id)edido&
private Strin* color& private Strin* tipo& private int litros& private int cantidad & private int precio& private int subtotal& private +%,ect fecha& private int *d+enta& private int total& public datosPinturas(){
' public int *et-dPintura() { return id)intura&
'
public void set-dPintura(int idPintura) { this.id)intura " idPintura& '
public int *et-dPedido() { return id)edido& '
public void set-dPedido(int idPedido) { this.id)edido " idPedido& '
public Strin* *etCoor() { return color& '
public void setCoor(Strin* coor) { this.color " coor& '
public Strin* *etTipo() { return tipo& '
8/16/2019 Proyecto Final Aplicaciones moviles.docx
6/33
public void setTipo(Strin* tipo) { this.tipo " tipo& '
public int *etLitros() { return litros& '
public void setLitros(int itros) { this.litros " itros& '
public int *etCantidad() { return cantidad & '
public void setCantidad(int cantidad) { this.cantidad " cantidad& '
public int *etPrecio() { return precio& '
public void setPrecio(int precio) { this. precio " precio& '
public int *etSu%tota() { return subtotal& '
public void setSu%tota(int su%tota) { this.subtotal " su%tota& '
public +%,ect *etecha() { return fecha& '
public void setecha(+%,ect echa) { this.fecha " echa& '
public int *et-d/enta() { return *d+enta& '
public void set-d/enta(int id/enta) { *d+enta " id/enta& '
public int *etTota() { return total& '
public void setTota(int tota) { this.total " tota& ''
8/16/2019 Proyecto Final Aplicaciones moviles.docx
7/33
Aora vamos a crear la clase tabla.%ava la cual nos va a servir para pintar losresultados de una consulta en un ob%ecto tabla. :stablecemos los m&todosagregar!ila, agregar;abecera y obtenerAncoPi)eles.
class Ta%a { private Ta%eLa!out tabla& private $rra!List0Ta%e1o23 filas& private $ctivit! actividad & private 1esources rs&
private int ,*-40-3&& public Ta%a($ctivit! actividad4 Ta%eLa!out ta%a){ this.actividad " actividad& this.tabla " ta%a& rs " this.actividad .*et1esources()& ,*- " 0-3& " 5& filas " new $rra!List0Ta%e1o23()&6 '
public void a*re*arCa%ecera(int recursoca%ecera){ Ta%e1o2.La!outPara#s a!outCeda& Ta%e1o2 ia " new Ta%e1o2(actividad )& Ta%e1o2.La!outPara#s a!outia " new
Ta%e1o2.La!outPara#s(Ta%e1o2.La!outPara#s.WRAP_CONTENT 4Ta%e1o2.La!outPara#s.WRAP_CON TENT )& ia.setLa!outPara#s(a!outia)&
Strin* 78 arra!Ca%ecera " rs.*etStrin*$rra!(recursoca%ecera)& 0-3& " arra!Ca%ecera.length&
for (int i " 5& i 0arra!Ca%ecera.length & i99) { Text/ie2 texto " new Text/ie2(actividad )& a!outCeda " newTa%e1o2.La!outPara#s(o%tener$nchoPixeesTexto(arra!Ca%ecera7i8)4Ta%e1o2.La!outPara#s.WRAP_CONTENT )& texto.setText(arra!Ca%ecera7i8)& texto.set:ravit!(:ravit!.CENTER_HORIZONTAL )&
texto.setLa!outPara#s(a!outCeda)&
ia.add/ie2(texto)& ' tabla.add/ie2(ia)& filas.add(ia)& ,*-99& '
public void a*r*ariaTa%a($rra!List0Strin*3 ee#entos){ Ta%e1o2.La!outPara#s a!outCeda& Ta%e1o2.La!outPara#s a!outia " newTa%e1o2.La!outPara#s(Ta%e1o2.La!outPara#s.WRAP_CONTENT 4Ta%e1o2.La!outPara#s.WRAP_CON
TENT )& Ta%e1o2 ia " new Ta%e1o2(actividad )& ia.setLa!outPara#s(a!outia)&
for (int i " 5& i 0ee#entos.si;e() & i99) { Text/ie2 texto " new Text/ie2(actividad )& texto.setText(Strin*.valueOf (ee#entos.*et(i)))& texto.set:ravit!(:ravit!.CENTER_HORIZONTAL )& a!outCeda " newTa%e1o2.La!outPara#s(o%tener$nchoPixeesTexto(texto.*etText().toStrin*())4Ta%e1o2.La!outPara#s.WRAP_CONTENT )& texto.setLa!outPara#s(a!outCeda)&
8/16/2019 Proyecto Final Aplicaciones moviles.docx
8/33
ia.add/ie2(texto)& ' tabla.add/ie2(ia)& filas.add(ia)& ,*-99& ' private int o%tener$nchoPixeesTexto(Strin* texto){
Paint p " new Paint()& 1ect %ounds " new 1ect()& p.setTextSi;e(
8/16/2019 Proyecto Final Aplicaciones moviles.docx
9/33
public static $rra!List reporte_*enera() throws SQLException { $rra!List datos " new $rra!List()& Connection conectar " ConexionSQLServer.conectar_a_BD_Pinturas()& State#ent s " conectar.createState#ent()& 1esutSet rs " s.executeQuer!("select id+enta fro' venta order by id+enta")& int id/enta " 5& while (rs.next()) { id/enta " rs.*et-nt("id+enta")&
' 1esutSet r " s.executeQuer!("select id+enta4total4fecha fro' venta%")&
while (r.next()){ datosPinturas dat: " new datosPinturas()& dat:.set-d/enta(r.*et-nt("id+enta"))& dat:.setecha(r.*et+%,ect("fecha"))& dat:.setTota(r.*et-nt("total"))&
datos.add(dat:)& ' s.cose()& conectar.cose()& return datos& '
'
Dentro del arcivo activityop("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
10/33
Lo que nos va a generar la siguiente inter/a+ con =nicamente dos botones. :l boton>0#0;0A? @:#(A va a inicar una venta. :l bot*n >?:0S(?CS D: @:#(A nos va amandar a una inter/a+ donde en una tabla se van a mostrar las ventas reali+adas.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
11/33
Aora vamos al arcivo %ava llamado MainActivity.%ava y ponemos el siguientec*digo donde establecemos las acciones que ar al momento de presionar algunode los botones.
public class Main$ctivit! e7tends $ppCo#pat$ctivit! { private Button boton*nicia+enta& private Button botoneportes&
@+verride
protected void onCreate(Bunde saved-nstanceState) { super.onCreate(saved-nstanceState)& setContent/ie2(1.a!out.activity_main)&
boton*nicia+enta " (Button) ind/ie2B!-d(1.id.b_iniciar_venta)& botoneportes " (Button) ind/ie2B!-d(1.id.b_reporte)& boton*nicia+enta.set+nCicAListener(new /ie2.+nCicAListener() { @+verride public void onCicA(/ie2 v) { int id/enta_ant " 5& int id/enta_act " 5& try { Connection c " ConexionSQLServer.conectar_a_BD_Pinturas()&
State#ent s " c.createState#ent()& 1esutSet r " s.executeQuer!("select id+enta fro' venta order byid+enta")& while (r.next()) { id/enta_ant " r.*et-nt("idventa")& ' id/enta_act " id/enta_ant 9 &
Quer!s.e'ecutauery ("insert into venta values A" 9 id/enta_act 9"4" 9 5 9 "4BC>D>CA")& Toast.ma)eTe*t(*et$ppicationContext()4 "+enta " 9 id/enta_act 9 " *niciada"4Toast.LENGTH_LONG ).sho2()& -ntent i " new -ntent(*et$ppicationContext()4 venta.class)&
start$ctivit!(i)& ' catch (SQLException e) {
' ' ')&
botoneportes.set+nCicAListener(new /ie2.+nCicAListener() { @+verride public void onCicA(/ie2 v) { -ntent i " new -ntent(*et$ppicationContext()4 1eportes.class)& start$ctivit!(i)& '
')& ''
8/16/2019 Proyecto Final Aplicaciones moviles.docx
12/33
Aora creamos una nueva actividad con nombre activityop("1dp" tools:conte7t("proyecto.db.proyectofinal.venta"3
0>e7t+iew android :layout6width("wrap6content" android :layout6height("wrap6content" android :te7tppearance("Eandroid:attr/te7tppearance'all" android :te7t("*D)intura" android :id("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
13/33
0>e7t+iew android :layout6width("wrap6content" android :layout6height("wrap6content" android :te7tppearance("Eandroid:attr/te7tppearance3ediu'" android :te7t("0antidad" android :id("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
14/33
Seg=n los elementos establecidos en este arcivo nos genera la siguiente inter/a+.Donde tenemos una lista varios campos de te)to y dos botones. La lista tendr losdi/erentes colores que estn disponibles para nuestra aplicaci*n. :n las etiquetasde litros y precio se van a llenar automticamente seg=n se seleccione el color de lalista. E tenemos un campo de te)to donde vamos a establecer la cantidad requeridapara esta venta.
:stablecemos el arcivo venta.%ava con el cual vamos a vincular esta inter/a+ ycolocamos el siguiente c*digo. Dentro de esta clase establecemos la inserci*n a latabla de venta detalle donde vamos a ingresar el id del producto que estseleccionado en la lista y tambi&n establece la cantidad de pinturas que va acomprar. (enemos los botones de ?egistrar y !inali+ar venta donde va a pasar aotra inter/a+ si presiona el bot*n de nali+ar y va a guardar la pintura seleccionadacon el bot*n de registrar.
public class venta e7tends $ppCo#pat$ctivit! { private Text/ie2 id)intuta& private Text/ie2 precio& private EditText cantidad & private Button botonegistrar& private Button boton,inali=ar& private Spinner lista)inturas& private Text/ie2 litros& @+verride protected void onCreate(Bunde saved-nstanceState) {
8/16/2019 Proyecto Final Aplicaciones moviles.docx
15/33
super.onCreate(saved-nstanceState)& setContent/ie2(1.a!out.activity_venta)& id)intuta " (Text/ie2) ind/ie2B!-d(1.id.textId )& precio " (Text/ie2) ind/ie2B!-d(1.id.textPrecio )& cantidad " (EditText) ind/ie2B!-d(1.id.c_cantidad )& litros " (Text/ie2) ind/ie2B!-d(1.id.textLitros)& botonegistrar " (Button) ind/ie2B!-d(1.id.b_reistrar )& boton,inali=ar " (Button) ind/ie2B!-d(1.id.b_!ina"i#ar )& lista)inturas " (Spinner) ind/ie2B!-d(1.id."ista)&
$rra!$dapter spinner_adapter " $rra!$dapter.create+rom,esource(this41.arra!. pint$ras4 android.1.a!out.simp"e_spinner_item )& spinner_adapter.setDropDo2n/ie21esource(android.1.a!out.simp"e_spinner_dropdo%n_item )& lista)inturas.set$dapter(spinner_adapter)& lista)inturas.set+n-te#SeectedListener(new$dapter/ie2.+n-te#SeectedListener() { @+verride public void on-te#Seected($dapter/ie203 parent4 /ie2 vie24 int position4long id) { int precio_int " 5& int itros_int " 5& int idPintura " 5& Strin* coor " lista)inturas.*etSeected-te#().toStrin*()& try { Connection c " ConexionSQLServer.conectar_a_BD_Pinturas()& State#ent s " c.createState#ent()& 1esutSet r " s.executeQuer!("select id)intura4precio4litros fro'
pintura where color(G" 9 coor 9 "G")& while (r.next()) { idPintura " r.*et-nt("id)intura")& precio_int " r.*et-nt("precio")& itros_int " r.*et-nt("litros")& ' id)intuta.setText("*D)intura ( " 9 idPintura)& precio.setText(")recio ( " 9 precio_int 9 "")& litros.setText("-itros ( " 9 itros_int 9 "")&
' catch (SQLException e) { e.printStacATrace()& '
'
@+verride public void onothin*Seected($dapter/ie203 parent) {
' ')&
boton,inali=ar.set+nCicAListener(new /ie2.+nCicAListener() {
@+verride public void onCicA(/ie2 v) {
' ')&
botonegistrar.set+nCicAListener(new /ie2.+nCicAListener() { @+verride public void onCicA(/ie2 v) {
8/16/2019 Proyecto Final Aplicaciones moviles.docx
16/33
//-tring recio.getTe*t(!.to-tring(! int ca"5& Strin* c"null& try { c " cantidad .*etText().toStrin*()&
ca " -nte*er. arseInt(c)& ' catch (u#%eror#atException e){
' int pr " 5&
int id/enta " 5& int idPintura " 5& int su%tota " 5& int existencias " 5& int uevaExistencia " 5& Strin* coor " lista)inturas.*etSeected-te#().toStrin*()& try { Connection co " ConexionSQLServer.conectar_a_BD_Pinturas()& State#ent s " co.createState#ent()& 1esutSet r " s.executeQuer!("select id+enta fro' venta order byid+enta")&
while (r.next()) { id/enta " r.*et-nt("id+enta")& ' 1esutSet r " s.executeQuer!("select id)intura4precio4e7istenciasfro' pintura where color(G" 9 coor 9"G")& while(r.next()){ pr " r.*et-nt("precio")& idPintura " r.*et-nt("id)intura")& existencias " r.*et-nt("e7istencias")& '
if(ca 0" existencias existencias35) { uevaExistencia " existencias F ca& su%tota " pr G ca& if (ca""5 HHc.#atches("")) { Toast.ma)eTe*t(*et$ppicationContext()4 "grega unacantidad"4 Toast.LENGTH_LONG ).sho2()& ' else { try { Quer!s.e'ecutauery ("insert into venta6detalle valuesA" 9 id/enta 9 "4" 9 idPintura9 "4" 9 cantidad .*etText() 9"4"9 su%tota 9 "")& Toast.ma)eTe*t(*et$ppicationContext()4 "Datos Buardados 0orrecta'ente"4Toast.LENGTH_LONG ).sho2()& Connection conec "ConexionSQLServer.conectar_a_BD_Pinturas()& State#ent st " conec.createState#ent()& 1esutSet rs " st.executeQuer!("select su'Asubtotal assubtotal fro' venta6detalle where id+enta("9id/enta)& int tota " 5& while(rs.next()){ tota " rs.*et-nt("subtotal")& '
Quer!s.e'ecutauery ("update venta set total("9tota 9 " where id+enta("9id/enta)& Quer!s.e'ecutauery ("update pintura set e7istencias
8/16/2019 Proyecto Final Aplicaciones moviles.docx
17/33
("9uevaExistencia 9" where color(G"9coor9"G")&
' catch (SQLException e) { Toast.ma)eTe*t(*et$ppicationContext()4 "Ha tienes ese producto en tu co'pra"4Toast.LENGTH_LONG ).sho2()& ' '
'if(existencias""5){ Toast.ma)eTe*t(*et$ppicationContext()4 "Ha no hay 'Is pinturasde este color"4 Toast.LENGTH_LONG ).sho2()& 'else if(ca3existencias){ Toast.ma)eTe*t(*et$ppicationContext()4 "-a cantidad debe ser 'enor a "9(existencias9)4Toast.LENGTH_LONG ).sho2()& '
' catch (SQLException e) { e.printStacATrace()& '
' ')&
boton,inali=ar.set+nCicAListener(new /ie2.+nCicAListener() { @+verride public void onCicA(/ie2 v) { -ntent i " new -ntent(*et$ppicationContext()4 Se*unda$ctivit!.class)& start$ctivit!(i)&
' ')&
''
;reamos una nueva actividad llamada activityop("1dp" tools:conte7t("proyecto.db.proyecto.egundactivity"3
0croll+iew android :id("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
18/33
android :layout6above("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
19/33
;on este c*digo generamos la siguiente inter/a+ con los siguientes elementos.Donde se van a mostrar las ventas de las di/erentes pinturas que an sidoagregadas a esta venta. E tambi&n va a asignar en el campo de te)to el total de laventa actual.
Aora vamos a vincular este arcivo FML con un arcivo %ava llamndoloSegundaActivity.%ava en este arcivo vamos a establecer la consulta que va amostrar como si /uera un ticGet de venta. Llamando a la clase tabla para poderpintar la consulta en una tabla. :l bot*n men= principal nos manda a la actividadMainActivity.
public class Se*unda$ctivit! e7tends $ppCo#pat$ctivit! { private Button boton&
private Text/ie2 te7to6total& private Text/ie2 >icet& @+verride
protected void onCreate(Bunde saved-nstanceState) { super.onCreate(saved-nstanceState)&
setContent/ie2(1.a!out.activity_se$nda)& boton " (Button) ind/ie2B!-d(1.id.bot)& te7to6total " (Text/ie2) ind/ie2B!-d(1.id.text_tota")& Ta%a ta%a " new Ta%a(this4 (Ta%eLa!out) ind/ie2B!-d(1.id.tab"a))&
ta%a.a*re*arCa%ecera(1.arra!.cabecera_tab"a)&
$rra!List pinturas " new $rra!List()& try {
8/16/2019 Proyecto Final Aplicaciones moviles.docx
20/33
pinturas " Quer!s.selintutas()& for (int i " 5& i 0 pinturas.si;e()& i99) { datosPinturas dat " new datosPinturas()& dat " (datosPinturas) pinturas.*et(i)& $rra!List0Strin*3 ee#entos " new $rra!List0Strin*3()& //elementos.add(dat.getIdPedido(! 0 ""! //elementos.add(dat.getIdPintura(! 0 ""! ee#entos.add(dat.*etCoor())& ee#entos.add(dat.*etTipo())&
ee#entos.add(dat.*etLitros() 9 "")& ee#entos.add(dat.*etCantidad() 9 "")& ee#entos.add(dat.*etPrecio() 9 "")& ee#entos.add(dat.*etSu%tota() 9 "")& //elementos.add(dat.get+echa(!0""! //ta1la.agregar+ilaTa1la(elementos! ta%a.a*r*ariaTa%a(ee#entos)& ' Connection conectar " ConexionSQLServer.conectar_a_BD_Pinturas()& State#ent s " conectar.createState#ent()& 1esutSet rs " s.executeQuer!("select id+enta fro' venta order byid+enta")& int id/enta " 5& while (rs.next()) { id/enta " rs.*et-nt("id+enta")& ' 1esutSet rs " s.executeQuer!("select total fro' venta whereid+enta("9id/enta)& int tota " 5& while(rs.next()){ tota " rs.*et-nt("total")& ' te7to6total.setText(">otal +enta "9id/enta9 " ( K"9tota )& ' catch (SQLException e) {
' boton.set+nCicAListener(new /ie2.+nCicAListener() {
@+verride public void onCicA(/ie2 v) { -ntent i " new -ntent(*et$ppicationContext()4 Main$ctivit!.class)& start$ctivit!(i)& try { int id/enta"5& Connection conec " ConexionSQLServer.conectar_a_BD_Pinturas()& State#ent st " conec.createState#ent()&
1esutSet rs " st.executeQuer!("select id+enta fro' venta order byid+enta")& while(rs.next()){ id/enta " rs.*et-nt("id+enta")& ' 1esutSet rs " st.executeQuer!("select total fro' venta whereid+enta("9id/enta)& int tota"5& while (rs.next()){ tota " rs.*et-nt("total")& ' if(tota""5){ Quer!s.e'ecutauery ("delete fro' venta whereid+enta("9id/enta)& ' ' catch (SQLException e) { e.printStacATrace()&
8/16/2019 Proyecto Final Aplicaciones moviles.docx
21/33
'
' ')& ''
Aora vamos a crear una nueva actividad donde vamos a tener los reportes deusuario. La actividad se llamar activityop("1dp" tools:conte7t("proyecto.db.proyecto.eportes" android :weightu'("1"3
0croll+iew android :id("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
22/33
0?croll+iew3
0;utton android :id("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
23/33
protected void onCreate(Bunde saved-nstanceState) { super.onCreate(saved-nstanceState)&
setContent/ie2(1.a!out.activity_reportes)& Ta%a ta%a " new Ta%a(this4 (Ta%eLa!out) ind/ie2B!-d(1.id.tab"a))& ta%a.a*re*arCa%ecera(1.arra!.cabecera_tab"a_reportes)& boton6'enu " (Button) ind/ie2B!-d(1.id.bot)&
$rra!List pinturas " new $rra!List()&
try { pinturas " Quer!s.reorte_general()& for (int i " 5& i 0 pinturas.si;e()& i99) { datosPinturas dat " new datosPinturas()& dat " (datosPinturas) pinturas.*et(i)& $rra!List0Strin*3 ee#entos " new $rra!List0Strin*3()&
ee#entos.add(dat.*et-d/enta()9"")& ee#entos.add(dat.*etecha().toStrin*())& ee#entos.add(dat.*etTota() 9 "")&
ta%a.a*r*ariaTa%a(ee#entos)& '
' catch (SQLException e) {
'
boton6'enu.set+nCicAListener(new /ie2.+nCicAListener() { @+verride public void onCicA(/ie2 v) { -ntent i " new -ntent(*et$ppicationContext()4 Main$ctivit!.class)& start$ctivit!(i)& ' ')&
'
'
Antes de e%ecutar nuestra aplicaci*n necesitamos las actividades dentro del arcivoAndroidMani/est para que pueda reconocerlas como tal. ;olocamos el siguientec*digo.
$%7'l version("1.$" encoding("utf8!"%& 0 'anifest 7'lns:android ("http://sche'as.android.co'/ap/res/android" pacage("proyecto.db.proyecto"3 0uses8per'ission android :na'e("android.per'ission.*&>C&C>"?3 0uses8per'ission android :na'e("android.per'ission.00C6L*,*6>>C"?3 0uses8per'ission android :na'e("android.per'ission.0@&BC6L*,*6>>C"?3
0uses8per'ission android :na'e("android.per'ission.0@&BC6&C>LM6>>C"?3 0uses8per'ission android :na'e("android.per'ission.00C6&C>LM6>>C"?3 0application android :allow;acup("true" android :icon("
8/16/2019 Proyecto Final Aplicaciones moviles.docx
24/33
0?activity3 0activity android :na'e(".venta"30?activity3 0activity android :na'e(".egundactivity"30?activity3 0activity android :na'e(".eportes"30?activity3 0?application3
0? 'anifest3
Para poder crear las cabeceras de las tablas que vamos a mostrar debemos crearlos siguientes String-Array dentro del arcivo Strings.)ml
@amos a crear dos String Array con los siguientes elementos que van a ponersecomo nombres de columnas al momento de mandar la consulta a la tabla. Las tablasque van a ocupar estas caberas son de las actividades activity
8/16/2019 Proyecto Final Aplicaciones moviles.docx
25/33
Antes de e%ecutar nuestra aplicacion debemos vericar nuestra direccion ip. Loaremos por medio de un ipcong en la consola de Hindo$s.
Aora e%ecutamos nuestra aplicaci*n.
Primero tenemos la siguiente inter/a+ donde tenemos estos dos botones. @amos apresionar el bot*n de inicar una venta, como no ay ninguna venta registrada nos
va a aparecer lo siguiente.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
26/33
@amos a seleccionar una pintura de la lista y los valores de los campos litros yprecio van a cambiar. Despu&s vamos a presionar el bot*n de ?egistrar y nos va amandar el siguiente mensa%e. @amos a seleccionar otro elemento di/erente de la
lista y colocamos nuevamente una cantidad.
Aora vamos a provocar un error en la aplicaci*n mandando un 9 como cantidad yaparecer el siguiente mensa%e. (ambi&n vamos a de%ar el espacio en blanco yvamos a presionar el bot*n.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
27/33
Ea que agregamos dos pinturas a la venta vamos a presionar el bot*n de nali+arventa. #os mandar a la siguiente inter/a+ donde nos muestra el ticGet de venta conlas pinturas que elegimos y el total de la venta.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
28/33
Aora desde la inter/a+ principal vamos a elegir la opci*n de ?egistros de venta.Solamente emos reali+ado una venta con un total de I2999 y se muestra en lasiguiente tabla. Aora vamos a presionar el bot*n de men= principal.
@amos a agregar otra venta el sistema detecta que aora est en curso la venta 4. E agregamos una pintura a esta venta. Pero aora vamos a poner una cantidad de
8/16/2019 Proyecto Final Aplicaciones moviles.docx
29/33
22. :n la base de datos todas las pinturas en su campo de e)istencias tienen porde/ault 29. Por lo que estara violando esta regla. #os manda este mensa%e.
Aora vamos a colocar la cantidad de para el color blanco. Debe de aceptarlaporque 6 son la cantidad de e)istencias de ese color. Despu&s presionamos el bot*n
nali+ar venta.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
30/33
8/16/2019 Proyecto Final Aplicaciones moviles.docx
31/33
#uevamente vamos al menu principal y seleccionamos la opcion de registros deventa. (enemos las 4 ventas registradas en esta tabla, la venta 2 con un total deI2999 y la venta 4 con un total de I2599
:n la base de datos aremos las siguientes consultas para vericar los resultadosde la aplicaci*n.
(icGet de @enta 2
(otal de la venta 2
8/16/2019 Proyecto Final Aplicaciones moviles.docx
32/33
(icGet @enta 4
(otal venta 4
Aora acemos un select J /rom pintura en la base de datos para ver las e)istenciasde los productos despu&s de aber eco 4 ventas.
8/16/2019 Proyecto Final Aplicaciones moviles.docx
33/33
;onclusiones1
:sta aplicaci*n agrega ventas seg=n los productos seleccionados agregndolos a latabla de ventas detalle. (ambi&n controla posibles y comunes errores de usuario almomento de ingresar un elemento a la venta como pueden ser1 De%ar el campocantidad vaco o poner una cantidad de 9. (ambi&n tiene la /uncionalidad de noregistrar ninguna venta que no tenga una pintura ingresado, esto lo ace con unacondici*n que pregunta el total de esa venta y si la venta es igual a 9 Kno tiene
pinturas agregadas la va a eliminar. ;uando termina de agregar los productos a laventa puede vericarlos en su ticGet de venta. :sta aplicaci*n tambi&n cuenta conuna /unci*n de reportes de ventas generales que puede ser =til para el usuariodonde se muestran las /ecas y totales de cada venta reali+ada.
Recommended