fundamentos de python con orientación a objetos y basado en problemas con bases de datos

Post on 11-Feb-2017

571 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Fundamentos de Python con Orientación a Objetos y Basado en Problemas

Caso Gestión Información de Proyectos con Bases de Datos

1. El Problema

Profesor: Carlos Arturo Castro Castro

El departamento de gestión de proyectos de una empresa desea manejar la información de sus proyectos

mediante una base de datos. De cada proyecto se tiene el código, título, fecha de inicio, fecha de finalización,

costo y los responsables de desarrollarlo. De cada responsable se conoce el código, nombre, teléfono fijo y

de algunos de ellos, el teléfono móvil. Una persona puede ser responsable de algunas actividades de varios

proyectos a la vez. Se conoce la fecha de asignación de un responsable a una actividad determinada. Una

actividad puede ser desarrollada por varios responsables. De cada actividad se conoce código, descripción,

fecha de inicio y fecha de finalización. La fecha de finalización de una actividad no puede ser superior a la

fecha de finalización del proyecto al que pertenece la actividad.

El Modelo Relacional Versión1 se presenta a continuación:

Nota: La clave primaria de la tabla resp_act_proy es la combinación de: CODRESP+CODACTIV+CODPROY

Elaborar un programa en Python que cargue un formulario con un menú con las opciones:

1.Proyectos 2. Actividades 3. Responsables 4. ActividadesxProyectos con Responsables 5. Listados

6. Terminar

Si se selecciona Proyectos, Cargar un formulario con los cuadros de texto Código, Nombre, Teléfono Fijo,

Teléfono Móvil y los botones para Ingresar, Consultar, Modificar y Borrar un Proyecto.

Si se selecciona Actividades, Cargar un formulario con los cuadros de texto y los botones para Ingresar,

Consultar, Modificar y Borrar una actividad.

Si se selecciona Responsables, Cargar un formulario con los cuadros de texto y los botones para Ingresar,

Consultar, Modificar y Borrar Un responsable.

Si se selecciona ActividadesxProyectos con Responsables Cargar un formulario con los cuadros de texto y

los botones para Ingresar, Consultar, Modificar y Borrar ActividadesxProyectos con Responsables.

Si selecciona Listados, Mostrar un formulario con los botones: 1 Listado de Proyectos con sus actividades. 2.

Listados de Responsables con sus actividades. Los listados se deben mostrar en QTableView

2. La herramientas

Intérprete de Python: Versión 2.7.8

https://www.python.org/downloads/

Diseñador de Ambiente gráfico para python 2.7

PYQT (Windows 32 bit installer)

http://www.riverbankcomputing.co.uk/software/pyqt/download

IDE para python 2.7

PyScripter-v2.5.3 (32 bit)

https://code.google.com/p/pyscripter/downloads/list

MYSQL para python 2.7

http://dev.mysql.com/downloads/file.php?id=454383

3. Instalar Herramientas

Instalar Python 2.7

Finalizar

Instalar PyQt4-4.11.3-gpl-Py2.7-Qt4.8.6-x32

Finalizar

Instalar PyScripter-v2.5.3-Setup

Finalizar

Instalar Mysql para Python

El motor de bases de datos seleccionado es MYSQL y utilizará la herramienta portable denominada

MOWES, que permite trabajar con la herramienta web PHPMYADMIN para crear y administrar la Base de

datos que se llamará BDPROYECTOS:

3.1 Ejecutar MOWES:

3.2 Abrir PHPMYADMIN en un Navegador WEB:

Se digita: http://localhost:81/phpmyadmin

Mowes Fue configurado para salir por el puerto 81

3.3 Crear la Base de Datos BDPROYECTOS

3.4 Crear la tabla RESPONSABLE:

Click en Grabar

3.5 Crear la tabla PROYECTO

3.5.1 Click en el link BDPROYECTOS

3.5.2 Y se procede igual:

