Está en la página 1de 22

Tarea 03, Mdulo 7: Python + Excel + Word + PPoint + OutLook + Interfaces

Fecha de entrega: 09-11-2011. Nombre de Integrantes: Celso Silva Cristian Fuentes.

ndice
Contenido Pgina

Introduccin....03 Desarrollo..04-16 Conclusin..17 Anexo.18-19 Pantallas de Salida..20-21 Referencias.22

Introduccin
En el presente informe se evidenciar el desarrollo de un par de ejercicios correspondiente a la actividad n3 del curso de Interfaces Graficas de Usuario de Ingeniera Civil en Informtica de la Universidad Catlica de Temuco. A grandes rasgos, la primera actividad consista en, mediante el lenguaje de programacin C, generar unos archivos con diversos registros aleatorios, para simular el trabajo del Call Control Center de una compaa telefnica. Luego mediante Python estos datos deberan ser ledos de los archivos e insertados a una base de datos en un motor MySQL. Adems se deban registrar ciertos informes en Word, Excel y PowerPoint, mediante Python y los registros ubicados en la base de datos de MySQL. Se explicar cmo se resolvi cada problemtica, y en lo posible explicar la mayor cantidad de cdigo, o las lneas ms importantes, de los programas generados tanto en C como en Python.

Desarrollo
La problemtica a resolver en esta actividad tena el siguiente enunciado: Una Central Telefnica necesita realizar un Call Control Center (CCC). Para ello se necesita un sistema informtico que genere informes estadsticos y financieros, los cuales se obtienen del motor de base de datos MySQL. La estructura de la Base de Datos es la siguiente:

Esta es la informacin bsica que se entrega en el enunciado del ejercicio. Ahora considerando lo anterior se debe desarrollar una serie de ejercicios. Lo primero que se solicit fue, el generar 6.000 clientes aleatorios, donde cada uno de ellos pertenezca a cualquiera de las 12 regiones. Generar 6.000 telfonos diferentes de 8 dgitos en la tabla de fonos asociados a los clientes. Un cliente puede tener un slo telfono. Por ultimo Generar 1.000.000 de registros aleatorios en la tabla call. El campo phone_o (origen) no puede ser igual al campo phone_d (destino). Estos telfonos deben existir en la tabla de fonos. Las fechas deben estar contenida entre 01-01-2011 al 31-12-2011. Las horas deben estar en el rango [00 - 23]. Los segundos entre [1 - 3.600].

Primer Proceso: Generacin de registros aleatorios a travs de C. Para generar los registros solicitados se cre un programa en C, que realizada esta accin. Se explicar la mayor parte del cdigo importante que realiza esta accin. Lo primero que se realiza es importar las libreras que se utilizarn durante el transcurso del programa, estas libreras son importadas por defecto al momento de generar el proyecto C.

Se deben generar las estructuras que sern utilizadas para la generacin de los registros solicitados. En este caso, como se muestra en la imagen a continuacin, se generaron una serie de estructuras, por ejemplo la estructura opciones contiene las variables nombre y apellido de tipo char. Esta estructura ayudar a contener un nombre y un apellido.

Cabe destacar que se realizaron ms estructuras, por ejemplo una estructura clte (clientes) con las combinaciones de nombre del cliente, apellidos y regin, otra estructura fonos, otra estructura llamadas, cada una con sus variables correspondientes. Adems en la imagen anterior se visualiza como se cre un arreglo de la estructura opciones, de largo 20, es decir contiene 20 campos para las variables de la estructura opciones (nombre, apellido), que posteriormente sern utilizados para generar 6.000 combinaciones de nombres y apellido aleatoriamente.

Luego de lo mencionado ya se comienza a trabajar en el main del programa en C, como se muestra en la imagen a continuacion:

Cabe destacar que la funcin srand(time(NULL)), sealada al incio del main nos permite asegurarnos de que al generar datos random estos sean realmente variados. Se comienza a trabajar en el llenado de algunas estructuras. Por ejemplo, en la imagen que se muestra a continuacin se crea un for para el llenado del arreglo nameApellido de la estructura opciones.

