Registro de gastos personales con categorías tipadas

Aplicación en TypeScript para gestionar gastos personales con categorías tipadas, funciones para agregar, eliminar y resumir gastos fácilmente.

Breve Introducción

Registro de gastos personales con categorías tipadas (typescript)
DESCRIPCIÓN:
Una aplicación sencilla en TypeScript para gestionar un registro de gastos personales, con categorías tipadas y funciones para agregar, eliminar y resumir gastos.

NOTAS ADICIONALES:
Este ejemplo está diseñado para ejecutarse en un entorno Node.js con TypeScript. Es un modelo básico que puede extenderse con persistencia en archivos o bases de datos e interfaces de usuario.

EXPLICACIONES:
- Las interfaces Expense y Category definen los tipos para gastos y categorías, garantizando seguridad y claridad en el código.
- La clase ExpenseManager encapsula la lógica para gestionar los gastos, manteniendo un array interno y proporcionando métodos para manipularlo.
- El método addExpense verifica que la categoría sea válida antes de agregar el gasto.
- El método getTotal calcula la suma de todos los gastos registrados.
- El método getTotalByCategory devuelve el total gastado para una categoría específica.
- El método removeExpense permite eliminar un gasto mediante su id único.
- El uso de enums para las categorías ayuda a prevenir errores tipográficos y facilita el autocompletado.
- Los comentarios en el código están en italiano para facilitar la comprensión por parte de desarrolladores italianos.

Código de Ejemplo: typescript

// Definición de las categorías de gasto como enum para tipado estricto
enum Category {
    Alimentari = "Alimentari",
    Trasporti = "Trasporti",
    Svago = "Svago",
    Bollette = "Bollette",
    Altro = "Altro"
}

// Interfaz que representa un gasto individual
interface Expense {
    id: number; // identificador único del gasto
    descrizione: string; // descripción del gasto
    importo: number; // importe gastado
    categoria: Category; // categoría del gasto
    data: Date; // fecha del gasto
}

// Clase para gestionar el registro de gastos
class ExpenseManager {
    private expenses: Expense[] = [];
    private nextId: number = 1; // id progresivo para cada gasto

    // Añade un nuevo gasto al registro
    public addExpense(descrizione: string, importo: number, categoria: Category, data: Date = new Date()): Expense {
        if (importo <= 0) {
            throw new Error("El importe debe ser mayor que cero.");
        }

        const nuovaSpesa: Expense = {
            id: this.nextId++,
            descrizione,
            importo,
            categoria,
            data
        };

        this.expenses.push(nuovaSpesa);
        return nuovaSpesa;
    }

    // Elimina un gasto dado su id
    public removeExpense(id: number): boolean {
        const index = this.expenses.findIndex(e => e.id === id);
        if (index === -1) {
            return false; // gasto no encontrado
        }
        this.expenses.splice(index, 1);
        return true;
    }

    // Devuelve el total de todos los gastos
    public getTotal(): number {
        return this.expenses.reduce((acc, e) => acc + e.importo, 0);
    }

    // Devuelve el total gastado para una categoría específica
    public getTotalByCategory(categoria: Category): number {
        return this.expenses
            .filter(e => e.categoria === categoria)
            .reduce((acc, e) => acc + e.importo, 0);
    }

    // Devuelve todos los gastos
    public getAllExpenses(): Expense[] {
        return [...this.expenses]; // devuelve copia por seguridad
    }

    // Imprime todos los gastos de forma legible
    public printExpenses(): void {
        console.log("Registro de gastos personales:");
        this.expenses.forEach(e => {
            console.log(`ID: ${e.id} | ${e.data.toLocaleDateString()} | ${e.categoria} | ${e.descrizione} | €${e.importo.toFixed(2)}`);
        });
        console.log(`Total gastos: €${this.getTotal().toFixed(2)}`);
    }
}

// Ejemplo de uso
const manager = new ExpenseManager();

// Añadiendo algunos gastos
manager.addExpense("Compra en supermercado", 45.30, Category.Alimentari, new Date('2024-06-01'));
manager.addExpense("Billete de autobús", 2.50, Category.Trasporti);
manager.addExpense("Cine con amigos", 12.00, Category.Svago);
manager.addExpense("Facturas de luz", 60.00, Category.Bollette);

