UNIVERSIDAD DE GUAYAQUIL
|
|
|
- Julio Lara Murillo
- hace 10 años
- Vistas:
Transcripción
1 UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMÁTICAS Y FÍSICAS CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES DELITOS RELATIVOS A LAS TARJETAS DE CRÉDITO, ALTERNATIVA TECNOLÓGICA DE PAGO. PROPUESTA LA COMUNICACIÓN NFC MANUAL TÉCNICO AUTOR: ROBERTO DAVID RAMIREZ VELIZ TUTOR: ING. JUAN SANCHEZ GUAYAQUIL ECUADOR 2013
2 ÍNDICE GENERAL DIAGRAMA DE PROCESOS DE PAGO NFC... 4 DETALLE DE LOS PROCESO NFC... 6 DIAGRAMA DE CASO DE USO... 7 CÓDIGO FUENTE DE LA APLICACIÓN DE LA TARJETA DE CRÉDITO... 8 NOMBRE DEL PROYECTO : TESIS... 8 PAQUETE ANDROID.COM.LIBRARY... 8 CLASE DATABASE.JAVA... 8 CLASE FUNCIONES.JAVA CLASE HTTP.JAVA CLASE HTTPPOSTAUX.JAVA CLASE PARAMETROS.JAVA PAQUETE ANDROID.COM.TESIS CLASE ACTIVIDAD_ACERCA.JAVA CLASE CONTRASENIA.JAVA CLASE DATABASE_HELPER.JAVA CLASE EDITAR_TARJETA.JAVA CLASE GALERIA_TARJETA.JAVA CLASE INGRESAR.JAVA CLASE LECTURA.JAVA CLASE LOGIN.JAVA CLASE MAIN.JAVA CLASE REGISTRO.JAVA CLASE TARJETA.JAVA ARCHIVOS XML ANDROID MANIFEST.XML ACERCA.XML CONTRASENIA.XML
3 EDITAR.XML GALERIA.XML INGRESAR.XML LOGIN.XML REGISTER.XML TARJETA.XML CÓDIGO PHP CONFIGURACIONE.PHP LISTADO_TARJETA.PHP PETICIONES.PHP INDEX.PHP LISTADOTARJETAENTIDADES.PHP LISTADOUSUARIO.PHP USUARIOSISTEMA.PHP USUARIO.PHP FUNCIONES.PHP CONTROL.PHP PERMISO.PHP PETICIONES.PHP PETICIONES ENTIDADES PETICIONES TARJETAS.PHP PETICIONES USUARIOS.PHP RECUPERAR CONTRASENIA.PHP RECUPERAR CONTRASENIA EXITO.PHP JQUERY.JTABLE DICCIONARIO DE DATOS LIBRERÍAS ADICIONALES
4 DIAGRAMA DE PROCESOS DE PAGO NFC Inicio/Cliente Inicio de la actividad del pago NFC El cliente tiene la necesidad de adquirir un bien. Selección productos a comprar El cliente selecciona los productos a comprar Activar NFC Se debe activar la comunicación NFC no si Tiene Activo NFC? El Sistema le validará si tiene activo el NFC El Vendedor Indica el total a Pagar El Vendedor, le indicará el total a cancelar si Verifica valor de totales no El Sistema le calculará el total a cancelar x 4
5 x Interacción de los dispositivos móviles El usuario deberá acerca su dispositivo Smartphone Para poder realizar la comunicación NFC Confirmar de Pago NFC El usuario acepta la cancelación de la compra Se realiza la confirmación del Pago. Efectuar el Pago NFC Se ejecuta el pago de la tarjeta de crédito del NFC Confirmación del Proceso( ) Se recibirá un correo de confirmación del pago Fin/Proceso Finaliza la actividad del pago NFC 5
6 DETALLE DE LOS PROCESO NFC Inicio/Cliente El cliente inicia el proceso de pago de tarjeta de crédito mediante el NFC. Cliente necesita adquirir un producto El cliente tiene la necesidad de adquirir un bien, por este motivo se dirige a la tienda, a realizar la respectiva compra. Activación de la comunicación NFC del smartphone El cliente deberá crear la tarjeta de crédito en el dispositivo Smartphone, para establecer el mecanismo de comunicación y poder efectuar el pago NFC debe activar la configuración Android Beam en el dispositivo. Verificación de la comunicación NFC El sistema verificará que la comunicación de NFC e internet este activa, mediante validación del servicio en el teléfono. Cálculo de totales El cliente seleccionara los productos a comprar, y se le presentara mediante un cálculo el total a pagar del cliente. Verificación del total a cancelar El cliente verificará la compra de los productos, se le detallara todos los artículos seleccionados con su respectivo precio de venta. Interacción del dispositivo móvil con el lector NFC El cliente deberá acercar su dispositivo Smartphone con el lector de NFC, para poder realizar la comunicación NFC. Aceptación de efectuarse la transacción El cliente debe aceptar la transacción, se enviará un correo automático al cliente. Ejecución del pago NFC Proceso de efectuarse el pago, se debita el saldo de la tarjeta de crédito, y podrá ser consultado su detalle del estado de cuenta mediante la vía web. 6
7 DIAGRAMA DE CASO DE USO Users REGISTRAR USUARIO Y TARJETA CRÉDITO REALIZACIÓN DEL PAGO COMUNICACIÓN NFC DETALLE DE CASO DE USO El usuario crea la tarjeta de crédito en el dispositivo móvil, que puede ser Dinners, Visa o Mastercard. Deberá ingresar datos personales, y un correo electrónico donde se le enviará al cliente la verificación de la transacción. El dispositivo móvil, efectuará el proceso de transmisión de datos al lector NFC, este recibirá la información, procesará el pago y se enviará mediante un , la confirmación de transacción. 7
8 CÓDIGO FUENTE DE LA APLICACIÓN DE LA TARJETA DE CRÉDITO NOMBRE DEL PROYECTO : TESIS PAQUETE ANDROID.COM.LIBRARY CLASE DATABASE.JAVA Permite la interacción de la base de dato que se crea en el teléfono smartphone que contendrá la información de las tarjetas de crédito, contiene las sentencias de SQL, como: delete, update, insert. package com.android.library; import java.io.inputstream; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import org.w3c.dom.document; import org.w3c.dom.nodelist; import com.android.tesis.r; import android.content.contentvalues; import android.content.context; import android.database.cursor; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqliteopenhelper; import android.provider.basecolumns; import android.util.log; import android.widget.toast; public class DataBase { private static final String DATABASE_NAME = "Tesis"; private static final int DATABASE_VERSION = 1; private static final String TABLE_NAME = "tarjetas"; private static final String TAG = "Tesis"; private Context context; private SQLiteDatabase db; public DataBase(Context context) { this.context = context; OpenHelper openhelper = new OpenHelper(this.context); this.db = openhelper.getwritabledatabase(); 8
9 public void open() { if (!db.isopen()) { OpenHelper openhelper = new OpenHelper(this.context); this.db = openhelper.getwritabledatabase(); public long insert(string tablename, ContentValues pairvalues) { long rowid = db.insertorthrow(tablename, null, pairvalues); Log.i(TAG, "Insertando registro en la tabla " + tablename + ", id = " + rowid); return rowid; public void insertstring(string tablename, String query) { Log.i(TAG, "Insertando registro en la tabla " + tablename); db.execsql(query); public void close() { db.close(); public String update(string tablename, ContentValues pairvalues, String rowid) { db.update(tablename, pairvalues, " tarjeta = " + rowid, null); Log.i(TAG, "Actualizando registro en la tabla " + tablename + ", tarjeta = " + rowid); return rowid; public long updateall(string tablename, ContentValues pairvalues) { Log.i(TAG, "Actualizando registro en la tabla " + tablename ); return db.update(tablename, pairvalues, null, null); public void delete(string tablename, String whereclause, String[] whereargs) { db.delete(tablename, whereclause, whereargs); Log.i(TAG, "Eliminando registros en la tabla " + tablename); public Cursor rawquery(string query, String[] selectionargs) { Cursor test = db.rawquery(query, selectionargs); return test; public Cursor query(string tablename, String[] columnsname, String selection, String[] selectionargs, String groupby, String having, String orderby) { return db.query(tablename, columnsname, selection, selectionargs, groupby, having, orderby); private static class OpenHelper extends SQLiteOpenHelper { 9
10 private Context context; OpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); this.context = public void oncreate(sqlitedatabase db) { String s; try { InputStream in = context.getresources().openrawresource( R.raw.sql); DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = builder.parse(in, null); NodeList statements = doc.getelementsbytagname("statement"); for (int i = 0; i < statements.getlength(); i++) { s = statements.item(i).getchildnodes().item(0).getnodevalue(); db.execsql(s); catch (Throwable t) { System.out.println("Error hp: " + t.tostring()); Toast.makeText(context, t.tostring(), public void onupgrade(sqlitedatabase db, int oldversion, int newversion) { db.execsql("drop TABLE IF EXISTS " + DATABASE_NAME); oncreate(db); CLASE FUNCIONES.JAVA Esta clase maneja la encriptación de la información con el estándar MD5 que se le envía por parámetro. package com.android.library; import java.math.biginteger; import java.security.messagedigest; import java.security.nosuchalgorithmexception; public class Funciones { 10
11 public static String md5(string s) { MessageDigest digest; try { digest = MessageDigest.getInstance("MD5"); digest.update(s.getbytes(),0,s.length()); String hash = new BigInteger(1, digest.digest()).tostring(16); return hash; catch (NoSuchAlgorithmException e) { e.printstacktrace(); return ""; CLASE HTTP.JAVA Permite la interacción con el ambiente web, maneja las conexiones del cliente y se realiza una validación para verificar que el dispositivo tiene la conexión de internet. package com.android.library; import java.net.urlencoder; import java.util.list; import org.apache.http.namevaluepair; import org.apache.http.client.httpclient; import org.apache.http.client.responsehandler; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.httpget; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.basicresponsehandler; import org.apache.http.impl.client.defaulthttpclient; import android.content.context; import android.net.connectivitymanager; public class Http { /* * Funcion para acceder al Web Service */ public String accederwebservice(string page, List<NameValuePair> namevaluepairs, int method) { String responsebody = null; HttpClient httpclient = new DefaultHttpClient(); ResponseHandler<String> responsehandler = new BasicResponseHandler(); try { switch (method) { 11
12 case 1: { String combinedparams = ""; if (!namevaluepairs.isempty()) { combinedparams += "?"; for (NameValuePair p : namevaluepairs) { String paramstring = p.getname() + "=" + URLEncoder.encode(p.getValue(), "UTF-8"); if (combinedparams.length() > 1) { combinedparams += "&" + paramstring; else { combinedparams += paramstring; HttpGet request = new HttpGet( page + combinedparams); responsebody = httpclient.execute(request, responsehandler); break; case 2: { HttpPost httppost = new HttpPost(page); httppost.setentity(new UrlEncodedFormEntity(nameValuePairs)); catch (Exception e) { e.printstacktrace(); return responsebody; responsebody = httpclient.execute(httppost, responsehandler); break; /* * Funcion para validar si se esta conectado al internet */ public boolean validarconexion(context context) { String service = Context.CONNECTIVITY_SERVICE; ConnectivityManager connectivity = (ConnectivityManager) context.getsystemservice(service); return connectivity.getactivenetworkinfo()!= null && connectivity.getactivenetworkinfo().isavailable() && connectivity.getactivenetworkinfo().isconnected(); CLASE HTTPPOSTAUX.JAVA Permite manejar la interacción con el método JSON, que encripta los objetos que son utilizados en el ambiente, se manejo la información en el tipo de dato String. 12
13 package com.android.library; import java.io.bufferedreader; import java.io.inputstream; import java.io.inputstreamreader; import java.util.arraylist; import org.apache.http.httpentity; import org.apache.http.httpresponse; import org.apache.http.namevaluepair; import org.apache.http.client.httpclient; import org.apache.http.client.entity.urlencodedformentity; import org.apache.http.client.methods.httppost; import org.apache.http.impl.client.defaulthttpclient; import org.json.jsonarray; import org.json.jsonexception; import android.util.log; /*CLASE AUXILIAR PARA EL ENVIO DE PETICIONES A NUESTRO SISTEMA * Y MANEJO DE RESPUESTA.*/ public class Httppostaux{ InputStream is = null; String result = ""; public JSONArray getserverdata(arraylist<namevaluepair> parameters, String urlwebserver ){ //conecta via http y envia un post. httppostconnect(parameters,urlwebserver); if (is!=null){//si obtuvo una respuesta getpostresponse(); return getjsonarray(); else{ return null; //peticion HTTP private void httppostconnect(arraylist<namevaluepair> parametros, String urlwebserver){ // try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(urlwebserver); httppost.setentity(new UrlEncodedFormEntity(parametros)); //ejecuto peticion enviando datos por POST HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getentity(); is = entity.getcontent(); catch(exception e){ Log.e("log_tag", "Error in http connection "+e.tostring()); public void getpostresponse(){ //Convierte respuesta a String try{ BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso "),8); 13
14 StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readline())!= null) { sb.append(line + "\n"); is.close(); result=sb.tostring(); Log.e("getpostresponse"," result= "+sb.tostring()); catch(exception e){ Log.e("log_tag", "Error converting result "+e.tostring()); public JSONArray getjsonarray(){ //parse json data try{ JSONArray jarray = new JSONArray(result); return jarray; catch(jsonexception e){ Log.e("log_tag", "Error parsing data "+e.tostring()); return null; CLASE PARAMETROS.JAVA Maneja la dirección URL, donde se encuentra el Web Services, puede ser este local o publicado en algún dominio que maneja el estándar Mail, XAMPP. package com.android.library; import android.content.context; import android.content.sharedpreferences; import android.content.sharedpreferences.editor; import android.preference.preferencemanager; public class Parametros { private SharedPreferences parametros; private String urlservidor = " private String urlservidor = " private Editor editor; private String PREF_NOMBRE = "PREF_NOMBRE"; private String PREF_CEDULA = "PREF_CEDULA"; private String PREF_USUARIO = "PREF_USUARIO"; private String PREF_CONTRASENIA = "PREF_USUARIO"; 14
15 public Parametros(Context context) { parametros = PreferenceManager.getDefaultSharedPreferences(context); public String getnombre() { return parametros.getstring(pref_nombre, ""); public void setnombre(string nombre) { editor = parametros.edit(); editor.putstring(pref_nombre, nombre); editor.commit(); public String getusuario() { return parametros.getstring(pref_usuario, ""); public void setcedula(string cedula) { editor = parametros.edit(); editor.putstring(pref_cedula, cedula); editor.commit(); public String getcedula() { return parametros.getstring(pref_cedula, ""); public void setusuario(string usuario) { editor = parametros.edit(); editor.putstring(pref_usuario, usuario); editor.commit(); public String getcontrasenia() { return parametros.getstring(pref_contrasenia, ""); public void setcontrasenia(string contrasenia) { editor = parametros.edit(); editor.putstring(pref_contrasenia, contrasenia); editor.commit(); public String geturlservidor() { return urlservidor; 15
16 PAQUETE ANDROID.COM.TESIS CLASE ACTIVIDAD_ACERCA.JAVA package com.android.tesis; import android.app.activity; import android.os.bundle; public class Actividad_acerca extends Activity { public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.acerca); CLASE CONTRASENIA.JAVA Maneja el proceso del usuario que pueda recuperar la contraseña, que se envía por , maneja métodos de conexión de internet y envio de correos. package com.android.tesis; import java.util.arraylist; import java.util.list; import org.apache.http.namevaluepair; import org.apache.http.message.basicnamevaluepair; import android.app.activity; import android.app.alertdialog; import android.app.dialog; import android.app.progressdialog; import android.content.dialoginterface; import android.content.intent; import android.os.asynctask; import android.os.bundle; import android.view.view; import android.view.viewgroup; import android.widget.edittext; import android.widget.tablelayout; import com.android.library.funciones; import com.android.library.http; import com.android.library.parametros; public class Contrasenia extends Activity { private ProgressDialog progressdialog; private Parametros parametros; private Http http; private int error = 0; private static final int alertexito = 1, alertprogress = 2, alerterror = 3, alertinternet = 4; private TableLayout tlylogin; 16
17 private EditText public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); parametros = new Parametros(getApplicationContext()); http = new Http(); setcontentview(r.layout.contrasenia); tlylogin = (TableLayout) findviewbyid(r.id.tlylogin); txtusuario = (EditText) findviewbyid(r.id.txtusuario); public void enviar(view v) { validarinputs(tlylogin); if (error == 0) { showdialog(alertprogress); new RecordarContrasenia().execute( txtusuario.gettext().tostring()); error = protected Dialog oncreatedialog(int id) { String title = "", msg = ""; switch (id) { case alertexito: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_exito).tostring(); break; case alerterror: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_error).tostring(); break; case alertinternet: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_internet).tostring(); break; case alertprogress: progressdialog = new ProgressDialog(Contrasenia.this); progressdialog.settitle(gettext(r.string.app_name).tostring()); progressdialog.setmessage(gettext(r.string.lbl_cargando).tostring()); return progressdialog; return new AlertDialog.Builder(Contrasenia.this).setTitle(title).setMessage(msg).setPositiveButton( gettext(r.string.lbl_aceptar).tostring(), new DialogInterface.OnClickListener() 17
18 public void onclick(dialoginterface dialog, int which) { // TODO Auto-generated method stub ).create(); private void validarinputs(viewgroup group) { for (int i = 0, count = group.getchildcount(); i < count; ++i) { View view = group.getchildat(i); if (view instanceof EditText) { EditText e = ((EditText) view); if (e.gettext().tostring().length() == 0) { error++; e.seterror(gettext(r.string.input_error)); if (view instanceof ViewGroup && (((ViewGroup) view).getchildcount() > 0)) validarinputs((viewgroup) view); class RecordarContrasenia extends AsyncTask<String, String, String> { protected String doinbackground(string... params) { List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(); namevaluepairs.add(new BasicNameValuePair("accion", "RC") namevaluepairs.add(new BasicNameValuePair("usuario", params[0])); if(http.validarconexion(getapplicationcontext())){ return http.accederwebservice(parametros.geturlservidor() + "/modulos/peticiones.php", namevaluepairs, 2); else{ return "NOINTERNET"; protected void onpostexecute(string result) { System.out.println("Devuelve el correo: " + result); progressdialog.dismiss();// ocultamos progess dialog. if(result.equals("nointernet")){ showdialog(alertinternet); else if (result.equals("ok")) { parametros.setusuario(txtusuario.gettext().tostring()); else { showdialog(alertexito); showdialog(alerterror); 18
19 CLASE DATABASE_HELPER.JAVA Crea la tabla en la base de dato del teléfono que contendrá la información de la tarjeta de crédito. package com.android.tesis; import android.content.context; import android.database.sqlite.sqlitedatabase; import android.database.sqlite.sqlitedatabase.cursorfactory; import android.database.sqlite.sqliteopenhelper; public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME="tarjetas.db"; public DatabaseHelper(Context context, String nombre, CursorFactory factory, int version) { super(context, DATABASE_NAME, factory, public void oncreate(sqlitedatabase arg0) { // TODO Auto-generated method stub arg0.execsql("create TABLE tarjetas(idtarjeta TEXT PRIMARY KEY, cliente TEXT);"); public void onupgrade(sqlitedatabase arg0, int oldversion, int newversion) { // TODO Auto-generated method stub android.util.log.v("tarjetas","upgrading database, which will destroy all old arg0.execsql("drop TABLE IF EXISTS tarjetas"); oncreate(arg0); CLASE EDITAR_TARJETA.JAVA Permite modificar la información de la tarjeta de crédito, disponible, ejemplo, la fecha de caducidad, el tipo de tarjeta. package com.android.tesis; import java.util.arraylist; import java.util.calendar; 19
20 import java.util.gregoriancalendar; import java.util.list; import java.util.stringtokenizer; import org.apache.http.namevaluepair; import org.apache.http.message.basicnamevaluepair; import android.app.activity; import android.app.alertdialog; import android.app.dialog; import android.app.progressdialog; import android.content.contentvalues; import android.content.dialoginterface; import android.content.intent; import android.database.cursor; import android.os.asynctask; import android.os.bundle; import android.util.log; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.datepicker; import android.widget.edittext; import android.widget.spinner; import android.widget.tablelayout; import com.android.library.database; import com.android.library.http; import com.android.library.parametros; public class Editar extends Activity { private DataBase db; private Cursor cursor; private static final String TABLE_NAME = "tarjetas"; private ProgressDialog progressdialog; private Parametros parametros; private Http http; private int error = 0; private static final int alertexito = 1, alertprogress = 2, alerterror = 3, alertinternet = 4; private TableLayout tlyingresar; private EditText txttarjeta, txtcodigo; private Spinner spntarjetas; private String[] tarjetas = { "America", "Visa", "Dinners" ; private int[] images = { R.drawable.american, R.drawable.visa, R.drawable.discovery ; private DatePicker public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); db = new DataBase(getApplicationContext()); parametros = new Parametros(getApplicationContext()); http = new Http(); setcontentview(r.layout.ingresar); 20
21 tlyingresar = (TableLayout) findviewbyid(r.id.tlyingresar); txttarjeta = (EditText) findviewbyid(r.id.txttarjeta); txttarjeta.setenabled(false); txtcodigo = (EditText) findviewbyid(r.id.txtcodigo); spntarjetas = (Spinner) findviewbyid(r.id.spntarjetas); ArrayAdapter<String> dataadapter = new ArrayAdapter<String>(this, android.r.layout.simple_spinner_item, tarjetas); dataadapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spntarjetas.setadapter(dataadapter); dpfecha = (DatePicker) findviewbyid(r.id.dpfecha); Calendar cal = Calendar.getInstance(); Intent i = getintent(); if (i.hasextra("id")) { cursor = db.rawquery("select tarjeta, tipo, codigo, strftime('%m- %d-%y', FECHA, 'unixepoch') AS fecha FROM " + TABLE_NAME + " WHERE _id =?", new String[] { i.getstringextra("id") ); cursor.movetoposition(0); Log.e("aqui ", cursor.getstring(cursor.getcolumnindexorthrow("fecha"))); StringTokenizer st = new StringTokenizer(cursor.getString(cursor.getColumnIndexOrThrow("fecha")),"-"); txttarjeta.settext(cursor.getstring(cursor.getcolumnindexorthrow("tarjeta"))); txtcodigo.settext(cursor.getstring(cursor.getcolumnindexorthrow("codigo"))); String tipo = cursor.getstring(cursor.getcolumnindexorthrow("tipo")); for(int x=0; x<tarjetas.length; x++ ){ if(tipo.equals(tarjetas[x])){ spntarjetas.setselection(x,true); int month = Integer.valueOf(st.nextToken()); int day = Integer.valueOf(st.nextToken()); int year = Integer.valueOf(st.nextToken()); Log.e("Entra", Integer.valueOf(day).toString() + " - " + Integer.valueOf(month).toString() + " - " + Integer.valueOf(year).toString()); dpfecha.updatedate(year, month, day); public void guardar(view v) { validarinputs(tlyingresar); if (error == 0) { showdialog(alertprogress); new ActualizarTarjeta().execute( txttarjeta.gettext().tostring(), txtcodigo.gettext().tostring(), tarjetas[spntarjetas.getselecteditemposition()], 21
22 Integer.valueOf( images[spntarjetas.getselecteditemposition()]) error = 0;.toString()); public void guardartarjeta() { ContentValues vals = new ContentValues(); vals.put("tarjeta", txttarjeta.gettext().tostring()); vals.put("tipo", tarjetas[spntarjetas.getselecteditemposition()]); vals.put("codigo", txtcodigo.gettext().tostring()); vals.put("imagen", images[spntarjetas.getselecteditemposition()]); GregorianCalendar d = new GregorianCalendar(dpFecha.getYear(), dpfecha.getmonth() - 1, dpfecha.getdayofmonth()); System.out.println("Fecha: " + d.tostring()); vals.put("fecha", d.gettimeinmillis()/1000); db.update(table_name, vals, txttarjeta.gettext().tostring()); protected Dialog oncreatedialog(int id) { String title = "", msg = ""; switch (id) { case alertexito: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_exito).tostring(); break; case alerterror: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_error).tostring(); break; case alertinternet: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_internet).tostring(); break; case alertprogress: progressdialog = new ProgressDialog(Editar.this); progressdialog.settitle(gettext(r.string.app_name).tostring()); progressdialog.setmessage(gettext(r.string.lbl_cargando).tostring()); return progressdialog; return new AlertDialog.Builder(Editar.this).setTitle(title).setMessage(msg).setPositiveButton(getText(R.string.lbl_aceptar).toString(), new DialogInterface.OnClickListener() public void onclick(dialoginterface int which) { 22
23 method stub // TODO Auto-generated ).create(); private void validarinputs(viewgroup group) { for (int i = 0, count = group.getchildcount(); i < count; ++i) { View view = group.getchildat(i); if (view instanceof EditText) { EditText e = ((EditText) view); if (e.gettext().tostring().length() == 0) { error++; e.seterror(gettext(r.string.input_error)); if (view instanceof ViewGroup && (((ViewGroup) view).getchildcount() > 0)) validarinputs((viewgroup) view); class ActualizarTarjeta extends AsyncTask<String, String, String> { protected String doinbackground(string... params) { List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(); namevaluepairs.add(new BasicNameValuePair("accion", "AT")); namevaluepairs.add(new BasicNameValuePair("tarjeta", params[0])); namevaluepairs.add(new BasicNameValuePair("codigo", params[1])); namevaluepairs.add(new BasicNameValuePair("tipo", params[2])); namevaluepairs.add(new BasicNameValuePair("imagen", params[3])); namevaluepairs.add(new BasicNameValuePair("fecha_creacion", Integer.valueOf(dpFecha.getYear()).toString() + "-" + Integer.valueOf(dpFecha.getMonth()).toString() + "-" + Integer.valueOf(dpFecha.getDayOfMonth()).toString())); if (http.validarconexion(getapplicationcontext())) { return http.accederwebservice(parametros.geturlservidor() + "/modulos/peticiones.php", namevaluepairs, 2); else { return "NOINTERNET"; protected void onpostexecute(string result) { System.out.println("Rpta: " + result); progressdialog.dismiss();// ocultamos progess dialog. if (result.equals("nointernet")) { showdialog(alertinternet); else if (result.equals("ok")) { guardartarjeta(); showdialog(alertexito); 23
24 else { showdialog(alerterror); public void ondestroy() { super.ondestroy(); db.close(); CLASE GALERIA_TARJETA.JAVA Maneja la creación de la imagen de la tarjeta de crédito, esta información se la almacena en la base de dato del teléfono. package com.android.tesis; package com.android.tesis; import java.nio.charset.charset; import android.app.activity; import android.content.intent; import android.content.res.typedarray; import android.database.cursor; import android.nfc.ndefmessage; import android.nfc.ndefrecord; import android.nfc.nfcadapter; import android.nfc.nfcadapter.createndefmessagecallback; import android.nfc.nfcadapter.onndefpushcompletecallback; import android.nfc.nfcevent; import android.os.bundle; import android.os.handler; import android.os.message; import android.os.parcelable; import android.text.format.time; import android.util.log; import android.view.view; import android.view.viewgroup; import android.widget.adapterview; import android.widget.baseadapter; import android.widget.gallery; import android.widget.imageview; import android.widget.imageview.scaletype; import android.widget.toast; import com.android.library.database; public class GaleriaTarjeta extends Activity implements CreateNdefMessageCallback, OnNdefPushCompleteCallback { NfcAdapter mnfcadapter; private static final int MESSAGE_SENT = 1; private Gallery galeria1; private ImageView imagen; 24
25 private static final String TABLE_NAME = "tarjetas"; private DataBase db; private Cursor cursor; GalleryAdapter public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.galeria); mnfcadapter = NfcAdapter.getDefaultAdapter(this); if (mnfcadapter == null) { Toast.makeText(getApplicationContext(), "NFC is not available on this device.", Toast.LENGTH_LONG).show(); // Register callback to set NDEF message mnfcadapter.setndefpushmessagecallback(this, this); // Register callback to listen for message-sent success mnfcadapter.setonndefpushcompletecallback(this, this); db = new DataBase(getApplicationContext()); cursor = db.rawquery("select * FROM " + TABLE_NAME, new String[] {); Log.e("tesis", "Registros " + cursor.getcount()); galeria1 = (Gallery) findviewbyid(r.id.galeria); imagen = (ImageView) findviewbyid(r.id.imagen); adapterg = new GalleryAdapter(); galeria1.setadapter(adapterg); galeria1.setonitemclicklistener(new AdapterView.OnItemClickListener() { public void onitemclick(adapterview<?> arg0, View arg1, int position, long arg3) { if (position == 0) { Intent i = new Intent(); i.setclass(getapplicationcontext(), Ingresar.class); startactivity(i); else { cursor.movetoposition(position); Intent i = new Intent(); i.putextra("id", cursor.getstring(cursor.getcolumnindexorthrow("_id"))); i.setclass(getapplicationcontext(), Editar.class); startactivity(i); ); galeria1.setonitemlongclicklistener(new AdapterView.OnItemLongClickListener() public boolean onitemlongclick(adapterview<?> arg0, View arg1, int position, long arg3) { // TODO Auto-generated method stub cursor.movetoposition(position); 25
26 ); Intent i = new Intent(); i.putextra("numero_tarjeta", cursor.getstring(cursor.getcolumnindexorthrow("tarjeta"))); i.setclass(getapplicationcontext(), Tarjeta.class); startactivity(i); return public void onresume() { super.onresume(); cursor.requery(); adapterg.notifydatasetchanged(); // Check to see that the Activity started due to an Android Beam if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) { public void ondestroy() { super.ondestroy(); db.close(); class GalleryAdapter extends BaseAdapter { private int mgalleryitembackcground; public GalleryAdapter() { TypedArray a = getapplicationcontext().obtainstyledattributes( R.styleable.Gallery1); mgalleryitembackcground = a.getresourceid( R.styleable.Gallery1_android_galleryItemBackground, 0); a.recycle(); public int getcount() { // TODO Auto-generated method stub return cursor.getcount(); public Object getitem(int arg0) { // TODO Auto-generated method stub return arg0; public long getitemid(int arg0) { // TODO Auto-generated method stub return arg0; public View getview(int arg0, View arg1, ViewGroup arg2) { 26
27 // TODO Auto-generated method stub cursor.movetoposition(arg0); ImageView i = new ImageView(getApplicationContext()); i.setimageresource(cursor.getint(cursor.getcolumnindexorthrow("imagen"))); i.setlayoutparams(new Gallery.LayoutParams(180, 180)); i.setscaletype(scaletype.fit_xy); i.setbackgroundresource(mgalleryitembackcground); return i; /* * Para la interacion con NFC */ /** * Implementation for the CreateNdefMessageCallback interface public NdefMessage createndefmessage(nfcevent event) { Time time = new Time(); time.settonow(); String text = ("Beam me up!\n\n" + "Beam Time: " + time.format("%h:%m:%s")); NdefMessage msg = new NdefMessage(new NdefRecord[] { createmimerecord( "application/com.example.android.beam", text.getbytes()) /** * The Android Application Record (AAR) is commented out. When a device * receives a push with an AAR in it, the application specified in the * AAR is guaranteed to run. The AAR overrides the tag dispatch system. * You can add it back in to guarantee that this activity starts when * receiving a beamed message. For now, this code uses the tag dispatch * system. */ //,NdefRecord.createApplicationRecord("com.example.android.beam") ); return public void onnewintent(intent intent) { // onresume gets called after this to handle the intent setintent(intent); /** * Parses the NDEF Message from the intent and prints to the TextView */ void processintent(intent intent) { Parcelable[] rawmsgs = intent.getparcelablearrayextra(nfcadapter.extra_ndef_messages); // only one message sent during the beam NdefMessage msg = (NdefMessage) rawmsgs[0]; // record 0 contains the MIME type, record 1 is the AAR, if present 27
28 Toast.makeText(getApplicationContext(), new String(msg.getRecords()[0].getPayload()), Toast.LENGTH_LONG).show(); Intent i = new Intent(); i.setclass(getapplicationcontext(), Lectura.class); i.putextra("mensaje", new String(msg.getRecords()[0].getPayload())); startactivity(i); /** * Creates a custom MIME type encapsulated in an NDEF record * mimetype */ public NdefRecord createmimerecord(string mimetype, byte[] payload) { byte[] mimebytes = mimetype.getbytes(charset.forname("us-ascii")); NdefRecord mimerecord = new NdefRecord(NdefRecord.TNF_MIME_MEDIA, mimebytes, new byte[0], payload); return public void onndefpushcomplete(nfcevent event) { // TODO Auto-generated method stub // A handler is needed to send messages to the activity when this // callback occurs, because it happens from a binder thread mhandler.obtainmessage(message_sent).sendtotarget(); /** This handler receives a message from onndefpushcomplete */ private final Handler mhandler = new Handler() public void handlemessage(message msg) { switch (msg.what) { case MESSAGE_SENT: Toast.makeText(getApplicationContext(), "Mensaje enviado!", Toast.LENGTH_LONG).show(); break; ; CLASE INGRESAR.JAVA package com.android.tesis; import java.util.arraylist; import java.util.date; import java.util.gregoriancalendar; import java.util.list; import org.apache.http.namevaluepair; 28
29 import org.apache.http.message.basicnamevaluepair; import android.app.activity; import android.app.alertdialog; import android.app.dialog; import android.app.progressdialog; import android.content.contentvalues; import android.content.dialoginterface; import android.os.asynctask; import android.os.bundle; import android.view.view; import android.view.viewgroup; import android.widget.arrayadapter; import android.widget.datepicker; import android.widget.edittext; import android.widget.spinner; import android.widget.tablelayout; import com.android.library.database; import com.android.library.http; import com.android.library.parametros; public class Ingresar extends Activity { private DataBase db; private static final String TABLE_NAME = "tarjetas"; private ProgressDialog progressdialog; private Parametros parametros; private Http http; private int error = 0; private static final int alertexito = 1, alertprogress = 2, alerterror = 3, alertinternet = 4; private TableLayout tlyingresar; private EditText txttarjeta, txtcodigo; private Spinner spntarjetas; private String[] tarjetas = { "America", "Visa", "Dinners" ; private int[] images = { R.drawable.american, R.drawable.visa, R.drawable.discovery ; private DatePicker public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); db = new DataBase(getApplicationContext()); parametros = new Parametros(getApplicationContext()); http = new Http(); setcontentview(r.layout.ingresar); tlyingresar = (TableLayout) findviewbyid(r.id.tlyingresar); txttarjeta = (EditText) findviewbyid(r.id.txttarjeta); txtcodigo = (EditText) findviewbyid(r.id.txtcodigo); spntarjetas = (Spinner) findviewbyid(r.id.spntarjetas); ArrayAdapter<String> dataadapter = new ArrayAdapter<String>(this, android.r.layout.simple_spinner_item, tarjetas); dataadapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item); spntarjetas.setadapter(dataadapter); 29
30 dpfecha = (DatePicker) findviewbyid(r.id.dpfecha); public void guardar(view v) { validarinputs(tlyingresar); if (error == 0) { showdialog(alertprogress); new IngresarTarjeta().execute(txtTarjeta.getText().toString(), txtcodigo.gettext().tostring(), tarjetas[spntarjetas.getselecteditemposition()], Integer.valueOf(images[spnTarjetas.getSelectedItemPosition()]).toString()); error = 0; public void guardartarjeta() { ContentValues vals = new ContentValues(); vals.put("tarjeta", txttarjeta.gettext().tostring()); vals.put("tipo", tarjetas[spntarjetas.getselecteditemposition()]); vals.put("codigo", txtcodigo.gettext().tostring()); vals.put("imagen", images[spntarjetas.getselecteditemposition()]); GregorianCalendar d = new GregorianCalendar(dpFecha.getYear(), dpfecha.getmonth() - 1, dpfecha.getdayofmonth()); System.out.println("Fecha: " + d.tostring()); vals.put("fecha", d.gettimeinmillis()/1000); //System.out.println("Entra: " + d.gettime()); db.insert(table_name, protected Dialog oncreatedialog(int id) { String title = "", msg = ""; switch (id) { case alertexito: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_exito).tostring(); return new AlertDialog.Builder(Ingresar.this).setTitle(title).setMessage(msg).setPositiveButton(getText(R.string.lbl_aceptar).toString(), new DialogInterface.OnClickListener() public void onclick(dialoginterface dialog, int which) { // TODO Auto-generated method stub finish(); ).create(); case alerterror: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_error).tostring(); break; 30
31 dialog, method stub case alertinternet: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_internet).tostring(); break; case alertprogress: progressdialog = new ProgressDialog(Ingresar.this); progressdialog.settitle(gettext(r.string.app_name).tostring()); progressdialog.setmessage(gettext(r.string.lbl_cargando).tostring()); return progressdialog; return new AlertDialog.Builder(Ingresar.this).setTitle(title).setMessage(msg).setPositiveButton(getText(R.string.lbl_aceptar).toString(), new DialogInterface.OnClickListener() public void onclick(dialoginterface ).create(); int which) { // TODO Auto-generated private void validarinputs(viewgroup group) { for (int i = 0, count = group.getchildcount(); i < count; ++i) { View view = group.getchildat(i); if (view instanceof EditText) { EditText e = ((EditText) view); if (e.gettext().tostring().length() == 0) { error++; e.seterror(gettext(r.string.input_error)); if (view instanceof ViewGroup && (((ViewGroup) view).getchildcount() > 0)) validarinputs((viewgroup) view); class IngresarTarjeta extends AsyncTask<String, String, String> { protected String doinbackground(string... params) { List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(); namevaluepairs.add(new BasicNameValuePair("accion", "IT")); namevaluepairs.add(new BasicNameValuePair("tarjeta", params[0])); namevaluepairs.add(new BasicNameValuePair("codigo", params[1])); namevaluepairs.add(new BasicNameValuePair("tipo", params[2])); namevaluepairs.add(new BasicNameValuePair("imagen", params[3])); namevaluepairs.add(new BasicNameValuePair("fecha_creacion", 31
32 Integer.valueOf(dpFecha.getYear()).toString() + "-" + Integer.valueOf(dpFecha.getMonth()).toString() + "-" + Integer.valueOf(dpFecha.getDayOfMonth()).toString())); if (http.validarconexion(getapplicationcontext())) { return http.accederwebservice(parametros.geturlservidor() + "/modulos/peticiones.php", namevaluepairs, 2); else { return "NOINTERNET"; protected void onpostexecute(string result) { System.out.println("Rpta: " + result); progressdialog.dismiss();// ocultamos progess dialog. if (result.equals("nointernet")) { showdialog(alertinternet); else if (result.equals("ok")) { guardartarjeta(); showdialog(alertexito); else { showdialog(alerterror); public void ondestroy(){ super.ondestroy(); db.close(); CLASE LECTURA.JAVA package com.android.tesis; import android.app.activity; import android.content.intent; import android.os.bundle; import android.widget.textview; import com.android.tesis.r; public class Lectura extends Activity { TextView public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.lectura); txtmensaje = (TextView)findViewById(R.id.txtMensaje); 32
33 Intent i = getintent(); if(i.hasextra("mensaje")){ txtmensaje.settext("se recibe: " + i.getstringextra("mensaje")); CLASE LOGIN.JAVA Maneja la pantalla principal de la aplicación, que registra el usuario y contraseña que contendrá la información de la tarjeta de crédito. package com.android.tesis; import java.util.arraylist; import java.util.list; import org.apache.http.namevaluepair; import org.apache.http.message.basicnamevaluepair; import android.app.activity; import android.app.alertdialog; import android.app.dialog; import android.app.progressdialog; import android.content.dialoginterface; import android.content.intent; import android.os.asynctask; import android.os.bundle; import android.util.log; import android.view.view; import android.view.viewgroup; import android.widget.edittext; import android.widget.tablelayout; import android.widget.toast; import com.android.library.funciones; import com.android.library.http; import com.android.library.parametros; public class Login extends Activity { private ProgressDialog progressdialog; private Parametros parametros; private Http http; private int error = 0; private static final int alertexito = 1, alertprogress = 2, alerterror = 3, alertinternet = 4; private TableLayout tlylogin; private EditText txtusuario, public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); parametros = new Parametros(getApplicationContext()); http = new Http(); 33
34 setcontentview(r.layout.login); tlylogin = (TableLayout) findviewbyid(r.id.tlylogin); txtusuario = (EditText) findviewbyid(r.id.txtusuario); txtcontrasenia = (EditText) findviewbyid(r.id.txtcontrasenia); public void guardar(view v) { validarinputs(tlylogin); if (error == 0) { showdialog(alertprogress); new LoguearSistema().execute( txtusuario.gettext().tostring(), txtcontrasenia.gettext().tostring()); error = 0; public void registrar(view v){ Intent iregistrar = new Intent(); iregistrar.setclass(getapplicationcontext(), Registro.class); startactivity(iregistrar); public void recordarcontrasenia(view v){ Intent iregistrar = new Intent(); iregistrar.setclass(getapplicationcontext(), Contrasenia.class); protected Dialog oncreatedialog(int id) { String title = "", msg = ""; switch (id) { case alertexito: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_exito).tostring(); break; case alerterror: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_error).tostring(); break; case alertinternet: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_internet).tostring(); break; case alertprogress: progressdialog = new ProgressDialog(Login.this); progressdialog.settitle(gettext(r.string.app_name).tostring()); progressdialog.setmessage(gettext(r.string.lbl_cargando).tostring()); return progressdialog; return new AlertDialog.Builder(Login.this) 34
35 .settitle(title).setmessage(msg).setpositivebutton( gettext(r.string.lbl_aceptar).tostring(), new DialogInterface.OnClickListener() public void onclick(dialoginterface dialog, int which) { // TODO Auto-generated method stub ).create(); private void validarinputs(viewgroup group) { for (int i = 0, count = group.getchildcount(); i < count; ++i) { View view = group.getchildat(i); if (view instanceof EditText) { EditText e = ((EditText) view); if (e.gettext().tostring().length() == 0) { error++; e.seterror(gettext(r.string.input_error)); if (view instanceof ViewGroup && (((ViewGroup) view).getchildcount() > 0)) validarinputs((viewgroup) view); class LoguearSistema extends AsyncTask<String, String, String> { protected String doinbackground(string... params) { List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(); namevaluepairs.add(new BasicNameValuePair("accion", "LU")); namevaluepairs.add(new BasicNameValuePair("usuario", params[0])); namevaluepairs.add(new BasicNameValuePair("contrasenia", Funciones.md5(params[1]))); Log.e("Respuesta: ", Funciones.md5(params[1]) + " - " + params[1]); if(http.validarconexion(getapplicationcontext())){ return http.accederwebservice(parametros.geturlservidor() + "/modulos/peticiones.php", namevaluepairs, 2); else{ return "NOINTERNET"; protected void onpostexecute(string result) { Log.e("Respuesta: ", result); 35
36 progressdialog.dismiss();// ocultamos progess dialog. if(result.equals("nointernet")){ showdialog(alertinternet); else if (result.equals("ok")) { parametros.setusuario(txtusuario.gettext().tostring()); parametros.setcontrasenia(txtcontrasenia.gettext().tostring()); //showdialog(alertexito); Intent i = new Intent(getApplicationContext(),GaleriaTarjeta.class); startactivity(i); else { showdialog(alerterror); CLASE MAIN.JAVA Maneja la actividad principal que se ejecuta en el proyecto. package com.android.tesis; import android.app.activity; import android.content.intent; import android.os.bundle; import com.android.library.parametros; public class Main extends Activity { private Parametros public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); parametros = new Parametros(getApplicationContext()); if(parametros.getusuario().equals("")) { Intent i = new Intent(); i.setclass(this, Login.class); startactivity(i); else{ Intent i = new Intent(); i.setclass(this, GaleriaTarjeta.class); startactivity(i); finish(); 36
37 CLASE REGISTRO.JAVA Permite registrar la informacion del usuario, que manejará el teléfono, los datos que contendrá son: nombre de usuario, contraseña, cédula, fecha de creación. package com.android.tesis; import java.util.arraylist; import java.util.list; import org.apache.http.namevaluepair; import org.apache.http.message.basicnamevaluepair; import android.app.activity; import android.app.alertdialog; import android.app.dialog; import android.app.progressdialog; import android.content.dialoginterface; import android.content.intent; import android.os.asynctask; import android.os.bundle; import android.view.view; import android.view.viewgroup; import android.widget.edittext; import android.widget.tablelayout; import com.android.library.funciones; import com.android.library.http; import com.android.library.parametros; public class Registro extends Activity { private ProgressDialog progressdialog; private Parametros parametros; private Http http; private int error = 0; private static final int alertexito = 1, alertprogress = 2, alerterror = 3, alertinternet = 4; private TableLayout tlylogin; private EditText txtnombre, txtcedula, txtusuario, txtcontrasenia, public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); parametros = new Parametros(getApplicationContext()); http = new Http(); setcontentview(r.layout.register); tlylogin = (TableLayout) findviewbyid(r.id.tlylogin); txtnombre = (EditText) findviewbyid(r.id.txtnombre); txtcedula = (EditText) findviewbyid(r.id.txtcedula); txt = (EditText) findviewbyid(r.id.txt ); txtusuario = (EditText) findviewbyid(r.id.txtusuario); txtcontrasenia = (EditText) findviewbyid(r.id.txtcontrasenia); 37
38 public void guardar(view v) { validarinputs(tlylogin); if (error == 0) { showdialog(alertprogress); new RegistrarUsuario().execute(txtNombre.getText().toString(),txtCedula.getText().toString(),txt .get Text().toString(), txtusuario.gettext().tostring(), txtcontrasenia.gettext().tostring()); error = protected Dialog oncreatedialog(int id) { String title = "", msg = ""; switch (id) { case alertexito: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_exito).tostring(); break; case alerterror: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_error).tostring(); break; case alertinternet: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_internet).tostring(); break; case alertprogress: progressdialog = new ProgressDialog(Registro.this); progressdialog.settitle(gettext(r.string.app_name).tostring()); progressdialog.setmessage(gettext(r.string.lbl_cargando).tostring()); return progressdialog; return new AlertDialog.Builder(Registro.this).setTitle(title).setMessage(msg).setPositiveButton( gettext(r.string.lbl_aceptar).tostring(), new DialogInterface.OnClickListener() public void onclick(dialoginterface dialog, int which) { // TODO Auto-generated method stub ).create(); private void validarinputs(viewgroup group) { for (int i = 0, count = group.getchildcount(); i < count; ++i) { 38
39 View view = group.getchildat(i); if (view instanceof EditText) { EditText e = ((EditText) view); if (e.gettext().tostring().length() == 0) { error++; e.seterror(gettext(r.string.input_error)); if (view instanceof ViewGroup && (((ViewGroup) view).getchildcount() > 0)) validarinputs((viewgroup) view); class RegistrarUsuario extends AsyncTask<String, String, String> { protected String doinbackground(string... params) { List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(); namevaluepairs.add(new BasicNameValuePair("accion", "RU")); namevaluepairs.add(new BasicNameValuePair("nombre", params[0])); namevaluepairs.add(new BasicNameValuePair("cedula", params[1])); namevaluepairs.add(new BasicNameValuePair(" ", params[2])); namevaluepairs.add(new BasicNameValuePair("usuario", params[3])); namevaluepairs.add(new BasicNameValuePair("contrasenia", Funciones.md5(params[4]))); if(http.validarconexion(getapplicationcontext())){ return http.accederwebservice(parametros.geturlservidor() + "/modulos/peticiones.php", namevaluepairs, 2); else{ return "NOINTERNET"; protected void onpostexecute(string result) { progressdialog.dismiss();// ocultamos progess dialog. if(result.equals("nointernet")){ showdialog(alertinternet); else if (result.equals("ok")) { parametros.setnombre(txtnombre.gettext().tostring()); parametros.setusuario(txtusuario.gettext().tostring()); parametros.setcontrasenia(txtcontrasenia.gettext().tostring()); //showdialog(alertexito); Intent i = new Intent(getApplicationContext(),GaleriaTarjeta.class); startactivity(i); else { showdialog(alerterror); 39
40 CLASE TARJETA.JAVA package com.android.tesis; import java.util.arraylist; import java.util.list; import org.apache.http.namevaluepair; import org.apache.http.message.basicnamevaluepair; import org.json.jsonarray; import org.json.jsonexception; import org.json.jsonobject; import android.app.activity; import android.app.alertdialog; import android.app.dialog; import android.app.progressdialog; import android.content.dialoginterface; import android.content.intent; import android.os.asynctask; import android.os.bundle; import android.widget.edittext; import com.android.library.http; import com.android.library.parametros; public class Tarjeta extends Activity { private String numtarjeta=""; private ProgressDialog progressdialog; private Parametros parametros; private Http http; private EditText txttarjeta, txtnombre, txtfechatope, txtsaldoinicial, txtminimopagar, txtcupoasignado, txtcupoutilizado, txtcupodisponible; private static final int alertexito = 1, alertprogress = 2, alerterror = 3, alertinternet = public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); parametros = new Parametros(getApplicationContext()); http = new Http(); setcontentview(r.layout.tarjeta); txttarjeta = (EditText)findViewById(R.id.txtTarjeta); txtnombre = (EditText)findViewById(R.id.txtNombre); txtfechatope = (EditText)findViewById(R.id.txtFechaTope); txtsaldoinicial = (EditText)findViewById(R.id.txtSaldoInicial); txtminimopagar = (EditText)findViewById(R.id.txtMinimoPagar); txtcupoasignado = (EditText)findViewById(R.id.txtCupoAsignado); txtcupoutilizado = (EditText)findViewById(R.id.txtCupoUtilizado); txtcupodisponible = (EditText)findViewById(R.id.txtCupoDisponible); Intent i = getintent(); if(i.hasextra("numero_tarjeta")){ 40
41 numtarjeta = i.getstringextra("numero_tarjeta"); new ConsultarTarjeta().execute(); class ConsultarTarjeta extends AsyncTask<Void, String, String> { protected String doinbackground(void... params) { List<NameValuePair> namevaluepairs = new ArrayList<NameValuePair>(); namevaluepairs.add(new BasicNameValuePair("accion", "CT")); namevaluepairs.add(new BasicNameValuePair("numero_tarjeta", numtarjeta)); if (http.validarconexion(getapplicationcontext())) { return http.accederwebservice(parametros.geturlservidor() + "/modulos/peticiones.php", namevaluepairs, 2); else { return "NOINTERNET"; protected void onpostexecute(string result) { System.out.println("Rpta: " + result); //progressdialog.dismiss();// ocultamos progess dialog. if (result.equals("nointernet")) { showdialog(alertinternet); else if (!result.equals("[]")) { try { JSONObject jsonroot = new JSONObject(result); JSONArray jsonarray = jsonroot.getjsonarray("data"); if (jsonarray.length() > 0) { JSONObject jsonobj = jsonarray.getjsonobject(0); txttarjeta.settext(jsonobj.getstring("numero_tarjeta")); txtnombre.settext(jsonobj.getstring("nombre")); txtfechatope.settext(jsonobj.getstring("fecha_tope_pago")); //txtsaldoinicial.settext(jsonobj.getstring("")) txtminimopagar.settext(jsonobj.getstring("minimo_pagar")); txtcupoasignado.settext(jsonobj.getstring("cupo_asignado")); //txtcupoutilizado.settext(jsonobj.getstring("cupo_utilizado")); txtcupodisponible.settext(jsonobj.getstring("cupo_disponible")); catch (JSONException e) { // TODO Auto-generated catch block protected Dialog oncreatedialog(int id) { String title = "", msg = ""; switch (id) { 41
42 dialog, method stub case alertexito: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_exito).tostring(); break; case alerterror: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_error).tostring(); break; case alertinternet: title = gettext(r.string.lbl_informacion).tostring(); msg = gettext(r.string.lbl_internet).tostring(); break; case alertprogress: progressdialog = new ProgressDialog(Tarjeta.this); progressdialog.settitle(gettext(r.string.app_name).tostring()); progressdialog.setmessage(gettext(r.string.lbl_cargando).tostring()); return progressdialog; return new AlertDialog.Builder(Tarjeta.this).setTitle(title).setMessage(msg).setPositiveButton(getText(R.string.lbl_aceptar).toString(), new DialogInterface.OnClickListener() public void onclick(dialoginterface ).create(); int which) { // TODO Auto-generated ARCHIVOS XML ANDROID MANIFEST.XML <manifest xmlns:android=" package="com.android.tesis" android:versioncode="1" android:versionname="1.0" > <uses-sdk android:minsdkversion="14" android:targetsdkversion="14" /> <uses-permission android:name="android.permission.access_network_state"/> 42
43 <uses-permission android:name="android.permission.nfc" /> <uses-feature android:name="android.hardware.nfc" /> <application > <activity android:name=".main" > <intent-filter> <action android:name="android.intent.action.main" /> <category android:name="android.intent.category.launcher" /> </intent-filter> </activity> <activity android:name=".login"></activity> <activity android:name=".contrasenia"></activity> <activity android:name=".registro"></activity> <activity android:name=".galeriatarjeta"> <intent-filter> <action android:name="android.nfc.action.ndef_discovered" /> <category android:name="android.intent.category.default" /> <data android:mimetype="application/com.android.tesis" /> </intent-filter> </activity> <activity android:name=".actividad_acerca"></activity> <activity android:name="ingresar"></activity> <activity android:name="editar"></activity> <activity android:name="tarjeta"></activity> <activity android:name=".lectura"></activity> <activity android:name=".hiscreen"> </activity> </application> <uses-permission android:name="android.permission.internet"/> <uses-permission android:name="android.permission.vibrate"/> </manifest> ACERCA.XML <RelativeLayout xmlns:android=" xmlns:tools=" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_alignparenttop="true" android:layout_margintop="153dp" android:text="sistema de creacion de Tarjeta de Credito" android:textappearance="?android:attr/textappearancelarge" /> </RelativeLayout> 43
44 CONTRASENIA.XML <ScrollView xmlns:android=" > <TableLayout > <TableRow> <TextView android:layout_span="2" /> </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center" > <Button android:onclick="enviar" > </Button> </LinearLayout> </TableRow> </TableLayout> </ScrollView> EDITAR.XML <ScrollView xmlns:android=" > <TableLayout > 44
45 <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <TextView /> <Spinner android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center_vertical" > <TextView /> <DatePicker android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center" > <Button 45
46 android:onclick="buscar" > </Button> <Button android:onclick="guardar" > </Button> </LinearLayout> </TableRow> </TableLayout> </ScrollView> GALERIA.XML <ScrollView xmlns:android=" > <TableLayout > <TableRow> <TextView android:layout_span="2" /> </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center" > <Button android:onclick="enviar" > </Button> </LinearLayout> </TableRow> </TableLayout> </ScrollView> 46
47 INGRESAR.XML <ScrollView xmlns:android=" > <TableLayout > <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <TextView /> <Spinner android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center_vertical" > <TextView /> 47
48 <DatePicker android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center" > <Button android:onclick="guardar" > </Button> </LinearLayout> </TableRow> </TableLayout> </ScrollView> LOGIN.XML <ScrollView xmlns:android=" > <TableLayout > <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text" android:password="true" /> </TableRow> <TableRow> 48
49 <LinearLayout android:layout_span="2" android:gravity="center" > <Button android:onclick="guardar" > </Button> </LinearLayout> </TableRow> <TableRow> <LinearLayout android:layout_width="fill_parent" <Button android:layout_weight="1" android:onclick="registrar" > </Button> <Button android:layout_weight="1" android:onclick="recordarcontrasenia" > </Button> </LinearLayout> </TableRow> </TableLayout> </ScrollView> REGISTER.XML <ScrollView xmlns:android=" > <TableLayout > <TableRow> <TextView /> 49
50 <EditText android:inputtype="text" /> </TableRow> <TableRow> <TextView /> <EditText android:inputtype="number" /> </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text address" /> </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text" /> </TableRow> <TableRow> <TextView /> <EditText android:inputtype="text" android:password="true" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center" > <Button android:onclick="guardar" > </Button> </LinearLayout> 50
51 </TableRow> </TableLayout> </ScrollView> TARJETA.XML <ScrollView xmlns:android=" > <TableLayout > <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center_vertical" > </LinearLayout> </TableRow> <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> <TableRow> 51
52 <LinearLayout android:layout_span="2" android:gravity="center_vertical" > </LinearLayout> </TableRow> <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center_vertical" > </LinearLayout> </TableRow> <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center_vertical" > </LinearLayout> </TableRow> <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout 52
53 android:layout_span="2" android:gravity="center_vertical" > </LinearLayout> </TableRow> <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> <TableRow> <LinearLayout android:layout_span="2" android:gravity="center_vertical" > </LinearLayout> </TableRow> <TableRow> <TextView /> <EditText android:enabled="false" android:inputtype="text" /> </TableRow> </TableLayout> </ScrollView> CODIGO PHP CONFIGURACIONE.PHP <?php extract($_request); $hostname = "localhost"; $databasename = "pagosnfc"; $username = "root"; $password = "";?> 53
54 LISTADO_TARJETA.PHP <?php /* * To change this template, choose Tools Templates * and open the template in the editor. */ require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/tarjeta.class.php'); $json_tarjetas = tarjeta::obtener_listado_json(); //echo $json_entidades;?> <link href="../css/estilos.css" rel="stylesheet" type="text/css" /> <link href="../css/tableorderer_1.css" rel="stylesheet" type="text/css"> <link href="../css/menu.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="../lib/prototype.js"></script> <script type="text/javascript" src="../lib/tableorderer/js/table_orderer.js"></script> <!--<script type="text/javascript" src="../lib/tableorderer/js/table_orderer-min.js"></script> --> <body> <center> <ul class="purecssmenu purecssmenum"> <li class="purecssmenui"><a class="purecssmenui" href="listadousuarios.php">usuarios</a></li> <li class="purecssmenui"><a class="purecssmenui" href="listadotarjetas.php">tarjetas</a></li> <li class="purecssmenui"><a class="purecssmenui" href="listadotarjetasentidades.php">entidades</a></li> </ul> </center> <br /><br /><br /><br /> <table width="550" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> 54
55 <th><img src="../images_tm/header_left.jpg" alt="" /></th> <td class="header"><strong><center>listado de Tarjetas</center></strong></td> <th class="header"> </th> <th><img src="../images_tm/header_right.jpg" alt="" /></th> </tr> </table> </td> </tr> <tr> <td><div id="container"></div></td> </tr> </table> <script type="text/javascript" language="javascript"> new TableOrderer('container',{data : eval(<?php echo $json_tarjetas?>),search : 'top',paginate : 'bottom', pagecount:20,unsortedcolumn : ['OPC']); </script> </body> </html> PETICIONES.PHP <?php require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); extract($_request); /* * To change this template, choose Tools Templates * and open the template in the editor. */ /** * LU -> Loguear Usuario */ if ($accion == "LU") { require_once('../clases/usuario.class.php'); 55
56 $objusuario = new Usuario($id, $nombre, $cedula, trim($usuario), $contrasenia, $estado, $fecha_creacion, $ ); if ($objusuario->consultarusuario() == "1") { echo "ok"; else { echo "Error - Usuario/Contraseña invalidos"; /** * LU -> Registrar Usuario */ if ($accion == "RU") { require_once('../clases/usuario.class.php'); $objusuario = new Usuario($id, $nombre, $cedula, trim($usuario), $contrasenia, $estado, $fecha_creacion, $ ); if ($objusuario->ingresarusuario() == "1") { echo "ok"; else { echo "error"; /** * LU -> Recordar Contraseña */ if ($accion == "RC") { require_once('../clases/usuario.class.php'); require_once('../libs/funciones.php'); require_once('../libs/phpmailer/class.phpmailer.php'); define('guser', '[email protected]'); // Gmail username define('gpwd', 'rr4mirez123'); // Gmail password $objusuario = new Usuario($id, $nombre, $cedula, trim($usuario), $contrasenia, $estado, $fecha_creacion, $ ); $objusuario->obtenerusuario(); if ($objusuario->get_ ()!= "" && $objusuario->get_estado() == "1") { 56
57 //$msg = 'Para recuperar de clic <a href=" $usuario. '">Aqui</a>'; $msg = 'Para recuperar su contraseña visiste la siguiente dirección: $usuario; smtpmailer($objusuario->get_ (), '[email protected]', 'Administracion', 'Recuperar contraseña ', $msg); echo "ok"; else { echo "error"; /** * IT -> Ingresar Tarjeta */ if ($accion == "IT") { require_once('../clases/usuario.class.php'); require_once('../clases/tarjeta.class.php'); $objusuario = new Usuario("", "", "", $usuario, "", "", "", ""); if ($objusuario->consultarporusuario()) { $objtarjeta = new Tarjeta($id, $tarjeta, $codigo, $tipo, $imagen, date("y-m-d h:i:s"), $objusuario->get_id()); if ($objtarjeta->ingresartarjeta() == "1") { echo "ok"; else { echo "error"; else { echo "error: usuario no registrado en el sistema"; /* * Consultar Tarjeta */ if ($accion == "CT") { 57
58 require_once('../clases/entidad.class.php'); $objentidad = new Entidad(); $objentidad->set_numero_tarjeta($numero_tarjeta); $data['data'] = $objentidad->obtener_entidad(); echo json_encode($data); /* * Actualizar Tarjeta */ if ($accion == "AT") { require_once('../clases/tarjeta.class.php'); $objtarjeta = new Tarjeta($id, $tarjeta, $codigo, $tipo, $imagen, $fecha_creacion, ""); if ($objtarjeta->actualizartarjeta() == "1") { echo "ok"; else { echo "No se realizó ningún cambio."; if ($accion == "MC") { require_once('../clases/usuario.class.php'); $objusuario = new Usuario("", "", "", trim($usuario), $contrasenia, "", "", ""); if ($objusuario->modificarcontrasenia() == "1") { header("location:recuperarcontraseniaexito.php"); else { echo "error"; ; if ($accion == "RT") { require_once('../clases/entidad.class.php'); $objentidad = new Entidad(); $objentidad->set_numero_tarjeta($numero_tarjeta); $data = $objentidad->obtener_entidad2(); $arrfecha = explode("-", $data[fecha_vencimiento]); if ($data!= "") { 58
59 if (date("y-m-d", strtotime($data[fecha_vencimiento])) < date('y-m-d')) { echo "Su tarjeta esta vencida."; else { if ($data['cupo_disponible'] < $monto) { echo utf8_encode("no tiene cupo para realizar el proceso."); else { try { $cupo_disponible = $data['cupo_disponible'] - $monto; $objentidad->set_cupo_disponible($cupo_disponible); $resp = $objentidad->actualizar_cupo(); if ($resp == 1) { require_once('../clases/usuario.class.php'); require_once('../libs/funciones.php'); require_once('../libs/phpmailer/class.phpmailer.php'); define('guser', '[email protected]'); // Gmail username define('gpwd', 'rr4mirez123'); // Gmail password $objusuario = new Usuario($id, $nombre, $cedula, trim($usuario), $contrasenia, $estado, $fecha_creacion, $ ); $objusuario->obtenerusuario(); if ($objusuario->get_ ()!= "" && $objusuario->get_estado() == "1") { //$msg = 'Para recuperar de clic <a href=" $usuario. '">Aqui</a>'; $msg = "Le indicamos que acaba de realizar una transaccion por $ $monto, revisar su estado de cuenta \n\nhora de Transaccion: ".date("y-m-d h:i:s"); smtpmailer($objusuario->get_ (), '[email protected]', 'Administracion', 'Transaccion PagosNFC', $msg); //echo "ok"; else { //echo "error"; echo "Ok"; else { echo "Error en la operación"; 59
60 ?> catch (Exception $e) { echo "Error en la operación"; INDEX.PHP <?php /* * To change this template, choose Tools Templates * and open the template in the editor. */ header("location: modulos/listadotarjetas.php");?> LISTADOTARJETAENTIDADES.PHP <?php /* * To change this template, choose Tools Templates * and open the template in the editor. */ require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/entidad.class.php'); $json_entidades = entidad::obtener_listado_json(); //echo $json_entidades;?> <link href="../css/estilos.css" rel="stylesheet" type="text/css" /> <link href="../css/tableorderer_1.css" rel="stylesheet" type="text/css"> 60
61 <link href="../css/menu.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="../lib/prototype.js"></script> <script type="text/javascript" src="../lib/tableorderer/js/table_orderer.js"></script> <!--<script type="text/javascript" src="../lib/tableorderer/js/table_orderer-min.js"></script> --> <body> <center> <ul class="purecssmenu purecssmenum"> <li class="purecssmenui"><a class="purecssmenui" href="listadousuarios.php">usuarios</a></li> <li class="purecssmenui"><a class="purecssmenui" href="listadotarjetas.php">tarjetas</a></li> <li class="purecssmenui"><a class="purecssmenui" href="listadotarjetasentidades.php">entidades</a></li> </ul> </center> <br /><br /><br /><br /> <table width="550" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <th><img src="../images_tm/header_left.jpg" alt="" /></th> <td class="header"><strong><center>listado de Tarjetas Entidad</center></strong></td> <th class="header"> </th> <th><img src="../images_tm/header_right.jpg" alt="" /></th> </tr> </table> </td> </tr> <tr> <td><div id="container"></div></td> </tr> </table> <script type="text/javascript" language="javascript"> 61
62 new TableOrderer('container',{data : eval(<?php echo $json_entidades?>),search : 'top',paginate : 'bottom', pagecount:20,unsortedcolumn : ['OPC']); </script> </body> </html> LISTADOUSUARIO.PHP <?php /* * To change this template, choose Tools Templates * and open the template in the editor. */ require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/usuario.class.php'); $json_usuarios = usuario::obtener_listado_json(); //echo $json_entidades;?> <link href="../css/estilos.css" rel="stylesheet" type="text/css" /> <link href="../css/tableorderer_1.css" rel="stylesheet" type="text/css"> <link href="../css/menu.css" rel="stylesheet" type="text/css"> <script type="text/javascript" src="../lib/prototype.js"></script> <script type="text/javascript" src="../lib/tableorderer/js/table_orderer.js"></script> <!--<script type="text/javascript" src="../lib/tableorderer/js/table_orderer-min.js"></script> --> <body> <center> <ul class="purecssmenu purecssmenum"> <li class="purecssmenui"><a class="purecssmenui" href="listadousuarios.php">usuarios</a></li> <li class="purecssmenui"><a class="purecssmenui" href="listadotarjetas.php">tarjetas</a></li> <li class="purecssmenui"><a class="purecssmenui" href="listadotarjetasentidades.php">entidades</a></li> </ul> 62
63 </center> <br /><br /><br /><br /> <table width="550" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td> <table width="100%" border="0" cellpadding="0" cellspacing="0"> <tr> <th><img src="../images_tm/header_left.jpg" alt="" /></th> <td class="header"><strong><center>listado de Usuarios</center></strong></td> <th class="header"> </th> <th><img src="../images_tm/header_right.jpg" alt="" /></th> </tr> </table> </td> </tr> <tr> <td><div id="container"></div></td> </tr> </table> <script type="text/javascript" language="javascript"> new TableOrderer('container',{data : eval(<?php echo $json_usuarios?>),search : 'top',paginate : 'bottom', pagecount:20,unsortedcolumn : ['OPC']); </script> </body> </html> USUARIOSISTEMA.PHP <?php require_once('permisos.php');?> <html> <link href="../css/estilos.css" rel="stylesheet" type="text/css" /> <link href="../css/menu.css" rel="stylesheet" type="text/css"> 63
64 <link href="../css/validationengine.jquery.css" rel="stylesheet" type="text/css"> <link href="../css/redmond/jquery-ui custom.css" rel="stylesheet" type="text/css" /> <link href="../js/jtable/themes/lightcolor/blue/jtable.css" rel="stylesheet" type="text/css" /> <script src="../js/jquery min.js" type="text/javascript"></script> <script src="../js/jquery-ui custom.min.js" type="text/javascript"></script> <script src="../js/jtable/jquery.jtable.js" type="text/javascript"></script> <script type="text/javascript" src="../js/jquery.validationengine.js"></script> <script type="text/javascript" src="../js/jquery.validationengine-es.js"></script> </head> <body> <center> <ul class="purecssmenu purecssmenum"> <li class="purecssmenui"><a class="purecssmenui" href="usuarios_sistema.php">usuarios Sistema</a></li> <li class="purecssmenui"><a class="purecssmenui" href="usuarios.php">usuarios</a></li> <li class="purecssmenui"><a class="purecssmenui" href="tarjetas.php">tarjetas</a></li> <li class="purecssmenui"><a class="purecssmenui" href="entidades.php" align="center">entidades</a></li> <li class="purecssmenui"><a class="purecssmenui" href="recuperarcontrasenia.php?usuario=<?php echo $_SESSION['usuarioLogin'];?>&sistema=s" align="center">cambiar contraseña</a></li> <li class="purecssmenui"><a class="purecssmenui" href="../control.php?accion=2" align="center">salir</a></li> </ul> </center> <br /><br /><br /><br /> <div id="contenedorusuarios" style="width: 1000px;"></div> <script type="text/javascript"> $(document).ready(function () { //Prepare jtable $('#ContenedorUsuarios').jtable({ title: 'Listado de Usuarios del Sistema', paging: true, pagesize: 20, sorting: true, 64
65 defaultsorting: 'nombre ASC', actions: { listaction: 'peticionesusuariossistema.php?action=list', createaction: 'peticionesusuariossistema.php?action=create' // updateaction: 'peticionesusuariossistema.php?action=update', fields: { id: { key: true, create: false, edit: false, list: false, nombre: { title: 'Nombre', width: '25%', usuario: { title: 'usuario', width: '20%', contrasenia: { title: 'Contrase\xf1a', visibility: 'hidden', edit: false, fecha_creacion: { title: 'Fecha de Creaci\xf3n', width: '20%', type: 'date', create: false, edit: false ); 65
66 //Load person list from server $('#ContenedorUsuarios').jtable('load'); ); </script> </body> </html> USUARIO.PHP <?php /* * To change this template, choose Tools Templates * and open the template in the editor. */ class usuario { private $_id = ""; private $_nombre = ''; private $_cedula = ''; private $_usuario = ''; private $_contrasenia = ''; private $_estado = ''; private $_fecha_creacion = ''; private $_ = ''; public function construct($id, $nombre, $cedula, $usuario, $contrasenia, $estado, $fecha_creacion, $ ) { global $hostname, $databasename, $username, $password; $this->_id = $id; $this->_nombre = $nombre; $this->_cedula = $cedula; $this->_usuario = $usuario; $this->_contrasenia = $contrasenia; $this->_estado = $estado; $this->_fecha_creacion = $fecha_creacion; $this->_ = $ ; 66
67 $this->conexion = new Conexion($hostname, $databasename, $username, $password); public function obtener_listado_json() { global $hostname, $databasename, $username, $password, $lbldescripcion; $conexion = new Conexion($hostname, $databasename, $username, $password); $conexion->conectar(); $sql = "SELECT * FROM $databasename.usuarios"; $res = $conexion->ejecutarsql($sql, CLASS, METHOD, LINE ); $array_proc = array(); $idx = 0; while ($data = mysql_fetch_array($res)) { $array_proc[$idx]['codigo'] = $data['id']; $array_proc[$idx]['nombre'] = $data['nombre']; $array_proc[$idx]['cedula'] = $data['cedula']; $array_proc[$idx][' '] = $data[' ']; $array_proc[$idx]['usuario'] = $data['usuario']; $array_proc[$idx]['fecha Creación'] = $data['fecha_creacion']; $idx++; return json_encode($conexion->retornautf8($array_proc)); public function obtener_listado($jtsorting,$jtstartindex,$jtpagesize) { global $hostname, $databasename, $username, $password, $lbldescripcion; $conexion = new Conexion($hostname, $databasename, $username, $password); $conexion->conectar(); $sql = "SELECT * FROM $databasename.usuarios ORDER BY ". $jtsorting. " LIMIT ". $jtstartindex. ",". $jtpagesize; //echo $sql; $result = $conexion->ejecutarsql($sql, CLASS, METHOD, LINE ); $rows = array(); while ($row = mysql_fetch_array($result)) { 67
68 $rows[] = $row; return $rows; public function ingresarusuario() { global $databasename; $this->conexion->conectar(); $sql = "INSERT INTO $databasename.usuarios (nombre,cedula,usuario,contrasenia,estado,fecha_creacion, ) VALUES ('$this->_nombre','$this->_cedula','$this->_usuario','$this- >_contrasenia','1',date(now()),'$this->_ ')"; $this->conexion->ejecutarsql($sql, CLASS, METHOD, LINE ); if ($this->conexion->registrosafectados() > 0) { return "1"; else { return "0"; public function consultarusuario() { global $databasename; $this->conexion->conectar(); $sql = "SELECT * FROM $databasename.usuarios WHERE usuario='$this->_usuario' AND contrasenia = MD5('$this->_contrasenia') AND estado = '1'"; //echo $sql; EXIT; $this->conexion->ejecutarsql($sql, CLASS, METHOD, LINE ); if ($this->conexion->registrosafectados() > 0) { $data = $this->conexion->extraerdatos(); $this->_id = $data['id']; $this->_nombre = $data['nombre']; $this->_cedula = $data['cedula']; $this->_ = $data[' ']; $this->_usuario = $data['usuario']; $this->_contrasenia = $data['contrasenia']; 68
69 $this->_fecha_creacion = $data['fecha_creacion']; $this->_estado = $data['estado']; return "1"; else { return "0"; public function modificarcontrasenia(){ global $databasename; $this->conexion->conectar(); $sql = "UPDATE $databasename.usuarios SET contrasenia = md5('$this->_contrasenia') WHERE usuario = '$this->_usuario'"; //echo $sql; $this->conexion->ejecutarsql($sql, CLASS, METHOD, LINE ); if ($this->conexion->registrosafectados() > 0) { return "1"; else { return "0"; public function consultarporusuario() { global $databasename; $this->conexion->conectar(); $sql = "SELECT * FROM $databasename.usuarios WHERE usuario='$this->_usuario' AND estado = '1'"; //echo $sql; $this->conexion->ejecutarsql($sql, CLASS, METHOD, LINE ); if ($this->conexion->registrosafectados() > 0) { $data = $this->conexion->extraerdatos(); $this->_id = $data['id']; $this->_nombre = $data['nombre']; $this->_cedula = $data['cedula']; 69
70 $this->_ = $data[' ']; $this->_usuario = $data['usuario']; $this->_contrasenia = $data['contrasenia']; $this->_fecha_creacion = $data['fecha_creacion']; $this->_estado = $data['estado']; return "1"; else { return "0"; public function obtenerusuario() { global $databasename; $this->conexion->conectar(); $sql = "SELECT * FROM $databasename.usuarios WHERE usuario='$this->_usuario'"; $this->conexion->ejecutarsql($sql, CLASS, METHOD, LINE ); if ($this->conexion->registrosobtenidos() > 0) { $data = $this->conexion->extraerdatos(); $this->_id = $data['id']; $this->_nombre = $data['nombre']; $this->_cedula = $data['cedula']; $this->_ = $data[' ']; $this->_usuario = $data['usuario']; $this->_contrasenia = $data['contrasenia']; $this->_fecha_creacion = $data['fecha_creacion']; $this->_estado = $data['estado']; return true; else { return false; public function get_id() { return $this->_id; 70
71 public function set_id($_id) { $this->_id = $_id; public function get_nombre() { return $this->_nombre; public function set_nombre($_nombre) { $this->_nombre = $_nombre; public function get_cedula() { return $this->_cedula; public function set_cedula($_cedula) { $this->_cedula = $_cedula; public function get_usuario() { return $this->_usuario; public function set_usuario($_usuario) { $this->_usuario = $_usuario; public function get_contrasenia() { return $this->_contrasenia; public function set_contrasenia($_contrasenia) { $this->_contrasenia = $_contrasenia; 71
72 public function get_estado() { return $this->_estado; public function set_estado($_estado) { $this->_estado = $_estado; public function get_fecha_creacion() { return $this->_fecha_creacion; public function set_fecha_creacion($_fecha_creacion) { $this->_fecha_creacion = $_fecha_creacion; public function get_ () { return $this->_ ; public function set_ ($_ ) { $this->_ = $_ ;?> FUNCIONES.PHP <?php function smtpmailer($to, $from, $from_name, $subject, $body) { global $error; $mail = new PHPMailer(); // create a new object $mail->issmtp(); // enable SMTP 72
73 ?> $mail->smtpdebug = 0; // debugging: 1 = errors and messages, 2 = messages only $mail->smtpauth = true; // authentication enabled $mail->smtpsecure = 'ssl'; // secure transfer enabled REQUIRED for Gmail $mail->host = 'mail.ideasinteligentes.com.ec'; $mail->port = 465; $mail->username = GUSER; $mail->password = GPWD; $mail->setfrom($from, $from_name); $mail->subject = $subject; $mail->body = $body; $mail->addaddress($to); if(!$mail->send()) { $error = 'Mail error: '.$mail->errorinfo; return false; else { $error = 'Message sent!'; return true; CONTROL.PHP <?php require_once('modulos/configuraciones.php'); require_once('clases/conexion.class.php'); /* * To change this template, choose Tools Templates * and open the template in the editor. */ session_start(); if ($accion == "1") { require_once('clases/usuario_sistema.class.php'); 73
74 $nombre = ""; $objusuario = new Usuario_sistema($id, $nombre, trim($usuario), $contrasenia); if ($objusuario->consultarusuario() == "1") { session_register('usuariologin'); $_SESSION['usuarioLogin']=trim($usuario); header("location:modulos/home.php"); else { header("location:index.html"); if ($accion == "2") { session_destroy(); header("location:index.html"); exit;?> PERMISO.PHP <?php session_start(); if (isset($_session['usuariologin'])) { $usuariologin = $_SESSION['usuarioLogin']; else { header("location:../index.html"); exit();?> PETICIONES.PHP <?php require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); 74
75 /* * To change this template, choose Tools Templates * and open the template in the editor. */ * LU -> Loguear Usuario */ if ($accion == "LU") { require_once('../clases/usuario.class.php'); $objusuario = new Usuario($id, $nombre, $cedula, trim($usuario), $contrasenia, $estado, $fecha_creacion, $ ); if ($objusuario->consultarusuario() == "1") { echo "ok"; else { echo "Error - Usuario/Contrase a invalidos"; /** * LU -> Registrar Usuario */ if ($accion == "RU") { require_once('../clases/usuario.class.php'); $objusuario = new Usuario($id, $nombre, $cedula, trim($usuario), $contrasenia, $estado, $fecha_creacion, $ ); if ($objusuario->ingresarusuario() == "1") { echo "ok"; else { echo "error"; /** * LU -> Recordar Contraseña */ if ($accion == "RC") { require_once('../clases/usuario.class.php'); require_once('../libs/funciones.php'); 75
76 require_once('../libs/phpmailer/class.phpmailer.php'); define('guser', // Gmail username define('gpwd', 'rr4mirez123'); // Gmail password $objusuario = new Usuario($id, $nombre, $cedula, trim($usuario), $contrasenia, $estado, $fecha_creacion, $ ); $objusuario->obtenerusuario(); if ($objusuario->get_ ()!= "" && $objusuario->get_estado() == "1") { //$msg = 'Para recuperar de clic <a href=" $usuario. '">Aqui</a>'; $msg = 'Para recuperar su contraseña visiste la siguiente dirección: $usuario; smtpmailer($objusuario->get_ (), '[email protected]', 'Administracion', 'Recuperar contraseña ', $msg); echo "ok"; else { echo "error"; /** * IT -> Ingresar Tarjeta */ if ($accion == "IT") { require_once('../clases/usuario.class.php'); require_once('../clases/tarjeta.class.php'); $objusuario = new Usuario("", "", "", $usuario, "", "", "", ""); if ($objusuario->consultarporusuario()) { $objtarjeta = new Tarjeta($id, $tarjeta, $codigo, $tipo, $imagen, date("y-m-d h:i:s"), $objusuario->get_id()); if ($objtarjeta->ingresartarjeta() == "1") { echo "ok"; else { echo "error"; else { 76
77 echo "error: usuario no registrado en el sistema"; /* * Consultar Tarjeta */ if ($accion == "CT") { require_once('../clases/entidad.class.php'); $objentidad = new Entidad(); $objentidad->set_numero_tarjeta($numero_tarjeta); echo $objentidad->obtener_entidad(); /* * Actualizar Tarjeta */ if ($accion == "AT") { require_once('../clases/tarjeta.class.php'); $objtarjeta = new Tarjeta($id, $tarjeta, $codigo, $tipo, $imagen, $fecha_creacion, ""); if ($objtarjeta->actualizartarjeta() == "1") { echo "ok"; else { echo "No se realizó ningún cambio."; if ($accion == "MC") { require_once('../clases/usuario.class.php'); $objusuario = new Usuario("", "", "", trim($usuario), $contrasenia, "", "", ""); if ($objusuario->modificarcontrasenia() == "1") { echo "ok"; else { echo "error";?> 77
78 PETICIONES ENTIDADES <?php require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/entidad.class.php'); $objentidad = new entidad($id, $numero_tarjeta, $fecha_vencimiento, $fecha_tope_pago, $codigo_verificacion, $cedula, $nombre, $fecha_creacion,$cupo_asignado,$cupo_disponible,$minimo_pagar ); try { //Getting records (listaction) if($action == "list") { $listado = $objentidad->obtener_listado($jtsorting,$jtstartindex, $jtpagesize); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; $jtableresult['records'] = $listado; $jtableresult['totalrecordcount'] = count($listado); print json_encode($jtableresult); //Creating a new record (createaction) else if($_get["action"] == "create") { $objentidad->ingresar_entidad(); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; $jtableresult['record'] = $objentidad->obtener_entidad2(); print json_encode($jtableresult); 78
79 //Updating a record (updateaction) else if($_get["action"] == "update") { $objentidad->actualizar_entidad(); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; print json_encode($jtableresult); /* //Deleting a record (deleteaction) else if($_get["action"] == "delete") { //Delete from database $result = mysql_query("delete FROM people WHERE PersonId = ". $_POST["PersonId"]. ";"); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; print json_encode($jtableresult); //Close database connection mysql_close($con);*/ catch(exception $ex) { //Return error message $jtableresult = array(); $jtableresult['result'] = "ERROR"; $jtableresult['message'] = $ex->getmessage(); print json_encode($jtableresult); 79
80 ?> PETICIONES TARJETAS.PHP <?php require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/tarjeta.class.php'); $objtarjeta = new Tarjeta($id, $tarjeta, $codigo, $tipo, $imagen, $fecha_creacion,$id_usuario); try { //Getting records (listaction) if($action == "list") { $listado = $objtarjeta->obtener_listado($jtsorting,$jtstartindex, $jtpagesize); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; $jtableresult['records'] = $listado; $jtableresult['totalrecordcount'] = count($listado); print json_encode($jtableresult); /* //Creating a new record (createaction) else if($_get["action"] == "create") { //Insert record into database $result = mysql_query("insert INTO people(name, Age, RecordDate) VALUES('". $_POST["Name"]. "', ". $_POST["Age"]. ",now());"); //Get last inserted record (to return to jtable) $result = mysql_query("select * FROM people WHERE PersonId = LAST_INSERT_ID();"); $row = mysql_fetch_array($result); //Return result to jtable 80
81 $jtableresult = array(); $jtableresult['result'] = "OK"; $jtableresult['record'] = $row; print json_encode($jtableresult); //Updating a record (updateaction) else if($_get["action"] == "update") { //Update record in database $result = mysql_query("update people SET Name = '". $_POST["Name"]. "', Age = ". $_POST["Age"]. " WHERE PersonId = ". $_POST["PersonId"]. ";"); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; print json_encode($jtableresult); //Deleting a record (deleteaction) else if($_get["action"] == "delete") { //Delete from database $result = mysql_query("delete FROM people WHERE PersonId = ". $_POST["PersonId"]. ";"); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; print json_encode($jtableresult); //Close database connection mysql_close($con);*/ catch(exception $ex) { //Return error message $jtableresult = array(); $jtableresult['result'] = "ERROR"; 81
82 $jtableresult['message'] = $ex->getmessage(); print json_encode($jtableresult);?> PETICIONES USUARIOS.PHP <?php require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/usuario.class.php'); $objusuario = new usuario($id, $nombre, $cedula, $usuario, $contrasenia, $estado, $fecha_creacion, $ ); try { //Getting records (listaction) if($action == "list") { $listado = $objusuario->obtener_listado($jtsorting,$jtstartindex, $jtpagesize); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; $jtableresult['records'] = $listado; $jtableresult['totalrecordcount'] = count($listado); print json_encode($jtableresult); /* //Creating a new record (createaction) else if($_get["action"] == "create") { //Insert record into database $result = mysql_query("insert INTO people(name, Age, RecordDate) VALUES('". $_POST["Name"]. "', ". $_POST["Age"]. ",now());"); LAST_INSERT_ID();"); //Get last inserted record (to return to jtable) $result = mysql_query("select * FROM people WHERE PersonId = 82
83 $row = mysql_fetch_array($result); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; $jtableresult['record'] = $row; print json_encode($jtableresult); //Updating a record (updateaction) else if($_get["action"] == "update") { //Update record in database $result = mysql_query("update people SET Name = '". $_POST["Name"]. "', Age = ". $_POST["Age"]. " WHERE PersonId = ". $_POST["PersonId"]. ";"); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; print json_encode($jtableresult); //Deleting a record (deleteaction) else if($_get["action"] == "delete") { //Delete from database $result = mysql_query("delete FROM people WHERE PersonId = ". $_POST["PersonId"]. ";"); //Return result to jtable $jtableresult = array(); $jtableresult['result'] = "OK"; print json_encode($jtableresult); //Close database connection mysql_close($con);*/ catch(exception $ex) { 83
84 //Return error message $jtableresult = array(); $jtableresult['result'] = "ERROR"; $jtableresult['message'] = $ex->getmessage(); print json_encode($jtableresult);?> RECUPERAR CONTRASENIA.PHP <?php require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/usuario.class.php'); $objusuario = new Usuario("", "", "", trim($usuario), "", "", "", ""); $objusuario->consultarporusuario();?> <html lang="en"> <head> <title>pagos NFC</title> <link rel="stylesheet" type="text/css" href="../css/login.css" /> <script src="../js/modernizr.custom js"></script> <!--[if lte IE 7]><style>.main{display:none;.support-note.noteie{display:block;</style><![endif]--> <script type="text/javascript"> function validarenvio(){ if(document.getelementbyid("contrasenia").value!=document.getelementbyid("password").value){ alert("las contraseñas no coinciden"); else{ document.forms[0].action = "peticiones.php"; document.forms[0].submit(); </script> </head> <body> <div class="container"> 84
85 <section class="main"> <form class="form-1"> <p class="field"> <input type="text" value="<?php echo $objusuario->get_usuario();?>" placeholder="usuario" readonly="readonly"> <i class="icon-user icon-large"></i> </p> <p class="field"> <input type="password" id="contrasenia" name="contrasenia" placeholder="contraseña"> <i class="icon-lock icon-large"></i> </p> <p class="field"> <input type="password" id="password" name="password" placeholder="re- Contraseña"> <i class="icon-lock icon-large"></i> </p> <p class="submit"> <button type="button" name="button" onclick="validarenvio()"><i class="icon-arrowright icon-large"></i></button> </p> <input type="hidden" name="accion" value="mc"></input> <input type="hidden" name="usuario" value="<?php echo $objusuario->get_usuario();?>"></input> </form> </section> </div> </body> </html> RECUPERAR CONTRASENIA EXITO.PHP <?php require_once('configuraciones.php'); require_once('../clases/conexion.class.php'); require_once('../clases/usuario.class.php'); 85
86 $objusuario = new Usuario("", "", "", trim($usuario), "", "", "", ""); $objusuario->consultarporusuario();?> <html lang="en"> <head> <title>pagos NFC</title> <link rel="stylesheet" type="text/css" href="../css/login.css" /> <script src="../js/modernizr.custom js"></script> <!--[if lte IE 7]><style>.main{display:none;.support-note.noteie{display:block;</style><![endif]--> <script type="text/javascript"> function validarenvio(){ if(document.getelementbyid("contrasenia").value!=document.getelementbyid("password").value){ alert("las contraseñas no coinciden"); else{ document.forms[0].action = "peticiones.php"; document.forms[0].submit(); </script> </head> <body> <div class="container"> <center> <h1>le indicamos que su contraseña fue actualizada con éxito</h1> </center> </div> </body> </html> JQUERY.JTABLE jtable
87 * CORE jtable module * (function ($) { $.widget("hik.jtable", { options: { //Options actions: {, fields: {, animationsenabled: true, defaultdateformat: 'yy-mm-dd', dialogshoweffect: 'fade', dialoghideeffect: 'fade', showclosebutton: false, loadinganimationdelay: 500, ajaxsettings: { type: 'POST', datatype: 'json', //Events closerequested: function (event, data) {, formcreated: function (event, data) {, formsubmitting: function (event, data) {, formclosed: function (event, data) {, loadingrecords: function (event, data) {, recordsloaded: function (event, data) {, rowinserted: function (event, data) {, rowsremoved: function (event, data) {, //Localization messages: { servercommunicationerror: 'Ocurrio un error mientras se conectaba al servidor.', loadingmessage: 'cargando registros...', nodataavailable: 'No hay datos!', areyousure: 'Esta seguro?', save: 'Guardar', 87
88 , saving: 'Guardando', cancel: 'Cancelar', error: 'Error', close: 'Cerrar', cannotloadoptionsfor: 'No se pueden argar las opciones para el campo {0' _$maincontainer: null, //Reference to the main container of all elements that are created by this plug-in (jquery object) _$table: null, //Reference to the main <table> (jquery object) _$tablebody: null, //Reference to <body> in the table (jquery object) _$tablerows: null, //Array of all <tr> in the table (except "no data" row) (jquery object array) _$bottompanel: null, //Reference to the panel at the bottom of the table (jquery object) _$busydiv: null, //Reference to the div that is used to block UI while busy (jquery object) _$busymessagediv: null, //Reference to the div that is used to show some message when UI is blocked (jquery object) _$errordialogdiv: null, //Reference to the error dialog div (jquery object) _columnlist: null, //Name of all data columns in the table (select column and command columns are not included) (string array) _fieldlist: null, //Name of all fields of a record (defined in fields option) (string array) _keyfield: null, //Name of the key field of a record (that is defined as 'key: true' in the fields option) (string) _firstdatacolumnoffset: 0, //Start index of first record field in table columns (some columns can be placed before first data column, such as select checkbox column) (integer) _lastpostdata: null, //Last posted data on load method (object) _cache: null, //General purpose cache dictionary (object) _create: function () { //Initialization this._normalizefieldsoptions(); this._initializefields(); this._createfieldandcolumnlist(); //Creating DOM elements 88
89 this._createmaincontainer(); this._createtabletitle(); this._createtable(); this._createbottompanel(); this._createbusypanel(); this._createerrordialogdiv(); this._addnodatarow();, /* Normalizes some options for all fields (sets default values). _normalizefieldsoptions: function () { var self = this; $.each(self.options.fields, function (fieldname, props) { self._normalizefieldoptions(fieldname, props); );, /* Normalizes some options for a field (sets default values). _normalizefieldoptions: function (fieldname, props) { props.listclass = props.listclass ''; props.inputclass = props.inputclass '';, /* Intializes some private variables. _initializefields: function () { this._lastpostdata = {; this._$tablerows = []; this._columnlist = []; this._fieldlist = []; this._cache = [];, /* Fills _fieldlist, _columnlist arrays and sets _keyfield variable. _createfieldandcolumnlist: function () { var self = this; $.each(self.options.fields, function (name, props) { 89
90 //Add field to the field list self._fieldlist.push(name); //Check if this field is the key field if (props.key == true) { self._keyfield = name; //Add field to column list if it is shown in the table if (props.list!= false && props.type!= 'hidden') { self._columnlist.push(name); );, /* Creates the main container div. _createmaincontainer: function () { this._$maincontainer = $('<div />').addclass('jtable-main-container').appendto(this.element);, /* Creates title of the table if a title supplied in options. _createtabletitle: function () { var self = this; if (!self.options.title) { return; var $titlediv = $('<div />').addclass('jtable-title').appendto(self._$maincontainer); $('<div />').addclass('jtable-title-text').appendto($titlediv).append(self.options.title); if (self.options.showclosebutton) { 90
91 , var $textspan = $('<span />').html(self.options.messages.close); $('<button></button>').addclass('jtable-command-button jtable-close-button').attr('title', self.options.messages.close).append($textspan).appendto($titlediv).click(function (e) { e.preventdefault(); e.stoppropagation(); self._oncloserequested(); ); /* Creates the table. _createtable: function () { this._$table = $('<table></table>').addclass('jtable').appendto(this._$maincontainer); this._createtablehead(); this._createtablebody();, /* Creates header (all column headers) of the table. _createtablehead: function () { var $thead = $('<thead></thead>').appendto(this._$table); this._addrowtotablehead($thead);, /* Adds tr element to given thead element _addrowtotablehead: function ($thead) { var $tr = $('<tr></tr>').appendto($thead); 91
92 this._addcolumnstoheaderrow($tr);, /* Adds column header cells to given tr element. _addcolumnstoheaderrow: function ($tr) { for (var i = 0; i < this._columnlist.length; i++) { var fieldname = this._columnlist[i]; var $headercell = this._createheadercellforfield(fieldname, this.options.fields[fieldname]); $headercell.appendto($tr);, /* Creates a header cell for given field. * Returns th jquery object. _createheadercellforfield: function (fieldname, field) { field.width = field.width '10%'; //default column width: 10%. var $headertextspan = $('<span />').addclass('jtable-column-header-text').html(field.title); var $headercontainerdiv = $('<div />').addclass('jtable-column-header-container').append($headertextspan); var $th = $('<th></th>').addclass('jtable-column-header').css('width', field.width).data('fieldname', fieldname).append($headercontainerdiv);, return $th; /* Creates an empty header cell that can be used as command column headers. 92
93 _createemptycommandheader: function () { return $('<th></th>').addclass('jtable-command-column-header').css('width', '1%');, /* Creates tbody tag and adds to the table. _createtablebody: function () { this._$tablebody = $('<tbody></tbody>').appendto(this._$table);, /* Creates bottom panel and adds to the page. _createbottompanel: function () { this._$bottompanel = $('<div />').addclass('jtable-bottom-panel').appendto(this._$maincontainer); $('<div />').addclass('jtable-left-area').appendto(this._$bottompanel); $('<div />').addclass('jtable-right-area').appendto(this._$bottompanel);, /* Creates a div to block UI while jtable is busy. _createbusypanel: function () { this._$busymessagediv = $('<div />').addclass('jtable-busymessage').prependto(this._$maincontainer); this._$busydiv = $('<div />').addclass('jtable-busy-panelbackground').prependto(this._$maincontainer); this._hidebusy();, /* Creates and prepares error dialog div. _createerrordialogdiv: function () { var self = this; self._$errordialogdiv = $('<div></div>').appendto(self._$maincontainer); self._$errordialogdiv.dialog({ autoopen: false, show: self.options.dialogshoweffect, hide: self.options.dialoghideeffect, modal: true, 93
94 , ); title: self.options.messages.error, buttons: [{ ] text: self.options.messages.close, click: function () { self._$errordialogdiv.dialog('close'); BASE DE DATO EN MYSQL -- phpmyadmin SQL Dump -- version Servidor: localhost -- Tiempo de generación: a las 08:19:08 -- Versión del servidor: Versión de PHP: SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- Base de datos: `pagosnfc` Estructura de tabla para la tabla `entidades` CREATE TABLE IF NOT EXISTS `entidades` ( `id` int(11) NOT NULL AUTO_INCREMENT, `numero_tarjeta` varchar(20) DEFAULT NULL, `fecha_vencimiento` date DEFAULT NULL, `codigo_verificacion` varchar(10) DEFAULT NULL, `cedula` varchar(20) DEFAULT NULL, `nombre` varchar(200) DEFAULT NULL, `fecha_creacion` date DEFAULT NULL, `cupo_asignado` float DEFAULT NULL, `cupo_disponible` float DEFAULT NULL, `minimo_pagar` float DEFAULT NULL, `fecha_tope_pago` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- Volcar la base de datos para la tabla `entidades` 94
95 INSERT INTO `entidades` (`id`, `numero_tarjeta`, `fecha_vencimiento`, `codigo_verificacion`, `cedula`, `nombre`, `fecha_creacion`, `cupo_asignado`, `cupo_disponible`, `minimo_pagar`, `fecha_tope_pago`) VALUES (1, ' ', ' ', '1223', ' ', 'ROBERTO RAMIREZ', ' ', 1000, 11, 354, ' '), (2, ' ', ' ', '5646', ' ', 'DAVID VELIZ', ' ', 500, 25, 100, ' ') Estructura de tabla para la tabla `tarjetas` CREATE TABLE IF NOT EXISTS `tarjetas` ( `id` int(11) NOT NULL AUTO_INCREMENT, `tarjeta` varchar(20) DEFAULT NULL, `codigo` varchar(200) DEFAULT NULL, `tipo` varchar(20) DEFAULT NULL, `imagen` int(11) DEFAULT NULL, `fecha_creacion` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; -- Volcar la base de datos para la tabla `tarjetas` INSERT INTO `tarjetas` (`id`, `tarjeta`, `codigo`, `tipo`, `imagen`, `fecha_creacion`) VALUES (1, ' ', '22222', 'Visa', , ' '), (2, ' ', '454555', 'Dinners', , ' '), (3, ' ', ' ', 'America', , ' '), (4, ' ', '5678', 'America', , ' '); Estructura de tabla para la tabla `usuarios` CREATE TABLE IF NOT EXISTS `usuarios` ( `id` int(11) NOT NULL AUTO_INCREMENT, `nombre` varchar(200) DEFAULT NULL, `cedula` varchar(15) DEFAULT NULL, ` ` varchar(200) DEFAULT NULL, `usuario` varchar(50) DEFAULT NULL, `contrasenia` varchar(200) DEFAULT NULL, `fecha_creacion` date DEFAULT NULL, `estado` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; 95
96 DICCIONARIO DE DATOS ENTIDADES ESQUEMA CLAVE PRIMARIA CLAVE FORÁNEA OBJETIVO PÁGINA WEB ID N/A Almacenar la información de las entidades nuevas ingresadas del sitio web CAMPO TIPO PERMITE NULO OBSERVACIÓN ID INTEGER NO Identificación única para cada entidad NUMERO_TARJETA INTEGER SI Número de tarjeta relacionada que manejara la entidad FECHA_VENCIMIENTO DATE SI Fecha de vencimiento de la tarjeta de crédito CODIGO_VERIFICACION VARCHAR SI Código de verificación de la tarjeta de crédito CEDULA VARCHAR SI Cédula de identidad del propietario de la tarjeta de crédito NOMBRE VARCHAR SI Descripción de la entidad que se crean en la pagina web. FECHA_CREACION DATE SI Fecha de creación de la página web CUPO_ASIGNADO INTEGER SI Monto máximo que tiene la tarjeta de crédito CUPO_DISPONIBLE INTEGER SI Cupo que se puede para realizar alguna compra MINIMO_PAGAR INTEGER SI El valor que debe cancelar el cliente. FECHA_TOPE_PAGO DATE SI Fecha máxima 96
97 TARJETAS ESQUEMA CLAVE PRIMARIA CLAVE FORÁNEA OBJETIVO PÁGINA WEB ID N/A Almacenar la información de las tarjetas de crédito nuevas ingresadas desde la aplicación de dispositivo móvil. CAMPO TIPO PERMITE NULO OBSERVACIÓN ID INTEGER NO Identificación única para cada tarjeta. TARJETA INTEGER SI Número de tarjeta crédito creada en el teléfono Android. CODIGO VARCHAR SI Código de verificación de la tarjeta de crédito. TIPO VARCHAR SI Tipo de tarjeta de crédito:visa, Dinner, etc. IMAGEN INTEGER SI Tipo de imagen a mostrarse al crear una tarjeta de crédito. FECHA_CREACION DATE SI Fecha de creación de la tarjeta en la página web. USUARIOS ESQUEMA CLAVE PRIMARIA CLAVE FORÁNEA OBJETIVO PÁGINA WEB ID N/A Almacenar la información de los usuarios tarjetas de crédito ingresados desde la aplicación de dispositivo móvil. 97
98 CAMPO TIPO PERMITE NULO OBSERVACIÓN ID INTEGER NO Identificación única para cada usuario NOMBRE VARCHAR SI Nombre del usuario creado desde el smartphone CEDULA VARCHAR SI Cédula de identidad del propietario de la tarjeta de crédito VARCHAR SI Correo electrónico del usuario de la aplicación de pago NFC USUARIO VARCHAR SI Nombre de usuario de login de la aplicación CONTRASEIA VARCHAR SI Password del usuario que desea realizar el login a la aplicación. FECHA_CREACION DATE Fecha de registro del usuario en la aplicación de NFC LIBRERÍAS ADICIONALES PROTOTYPE Prototype es un framework de JavaScript que permite un rápido desarrollo de aplicaciones web dinámicas. La versión utilizada en la creación del sitio web es la 1.6 y puede ser descargada desde la página TABLEORDERER TableOrderer es un script simple basado en el prototype1.6.0 que permite crear dinámicamente tablas HTML con capacidad de ordenamiento. Se lo puede descargar de la página 98
ALMACENAMIENTOS DE DATOS EN ANDROID CON SQLITE
SQLite M.Sc. Reynaldo Zeballos ALMACENAMIENTOS DE DATOS EN ANDROID CON SQLITE En este ejercicio vamos a crear una tabla TELEFONOS para la base de datos GUIATEL. Para lo cual utilizaremos SQLite que viene
ANEXO 2: Código fuente de la aplicación
ANEXO 2: Código fuente de la aplicación Índice 1. Relación de clases... 3 1.1 agentes.beans... 3 1.1.1 Cliente.java... 3 1.1.2 Articulo.java... 5 1.1.3 Usuario.java... 8 1.1.4 Pedido.java... 9 1.1.5 PedidoLinea.java...
package com.example.dialogov1;
package com.example.dialogov1; import android.app.alertdialog; import android.app.alertdialog.builder; import android.app.dialog; import android.app.dialogfragment; import android.app.progressdialog; import
TP Nº4 Android - SQLite Fecha Miércoles 2014/08/29 Profesor: Pablo Ulman (Polshu)
BASES DE DATOS EN ANDROID Soluciones de Almacenamiento de Datos: Shared Preferences: o Datos primitivos privados almacenados con clave/valor Internal Storage: o Almacenamiento interno en la memoria del
PRACTICAS DE ANDROID 12 - Lanzar un segundo "Activity" y pasar parámetros Problema:
PRACTICAS DE ANDROID 12 - Lanzar un segundo "Activity" y pasar parámetros Hemos visto en el concepto anterior que un programa puede tener más de una ventana representando cada ventana con una clase que
Introducción al manejo de Bases de Datos con SQLite. Version Android
Universidad de El Salvador Facultad de Ingeniería y Arquitectura Escuela de Ingeniería en Sistemas Programación en Dispositivos Móviles Objetivo: Guía de Laboratorio N 06 A Introducción al manejo de Bases
CODIGO PROYECTO: AppPixelproServicioWeb Proyecto Android - Servicio Web
CODIGO PROYECTO: AppPixelproServicioWeb Proyecto Android - Servicio Web I. Alcances del Proyecto a. Ide Eclipse Indigo 3.7 b. Api 10-17, Versión Android 2.3.3 A 4.2.2 c. Jdk 1.6 II. Conceptos Relacionados
14 - Almacenamiento de datos en un archivo de texto en la memoria interna Problema 1:
14 - Almacenamiento de datos en un archivo de texto en la memoria interna Otra posibilidad de almacenar datos en nuestro dispositivo Android es el empleo de un archivo de texto que se guardará en el almacenamiento
Curso 12/13. Desarrollo de Aplicaciones Android. Persistencia
Curso 12/13 Desarrollo de Aplicaciones Persistencia Mecanismos de persistencia Preferencias Sistema de ficheros (privado) Bases de datos SQLite Almacenamiento externo (público) Conexiones de red 2 Preferencias
Persistencia. Mecanismos de persistencia. Preferencias. Curso 12/13
Curso 12/13 Aplicaciones Persistencia Mecanismos de persistencia Sistema de ficheros (privado) Bases de datos SQLite Almacenamiento externo (público) Conexiones de red 2 Las preferencias son una forma
Curso de programación en Android. 19/Junio/2012 Ramón Alcarria
Curso de programación en Android 19/Junio/2012 Ramón Alcarria Comunicación con el servidor Parsing de mensajes: SAX DOM JSON Parsing de mensajes Opciones: - SAX - Analiza el documento XML por fragmentos
Ejercicio 20. SQLite en Android. Android Con Java. Ejercicio 20. Uso de SQLite en Android. Curso de Android con Java
Android Con Java Ejercicio 20 Uso de SQLite en Android Objetivo del Ejercicio El objetivo del ejercicio poner en práctica el concepto de SQLite en Android. Al finalizar el ejercicio deberemos poder acceder
1.- Creamos un proyecto al que llamaremos MusicaMovil.
Base de datos en Android. (Modelo de la BD) Este ejercicio probablemente parecerá absurdo, pero no pretendo hacer un reproductor de música, sino más bien es un previo para un diccionario de español a maya
La funcionalidad básica es la del proyecto 1 (Pacman III). Sobre ella reemplazamos la interfaz de usuario para adaptarla al nuevo entorno
Pacman en android 14.5.2015 1 Objetivos Pasar el juego del proyecto 1 (Pacman III) a una plataforma Android. movimiento del jugador dirigido por el dedo programación de menús contextuales gestión de threads
Desarrollo de Aplicaciones para Android
Desarrollo de Aplicaciones para Android Sesión 7: Servicios de red Desarrollo de Aplicaciones para Android Depto. Ciencia de la Computación e IA Servicios de red-1 Puntos a tratar Conexiones HTTP Parsing
Temas. CopyRight 2013 - emmmnmmma - All rights reserved 2
Tutorial ANDROID Temas 1 - Instalación de Android 2 - Pasos para crear el primer proyecto Android 3 - Captura del clic de un botón 4 - Controles RadioGroup y RadioButton 5 - Control CheckBox 6 - Control
SESIÓN 5 MANEJO DE BASES DE DATOS SQLITE
SESIÓN 5 MANEJO DE BASES DE DATOS SQLITE Contenidos Resumen...1 Práctica guiada 7: ListaCompra...1 Implementación de la base de datos...2 Actividad principal: ListaCompraActivity...6 Actividad secundaria:
Android Con Java. Ejercicio 2. Ciclo de Vida de las Actividades en Android. Ejercicio 2. Ciclo de Vida de las Actividades en Android
Android Con Java Ejercicio 2 Ciclo de Vida de las Actividades en Android Objetivo del Ejercicio El objetivo del ejercicio es entender y verificar cada una de las etapas del Ciclo de Vida de las Actividades
Aplicación Android de Asistencia al Caminante
Aplicación Android de Asistencia al Caminante Enrique R. Delgado Garrido Almacenamiento de datos en Android. Documento: Índice de contenido.1 A2.- Almacenamiento de datos en Android.2 A.2.1 - Preferences2
Ejercicio 4. Manejo de Layouts en Android. Android Con Java. Ejercicio 4. Manejo de Layouts en Android. Curso de Android con Java
Android Con Java Ejercicio 4 Manejo de Layouts en Android Objetivo del Ejercicio El objetivo del ejercicio es entender el manejo de Layout y los Adaptadores en Android. Al finalizar deberemos observar
Ejercicio 18. Configuración de Widgets en Android. Android Con Java. Ejercicio 18. Configuración de Widgets en Android. Curso de Android con Java
Android Con Java Ejercicio 18 Configuración de Widgets en Android Objetivo del Ejercicio El objetivo del ejercicio crear un Widget que antes de utilizarlo nos permita configurarlo. En este caso, solicitar
Plugin para NetBeans que realiza migración de una base de datos postgresql a couchdb.
CAPITULO POSTGRESQL TO COUCHDB PLUGINS Modulo: p2cnb Plugin para NetBeans que realiza migración de una base de datos postgresql a couchdb. 1. Crear el nuevo proyecto. Seleccionar Modulos NetBeans y en
POOLSTORE. Supermercado virtual de productos de piscina con códigos QR. Trabajo Final de Carrera - TFC. Alumno : Roberto Carlo Carbajal Vásquez
POOLSTORE Supermercado virtual de productos de piscina con códigos QR Trabajo Final de Carrera - TFC Alumno : Roberto Carlo Carbajal Vásquez Ingeniería Técnica en Informática de Gestión Consultor : Marc
Que es un Android Intent?
Cuando uno empieza a programar para Android se suele topar mas pronto que tarde con el concepto de Intent y de repende comienzan a surgir muchas dudas. Si miramos en el diccionario la traducción es Intento
Ejercicio 16. Mejora de Notificaciones en Android. Android Con Java. Ejercicio 16. Mejora de Notificaciones en Android. Curso de Android con Java
Android Con Java Ejercicio 16 Mejora de Notificaciones en Android Objetivo del Ejercicio El objetivo del ejercicio es entender y utilizar algunas de las nuevas clases para mejorar el manejo de Notificaciones
Tema 2: Diseño de servicios para móviles
Tema 2: Diseño de servicios para móviles Listas y menús 2013-2014 Depto. Ciencia de la Computación e IA Puntos a tratar Spinners Listas Adaptadores Menús de opciones Menús contextuales 2 Spinner Cuadro
TP Nº4 Android - SQLite Fecha Miércoles 2013/08/14 Profesor: Pablo Ulman (Polshu).
BASES DE DATOS EN ANDROID Bases de datos SQLite SQLite es una base de datos Open Source que se encuentra embebida en Android Las Bases de datos que se crean son accesibles por nombre desde cualquier clase
Programación en Android LSUB, GSYC, URJC
Programación en Android LSUB, GSYC, URJC Introducción Teléfono o Emulador Android Studio Introducción Activity Mgr App! Dialer Dalvik JVM SQLite WebKit... OpenGL Linux kernel Dispositivo móvil Aplicaciones
Introducción a Java LSUB. 15 de enero de 2015 GSYC
Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada
Programación Android. Rafael Morón Abad [email protected]
Programación Android Rafael Morón Abad [email protected] APIs para red Android con9ene el paquete java.net. La clase base para acceso a red es HApURLConnec9on. Para acceder a Internet, se requiere
Ejercicio 4. EJB Sesión - Sistema SGA. Java EE. Ejercicio 4. EJB Sesión Sistema SGA. Curso de Java EE
Java EE Ejercicio 4 EJB Sesión Sistema SGA Objetivo del Ejercicio El objetivo del ejercicio es agregar un EJB de Sesión a nuestro proyecto SGA (Sistema de Gestión de Alumnos), el cual desarrollaremos a
Práctica 7: Invocación Web Services con REST
Práctica 7: Invocación Web Services con REST Aplicaciones Telemáticas II Introducción Los Web Services permiten realizar aplicaciones distribuidas, usando las ventajas que nos proporciona el protocolo
Interfaz de usuario Layout Vistas Adaptadores Eventos de interacción Estilos y temas
Interfaz de usuario Layout Vistas Adaptadores Eventos de interacción Estilos y temas Interfaz de usuario Layout Vistas Adaptadores Eventos de interacción Estilos y temas Activity [Form] Pantalla que se
Android. Content Providers
Android Content Providers Content-Providers Persistencia: Manejar datos y exponerlos a otras aplicaciones. Interfaz con un conjunto de métodos estándar. Único modo de compartir datos entre aplicaciones.
Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java
Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente
PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI
PROGRAMACION DISTRIBUIDA MobileTracker: Ejemplo de implementación con RMI Héctor Pérez 2 MobileTracker: Especificación El computador de la torre de control ejecuta el servicio Follower que registra los
Aplicación para lista de tareas
Curso 12/13 Curso de Enseñanzas Propias Programación en Aplicación para lista de tareas En la primera sesión... Aprendimos qué es y cómo es un proyecto. Creamos y ejecutamos nuestro primer proyecto. Añadimos
Servicios pensados para optimizar los procesos de comunicación de voz y SMS.
Checker de teléfono Servicios pensados para optimizar los procesos de comunicación de voz y SMS. Aspectos generales Basados en una aplicación de la tecnología ENUM. La ENUM API permite acceder a los servicios
Almacenamiento de datos. JOSE LUIS BERENGUEL GÓMEZ [email protected] Febrero 2012
Almacenamiento de datos JOSE LUIS BERENGUEL GÓMEZ [email protected] Febrero 2012 Contenidos Almacenamiento de preferencias. Almacenamiento en la memoria interna. Almacenamiento en la memoria externa.
Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4
Introducción al desarrollo de RIA's con Adobe Flex 3.0 Dia 4 by S. Muñoz-Gutiérrez [email protected], [email protected] Grupo LINDA Facultad de Ingeniería UNAM México Octubre-Diciembre 2009 Identificando
Persistencia en Android: ficheros y SQLite
Persistencia en Android: ficheros y SQLite Índice 1 Introducción...2 2 Manejo de ficheros tradicionales en Android...2 2.1 Apertura de ficheros...2 2.2 Ficheros como recursos...3 2.3 Operar con ficheros...3
myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com [email protected]
myappgen Usted Construye la aplicación mientras la ejecuta http://www.myappgen.com [email protected] Tutorial 8 - Process En este tutorial le mostraremos como utilizar el modelo de programa del tipo Process,
Capitulo 4: Componentes Android
Capitulo 4: Componentes Android Elaborado por: Gary Briceño http://gary.pe http://gary.pe 1 http://gary.pe 2 1. COMPONENTES DE LA APLICACIÓN http://gary.pe 3 Componentes Android permite a los desarrolladores
Parsear HTML con htmlparser para Android Guillem Pérez
Parsear HTML con htmlparser para Android Guillem Pérez He escogido esta librería(http://htmlparser.sourceforge.net/) aunque no había muchos ejemplos porque la he visto realmente ligera y esta en java hay
Programación Android. Rafael Morón Abad [email protected]
Programación Android Rafael Morón Abad [email protected] 3.5. Persistencia Persistencia Para poder almacenar información persistente, Android nos proporciona 3 mecanismos: 1. Preferencias 2. Ficheros
Laboratorio JDBC - Base de datos con Java
Laboratorio JDBC - Base de datos con Java Objetivos: Reconocer y realizar mantenimientos con Java y Base de datos. Implementar aplicaciones cliente servidor con Base de datos. Temas: Mantenimiento del
Desarrollo de Sistemas Software Basados en Servicios y Componentes
Desarrollo de Sistemas Software Basados en Servicios y Componentes Bloque Docente SERVICIOS WEB Parte 2 Portada Escuela Superior de Ingeniería (ESI) Universidad de Almería Índice Visualización WSDL (servicios
Técnicas Avanzadas de Inteligencia Artificial Dpt. Lenguajes y Sistemas Informáticos. FISS. UPV-EHU
Laboratorio 1 Comunicación Técnicas Avanzadas de Inteligencia Artificial Dpt. Lenguajes y Sistemas Informáticos. FISS. UPV-EHU 1 ÍNDICE 2. Comunicación-Comportamientos 2.1. Comunicación Ping-Pong 2.2.
Práctica sobre compartición de instancias remotas.
Práctica sobre compartición de instancias remotas. Para esta práctica se ha construido un pequeño sistema cliente-servidor que permite la resolución de Sudokus entre varios jugadores. El servidor consta
Practica 7 Conexión a su base de datos. Optativa II
1. Inicie sesión en su manejador de base de datos y agregue los procedimientos de almacenados mediante los cuales manejaremos las tablas agregadas en la práctica anterior. 2. Colóquese en su base de datos.
Guías para la práctica (2): Acceso a Salesforce
Guías para la práctica (2): Acceso a Salesforce Pasos Previos 1. Darse de alta en Salesforce como desarrollador: http://www.salesforce.com/form/trial/freetrial-developer.jsp 2. Crear nuevos leads (Candidatos),
Modulo conexión Cliente WS DGI
Modulo conexión Cliente WS DGI El desarrollo fue echo con eclipse (eclipse-jee-kepler) utilizando herramientas Apache. De la misma forma puede hacerse con otro lenguaje que acepte estas librerias porque
Java RMI. las RPC de Java. Parte I. Luis Fernando Llana Díaz. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid
las RPC de Java. Parte I Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid de marzo de 006 RMI y RPC RPC: Remote Procedure Call. RMI y RPC RPC: Remote Procedure Call.
Elementos léxicos del lenguaje de programación Java
Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores
Clases para trabajar con SQLite en Android
SQLITE SQLite SQLite (http://www.sqlite.org/) es : Una librería de software que implementa un gestor de bases de datos relacionales. Adaptado para dispositivos de bajo consumo o móviles Está escrito en
Servicios LSUB, GYSC, URJC
Servicios LSUB, GYSC, URJC Servicios Sirve para hace trabajo en background (i.e. sin UI). Más prioridad que activity (no suelen matarlo) Pueden ser privados a la aplicación (manifest) Continua ejecutando
Luego lleve el cliente a otra máquina y ejecute desde ahí usando el nombre de la máquina del servidor.
Ejemplos de sockets Los sockets son un mecanismo de comunicación entre procesos de muy bajo nivel, donde el usuario tiene que hacer muchas cosas, pero que siguen siendo muy importantes. En esta práctica
GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)
GUIA DE LABORATORIO N 9 B (000Webhost Php- Para desarrollar en casa) Objetivo: Crear servicios web utilizando la arquitectura REST, para obtener información desde un servidor web gratuito que se conecta
Aplicación móvil de localización de ocio para Android.
Proyecto Final de Carrera Aplicación móvil de localización de ocio para Android. Autor: Eduardo Campos de Diago Legajo: 54483 DNI: 51423674-K Tutor: Dra. Silvia Gómez 2013 Dedicado a mis padres y hermana
JavaScript. Contenidos. Introducción El lenguaje Validación de formularios. Programación en Internet 2005-2006. DLSI - Universidad de Alicante 1
Departamento de Lenguajes y Sistemas Informáticos JavaScript Programación en Internet Curso 2005-2006 Contenidos Introducción El lenguaje Validación de formularios DLSI - Universidad de Alicante 1 Introducción
Curso PUDE. Desarrollo de Aplicaciones Móviles en Android. A. Descripción. Ejercicio Avanzado B: Web Services y Ejecución en Segundo plano
Curso PUDE Ejercicio Avanzado B: Web Services y Ejecución en Segundo plano Aunque ya hemos visto muchas cosas a lo largo del curso, aún queda mucho por descubrir. Uno de los grandes usos que se les da
3.9 Patrón Distributed callback
3.9 Patrón Distributed callback Motivación (1) Queremos que la aplicación de administración de los termostatos Monitorize la temperatura de algunos termostatos, avisándonos si ésta baja o sube por encima
Google Cloud EndPoints (Parte II)
1 Google Cloud EndPoints (Parte II) 1. Aplicaciones android con Google EndPoints. 1.1. Resumen en la creación de un cliente y un backend con Google endpoints. 1.2. Añadiendo autentificación a nuestra aplicación.
Manual de Configuración Cámaras IP Wanscam
Manual de Configuración Cámaras IP Wanscam 1 1.- Configuración ----------------------------------------------------------------------------------------- 3 1.1.- Configuración inicial en pc-------------------------------------------------------------------------------
TUTORIAL DATA WAREHOUSE: OLAP - Analysis Services
TUTORIAL DATA WAREHOUSE: OLAP - Analysis Services Este documento consta de: Descripción general del Tutorial Prerrequisitos Pasos generales a seguir Pasos específicos a seguir Anexo I - Almacenamiento
En nuestra actividad principal, creamos el objeto vista previa. Este objeto se creará el objeto cámara y volver a la actividad CameraDemo.
Uso de la Cámara API Android SDK es compatible con la conectividad a la cámara integrada. Usar la cámara para tomar fotos es relativamente fácil. Es algo más difícil de configurar la previa de la cámara
TOMO II. Línea de Investigación. Redes y Sistema Operativo. Nombre del egresado. Antonio Nicolás Rodríguez Andrade.
TOMO II Línea de Investigación Redes y Sistema Operativo Nombre del egresado Antonio Nicolás Rodríguez Andrade Nombre del Tema Evaluación de la plataforma Android para dispositivos móviles Número de Proyecto
Aplicaciones con Servicio Web
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES PDM115 Ciclo I-2014 GUIA DE LABORATORIO N 11(preliminar)
James Gosling, creador de Java
Lo que Java intenta hacer y lo hace con bastante éxito, es abarcar dominios diferentes. De esa forma le permite efectuar trabajos para de aplicaciones del lado del servidor, del lado del cliente, para
Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco.
Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco. El software que se muestra es un ejemplo sin pulir donde se muestra
Escuela Superior de Ingeniería
Escuela Superior de Ingeniería Programación en Internet Grado en Ingeniería Informática Invocación de un servicio web REST desde una aplicación Android Autores: Javier Montes Cumbrera y Salvador Carmona
Requisitos. Universidad ORT Arquitectura de Software
Requisitos Java Development Kit (JDK) 1.5 o superior NetBeans IDE 6.5 o superior JBoss Application Server 4.2.x o 5.x.x Variable de entorno JAVA_HOME apuntando al directorio de instalación de la JDK 1
2. Estructura de un programa en Java
24 A. García-Beltrán y J.M. Arranz 2. Estructura de un programa en Java Objetivos: a) Describir la estructura del código fuente de una aplicación Java b) Presentar los conceptos de comentario y de identificador
1. Posicionarse en la vista Services y seleccionar el ítem Servers. En el menú contextual del Mouse seleccionar la opción Add Server
Requisitos Versión 1.5 (o superior) de la JDK de Java NetBeans 6 como IDE de desarrollo JBoss 4.2.x como Application Server Variable de entorno de Windows JAVA_HOME apuntando al directorio de instalación
Manual del Protocolo XML-RPC de Mensajería Negocios
Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...
Hola Android. Introducción al desarrollo de aplicaciones para Android
Hola Android. Introducción al desarrollo de aplicaciones para Android Las aplicaciones para el sistema operativo móvil Android son desarrolladas en el lenguaje de programación Java en conjunto con el SDK
2) Cual modificador limita el acceso a un método de una clase pública a los miembros de la misma clase?
PRTIIPNT: MPRS: H: xamen de iagnóstico Programador Java Instrucciones: Lea cada pregunta cuidadosamente y marque la(s) respuesta(s) que sean correctas. 1) ada la siguiente clase: 1. class rrayopy3{ 2.
CURSO DE SQL SERVER 2005
CURSO DE SQL SERVER 2005 Una vez finalizado el curso, el alumno estará preparado para: Instalar y configurar SQL Server 2005. Comprender los conceptos más importantes del diseño de bases de datos. Crear
Android TAG y el principio DRY
Android es una plataforma de desarrollo que empieza a tener el sobrenombre de INFINITA en cuanto a las cosas que se pueden hacer, conjunto de APIs soportadas etc. Sin embargo al ser tan grande muchas veces
GUIA DE LABORATORIO N 8 A(Netbeans-java,Glassfish)
UNIVERSIDAD DE EL SALVADOR FACULTAD DE INGENIERIA Y ARQUITECTURA ESCUELA DE INGENIERIA DE SISTEMAS INFORMATICOS PROGRAMACION PARA DISPOSITIVOS MOVILES PDM115 Ciclo I-2014 GUIA DE LABORATORIO N 8 A(Netbeans-java,Glassfish)
UNIVERSIDAD DE GUAYAQUIL
UNIVERSIDAD DE GUAYAQUIL FACULTAD DE CIENCIAS MATEMATICAS Y FISICAS CARRERA DE INGENIERIA EN SISTEMAS COMPUTACIONALES DESARROLLO DE SISTEMA WEB EMPRESARIAL PARA LA ORIENTACIÓN VOCACIONAL Y LA GESTION DE
Ingeniería del Software II. Curso 2003/2004. Enunciado de la práctica del Segundo parcial.
Ingeniería del Software II. Curso 2003/2004. Enunciado de la práctica del Segundo parcial. Para este parcial, debe modificarse la práctica del primer parcial de la siguiente manera: Servidor: la aplicación
PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }
PROGRAMACIÓN EN JAVA { una línea para definir, crear o ejecutar ; } JFC Y API SPECIFICATIONS OBJECT INTERFACE ABSTRACT IMPLEMENTS EXTENDS NEW EXTENDS (Hasta que una clase derivada deje de ser ABSTRACT)
Anexo de documentación
Anexo de documentación Autor: Daniel Hernández Jané Tutor: Juan Carlos Hernández Palacín Índice 1. Orden de fabricación... 2 1.1. Convertidor ÖBB... 2 1.2. Convertidor Civia... 5 1.3. Convertidor Desiro...
MANUAL DE INTEGRACIÓN PAGOS EN EFECTIVO
MANUAL DE INTEGRACIÓN PAGOS EN EFECTIVO Nuestra API proporciona 3 métodos para implementar el proceso de pagos en efectivo en tu sitio web. Éstos se mencionan a continuación: Métodos 1. Realizar una orden/cargo
Programando para Android: una sencilla aplicación
Programando para Android: una sencilla aplicación Java, Android, Apps Vamos a hablar sobre como programar una aplicación para un dispositivo con Android que se va a tratar de una sencilla calculadora.
Tutorial Web Dinámica con Servlets y JSP Sesion 3
Tutorial Web Dinámica con Servlets y JSP Sesion 3 1. Eclipse Plataforma Web Tool Eclipse WTP proporciona herramientas para desarrollar aplicaciones web estándar Java y aplicaciones Java EE. Artefactos
Quiz 11: Crear preguntas. Juan Quemada, DIT - UPM
Quiz 11: Crear preguntas Juan Quemada, DIT - UPM 1 Quiz 10: Crear preguntas Objetivo: Introducir en la aplicación Quiz un formulario que permita crear preguntas nuevas y añadirlas a la base de datos. Paso
GUÍA DE TRABAJO GRADO 11. Articulación SENA Programación de Software Ing. Néstor Raúl Suarez Perpiñan Página 1 de 6
Página 1 de 6 Tema: PROCEDIMIENTOS ALMACENADOS SQL SERVER Objetivo: Adquirir los conocimientos necesarios para desarrollar e implementar procedimientos almacenados utilizando SQL Server y lenguaje C# I.
XPERTO EN DISEÑO DE PÁGINAS WEB
Curso ICA de: EXPERTO EN DISEÑO DE PÁGINAS WEB Módulo 1: Program. cliente: JavaScript Estudia el lenguaje JavaScript para crear guiones o scripts que se incluyen en las páginas web y que son ejecutados
RESTRICCIONES DE DOMINIOS
RESTRICCIONES DE DOMINIOS - Cargo del personal de la inmobiliaria: create domain cargo_personal as character20 check value in Venta, Alquiler, Gerencial - Categoría del barrio: create domain categoría