A continuacin en la siguiente imagen, se observa la declaracin de una serie de punteros y variables que sern utilizadas en el trascurso del programa.

Se inicia un ciclo while que se ejecutar 6000 veces. En dicho ciclo se abre un archivo llamado clientes.bin en modo de escritura binaria, en caso de existir el archivo se sobrescribir. En las variables randomico y randomico2 se genera un nmero random, para cada uno, entre el 0 y el 19 para cada ciclo del while. Se incrementa el ndice i del while para indicarle que queda un ciclo menos.

Dentro del while recin mencionado, se encuentra otro while que se ejecutar 15 veces por cada vez que se ejecuta el while anterior. Dentro de este ciclo while se obtiene un nombre y un apellido aleatorio del arreglo nameApellido. Este nombre y apellido es pasado carcter a caracter mediante el ciclo.

Luego de generado la combinacin del nombre y el apellido, se genera una regin aleatoria para este nombre. Y como se aprecia en la imagen a continuacin el nombre y apellido, junto con la regin es escrita en el archivo mediante la estructura cliente.

Luego se generan 6.000 nmeros aleatorios, mediante un ciclo for y una condicionante para que no se repitan, en el rango que se muestra a continuacin:

De esta forma se crean nmeros que sern utilizados luego como fonos. Para los fonos se abre un archivo en modo de escritura binaria y mediante un ciclo for que se ejecutar 6.000 veces se le indica que mediante la estructura creada al principio para fono y un arreglo se escribir el archivo con los registros correspondientes.

Luego se genera otro proceso para el llenado del archivo que contendr el 1.000.000 de llamadas, ayudado por la estructura para las llamadas. Al igual que el llenado de los otros archivos, se debe abrir uno en modo de escritura binaria y
7

mediante un for se generan el 1.000.000 de registros verificndose de que se cumpla la condicin de que el fono de origen debe ser diferente al fono de destino. Adems se calcula el tiempo de llamada, la duracin y la fecha. La imagen que se presenta a continuacin presenta el cdigo que realiza esta serie de acciones y mtodos:

Con esto se tienen generados todos los archivos con sus correspondientes registros, listos para ser ledos e ingresados a una base de datos MySQL a travez de Python Segundo Proceso: Insercin de registros a MySQL a travs de Python. Como se mencion recin, una vez que fueron generados estos datos a travs de C, se deban insertar a la Base de Datos en MySQL pero a travs de Python. Es por esto que se desarroll un programa en Python que realizar esta accin. Se explicar la mayor parte del cdigo importante que realiza esta accin. Lo primero que se realiza es importar las libreras que se utilizarn durante el transcurso del programa. Como se aprecia en la imagen se importan dos libreras, la ctypes que nos permite utilizar funciones propias del lenguaje C, y adems la librera MySQLLbd que nos permite trabajar con el motor base de datos MySQL en Python. Posterior a la importacin de libreras, se declaran las estructuras que permitirn leer el archivo C que contiene los datos generados para ser insertados a la base de datos en MySQL.
8

En este caso, como se muestra en la imagen recin vista, se puede ver que se declara una estructura con nombre llamadas, dentro de esta estructura se declaran todas las variables pertenecientes a esta y su tipo. Esta estructura, por ejemplo nos permitir leer el 1.000.000 de registros de llamadas que fueron generados en C. Aparte de esta estructura (llamadas), se declaran 2 estructuras ms, una cliente (de nombre clte) y una fono (de nombre fono) con sus variables correspondientes(no se muestran en la imagen debido a que la lgica es la misma). Lo siguiente a realizar es el definir las funciones que se utilizarn en el programa. En este caso se definieron 3 funciones que permitirn la insercin de datos a la base de datos en MySQL. Una de las funciones que se definieron, y que se explicar, se presenta a continuacin (la lgica de las otras 2 es prcticamente la misma):

