WHEN DATA IS READ FROM FILE AND I SELECT DISPLAY ALL IT FIRSTLY DISPLAY THE INFORMATION FROM THE FILE AND FILLS WHATEVER LEFT OUT OF THE10 RECORDS WITH WEIRD SYMBOLS.

# include <stdio.h>
# include <string.h>
# include <iostream>
# include <fstream>
#include <stdlib.h>

using namespace std;    

typedef struct {
        char fname[20];
        char lname[20];
        char IDNum[20];
        char DOB [20];
        float GPA;
        
} student;



const int num_of_students=10;

int stu_num=0;


//*************************************************************

//*************************************************************

void readfromfile (student temp_array[]) {
    
     ifstream infile ("studentfile.txt");
     

     
     if (!infile){
                        
                        cout << "Error ! File did not open!\n";
                        }
     else{
          for ( int q = 0 ; q < num_of_students; q++)
          {
              infile >>  temp_array[q].fname;
              infile >> temp_array[q].lname;
              infile >> temp_array[q].IDNum;
              infile >> temp_array[q].DOB;
              infile >> temp_array[q].GPA;  
              }
              }
         
        
         infile.close();
         }


//*************************************************
void writetofile(student temp_array[]) {
      ofstream studentfile ("studentfile.txt", ios::app|ios::out);
      if (studentfile.is_open()){
                                 
      
         
         studentfile << temp_array[stu_num-1].fname << endl;
         studentfile << temp_array[stu_num-1].lname << endl; 
         studentfile << temp_array[stu_num-1].IDNum << endl;   
         studentfile << temp_array[stu_num-1].DOB << endl;     
         studentfile << temp_array[stu_num-1].GPA << endl;
      
         }
      else cout << "Error opening file.";
      }//writing to a file
      
//*************************************************
void addStudent(student temp_array[]) {

     string tempValue;
     char ok;
     int total = 0 ;
     int k;
     int mark [4];

     
     
     if (stu_num<num_of_students){
         
         printf("\nAdd Student %d",stu_num+1,"\n");
         
         	   do{//validation to check field length
         printf("\nEnter First Name: ");
		 cin>>tempValue; //input
		 if(tempValue.length()>20){
			 ok='F';
			 printf("\nFirst Name Too Long!");
		 }else{
			 ok='T';
		 }
	   }while(ok!='T');
	   strcpy(temp_array[stu_num].fname, tempValue.c_str());
         
//************** 
        
        do{ //validation to check field length
         printf("\nEnter Last Name: ");
         cin>>tempValue;
         if(tempValue.length()>20){
			 ok='F';
			 printf("\nLast Name Too Long!");
		 }else{
			 ok='T';
		 }
	   }while(ok!='T');
	   strcpy(temp_array[stu_num].lname, tempValue.c_str());
        
//**************
       do{//validation to check field length
         printf("\nEnter ID Number: ");
         cin>>tempValue;
         if(tempValue.length()>20){
			 ok='F';
			 printf("\nID Number Too Long!");
		 }else{
			 ok='T';
		 }
	   }while(ok!='T');

	   strcpy(temp_array[stu_num].IDNum, tempValue.c_str());
         
//**************
         
                do{//validation to check field length
         printf("\nEnter DOB: ");
         cin>>tempValue;
         if(tempValue.length()>20){
			 ok='F';
			 printf("\nDOB Number Too Long!");
		 }else{
			 ok='T';
		 }
	   }while(ok!='T');
	   strcpy(temp_array[stu_num].DOB, tempValue.c_str());
         
//**************   

printf( "\nEnter 4 marks  to compute a GPA. \n");

for( k = 1; k <= 4; k++){

printf("Enter mark %d : ", k);
scanf( "%d" , &mark[k]); 

}


printf("\nThe marks were  :\n ");

for ( k = 1; k<= 4; k++){
printf("%d : %d \n ",k,mark[k]);

total += mark[k];


}

printf("\nThe total is: %d\n" , total );

       temp_array[stu_num].GPA =total / 100.00;
       printf("\nThe GPA is: %.2f. " ,temp_array[stu_num].GPA);

       stu_num +=  1;
       writetofile(temp_array);
      

      
     }else {
          printf("\nArray Full. No more students can be added at this time.");
     }
}


//*************************************************

//*************************************************

void findStudent (student temp_array[])
{
     char searchlname[20];
     bool found;
     int diff;
     int i;
     
     printf("\n**********FIND STUDENT**********") ;
     printf("\nEnter Students Last Name:");
     scanf( "%s", searchlname);
     found = false;
     
     for(i=0; i<num_of_students; i++) {
              diff = strcmp(searchlname,temp_array[i].lname);
              if ( diff == 0) {
                   found = true;
                   printf("\nFirts Name: %s", temp_array[i].fname);
                   printf("\nLast Name: %s",temp_array[i].lname);
                   printf("\nID Number: %s", temp_array[i].IDNum);
                   printf("\nDOB: %s", temp_array[i].DOB);
                   printf("\nGPA: %.2f.", temp_array[i].GPA);
              }
     }
     
     if (found == false) {
               printf("\nNo Matches Found.");
     }
     
}//end of findStudent

//*************************************************

//*************************************************

void displayAll (student temp_array[]) {
     
     printf("\n******DISPLAY ALL******");
     printf("\n");
     for ( int i = 0 ; i < num_of_students; i++){
         
              printf("\nFirts Name: %s", temp_array[i].fname);
              printf("\nLast Name: %s", temp_array[i].lname);
              printf("\nID Number: %s", temp_array[i].IDNum);
              printf("\nDOB: %s", temp_array[i].DOB);
              printf("\nGPA: %.2f", temp_array[i].GPA);
              
     }
}//end of displayAll

//*************************************************

//*************************************************
void bubble_sort(student temp_array[num_of_students]) {

int i, j, flag = 1; 
      char tempfname[20];
      char templname[20];
      char tempIDNum[20];
      char tempDOB [20];
      float tempGPA;           

      for(i = 1; (i <= num_of_students) && flag; i++)
     {
          flag = 0;
          for (j=0; j < (num_of_students -1); j++)
         {
               if (temp_array[j+1].GPA > temp_array[j].GPA)      
              { 
                    strcpy(tempfname, temp_array[j].fname);             
                    strcpy(temp_array[j].fname, temp_array[j+1].fname);
                    strcpy(temp_array[j+1].fname, tempfname);
                    
                    strcpy(templname, temp_array[j].lname);             
                    strcpy(temp_array[j].lname, temp_array[j+1].lname);
                    strcpy(temp_array[j+1].lname, templname);
                    
                    strcpy(tempIDNum, temp_array[j].IDNum);             
                    strcpy(temp_array[j].IDNum, temp_array[j+1].IDNum);
                    strcpy(temp_array[j+1].IDNum, tempIDNum);
                    
                    strcpy(tempDOB, temp_array[j].DOB);             
                    strcpy(temp_array[j].DOB, temp_array[j+1].DOB);
                    strcpy(temp_array[j+1].DOB, tempDOB);
                    
                                      
                    tempGPA = temp_array[j].GPA;             
                    temp_array[j].GPA= temp_array[j+1].GPA;
                    temp_array[j+1].GPA = tempGPA;
                    flag = 1;              
               }
          }
     }
     return;   
}
//*************************************************

//*************************************************
int main (void){
    student student_array[num_of_students];
    char choice;
    readfromfile (student_array);
    printf("\n ***************DATA LOADED FROM FILE***************\n");    
    printf("\n");
    printf("\n******MAIN MENU******");
    printf("\n Choose One of the Following:");
    printf("\n (1) Add Student");
    printf("\n (2) Find Student");
    printf("\n (3) Display All");
    printf("\n (4) Sort students by marks");
    printf("\n (5) Exit\n");
    
    scanf("%c", &choice);
    
    if (choice=='6'){
       exit(0);
    }
    
    while(choice != '5') {
                 switch (choice) {
                        
                 case '1':
                          addStudent (student_array);
                          break;
                 
                 case '2':
                          findStudent (student_array);
                          break;
                
                 case '3':
                          displayAll (student_array);
                          break;
                 
                 case '4':
                          bubble_sort (student_array);
                          break;
                          
                 case '5':
                          exit (0);
                          break;
                 
                 }
                 printf("\n******MAIN MENU******");
                 printf("\n Choose One of the Following:");
                 printf("\n (1) Add Student");
                 printf("\n (2) Find Student");
                 printf("\n (3) Display All");
                 printf("\n (4) Sort students by marks");
                 printf("\n (5) Exit\n");
                 cin >> choice;
                 
    }
    return 0;
    
}//end of main

Recommended Answers

All 4 Replies

Firstly, please don't write in ALL CAPS. It's considered shouting, and is a bit rude.

Secondly, please don't keep starting new threads on the same code problem. I see at least three other threads, under two user names.

Thirdly, does your student data file in fact have exactly as many records as num_of_students? When reading from a file, you can't always count on how many items will be there.

If there are fewer than 10 records, you program doesn't know that. You potentially end up with junk in the trailing records.

You either need to put the number of records as the first entry in the data file, or better, set your reading loop to halt when the data runs out (or you run out of space to store data). You need to track how many records are actually read in (I think your variable "stu_num" is meant to do that, but isn't.) There are plenty examples of that method on this forum and elsewhere (like your textbook?)

the problem is ... i need the reading loop to halt when data runs out but honestly I'm new to C++ and unsure how too...

Instead of reading from the file using a for-loop, you should consider using a while-loop. You can easily set a condition for the loop to halt...

while( data doesnt run out ) { do stuff }

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.