Una aplicación de consola en C++ que facilite el registro, análisis y control del presupuesto personal de estudiantes universitarios, mediante una interfaz sencilla y almacenamiento local en archivos CSV, permitiendo visualizar reportes, detectar excesos de gasto y fomentar hábitos financieros responsables.
- Registrar gasto: Permite ingresar un nuevo gasto con monto, categoría, fecha y descripción.
- Mostrar gastos: Visualiza todos los gastos registrados en una tabla organizada.
- Eliminar gasto: Elimina un gasto específico utilizando su índice.
- Reporte por categoría: Genera un resumen de gastos por categoría, indicando total y porcentaje del total.
- Reporte por fecha: Genera un resumen de gastos por fecha específica.
- Reporte por mes: Genera un resumen mensual de los gastos registrados.
- Guardar y cargar CSV: Todos los gastos se guardan en un archivo
gastos.csvy se pueden cargar al iniciar la aplicación.
#include // Entrada y salida estándar #include // Contenedor vector #include // Manejo de cadenas #include // Archivos #include // Formato de salida #include // Límites de tipos #include // Algoritmos como sort, max, etc. #include // system(), atof() #include // isdigit()
struct Gasto { double monto; // Monto del gasto char categoria[20]; // Categoría del gasto char fecha[12]; // Fecha en formato dd/mm/yyyy char descripcion[50]; // Descripción del gasto };
| Variable | Tipo | Descripción |
|---|---|---|
gastos |
vector<Gasto> |
Almacena todos los gastos registrados |
nombre_archivo |
const string |
Nombre del archivo CSV (gastos.csv) |
opcion |
int |
Opción seleccionada por el usuario en el menú |
MAX_CAT |
int |
Máximo número de categorías en el reporte por categoría |
MAX_FECHAS |
int |
Máximo número de fechas en el reporte por fecha |
MAX_MESES |
int |
Máximo número de meses en el reporte por mes |
categorias |
char[MAX_CAT][20] |
Arreglo que almacena las categorías únicas |
totales |
double[MAX_CAT] |
Totales acumulados por categoría |
fechas |
char[MAX_FECHAS][12] |
Arreglo que almacena las fechas únicas |
totales_mes |
double[MAX_MESES] |
Totales acumulados por mes |
g |
Gasto |
Variable temporal para registrar un gasto |
indice |
size_t |
Índice de gasto para eliminar o modificar |
campo_monto, campo_categoria, campo_fecha, campo_desc |
char[] |
Campos temporales para leer CSV |
| Función | Descripción |
|---|---|
void pausa() |
Pausa la ejecución hasta que el usuario presione una tecla |
void borrar_pantalla() |
Limpia la consola |
void limpiar_buffer() |
Limpia el buffer de entrada cin para evitar errores |
void cargar_csv(vector<Gasto>&) |
Carga los gastos desde el archivo CSV |
void guardarCSV(const vector<Gasto>&) |
Guarda los gastos actuales en el archivo CSV |
bool validar_fecha(const char[]) |
Valida que la fecha ingresada tenga formato dd/mm/yyyy |
void registrar_gasto(vector<Gasto>&) |
Permite al usuario registrar un nuevo gasto |
void mostrar_gastos(const vector<Gasto>&) |
Muestra todos los gastos registrados en la consola |
void eliminar_gasto(vector<Gasto>&) |
Elimina un gasto seleccionando su índice |
void reporte_por_categoria(const vector<Gasto>&) |
Muestra un resumen de gastos por categoría |
void reporte_por_fecha(const vector<Gasto>&) |
Muestra un resumen de gastos por fecha |
void reporte_por_mes(const vector<Gasto>&) |
Muestra un resumen de gastos por mes |
El archivo gastos.csv sigue el siguiente formato: monto,categoria,fecha,descripcion 50.00,Alimentos,03/12/2025,Compra supermercado 100.50,Transporte,02/12/2025,Pasaje bus
- Ejecutar el programa.
- Inicializar mes.
- Seleccionar una opción del menú.
- Registrar, mostrar, eliminar gastos o generar reportes según se necesite.
- Todos los cambios se guardan automáticamente en gastos.csv.