Como se observa en la imagen al definir la funcin InsertarFono se le otorgan dos parmetros; uno es r2 que, como se explicar ms adelante, es un arreglo de estructura, y el otro parmetro es fOpen que utilizaremos para abrir el archivo a leer. Antes de insertar cualquier dato a la Base de Datos en MySQL debe haber una conexin con la base de datos. En la imagen que se presenta a continuacin se declara la variable que permitir la conexin. A esta variable (db) se le pasan como parmetros los datos del login para el servidor MySQL, es decir, el host, el usuario de MySQL, el password del usuario y por ltimo la base de datos a la cual conectarse.

Adems se declara otra variable (cursor), que como su nombre lo indica preparara el cursos para cuando se trabaje con tablas en MySQL. El proceso de insercin de datos en la Base de Datos es bastante simple. Lo primero que se debe realiz fue el abrir el archivo binario creado en C con los datos correspondientes generados. En este caso se abre el archivo fono.dat, que como su nombre lo indica, contiene los registros de fonos que deben ser insertados en la Base de Datos. Luego de abrir el archivo (fono.dat) en modo de lectura binaria (rb), se crea un arreglo de tipo estructura fono() del tamao de la cantidad de registros que se leern. Estas fueron las estructuras generadas al inicio del programa. Posterior a esto se ejecuta una sentencia sql que reinicia y vaca la tabla fonos (tabla en MySQL) en caso de que tuviera algn registro ya ingresado. Finalmente se utiliza la funcin InsertarFono, que como fue descrita anteriormente contiene el proceso con la sentencia sql para insertar los datos en la tabla correspondiente de nuestra base de datos en MySQL. La imagen a continuacin evidencia lo descrito en este prrafo.

Para la insercin de los otros datos, el proceso es el similar, se abre su archivo correspondiente, se crea el arreglo de la estructura con la que se trabajar, se verifica que la tabla a la cual se le insertarn datos no contenga alguno, y finalmente se utiliza la funcin correspondiente para insertar los datos ledos del archivo creado en C con los registros.

10

En trminos de los Informes, el sistema deber generar lo siguiente: Generar el siguiente MAIL MERGE en Ms-Office Word:

Generar el siguiente informe de salida a Ms-Office Excel del detalle de las llamadas de Enero y Diciembre del 2011. Se debe generar un Libro de Trabajo Call.xls, con 2 hojas (Enero y Diciembre). El formato de c/u de las hojas es:

11

Para trabajar tanto con documentos Word como Excel, se crearon programas Python que realizaran lo solicitado. Primero se trabaj con el programa Python con el cual se realizara el ejercicio relacionado con Word. Lo primero que se debe realizar, como en cualquier programa en Python, es importar las libreras que contienen los mtodos y funciones que sern utilizadas en el programa. Luego, como se aprecia en la imagen de la izquierda, se declar la estructura que ser utilizada junto con sus variables. Se crearon dos arreglos del tipo de estructura que recin fue declarada, los dos arreglos son lo que se sealan a continuacin, uno llamado fono2 y el otro llamada valor2.

Lo siguiente que se realiza es declarar una variable, a esta variable se le asigna la conexin a la Base de Datos, a travs de los atributos host, usuario de MySQL, password del usuario y por ltimo la base de datos a la cual se conectar.

Adems es creada una variable cursor que, como su nombre lo indica, nos servir como cursos a la hora de trabajar con la base de datos. A continuacin se declaran una serie de variables, junto con sus parmetros correspondientes que no permitirn trabajar con Word desde Python.

Dentro de un ciclo for Se realiza una consulta a la Base de datos, para obtener cada nmero telefnico de cada cliente.

12

Luego dentro del ciclo for recin mencionado, se genera otro ciclo for para poder consultar a la base de datos por el precio relacionado a un telfono en especfico, para cada resultado de la consulta anterior. La nueva consulta SQL es la que se puede observar en la imagen que se presenta a continuacin:

Se ejecuta una nueva sentencia select de MYSQL con un ciclo for que, en resumen, lo que hacen es consultar el telfono de destino de la llamada realizada por el telfono obtenido anteriormente.