Igual para la tabla Actividad:

Como la Clave Primaria de la tabla RESP_ACT_PROY está compuesta por CODRESP+CODACTIV+CODPROY,

Se procede un poco diferente:

3.6 Se crea la Tabla RESP_ACT_PROY sin Clave Primaria

3.7 Se crea la clave primaria compuesta con los tres campos

3.8 Crear las tres claves foráneas

3.8.1 Clave Foránea CODRESP

3.8.1.1 Se crea un índice para CODRESP

3.8.1.2 Click en el link Vista Relaciones

3.8.1.3 En la segunda columna del Item relaciones internas se selecciona la clave primaria en la tabla

RESPONSABLE (en la fila de la Clave Foránea CODRESP):

Click en grabar

Click en el link RESP_ACT_PROY, para crear las otras claves foráneas:

Click en vista Relaciones y se agregan las otras claves foráneas:

Click en grabar

Click en el link BDPROYECTOS para ver el diagrama:

Click en Diseñador:

Click el ícono Pequeños/grandes todos, para ver el contenido de las tablas:

Y Se reorganizan al gusto:

Click en el link BDPROYECTOS para luego crear el script de la Base de Datos

Click en exportar:

Chequear la opción Enviar (genera un archivo descargable)

Click en continuar

Se crear un archivo de texto llamado BDPROYECTOS.sql y se guarda en la carpeta configurada para

descargas

4. Arquitectura del Software

4.1 Se crearán tres paquetes: modelo, vista y control

4.1.1 El Paquete modelo, contendrá una clase por cada tabla de la base de datos. Cada Clase un

atributo por cada campo de la tabla. Un método inicializador de atributos, un método get y un

método set por cada atributo.

4.1.2 El Paquete control, contendrá una clase por cada tabla, cada Clase un método inicializador de

objeto tipo modelo, un método insertar, un método consultar, un método modificar, un

método borrar y un método listar (CRUD - Create, Read, Update and Delete-)

4.1.3 El Paquete vista, contendrá una interfaz gráfica diseñada con PYQT4 para dar respuesta al

problema planteado.

5. Código

5.1 Se crea una carpeta llamada pryProyectos, con tres carpetas: modelo, vita y control:

5.2 desde PYSCRIPTER se crea un módulo llamado__init__.py dentro de cada carpeta para

relacionarlas como paquetes:

5.3 con PYQT4, se diseña la interfaz gráfica:

5.3.1 Diseño del Formulario frmMenuPricipal

5.3.1.1 Ejecutar designer que está en la carpeta C:\Python27\Lib\site-packages\PyQt4

5.3.1.2 Crear un Main Window

5.3.1.3 Guardar el archivo con el nombre de frmMenuPricipal.ui en la carpeta C:\Python27\Lib\site-

packages\PyQt4

5.3.1.4 Crear el archivo frmMenuPrincipal.py utilizando el aplicativo que crea archivos .py a partir de

archivos.ui

5.3.1.5 Se ejecuta el cmd de DOS y se cambia a la carpeta C:\Python27\Lib\site-packages\PyQt4

5.3.1.6 Se ejecuta el siguiente comando para obtener el archivo .py de Python

pyuic4 -x frmMenuPrincipal.ui -o frmMenuPrincipal.py

5.3.1.7 copiar el archivo frmMenuPrincipal.py en la carpeta vista del proyecto

5.3.1.8 Abrir y ejecutar el formulario en PYSCRIPTER

5.3.2 Se crean los Formularios tipo Widget, para Proyectos, Actividades, Responsables,

FrmResp_Act_Proy, Listados, Listado de Proyectos con sus actividades y Listados de

Responsables con sus actividades

5.3.2.1 El Formulario para proyectos se llama FrmProyectos

5.3.2.2 FrmProyectos contiene 6 etiquetas (Labels)(una de ellas para el título), 5 cuadros de texto

