Open In App

Student Data Management in C++

Last Updated : 24 Nov, 2022
Improve
Improve
Like Article
Like
Save
Share
Report

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++ 

C++




// Include all the necessary libraries.
#include <fstream>
#include <iostream>
#include <stdio.h>
#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 allotted 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 different
                    // 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 separated 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 = 0;
            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.

 



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads