#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <string>
using namespace std;

struct Student
{
  string name;
  int id;
  float gpa;
}; // Student
 
void outputStudents(deque<Student>& student)
{
  int i;
  for (i = 0; i < student.size(); i++)
  {
    cout << "Name = " << left << setw(30) << student[i].name;
    cout.fill('0'); 
    cout << " ID = " << right << setw(7) << student[i].id
      << ", gpa = " << student[i].gpa << endl;
    cout.fill(' '); 
  } // for
} // outputStudents

int main()
{
  ifstream fin;
  fin.open("students.txt");
  if (!fin.good()) throw "I/O error";
 
  // create an empty list
  deque<Student> student;
 
  // read and save the records
  while (fin.good())
  {
    Student aStudent;
    getline(fin, aStudent.name);

    fin >> aStudent.id;
    fin.ignore(1000, 10);
 
    fin >> aStudent.gpa;
    fin.ignore(1000, 10);
 
    fin.ignore(1000, 10); // skip the separator line

    student.push_back(aStudent);
  } // while
  fin.close();
 
  outputStudents(student);
} // main
