A simple C++ application called Student Management System is used by educational institutions to handle student data and many other data requirements related to students in a school. User can create, view and edit content in this student management system project.
Nowadays, databases are used in every part of our lives. Servers around the world contain trillions of bytes of data. One of the easiest ways to use such a database is with SQL. However, have you ever considered using C++ to manage such a database. In this article, we will discuss how to create multiple views of a text file based on the type of user and adjust accordingly.
This code stores the following information:
- Name and registration number
- Grades for CSE10001
- Grades for CSE10002
- Proctor ID
Program Breakdown
# include < fstream >
# include < iostream >
# include < stdio.h >
# include < string.h >
using namespace std ;
We are including all the necessary libraries in this program to avoid any kind of compile error.
int main ( )
{
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 = "" ;
ifstream f ( "Example.txt" ) ;
string line ;
We are considering the maximum length of the data entered to be 15. And ifstream accessing the file "Example.txt" in which DB is sorted.
for (int i = 0 ; std :: getline ( f , line ) ; + + i ) {
count_n + + ;
}
The above for loop is used to count the number of lines in the file.
while ( option ! = 6 ) {
// This prints out all the available options in the
// DB
cout << " \ n Available operations: \ n1. Add New "
"Students \ n2 . "
<< "Student Login \ n3 . Faculty Login \ n4 . "
"Proctor Login \ n5 . Admin View \ n "
<< "6. Exit\nEnter option: " ;
cin >> option ;
The while loop above will only execute when the option selected is not equal to 6 and printing line by line the available operations, add new student, student login, faculty login, proctor login, admin view, exit for 6th option and entering the 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 ;
}
The above peace of code will come in executing only when the user chooses 1 as the option. In this, it will ask the user to enter the number of student. The entire data of the student will be stored line by line, and then it will ask to enter the registration number and enter the name.
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
<< " \ n Registration Number: " << data
<< endl ;
infile >> data ;
cout << "Name: " << data << endl ;
infile >> data ;
cout << "CSE10001 mark: " << data
<< endl ;
infile >> data ;
cout << "CSE10002 mark: " << data
<< endl ;
infile >> data ;
cout << "Proctor ID: " << data << endl ;
infile.close ( ) ;
check = 1 ;
}
}
In the above demonstrated peace of code the else if loop will executed when the user will choose the 2 as the second option. The registration number has size of 9 characters and ask user to enter the registration number then it will display the Registration Number. Further it will ask for the marks in subject.
if ( check = = 0 ) {
cout << "No such registration number found!"
<< endl ;
}
}
If a user has chosen 0 as an option it will display that No such registration Number found.
else if ( option == 3 ) {
char subcode [ 7 ] ;
cout << "Enter your subject code: ";
cin >> subcode ;
string code1 = "CSE10001" , code2 = "CSE10002" ,
mark = "" ;
ifstream infile ;
int check = 0 ;
cout << " \ n Available operations: \ n1 . Add data "
"about marks \ n "
<< "2. View data\nEnter option: " ;
cin >> option ;
Above else if loop will execute only when the user has selected the 3 rd option. In this, the user will be asked to enter the subject code, Available Operations and to view data. Basically this loop is used to view or add marks to the student database.
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 ) ;
}
In the above peace of code, if the user has selected the option 1, it will show a message that warning you need to add marks; The seek in file has been done according to the length of the data being inserted. It needs to adjust accordingly for different lengths of data.
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 ;
}
}
In the above peace of code the else loop will only execute when the user has selected option 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 = = 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 << " \ n Registration 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 ;
}
}
In the above peace of code, loop displays all the details of students under the same proctor ID.
// 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. "
" \ t Name \ t CSE10001 \ t CSE10002 \ t Proctor "
" 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 ;
}
}
}
}
}
This loop acts as an admin view to see all the data in the file. This variable value can be changed according to your requirement of the administrator password.
Student Database Management Program in 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;
}
}
}
}
}
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: 12BCE2083
Enter your name: Prateek
Enter your proctor ID: 10001
Enter your registration number: 15BCE2022
Enter your name: shubham
Enter your proctor ID: 10002
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: CSE10001
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 : 54
Enter the mark of student#2 : 90
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 Prateek 54 00 10001
15BCE2082 Shubham 89 00 10002
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