(Plain Text Edit) llamados txtCod, txtTit, txtFini,txtFfin y txtCos. 4 botones de comando (Push

Button) llamdos btnGuardar, btnConsultar, btnModificar y btnBorrar

Se guarda con el nombre de FrmProyectos

5.3.2.3 FrmActividades contiene 5 etiquetas, 4 cuadros de texto y 4 botones de comando

5.3.2.4 FrmResponsables contiene 5 etiquetas, 4 cuadros de texto y 4 botones de comando

5.3.2.5 FrmResp_Act_Proy contiene 5 etiquetas, 4 cuadros de texto , 4 botones de comando y 1 Table

View

5.3.2.6 Se crean los archivos FrmProyectos.py, FrmActividades.py, FrmResponsables.py,

FrmResp_Act_Proy.py con el comando

pyuic4 archivo.ui -o archivo.py no es necesario la opción –x, ya que no se requiere de un ejecutable

interno. Estos formularios serán llamados externamente al darle click a las opciones del del menú qu

están el el formulario principal

pyuic4 FrmProyectos.ui -o FrmProyectos.py

pyuic4 FrmActividades.ui -o FrmActividades.py

pyuic4 FrmResponsables.ui -o FrmResponsables.py

pyuic4 FrmResp_Act_Proy.ui -o FrmResp_Act_Proy.py

5.3.2.7 Copiar los Archivos creados en la carpeta vista del proyecto y abrirlos con PYSCRIPTER

6. Codificación

Los formularios Ui_FrmProyectos, Ui_FrmActividades, Ui_FrmResponsables y Ui_FrmResp_Act_Proy,

requieren acceder al método show (para ser mostrados desde el menú principal). El método show se

encuentra implementado en la clase QWidget del módulo QtGui. Ver http://qt-project.org/doc/qt-

4.8/qtgui.html . Por lo tanto se debe expresar la herencia de los formularios con QtGui. QWidget y no con

object como viene desde el diseñador PYQT4.

Adicionalmente se debe implementar el método __init__, en la clase de cada formulario para lograr el

efecto del llamado al método show():

def __init__(self):

QtGui.QWidget.__init__(self)

self.setupUi(self)

En el formulario Principal se deben importar la clase de cada formulario:

En el Formulario principal se define la acción para cada menú de barra, y que no tiene submenú:

Como Listado de proyectos con sus actividades y Listado de Responsables con sus actividades, son

submenús, ya vienen adicionados desde el diseñador PYQT4.

Al Formulario principal se le adiciona la acción a cada menú de la barra y que no tiene submenú:

A los Menús, que no tienen submenú, se cambia la propiedad setTitle por setText, y el nombre del menú,

por el nombre de la acción.

Se invoca el método connect de la clase QObject del módulo QtCore, de tal manera que al darle click al

menú o submenú invoque los métodos asociados y que permiten mostrar cada formulario según sea el

caso:

Se programan los métodos para cada acción:

Al ejecutar el Formulario principal queda:

6.1 Codificar las clases del paquete modelo

6.1.1 Ver http://elviajedelnavegante.blogspot.com/2010/10/las-propiedades-property-de-

python.html

6.1.2 Clase Proyecto

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

# Author: Carlos Arturo

#

# Created: 06/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

class Proyecto(object):

def __init__(self, param_codigo, param_titulo, param_fechaIni,param_fechaFin,param_costo):

self.__codigo=param_codigo

self.__titulo=param_titulo

self.__fechaIni=param_fechaIni

self.__fechaFin=param_fechaFin

self.__costo=param_costo

def __getCodigo(self):

return self.__codigo

def __setCodigo(self, param_codigo = None):

self.__codigo = param_codigo

def __getTitulo(self):

return self.__titulo

def __setTitulo(self, param_titulo = None):

self.__titulo = param_titulo

def __getFechaIni(self):

return self.__fechaIni

