Proyecto Final Aplicaciones moviles.docx

Embed Size (px)

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.