Student Data Management in C++

Databases are being used in every aspect of our lives right now. Trillions of bytes of data are being stored in servers around the world. SQL is one of the most basic methods to use such a database. But have you ever thought about using C++ to maintain such a database. In this post, we will talk about implementing different views on a text file according to the type of user and edit accordingly.

The data stored using this code are:
1) Registration number
2) Name
3) Marks in CSE1001
4) Marks in CSE1002
5) Proctor ID

Following code is a simple implementation of Student Management Project written in C++

//Include all the necessary libraries.
#include<stdio.h>	
#include<iostream>
#include<fstream>
#include<string.h>

using namespace std;

int main(){
    //Considering the max length of data entered (name) to be 15.
    char data[15];	
    int n = 0, option = 0, count_n = 0;
    //This is the initial mark alloted to a subject.
    string empty = "00";	
    string proctor = "";
    //Name of the file in which DB is stored.
    ifstream f("Example.txt");		
    string line;
   
    //The following for loop counts the total number of lines in the file.
    for (int i = 0; std::getline(f, line); ++i){	
        count_n++;}
	
	while(option != 6){
   //This prints out all the available options in the DB
	cout << "\nAvailable operations: \n1. Add New Students\n2."
        << "Student Login\n3. Faculty Login\n4. Proctor Login\n5. Admin View\n"
        << "6. Exit\nEnter option: ";
	cin >> option;

	if(option == 1){
	cout << "Enter the number of students: ";
	cin >> n;
	
	count_n = count_n + n;
	
	for (int i = 0;i < n;i++){
	    ofstream outfile;
	        outfile.open("Example.txt",ios::app);
		//The entire data of a single student is stored line-by-line.
		cout << "Enter your registration number: ";
		cin >> data;
		outfile << data << "\t";
		
		cout << "Enter your name: ";
		cin >> data;
		int len = strlen(data);
		
		while (len < 15){
			data[len] = ' ';
			len = len + 1;
		}
		outfile << data << "\t";
		//Inserting empty data initially into the file
		outfile << empty << "\t";
		outfile << empty << "\t";    
		
		cout << "Enter your proctor ID: ";
		cin >> proctor;
		
		outfile << proctor << endl;
	}}
	
	else if (option == 2){
		char regno[9];
		cout << "Enter your registration number: ";
		cin >> regno;
		ifstream infile;
		int check = 0;
		infile.open("Example.txt",ios::in);
		
		//This loop prints out the data according to the registration number specified.
		while (infile >> data){
		if (strcmp(data,regno) == 0){
		    cout << "\nRegistration Number: " << data << endl;
		    infile >> data;
		    cout << "Name: " << data << endl;
			
		    infile >> data;
	            cout << "CSE1001 mark: " << data << endl;
			
		    infile>>data;
		    cout<<"CSE1002 mark: "<<data<<endl;
			
		    infile>>data;
		    cout<<"Proctor ID: "<<data<<endl;
			
		    infile.close();
		    check = 1;}
		}
		
		if (check == 0){
		    cout<<"No such registration number found!"<<endl;}	
		
	}
	
	//This loop is used to view and add marks to the database of a student.
	else if (option == 3){
		char subcode[7];
		cout << "Enter your subject code: ";
		cin >> subcode;
		string code1 = "CSE1001", code2 = "CSE1002",mark = "";
		ifstream infile;
		int check = 0;
		
		cout << "\nAvailable operations: \n1. Add data about marks\n"
                << "2. View data\nEnter option: ";
		cin >> option;
		
		if (option == 1){
		    cout << "Warning! You would need to add mark"
                    << "details for all the students!" << endl;
		    for(int i = 0;i < count_n;i++){
		        fstream file("Example.txt");

                              	//The seek in file has been done according to the length
			//of the data being inserted. It needs to adjusted accordingly
			//for diffferent lengths of data.

			if(strcmp(subcode,code1.c_str()) == 0){
              		    file.seekp(26+37*i,std::ios_base::beg);
		            cout << "Enter the mark of student#" << (i+1) << " : ";
		 	    cin >> mark;
			    file.write(mark.c_str(),2);}
			
			if(strcmp(subcode,code2.c_str()) == 0){
			    file.seekp(29+37*i,std::ios_base::beg);
			    cout << "Enter the mark of student#" << (i+1) << " : ";
			    cin >> mark;
			    file.write(mark.c_str(),2);}
			}
			
		}

		//This loop is used to view marks of a student.
		//The extra infile commands have been used to get a specific mark 
		//only since the data has been seperated by a tabspace.

		else if(option == 2){
		infile.open("Example.txt",ios::in);
		if (strcmp(subcode,code1.c_str()) == 0){
		    cout << "Registration number - Marks\n" << endl;
		    while(infile >> data){
		    cout << data;
		    infile >> data;
	            infile >> data;
		    cout << " - " << data << endl;
		    infile >> data;
		    infile >> data;
		    check = 1;
			}
		}
		
		infile.close();
		infile.open("Example.txt",ios::in);		

		if(strcmp(subcode,code2.c_str()) == 0){
		    cout << "Registration number - Marks\n" << endl;
	            while(infile >> data){
		    cout << data;
		    infile >> data;
		    infile >> data;
		    infile >> data;
		    cout << " - " << data << endl;
		    infile >> data;
		    check = 1;
			}
		}}
		
		infile.close();
		
		if (check == 0){
			cout << "No such subject code found!" << endl;
		}
		
	}

	//This loop displays all the details of students under the same proctor ID. 

	else if (option == 4){
	    char procid[7];
	    cout << "Enter your proctor ID: ";
	    cin >> procid;
            int check = 1;
	    char temp1[100], temp2[100], temp3[100];
	    char temp4[100], id[100];
	    ifstream infile;
	    infile.open("Example.txt",ios::in);
		
	    while (infile >> temp1){
	        infile >> temp2;			
		infile >> temp3;
		infile >> temp4;
		infile >> id;
		
		if (strcmp(id,procid) == 0){			
			cout << "\nRegistration Number: " << temp1 << endl;
			cout << "Name: " << temp2 << endl;
			cout << "CSE1001 Mark: " << temp3 << endl;
			cout << "CSE1002 Mark: " << temp4 << endl;
			check = 1;
		}
		}
		
		if (check == 0){
			cout << "No such proctor ID found!" << endl;
		}}
	
	//This loop acts as an admin view to see all the data in the file.

	else if(option == 5){
		char password[25];
		cout << "Enter the admin password: ";
		cin >> password;

		//This variable value can be changed according to your requirement 
		//of the administrator password.

		string admin_pass = "admin";
		
		if (strcmp(password,admin_pass.c_str()) == 0){
			cout << "Reg No.       \tName\tCSE1001\tCSE1002\tProctor ID" << endl;
			ifstream infile;
			infile.open("Example.txt",ios::in);
			char data[20];
			
			while(infile >> data){
				cout << data << "\t";
				infile >> data;
				cout << data << "\t";
				infile >> data;
				cout << data << "\t";
				infile >> data;
				cout << data << "\t";
				infile >> data;
				cout << data << endl;
			}
		}
	}
}}

