繁体   English   中英

我怎样才能修复我的程序的计算并让它正常运行?

[英]How can I fix my program's calculation and get it to run properly?

我的代码没有计算。 我试了几个小时,但它仍然显示 0.00 的总税金和工会费用。 当然,它不计算总计和平均值。 我迷路了,我哪里出错了。 我回顾了很多用结构计算的例子,但我仍然找不到为什么它显示 0。

这是我的代码:

#include <iomanip>
#include <string>

using namespace std;

struct Payroll
{
  string f_name, l_name;
  char m_initial;
  int hrs_worked;
  double rate, gross, state_tax,fed_tax, union_fees,net;
};

int main()
{
    int size=0, num=20;
    Payroll workers[num];
    double overtime, gross, fed, state, unionFees, net;
    double total_gross;
    
    
    cout<<"Enter the number of employees: ";// take input of number of employees
    cin >> num;
    
    //get employee's info 
    cout<<"Enter details of employee " <<size+1<<": "<<endl;
    
    for (size =0; size < num; size ++)
    {
        //asking for user's input
        cout<<"Enter first name         : ";
        cin >> workers[size].f_name;
    cout<<"Enter middle name initial: ";
        cin >> workers[size].m_initial;
    cout<<"Enter last name          : ";
        cin >> workers[size].l_name;
    cout<<"Enter hours worked        : ";
        cin >> workers[size].hrs_worked;
        
        //input validation
        while(workers[size].hrs_worked < 0 || workers[size].hrs_worked > 60)
        {
      cout<<"Error! Enter hours between 0 to 60: ";
        cin >> workers[size].hrs_worked;
        }
        
        cout<<"Enter Rate per hour      : ";
        cin >> workers[size].rate;
       
        // input validation
        while(workers[size].rate <= 0 || workers[size].rate > 50)
        {
      cout<<"Error! Enter rate greater than 0 to 50: ";
        cin >> workers[size].rate;
        }
    cout<< endl;
    }
    // Calculating each employee's pay

if(workers[size].hrs_worked > 40)
{
  overtime = (workers[size].hrs_worked - 40) *  workers[size].rate * 1.5;
  workers[size].gross = (workers[size].rate * 40) + overtime; 
}
gross = (workers[size].rate * workers[size].hrs_worked); // calculate gross
state = workers[size].gross * 6/100;// calculate state tax
        
fed =  workers[size].gross * 12/100;// calculate federal tax
        
unionFees = workers[size].gross * 2/100;// calculate union fees
        
net = workers[size].gross - (workers[size].state_tax + workers[size].fed_tax + workers[size].union_fees);// calculate net
    
total_gross= workers[size].gross+total_gross;

  // display header
cout<<"Data Housing Corp. Weekly Payroll"<<endl;
    
cout<<setw(8)<<"FN"<<setw(4)<<"MI"<<setw(8)<<"LN"<<setw(8)<<"Hours"<<setw(6)
                <<"Rate"<<setw(8)<<"Gross"<<setw(6)<<"ST"<<setw(8)<<"FT"<<setw(8)
                <<"UF"<<setw(8)<<"Net"<<endl;
cout<<setw(8)<<"==="<<setw(4)<<"==="<<setw(8)<<"==="<<setw(8)<<"===="<<setw(6)
                <<"===="<<setw(8)<<"===="<<setw(6)<<"==="<<setw(8)<<"==="<<setw(8)
                <<"==="<<setw(8)<<"===="<<endl;
        
// displaying data
for (size =0; size < num; size ++)
{
  cout<<setw(8)<<workers[size].f_name<<setw(4);
  cout<<workers[size].m_initial<<setw(8);
  cout<<workers[size].l_name<<setw(6);      
  cout<<workers[size].hrs_worked<<setw(8);
  cout<<fixed <<setprecision(2)<<workers[size].rate<<setw(8);
  cout<<fixed <<setprecision(2)<<workers[size].gross<<setw(8);
  cout<<fixed <<setprecision(2)<<state<<setw(8); 
  cout<<fixed <<setprecision(2)<<fed<<setw(8);
  cout<<fixed <<setprecision(2)<<unionFees<<setw(8);
  cout<<fixed <<setprecision(2)<<net<<endl;
  
}

cout<<"========== =========== ========= ============= =========== ========";
cout<<" ============ ========= =========== ========== ==========\n";
cout<<"Total gross income of all employee= $"<<total_gross<<endl;
cout<<"Average gross income of all employee= $"<<total_gross/num<<endl;
cout<<"~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
return 0;
}

Enter the number of employees: 2
Enter details of employee 1: 
Enter first name         : laaa
Enter middle name initial: d
Enter last name          : daaaa
Enter hours worked        : 50
Enter Rate per hour      : 10

Enter first name         : rome
Enter middle name initial: s
Enter last name          : italy
Enter hours worked        : 40
Enter Rate per hour      : 10

Data Housing Corp. Weekly Payroll
      FN  MI      LN   Hours  Rate   Gross    ST      FT      UF     Net
     === ===     ===    ====  ====    ====   ===     ===     ===    ====
    laaa   d   daaaa    50   10.00    0.00    0.00    0.00    0.00    0.00
    rome   s   italy    40   10.00    0.00    0.00    0.00    0.00    0.00
========== =========== ========= ============= =========== ======== ============ ========= =========== ========== ==========
Total gross income of all employee= $nan
Average gross income of all employee= $nan
~~~~~~~~~~~~~~~~~~~~~~~~~~~

您应该注意,您拥有的条件语句 (if(workers[size].hrs_worked > 40)) 不在您的 for 循环中,但您在该条件语句中使用了该循环计数器变量“size”。

一些旁注:

  1. 即使 'workers[size].hrs_worked' 属性 <= 40,您也需要初始化 'workers[size].gross'。

  2. 似乎数组不是这里的理想选择(除非您使用动态 memory 分配),因为您是在运行时初始化数组的大小。 不确定您的编译器如何允许您这样做?

  3. 'total_gross' 未初始化,但您可以在某些算术中使用它; 阐明它的用途以及其他局部变量的用途。

你应该可以从这里拿走它; 快乐编码!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM