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

C++ Data Persistance Help I am trying to write a C++ program that has data persi

ID: 3884289 • Letter: C

Question

C++ Data Persistance Help

I am trying to write a C++ program that has data persistence but the .txt file that I am using is being overwritten each time the program is ran, and it is not allowing me to pick up previously stored data to prevent the user from using the same information. The program uses functions to prevent the main function from being bulky, but I tried to do the file storage and retrieval from main and I ran into the same problem. I then made it into a void function that should collect the data(student ID etc) the save the file into the file. Although, the file is picking up and saving garbage and not the entered numbers for student ID and overwriting the file.

See Code Below:

student.h
*/

#include<iostream>
using namespace std;

struct student
   {
       string fname;
       string lname;
       string stuID;
   };

session.h
*/

#include<iostream>
using namespace std;

struct session
   {
       int sessionID;
       string stuID;
       string courseID;
       string startDate;
       string endDate;
       int totalCredits;
   };

course.h
*/


#include<iostream>
using namespace std;

struct course
   {
       string CourseName;
       string CourseID;
       int numberOfCredits;
   };

main.cpp

#include<iostream>
#include<fstream>
#include <cstdlib>
#include "student.h"
#include "course.h"
#include "session.h"
using namespace std;


void fillStudents(student arg[], int size)
{
     for (int i = 0; i < size; i++)
     {
         cout <<"Student #"<<i+1<<endl;
         cout <<"=========="<<endl;
         cout <<"Enter a student ID (i.e 97626): ";
         cin >>arg[i].stuID;
         cout <<"Enter the first name (i.e Ryan): ";
         cin >>arg[i].fname;
         cout <<"Enter the last name (i.e Brown): ";
         cin >>arg[i].lname;
         system("clear");
     }
}

void fillCourses(course c[], int size)
{
     for (int i = 0; i < size; i++)
     {
         cout <<"Course #"<<i+1<<endl;
         cout <<"=========="<<endl;
         cout <<"Enter course name (i.e Data-Structures (put - instead of spaces)): ";
         cin >>c[i].CourseName;
         cout <<"Enter course ID (i.e CS-230 (put - instead of spaces)): ";
         cin >>c[i].CourseID;
         cout <<"Enter number of credits (i.e 3): ";
         cin >>c[i].numberOfCredits;
         system("clear");
     }
}

string CourseN(int choice, course ch[])
{
    switch(choice)
    {
        case 1:
            return ch[0].CourseID+" "+ch[0].CourseName;
            break;
        case 2:
            return ch[1].CourseID+" "+ch[1].CourseName;
            break;
        case 3:
            return ch[2].CourseID+" "+ch[2].CourseName;
            break;
        case 4:
            return ch[3].CourseID+" "+ch[3].CourseName;
            break;
        case 5:
            return ch[4].CourseID+" "+ch[4].CourseName;
            break;
        case 6:
            return ch[5].CourseID+" "+ch[5].CourseName;
            break;
        case 7:
            return ch[6].CourseID+" "+ch[6].CourseName;
            break;
        case 8:
            return ch[7].CourseID+" "+ch[7].CourseName;
            break;
        case 9:
            return ch[8].CourseID+" "+ch[8].CourseName;
            break;
        case 10:
            return ch[9].CourseID+" "+ch[9].CourseName;
            break;
        default:
            cout<<"Invalid decison!! Good Bye!"<<endl;
            exit(0);
    }
}

int creditTotal(int sel, course ch[])
{
    switch(sel)
    {
        case 1:
            return ch[0].numberOfCredits;
            break;
        case 2:
            return ch[1].numberOfCredits;
            break;
        case 3:
            return ch[2].numberOfCredits;
            break;
        case 4:
            return ch[3].numberOfCredits;
            break;
        case 5:
            return ch[4].numberOfCredits;
            break;
        case 6:
            return ch[5].numberOfCredits;
            break;
        case 7:
            return ch[6].numberOfCredits;
            break;
        case 8:
            return ch[7].numberOfCredits;
            break;
        case 9:
            return ch[8].numberOfCredits;
            break;
        case 10:
            return ch[9].numberOfCredits;
            break;
        default:
            cout<<"Invalid Decision!! Good Bye!"<<endl;
            exit(0);
        }
}

