• 0

Need help using a file (C++)


Question

I decided to take an online C++ class, and at first I was doing well but now I seem to be behind. I have read the chapters a few times and think I may have this one but I am probably completely off base. Here is the problem:

Design an algorithm that will read a file of employee records and produce a weekly report of gross earnings for those employees. Fross earnings are earnings before tax and other deductions. Each input record contains the employee number, the hours worked, and the rate of pay. At the end of the report print the total gross earnings for that week.

He did not give us a file to input from so it is hard to check to see if it worked. Here is what I have so far:

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>

using namespace std;

int main()
{
    {float GrossEarnings, TotalGrossEarnings, rate;
    int hours;
    unsigned int EmployeeNumber;
    ifstream infile;  // Declare file stream named infile.

    infile.open ("grossearnings.txt",ios::in); //Oppem file for input

    TotalGrossEarnings = 0.0;
    GrossEarnings = 0.0;
    rate = 0;
    hours = 0;

    cout << "This is the Employees Gross Earnings:\n";

    if (infile) // If no error occurred while opening file
     {
                cout.setf(ios::fixed);
                cout << "The number in the data file are as follows:\n"
                << setprecision(1);

     do
       {
                infile >> EmployeeNumber >> hours >> rate;     // Get number from file.
                cout << EmployeeNumber << GrossEarnings <<  endl;
                GrossEarnings = rate * hours;

                } 
                while(EmployeeNumber != 0.0);

      TotalGrossEarnings = TotalGrossEarnings + GrossEarnings;
      cout << "Total Gross Earnings are:" << TotalGrossEarnings <<endl;


    system ("PAUSE");

    return 0;
       }}}

Am I completly off base? Thank You!

Shadow

Link to comment
https://www.neowin.net/forum/topic/878628-need-help-using-a-file-c/
Share on other sites

5 answers to this question

Recommended Posts

  • 0

I don't have time to proof-read your code at the moment, but:

- test it. Write a txt file containing what you think the records should look like, and make the program use it.

- use code tags when you post code in a forum, otherwise it's almost impossible to read.

  • 0

Unfortunately I'm not so good with file reading or the iomanip library, so that's going to be up to you.

