miércoles, 13 de octubre de 2010

Proyecto medio curso

Como proyecto de medio curso elegí hacer un inventario al que los usuarios "autorizados" pudieran hacer las modificaciones que quisieran a la base de datos.
Esta es la demostración de mi página:


Mi proyecto consta de dos bases de datos una tiene registrados a los usuarios que pueden acceder al sistema de inventarios y la otra base de datos son los productos que podemos modificar, eliminar, agregar y consultar.

Tiene la página principal hecha en html que consta de un formulario con campos de texto para teclear el nombre y la clave del usuario.

Y 7 programas en python, que es el de entrar(válida al usuario con la contraseña correcta), opciones(da a elegir entre agregar, eliminar, modificar o consultar productos), agregar, eliminar, modificar, consultar y consultar por nombre los productos.

Voy a explicar algunas partes de código que considero importantes de mi proyecto:

Primero que nada la página "principal" que es la única página estática que utilizo, consta de un formulario en el cual me piden nombre de usuario y contraseña, que son los que están guardados en la base de datos "usuarios".
Esta es la parte del formulario:

#Formulario pagina prinicipal




Los datos del formulario son enviados a "entrada.py" esta función se encarga de verificar si el usuario y la contraseña es correcta, si no se introduce alguno de esos datos al formulario o si el usuario o contraseña es incorrecta manda un mensaje de error según sea el caso.
Algo de código:
if entrada.has_key("usuario") and entrada["usuario"].value != "" and entrada.has_key("pasw"):
f = open('usuarios.txt')
existe = 0
print "
"
print "

Accediendo como %s\n

" % entrada["usuario"].value
for line in f:
linea = line.split(',')
usua = linea[0]
contr = linea[1]
if entrada["usuario"].value == usua and entrada["pasw"].value == contr:
existe = 1
print "

Elige alguna opcion:

"
print "
"
print "Agregar productos"
print "Modificar productos"
print "Eliminar productos"
print "Consultar productos"
print ""
print "
"
print "
"
Si los datos fueron introducidos correctamente se abre la siguiente página que es la que muestra las opciones agregar, modificar, eliminar o consultar productos.
En esta parte es en dónde se decide que acción se va a realizar, es decir cual sera el siguiente archivo.py que se va a generar.
if ent.has_key("opcion") and ent["opcion"].value != "":
if ent["opcion"].value == "1":
print "

Agregar productos

"
print "
"
print "
"
print ""
print ""
print ""
print ""
print ""
print ""
print "
"
print "
"

elif ent["opcion"].value == "2":
print "

Modificar algún producto

"
print "
"
print "
"
print ""
print ""
print ""
print "
"
print "
"

elif ent["opcion"].value == "3":
print "

Eliminar productos

"
print "
"
print "
"
print ""
print ""
print""
print"
"
print "
"

elif ent["opcion"].value == "4":
print "

Consultar

"
print "
"
print "
"
print "Por nombre"
print "Ver toda la base de datos"
print ""
print "
"
print "
"
En la opción agregar es en dónde se guarda el producto nuevo en la base de datos, primero que nada tenemos condiciones para controlar que siempre que se registre un producto a fuerzas se tenga que escribir su nombre y código, y los demás campos si pueden estar vacíos ya que mi programa en python permite escribir los campos vacíos como "no disponibles".
Ya que se cumplieron esas condiciones se abre la base de datos con la función f=open("base_datos.txt", "a"), es "a" para que los productos agregados se guarden debajo de los que ya existen, o si la base no existe crea una. Y se escribe la linea con las características del producto.
#Validar la entrada y dar un valor a los campos vacios
ent = cgi.FieldStorage()
if ent.has_key("nombre") and ent.has_key("codigo"):
if ent.has_key("cantidad") == 0:
cantidad = 'NoDisponible'
else:
cantidad = ent["cantidad"].value
if ent.has_key("marca") == 0:
marca = 'NoDisponible'
else:
marca = ent["marca"].value
if ent.has_key("precio") == 0:
precio = 'NoDisponible'
else:
precio = ent["precio"].value

#Se guarda la nueva linea en la base
f=open("base_datos.txt", "a")
f.write("%s,%s,%s,%s,%s,\n" % (ent["nombre"].value, ent["codigo"].value, cantidad, marca, precio))
f.close()

