Aplicación en TypeScript para gestionar gastos personales con categorías tipadas, funciones para agregar, eliminar y resumir gastos fácilmente.
// 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();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.