I did you a little service and cleaned up your code. If someone like Dr.Asik comes back and is able to review your code for you (or is willing. Keep in mind, we don't do your homework for you, here) then at least now it will be readable and, assuming you properly use your functions and such, functional.

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
using namespace std;

int main()
{
    float GrossEarnings, TotalGrossEarnings, rate;
	GrossEarnings = TotalGrossEarnings = rate = 0.0; //assign 0.0 to ALL float values listed. Much easier to read.
    int hours = 0;
    unsigned int EmployeeNumber = 0; // assigning values on instantiation improves organization as well.
    ifstream infile;  // Declare file stream named infile.

    infile.open("grossearnings.txt",ios::in); //Open file for input
    cout << "This is the Employees Gross Earnings:\n";

    if (infile) // If no error occurred while opening file
	{
		cout.setf(ios::fixed);
		cout << "The number in the data file are as follows:\n" << setprecision(1);
	} //You were missing a bracket here.

	while(EmployeeNumber != 0.0) // I find do/while loops to be sloppy so a while loop makes the code more clean.
	{
		infile >> EmployeeNumber >> hours >> rate; // Get number from file.
		cout << EmployeeNumber << GrossEarnings << "\n";
		GrossEarnings = rate * hours;
	}

	TotalGrossEarnings += GrossEarnings; //+= returns the sum of the right and left operand and returns value to left operand.
	cout << "Total Gross Earnings are: " << TotalGrossEarnings << "\n";

    cout << "Press any key to exit.\n";
    cin.get();  //A lot of people argue against using the system("pause") command, it is better in many cases to use cin.get();
    return 0;
}

I'm not trying to nitpick at your code or anything, don't get me wrong.

You should have a look at the changes I made. Most of what I did greatly improves your organization, and makes the code much easier for others to use.

I can't really test this myself since I really don't know what you expect to be done with the file to be read from, but you might be able to put something together and give this a whirl.

Otherwise, Dr.Asik may be able to help.

Good luck. :yes:

  • 0

Unfortunately I'm not so good with file reading or the iomanip library, so that's going to be up to you.

I did you a little service and cleaned up your code. If someone like Dr.Asik comes back and is able to review your code for you (or is willing. Keep in mind, we don't do your homework for you, here) then at least now it will be readable and, assuming you properly use your functions and such, functional.

#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
using namespace std;

int main()
{
    float GrossEarnings, TotalGrossEarnings, rate;
	GrossEarnings = TotalGrossEarnings = rate = 0.0; //assign 0.0 to ALL float values listed. Much easier to read.
    int hours = 0;
    unsigned int EmployeeNumber = 0; // assigning values on instantiation improves organization as well.
    ifstream infile;  // Declare file stream named infile.

    infile.open("grossearnings.txt",ios::in); //Open file for input
    cout << "This is the Employees Gross Earnings:\n";

    if (infile) // If no error occurred while opening file
	{
		cout.setf(ios::fixed);
		cout << "The number in the data file are as follows:\n" << setprecision(1);
	} //You were missing a bracket here.

	while(EmployeeNumber != 0.0) // I find do/while loops to be sloppy so a while loop makes the code more clean.
	{
		infile >> EmployeeNumber >> hours >> rate; // Get number from file.
		cout << EmployeeNumber << GrossEarnings << "\n";
		GrossEarnings = rate * hours;
	}

	TotalGrossEarnings += GrossEarnings; //+= returns the sum of the right and left operand and returns value to left operand.
	cout << "Total Gross Earnings are: " << TotalGrossEarnings << "\n";

    cout << "Press any key to exit.\n";
    cin.get();  //A lot of people argue against using the system("pause") command, it is better in many cases to use cin.get();
    return 0;
}

I'm not trying to nitpick at your code or anything, don't get me wrong.

You should have a look at the changes I made. Most of what I did greatly improves your organization, and makes the code much easier for others to use.

I can't really test this myself since I really don't know what you expect to be done with the file to be read from, but you might be able to put something together and give this a whirl.

Otherwise, Dr.Asik may be able to help.

Good luck. :yes:

This is great! I am definitely not looking for someone to do my work, just someone to explain (like you did) where I may have gone astray. I am going to spend the weekend rereading all the chapters to see if I can get a better grasp on this, but you certainly have helped me.

  • 0

This is great! I am definitely not looking for someone to do my work, just someone to explain (like you did) where I may have gone astray. I am going to spend the weekend rereading all the chapters to see if I can get a better grasp on this, but you certainly have helped me.

Well, you can start by using an IDE. The code you originally posted was full of formatting errors and wouldn't even compile. As for your assignment, consider organizing related data into structures or classes. And Employee structure might look something like this:

struct Employee
{
	unsigned int EmployeeNumber;
	float Rate;
	float GrossEarnings;
};

One benefit of this is that the Employee structure above is of fixed-length: is this case 12 bytes (both ints and floats are 4 bytes). This makes it easy to store records in a file and is similar to how a database stores records. Moving one record forward simply involves incrementing a pointer to the structure. Furthermore, if you had a record file that was 36 bytes long, you could infer that it contained 3 Employee structures.

  • 0

Well, you can start by using an IDE. The code you originally posted was full of formatting errors and wouldn't even compile. As for your assignment, consider organizing related data into structures or classes. And Employee structure might look something like this:

struct Employee
{
	unsigned int EmployeeNumber;
	float Rate;
	float GrossEarnings;
};

One benefit of this is that the Employee structure above is of fixed-length: is this case 12 bytes (both ints and floats are 4 bytes). This makes it easy to store records in a file and is similar to how a database stores records. Moving one record forward simply involves incrementing a pointer to the structure. Furthermore, if you had a record file that was 36 bytes long, you could infer that it contained 3 Employee structures.

Thank you again... I understand what you are saying and like the logic behind it. We actually have not gotten into pointers or structures, but that won't keep me from using it in the homework.

You guys are great

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
  • Posts

    • Qualcomm's new Snapdragon Reality Elite chip brings on-device AI to Android XR devices by Pradeep Viswanathan Qualcomm has been delivering dedicated SoCs for mixed reality and spatial computing devices for several years. The journey started with the Snapdragon XR1, followed by the Snapdragon XR2 in 2019, the Snapdragon XR2 Gen 2 in September 2023, and finally the Snapdragon XR2+ Gen 2 in 2024. Today, Qualcomm announced a major upgrade with the new Snapdragon Reality Elite Platform, which targets premium mixed reality and spatial computing devices. OEMs can use this SoC to power both all-in-one video-see-through headsets and lightweight, tethered optical-see-through glasses. Qualcomm highlighted that the Snapdragon Reality Elite will power the next wave of Android XR devices coming later this year. These wearables will offer better visuals, improved power efficiency, and deeper on-device AI integration compared to the previous generation. The Snapdragon Reality Elite can deliver up to 48 TOPS of AI performance, allowing large language models and large vision models to run directly on the device for the first time. In addition to enabling new spatial AI experiences, these new AI capabilities will improve head and hand tracking, as well as see-through features. On the performance side, the Snapdragon Reality Elite offers up to 60% higher GPU performance, up to 30% higher CPU performance, and up to 160% higher NPU performance compared to the previous generation. The platform supports visuals of up to 4.4K per eye at 90 frames per second for sharper images and smoother motion. Qualcomm is also claiming significant efficiency improvements. The Snapdragon Reality Elite can offer up to 20% longer battery life under the same workload. More importantly, the chipset can run up to 12 degrees Celsius cooler under load, making headsets more comfortable for users to wear for longer periods. The platform also includes improvements to video see-through, featuring lower latency and better image quality. Qualcomm states that its EVA hardware block helps accelerate demanding computer vision workloads, improving how digital content blends with the real world.
    • Umm... GitHub continues to use AWS. That's the story, that's the headline. There's no "new" news here. GitHub continues to require additional capacity beyond the originally-planned Azure allocations. There's nothing special about this; nothing noteworthy. They're still using AWS' infra until the cutover is complete.
    • Hello, Also known for https://www.theguardian.com/technology/2009/jan/29/adware-internet.   Regards, Aryeh Goretsky    
    • Hello, I have used a few TEAM Group SSDs, USB flash drives, and Micro SDXC cards in the past. They all seemed to work fine. Regards, Aryeh Goretsky
    • "just $100 per TB"? Just? Are we trying to make this seem like the new normal? Kinda weird to make it sound like that is not a ridiculously expensive asking price.
  • Recent Achievements

    • Collaborator
      vjlex earned a badge
      Collaborator
    • Reacting Well
      Dys Topia earned a badge
      Reacting Well
    • Conversation Starter
      NovaEdgeX earned a badge
      Conversation Starter
    • One Year In
      Console General earned a badge
      One Year In
    • Week One Done
      Twozo Technologies earned a badge
      Week One Done
  • Popular Contributors

    1. 1
      +primortal
      517
    2. 2
      +Edouard
      182
    3. 3
      PsYcHoKiLLa
      106
    4. 4
      Steven P.
      88
    5. 5
      ATLien_0
      68
  • Tell a friend

    Love Neowin? Tell a friend!