////////////////////////////////////////////////////////////////////////// // Fundamentos de Programación // ETS Informática y Telecomunicaciones // Universidad de Granada // Departamento de Ciencias de la Computación e Inteligencia Artificial // Autor: Juan Carlos Cubero ////////////////////////////////////////////////////////////////////////// // Actualización salarial #include #include using namespace std; /* CalculadoraSalario CalculadoraSalario() CalculadoraSalario(int min_exper_alta_sucursal, int min_fam_numerosa_sucursal, int min_edad_senior_sucursal, double max_sal_bajo_sucursal) void SetSalarioBase(double sal_base_mensual_trabajador) double SalarioFinal(int experiencia, int edad, int num_hijos) */ class CalculadoraSalario{ private: int min_exper_alta = 5, min_fam_numerosa = 2, min_edad_senior = 45; double max_sal_bajo = 1300; double sal_base = 1100; // Salario base por defecto bool EsCorrectoSalario (double un_salario){ return un_salario >= 0.0; } public: CalculadoraSalario(){ // Proporcionamos un constructor sin parámetros // Se dejarán los valores especificados en la declaración // de los datos miembro } // En el constructor establecemos los límites a considerar // para el cómputo de la actualización salarial // Prec: Todos positivos CalculadoraSalario (int min_exper_alta_sucursal, int min_fam_numerosa_sucursal, int min_edad_senior_sucursal, double max_sal_bajo_sucursal) { min_exper_alta = min_exper_alta_sucursal; min_fam_numerosa = min_fam_numerosa_sucursal; min_edad_senior = min_edad_senior_sucursal; max_sal_bajo = max_sal_bajo_sucursal; } void SetSalarioBase (double sal_base_mensual_trabajador){ if (EsCorrectoSalario(sal_base_mensual_trabajador)) sal_base = sal_base_mensual_trabajador; } double SalarioFinal(int experiencia, int edad, int num_hijos){ const double PORC_SUBIDA_SENIOR_Y_SAL_BAJO = 1.04, PORC_SUBIDA_NO_SENIOR_Y_SAL_BAJO = 1.01, PORC_SUBIDA_FAM_NUMEROSA = 1.02, PORC_BAJADA_SIN_EXPERIENCIA = 0.99; bool es_experiencia_alta, es_familia_numerosa, es_edad_senior, es_sal_bajo; double porcentaje_actualizacion; es_experiencia_alta = experiencia > min_exper_alta; es_familia_numerosa = num_hijos > min_fam_numerosa; es_sal_bajo = sal_base < max_sal_bajo; es_edad_senior = edad >= min_edad_senior; if (es_experiencia_alta){ if (es_edad_senior && es_sal_bajo){ porcentaje_actualizacion = PORC_SUBIDA_SENIOR_Y_SAL_BAJO; if (es_familia_numerosa) porcentaje_actualizacion = porcentaje_actualizacion * PORC_SUBIDA_FAM_NUMEROSA; } else porcentaje_actualizacion = PORC_SUBIDA_NO_SENIOR_Y_SAL_BAJO; } else porcentaje_actualizacion = PORC_BAJADA_SIN_EXPERIENCIA; return sal_base * porcentaje_actualizacion; } }; int main(){ const char JAEN = 'J'; const char GRANADA = 'G'; CalculadoraSalario calc_por_defecto; // <- No la vamos a usar. // Es sólo un ejemplo de constructor sin parámetros. // Se asignarán los valores por defecto CalculadoraSalario calc_sal_Jaen(1, 2, 44, 1100); CalculadoraSalario calc_sal_Granada(3, 3, 47, 1400); double sal_base_Jaen, sal_base_Granada, sal_final; int experiencia, edad, num_hijos; char letra_ciudad; bool es_Jaen, es_Granada, es_ciudad_correcta; string nombre; cout << "Actualización salarial\n"; cout << "\nIntroduzca el salario base mensual de la sucursal de Jaén: "; cin >> sal_base_Jaen; cout << "\nIntroduzca el salario base mensual de la sucursal de Granada: "; cin >> sal_base_Granada; cout << "\nIntroduzca los datos de los trabajadores" << "\nJ si es de Jaén y G si es de Granada" << "\nNombre (sin espacios en blanco), " << "experiencia, edad, número de hijos" << "\nPara terminar, introduzca com ciudad cualquier letra " << "distinta de " << JAEN << " y " << GRANADA; calc_sal_Jaen.SetSalarioBase(sal_base_Jaen); calc_sal_Granada.SetSalarioBase(sal_base_Granada); do{ cin >> letra_ciudad; es_Jaen = letra_ciudad == JAEN ; es_Granada = letra_ciudad == GRANADA; es_ciudad_correcta = es_Jaen || es_Granada; if (es_ciudad_correcta){ cin >> nombre; cin >> experiencia; cin >> edad; cin >> num_hijos; if (es_Jaen) sal_final = calc_sal_Jaen.SalarioFinal (experiencia, edad, num_hijos); else if (es_Granada) sal_final = calc_sal_Granada.SalarioFinal (experiencia, edad, num_hijos); cout << "\n\n"; cout << "\nSalario final de " << nombre << " -> " << sal_final; } }while (es_ciudad_correcta); // Entrada: // 1100 1200 J Pedro 4 47 1 G Juan 2 47 1 J Jesús 4 47 3 F // Salida: // 1144 1188 1166,8 }