Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Proyecto Final Pablo Chacon

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

Proyecto final Programación Avanzada II

Semana 9
Pablo chacón Rodríguez
26-12-2022
Técnico en informática
Estamos terminando tu participación en la asignatura Programación Avanzada II cuyo logro general es:
utiliza el lenguaje de programación Python en el desarrollo de algoritmos considerando la Programación
Orientada a Objetos, elementos de gestión de bases de datos, la elaboración de interfaces gráficas y
lenguaje MySQL con el objetivo de implementar programas que permitan la automatización de procesos y
el manejo eficiente de la información. A partir de la información que se presenta continuación, desarrolla
las actividades propuestas para dar cierre a tu proceso de aprendizaje en la asignatura. Se quiere abrir una
zapatería en un local del centro de la ciudad, pero antes, se requiere diseñar un sistema de base de datos
de todos los calzados que poseen en el depósito. Dentro de las variables que se registran de cada calzado
se tienen: marca, talla, modelo, color, tipo. Adicionalmente dentro de los requerimientos se pidió que la
base de datos sea implementada en el gestor de base de datos PHPMyAdmin, de forma conjunta con el
lenguaje de programación Python. En función a lo expuesto, completa las actividades siguientes:

1. Describe las clases atributos, objetos que forman parte del sistema. Adicionalmente describa un
constructor de la clase.

2. Implementa en el lenguaje de programación Python, considerando cada uno de los elementos descritos
en la pregunta anterior.

3. Ejecuta la instalación de la librería Tkinter y menciona los métodos que utilizarás en la elaboración de
un formulario

4. Describe el proceso para ejecutar la conexión con una base de datos desde el lenguaje de programación
Python.

5. Describe el proceso de configuración del software MySQL para la creación de una base de datos.

6. A partir del lenguaje de programación Python, ejecuta los comandos para la inserción, eliminación y
actualización de datos

Desarrollo:

Para la implementación completa de la tarea, utilice 4 códigos distintos:

El primero llamado main.py el cual consiste únicamente en ejecución de la ventana


Tkinter importando la librería y otro código llamado ventana.py que es el encargado de realizar las
funciones en la ventana:

Main.py

from tkinter import *

from ventana import *

def main():

root = Tk()

root.wm_title("Zapateria IACC")

app = Ventana(root)

app.mainloop()

if __name__ == "__main__":

main()

Posteriormente el código más potente del trabajo el cual es el de la ventana.py:

from tkinter import *

from tkinter import ttk

from Item import *

from tkinter import messagebox

class Ventana(Frame):

zapatos = Item()
def __init__(self, master=None):

super().__init__(master,width=900, height=500)

self.master = master

self.pack()

self.create_widgets()

self.llenaDatos()

self.habilitarCajas("disabled")

self.habilitarBtnOper("normal")

self.habilitarBtnGuardar("disabled")

self.id=-1

def habilitarCajas(self,estado):

self.txtMarca.configure(state=estado)

self.txtTalla.configure(state=estado)

self.txtModelo.configure(state=estado)

self.txtColor.configure(state=estado)

self.txtTipo.configure(state=estado)

def habilitarBtnOper(self,estado):

self.btnRegistrar.configure(state=estado)

self.btnModificar.configure(state=estado)

self.btnEliminar.configure(state=estado)

def habilitarBtnGuardar(self,estado):

self.btnGuardar.configure(state=estado)

self.btnCancelar.configure(state=estado)
def limpiarCajas(self):

self.txtMarca.delete(0,END)

self.txtTalla.delete(0,END)

self.txtModelo.delete(0,END)

self.txtColor.delete(0,END)

self.txtTipo.delete(0,END)

def limpiaGrid(self):

for item in self.grid.get_children():

self.grid.delete(item)

def llenaDatos(self):

datos = self.zapatos.consulta_item()

for row in datos:

self.grid.insert("",END,text=row[0], values=(row[1],row[2],
row[3],row[4],row[5]))

if len(self.grid.get_children()) > 0:

self.grid.selection_set( self.grid.get_children()[0] )

def fRegistrar(self):

self.habilitarCajas("normal")

self.habilitarBtnOper("disabled")

self.habilitarBtnGuardar("normal")

self.limpiarCajas()

self.txtMarca.focus()

def fGuardar(self):

if self.id ==-1:
self.zapatos.inserta_item(self.txtMarca.get(),self.txtTalla.get(),self.txtM
odelo.get(),self.txtColor.get(),self.txtTipo.get())

