Student Management System in C++

Today we are going to write a program for Student Management System in C++.

This code is compiled in Turbo C++ which you can download from here Turbo c++ for windows

 

Program for Student Management System in C++

#include <iostream.h>
#include <string.h>
#include <conio.h>

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Structure for the student record
struct Student{
	char id[10];		//student's id #
	char lname[30];		//student's last name
	char fname[30];		//student's first name
	char mname[30];		//student's middle name
	char course[50];	//student's course	
	int year;			//student's year level
	int age;			//student's age
};
//end of structure student
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//Structure for a particular subject
struct Subject{
	Student students[40];	//the array where the students to be enrolled will be stored
	int size;				//the number of students currently enrolled in the subject
	char name[50];			//the name of the subject, e.g. CS210
};
//end of structure subject
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//function declarations
bool enrol(Subject&,Student);			//enrolls a student in the subject
bool drop(Subject&,char[]) ;			//drops a student from the subject based on the ID
void display(Subject);					//displays all students enrolled in the subject
void display(Student);					//displays a particular student
void displayByYearLevel(Subject,int);	//displays all students with a particular year level
void displayByCourse(Subject,char[]);	//displays all students with a particular course
void displayByName(Subject,char[]);		//displays all students with a particular last name
void displayByID(Subject,char[]);		//displays student with corresponding id
void sortByName(Subject&);				//sorts the enrolled students in alphabetical order based on the last name
void sortByID(Subject&);				//sorts the enrolled students in ascending order based on the ID number
int searchByName(Subject,char[]);		//searches if a student with such a name is enrolled in the subject
int searchByID(Subject,char[]);			//searches if a student with such an ID is enrolled in the subject
//end of function declarations
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//main function
void main(){
	Subject s;
	int choice;

	strcpy(s.name,"CS210");
	s.size = 0;
	
	
	do{
		cout<<"Menu: "<<endl;	//displays the menu
		cout<<"1. Enroll a Student\n2. Drop a Student\n3. Sort by ID\n4. Sort by Name\n5. Display by Year\n"
			<<"6. Display by Name\n7. Display by ID\n8. Display by Course\n9. Display All\n10. Exit"<<endl;
		cout<<"Enter your choice: ";
		cin>>choice;			//asks the user to enter choice

		switch(choice){
		case 1:										//for the case when the user chooses 1
			Student st;								//this is where the inputs will be stored
			cout<<"Enter ID: ";						//the following lines asks for information about a student
			cin>>st.id;
			cout<<"Enter first name: ";
			cin.ignore();
			cin.getline(st.fname,30);
			cout<<"Enter middle name: ";
			cin.getline(st.mname,30);
			cout<<"Enter last name: ";
			cin.getline(st.lname,30);
			cout<<"Enter course: ";
			cin.getline(st.course,50);
			cout<<"Enter year level: ";
			cin>>st.year;
			cout<<"Enter age: ";
			cin>>st.age;

			if(enrol(s,st)==true)		//checks if there was successful enrol		
				cout<<"Student successfully enrolled..."<<endl;
			else
				cout<<"Either subject is full or student is already enrolled..."<<endl;
			
			break;
		case 2:
			char id[10];
			cout<<"Enter ID# of student to be dropped: ";	//asks the user to enter the ID of the student to be dropped
			cin>>id;

			if(drop(s,id)==true)							//checks if there was successful drop
				cout<<"Student successfully dropped...\n";
			else
				cout<<"Student cannot be dropped due to non-enrolment\n";

			break;
		case 3:
			sortByID(s);				//calls sorByID
			cout<<"Done sorting...\n";

			break;
		case 4:
			sortByName(s);				//calls sortByName
			cout<<"Done sorting...\n";

			break;
		case 5:
			int y;
			cout<<"Enter year level: ";	//asks the year level for the display by year level	
			cin>>y;

			displayByYearLevel(s,y);	//calls displaByYearLevel
			
			break;
		case 6:
			char name[30];
			cout<<"Enter last name: ";	//asks the last name for the display by last name
			cin>>name;

			displayByName(s,name);		//calls displayByName

			break;
		case 7:
			char idr[10];
			cout<<"Enter ID number: ";	//asks for the id for display by ID
			cin>>idr;

			displayByID(s,idr);			//calls displayByID

			break;
		case 8:
			char course[50];
			cout<<"Enter course: ";
			cin.ignore();
			cin.getline(course,50);		//asks for the course to be used in display by course

			displayByCourse(s,course);	//calls display by course
			
			break;
		case 9:
			display(s);					//calls display for displaying all students...
			break;
		case 10:
			cout<<"Thank you and have a good day.\n";	//displays this line when user chooses to exit
			break;
		default:
			cout<<"No such choice exists...\n";		//in case the user types in a choice not listed in the menu.
		}
	}while(choice!=10);	//so long as the user does not choose 10, the loop will repeatingly prompt the menu.
}
//end of main function
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//function definitions

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function enrolls the student st in the subject s
bool enrol(Subject &s, Student st){
	if( (searchByID(s,st.id)==-1) && (s.size < 40) ){	//checks if the subject is not full and that the student is not enrolled in the subject  
		s.students[s.size] = st;	//stores st in the next available space in the array
		s.size++;					//increments the size of the subject
		return true;
	}
	else
		return false;
}
//end of enrol
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function drops a student from a subject based on the ID
bool drop(Subject &s, char id[]){
	int pos = searchByID(s,id);		//gets the position in the array where the student with the given input id is stored
	if(pos!=-1){					//this means that the student is indeed enrolled and therefore can be dropped
		for(int i=pos; i<s.size-1; i++){
			s.students[i] = s.students[i+1];	//shifts the students to the left so the student to be dropped is overwritten
		}
		s.size--;				//the size of the subject must be decremented since it's one student less already
		return true;
	}
	else
		return false;			//this means that the ID was found to be not enrolled in the subject
}
//end of drop
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function displays all the information of a student
void display(Student st){
	cout<<"ID #: "<<st.id<<endl;									//prints the id of the student
	cout<<"Name: "<<st.lname<<", "<<st.fname<<" "<<st.mname<<endl;	//prints the name of the student
	cout<<"Course: "<<st.course<<endl;								//prints the course of the student
	cout<<"Year Level: "<<st.year<<endl;							//prints the year level of the student
	cout<<"Age: "<<st.age<<endl;									//prints the age of the student
	cout<<"Press any key to continue..."<<endl;
	getch();
}
//end of display
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function displays all the students currently enrolled in the subject
void display(Subject s){
	if(s.size==0){									//checks if there are no students enrolled in the subject
		cout<<"No students enrolled yet..."<<endl;	//if there are none, it prints this message.
	}
	else{
		for(int i=0; i<s.size; i++)		//loops through all the students currently enrolled in the subject
			display(s.students[i]);		//calls the display function that accepts a student as a parameter
	}

}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function displays all students with year level y
void displayByYearLevel(Subject s, int y){
	if(s.size==0){									//checks if there are no students enrolled in the subject
		cout<<"No students enrolled yet..."<<endl;	//if there are none, it prints this message.
	}
	else{
		for(int i=0; i<s.size; i++){		//loops through all the students currently enrolled in the subject
			if(s.students[i].year == y)		//checks if the student in the subject has year level y
				display(s.students[i]);		//calls the display function that accepts a student as a parameter
		}
	}
}
//end of displayByYearLevel
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function displays all students with course crse
void displayByCourse(Subject s, char crse[]){
	if(s.size==0){									//checks if there are no students enrolled in the subject
		cout<<"No students enrolled yet..."<<endl;	//if there are none, it prints this message.
	}
	else{
		for(int i=0; i<s.size; i++){					//loops through all the students currently enrolled in the subject
			if(strcmp(s.students[i].course,crse)==0)	//checks if the student in the subject has course crse
				display(s.students[i]);					//calls the display function that accepts a student as a parameter
		}
	}
}
//end of displayByCourse
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function displays all students with last name equal to name
void displayByName(Subject s, char name[]){
	if(s.size==0){									//checks if there are no students enrolled in the subject
		cout<<"No students enrolled yet..."<<endl;	//if there are none, it prints this message.
	}
	else{
		for(int i=0; i<s.size; i++){				//loops through all the students currently enrolled in the subject
			if(strcmp(s.students[i].lname,name)==0)	//checks if the student in the subject has last name equal to name
				display(s.students[i]);				//calls the display function that accepts a student as a parameter
		}
	}
}
//end of displayByName
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function displays the student with id number id
void displayByID(Subject s, char id[]){
	if(s.size==0){									//checks if there are no students enrolled in the subject
		cout<<"No students enrolled yet..."<<endl;	//if there are none, it prints this message.
	}
	else{
		for(int i=0; i<s.size; i++){				//loops through all the students currently enrolled in the subject
			if(strcmp(s.students[i].id,id)==0)		//checks if the student in the subject has id equal to id
				display(s.students[i]);				//calls the display function that accepts a student as a parameter
		}
	}
}
//end of displayByID
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function searches for a student in the subject with id number equal to id
int searchByID(Subject s, char id[]){
	for(int i=0; i<s.size; i++){					//loops through all the students currently enrolled in the subject
			if(strcmp(s.students[i].id,id)==0)		//if the id matches, the function will return i
				return i;							//this i is the position of that student in the array with id equal to id
	}
	return -1;	//this means that no student in the class has such an id.
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//end of searchByID
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function sorts the enrolled students by ID and it uses the selection sort algorithm
void sortByID(Subject &s){
	for(int i=0; i<s.size-1; i++){
		int min = i;	//assumes that the minimum is initially i					
		for(int j=i+1; j<s.size; j++){
			
			if(strcmp(s.students[j].id,s.students[min].id)<0)		//searches for an id that is less than the current min
				min = j;										//if so, this becomes the new minimum
		}
		Student temp = s.students[i];		//this part swaps the student at position i and that at position min
		s.students[i] = s.students[min];
		s.students[min] = temp;
	}
}
//end of sortByID
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//This function sorts the enrolled students by name and uses selection sort as well
void sortByName(Subject &s){
	for(int i=0; i<s.size; i++){
		int min = i;	//assumes that the minimum is initially i
		for(int j=i+1; j<s.size; j++){
			if(strcmp(s.students[j].lname,s.students[min].lname)<0)	//searches for an id that is less than the current min
				min = j;											//if so, this becomes the new minimum
			else
			if(strcmp(s.students[j].lname,s.students[min].lname)==0){		//if the last names happen to be the same
				if(strcmp(s.students[j].fname,s.students[min].fname)<0)	//the first name is then checked
					min = j;
				else
				if(strcmp(s.students[j].fname,s.students[min].fname)==0){		//if the first names are also the same
					if(strcmp(s.students[j].mname,s.students[min].mname)<0)	//the middle name is then checked
						min = j;
				}
			}
		}
		Student temp = s.students[min];		//this part swaps the student at position i and that at position min
		s.students[min] = s.students[i];
		s.students[i] = temp;
	}
}
//end of sortByName
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

Comment if you face any problem.