Agusslo / Hall-of-Legends

EXAMENES LABO 2, LEER README

Repository from Github https://github.comAgusslo/Hall-of-LegendsRepository from Github https://github.comAgusslo/Hall-of-Legends

Hall of Legends image

CREA TU PROPIO PERSONAJE

Hola profes, buenas tardes. Les presento mi idea donde podras crear tu propio personaje!

¿Qué hace mi EXAMEN?

Este programa es una aplicación de Windows Forms diseñada para gestionar el acceso de usuarios mediante un inicio de sesión con correo electrónico y contraseña. Su propósito principal es autenticar a los usuarios y, en caso de éxito, permitirles acceder a una ventana principal donde se pueden realizar diversas operaciones como crear tu propio personaje de roleplay/modificarlo/eliminarlo, todo depende de los permisos que tengas(ya seas vendedor/supervisor/administrador). como anteriormente dije en el menu ademas podras ver los LOGS de los usuarios que se han registrado en todo este tiempo!

Clase PERSONAJE y sus descendientes

Todos los personajes (HUMANO, ORCO, ELFO) derivan de la clase base PERSONAJE. Cada uno tiene características y funcionalidades específicas que los distinguen.

Presentacion

Mi nombre es Agustin Lopez, tengo 20 años y desarrolle este programa para la materia de Laboratorio De Computacion 2 en UTN

Imagen1 Imagen2 Imagen3

Diagrama de Clase

Aquí está el diagrama de clase de mi proyecto:

DIAGRAMA CLASE

SQL SCRIPT

SERVER NAME SQL AGUS\SQLEXPRESS

Data Source=AGUS\SQLEXPRESS;Initial Catalog=personaje;Integrated Security=True;Encrypt=False

Deje en ADO el Resources miConexion con el valor Data Source=localhost/SQLEXPRESS;Initial para que reemplacen con su respectiva key :))

GO
/****** Object:  Database [personaje]    Script Date: 2/7/2024 14:12:56 ******/
CREATE DATABASE [personaje]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'personaje', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.SQLEXPRESS\MSSQL\DATA\personaje.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'personaje_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL16.SQLEXPRESS\MSSQL\DATA\personaje_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
 WITH CATALOG_COLLATION = DATABASE_DEFAULT, LEDGER = OFF
