Gestión de datos de estudiantes en C++

Las bases de datos se están utilizando en todos los aspectos de nuestras vidas en este momento. Trillones de bytes de datos se almacenan en servidores de todo el mundo. SQL es uno de los métodos más básicos para usar una base de datos de este tipo. Pero, ¿ha pensado alguna vez en usar C++ para mantener una base de datos de este tipo? En esta publicación, hablaremos sobre la implementación de diferentes vistas en un archivo de texto según el tipo de usuario y la edición en consecuencia.

Los datos almacenados con este código son: 
1) Número de registro 
2) Nombre 
3) Marcas en CSE1001 
4) Marcas en CSE1002 
5) ID de supervisor

El siguiente código es una implementación simple de Student Management Project escrito en 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 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 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;
                }
            }
        }
    }
}

Producción: 

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

Tenga en cuenta que configuré la posición del puntero de acuerdo con la longitud de los datos que estoy ingresando en el archivo de texto. Algunas de las cosas que asumí son que el número de registro siempre tiene 9 caracteres, el código de asunto es CSE1001/CSE1002, la identificación del supervisor tiene 4 caracteres, las marcas tienen solo 2 caracteres. Deberá cambiar el código en consecuencia si desea ingresar algún otro tipo de datos.
Este artículo es una contribución de Dheeraj Nair . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *