I'm writing this grading program that calculates and displays a students grades and after all the students have been entered, it displays(or at least it should) display the group totals. The problem is, everytime i run the program, the program crashes. I can't seem to figure out why it does that. I'd really appreciate it if someone could help me out a bit. Any advice would be really helpful. Thanks!

ps. i wasn't able to calculate the
classes average grade yet.




Code:
#include <cstdlib>
#include <iostream>

using namespace std;

struct studentRecord //structure definition
{
       int studentID;
       char first_name[21];
       char last_name[11];
       int quiz_1;
       int quiz_2;
       int midterm_score;
       int final_score;
       int totalpts;
       double percent;
       char grade;
};

studentRecord student; //structure variable student

//declaring constants
const int maxpts = 200;

//declare function prototypes
bool moreStudents();
void getInput(studentRecord &myStudent);
double computePercent(int totalpts, int);
int computePointsEarned(int quiz_1, int quiz_2, int midterm_score, int final_score);
void displayRecord(studentRecord);
void displayTotals(int totalStudents, double highest, double lowest,
                   double avgPoints);
int computeHighestPoints(int numbers1, int numbers2);
int computeLowestPoints(int numbers1, int numbers2);
int computeClassPoints (int numbers1, int numbers2);
double computeAveragePoints(int allPoints, int totalStudents);
char computeGrade(double input);


int main()
{
    //declare variables
    int totalStudents = 0;
    int highest = 0;
    int lowest = 0;
    int allPoints;
    double avgPoints;
    
    //adjusts number output
    cout.setf(ios::fixed);
    cout.setf(ios::showpoint);
    cout.precision(1);
    
    do
    {
         getInput(student);
         displayRecord(student);
         student.percent = computePercent(student.totalpts, maxpts);
         student.totalpts = computePointsEarned(student.quiz_1, student.quiz_2, 
                                     student.midterm_score, student.final_score);
         student.grade = computeGrade(student.percent);
         highest = computeHighestPoints(highest, student.totalpts);
         lowest = computeLowestPoints(lowest, student.totalpts);
         allPoints = computeClassPoints(allPoints, student.totalpts);
         avgPoints = computeAveragePoints(allPoints, totalStudents);
         totalStudents++; //add 1 to student counter
         
    }while(moreStudents()); //calls the moreStudents() function
    
    displayTotals(totalStudents, highest, lowest, avgPoints);
    
    system("PAUSE");
    return 0;
    
} //end main()

//functions

bool moreStudents()

{
     bool more = false;
     char anotherStudent = 'n';
     
     cout << "\n\nWould You like to enter another student? enter 'y' or 'Y' and press ENTER; \n";
     cout << "if not, enter any other character and press ENTER ";
     
     if(anotherStudent == 'y' || anotherStudent == 'Y')
            more = true;
     else
            more = false;
            
     
     return more;

} //end anotherStudent

void getInput (studentRecord &myStudent)

{
     int ID;
     
     string message = "\n\nEnter Student ID: ";
     
     do
     {
            cout << message;
            cin >> ID;
            
            message = "\n\nError! Please Re-Enter Student ID (1-99999): ";
     
     } while (ID < 1 || ID > 99999);
     
     myStudent.studentID = ID;
     
     
     //asks user to input first and last name

            cout << "Enter First Name: ";
            cin >> myStudent.first_name;
            
            
            cout << "Enter Last Name: ";
            cin >> myStudent.last_name;



    //determines quiz #1 score
    int Quiz1;
    
    string message1 = "Please enter Quiz #1 score: ";
    
    do
    {
           cout << message1;
           cin >> Quiz1;
           
           message1 = "\n\nError! Please Re-Enter Quiz #1 score: ";
    } while (Quiz1 < 0 || Quiz1 > 25);
    
    myStudent.quiz_1 = Quiz1;
    
    //determines quiz #2 score
    int Quiz2;
    
    string message2 = "Please enter Quiz #2 score: ";
    
    do
    {
           cout << message2;
           cin >> Quiz2;
           
           message = "\n\nError! Please Re-Enter Quiz #2 2core: ";
    } while (Quiz2 < 0 || Quiz2 > 25);
    
    myStudent.quiz_2 = Quiz2;
    
    //determines midterm score
    int Midterm;
    
    string message3 = "Please enter Midterm score: ";
    
    do
    {
           cout << message3;
           cin >> Midterm;
           
           message = "\n\nError! Please Re-Enter Midterm 2core: ";
    } while (Midterm < 0 || Midterm > 50);
    
    myStudent.midterm_score = Midterm;
    
    //determines final score
    int Final;
    
    string message4 = "Please enter Final score: ";
    
    do
    {
           cout << message4;
           cin >> Final;
           
           message = "\n\nError! Please Re-Enter Final score: ";
    } while (Final < 0 || Final > 100);
    
    myStudent.final_score = Final;
    
} //end getInput()

int computeHighestPoints(int numbers1, int numbers2)
{
       if (numbers1 >= numbers2)
       return numbers1;
    else
        return numbers2;
}//end computeHighestPoints

int computeLowestPoints(int numbers1, int numbers2)
{
    if (numbers1 <=numbers2)
       return numbers1;
    else
        return numbers2;
}//end computeLowestPoints

int computeClassPoints(int numbers1, int numbers2)
{
    return (numbers1 + numbers2);
}//end computeAllPoints

double computeAveragePoints(int allPoints, int totalStudents)
{
       return (allPoints/totalStudents);
}//end computeAveragePoints
     
double computePercent(int total, int max)
{
       //calculates percentage
       int output;
       output = (maxpts)/total*100;
       return output;
} //end computePercent


int computePointsEarned(int quiz_1, int quiz_2, int midterm_score, int final_score)
{
       //calculates total points earned
       int output;
       output = quiz_1 + quiz_2 + midterm_score + final_score;
       return output;
} //end computePointsEarned

char computeGrade(double input)
{
     if (input >= 90)
        return 'A';
     else if (input >= 80)
          return 'B';
     else if (input >= 70)
          return 'C';
     else if (input >= 60)
          return 'D';
     else return 'F';
}//end computeGrade


void displayRecord(studentRecord staff)
{
     //display input data
     cout << "\n\nStudent ID: " << staff.studentID;
     cout << "\nFirst Name: " << staff.first_name;
     cout << "\nLast Name: " << staff.last_name;
     cout << "\nQuiz #1 Score: " << staff.quiz_1;
     cout << "\nQuiz#2 Score: " << staff.quiz_2;
     cout << "\nMidterm Score: " << staff.midterm_score;
     cout << "\nFinal Score: " << staff.final_score;
     cout << "\nTotal Points Earned: " << staff.totalpts;
     cout << "\nOverall Percentage: " << staff.percent;
     cout << "\nLetter Grade: " << staff.grade;
} //end of displayRecord


void displayTotals(int totalStudents, double highest, double lowest,
                   double avgPoints)
{
     cout << "\n--------------------------------------------\n\n";
     cout << "Total Students = " << totalStudents;
     cout << "\nHighest Total Points Earned = " << highest;
     cout << "\nLowest Total Points Earned = " << lowest;
     cout << "\nAverage Total Points Earned = " << avgPoints;
     cout << "\nAverage Letter Grade Earned = ???";

}//end displayTotals