Output:


Available operations: 
1. Add New Students
2. Student Login
3. Faculty Login
4. Proctor Login
5. Admin View
6. Exit
Enter option: 1
Enter the number of students: 2
Enter your registration number: 15BCE2083
Enter your name: Dheeraj
Enter your proctor ID: 1001
Enter your registration number: 15BCE2082
Enter your name: Rohan
Enter your proctor ID: 1002

Available operations: 
1. Add New Students
2. Student Login
3. Faculty Login
4. Proctor Login
5. Admin View
6. Exit
Enter option: 3
Enter your subject code: CSE1001

Available operations: 
1. Add data about marks
2. View data
Enter option: 1
Warning! You would need to add mark details for all the students!
Enter the mark of student#1 : 52
Enter the mark of student#2 : 89
No such subject code found!

Available operations: 
1. Add New Students
2. Student Login
3. Faculty Login
4. Proctor Login
5. Admin View
6. Exit
Enter option: 5
Enter the admin password: admin
Reg No.       	Name	CSE1001	CSE1002	Proctor ID
15BCE2083	Dheeraj	52	00	1001
15BCE2082	Rohan	89	00	1002

Available operations: 
1. Add New Students
2. Student Login
3. Faculty Login
4. Proctor Login
5. Admin View
6. Exit
Enter option: 6 


------------------
(program exited with code: 0)
Press return to continue

Do note that I have set the pointer position according to the length of the data I am entering in the text file. Some of the things which I had assumed are the registration number is always 9 characters long, subject code is either CSE1001/CSE1002, proctor ID is 4 characters long, marks is just 2 characters long. You would need to change the code accordingly if you want to enter some other type of data.

This article is contributed by Dheeraj Nair. If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GATE CS Corner    Company Wise Coding Practice





Writing code in comment? Please use ide.geeksforgeeks.org, generate link and share the link here.