SlideShare una empresa de Scribd logo
1 de 142
Descargar para leer sin conexión
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:Python27Libsite-packagesPyQt4
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:Python27Libsite-
packagesPyQt4
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:Python27Libsite-packagesPyQt4
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
Fundamentos de python con orientación a objetos y basado en problemas con bases de datos
Fundamentos de python con orientación a objetos y basado en problemas con bases de datos
Fundamentos de python con orientación a objetos y basado en problemas con bases de datos

Más contenido relacionado

La actualidad más candente

La actualidad más candente (9)

visual basic
visual basicvisual basic
visual basic
 
Dev c++ para vista y 7
Dev c++ para vista y 7Dev c++ para vista y 7
Dev c++ para vista y 7
 
Tutorial de CodeBlocks
Tutorial de CodeBlocksTutorial de CodeBlocks
Tutorial de CodeBlocks
 
Manual primavera p6 ing. estrella ruiz
Manual primavera p6   ing. estrella ruizManual primavera p6   ing. estrella ruiz
Manual primavera p6 ing. estrella ruiz
 
Dev c++
Dev c++Dev c++
Dev c++
 
visual.basic
visual.basicvisual.basic
visual.basic
 
NReports -Diseñador y Generador de Informes-
NReports -Diseñador y Generador de Informes-NReports -Diseñador y Generador de Informes-
NReports -Diseñador y Generador de Informes-
 
Manual visualc
Manual visualcManual visualc
Manual visualc
 
Exclusivo .net
Exclusivo .netExclusivo .net
Exclusivo .net
 

Destacado

5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIES
5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIES5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIES
5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIESDr. Ezriel Kornel
 
Basic Food Hygiene Training Cert.
Basic Food Hygiene Training Cert.Basic Food Hygiene Training Cert.
Basic Food Hygiene Training Cert.Nerfe Abante
 
Problem Formulation
Problem FormulationProblem Formulation
Problem FormulationAdri Jovin
 

Destacado (9)

5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIES
5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIES5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIES
5 TIPS FOR PROTECTING YOUR SPINE FROM LIFTING INJURIES
 
KalRaj Mishra
KalRaj Mishra KalRaj Mishra
KalRaj Mishra
 
KalRaj Mishra
KalRaj MishraKalRaj Mishra
KalRaj Mishra
 
KalRaj Mishra
KalRaj Mishra KalRaj Mishra
KalRaj Mishra
 
KalRaj Mishra
KalRaj MishraKalRaj Mishra
KalRaj Mishra
 
Basic Food Hygiene Training Cert.
Basic Food Hygiene Training Cert.Basic Food Hygiene Training Cert.
Basic Food Hygiene Training Cert.
 
Tecnología y técnica
Tecnología y técnica Tecnología y técnica
Tecnología y técnica
 
Problem Formulation
Problem FormulationProblem Formulation
Problem Formulation
 
Primeros Pasos en PyQt4
Primeros Pasos en PyQt4Primeros Pasos en PyQt4
Primeros Pasos en PyQt4
 

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

21158360 visual-basic
21158360 visual-basic21158360 visual-basic
21158360 visual-basicmflormc
 
Guia unidad ii programacion
Guia unidad ii programacionGuia unidad ii programacion
Guia unidad ii programacionDomingo Mendez
 
Phpstorm exposicion-villacres-michilena-alisson
Phpstorm exposicion-villacres-michilena-alissonPhpstorm exposicion-villacres-michilena-alisson
Phpstorm exposicion-villacres-michilena-alissonAlissVillacresMichil
 
Manual primavera raul rojas
Manual primavera     raul rojasManual primavera     raul rojas
Manual primavera raul rojasHéctor ALvarez
 
Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)
Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)
Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)Luis Lastra Cid
 
Fundamentos vb
Fundamentos vbFundamentos vb
Fundamentos vbvalerin01
 
Guía Redes e Internet parte 5.pdf
Guía Redes e Internet parte 5.pdfGuía Redes e Internet parte 5.pdf
Guía Redes e Internet parte 5.pdfAlbertoAndresMosquer
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendmenttes
 
INFOSAN VISUAL BASIC
INFOSAN VISUAL BASICINFOSAN VISUAL BASIC
INFOSAN VISUAL BASICFRANCIACOCO
 

Similar a Fundamentos de python con orientación a objetos y basado en problemas con bases de datos (20)

21158360 visual-basic
21158360 visual-basic21158360 visual-basic
21158360 visual-basic
 
21158360 visual-basic
21158360 visual-basic21158360 visual-basic
21158360 visual-basic
 
