´ INSTITUTO POLITECNICO NACIONAL Unidad Profesional Interdisciplinaria en Ingenier´ Ingenier´ıa y Tecnolog´ Tecnol og´ıas ıas Avanzada Avanz adas. s.
PROYECTO: Dise˜ no e Implementaci´ no on on de una M´ aquin aqu ina a Expendedora Virtual.
EQUIPO 11:
Arteaga Gaona Guillermo. Devars Caballero Enrique. Rangel Acosta Jessica Esmeralda.
Programaci´ on on Estructurada. Profra. Maricela Serrano Fragoso.
M´ exico exico D.F. a 3 de Diciembre del 2015.
´ Indice 1. Ob jetivos.
2
1.1. Obje bjetivo General. . . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Obje bjetivo Espec pec´ıfico. . . . . . . . . . . . . . . . . . . . . . . .
2 2
2. Introducci Introducci´ ´ on.
2
3. Situaci´ Situaci´ on actual.
3
4. Justificaci´ Justificaci´ on.
3
5. Investig Investigaci´ aci´ on y Desarrollo.
4
5.1. 5.1. M´ aquinas Expen pendedoras. . . . . . . . . . . . . 5.1.1 5.1 .1.. Tipos Tipos de M´ aquinas inas Expen pendedoras. as. . . 5.1.2. Ventaja ajas y Desventaja ajas. . . . . . . . . 5.2. Bases de Datos. . . . . . . . . . . . . . . . . . 5.2. 5.2.1. 1. Cara Caract cter er´´ısti ıstica cass de una una Ba Base se de Dato Datos. s. 5.2. 5.2.2. 2. Ventaj entajas as en el uso uso de Ba Base sess de Dato Datos. s. 5.2.3. Microsoft SQL Server. . . . . . . . . . 5.3. Lenguaje Lenguaje de programaci´ programaci´ on C Sharp. . . . . . 5.3.1. Clases y Obje bjetos en C Sharp. . . . . . 5.3.2. M´etodo odos en C Sharp. . . . . . . . . . . 5.3. .3.3. Microsoft oft Visual Studio. . . . . . . . . 5.4. 5.4. C´ odigo Fuente en C Sharp. . . . . . . . . . . 5.4.1. pantalla-logeo.cs . . . . . . . . . . . . 5.4.2. pantalla-menu.cs . . . . . . . . . . . . 5.4.3. Pantalla-comprar.cs . . . . . . . . . . 5.5. Pro cesos. . . . . . . . . . . . . . . . . . . . . 5.5.1. consultar-papas.sql . . . . . . . . . . . 5.5.2. INGRESAR.sql . . . . . . . . . . . . . 5.5. .5.3. ACTUALIZAR-PAPAS.sql . . . . . . 5.6. Capturas de Pantalla. . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6. Conclusiones.
4 4 4 5 5 5 7 8 8 9 10 12 12 14 15 18 18 18 19 20 22
6.1. .1. Conclusion iones Personales les. . . . . . . . . . . . . . . . . . . . . .
22
7. Traba jos Futuros.
23
8. Bibliograf´ıa.
24
1
1. 1.1.
Objetivos. Objetivo General.
Al t´ermino de este proyecto se habr´ a implementado un programa en lenguaje C# que servir´a para operar un circuito electr´ onico funcional. 1.2.
Objetivo Espec´ıfico.
Dise˜ no e implementaci´ on de una m´ aquina expendedora virtual a base de cr´editos electr´ onicos programada en C# .
2.
Introducci´ on.
Actualmente, el efectivo se ha visto reemplazado por el uso de las tarjetas de cr´ edito. Su pragmatismo y facilidad de uso son algunas de las razones por las cuales ´este m´ etodo de pago es tan popular, adem´ as de disminuir la inseguridad que sufren los usuarios diariamente al portar efectivo. Los bancos le asignan al cliente un l´ımite de cr´ edito el cual puede ser usado a su conveniencia, el usuario decide la forma en la que puede pagar el dinero que el banco le ha prestado. En caso de que el usuario no tenga el dinero suficiente para pagar, el banco ir´a generando cierta cantidad de intereses. Navegando en la Internet podemos encontrar un sinf´ın de p´aginas en donde podemos comprar productos y servicios de todo tipo utilizando dinero virtual. Algunas ventajas de esta nueva modalidad de compra es que se encuentra disponible las 24 horas del d´ıa, lo pueden entregar directamente en la puerta de nuestra casa y as´ı evitamos las largas filas y distancias que tenemos que recorrer para realizar la transacci´ on.
2
3.
Situaci´ on actual.
A pesar de la desconfianza que sent´ıa la poblaci´ on hacia las compras online, es evidente que su uso se ha ido incrementando debido a lo sencillo que es comprar y que en algunos sitios las transacciones que se realizan entre el cliente y vendedor pueden facilitarse mediante monedas virtuales, tales como BitCoin (el medio principal de intercambio online), LEOcoin , litecoins y onico, le brindan peercoin , las cuales, por estar realizadas en un medio electr´ al usuario mayor privacidad y flexibilidad entre movimientos monetarios. osito en este proyecto ser´ Nuestro prop´ a adecuar una m´aquina expendedora al mundo virtual, ofreciendo varios tipos de productos, los cuales podr´ an ser comprados y posteriormente descontados de los cr´ editos monetarios del cliente. En caso de que ´este no cuente con la cantidad suficiente, se descontar´ an en cuanto se le deposite dinero en movimientos posteriores.
4.
Justificaci´ on.
Tal y como todos hemos sido testigos, durante los u´ltimos a˜ nos, el uso del software y sistemas de informaci´ on en general han tenido un crecimiento vertiginoso, esto debido a la eficiencia con la que se pueden aplicar a casi todas las a´reas en las que los humanos nos involucramos, permitiendo realizar todo tipo de tareas de una manera mas sencilla, r´ apida, c´ omoda y principalmente, barata. Por esa raz´ on, hemos tomado la decisi´ on de desarrollar un software que cumpla los objetivos que anteriormente hemos citado. El lenguaje de programaci´on C#, que es orientado a objetos, nos permitir´ a desarrollar de una manera mas eficaz los elementos necesarios para nuestro programa. Adem´ as, de que su estructura vers´atil nos permite unirlo con una base de datos para garantizar que toda la informaci´ on que maneje el software pueda ser administrada correctamente. Todo esto ser´ a explicado detalladamente en la siguiente secci´ on.
3
5.
Investigaci´ on y Desarrollo.
5.1.
M´ aquinas Expendedoras.
La m´ aquina expendedora es una m´ aquina que proporciona aperitivos, bebidas, golosinas y otros productos a los consumidores. Se trata de vender odicamente sin la presencia de un dependiente para cobrar los art´ıculos. Peri´ un empleado repone el producto y recoge el dinero en forma de monedas o, menos habitualmente, billetes; a veces tambi´en se puede pagar con tarjeta monedero, tarjeta de cr´ edito o tel´ efono m´ ovil.
Las posibilidades de las m´aquinas expendedoras son amplias. Normalmente suelen vender refrescos, caf´e, comida, chucher´ıas, etc. Pero tambi´en existen modelos dise˜ nados para vender prensa, libros, sellos de correos, billetes del transporte p´ ublico, bebidas alcoh´ olicas, cigarrillos de tabaco, tambi´en son frecuentes, en las oficinas que atienden al p´ublico, las m´ aquinas expendedoras de un impreso peque˜no con el n´ umero de turno del solicitante. 5.1.1.
Tipos de M´ aquinas Expendedoras.
anico, sin Mec´ anicas. Aquellas en que todo su funcionamiento es mec´ intervenci´on de ning´ un mecanismo el´ectrico o electr´onico. Son m´ aquinas sencillas, pr´acticamente en desuso por las limitaciones que presentan. onicos para su funcioElectr´ onicas. Cuentan con componentes electr´ namiento y necesitan de energ´ıa el´ectrica. 5.1.2.
Ventajas y Desventajas.
Entre las muchas ventajas de las m´aquinas expendedoras, destacan el que trabajan las 24 h los 365 d´ıas del a˜ no, no necesitan personal cualificado ni atenci´ on personalizada, no se requiere contrataci´on de personal para su explotaci´ on, no requiere largas horas de trabajo, s´ olo unas pocas horas de limpieza, recarga y recaudaci´ on, por lo que ´este negocio es perfectamente compatible con cualquier otro trabajo. No se necesita una gran inversi´ on para iniciar un negocio, no se pagan c´ anones ni royalties para su explotaci´on, son f´acilmente amortizables y generan beneficios r´apidamente dependiendo de la capacidad inversora que se tenga, a m´as m´ aquinas m´ as beneficios.
4
Otra de las ventajas de las m´aquinas expendoras es la movilidad. En funci´ on de los resultados que se obtenga, la m´ aquina se puede cambiarse de sitio ya que el emplazamiento lo es todo, no hay vendedor y es el consumidor el que decide si en ´ese momento quiere adquirir un producto. 5.2.
Bases de Datos.
Se define una base de datos como una serie de datos organizados y relacionados entre s´ı, los cuales son recolectados y explotados por los sistemas de informaci´ on de una empresa o negocio en particular.
5.2.1.
Caracter´ ısticas de una Base de Datos.
Entre las principales caracter´ısticas de los sistemas de base de datos podemos mencionar: Independencia l´ ogica y f´ısica de los datos. Redundancia m´ınima. Acceso concurrente por parte de m´ ultiples usuarios. Integridad de los datos. Consultar complejas optimizadas. Seguridad de acceso y auditor´ıa. Respaldo y recuperaci´on. andar . Acceso a trav´es de lenguajes de programaci´on est´ 5.2.2.
Ventajas en el uso de Bases de Datos.
Control sobre la redundancia de datos: Los sistemas de ficheros
almacenan varias copias de los mismos datos en ficheros distintos. Esto hace que se desperdicie espacio de almacenamiento, adem´ as de provocar la falta de consistencia de datos. En los sistemas de bases de datos todos estos ficheros est´ an integrados, por lo que no se almacenan varias copias de los mismos datos. Sin embargo, en una base de datos no se puede eliminar la redundancia completamente, ya que en ocasiones es necesaria para modelar las relaciones entre los datos. 5
Consistencia de datos: Eliminando o controlando las redundancias
de datos se reduce en gran medida el riesgo de que haya inconsistencias. Si un dato est´ a almacenado una sola vez, cualquier actualizaci´ o n se debe realizar s´olo una vez, y est´a disponible para todos los usuarios inmediatamente. Si un dato est´ a duplicado y el sistema conoce esta redundancia, el propio sistema puede encargarse de garantizar que todas las copias se mantienen consistentes. Compartir datos: En los sistemas de ficheros, los ficheros pertenecen
a las personas o a los departamentos que los utilizan. Pero en los sistemas de bases de datos, la base de datos pertenece a la empresa y puede ser compartida por todos los usuarios que est´en autorizados. o n es m´ as Mantenimiento de est´ andares: Gracias a la integraci´ f´ acil respetar los est´ andares necesarios, tanto los establecidos a nivel de la empresa como los nacionales e internacionales. Estos est´ andares pueden establecerse sobre el formato de los datos para facilitar su intercambio, pueden ser est´andares de documentaci´ on, procedimientos de actualizaci´ on y tambi´en reglas de acceso. Mejora en la integridad de datos: La integridad de la base de
datos se refiere a la validez y la consistencia de los datos almacenados. Normalmente, la integridad se expresa mediante restricciones o reglas que no se pueden violar. Estas restricciones se pueden aplicar tanto a los datos, como a sus relaciones, y es el SGBD quien se debe encargar de mantenerlas. Mejora en la seguridad: La seguridad de la base de datos es la
protecci´ on de la base de datos frente a usuarios no autorizados. Sin unas buenas medidas de seguridad, la integraci´ on de datos en los sistemas de bases de datos hace que ´estos sean m´ as vulnerables que en los sistemas de ficheros. Mejora en la accesibilidad de los datos: Muchos SGBD propor-
cionan lenguajes de consultas o generadores de informes que permiten al usuario hacer cualquier tipo de consulta sobre los datos, sin que sea necesario que un programador escriba una aplicaci´ on que realice tal tarea. Mejora en la productividad: El SGBD proporciona muchas de las
funciones est´andar que el programador necesita escribir en un sistema de ficheros. A nivel b´asico, el SGBD proporciona todas las rutinas de 6
manejo de ficheros t´ıpicas de los programas de aplicaci´ on. El hecho de disponer de estas funciones permite al programador centrarse me jor en la funci´ on espec´ıfica requerida por los usuarios, sin tener que preocuparse de los detalles de implementaci´ on de bajo nivel. Mejora en el mantenimiento: En los sistemas de ficheros, las des-
cripciones de los datos se encuentran inmersas en los programas de aplicaci´ on que los manejan. Esto hace que los programas sean dependientes de los datos, de modo que un cambio en su estructura, o un cambio en el modo en que se almacena en disco, requiere cambios importantes en los programas cuyos datos se ven afectados. Sin embargo, los SGBD separan las descripciones de los datos de las aplicaciones. Esto es lo que se conoce como independencia de datos, gracias a la cual se simplifica el mantenimiento de las aplicaciones que acceden a la base de datos. Aumento de la concurrencia: En algunos sistemas de ficheros, si
hay varios usuarios que pueden acceder simult´aneamente a un mismo fichero, es posible que el acceso interfiera entre ellos de modo que se pierda informaci´ on o se pierda la integridad. La mayor´ıa de los SGBD gestionan el acceso concurrente a la base de datos y garantizan que no ocurran problemas de este tipo. Mejora en los servicios de copias de seguridad: Muchos sistemas
de ficheros dejan que sea el usuario quien proporcione las medidas necesarias para proteger los datos ante fallos en el sistema o en las aplicaciones. Los usuarios tienen que hacer copias de seguridad cada d´ıa, y si se produce alg´ un fallo, utilizar estas copias para restaurarlos. En este caso, todo el trabajo realizado sobre los datos desde que se hizo la u ´ ltima copia de seguridad se pierde y se tiene que volver a realizar. Sin embargo, los SGBD actuales funcionan de modo que se minimiza la cantidad de trabajo perdido cuando se produce un fallo. 5.2.3.
Microsoft SQL Server.
SQL Server es un sistema de gesti´ on de bases de datos relacionales (RDBMS) de Microsoft que est´ a dise˜ nado para el entorno empresarial. SQL Server se ejecuta en T-SQL (Transact -SQL), un conjunto de extensiones de programaci´ on de Sybase y Microsoft que a˜ naden varias caracter´ısticas a SQL est´andar, incluyendo control de transacciones, excepci´ on y manejo de
7
errores, procesamiento fila, as´ı como variables declaradas. Se utilizar´ a este gestor para dise˜ nar e implementar la base de datos del software a desarrollar.
Figura 1: SQL Server en ejecuci´on. 5.3.
Lenguaje de programaci´ on C Sharp.
C# es un lenguaje de programaci´on orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que despu´ es fue aprobado como un est´andar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programaci´ on dise˜ nados para la infraestructura de lenguaje com´ un. Su sintaxis b´ asica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes. 5.3.1.
Clases y Objetos en C Sharp.
A continuaci´ on se presentan algunas especificaciones de C# con respecto a la programaci´ on orientada a objetos:
8
Una variable de objeto de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java). El operador de asignaci´ on no copia los valores de un objeto, sino la referencia al mismo (al igual que Java). Un constructor tiene el mismo nombre que su clase y es sint´acticamente similar a un m´etodo. Un constructor no devuelve ning´un valor (ni siquiera void). Al igual que los m´etodos, los constructores tambi´en pueden ser sobrecargados. Si no se especifica un constructor en una clase, se usa uno por defecto que consiste en asignar a todas las variables el valor 0, null o false seg´ un corresponda. Cuando un objeto no es referenciado por ninguna variable, el recolector de basura ejecuta el destructor de dicha clase y libera la memoria utilizada. El destructor de una clase no se llama cuando un objeto sale del ´ambito. Todos los destructores se llamar´ an antes de que finalice un programa. La palabra clave this es una referencia al mismo objeto en el cual se usa. La palabra clave base es una referencia a la clase padre del objeto en la que se usa (por defecto, Object). La palabra clave static hace que un miembro pertenezca a una clase en vez de pertenecer a objetos de dicha clase. Se puede tener acceso a dicho miembro antes de que se cree cualquier objeto de su clase y sin referencias a un objeto. 5.3.2.
M´ etodos en C Sharp.
Todo m´etodo debe ser parte de una clase, no existen m´etodos globales (funciones).
9
Por defecto, los par´ametros se pasan por valor. (N´otese que las listas y otras colecciones son variables por referencia (referencias al espacio reservado para esa lista en la pila) y que se pasa por valor al m´ etodo la referencia, pero el espacio reservado para la lista es com´ un, por lo que si elimina un elemento lo hace tambi´en de la original). El modificador ref fuerza a pasar los par´ ametros por referencia en vez de pasarlos por valor y obliga a inicializar la variable antes de pasar el par´ ametro. El modificador out es similar al modificador ref , con la diferencia de que no se obliga a inicializar la variable antes de pasar el par´ametro. Cuando ref y out modifican un par´ ametro de referencia, la propia referencia se pasa por referencia. El modificador params sirve para definir un n´umero variable de argumentos los cuales se implementan como una matriz. Un m´etodo debe tener como m´ a ximo un u ´nico par´ ametro params y ´este debe ser el u ´ltimo.Un m´etodo debe tener como m´ aximo un u ´nico par´ ametro params y ´este debe ser el u ´ltimo. Un m´etodo puede devolver cualquier tipo de dato, incluyendo tipos de clase. Ya que en C# las matrices se implementan como ob jetos, un m´etodo tambi´ en puede devolver una matriz (algo que se diferencia de C++ en que las matrices no son v´ alidas como tipos de valores devueltos). C# implementa sobrecarga de m´etodos, dos o m´ as m´etodos pueden tener el mismo nombre siempre y cuando se diferencien por sus par´ametros. El m´etodo Main es un m´ etodo especial al cual se refiere el punto de partida del programa. 5.3.3.
Microsoft Visual Studio.
Microsoft Visual Studio es un entorno de desarrollo integrado (IDE, por sus siglas en ingl´es) para sistemas operativos Windows. Soporta m´ ultiples lenguajes de programaci´ on tales como C++, C#, Visual Basic .NET, F#, Java, Python, Ruby, PHP; al igual que entornos de desarrollo web como 10
ASP.NET MVC, Django, etc., a lo cual sumarle las nuevas capacidades online bajo Windows Azure en forma del editor Monaco. Visual Studio permite a los desarrolladores crear sitios y aplicaciones web, as´ı como servicios web en cualquier entorno que soporte la plataforma .NET (a partir de la versi´ on .NET 2002). As´ı se pueden crear aplicaciones que se comuniquen entre estaciones de trabajo, p´aginas web, dispositivos m´ oviles, dispositivos embebidos, consolas, etc. Se utilizar´ a esta IDE para desarrollar el software.
Figura 2: Visual C# en ejecuci´ on.
11
5.4.
C´ odigo Fuente en C Sharp.
A continuaci´ on se muestran los c´odigos fuente en C# de cada una de las clases realizadas para implementar la m´ aquina expendedora virtual. 5.4.1.
pantalla-logeo.cs
using System ; using S y st em . C o l l e c t i o n s . G e n e r i c ; using System . ComponentModel ; using System . Data ; using System . Drawing ; using System . Linq ; using System . Text ; using System . Threadi ng . Tasks ; using S ystem . Windows . Forms ; using System . Data . Sql Cli en t ;
namespace M a q u i n a e x p e n d e d o r a a c r e d i t o
{ public p a r t i a l c l a s s f r m I n i c i o
: Form
{ public f r m I n i c i o ( )
{ InitializeComponen t () ;
} S q l C on n e c t io n C on ex io n = n u l l ; SqlCommand Comando; SqlDataReader Dr; string Str ; i nt F i l a s ;
private void b t n I n g r e s a r C l i c k ( o b j e c t
s e n de r , E ve nt Ar gs
e)
{ tr y
{ St r = URL. Str ; Conexion = new SqlConnection () ; C o ne x io n . C o n n e c t i o n S t r i n g = S t r ; Comando = new SqlCommand( ”spINGRESAR” , Co ne xi on ) ; Comando . CommandType = CommandType . StoredProcedure ; Comando. Parameters . Clear () ;
12
Comando. Par am ete rs . AddWithValue ( ”@ID” , txtU sua rio . Text) ; ˜ , Comando . Par am et er s . AddWi thVa lue ( ”@CONTRASENA” t x t C o n t r a s e ˜n a . Text) ; Comando. Pa ra me te rs . AddWithValue ( ”@VALOR” , cmbEstatus . Text) ; Conexion .Open() ; Dr = Comando. ExecuteReader () ; Fi la s = Convert . ToInt32(Dr. HasRows) ; i f (Dr . Read ()==true ) { Mess age Box . Show( ”BIENVENIDO ! ! ! ” , ” Inf orma tio n” , MessageBoxButtons .OK, MessageBoxIcon . Warning ) ; frmMENU mo st = new frmMENU( ) ; most .Show() ; t h i s . Hide () ; } else
{
˜ O MessageBox . Show( ”−USUARIO,CONTRASENA ESTATUS INCORRECTOS \ n−USUARIO NO EXISTENTE EN LA BASE DE DATOS” , ” E r r o r ” , MessageBoxButtons .OK, MessageBoxIcon . Warning ) ;
} Conexion . Close () ; Dr . Close () ; } catch (System . Exception ex)
{ MessageBox . Show(ex . Message , ”E rro r” , MessageBoxButtons .OK, MessageBoxIcon . Error ) ;
} } private void f r m I n i c i o F o r m C l o s i n g ( o b j e c t
FormClosingEventArgs e )
{ A p p l i c a t i o n . Ex i t ( ) ;
} } }
13
s e n de r ,
5.4.2.
pantalla-menu.cs
using System ; using S y st em . C o l l e c t i o n s . G e n e r i c ; using System . ComponentModel ; using System . Data ; using System . Drawing ; using System . Linq ; using System . Text ; using System . Threadi ng . Tasks ; using S ystem . Windows . Forms ; namespace M a q u i n a e x p e n d e d o r a a c r e d i t o { public p a r t i a l c l a s s frmMENU : Form { public frmMENU( ) {
InitializeComponen t () ;
} private void f r m Ma q ui n a Lo a d ( o b j e c t s e n d e r , E v en t Ar g s e )
{ } private void f r mM a q ui n a F o r m Cl o s in g ( o b j e c t
sender ,
FormClosingEventArgs e ) { A p p l i c a t i o n . Ex i t ( ) ;
} private void b t n C e r r a r C l i c k ( o b j e c t s e n de r , E ve nt Ar gs e )
{ fr mI ni ci o MOST = new f r m I n i c i o ( ) ; MOST. Show ( ) ; t h i s . Hide () ; } private void b u t t o n 2 C l i c k ( o b j e c t s e n de r , E ve nt Ar gs e ) { f r m R ef r e s c o s m o st ra r = new f r m R e f r e s c o s ( ) ;
mostrar .Show() ;
} private void b u t t o n 1 C l i c k ( o b j e c t s e n de r , E ve nt Ar gs e ) { f r mP a pa s m o s t r a r = new frmPapas () ;
mostrar .Show() ;
} } }
14
5.4.3.
Pantalla-comprar.cs
using System ; using S y st em . C o l l e c t i o n s . G e n e r i c ; using System . ComponentModel ; using System . Data ; using System . Drawing ; using System . Linq ; using System . Text ; using System . Threadi ng . Tasks ; using S ystem . Windows . Forms ; using System . Data . Sql Cli en t ; namespace M a q u i n a e x p e n d e d o r a a c r e d i t o
{ public p a r t i a l c l a s s f r m S a b r i t a s
: Form
{ public f r m S a b r i t a s ( )
{ InitializeComponen t () ;
} S q l C on n e c t io n C on ex io n = n u l l ; SqlCommand Comando; SqlDataReader Dr; string Str ; S q l T ra n s a c ti o n T r an s a cc i o n = n u l l ; i nt V a l o r R e t o r n a d o = 0 ; bool s u c c e s s = f a l s e ; public void a c t u a l i z a r ( ) { tr y
{ St r = URL. Str ; Conexion = new SqlConnection () ; C o ne x io n . C o n n e c t i o n S t r i n g = S t r ; Comando = new SqlCommand ( ”spCONSULTAR” , Co ne xi on ); Comando . CommandType = CommandType . StoredProcedure ; Comando. Parameters . Clear () ; Comando . Par amet ers . AddWithValue( ”@ID” , 200 1) ; Conexion .Open() ; Dr = Comando. ExecuteReader () ; i f (Dr. Read() == true )
{
15
lblNombre . Text = Convert . ToString (Dr[ 1 ] ) ; l b l C a n t i d a d . T ex t = ” C a n t id a d : ” + C o nv e r t . ToString(Dr[2]) ; l b l P r e c i o . T ex t = ” P r e c i o : $ ” + C o nv e rt . T o St r in g ( Dr [ 3 ] ) + ” . 0 0 ” ;
} Conexion . Close () ; Dr . Close () ; } catch (System . Exception ex)
{ MessageBox . Show(ex . Message , ”E rro r” , MessageBoxButtons .OK, MessageBoxIcon . Error ) ;
} } private void f r m S a b r i t a s L o a d ( o b j e c t s e n de r , E ve nt Ar gs e
)
{ actu aliz ar () ;
} private void b t nC o mp r a r C li c k ( o b j e c t s e n de r , E ve nt Ar gs e
)
{ t h i s . L o c a t i o n = new P o i n t ( 0 , 0 ) ;
Dial ogR esu lt Pregunta = MessageBox . Show(” ¿Deseas c om pr ar e s t e p r o du c t o ? ” , ” C o n f i r ma c ion” ´ , MessageBo xButtons . YesNo) ; i f ( Pregunta == Dial ogR esu lt . Yes)
{ tr y
{ St r = URL. Str ; Conexion = new SqlConnection () ; C o ne x io n . C o n n e c t i o n S t r i n g = S t r ; Conexion .Open() ; T r a n s a c c i o n = C o ne x io n . B e g i n T r a n s a c t i o n ( S ys te m . Da ta . I s o l a t i o n L e v e l . S e r i a l i z a b l e ) ; Comando = new SqlCommand ( ”spA PAPAS” , Conexion , Trans accio n ) ; Comando . CommandType = CommandType . StoredProcedure ; Comando. Parameters . Clear () ; Comando . Par amet ers . AddWithValue( ”@ID” , 200 1) ;
16
S q l P a r a m et e r V a l o r R et o r n o = new SqlParameter ( ”@Comprobacion” , SqlDbType. In t ) ; V a l o r R et o r n o . D i r e c t i o n = P a r a m e t e r D i r e c t i o n . Output ; Comando. Paramet ers .Add( Valor Retorn o ) ; Comando . ExecuteNonQuery () ; V a l o r R e t o r n a d o = C o nv e r t . T o In t 3 2 ( ValorRetorno . Value) ; i f ( V a l o r R e t o r n a d o == 1 ) s u c c e s s = true ;
} catch ( E x c e p t i o n )
{ M es sa ge Bo x . S how ( ” E r r o r e n l a o p e r a c i o ´n” , ” Erro r” , MessageBoxButtons .OK, MessageBoxIcon . Erro r ) ;
} finally { t h i s . L o c a t i o n = new P o i n t ( 3 0 0 , 1 5 0 ) ; i f ( s u c c e s s )
{ Transaccion .Commit() ; Conexion . Close () ; MessageBox . Show(”Compra re al iz ad a \ n s a t i s f a c t o r i a m e n t e ” , ” A vi so ” , MessageBoxButtons .OK, MessageBoxIcon . Informa tion ) ; actu aliz ar () ;
} else
{ Transa ccio n . Rollba ck () ; Conexion . Close () ;
} } } else
{ t h i s . L o c a t i o n = new P o i n t ( 3 0 0 , 1 5 0 ) ;
} } } }
17
5.5.
Procesos.
5.5.1.
consultar-papas.sql
create p r o c e d u r e spCONSULTAR
( @ID i nt ) as
begin b e g i n transaction
s e l e c t ∗ from Papas where id pr od uc to=@ID end
5.5.2.
INGRESAR.sql
create p ro ce du re spINGRESAR
( @ID varchar ( 5 0 ) , ˜ in t , @CONTRASENA @VALOR int output ) as
begin b e g i n transaction SELECT ∗ FROM Empleados WHERE id us ua ri o=@ID AND
˜ contrasen ˜ a=@CONTRASENA
end
18
5.5.3.
ACTUALIZAR-PAPAS.sql
CREATE PROCEDURE spA PAPAS
( @ID in t , @Comprobacion int output ) as
begin b e g i n transaction d e c l a r e @ c an t id a d int set @cantidad=( s e l e c t c a n t i d a d from Papas where i d p r o d u c t o =
@ID) −1 UPDATE Papas SET cant idad=@cantidad WHERE id pr od uc to=@ID
i f @@ERROR > 0 g ot o e r r o r commit transa ction set @Comprobacion =1
return erro r : RollBack tra nsacti on set @Comprobacion = 0 end
19
5.6.
Capturas de Pantalla.
Figura 3: Ventana de Login.
Figura 4: Menu de inicio del programa.
20
Figura 5: Ejemplo de ejecuci´ on del programa.
21
6. 6.1.
Conclusiones. Conclusiones Personales. Guillermo: Este proyecto ha sido una gran oportunidad para aplicar
los conceptos aprendidos durante el curso a lo largo de este semestre. Mis compa˜ neros como yo tomamos la decisi´ on de crear un software funcional y pr´actico que pueda ser utilizado en la vida cotidiana. Adem´ as de ser un gran reto, nos hemos familiarizado con la filosof´ıa y los conceptos de la programaci´on en general, puesto que hemos sido capaces de trabajar con un lenguaje de programaci´ on distinto al que vimos en el curso, me refiero a C#. A pesar de las claras diferencias entre la sintaxis y el paradigma utilizado por cada lenguaje, los principios b´ asicos son los mismos, y por supuesto, las t´ecnicas para resolver problemas tambi´en lo son. actica fue particularmente dif´ıcil de realizar, tomando Jessica: Esta pr´ en cuenta que no pose´ıa ning´ un conocimiento sobre C# y Visual Basic creo que el aprendizaje adquirido es notable. A pesar de ser inexperta con el programa, realizar la parte de dise˜ no me result´ o sencilla debido a que ´este es bastante amigable con el usuario y no requiere ser tan exacto como lo es utilizando el lenguaje C. on de este trabajo fue algo laboriosa por la cuesEnrique: La realizaci´ ti´ o n del manejo de la base de datos y la interfaz del usuario, pero finalmente pudimos enlazarlas a trav´ es de procedimientos almacenados con el fin de proteger y asegurar los datos de los usuarios. La elaboraci´o n fue en C# el cual es un lenguaje basado en C y C++, decidimos hacerlo con C# pues el manejo de la interfaz gr´afica es muy sencillo de dise˜ nar, pero tambi´ en contiene elementos fundamentos de programaci´ on estructurada ya que la realizaci´on de un enlace al procedimiento almacenado es muy similar al c´ odigo de la lectura de un FILE.
22
7.
Trabajos Futuros. Guillermo: Espero que en un futuro cercano, logremos aplicar los
conocimientos y experiencias adquiridas en el ´ambito de la programaci´ on para extender el alcance de nuestros proyectos, ser capaces de combinar aptitudes multidisciplinarias para dise˜ nar e implementar dispositivos que puedan ser utilizados en alg´ un ´area en particular. as de la implementaci´ on del c´odigo para lograr el prop´ osiJessica: Adem´ to de la m´ aquina expendedora, se debe realizar el circuito en f´ısico, el cual, a pesar de presentar cierto grado de dificultad es indispensable para que la experiencia de recibir los productos est´e completa. Podemos usar en conjunto Visual Basic y Arduino, la primera para generar una interface amable con el usuario para escoger sus productos y pagarlo con sus cr´editos y el segundo para asegurar de que los reciba. Enrique: Este programa al ser desarrollado en Visual Studio con las
u ´ ltimas actualizaciones de Frameworks, podemos asegurar que su funcionamiento se podr´ a realizar exitosamente a lo largo de muchos a˜ nos, pues el mismo sistema nos da la opci´on de diferentes compatibilidades de las versiones de los sistemas operativos.
23
8.
Bibliograf´ıa.
Referencias [1] http://www.maestrosdelweb.com/que-son-las-bases-de-datos/ [2] http://www.e-mas.co.cl/categorias/informatica/dinvirt.htm [3] http://unimooc.com/monedas-virtuales-que-es-bitcoin/ [4] https://es.wikipedia.org/wiki/Microsoft Visual Studio [5] https://es.wikipedia.org/wiki/C Sharp
24