Answer the question
In order to leave comments, you need to log in
The program breaks. How to fix?
Hello, there is a problem. If, when entering a full name (in the constructor), enter them through a space, that is, Last Name First Name Middle Name, then the program, without asking anything else (other fields of the class) and without saying, jumps into a loop and loops there, again without asking for a menu item (goes against rules). How to pacify her?
PS: the code is written by a young mind and the dumbest mistakes are possible. When observing such, it is desirable to say what is wrong and show it as it should.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <time.h>
#include <Windows.h>
using namespace std;
class Payment {
public:
string FIO;
double oklad;
double nalog;
double nadbavka;
double nalogPensionniy;
int god;
int otrabotal;
int rabochieDni;
double nachislennayaSumma;
double yderjanayaSumma;
Payment() {
cout << "Введите данные плательщика: " << endl;
cout << "ФИО: " << endl; cin >> FIO;
cout << "Оклад ( за отработанный день ): "; cin >> oklad;
cout << "Год поступления на работу: "; cin >> god;
cout << "% надбавки: "; cin >> nadbavka;
cout << "Кол-во отработаных дней в месяце: "; cin >> otrabotal;
cout << "Кол-во рабочих дней в месяце: "; cin >> rabochieDni;
nalog = 0.13;
nalogPensionniy = 0.01;
nachislennayaSumma = NachislennayaSumma();
yderjanayaSumma = YderjannayaSumma();
}
double NachislennayaSumma();
void Show();
double YderjannayaSumma();
void SummaNaRyki();
void Staj();
};
//Стаж вычисляется : Полное кол - во лет прошедших от года поступления на работу до текущего года.
//Начисления: Сумма, начисленная за отработанные дни и надбавки т.е.доли от первой суммы.
//Удержания: Отчисления в пенсионный фонд(1 % от начисленной суммы) и подоходный налог(13 % от начисленной суммы без отчислений в пенсионный фонд..
double Payment::NachislennayaSumma() {
double nachislennaya, nachislennayaNadbavka;
nachislennaya = oklad * otrabotal;
nachislennayaNadbavka = nachislennaya * (nadbavka/100);
return nachislennaya + nachislennayaNadbavka;
}
void Payment::Show() {
cout << "Данные плательщика: " << endl;
cout << "ФИО: " << FIO << endl;
cout << "Оклад ( за один отработанный день ): " << oklad << endl;
cout << "Год поступления на работу: " << god << endl;
cout << "% надбавки: " << nadbavka << endl;
cout << "Кол-во отработаных дней в месяце: " << otrabotal << endl;
cout << "Кол-во рабочих дней в месяце: " << rabochieDni << endl;
cout << "Начисленная сумма: " << nachislennayaSumma << endl;
cout << "Удержанная сумма: " << yderjanayaSumma << endl;
}
double Payment::YderjannayaSumma() {
double summaPensyaNalog, summaNalog;
summaPensyaNalog = nachislennayaSumma * nalogPensionniy;
summaNalog = (nachislennayaSumma - summaPensyaNalog) * nalog;
return summaNalog + summaPensyaNalog;
}
void Payment::SummaNaRyki() {
cout << "Зарплата полученная плательщиком после налогов: " << nachislennayaSumma - yderjanayaSumma << endl;
}
void Payment::Staj() {
time_t currentTime;
struct tm* ct;
time(¤tTime);
ct = localtime(¤tTime);
cout << "Стаж работы: " << (ct->tm_year + 1900) - god << endl;
}
int main() {
setlocale(LC_ALL, "Russian");
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
Payment payment;
int menu = 10;
while (menu != 0) {
cout << "Меня плательщика: \n 1.Показать данные плательщика. \n 2.Показать стаж плательщика. \n 3.Показать сумму полученную плательщиком на руки. \n 0 - Выход" << endl;
cout << "> "; cin >> menu;
if (menu == 1) payment.Show();
if (menu == 2) payment.Staj();
if (menu == 3) payment.SummaNaRyki();
}
return 0;
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question