Расчет бонуса сотрудника


Как я могу улучшить это?

#include "stdafx.h"
#include <iostream>

/*A program that accepts input of an employees' base salaries and years of service. 
Then it also calculates their bonus based on the years of service.
- 20 or more years of service, bonus = salary * 0.1 
- 10 or more years of service, bonus = salary * 0.05
- 5 or more years of service, bonus = salary * 0.025
Also the program should let the user to enter data until they want to stop. */

using namespace std;


int main() {
    int iSalary;
    int iService;
    float fBonus;
    int counter = 1;
    bool okcontinue = true;
    char idontchar; 

    while (okcontinue) { 
        cout << "You are employee #" << counter << " to use this.\n";
        cout << "Enter your base salary: \n";
        cin >> iSalary;
        cout << "Enter total # of years serviced: \n";
        cin >> iService;

        if (iService >= 20) fBonus = iSalary * 0.1;
        if ((iService < 20) && (iService >= 10)) fBonus = iSalary * 0.05;
        if ((iService < 10) && (iService >= 5)) fBonus = iSalary * 0.025;
        cout << "Your bonus is: " << fBonus << ". Enter 'e' to exit or 'c' to continue.\n";
        cin >> idontchar;

        if (idontchar == 'e') return 0;
        counter++;
        system("CLS");
    }
}


2142
-1
задан 9 сентября 2011 в 10:09 Источник Поделиться
Комментарии
1 ответ


  1. Не объявлять переменные перед их необходимости:

    int iSalary;
    int iService;
    float fBonus;
    int counter = 1;
    bool okcontinue = true;
    char idontchar;

    Объявляя их в момент первого использования, вы увидите, что они правильно инициализирован. Вместо того чтобы сканировать все, вплоть до функции к вершине.


  2. Уверен, если это работает для вас:

    system("CLS");

    Но это не портативный. Не волнуйтесь слишком много, а насчет очистки экрана (или научиться использовать библиотеки на платформе, как ncurses или эквивалент).


  3. Привести в порядок ваше состояние: (Nornagest чуть правильно он должен изменить порядок и поставить в условие else в противном случае кто-то с iService на >= 20 будет очень счастлив с несколькими бонус.)

    if      (iService >= 20) { fBonus = iSalary * 0.1;   }
    else if (iService >= 10) { fBonus = iSalary * 0.05; }
    else if (iService >= 5) { fBonus = iSalary * 0.025; }

  4. С плавающей точкой и округление проблем. Бизнес не такой. Они предпочтут вещи остаются точно. Так что вы можете использовать целые числа вместо поплавков. Но отслеживать зарплату в копейки, а не долларов.

4
ответ дан 9 сентября 2011 в 11:09 Источник Поделиться