Решение для печати информации на экран в C ++? - PullRequest
0 голосов
/ 01 февраля 2012

Я должен сделать цикл, чтобы собрать всю информацию из пользовательского ввода сотрудников.Как вы можете видеть, я получил разделы, в которых я спрашиваю пользователя, сколько сотрудников и какова их информация.Теперь все, что мне нужно, это вывести эту информацию на экран следующим образом, без промежутков между каждым и с несколькими пробелами между ними:

Weekly Payroll:
Name...............Title........Gross.......Tax.........Net

----------------------------------------    

Ebenezer Scrooge.....................Partner...250.00......62.25.....187.75

Bob Cratchit...............................Clerk.......15.00........2.00.......13.00

И вот что у меня есть:

#include <iostream>
using namespace std;


const int MAXSIZE = 20;


struct EmployeeT
{
    char name[MAXSIZE];
    char title;
    double SSNum;
    double Salary;
    double Withholding_Exemptions;
};

EmployeeT employees[MAXSIZE];

int main()
{

cout << "How many Employees? ";
int numberOfEmployees;
cin >> numberOfEmployees; 



    while(numberOfEmployees > MAXSIZE)
    {

            cout << "Error: Maximum number of employees is 20\n" ;
            cout << "How many Employees? ";
            cin >> numberOfEmployees; 
    }


            char name[MAXSIZE];
            int title;
            double SSNum;
            double Salary;
            double Withholding_Exemptions;


            for (int count=0; count < numberOfEmployees; count++)
            {
                cout << "Name: ";
                cin >> employees[ count ].name; 

                cout << "Title: ";
                cin >> employees[ count ].title;

                cout << "SSNum: \n";
                cin >> employees[ count ].SSNum;

                cout << "Salary: \n";
                cin >> employees[ count ].Salary;

                cout << "Withholding Exemptions: \n";
                cin >> employees[ count ].Withholding_Exemptions; 
            }

            double gross;
            double tax;
            double net;
            double adjusted_income;

            gross = employees[ count ].Salary;
            adjusted_income = employees[ count ].Salary - 1.00;
            tax = adjusted_income * .25;
            net = gross - tax;


            cout << "Weekly Payroll:\t Name \t Title \t Gross \t Tax \t Net \n";

            for (int count=0; count < numberOfEmployees; count++)
            {
                cout << employees[count].name << " \t" << employees[count].title << " \t" <<
                gross << "\t" << tax << "\t" << net << "\n";
            }
            system("pause");

}

Хорошо, я обновил программу.Сейчас я пытаюсь сделать расчеты.Вот что я делаю ...

Для расчета заработной платы:

Брутто-зарплата - это недельная заработная плата, которая была ранее введена для работника.

Чистая заработная плата рассчитывается как валовая заработная плата за вычетом суммы налога.

Чтобы рассчитать налог: вычтите 1 доллар из зарплаты за каждое исключение удержания.Это скорректированный доход.Если скорректированный доход меньше 0, используйте 0 в качестве скорректированного дохода.

Умножьте скорректированный доход на ставку налога, которая, как вы полагаете, должна составлять 25%.

Например, если Боб Кратчит имеет еженедельный доход в размере 15 долларов и 7 иждивенцев, то его скорректированный доход составит 8 долларов.Его налог будет 25% от 8 долларов, что составляет 2 доллара, и, следовательно, его чистая зарплата составляет 13 долларов.

Я начал пытаться получить это.Я положил его между второй петлей и последней петлей.Это правильно?

Ответы [ 5 ]

1 голос
/ 01 февраля 2012

Небольшой пример печати столбцов с использованием потоков C ++:

#include <iomanip> 
#include <ios> 

std::ostream& operator<<(std::ostream& a_out, const EmployeeT& a_e)
{
    a_out << std::setfill(' ')
          << std::left
          << std::setw(sizeof(a_e.name))
          << a_e.name
          << std::setw(0)
          << a_e.title
          << "    "
          << std::setw(10)
          << a_e.SSNum
          << a_e.Salary
          << a_e.Withholding_Exemptions;

    return a_out;
}

Это позволит вам записать сотрудника в стандартный вывод, используя:

std::cout << employees[n] << "\n";

Используйте аналогичный подход длязаголовки столбцов.

Другие пункты:

  • Предпочитайте std::string char[] (или char*), тогда вам не нужно ограничивать длину строки (илиявно управлять памятью)
  • Использовать std::vector вместо фиксированного массива, чтобы избежать ограничения
  • Использовать алгоритмы STL (например, std::for_each, std::copy) для выполнения операций надэлементы в контейнерах (или массивах)
0 голосов
/ 01 февраля 2012

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

Вот несколько общих указателей, которые могут помочь вам улучшить вашу программу:

0 голосов
/ 01 февраля 2012

Вы можете посмотреть функции заголовка STL iomanip, такие как setw () Форматирование вывода Cout в C ++ с использованием iomanip .При этом можно получить приличные столбцы фиксированного размера, которые, скорее всего, не будут иметь вкладки.

0 голосов
/ 01 февраля 2012

вы можете использовать ту же петлю для вставки и отображения или что-нибудь !!потому что он проходит через весь цикл.

cout << "Weekly Payroll:\t Name \t Title \t Gross \t Tax \t Net \n";

for (int count=0; count < numberOfEmployees; count++)
{
    cout << employees[count].name << " \t" << employees[count].title << " \t" <<
        Gross << "\t" << tax << "\t" << Net << "\n";
}

Найдите нетто, налог и брутто каждого объекта структуры и напечатайте.

Проверьте, хотите ли вы, чтобы имя указывалось как int в отмеченной позиции.

#include <iostream> 
using namespace std;

const int MAXSIZE = 20;

struct EmployeeT {

    char name[MAXSIZE];
    char title;
    double SSNum;
    double Salary;
    double Withholding_Exemptions; 
};

EmployeeT employees[MAXSIZE];

int main() {

    cout << "How many Employees? ";
    int numberOfEmployees;
    cin >> numberOfEmployees; 

    while(numberOfEmployees > MAXSIZE) {

        cout << "Error: Maximum number of employees is 20\n" <<
            "How many Employees? ";
        cin >> numberOfEmployees;
    }

    int name;         // name is char[] or string
    int title;
    double SSNum;
    double Salary;
    double Withholding_Exemptions;

    for (int count = 0; count < numberOfEmployees; count++) {

        cout << "Name: \n";
        cin >> employees[ count ].name; 

        cout << "Title: \n";
        cin >> employees[ count ].title;

        cout << "SSNum: \n";
        cin >> employees[ count ].SSNum;

        cout << "Salary: \n";
        cin >> employees[ count ].Salary;

        cout << "Withholding Exemptions: ";
        cin >> employees[ count ].Withholding_Exemptions;
    }
}
0 голосов
/ 01 февраля 2012

Вы можете использовать последовательность '\ t', которая представляет в C ++ «пространство табуляции» (например, когда вы нажимаете клавишу Tab на клавиатуре). Что касается цикла, он должен выглядеть примерно так:

cout << "Weekly Payroll:\t Name \t Title \t Gross \t Tax \t Net \n";

for(int n=0; n < employees; n++)
{
cout << employees[n].name << " \t" << employees[n].title << " \t" ...... << "\n"; 
} 

Должно работать :) 1004 *

...