void fillSession(student arg[], course c[], session s[])
{
    int c1, c2, c3, c4;
    string ch1, ch2, ch3, ch4;
    string startDate, endDate;
    int cr1, cr2, cr3, cr4;

    for (int i = 0; i < 4; i++)
    {
        for(int j = 0; j < 10; j++)
        {
            cout<<"class #"<<j+1<<" "<<c[j].CourseID<<" "<<c[j].CourseName<<" "<<"Credits: "<<c[j].numberOfCredits<<" ";
        }

        cout<<"Enter your 1st class choice: ";
        cin>>c1;
        ch1=CourseN(c1,c);
        cout<<"Enter your 2nd class choice: ";
        cin>>c2;
        ch2=CourseN(c2,c);
        cout<<"Enter your 3rd class choice: ";
        cin>>c3;
        ch3=CourseN(c3,c);
        cout<<"Enter your 4th class choice: ";
        cin>>c4;
        ch4=CourseN(c4,c);

        s[i].courseID=ch1+" "+ch2+" "+ch3+" "+ch4;
        cout<<"Enter a start date for your classes (i.e mm/dd/yyyy): ";
        cin>>startDate;
        s[i].startDate=startDate;
        cout<<"Enter a end date for your classes (i.e mm/dd/yyyy): ";
        cin>>endDate;
        s[i].endDate=endDate;

        cr1=creditTotal(c1, c);
        cr2=creditTotal(c2, c);
        cr3=creditTotal(c3, c);
        cr4=creditTotal(c4, c);

        s[i].totalCredits=cr1+cr2+cr3+cr4;

        c1=0;
        c2=0;
        c3=0;
        c4=0;

        system("clear");
    }
}

void display_report(student s[], course c[], session se[])
{
    for (int i = 0; i < 4; i++)
    {
        cout<<"Student ID: "<<s[i].stuID<<" "<<endl;
        cout<<"Student Name: "<<s[i].lname<<", "<<s[i].fname<<" "<<endl;
        cout<<"Course IDs: "<<se[i].courseID<<" "<<endl;
        cout<<"Start Date: "<<se[i].startDate<<" "<<endl;
        cout<<"End Date: "<<se[i].endDate<<" "<<endl;
        cout<<"Total Credits: "<<se[i].totalCredits<<" "<<endl;
        cout<<" "<<endl;
    }
}

/**
* Writes session data to file.
* @param   {session}   sess   sessions array.
*/
void writeSessionsToFile(session* sess)
{
   ofstream file_out("sessions.txt");
   // for now let us just assume there'll always be just 4 sessions.
   for (size_t i = 0; i < 4; ++i)
   {
       file_out << sess[i].sessionID << " ";
       file_out << sess[i].stuID << " ";
       file_out << sess[i].courseID << " ";
       file_out << sess[i].startDate << " ";
       file_out << sess[i].endDate << " ";
       file_out << sess[i].totalCredits << " ";
       // empty line in the end of each entry.
       file_out << endl;
   }
}


int main()
{
    cout<<"Welcome to the CS 230 Data Structures class add program!"<<endl;
    cout<<"Please follow the prompt to gain a report of your courses for the year: "<<endl<<endl;
    //declare and initialize 4 students
    student stu[4];
    fillStudents(stu, 4);

    //declare and initialize 10 courses
    course courses[10];
    fillCourses(courses, 10);

    //assign 4 courses for each student
    cout<<"Enter a class selection based on the chart above (1-10), please do not choose the same class twice: "<<endl;
    cout<<"Each student goes by how their information was added"<<endl<<endl;

    session sessions[4];
    fillSession(stu, courses, sessions);

    writeSessionsToFile(sessions);

    //display a report showing each student with his/her courses
    //show the total number of credits for each student
    cout<<"Please find your name and other important information below to see your classes and credit totals: "<<endl;
    cout <<"=========="<<endl;
    display_report(stu, courses, sessions);
    cout <<"=========="<<endl;


    // instead of system(pause), pause doesn't work on linux.
    cin.get();
    return 0;
}

Explanation / Answer

#include<iostream>
#include<fstream>
#include <cstdlib>
#include "student.h"
#include "course.h"
#include "session.h"
using namespace std;

