2015-03-25 91 views
0

我正在创建一个充当工资系统的程序,在该系统中,我创建了一个文件名并输入:ID(int),pay(double),hours(int)和gross wage(double)。我如何将输入的数据放入文件中并将它们放入数组中并显示出来。之后,我将需要对它们进行排序,因为我在switch语句中有个案。如何将我输入到txt文件中的数据存储到数组中?

#include <fstream> 
#include <iostream> 
#include <iomanip> 
#include <string>  

using namespace std; 


//Function prototypes 

void getEmployeeInfo(int&, double&, int&); //EmployeeInfo prototype 

double calcWage(double, int, double&); //calcWage prototype 

void printWages(ofstream &, int, double, int , double); //print wages prototype 

//Main function 

int main(){ 

    int ID, hours, caseInput; 
    double pay, gross; 
    char input; 
    ofstream outputFile; 
    string filename; 

    do { 

    cout << "    Menu    " << endl; 

    cout << "1. Calculate gross wages for employees" << endl; 

    cout << "2. Display employees information to screen" << endl; 

    cout << "3. Display information in order of ID" << endl; 

    cout << "4. Display information in order of hourly rate" << endl; 

    cout << "5. Display information in order of hours worked" << endl; 

    cout << "6. Display information in order of wage" << endl; 

    cout << "7. Quit the system" << endl; 

    cout << "Enter your option --> "; 

    cin >> caseInput; 
     switch (caseInput) { 
      case 1: //Create file 

      cout << "Enter the filename: "; 

      cin >> filename; 

      //open file 

      outputFile.open(filename.c_str()); 

      outputFile << setw(10) << "ID" << setw (15) << "Pay" << setw(17) << "Hours" 

        << setw(11) << "Gross"<<endl; 

      outputFile << "---------------------------------------------------------\n"; 

      do{ 

      getEmployeeInfo(ID, pay, hours); 

      calcWage(pay, hours, gross); 

      printWages(outputFile, ID, pay, hours, gross); 

      cout << "Do you want to enter another employee's information? "; 

      cin >> input; 

      } 

      while(input == 'y' || input == 'Y'); 



      //If user does not enter y, close file 

      outputFile.close(); 

      cout << "The result is reported to the file " << 

      filename << "." << endl; 

      break; 



     case 2: 

      break; 



     case 3: 

      break; 


     case 4: 

      break; 

     case 5: cout << "Thank you for using Math Tutor." << endl; 

      break; 


     case 6: cout << "Thank you for using Math Tutor." << endl; 

      break; 


     case 7: cout << "Thank you for using the Payroll System." << endl; 

      break; 


     default: cout << "Error. Enter a number 1-7." << endl; 

    } 

     } 

     while(caseInput != 7); 


return 0; 

} 

//Function to input employee info 

void getEmployeeInfo(int &ID, double &pay, int &hours){ 

cout << "Enter an employee's information by the order of ID number, rate, hours: "; 

cin >> ID >> pay >> hours; 

while(ID < 0){ 

cout << "You must enter a non negative value. Try again!" << endl; 

cin >> ID; 

} 

while(pay < 0){ 

cout << "You must enter a non negative value. Try again!" << endl; 

cin >> pay; 

} 


while(hours < 0){ 

cout << "You must enter a non negative value. Try again!" << endl; 

cin >> hours; 

} 


} 


//Function calculates gross pay 

double calcWage(double pay, int hours, double &gross){ 

    gross = pay * hours; 

    return gross; 

} 

//Print function 

void printWages(ofstream &outputFile, int ID, double pay, int hours, double gross){ 

    outputFile << setw(10)<< ID << setw(12) << "$" << setprecision(2) 

    << fixed << pay << setw(13) << hours 

    << setw(10) << "$" << fixed << gross << endl; 

} 
+0

首先,你需要声明一个数组或数据结构(我推荐'std :: vector')来存储数据。 – 2015-03-25 05:07:30

回答

0
ifstream input("filename.txt"); 
copy(istreambuf_iterator<char>(input), istreambuf_iterator<char>(), ostreambuf_iterator<char>(cout)); 

此代码将要从一个txt文件中读取数据,并将其打印到屏幕上。您可以参考cppreference.com了解所有组件的工作原理。

确保包含相应的标题。参考资料也会告诉你。

0

我想你可以将你的数据存储在一个新类中,并且首先将这些数据保存在一个vecotr中。像这样:

// declare a class with all your employee info in. 
class Info 
{ 
public: 
    Info(int id, int hours, double pay) 
    { 
     this.ID = id; 
     this.hours = hours; 
     this.pay = pay; 
     this.gross = pay*hours; 
    } 

    int ID; 
    int hours; 
    double pay; 
    double gross; 
} 

vector<Info> vInfo; // save your data from your input or file 

// if you want to sort your data 
std::sort(vInfo.begin(), vInfo.end(), [ ](Info &a, Info &b){ 
    // you can change this depend on your order 
    // return a.xxx < b.xxxx 
    return a.ID < b.ID; 
}); 
// then use the printWagesVec to print the data in your case 2,3,4,5,6 
// change print function 
int printWagesVec(vector<Info>& vInfo) 
{ 
    cout << setw(10) << "ID" << setw (15) << "Pay" << setw(17) << "Hours" 
    << setw(11) << "Gross"<<endl; 

    cout << "---------------------------------------------------------\n"; 

    vector<Info>::iterator it = vInfo.begin(); 
    for(; it != vInfo.end(); it++) 
    { 
     cout << setw(10)<< it->ID << setw(12) << "$" << setprecision(2) 
     << fixed << it->pay << setw(13) << it->hours 
     << setw(10) << "$" << fixed << it->gross << endl; 
    } 

    return 0; 
} 
相关问题