Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Change the program to work without fstream being a global variable, remove any/a

ID: 3556377 • Letter: C

Question

Change the program to work without fstream being a global variable, remove any/all infinite loops while retaining the operation of the code.

using namespace std;

struct Student
{
   string name;
   string ID;
   int testNumber;
   int *tests;
   double average;
   char grade;
};

int readHeader();
Student *allocate(int);
void readRecords(Student*, int);
void print(Student*, int);
void deallocate(Student*);

ifstream inFile;

int main()
{
   int n = readHeader();
   if (n == -1){
       return 0;
   }
   Student *s = allocate(n);
   readRecords(s, n);
   for (int i = 0; i        print(s, i);
   }
   deallocate(s);
   inFile.close();

   cout << "Press Enter to end -->";
   cin.ignore();
   return 0;
}

int readHeader()
{
   string filename;
   int a;
   while (true){
       cout << "Please enter the input filename --> ";
       cin >> filename;
       inFile.open(filename.c_str(), ifstream::in);
       if (inFile.is_open()){
           inFile >> a;
           if (a<5){
               return -1;
           }
           cout << " ";
           return a;
           break;
       }
   }

   return -1;
}

Student *allocate(int a)
{
   return new Student[a];
}


void readRecords(Student *s, int a)
{
   for (int i = 0; i        int sum = 0;
       inFile >> s[i].name;
       inFile >> s[i].ID;
       inFile >> s[i].testNumber;
       s[i].tests = new int[s[i].testNumber];
       for (int counter = 0; counter            inFile >> s[i].tests[counter];
           sum += s[i].tests[counter];
       }
       s[i].average = sum / (s[i].testNumber);
       if (s[i].average >= 91){
           s[i].grade = 'A';
       }
       else if (s[i].average >= 81){
           s[i].grade = 'B';
       }
       else if (s[i].average >= 71){
           s[i].grade = 'C';
       }
       else if (s[i].average >= 60){
           s[i].grade = 'D';
       }
       else{
           s[i].grade = 'F';
       }
   }
}

void print(Student *s, int i)
{
   cout << "Name : " << s[i].name << " ID Number: " << s[i].ID << endl;
   cout << "Test Scores: ";
   for (int counter = 0; counter        cout << s[i].tests[counter] << " ";
   }
   cout << " Average: " << s[i].average << " Grade: " << s[i].grade;
   cout << " ";
}

void deallocate(Student *s)
{
   delete[] s;
}

Explanation / Answer

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Student
{
   string name;
   string ID;
   int testNumber;
   int *tests;
   double average;
   char grade;
};
int readHeader(ifstream&);
Student *allocate(int);
void readRecords(ifstream&, Student*, int);
void print(Student*, int);
void deallocate(Student*);
int main()
{
    ifstream inFile;
   int n = readHeader(inFile);
   if (n == -1){
       return 0;
   }
   Student *s = allocate(n);
   readRecords(inFile,s, n);
   for (int i = 0; i<n; i++){
       print(s, i);
   }
   deallocate(s);
   inFile.close();
   cout << "Press Enter to end -->";
   cin.ignore();
   return 0;
}
int readHeader(ifstream& inFile)
{
   int a;
   string filename;
   cout << "Please enter the input filename --> ";
   cin >> filename;
   inFile.open(filename.c_str(), ifstream::in);
   while(!inFile.is_open())
   {
   cout << "Please enter the input filename --> ";
   cin >> filename;
   inFile.open(filename.c_str(), ifstream::in);
   }
   inFile >> a;
   if (a<5)
   {
       return -1;
   }
   cout << " ";
   return a;
}
Student *allocate(int a)
{
   return new Student[a];
}
void readRecords(ifstream& inFile,Student *s, int a)
{
   for (int i = 0; i<a; i++){
       int sum = 0;
       inFile >> s[i].name;
       inFile >> s[i].ID;
       inFile >> s[i].testNumber;
       s[i].tests = new int[s[i].testNumber];
       for (int counter = 0; counter<s[i].testNumber; counter++){
           inFile >> s[i].tests[counter];
           sum += s[i].tests[counter];
       }
       s[i].average = sum / (s[i].testNumber);
       if (s[i].average >= 91){
           s[i].grade = 'A';
       }
       else if (s[i].average >= 81){
           s[i].grade = 'B';
       }
       else if (s[i].average >= 71){
           s[i].grade = 'C';
       }
       else if (s[i].average >= 60){
           s[i].grade = 'D';
       }
       else{
           s[i].grade = 'F';
       }
   }
}
void print(Student *s, int i)
{
   cout << "Name : " << s[i].name << " ID Number: " << s[i].ID << endl;
   cout << "Test Scores: ";
   for (int counter = 0; counter<s[i].testNumber; counter++){
       cout << s[i].tests[counter] << " ";
   }
   cout << " Average: " << s[i].average << " Grade: " << s[i].grade;
   cout << " ";
}
void deallocate(Student *s)
{
   delete[] s;
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote