mardi 20 avril 2021

How to display all the data I entered into my text file?

The following is a code to enter some details of students into a text file and from the main menu, the user can display them using option 2. My problem is in the section where it should display all the "Taken Courses by student". When I choose to display all data, the "mentioned section using the for loop only display the last value I enter when writing to the file. How can I make it display all my entries? The issue is under the showdata and displaydata functions.

    //Project on Student Management
#include<iostream>
#include<fstream>
#include<iomanip>
#include<stdlib.h>

using namespace std;

class Student
{
    int id;
    int year;
    char grade[50];
    float cgpa;
    int NumberOfcourses;
    char courseName[100];
    char academic_advisor[100];
    char status[100];
    
    public:
        void getData();
        void showData();
        int getID(){return id;}
}s;

void Student::getData()
{
    cout<<"\n\nEnter Student Details......\n";
    cout<<"Enter ID No.     : "; cin>>id;
    cout << "Enter Intake Year of the Student: "; cin >> year;
    cout << "Enter number of Taken courses: ";
    cin >> NumberOfcourses;
        for(int a=1; a<=s.NumberOfcourses; a++)
        {
            cout<<"\nEnter Subject Name: ";
            cin.ignore();
            cin.getline(courseName, 100);
            
            cout << "Enter Grade of Subject: ";
            cin >> grade;
            
            cout<<"\nEnter Subject Status: ";
            cin.ignore();
            cin.getline(status, 100);
            }
    cout << "Enter student CGPA: ";
    cin >> s.cgpa;
    cout << endl;
    cout << "Enter Name of Academic Advisor of Student: "; cin.ignore();
    cin.getline(s.academic_advisor, 100);
}

void Student::showData()
{
    cout << "\n\n.......Student Details......\n";
        cout << "ID No.                                   : " << id << endl;
        cout << "Intake Year                              : " << year << endl;
        cout << "Subjects Taken in Previous Semester      : " << endl;
        for(int t=1; t<=NumberOfcourses; t++)
        {
           cout << "\t" << courseName << ": " << grade << " ("<< status << ") ";
           cout << endl;
          }
        cout << "CGPA                                     : " << cgpa << endl;
        cout << "Name of academic advisor of Student      : " << academic_advisor << endl;
        cout << endl;
}


void addData()
{
    ofstream fout;
    fout.open("Students.txt", ios::out|ios::app);
    s.getData();
    fout.write((char*)&s,sizeof(s));
    fout.close();
    cout<<"\n\nData Successfully Saved to File....\n";
}


void displayData()
{
    ifstream fin;
    fin.open("Students.txt",ios::in);
    while(fin.read((char*)&s,sizeof(s)))
    {
        s.showData();
    }
    fin.close();
    cout<<"\n\nData Reading from File Successfully Done....\n";
}


void searchData()
{
    int n, flag=0;
    ifstream fin;
    fin.open("Students.txt",ios::in);
    cout<<"Enter ID Number you want to search for : ";
    cin>>n;
    
    while(fin.read((char*)&s,sizeof(s)))
    {
        if(n==s.getID())
        {
            cout<<"The Details of ID No. "<<n<<" are: \n";
            s.showData();
            flag++;
        }
    }
    fin.close();
    if(flag==0)
        cout<<"The ID No. "<<n<<" not found....\n\n";
    cout<<"\n\nData Reading from File Successfully Done....\n";
}

void deleteData()
{
    int n, flag=0;
    ifstream fin;
    ofstream fout,tout;

    fin.open("Students.txt",ios::in);
    fout.open("TempStud.txt",ios::out|ios::app);
    tout.open("TrashStud.txt",ios::out|ios::app);

    cout<<"Enter ID Number you want to delete : ";
    cin>>n;
    
    while(fin.read((char*)&s,sizeof(s)))
    {
        if(n==s.getID())
        {
            cout<<"The Following ID No. "<< n <<" has been deleted:\n";
            s.showData();
            tout.write((char*)&s,sizeof(s));
            flag++;
        }
        else
        {
            fout.write((char*)&s,sizeof(s));
        }
    }
    fout.close();
    tout.close();
    fin.close();
    if(flag==0)
        cout<<"The ID No. "<< n <<" not found....\n\n";
    remove("Students.dat");
    rename("tempStud.txt","Students.txt");
}


void modifyData()
{
    int n, flag=0, pos;
    fstream fio;

    fio.open("Students.txt", ios::in|ios::out);
    
    cout<<"Enter ID Number you want to Modify : ";
    cin>>n;
    
    while(fio.read((char*)&s,sizeof(s)))
    {
        pos=fio.tellg();
        if(n==s.getID())
        {
            cout<<"The Following ID No. "<<n<<" will be modified with new data:\n";
            s.showData();
            cout<<"\n\nNow Enter the New Details....\n";
            s.getData();
            fio.seekg(pos-sizeof(s));
            fio.write((char*)&s,sizeof(s));
            flag++;
        }
    }
    fio.close();
    
    if(flag==0)
        cout<<"The ID No. "<<n<<" not found....\n\n";
}

void project()
{
    int ch;
    do
    {
        system("cls");
        cout<<"...............STUDENT MANAGEMENT SYSTEM..............\n";
        cout<<"======================================================\n";
        cout<<"0. Exit from Program\n";
        cout<<"1. Write Data to File\n";
        cout<<"2. Read Data From File\n";
        cout<<"3. Search Data From File\n";
        cout<<"4. Delete Data From File\n";
        cout<<"5. Modify Data in File\n";
        cout<<"Enter your choice  : ";
        cin>>ch;
        system("cls");
        switch(ch)
        {
            case 1: addData(); break;
            case 2: displayData(); break;
            case 3: searchData(); break;
            case 4: deleteData(); break;
            case 5: modifyData(); break;
        }
        system("pause");
    }while(ch);
}

int main()
{
    project();
}

Console Display with problem

Aucun commentaire:

Enregistrer un commentaire