GO
ALTER DATABASE [personaje] SET COMPATIBILITY_LEVEL = 160
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [personaje].[dbo].[sp_fulltext_database] @action = 'enable'
end
GO
ALTER DATABASE [personaje] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [personaje] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [personaje] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [personaje] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [personaje] SET ARITHABORT OFF 
GO
ALTER DATABASE [personaje] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [personaje] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [personaje] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [personaje] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [personaje] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [personaje] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [personaje] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [personaje] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [personaje] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [personaje] SET  DISABLE_BROKER 
GO
ALTER DATABASE [personaje] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [personaje] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [personaje] SET TRUSTWORTHY OFF 
GO
ALTER DATABASE [personaje] SET ALLOW_SNAPSHOT_ISOLATION OFF 
GO
ALTER DATABASE [personaje] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [personaje] SET READ_COMMITTED_SNAPSHOT OFF 
GO
ALTER DATABASE [personaje] SET HONOR_BROKER_PRIORITY OFF 
GO
ALTER DATABASE [personaje] SET RECOVERY SIMPLE 
GO
ALTER DATABASE [personaje] SET  MULTI_USER 
GO
ALTER DATABASE [personaje] SET PAGE_VERIFY CHECKSUM  
GO
ALTER DATABASE [personaje] SET DB_CHAINING OFF 
GO
ALTER DATABASE [personaje] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF ) 
GO
ALTER DATABASE [personaje] SET TARGET_RECOVERY_TIME = 60 SECONDS 
GO
ALTER DATABASE [personaje] SET DELAYED_DURABILITY = DISABLED 
GO
ALTER DATABASE [personaje] SET ACCELERATED_DATABASE_RECOVERY = OFF  
GO
ALTER DATABASE [personaje] SET QUERY_STORE = ON
GO
ALTER DATABASE [personaje] SET QUERY_STORE (OPERATION_MODE = READ_WRITE, CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30), DATA_FLUSH_INTERVAL_SECONDS = 900, INTERVAL_LENGTH_MINUTES = 60, MAX_STORAGE_SIZE_MB = 1000, QUERY_CAPTURE_MODE = AUTO, SIZE_BASED_CLEANUP_MODE = AUTO, MAX_PLANS_PER_QUERY = 200, WAIT_STATS_CAPTURE_MODE = ON)
GO
USE [personaje]
GO
/****** Object:  Table [dbo].[TablaPersonajes]    Script Date: 2/7/2024 14:12:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[TablaPersonajes](
	[tipo] [nvarchar](50) NOT NULL,
	[nombre] [varchar](50) NOT NULL,
	[edad] [nvarchar](50) NOT NULL,
	[caracteristica] [varchar](50) NOT NULL,
	[resucitado] [bit] NOT NULL,
	[colorHumano] [nvarchar](50) NULL,
	[colorPelo] [nvarchar](50) NULL,
	[especieOrco] [nvarchar](50) NULL,
	[especieElfo] [nvarchar](50) NULL,
	[canibal] [bit] NULL,
	[inmortalidad] [bit] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[TablaPersonajes] ([tipo], [nombre], [edad], [caracteristica], [resucitado], [colorHumano], [colorPelo], [especieOrco], [especieElfo], [canibal], [inmortalidad]) VALUES (N'Humano', N'hola1', N'Joven', N'Enano', 1, N'Morocho', N'Negro', NULL, NULL, NULL, NULL)
INSERT [dbo].[TablaPersonajes] ([tipo], [nombre], [edad], [caracteristica], [resucitado], [colorHumano], [colorPelo], [especieOrco], [especieElfo], [canibal], [inmortalidad]) VALUES (N'Orco', N'agus', N'Adulto', N'Enano', 1, NULL, NULL, N'Orogs', NULL, 1, NULL)
INSERT [dbo].[TablaPersonajes] ([tipo], [nombre], [edad], [caracteristica], [resucitado], [colorHumano], [colorPelo], [especieOrco], [especieElfo], [canibal], [inmortalidad]) VALUES (N'Humano', N'ee', N'No_Especificado', N'No_Especificado', 0, N'No_Especificado', N'No_Especificado', NULL, NULL, NULL, NULL)
INSERT [dbo].[TablaPersonajes] ([tipo], [nombre], [edad], [caracteristica], [resucitado], [colorHumano], [colorPelo], [especieOrco], [especieElfo], [canibal], [inmortalidad]) VALUES (N'Humano', N'prueba1', N'No_Especificado', N'No_Especificado', 0, N'No_Especificado', N'No_Especificado', NULL, NULL, NULL, NULL)
INSERT [dbo].[TablaPersonajes] ([tipo], [nombre], [edad], [caracteristica], [resucitado], [colorHumano], [colorPelo], [especieOrco], [especieElfo], [canibal], [inmortalidad]) VALUES (N'Elfo', N'Sin nombre', N'No_Especificado', N'No_Especificado', 0, NULL, NULL, NULL, N'No_Especificado', NULL, 0)
GO
USE [master]
GO
ALTER DATABASE [personaje] SET  READ_WRITE 
GO 

Explicacion de mis WindowsForms

LOGIN

El formulario de inicio de sesión (Login) es una parte esencial de la aplicación, diseñada para gestionar el acceso de usuarios mediante correo electrónico y contraseña. Su objetivo principal es autenticar a los usuarios y permitirles el acceso seguro a la aplicación. A continuación, se detallan sus funciones principales:

  • Carga de Usuarios: Al iniciar, el formulario carga una lista de usuarios desde un archivo JSON (MOCK_DATA.json). Esta lista contiene los datos de los usuarios registrados, como correo electrónico, contraseña, nombre, apellido, y perfil.
  • Autenticación de Usuarios: Cuando un usuario intenta iniciar sesión, el formulario verifica las credenciales ingresadas contra la lista de usuarios cargada. Si las credenciales son correctas, se permite el acceso y se muestra la ventana principal del menú (Menu).
  • Registro de Accesos: Cada inicio de sesión exitoso se registra en un archivo de log (logs.log). Este registro incluye información como el correo electrónico del usuario, su nombre, apellido, legajo y perfil, junto con la fecha y hora del acceso.
  • Seguridad y Usabilidad: El formulario permite a los usuarios mostrar u ocultar la contraseña ingresada mediante una casilla de verificación. Esto mejora la seguridad durante la entrada de datos.
  • Acceso Rápido: Se proporciona una funcionalidad de acceso rápido con credenciales predefinidas para facilitar pruebas y demostraciones. Este acceso rápido también se registra en el archivo de log.
  • Manejo de Errores: El formulario incluye manejadores de excepciones para diversos escenarios, como la falta de archivos, errores de deserialización JSON, y problemas de permisos, asegurando que se informe adecuadamente al usuario de cualquier problema.

Este formulario garantiza un acceso seguro y controlado a la aplicación, permitiendo únicamente a usuarios autenticados interactuar con las funcionalidades principales de la misma.

Se crea una carpeta en documentos llamada ParcialAgus con el LOG guardado

image

INICIO RAPIDO

El formulario de inicio rápido (FormContraseñaRapida) permite a los usuarios acceder de manera rápida a la aplicación utilizando una contraseña predefinida. Sus funciones principales son:

  • Verificación de Contraseña: Permite a los usuarios ingresar una contraseña rápida (predefinida como "2004"). Si la contraseña es correcta, se cierra el formulario con un resultado exitoso; de lo contrario, muestra un mensaje de error indicando que la contraseña es incorrecta.
  • Alternar Visibilidad de Contraseña: Permite a los usuarios mostrar u ocultar la contraseña ingresada mediante una casilla de verificación.
  • Confirmación de Cierre: Pregunta a los usuarios si están seguros de que desean cerrar el formulario cuando intentan salir, asegurando que no se cierre accidentalmente.
  • Acceso Rápido con Enter: Permite a los usuarios confirmar la contraseña presionando la tecla Enter, mejorando la facilidad de uso.

REPITO, LA CONTRASEÑA ES 2004

image

MENU

El formulario Menu gestiona diversas funciones de la aplicación, enfocándose en la manipulación de personajes. Sus características principales son:

  • Configuración Inicial:
    • Establece la ruta de una carpeta específica en "Mis Documentos" para guardar configuraciones.
    • Configura una imagen de fondo si está disponible.
    • Configura un temporizador que actualiza la hora actual en el formulario cada segundo.
    • Muestra información del usuario (correo, hora de inicio de sesión y perfil).
  • Gestión de Personajes:
    • Permite agregar, modificar y eliminar personajes.
    • Restringe estas acciones según el perfil del usuario (supervisor o vendedor).
  • ListBox:
    • Configura el ListBox para mostrar personajes con una barra de desplazamiento horizontal.
    • Actualiza la lista de personajes mostrados según los filtros seleccionados (Humano, Orco, Elfo).
  • Guardar y Abrir:
    • Guarda la colección de personajes en un archivo XML.
    • Abre un archivo XML para cargar la colección de personajes.
  • Ordenamiento:
    • Permite ordenar la lista de personajes por edad, nombre y tamaño en orden ascendente o descendente.
  • Logs:
    • Permite ver logs guardados en una ruta especificada.
  • Eventos de Cierre:
    • Pregunta al usuario si está seguro de que desea cerrar la aplicación al intentar salir.

Cada una de estas funciones se implementa mediante métodos y eventos asociados a controles específicos del formulario.

Dentro del menu en archivos estan las opciones Guardar/Abrir XML, en configuracion ves los LOGS de los usuarios y en ordenar por: ordena en edad/nombre/tamaño

Se crea una carpeta en documentos llamada ParcialAgus con el XML guardado

image

FRM LOG

El formulario FrmLog está diseñado para visualizar logs almacenados en un archivo específico. Sus funcionalidades principales son las siguientes:

  • Carga de Logs:
    • Al inicializarse, lee el contenido del archivo de logs ubicado en la ruta especificada.
    • Si el archivo existe, muestra los logs en un área de texto (RTextBox) dentro del formulario.
    • Si el archivo no existe, muestra un mensaje informativo indicando que no se encontraron logs.

Este formulario proporciona una manera simple y segura de visualizar logs almacenados, manejar errores potenciales durante la lectura de archivos, y ofrece una experiencia de usuario intuitiva al interactuar con los registros de logs ademas de poseer una scrollbar en vertical.

el ejemplo de la imagen es mi propio perfil, pero enseña el apellido/nombre/legajo/perfil/correo y su respectiva fecha de logeo

image

FRM ELECCION

El formulario FrmEleccion permite al usuario elegir entre diferentes tipos de personajes (Humano, Orco, Elfo) y agregar uno seleccionado a través de formularios secundarios especializados.

  • Selección de Personaje:

    • Contiene tres opciones de RadioButton para seleccionar entre Humano, Orco o Elfo.
    • Implementa un método ResetearOtrosRadioButton para desmarcar los RadioButton que no están seleccionados cuando se marca uno nuevo.
  • Eventos de RadioButton:

    • Los eventos CheckedChanged de cada RadioButton (rbtnHumano, rbtnOrco, rbtnElfo) llaman al método ResetearOtrosRadioButton para asegurar que solo uno esté marcado a la vez.

Este formulario facilita la selección y creación de diferentes tipos de personajes dentro de la aplicación, asegurando que solo se pueda seleccionar un tipo a la vez y proporcionando manejo de errores y confirmación al cerrar.

image

AgregarPersonaje y sus hijos

Funcionamiento de la Clase AgregarPersonaje

La clase AgregarPersonaje es una forma abstracta para la creación de diferentes tipos de personajes en una aplicación de formularios Windows. Provee funcionalidades básicas y comunes para la creación de personajes, como la selección de edad y característicasy si esta resucitado.

AgregarOrco

Funcionamiento de la Clase AgregarOrco

La clase AgregarOrco extiende AgregarPersonaje y está diseñada para agregar y modificar personajes tipo "Orco". Permite al usuario especificar la especie del orco y su capacidad caníbal mediante controles de interfaz

AgregarElfo

Funcionamiento de la Clase AgregarElfo

La clase AgregarElfo extiende AgregarPersonaje y está destinada a agregar y modificar personajes tipo "Elfo". Permite al usuario especificar la especie del elfo y su estado de inmortalidad mediante controles de interfaz

AgregarHumano

Funcionamiento de la Clase AgregarHumano

La clase AgregarHumano extiende AgregarPersonaje y facilita la creación y modificación de personajes tipo "Humano". Permite al usuario seleccionar el color de piel y pelo del humano entre opciones predefinidas

image image image image

About

EXAMENES LABO 2, LEER README


Languages

Language:C# 100.0%