Después la función para eliminar productos, primero que nada válida que exista el producto con la clave introducida por el usuario si es así elimina el producto de nuevo abriendo la base de datos aunque esta vez solo como lectura, declaro una variable con el nombre de contenido que va a ser en la que se va a estar guardando el contenido del archivo si es que no coincide con el nombre y código del producto que se quiere eliminar. Para identificar que campos pertenecen a el nombre, código, marca etc., utilicé la función linea = line.split(',') que indica que los campos están separados por comas y para saber cual es cual escribí nombre = linea[0], código = linea[1], etc. Bueno ya que la variable contenido guardo todo menos la linea que corresponde al producto que se quiere eliminar ahora se abre un archivo como "w", con el mismo nombre para sobreescribir en el lo que ha guardado "contenido".
Algo de código:
entrada = cgi.FieldStorage()
existe = 0
if entrada.has_key("nnombre") and entrada["nnombre"].value != "" and entrada.has_key("ccodigo"):
f = open('base_datos.txt')
contenido = ''
for line in f:
linea = line.split(',')
nombre = linea[0]
codigo = linea[1]
cantidad = linea[2]
marca = linea[3]
precio = linea[4]
if entrada["nnombre"].value == nombre and entrada["ccodigo"].value == codigo:
print "

Producto eliminado

"
existe = 1
else:
contenido = contenido + line
f.close()
#Se sobreescribe en la base de datos la variable "contenido"
f = open ('base_datos.txt', 'w')
f.write(contenido)
f.close()
Ahora la función de modificar, que fue sinceramente con la que más batalle. Les voy mostrar como es que lo hice:
Primero que nada para modificar un producto me pide igual el nombre y clave si existen entran a las condiciones si no existe se manda un mensaje para que vuelvan a intentarlo. Cuando el nombre y clave coinciden con alguno de la base de datos se muestra un formulario con todos los campos llenos con las características de ese productos abiertos para ser modificado por el usuario, ya que se modificó se guarda en la base haciendo llamar a nuestro programa agregar.py(que ya expliqué anteriormente), bueno esa es la primera parte de modificar.

La segunda parte ahora se encarga de eliminar el producto con las características que entró por primera vez es decir se guardo en la base de datos el producto modificado pero el producto que se quiere modificar se quedo también en la base de datos entonces ahora se elimina esa linea(el mismo procedimiento que expliqué en mi función eliminar) para que solo quede el producto modificado.
entrada = cgi.FieldStorage()
existe=0
if entrada.has_key("nombre") and entrada.has_key("codigo"):
contenido = ''
f = open('base_datos.txt')
for line in f:
linea = line.split(',')
nombre = linea[0]
codigo = linea[1]
cantidad = linea[2]
marca = linea[3]
precio = linea[4]
if entrada["nombre"].value == nombre and entrada["codigo"].value == codigo:
print "

Modificar producto

"
print "
"
#Se manda llamar la funcion agregar, para escribir en la base el producto modificado, pero podemos observar que les dí a los campos un valor de entrada que son los datos que se tienen del producto
print "
"
print "Producto:"
print "Codigo del producto:"
print "Cantidad:"
print "Marca:"
print "Precio:"
print ""
print "
"
print "
"
existe = 1
else:
#Se elimina la linea sin modificar
contenido = contenido + line

if existe == 0:
print "

El producto no existe

"
print"
"
f.close()
f = open ('base_datos.txt', 'w')#Se sobreescribe en la base de datos
f.write(contenido)
f.close()
else:
print "

Escribe el nombre del producto

"

Y la función de consultar, esta función me permite seleccionar entre dos opciones consultar por nombre o ver toda la base de datos.
Consultar por nombre no tiene mucha ciencia solo busca la coincidencia en la base de datos con el nombre introducido y se muestran los productos, los productos se muestran en la pantalla en forma de tabla que la cree dinamicamente con un for.
Y ver toda la base de datos simplemente se abre la base en forma de lectura y se van imprimiendo los campos, igualmente en una tabla.
Aqui una imágen del código para crear la tabla:



Esas son las partes que considero importantes de mi código espero tengan oportunidad de verlas, cualquier duda o sugerencia dejen comentarios, yo trataré de responder lo mas pronto posible.

5 comentarios:

  1. 2 comentarios:
    Isaias Garza dijo...
    Hola compañera, se ve muy bien el video y la explicación.
    Que programa software usaste para grabar el video?


    14 de octubre de 2010 10:29
    Cecilia Urbina dijo...
    Hola, mira el programita se llama
    gtk-recordMyDesktop...te guarda los videos en formato .ogv para subirlo a you tube lo convertí a .avi
    14 de octubre de 2010 14:06

    ResponderEliminar
  2. Muy bien. Te pongo los 30 puntos completos por el proyecto y además cinco puntos extra por haber explicado también el código.

    ResponderEliminar
  3. oraleee te kedo bien chida la pag sandra ;)
    y el video tmb...te quedo bien pro jajajaj
    todo muy bien explicado (Y)

    pd: felicidades por tus 35 pts ^^

    ResponderEliminar
  4. esta muy bueno tu codigo
    todo bien explicado..
    guardado para futuras referencias (Y)

    ResponderEliminar