0% encontró este documento útil (0 votos)
5 vistas14 páginas

Sistema de Gestión de Usuarios y Empresas

El documento describe la implementación de un sistema de gestión de usuarios y empresas utilizando Python y la biblioteca tkinter para la interfaz gráfica. Se definen varias clases, incluyendo Persona, Usuario, UsuarioEstudiante, Empresa y EmpresaTecnologica, junto con sus métodos para manejar la creación, registro y visualización de información. Además, se incluye la lógica para la encriptación de contraseñas, la gestión de datos persistentes y las ventanas de inicio de sesión y paneles de usuario y empresa.

Cargado por

GaLaX
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas14 páginas

Sistema de Gestión de Usuarios y Empresas

El documento describe la implementación de un sistema de gestión de usuarios y empresas utilizando Python y la biblioteca tkinter para la interfaz gráfica. Se definen varias clases, incluyendo Persona, Usuario, UsuarioEstudiante, Empresa y EmpresaTecnologica, junto con sus métodos para manejar la creación, registro y visualización de información. Además, se incluye la lógica para la encriptación de contraseñas, la gestión de datos persistentes y las ventanas de inicio de sesión y paneles de usuario y empresa.

Cargado por

GaLaX
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1.

IMPORTS - Librerías usadas

python

import tkinter as tk

from tkinter import ttk, messagebox

import pickle

import os

from abc import ABC, abstractmethod

Explicación: Importa tkinter para la interfaz gráfica, pickle para guardar


datos, os para manejar archivos, y ABC para clases abstractas.

2. CLASE PERSONA - Abstracta base

python

class Persona(ABC):

@abstractmethod

def mostrar_info(self):

pass

Explicación: Define una plantilla abstracta. Cualquier clase que herede


de Persona DEBE tener el método mostrar_info(). No se puede instanciar
directamente.

3. CLASE USUARIO - Implementa Persona

python

class Usuario(Persona):

def __init__(self, nombre, cedula, correo, contrasena_encriptada,


titulos="", experiencia=""):

[Link] = nombre

[Link] = cedula

[Link] = correo
self.contrasena_encriptada = contrasena_encriptada

[Link] = False

[Link] = titulos

[Link] = experiencia

def mostrar_info(self):

return f"Usuario: {[Link]}, Títulos: {[Link]}, Experiencia:


{[Link]}"

Explicación: Crea usuarios con datos personales, títulos y


experiencia. contratado=False inicialmente. Implementa el método
abstracto mostrar_info().

4. CLASE USUARIOESTUDIANTE - Hereda de Usuario

python

class UsuarioEstudiante(Usuario):

def __init__(self, nombre, cedula, correo, contrasena_encriptada,


universidad, titulos="", experiencia=""):

super().__init__(nombre, cedula, correo, contrasena_encriptada,


titulos, experiencia)

[Link] = universidad

def mostrar_info(self):

return f"Estudiante: {[Link]}, Universidad: {[Link]},


Títulos: {[Link]}, Experiencia: {[Link]}"

Explicación: Usuario especializado con universidad. Reutiliza


constructor del padre con super() y sobrescribe mostrar_info() para
incluir la universidad.

5. CLASE EMPRESA - También Persona

python
class Empresa(Persona):

def __init__(self, nombre_empresa, tipo_empresa, correo_empresa,


contrasena_encriptada, cualidades_requeridas=""):

self.nombre_empresa = nombre_empresa

self.tipo_empresa = tipo_empresa

self.correo_empresa = correo_empresa

self.contrasena_encriptada = contrasena_encriptada

[Link] = []

self.cualidades_requeridas = cualidades_requeridas

def mostrar_info(self):

return f"Empresa: {self.nombre_empresa}, Busca:


{self.cualidades_requeridas}"

Explicación: Representa una empresa que busca empleados. Tiene lista


de empleados (empleados=[]) y especifica qué cualidades requiere.

6. CLASE EMPRESATECNOLOGICA - Hereda de Empresa

python

class EmpresaTecnologica(Empresa):

def __init__(self, nombre_empresa, tipo_empresa, correo_empresa,


contrasena_encriptada, tecnologia_principal, cualidades_requeridas=""):

super().__init__(nombre_empresa, tipo_empresa, correo_empresa,


contrasena_encriptada, cualidades_requeridas)

self.tecnologia_principal = tecnologia_principal

def mostrar_info(self):

return f"Empresa Tecnológica: {self.nombre_empresa}, Tecnología:


{self.tecnologia_principal}, Busca: {self.cualidades_requeridas}"
Explicación: Empresa especializada en tecnología.
Añade tecnologia_principal a los atributos de empresa y lo incluye en la
información mostrada.

7. CLASE CONEXIONUNIVERSITARIA - Gestor del sistema

python

class ConexionUniversitaria:

def __init__(self):

[Link] = []

[Link] = []

self.cargar_datos()