def __setFechaIni(self, param_fechaIni = None):

self.__fechaIni = param_fechaIni

def __getFechaFin(self):

return self.__fechaFin

def __setFechaFin(self, param_fechaFin = None):

self.__fechaFin = param_fechaFin

def __getCosto(self):

return self.__costo

def __setCosto(self, param_costo = None):

self.__costo = param_costo

codigo = property(fget = __getCodigo, fset = __setCodigo, doc = 'Código')

titulo = property(fget = __getTitulo, fset = __setTitulo, doc = 'Título del proyecto')

fechaIni = property(fget = __getFechaIni, fset = __setFechaIni, doc = 'Fecha de Inicio del proyecto')

fechaFin = property(fget = __getFechaFin, fset = __setFechaFin, doc = 'Fecha de Finalización del

proyecto')

costo = property(fget = __getCosto, fset = __setCosto, doc = 'Costo')

6.1.3 Clase Actividad

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 08/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

class Actividad(object):

def __init__(self, param_codigo, param_descripcion, param_fechaIni,param_fechaFin):

self.__codigo=param_codigo

self.__descripcion=param_descripcion

self.__fechaIni=param_fechaIni

self.__fechaFin=param_fechaFin

def __getCodigo(self):

return self.__codigo

def __setCodigo(self, param_codigo = None):

self.__codigo = param_codigo

def __getDescripcion(self):

return self.__descripcion

def __setDescripcion(self, param_descripcion = None):

self.__descripcion = param_descripcion

def __getFechaIni(self):

return self.__fechaIni

def __setFechaIni(self, param_fechaIni = None):

self.__fechaIni = param_fechaIni

def __getFechaFin(self):

return self.__fechaFin

def __setFechaFin(self, param_fechaFin = None):

self.__fechaFin = param_fechaFin

codigo = property(fget = __getCodigo, fset = __setCodigo, doc = 'Código')

descripcion = property(fget = __getDescripcion, fset = __setDescripcion, doc = 'Descripción de la

Actividad')

fechaIni = property(fget = __getFechaIni, fset = __setFechaIni, doc = 'Fecha de Inicio de la actividad')

fechaFin = property(fget = __getFechaFin, fset = __setFechaFin, doc = 'Fecha de Finalización de la

Actividad')

6.1.3 Clase Responsable

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 08/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

class Responsable(object):

def __init__(self, codigo, nombre, telFijo,telMovil):

self.__codigo=codigo

self.__nombre=nombre

self.__telFijo=telFijo

self.__telMovil=telMovil

def __getCodigo(self):

return self.__codigo

def __setCodigo(self, codigo = None):

self.__codigo = codigo

def __getNombre(self):

return self.__nombre

def __setNombre(self, nombre = None):

self.__nombre = nombre

def __getTelFijo(self):

return self.__telFijo

def __setTelFijo(self, telFijo = None):

self.__telFijo = telFijo

def __getTelMovil(self):

return self.__telMovil

def __setTelMovil(self, telMovil = None):

self.__telMovil = telMovil

codigo = property(fget = __getCodigo, fset = __setCodigo, doc = 'Código')

nombre = property(fget = __getNombre, fset = __setNombre, doc = 'Nombre')

telFijo = property(fget = __getTelFijo, fset = __setTelFijo, doc = 'Teléfono Fijo')

telMovil = property(fget = __getTelMovil, fset = __setTelMovil, doc = 'Teléfono Móvil')

6.1.4 Clase Resp_Act_Proy

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 08/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

class Resp_Act_Proy(object):

def __init__(self, codResp, codActiv, codProy,fecha_Asig):

self.__codResp=codResp

self.__codActiv=codActiv

self.__codProy=codProy

self.__fecha_Asig=fecha_Asig

def __getCodResp(self):

return self.__codResp

def __setCodResp(self, codResp = None):

self.__codResp = codResp

def __getCodActiv(self):

return self.__codActiv

def __setCodActiv(self, codActiv = None):

self.__codActiv = codActiv

def __getCodProy(self):

return self.__codProy

def __setCodProy(self, codProy = None):

self.__codProy = codProy

def __getFecha_Asig(self):

return self.__fecha_Asig

def __setFecha_Asig(self, fecha_Asig = None):

self.__fecha_Asig = fecha_Asig

codResp = property(fget = __getCodResp, fset = __setCodResp, doc = 'Código Responsable')

codActiv = property(fget = __getCodActiv, fset = __setCodActiv, doc = 'Código Actividad')

codProy = property(fget = __getCodProy, fset = __setCodProy, doc = 'Código Proyecto')

fecha_Asig = property(fget = __getFecha_Asig, fset = __setFecha_Asig, doc = 'Fecha Asignación de la

Actividad')

6.2 Codificar las clases del paquete control

6.2.1 Clase ConexionMySQL

# -*- coding: utf-8 -*-

#!/usr/bin/python

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 06/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

import MySQLdb

class ConexionMySQL(object):

mensaje="ok"

conexion=None

cursor=None

lista=None

def __init__(self):

pass

def getLista(self):

return self.lista

def abrirBd(self,usuario,contrasena,baseDeDatos):

mensaje="ok"

try:

self.conexion = MySQLdb.Connect(host="127.0.0.1", port=3306, user=usuario,

passwd=contrasena, db=baseDeDatos)

self.cursor = self.conexion.cursor()

except MySQLdb.Error,msgError:

self.mensaje= "Problemas con la Base de Datos Error :%s"%msgError

except AttributeError as objAttributeError:

self.mensaje= "Problemas con la Base de Datos Error :"+objAttributeError[0]

return self.mensaje

def cerrarBd(self):

mensaje="ok"

try:

self.cursor.close()

self.conexion.close()

except MySQLdb.Error,msgError:

self.mensaje= "Problemas con la Base de Datos Error :%s"%msgError

except AttributeError as objAttributeError:

self.mensaje= "Problemas con la Base de Datos Error :"+objAttributeError[0]

return self.mensaje

def ejecutarComandoSql(self,comandoSql):

mensaje="ok"

try:

self.cursor.execute(comandoSql)

self.lista = list(self.cursor)

self.conexion.commit()

except MySQLdb.Error,msgError:

self.mensaje= "Problemas con la Base de Datos Error :%s"%msgError

except AttributeError as objAttributeError:

self.mensaje= "Problemas con la Base de Datos Error :"+objAttributeError[0]

return self.mensaje

6.2.2 Clase CtrProyecto

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 04/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

from modelo.Proyecto import *

from control.ConexionMySQL import *

from control.CtrProyecto import *

def main():

pass

if __name__ == '__main__':

main()

class CtrProyecto(object):

mensaje='ok'

objProyecto=None

lista=None

def __init__(self,Proyecto):

self.objProyecto=Proyecto

def getLista(self):

return self.lista

def getObjProyecto(self):

return self.objProyecto

def guardar(self):

codigo=self.objProyecto.codigo

titulo=self.objProyecto.titulo

fechaIni=self.objProyecto.fechaIni

fechaFin=self.objProyecto.fechaFin

costo=self.objProyecto.costo

comandoSql="INSERT INTO PROYECTO

VALUES('"+codigo+"','"+titulo+"','"+fechaIni+"','"+fechaFin+"',"+str(costo)+")"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def modificar(self):

codigo=self.objProyecto.codigo

titulo=self.objProyecto.titulo

fechaIni=self.objProyecto.fechaIni

fechaFin=self.objProyecto.fechaFin

costo=self.objProyecto.costo

comandoSql="UPDATE PROYECTO SET TITULO='"+

titulo+"',FECHAINI='"+fechaIni+"',FECHAFIN='"+fechaFin+"',COSTO="+str(costo)+" WHERE

CODIGO='"+codigo+"'"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def borrar(self):

codigo=self.objProyecto.codigo

comandoSql="DELETE FROM PROYECTO WHERE CODIGO='"+codigo+"'"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def consultar(self):

codigo=self.objProyecto.codigo

comandoSql="SELECT * FROM PROYECTO WHERE CODIGO='"+codigo+"'"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

self.objProyecto.titulo= self.lista[0][1]

self.objProyecto.fechaIni= self.lista[0][2]

self.objProyecto.fechaFin= self.lista[0][3]

self.objProyecto.costo= self.lista[0][4]

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def listar(self):

codigo=self.objProyecto.codigo

comandoSql="SELECT * FROM PROYECTO"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

6.2.3 Clase CtrActividad

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 04/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

from modelo.Actividad import *

from control.ConexionMySQL import *

from control.CtrActividad import *

def main():

pass

if __name__ == '__main__':

main()

class CtrActividad(object):

mensaje='ok'

objActividad=None

lista=None

def __init__(self,Actividad):

self.objActividad=Actividad

def getLista(self):

return self.lista

def getObjActividad(self):

return self.objActividad

def guardar(self):

codigo=self.objActividad.codigo

descripcion=self.objActividad.descripcion

fechaIni=self.objActividad.fechaIni

fechaFin=self.objActividad.fechaFin

comandoSql="INSERT INTO ACTIVIDAD

VALUES("+codigo+",'"+descripcion+"','"+fechaIni+"','"+fechaFin+"')"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def modificar(self):

codigo=self.objActividad.codigo

descripcion=self.objActividad.descripcion

fechaIni=self.objActividad.fechaIni

fechaFin=self.objActividad.fechaFin

comandoSql="UPDATE ACTIVIDAD SET

DESCRIPCION='"+descripcion+"',FECHAINI='"+fechaIni+"',FECHAFIN='"+fechaFin+"' WHERE

CODIGO="+codigo

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def borrar(self):

codigo=self.objActividad.codigo

comandoSql="DELETE FROM ACTIVIDAD WHERE CODIGO="+codigo

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def consultar(self):

codigo=self.objActividad.codigo

comandoSql="SELECT * FROM ACTIVIDAD WHERE CODIGO="+codigo

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

self.objActividad.descripcion= self.lista[0][1]

self.objActividad.fechaIni= self.lista[0][2]

self.objActividad.fechaFin= self.lista[0][3]

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def listar(self):

codigo=self.objActividad.codigo

comandoSql="SELECT * FROM ACTIVIDAD"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

6.2.4 Clase CtrResponsable

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 04/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

from modelo.Responsable import *

from control.ConexionMySQL import *

from control.CtrResponsable import *

def main():

pass

if __name__ == '__main__':

main()

class CtrResponsable(object):

mensaje='ok'

objResponsable=None

lista=None

def __init__(self,Responsable):

self.objResponsable=Responsable

def getLista(self):

return self.lista

def getObjResponsable(self):

return self.objResponsable

def guardar(self):

codigo=self.objResponsable.codigo

nombre=self.objResponsable.nombre

telFijo=self.objResponsable.telFijo

telMovil=self.objResponsable.telMovil

comandoSql="INSERT INTO RESPONSABLE

VALUES("+codigo+",'"+nombre+"','"+telFijo+"','"+telMovil+"')"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def modificar(self):

codigo=self.objResponsable.codigo

nombre=self.objResponsable.nombre

telFijo=self.objResponsable.telFijo

telMovil=self.objResponsable.telMovil

comandoSql="UPDATE RESPONSABLE SET

nombre='"+nombre+"',TELFIJO='"+telFijo+"',TELMOVIL='"+telMovil+" WHERE CODIGO="+codigo

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def borrar(self):

codigo=self.objResponsable.codigo

comandoSql="DELETE FROM RESPONSABLE WHERE CODIGO="+codigo

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def consultar(self):

codigo=self.objResponsable.codigo

comandoSql="SELECT * FROM RESPONSABLE WHERE CODIGO="+codigo

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

self.objResponsable.nombre= self.lista[0][1]

self.objResponsable.telFijo= self.lista[0][2]

self.objResponsable.telMovil= self.lista[0][3]

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def listar(self):

codigo=self.objResponsable.codigo

comandoSql="SELECT * FROM RESPONSABLE"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

6.2.5 Clase CtrResp_Act_Proy

# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------------

# Name: module1

# Purpose:

#

# Author: Carlos Arturo

#

# Created: 04/12/2014

# Copyright: (c) Carlos Arturo 2014

# Licence: <your licence>

#-------------------------------------------------------------------------------

from modelo.Resp_Act_Proy import *

from control.ConexionMySQL import *

from control.CtrResp_Act_Proy import *

def main():

pass

if __name__ == '__main__':

main()

class CtrResp_Act_Proy(object):

mensaje='ok'

objResp_Act_Proy=None

lista=None

def __init__(self,Resp_Act_Proy):

self.objResp_Act_Proy=Resp_Act_Proy

def getLista(self):

return self.lista

def getObjResp_Act_Proy(self):

return self.objResp_Act_Proy

def guardar(self):

codResp=self.objResp_Act_Proy.codResp

codActiv=self.objResp_Act_Proy.codActiv

codProy=self.objResp_Act_Proy.codProy

fecha_Asig=self.objResp_Act_Proy.fecha_Asig

comandoSql="INSERT INTO Resp_Act_Proy

VALUES('"+codResp+"',"+codActiv+","+codProy+",'"+fecha_Asig+"')"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def modificar(self):

codResp=self.objResp_Act_Proy.codResp

codActiv=self.objResp_Act_Proy.codActiv

codProy=self.objResp_Act_Proy.codProy

fecha_Asig=self.objResp_Act_Proy.fecha_Asig

comandoSql="UPDATE Resp_Act_Proy SET codResp='"+codResp+"',

codActiv="+codActiv+",codProy="+codProy+",fecha_Asig='"+fecha_Asig+"' WHERE

codResp='"+codResp+"' AND codActiv="+codActiv+" AND codProy="+codProy

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def borrar(self):

codResp=self.objResp_Act_Proy.codResp

comandoSql="DELETE FROM Resp_Act_Proy WHERE codResp='"+codResp+"' AND

codActiv="+codActiv+" AND codProy="+codProy

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def consultar(self):

codResp=self.objResp_Act_Proy.codResp

codActiv=self.objResp_Act_Proy.codActiv

codProy=self.objResp_Act_Proy.codProy

comandoSql="SELECT * FROM Resp_Act_Proy WHERE codResp='"+codResp+"' AND

codActiv="+codActiv+" AND codProy="+codProy

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

self.objResp_Act_Proy.fecha_Asig= self.lista[0][3]

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

def listar(self):

codResp=self.objResp_Act_Proy.codResp

comandoSql="SELECT * FROM Resp_Act_Proy"

objConexionMySQL=ConexionMySQL()

self.mensaje=objConexionMySQL.abrirBd("root","","bdproyectos")

if self.mensaje=='ok':

self.mensaje=objConexionMySQL.ejecutarComandoSql(comandoSql)

self.lista=objConexionMySQL.getLista()

if self.mensaje=='ok':

self.mensaje= objConexionMySQL.cerrarBd()

return self.mensaje

6.3 Terminar de codificar las clases del paquete vista

6.3.1 Clase Ui_FrmProyectos

Evento Click asociado a los botones btnGuardar, btnConsultar, btnModificar y btnBorrar

6.3.2 Clase Ui_FrmActividades

6.3.3 Clase Ui_FrmResponsables

6.3.4 Clase Ui_FrmResp_Act_Proy

top related