void fillStudents(student arg[], int size)
{
for (int i = 0; i < size; i++)
{
cout <<"Student #"<<i+1<<endl;
cout <<"=========="<<endl;
cout <<"Enter a student ID (i.e 97626): ";
cin >>arg[i].stuID;
cout <<"Enter the first name (i.e Ryan): ";
cin >>arg[i].fname;
cout <<"Enter the last name (i.e Brown): ";
cin >>arg[i].lname;
system("clear");
}
}
void fillCourses(course c[], int size)
{
for (int i = 0; i < size; i++)
{
cout <<"Course #"<<i+1<<endl;
cout <<"=========="<<endl;
cout <<"Enter course name (i.e Data-Structures (put - instead of spaces)): ";
cin >>c[i].CourseName;
cout <<"Enter course ID (i.e CS-230 (put - instead of spaces)): ";
cin >>c[i].CourseID;
cout <<"Enter number of credits (i.e 3): ";
cin >>c[i].numberOfCredits;
system("clear");
}
}
string CourseN(int choice, course ch[])
{
switch(choice)
{
case 1:
return ch[0].CourseID+" "+ch[0].CourseName;
break;
case 2:
return ch[1].CourseID+" "+ch[1].CourseName;
break;
case 3:
return ch[2].CourseID+" "+ch[2].CourseName;
break;
case 4:
return ch[3].CourseID+" "+ch[3].CourseName;
break;
case 5:
return ch[4].CourseID+" "+ch[4].CourseName;
break;
case 6:
return ch[5].CourseID+" "+ch[5].CourseName;
break;
case 7:
return ch[6].CourseID+" "+ch[6].CourseName;
break;
case 8:
return ch[7].CourseID+" "+ch[7].CourseName;
break;
case 9:
return ch[8].CourseID+" "+ch[8].CourseName;
break;
case 10:
return ch[9].CourseID+" "+ch[9].CourseName;
break;
default:
cout<<"Invalid decison!! Good Bye!"<<endl;
exit(0);
}
}
int creditTotal(int sel, course ch[])
{
switch(sel)
{
case 1:
return ch[0].numberOfCredits;
break;
case 2:
return ch[1].numberOfCredits;
break;
case 3:
return ch[2].numberOfCredits;
break;
case 4:
return ch[3].numberOfCredits;
break;
case 5:
return ch[4].numberOfCredits;
break;
case 6:
return ch[5].numberOfCredits;
break;
case 7:
return ch[6].numberOfCredits;
break;
case 8:
return ch[7].numberOfCredits;
break;
case 9:
return ch[8].numberOfCredits;
break;
case 10:
return ch[9].numberOfCredits;
break;
default:
cout<<"Invalid Decision!! Good Bye!"<<endl;
exit(0);
}
}
void fillSession(student arg[], course c[], session s[])
{
int c1, c2, c3, c4;
string ch1, ch2, ch3, ch4;
string startDate, endDate;
int cr1, cr2, cr3, cr4;
for (int i = 0; i < 4; i++)
{
s[i].stuID=arg[i].stuID; //store student id into session
s[i].sessionID=1000*(i+1); // random number is stored into particular session

for(int j = 0; j < 10; j++)
{
cout<<"class #"<<j+1<<" "<<c[j].CourseID<<" "<<c[j].CourseName<<" "<<"Credits: "<<c[j].numberOfCredits<<" ";
}
cout<<"Enter your 1st class choice: ";
cin>>c1;
ch1=CourseN(c1,c);
cout<<"Enter your 2nd class choice: ";
cin>>c2;
ch2=CourseN(c2,c);
cout<<"Enter your 3rd class choice: ";
cin>>c3;
ch3=CourseN(c3,c);
cout<<"Enter your 4th class choice: ";
cin>>c4;
ch4=CourseN(c4,c);
s[i].courseID=ch1+" "+ch2+" "+ch3+" "+ch4;
cout<<"Enter a start date for your classes (i.e mm/dd/yyyy): ";
cin>>startDate;
s[i].startDate=startDate;
cout<<"Enter a end date for your classes (i.e mm/dd/yyyy): ";
cin>>endDate;
s[i].endDate=endDate;
cr1=creditTotal(c1, c);
cr2=creditTotal(c2, c);
cr3=creditTotal(c3, c);
cr4=creditTotal(c4, c);
s[i].totalCredits=cr1+cr2+cr3+cr4;
c1=0;
c2=0;
c3=0;
c4=0;
system("clear");
}
}
void display_report(student s[], course c[], session se[])
{
for (int i = 0; i < 4; i++)
{
cout<<"Student ID: "<<s[i].stuID<<" "<<endl;
cout<<"Student Name: "<<s[i].lname<<", "<<s[i].fname<<" "<<endl;
cout<<"Course IDs: "<<se[i].courseID<<" "<<endl;
cout<<"Start Date: "<<se[i].startDate<<" "<<endl;
cout<<"End Date: "<<se[i].endDate<<" "<<endl;
cout<<"Total Credits: "<<se[i].totalCredits<<" "<<endl;
cout<<" "<<endl;
}
}
/**
* Writes session data to file.
* @param {session} sess sessions array.
*/
void writeSessionsToFile(session* sess)
{
ofstream file_out("sessions.txt");
// for now let us just assume there'll always be just 4 sessions.
for (size_t i = 0; i < 4; ++i)
{
file_out << sess[i].sessionID << " ";
file_out << sess[i].stuID << " ";
file_out << sess[i].courseID << " ";
file_out << sess[i].startDate << " ";
file_out << sess[i].endDate << " ";
file_out << sess[i].totalCredits << " ";
// empty line in the end of each entry.
file_out << endl;
}
}

int main()
{
cout<<"Welcome to the CS 230 Data Structures class add program!"<<endl;
cout<<"Please follow the prompt to gain a report of your courses for the year: "<<endl<<endl;
//declare and initialize 4 students
student stu[4];
fillStudents(stu, 4);
//declare and initialize 10 courses
course courses[10];
fillCourses(courses, 10);
//assign 4 courses for each student
cout<<"Enter a class selection based on the chart above (1-10), please do not choose the same class twice: "<<endl;
cout<<"Each student goes by how their information was added"<<endl<<endl;
session sessions[4];
fillSession(stu, courses, sessions);
writeSessionsToFile(sessions);
//display a report showing each student with his/her courses
//show the total number of credits for each student
cout<<"Please find your name and other important information below to see your classes and credit totals: "<<endl;
cout <<"=========="<<endl;
display_report(stu, courses, sessions);
cout <<"=========="<<endl;

// instead of system(pause), pause doesn't work on linux.
cin.get();
return 0;
}