messagebox.showinfo("Insertar", 'Elemento insertado


correctamente.')

else:

self.zapatos.modifica_item(self.id,self.txtMarca.get(),self.txtTalla.get(),
self.txtModelo.get(),self.txtColor.get(),self.txtTipo.get())

messagebox.showinfo("Modificar", 'Elemento modificado


correctamente.')

self.id == -1

self.limpiaGrid()

self.llenaDatos()

self.limpiarCajas()

self.habilitarBtnGuardar("disabled")

self.habilitarBtnOper("normal")

self.habilitarCajas("disabled")

def fModificar(self):

selected = self.grid.focus()

clave = self.grid.item(selected,'text')

if clave == '':

messagebox.showwarning("Modificar", 'Debes seleccionar un


elemento.')

else:

self.id= clave

self.habilitarCajas("normal")

valores = self.grid.item(selected,'values')

self.limpiarCajas()

self.txtMarca.insert(0,valores[0])

self.txtTalla.insert(0,valores[1])
self.txtModelo.insert(0,valores[2])

self.txtColor.insert(0,valores[3])

self.txtTipo.insert(0,valores[4])

self.habilitarBtnOper("disabled")

self.habilitarBtnGuardar("normal")

self.txtMarca.focus()

def fEliminar(self):

selected = self.grid.focus()

clave = self.grid.item(selected,'text')

if clave == '':

messagebox.showwarning("Eliminar", 'Debes seleccionar un


elemento.')

else:

valores = self.grid.item(selected,'values')

data = str(clave) + ", " + valores[0] + ", " + valores[3]

r = messagebox.askquestion("Eliminar", "Deseas eliminar el


registro seleccionado?\n" + data)

if r == messagebox.YES:

n = self.zapatos.elimina_item(clave)

if n == 1:

messagebox.showinfo("Eliminar", 'Elemento eliminado


correctamente.')

self.limpiaGrid()

self.llenaDatos()

else:

messagebox.showwarning("Eliminar", 'No fue posible


eliminar el elemento.')

def fCancelar(self):
r = messagebox.askquestion("Calcelar", "Esta seguro que desea
cancelar la operación actual")

if r == messagebox.YES:

self.limpiarCajas()

self.habilitarBtnGuardar("disabled")

self.habilitarBtnOper("normal")

self.habilitarCajas("disabled")

def create_widgets(self):

frame1 = Frame(self, bg="#33FFF3")

frame1.place(x=0,y=0,width=900, height=80)

self.btnRegistrar=Button(frame1,text="Registrar",
command=self.fRegistrar, bg="#02D38D", fg="#000000")

self.btnRegistrar.place(x=200,y=15,width=100, height=50)

self.btnModificar=Button(frame1,text="Modificar",
command=self.fModificar, bg="#02D38D", fg="#000000")

self.btnModificar.place(x=370,y=15,width=100, height=50)

self.btnEliminar=Button(frame1,text="Eliminar",
command=self.fEliminar, bg="#02D38D", fg="#000000")

self.btnEliminar.place(x=540,y=15,width=100, height=50)

frame2 = Frame(self,bg="#d3dde3" )

frame2.place(x=10,y=100,width=300, height=395)

lbl1 = Label(frame2,text="Marca ")

lbl1.place(x=5,y=5)

self.txtMarca=Entry(frame2)

self.txtMarca.place(x=3,y=30,width=120, height=20)

lbl2 = Label(frame2,text="Talla: ")

lbl2.place(x=5,y=55)

self.txtTalla=Entry(frame2)

self.txtTalla.place(x=3,y=80,width=120, height=20)
lbl3 = Label(frame2,text="Modelo: ")

lbl3.place(x=5,y=105)

self.txtModelo=Entry(frame2)

self.txtModelo.place(x=3,y=130,width=120, height=20)

lbl4 = Label(frame2,text="Color: ")

lbl4.place(x=5,y=155)

self.txtColor=Entry(frame2)

self.txtColor.place(x=3,y=180,width=120, height=20)

lbl5 = Label(frame2, text="Tipo:")

lbl5.place(x= 5, y= 205)

self.txtTipo=Entry(frame2)

self.txtTipo.place(x= 3, y=230, width=120, height=20)

self.btnGuardar=Button(frame2,text="Guardar",
command=self.fGuardar, bg="green", fg="#000000")

self.btnGuardar.place(x=20,y=260,width=60, height=30)

self.btnCancelar=Button(frame2,text="Cancelar",
command=self.fCancelar, bg="red", fg="#000000")

self.btnCancelar.place(x=90,y=260,width=60, height=30)

frame3= Frame(self,bg= "#319B5A")

frame3.place(x=320,y=100,width=500, height=900)

self.grid = ttk.Treeview(frame3,
columns=("col1","col2","col3","col4","col5"))

self.grid.column("#0",width=50)

self.grid.column("col1",width=60, anchor=CENTER)

self.grid.column("col2",width=90, anchor=CENTER)

self.grid.column("col3",width=90, anchor=CENTER)

self.grid.column("col4",width=90, anchor=CENTER)

self.grid.column("col5",width=90, anchor=CENTER)

self.grid.heading("#0", text="Id", anchor=CENTER)

self.grid.heading("col1", text="Marca", anchor=CENTER)


self.grid.heading("col2", text="Talla", anchor=CENTER)

self.grid.heading("col3", text="Modelo", anchor=CENTER)

self.grid.heading("col4", text="Color", anchor=CENTER)

self.grid.heading("col5", text="Tipo", anchor=CENTER)

self.grid.place(x=320,y=100,width=570, height=900)

self.grid.pack(side=LEFT,fill = Y)

sb = Scrollbar(frame3, orient=VERTICAL)

sb.pack(side=RIGHT, fill = Y)

self.grid.config(yscrollcommand=sb.set)

sb.config(command=self.grid.yview)

self.grid['selectmode']='browse'

En este código se utiliza la librería tkinter la cual se importa al inicio de igual forma se importa otra clase
llamada item la cual proviene del código llamado item.py que es básicamente el que contiene las
funciones de la base de datos:

Item.py

import mysql.connector

class Item():

def __init__(self):

self.cnn = mysql.connector.connect(host="localhost", user="root",

password="admin", database="Zapateria")

def __str__(self):

datos=self.consulta_item()

aux=""
for row in datos:

aux=aux + str(row) + "\n"

return aux

def consulta_item(self):

cur = self.cnn.cursor()

cur.execute("SELECT * FROM Item")

datos = cur.fetchall()

cur.close()

return datos

def buscar_item(self, Id):

cur = self.cnn.cursor()

sql= "SELECT * FROM Item WHERE Id = {}".format(Id)

cur.execute(sql)

datos = cur.fetchone()

cur.close()

return datos

def inserta_item(self, Marca, Talla, Modelo, Color, Tipo):

cur = self.cnn.cursor()

sql='''INSERT INTO Item (Marca, Talla, Modelo, Color, Tipo)

VALUES('{}', '{}', '{}', '{}','{}')'''.format(Marca, Talla, Modelo,


Color, Tipo)

cur.execute(sql)

n=cur.rowcount

self.cnn.commit()

cur.close()

return n
def elimina_item(self,Id):

cur = self.cnn.cursor()

sql='''DELETE FROM Item WHERE Id = {}'''.format(Id)

cur.execute(sql)

n=cur.rowcount

self.cnn.commit()

cur.close()

return n

def modifica_item(self,Id, Marca, Talla, Modelo, Color, Tipo):

cur = self.cnn.cursor()

sql='''UPDATE Item SET Marca='{}', Talla='{}', Modelo='{}',

Color='{}', Tipo='{}' WHERE Id= '{}' '''.format(Marca, Talla,


Modelo, Color, Tipo,Id)

cur.execute(sql)

n=cur.rowcount

self.cnn.commit()

cur.close()

return n

Como observamos solo importamos lo que es el conector con la base de datos para hacer uso de esta, de
igual forma solo utilice un código SQL en Python el cual es para la creación de la base de datos y la tabla
que utilice la cree directamente en workbench, ya que de igual forma posee un entorno para escritura de
código SQL.

CrearBD.py

import mysql.connector

conn=mysql.connector.connect(host='localhost', user= 'root',


password='admin')

cur=conn.cursor()

cur.execute ('CREATE DATABASE Zapateria')


conn.close()

El código que utilice para la creación de la tabla fue el siguiente:

create table Item (

Id int not null auto_increment,

Marca varchar(15) not null,

Talla varchar (2) not null,

Modelo varchar (15) not null,

Color varchar (15) not null,

Tipo varchar (15) not null,

primary key (Id));

Posteriormente rellene datos con el programa de Python como muestro a continuación:

Pagina inicial:

Ingreso de dato:

Modificación:
Eliminación:
Podemos evidenciar la eficacia del código con lo solicitado en el proyecto. Utilice el entorno de desarrollo
de WorkBench porque es más amigable y cumple la misma función que phpMyAdmin.

También podría gustarte