Se consulta a la base de datos por el valor total de la llamada realizada. Mediante un ciclo for, esta consulta se realiza para cada llamada de los cltes, es decir en total, 1.000.000 de llamadas.

Luego de lo ya explicado a grandes rasgos, se comienza a escribir el documento Word, lo primero que se debe escribir es el encabezado del documento. Este encabezado se realiza de la forma en que se muestra en la imagen a continuacin para que la hoja de Word tenga el formato del informe Mail Merge descrito en el enunciado de la actividad.

13

Se crea un arreglo que contenga los meses del ao, arreglo que ser utilizado a continuacin en un ciclo for.

Mediante un ciclo for y una sentencia SQL a la base de datos, se obtiene el valor total de las llamadas por telfono para cada mes del ao.

Se escribe en el documento el valor resultante del clculo del valor total de llamadas por telfono para cada mes del ao.

Y finalmente se escribe en el documento el clculo del valor total final.

Para finalizar el programa en Python que permite generar el Mail Merge con el informe de las llamadas, se cierra el documento Word.

14

El programa en Python que ayudar a resolver el ejercicio del informe en Excel, sealado en el enunciado de la actividad, se detallar de forma general a continuacin. Lo primero, al igual que con el programa para Word, y cualquier porgrama en Python, es importar las libreras que se necesitarn en la aplicacin. Luego se declararon las columnas de la hoja de clculo Excel con las que se trabajarn. En este caso 5 columnas.

Se define la funcin con la que se trabajar, en este caso se define una funcin llamada Excel. Lo primero que realiza esta funcin es definir una variable libro que lo que realiza es crear un nuevo libro Excel, y una variable hoja que lo que realiza es crear una nueva hoja dentro del libro creado.

Mediante un ciclo for se escribe en la hoja del libro las columnas declaradas al inicio del programa.

Se genera la variable a la cual se le asignar la conexin a la Base de Datos en MySQL. Esta conexin se realiza indicndole el host, el usuario de MySQL, la contrasea de dicho usuario y por ltimo la base de datos a la cual se conectar.

Adems se declara una variable que servir, como su nombre lo indica, como cursor para cuando se trabaje con la base de datos. Luego se declaran dos variables, mediante las cuales se har una consulta a MySQL. La primera consulta por los datos necesarios para llenar las columnas de la hoja, donde el mes sea Enero. Y la segunda consulta lo mismo pero donde el
15

mes sea Diciembre. En la imagen a continuacin se puede observar las consultas recin descritas.

Se ejecuta la primera sentencia select de SQL y se manejan los resultados, mediante un ciclo for se seala que para cada elemento en el resultado de la consulta estos deben ser insertados en las celdas correspondientes de la hoja de clculo de Excel creada. La imagen de la izquierda evidencia el cdigo que realiza esta accin descrita. Se agrega una nueva hoja, que realizar lo mismo que la hoja anterior pero en vez de trabajar con el mes de Enero, esta hoja realizar la accin correspondiente para el mes de Diciembre.

Luego, al igual que el ejercicio anterior se ejecuta la sentencia correspondiente y mediante un ciclo for son insertados los resultados obtenidos, por la sentencia, a la hoja de clculo Excel. Con esto, se genera el informe en Excel, con el detalle de las llamadas de Enero y Diciembre, tal cual fue sealado en el enunciado de la actividad.

16

Conclusin
C1: Mediante el uso del mdulo PyWin32, provee de acceso a muchas funcionalidades de la api de win32, mediante esta podemos realizar diversas acciones dentro de nuestra mquina, tales como crear, modificar y eliminar documentos; mover el puntero del mouse, despegar ventanas de alerta o simples, etc. Gracias a esto podemos desarrollar aplicaciones ms completas y que interacten directamente con nuestra maquina a nivel de S.O.

C2: El manejo de SQL en esta tarea fue muy importante, debido a que deban hacerse consultas que a tablas que estaban relacionadas entre s, y una mediante otra. Es decir, una tabla estaba relacionada a otra mediante un referencia en una tercera tabla. Sin embargo en el desarrollo de esta tarea nos dimos cuenta que en realidad los que sabemos de SQL es bastante poco, lo que nos insta a abordar este tema ms a fondo, ya que lo necesitaremos durante todo nuestro futuro desempeo como ingenieros informticos.

C3: Nuevamente recalcamos la facilidad con la que Python, mediante sus innumerables mdulos, puede interactuar con diversos sistemas y funcionalidades de estos. Python es un lenguaje muy potente y elegante, y esto hace que realizar aplicaciones en l sea ms entretenido e interesante. Y como dice el zen de Python, hermoso es mejor que feo y simple es mejor que complejo.

17

Anexo
Anexo del programa en C que genera los valores aleatorios. Anexo de Variables y Funciones struct cltes struct opciones Estructura que contiene nombre, apellido y regin de un cliente Estructura que contiene nombre y apellido, que ser usada posteriormente para pasarle los datos a la estructura cltes

struct opciones Areeglo de estructuras de tipo opciones. Bsicamente es un nameApellido[20] arreglo de 20 nombres y apellidos. struct fono Estructura que contiene el telfono del cliente Estructura que contiene el fono de origen y el de destino la struct llamadas fecha y la duracin Arreglo de tipo cadena de caracteres, que contiene 20 char *nombre[] nombres a modo de String, cada uno en un ndice. Arreglo de tipo cadena de caracteres, que contiene 20 char *apellido[] apellidos a modo de String, cada uno en un ndice. FILE *cliente Punteros a Archivos que contendrn los datos generados de FILE *fono forma random. FILE *llamadas

Anexo del programa en Python que inserta los registros a la BD. Anexo de Variables y Funciones Estructura que sera utilizada para leer los datos de llamadas que fueron generados randomicamente y almacenados en un archivo mediante c class llamadas Estructura que sera utilizada para leer los datos de clientes que fueron generados randomicamente y almacenados en class clte un archivo mediante c Estructura que sera utilizada para leer los datos de fonos que fueron generados randomicamente y almacenados en class fono un archivo mediante c Puntero a archivo, sera utilizado para abrir los diversos fOpen archivos de llamadas, cltes, y fonos Funcion que realiza la insercion de llamadas en la tabla llamadas de la base de datos. Recibe como parametros r2 def que es un arreglo de estructuras de llamadas, el puntero al InsertaLlamadas(r2, archivo del que se leeran los datos e inicializa por defecto la fOpen, fecha=0) fecha.

18

Funcion que realiza la insercion de clientes en la base de def datos. Recibe como parametros: r2 que es un arreglo de InsertarClte(r2,fOpe estructuras de tipo cltes y fOpen que es el puntero al archivo n) desde donde se leeran los datos. Funcion que realiza la insercion de fonos en la base de def datos. Recibe como parametros: r2 que es un arreglo de InsertarFono(r2,fOp estructuras de tipo fono y fOpen que es el puntero al archivo en) desde donde se leeran los datos.

Anexo del programa en Python que trabaja con Office. Anexo de variables y funciones class eReg db fono2 valor2 Estructura con un solo campo de tipo char. Conexin a la base de datos, mediante el mdulo MySQLdb de Python. Arreglo de 250 estructuras de tipo eReg Arreglo de 250 estructuras de tipo eReg

19

Salidas de Pantalla

Salida de Pantalla de aplicacin que genera informe en Word.

Salida de Pantalla de aplicacin que genera informe en Excel.

20

Salida de Pantalla de tabla en MySQL con registros.

21

Referencias
1.- http://mysql-python.sourceforge.net/MySQLdb.html 2.- http://www.mysqltutorial.org/ 3.- http://educa2011.uct.cl/file.php/2343/PyWin32.pdf 4.- http://chuwiki.chuidiang.org/index.php?title=Crear_un_Excel_desde_Python

22

También podría gustarte