Guia unidad ii programacion
Guia unidad ii programacionGuia unidad ii programacion
Guia unidad ii programacion
 
Phpstorm exposicion-villacres-michilena-alisson
Phpstorm exposicion-villacres-michilena-alissonPhpstorm exposicion-villacres-michilena-alisson
Phpstorm exposicion-villacres-michilena-alisson
 
Visual basic-6-0-guia
Visual basic-6-0-guiaVisual basic-6-0-guia
Visual basic-6-0-guia
 
Manual primavera
Manual primaveraManual primavera
Manual primavera
 
Manual primavera
Manual primaveraManual primavera
Manual primavera
 
Manual primavera
Manual primaveraManual primavera
Manual primavera
 
Manual primavera raul rojas
Manual primavera     raul rojasManual primavera     raul rojas
Manual primavera raul rojas
 
Manual primavera
Manual primaveraManual primavera
Manual primavera
 
Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)
Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)
Actividad de aprendizaje sistemas operativos (Actividad diplomado USACH)
 
Fundamentos vb
Fundamentos vbFundamentos vb
Fundamentos vb
 
Guía Redes e Internet parte 5.pdf
Guía Redes e Internet parte 5.pdfGuía Redes e Internet parte 5.pdf
Guía Redes e Internet parte 5.pdf
 
Welcome to Django
Welcome to DjangoWelcome to Django
Welcome to Django
 
Diapositiva2
Diapositiva2Diapositiva2
Diapositiva2
 
Diapositiva2
Diapositiva2Diapositiva2
Diapositiva2
 
Visual fox-pro
Visual fox-proVisual fox-pro
Visual fox-pro
 
Clase 7, 11/9/2007
Clase 7, 11/9/2007Clase 7, 11/9/2007
Clase 7, 11/9/2007
 
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontendCombinación ganadora: Plone como CMS, tu framework preferido como frontend
Combinación ganadora: Plone como CMS, tu framework preferido como frontend
 
INFOSAN VISUAL BASIC
INFOSAN VISUAL BASICINFOSAN VISUAL BASIC
INFOSAN VISUAL BASIC
 

Último

sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7luisanthonycarrascos
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxEverardoRuiz8
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASfranzEmersonMAMANIOC
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdfAnthonyTiclia
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfyoseka196
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSaulSantiago25
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTFundación YOD YOD
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdfevin1703e
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptxGARCIARAMIREZCESAR
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUMarcosAlvarezSalinas
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...SuannNeyraChongShing
 
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVSebastianPaez47
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfDanielaVelasquez553560
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxSergioGJimenezMorean
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaSHERELYNSAMANTHAPALO1
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 

Último (20)

sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7sistema de construcción Drywall semana 7
sistema de construcción Drywall semana 7
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
Unidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptxUnidad 3 Administracion de inventarios.pptx
Unidad 3 Administracion de inventarios.pptx
 
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIASTEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
TEXTURA Y DETERMINACION DE ROCAS SEDIMENTARIAS
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
 
Calavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdfCalavera calculo de estructuras de cimentacion.pdf
Calavera calculo de estructuras de cimentacion.pdf
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 
Seleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusiblesSeleccion de Fusibles en media tension fusibles
Seleccion de Fusibles en media tension fusibles
 
Una estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NISTUna estrategia de seguridad en la nube alineada al NIST
Una estrategia de seguridad en la nube alineada al NIST
 
Residente de obra y sus funciones que realiza .pdf
Residente de obra y sus funciones que realiza  .pdfResidente de obra y sus funciones que realiza  .pdf
Residente de obra y sus funciones que realiza .pdf
 
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdfVALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
VALORIZACION Y LIQUIDACION MIGUEL SALINAS.pdf
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
4.6 DEFINICION DEL PROBLEMA DE ASIGNACION.pptx
 
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERUSesion 02 Patentes REGISTRO EN INDECOPI PERU
Sesion 02 Patentes REGISTRO EN INDECOPI PERU
 
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
Polimeros.LAS REACCIONES DE POLIMERIZACION QUE ES COMO EN QUIMICA LLAMAMOS A ...
 
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kVEl proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
El proyecto “ITC SE Lambayeque Norte 220 kV con seccionamiento de la LT 220 kV
 
clases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdfclases de dinamica ejercicios preuniversitarios.pdf
clases de dinamica ejercicios preuniversitarios.pdf
 
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptxPPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
PPT SERVIDOR ESCUELA PERU EDUCA LINUX v7.pptx
 
CICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresaCICLO DE DEMING que se encarga en como mejorar una empresa
CICLO DE DEMING que se encarga en como mejorar una empresa
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 

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

  • 1. 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. 2. La herramientas Intérprete de Python: Versión 2.7.8 https://www.python.org/downloads/
  • 3. Diseñador de Ambiente gráfico para python 2.7 PYQT (Windows 32 bit installer) http://www.riverbankcomputing.co.uk/software/pyqt/download
  • 4. 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
  • 5.
  • 8.
  • 9.
  • 11.
  • 12.
  • 13.
  • 14.
  • 17.
  • 18.
  • 19. 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:
  • 20.
  • 21. 3.2 Abrir PHPMYADMIN en un Navegador WEB: Se digita: http://localhost:81/phpmyadmin Mowes Fue configurado para salir por el puerto 81
  • 22.
  • 23. 3.3 Crear la Base de Datos BDPROYECTOS
  • 24.
  • 25. 3.4 Crear la tabla RESPONSABLE:
  • 26.
  • 28. 3.5 Crear la tabla PROYECTO 3.5.1 Click en el link BDPROYECTOS 3.5.2 Y se procede igual:
  • 29.
  • 30.
  • 31.
  • 32. Igual para la tabla Actividad:
  • 33. 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
  • 34.
  • 35. 3.7 Se crea la clave primaria compuesta con los tres campos
  • 36.
  • 37. 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
  • 38.
  • 39. 3.8.1.2 Click en el link Vista Relaciones
  • 40.
  • 41. 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):
  • 43. Click en el link RESP_ACT_PROY, para crear las otras claves foráneas:
  • 44.
  • 45.
  • 46.
  • 47. Click en vista Relaciones y se agregan las otras claves foráneas:
  • 49. Click en el link BDPROYECTOS para ver el diagrama:
  • 51.
  • 52. Click el ícono Pequeños/grandes todos, para ver el contenido de las tablas:
  • 53. Y Se reorganizan al gusto:
  • 54. Click en el link BDPROYECTOS para luego crear el script de la Base de Datos
  • 56. Chequear la opción Enviar (genera un archivo descargable)
  • 57. Click en continuar Se crear un archivo de texto llamado BDPROYECTOS.sql y se guarda en la carpeta configurada para descargas
  • 58.
  • 59.
  • 60. 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:
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72. 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:Python27Libsite-packagesPyQt4
  • 73.
  • 74. 5.3.1.2 Crear un Main Window
  • 75.
  • 76. 5.3.1.3 Guardar el archivo con el nombre de frmMenuPricipal.ui en la carpeta C:Python27Libsite- packagesPyQt4
  • 77. 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:Python27Libsite-packagesPyQt4
  • 78.
  • 79.
  • 80. 5.3.1.6 Se ejecuta el siguiente comando para obtener el archivo .py de Python  pyuic4 -x frmMenuPrincipal.ui -o frmMenuPrincipal.py
  • 81.
  • 82. 5.3.1.7 copiar el archivo frmMenuPrincipal.py en la carpeta vista del proyecto
  • 83.
  • 84. 5.3.1.8 Abrir y ejecutar el formulario en PYSCRIPTER
  • 85.
  • 86. 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
  • 87. 5.3.2.1 El Formulario para proyectos se llama FrmProyectos
  • 88. 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
  • 89. 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
  • 90. 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
  • 91. 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
  • 92. 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)
  • 93.
  • 94.
  • 95. 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.
  • 96. 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.
  • 97. 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:
  • 98. Al ejecutar el Formulario principal queda:
  • 99.
  • 100.
  • 101.
  • 102. 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>
  • 103. #------------------------------------------------------------------------------- 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
  • 104. 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
  • 105. # -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: module1 # Purpose: # # Author: Carlos Arturo # # Created: 08/12/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #-------------------------------------------------------------------------------
  • 106. 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
  • 107. 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
  • 108. # -*- 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
  • 109. 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
  • 110. # -*- coding: utf-8 -*- #------------------------------------------------------------------------------- # Name: module1 # Purpose: # # Author: Carlos Arturo # # Created: 08/12/2014 # Copyright: (c) Carlos Arturo 2014 # Licence: <your licence> #-------------------------------------------------------------------------------
  • 111. 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
  • 112. 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
  • 113. 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()
  • 114. 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 #
  • 115. # 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):
  • 116. 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)
  • 117. 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]
  • 118. 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 #
  • 119. # 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):
  • 120. 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)
  • 121. 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]
  • 122. 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
  • 123. # # 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
  • 124. 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)
  • 125. 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]
  • 126. 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
  • 127. # # 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
  • 128. 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':
  • 129. 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)
  • 130. 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
  • 131.
  • 132.
  • 134.
  • 135.
  • 137.
  • 138.