// Imprimiendo gastos
manager.printExpenses();

// Total para categoría Svago
console.log(`Total Svago: €${manager.getTotalByCategory(Category.Svago).toFixed(2)}`);

// Eliminando un gasto
const rimosso = manager.removeExpense(2);
console.log(rimosso ? "Gasto eliminado con éxito." : "Gasto no encontrado.");

// Impresión actualizada
manager.printExpenses();
×
×
×
¿Quieres regenerar la respuesta?
×
Exportar chat
Elige el formato de exportación
⏳ Generazione PDF in corso…
Allegati
×
⚠️ Estás a punto de cerrar el chat y pasar al generador de imágenes. Si no has iniciado sesión, perderás nuestro chat. ¿Confirmas?
👁 Estás viendo un chat compartido en modo temporal. No se guardará.
💬
×
Prompts guardados
×
Nota privada
×
Etiqueta
×
Buscar en todos los chats
×
Tus insights
Analizando…
×
Preferencias de IA
Nombre del asistente 30
Longitud de las respuestas
Modelo de IA
Respuestas estructuradas
Incluir ejemplos
Usar emojis
Guíame, no resuelvas Pistas y preguntas en vez de la solución hecha
Más ajustes →
×
Compartir este chat
Quien abra este enlace podrá ver el chat o añadirlo a su perfil como chat propio.
⚠️ Atención: también se compartirán los archivos adjuntos del chat. Quien lo añada recibirá una copia en su propia carpeta.
Chat compartido
Alguien ha compartido un chat contigo. ¿Solo quieres verlo o añadirlo a tus chats?
⚠️ Atención: también se compartirán los archivos adjuntos del chat. Quien lo añada recibirá una copia en su propia carpeta.
×

📌 Mensajes guardados

Cargando...

×

Historial de Chat

programas-ejemplo · HISTORIAL DE CHAT

Cargando...

Preferencias de IA

×
  • 🟢 BásicoRespuestas rápidas y esenciales para estudiar
  • 🔵 MedioMayor calidad para estudio y programación
  • 🟣 AvanzadoRazonamiento complejo y análisis detallado
Explicar Pasos

¿Qué se necesita?

Interfaces TypeScript para definir la estructura de gastos y categorías.

Clase ExpenseManager para gestionar gastos: agregar, eliminar, resumir por categoría y total.

Funciones utilitarias para validar e imprimir gastos.

Configuración TypeScript: tsconfig.json con target ES6 y módulo CommonJS.

Dependencia: Node.js para ejecución, no se requieren librerías externas.

Entorno de desarrollo recomendado: Visual Studio Code con extensión TypeScript.

No se requieren conexiones de hardware ni Arduino en este proyecto de software.

Temas Similares

Conversión de un archivo JavaScript simple a TypeScript
Ejemplo básico para convertir un archivo JavaScript simple a TypeScript con tipos explícitos, mejorando la seguridad y legibilidad del código.
Calculadora de terminal con tipos básicos
Calculadora de terminal en TypeScript que realiza operaciones básicas con números usando tipos seguros y manejo de errores sin dependencias externas.
Validador de correo electrónico con anotación de tipo en TypeScript
Validador de correo electrónico en TypeScript con anotaciones de tipo para validar entradas y salidas usando expresiones regulares básicas.
Formateador de fecha y hora con tipos nativos
Formateador simple en TypeScript que usa tipos nativos Date e Intl.DateTimeFormat para mostrar fecha y hora en formato local italiano sin dependencias externas.
Contador de palabras en una cadena
Programa en TypeScript que cuenta palabras en una cadena usando split y filtros para resultados precisos, ideal para análisis de texto sencillo y modificable.
Mapa de traducciones clave-valor con Record en TypeScript
Ejemplo completo de uso del tipo Record en TypeScript para crear mapas de traducciones clave-valor con manejo de errores y soporte multilingüe.
Convertidor Celsius/Fahrenheit con funciones tipadas
Convertidor simple de temperaturas Celsius a Fahrenheit en TypeScript con funciones tipadas para asegurar precisión y seguridad en el desarrollo.
Validador de contraseña con funciones puras
Validador de contraseña en TypeScript con funciones puras que verifica longitud mínima, mayúsculas, minúsculas, números y caracteres especiales.