Explicación: Clase principal que maneja las listas de usuarios y


empresas. Llama a cargar_datos() al iniciar para recuperar información
anterior.

8. MÉTODOS DE CONEXIONUNIVERSITARIA

python

def encriptar(self, texto):

return [Link](texto)

def desencriptar(self, dato):

return [Link](dato)

def guardar_datos(self):

with open("conexion_data.pkl", "wb") as f:

[Link]({"usuarios": [Link], "empresas":


[Link]}, f)

def cargar_datos(self):
try:

if [Link]("conexion_data.pkl"):

with open("conexion_data.pkl", "rb") as f:

data = [Link](f)

[Link] = [Link]("usuarios", [])

[Link] = [Link]("empresas", [])

except Exception as e:

[Link]("Error", f"No se pudieron cargar los


datos: {e}")

[Link] = []

[Link] = []

Explicación:

 encriptar/desencriptar: Convierten texto a bytes y viceversa


(serialización pickle)

 guardar_datos: Guarda ambas listas en archivo


"conexion_data.pkl"

 cargar_datos: Intenta cargar datos del archivo si existe, si hay


error muestra mensaje

9. LOGINWINDOW - Ventana inicial

python

class LoginWindow:

def __init__(self, master, app):

[Link] = master

[Link] = app

[Link]("Iniciar Sesión")

[Link]("350x350")
[Link](master, text="Correo").pack(pady=5)

self.entry_correo = [Link](master)

self.entry_correo.pack()

[Link](master, text="Contraseña").pack(pady=5)

self.entry_contra = [Link](master, show="*")

self.entry_contra.pack()

[Link](master, text="Ingresar como Usuario",


command=self.login_usuario).pack(pady=10)

[Link](master, text="Ingresar como Empresa",


command=self.login_empresa).pack(pady=10)

[Link](master, text="Registrar Usuario",


command=self.registrar_usuario).pack(pady=10)

[Link](master, text="Registrar Empresa",


command=self.registrar_empresa).pack(pady=10)

Explicación: Crea ventana de login con dos campos (correo/contraseña)


y cuatro botones para diferentes acciones del sistema.

10. MÉTODOS LOGIN - Validación

python

def login_usuario(self):

c = self.entry_correo.get()

pw = self.entry_contra.get()

for u in [Link]:

if [Link] == c and
[Link](u.contrasena_encriptada) == pw:

UserDashboard([Link]([Link]), [Link], u)

return
[Link]("Error", "Credenciales inválidas")

Explicación: Obtiene datos de los campos, busca usuario por correo,


compara contraseña desencriptada. Si encuentra, abre dashboard del
usuario; si no, muestra error.

11. REGISTROUSUARIO - Formulario

python

class RegistroUsuario:

def __init__(self, master, app):

[Link] = master

[Link] = app

[Link]("Registrar Usuario")

[Link]("350x500")

[Link](master, text="Tipo de Usuario").pack(pady=5)

self.tipo_var = [Link](value="General")

[Link](master, textvariable=self.tipo_var,
values=["General", "Estudiante"]).pack()

campos = ["Nombre", "Cédula", "Correo", "Contraseña", "Títulos",


"Experiencia"]

[Link] = {}

for c in campos:

[Link](master, text=c).pack(pady=5)

e = [Link](master, show="*" if c == "Contraseña" else None)

[Link]()

[Link][c] = e
self.label_universidad = [Link](master, text="Universidad")

self.entry_universidad = [Link](master)

self.tipo_var.trace("w", self.actualizar_campos)

[Link](master, text="Guardar",
command=[Link]).pack(pady=20)

Explicación: Formulario con 6 campos básicos y combobox para tipo de


usuario. Crea diccionario entries para manejar todos los campos de
entrada.

12. ACTUALIZAR_CAMPOS - Formulario dinámico

python

def actualizar_campos(self, *args):

if self.tipo_var.get() == "Estudiante":

self.label_universidad.pack(pady=5)

self.entry_universidad.pack()

else:

self.label_universidad.pack_forget()

self.entry_universidad.pack_forget()

Explicación: Muestra u oculta el campo "Universidad" según si se


selecciona "Estudiante" en el combobox. Usa pack() para mostrar
y pack_forget() para ocultar.

13. GUARDAR USUARIO - Validación y creación

python

def guardar(self):

datos = {k: [Link]() for k, v in [Link]()}


if "" in [Link]():

[Link]("Error", "Todos los campos son


obligatorios")

return

tipo = self.tipo_var.get()

enc = [Link](datos["Contraseña"])

if tipo == "Estudiante":

universidad = self.entry_universidad.get()

if not universidad:

[Link]("Error", "Universidad es obligatoria


para estudiantes")

return

usuario = UsuarioEstudiante(datos["Nombre"], datos["Cédula"],


datos["Correo"], enc, universidad, datos["Títulos"], datos["Experiencia"])

else:

usuario = Usuario(datos["Nombre"], datos["Cédula"],


datos["Correo"], enc, datos["Títulos"], datos["Experiencia"])

[Link](usuario)

[Link].guardar_datos()

[Link]("Éxito", "Usuario registrado")

[Link]()

Explicación:

1. Obtiene datos de todos los campos

2. Valida que ningún campo esté vacío

3. Encripta la contraseña

4. Crea UsuarioEstudiante o Usuario según el tipo

5. Añade a lista de usuarios

6. Guarda datos en archivo


7. Muestra mensaje de éxito y cierra ventana

14. REGISTROEMPRESA - Similar a RegistroUsuario

python

class RegistroEmpresa:

# Estructura similar a RegistroUsuario pero para empresas

def actualizar_campos(self, *args):

if self.tipo_var.get() == "Tecnologica":

self.label_tecnologia.pack(pady=5)

self.entry_tecnologia.pack()

else:

self.label_tecnologia.pack_forget()

self.entry_tecnologia.pack_forget()

Explicación: Clase similar a RegistroUsuario pero para empresas.


Campo dinámico "Tecnología Principal" aparece solo para empresas
tecnológicas.

15. USERDASHBOARD - Panel de usuario

python

class UserDashboard:

def __init__(self, master, app, user):

[Link] = master

[Link] = app

[Link] = user

[Link]("Panel Usuario")

[Link]("350x300")
[Link](master, text=f"Bienvenido
{[Link]}").pack(pady=10)

estado = "Contratado" if [Link] else "Disponible"

[Link](master, text=f"Estado: {estado}").pack(pady=10)

[Link](master, text=user.mostrar_info()).pack(pady=10)

Explicación: Muestra panel personalizado con nombre del usuario,


estado laboral (contratado/disponible) y toda su información
usando mostrar_info().

16. EMPRESADASHBOARD - Panel de empresa

python

class EmpresaDashboard:

def __init__(self, master, app, empresa):

[Link] = master

[Link] = app

[Link] = empresa

[Link]("Panel Empresa")

[Link]("450x500")

[Link](master, text=empresa.mostrar_info()).pack(pady=10)

if isinstance(empresa, EmpresaTecnologica):

[Link](master, text=f"Tecnología Principal:


{empresa.tecnologia_principal}").pack(pady=10)

[Link](master, text="Ver Usuarios Disponibles",


command=self.ver_disponibles).pack(pady=10)

[Link](master, text="Ver Mis Contratados",


command=self.ver_contratados).pack(pady=10)

Explicación: Panel empresarial con información de la empresa y dos


botones principales: ver usuarios disponibles y ver usuarios ya
contratados.
17. VER_DISPONIBLES - Tabla de usuarios

python

def ver_disponibles(self):

v = [Link]([Link])

[Link]("Usuarios Disponibles")

tabla = [Link](v, columns=("Nombre", "Correo", "Cédula",


"Títulos", "Experiencia"), show="headings")

for c in ("Nombre", "Correo", "Cédula", "Títulos", "Experiencia"):

[Link](c, text=c)

[Link](fill="both", expand=True)

for u in [Link]:

if not [Link]:

[Link]("", "end", iid=[Link], values=([Link],


[Link], [Link], [Link], [Link]))

Explicación: Abre nueva ventana con tabla (Treeview) que muestra solo
usuarios con contratado=False. Muestra 5 columnas con información
completa.

18. CONTRATAR - Lógica de contratación

python

def contratar():

sel = [Link]()

if not sel:

return

cid = sel[0]

for u in [Link]:
if [Link] == cid:

[Link] = True

[Link](u)

[Link].guardar_datos()

[Link]("Éxito", "Usuario contratado")

[Link]()

return

Explicación: Al seleccionar usuario en tabla: cambia contratado a True,


añade a lista de empleados de la empresa, guarda cambios en archivo,
muestra éxito y cierra ventana.

19. VER_CONTRATADOS - Ver empleados

python

def ver_contratados(self):

v = [Link]([Link])

[Link]("Contratados")

tabla = [Link](v, columns=("Nombre", "Correo", "Cédula",


"Títulos", "Experiencia"), show="headings")

for c in ("Nombre", "Correo", "Cédula", "Títulos", "Experiencia"):

[Link](c, text=c)

[Link](fill="both", expand=True)

for u in [Link]:

[Link]("", "end", values=([Link], [Link], [Link],


[Link], [Link]))

Explicación: Similar a ver_disponibles() pero muestra solo usuarios que


están en [Link].

20. MAINLOOP - Punto de entrada


python

root = [Link]()

app = ConexionUniversitaria()

LoginWindow(root, app)

[Link]()

Explicación:

1. [Link]() crea ventana principal

2. ConexionUniversitaria() crea gestor de datos

3. LoginWindow() muestra pantalla de login

4. mainloop() inicia ciclo de eventos de tkinter

También podría gustarte