C++ Database project Demo

This a database management project  that demonstrate the database operations. The operations include add, edit and delete the records. User can also search the records.

//rmyedu@hotmail.com
//student of BCE
# include < iostream.h >
# include < conio.h >
# include < fstream.h >
# include < dos.h >
# include < stdio.h >
# include < string.h >
# include < stdlib.h >
# include < graphics.h >
//function declaration phase

int alphachk(char string[], int);
int emptychk(char field[]);
int doublechk(char field[]);
void processing();
void enter();
void display();
void del();
void search();

//class declaration phase
class log {
public:
    char article[18];
    char brand[18];
    char modle[12];
    char sep[8];
    unsigned int quant;
    unsigned int price;
};

//global variables

int deletion = 0;
int exiting = 0;
int initial = 0;
int searching = 0;

//body of main function

void main() {

    char choice;
    initial = 1;
    processing();
    do {
        clrscr();
        cout << "\n" << __TIME__ << ", " << __DATE__ << ".
            "<<"This (MENU BASED DATABASE.) Bis a COPYRIGHT(C) SOFTSOLUTIONS(R).";
        cout << "Enter \"E\" to ENTER Record.\n";
        cout << "   Enter \"D\" to DISPLAY Record.\n";
        cout << "   Enter \"T\" to DELETE Record.\n";
        cout << "   Enter \"S\" to SEARCH Record.\n";
        cout << "   Enter \"X\" to EXIT.\n";
        cout << "\n Enter Choice :";
        _setcursortype(_NORMALCURSOR);
        choice = getch();
        switch (choice) {
        case 'E':
        case 'e':
            processing();
            enter();
            break;
        case 'D':
        case 'd':
            processing();
            display();
            break;
        case 'T':
        case 't':
            processing();
            del();
            break;
        case 'S':
        case 's':
            processing();
            search();
            break;
        case 'X':
        case 'x':
            exiting++;
            processing();
            exit(0);

        default:
            cout << "INVALID ENTRY!";
            getch();
        }

    } while (choice != 'A' || 
        choice != 'a' || 
        choice != 'D' || 
        choice != 'd' || 
        choice != 'E' || 
        choice != 'e' || 
        choice != 'B' || 
        choice != 'b' || 
        choice != 'C' || 
        choice != 'c' || 
        choice != 'X' || 
        choice != 'x');
}

//function to take onlyalphabets

int alphachk(char string[], int len) {
    int a = 0;
    for (int i = 0; i < len; i++) {
        if (!((string[i] >= 65 && string[i] < 91) || 
            (string[i] > 96 && string[i] < 123) || (string[i] == 32))
        )
            ++a;
    }
    if (a == 0)
        return 0;
    else
        cout << "Only Alphabatical value required!   ENTER AGAIN";
    getch();
    return 1;
}

//fuction to check and emptyentry

int emptychk(char field[]) {
    if (field[0] == 32 || field[0] == '\0') {
        cout << "You cannot leave this field empty!   ENTER AGAIN";
        getch();
        return 1;
    }
    else
        return 0;
}

//function to check double entry//

int doublechk(char field[]) {
    ifstream ptr1;
    log phy1;
    int flag = 0;
    ptr1.open("record.dat", ios::in);
    do {
        if ((strcmpi(field, phy1.modle)) == 0)
            flag = 1;
    } while (ptr1.read((char*)&phy1, sizeof(phy1)) && !flag);
    ptr1.close();
    if (flag == 1) {
        cout << "Data already exist!   ENTER AGAIN";
        getch();
    }
    return flag;
}

//function to display processing bar//

void processing() {
    _setcursortype(_NOCURSOR);
    textcolor(WHITE);
    textbackground(RED);
    clrscr();
    if (initial == 1) {
        gotoxy(34, 10);
        cout << "LOADING file...";
        gotoxy(34, 11);
        cout << "please wait";
        initial = 0;
    }
    else if (deletion == 1) {
        gotoxy(34, 10);
        cout << "DELETIG DATA...";
        deletion = 0;
    }
    else if (searching == 1) {
        gotoxy(34, 10);
        cout << "SEARCHING DATA...";
        searching = 0;
    }
    else if ((deletion == 0 && exiting == 0 && searching == 0)) {
        clrscr();
        gotoxy(34, 10);
        cout << "PROCESSING...";
    }
    gotoxy(15, 20);

    cout << "\n";
    gotoxy(15, 21);
    cout << "\n";
    gotoxy(15, 22);

    cout << "\xDB";
    for (int i = 0; i < 46; i++) {
        delay(30 + i);
        if ((exiting != 0) && i <= 23) {
            gotoxy(30, 10);
            cout << "saving changes... ";
        }
        else if ((exiting != 0) && i >= 23) {
            gotoxy(30, 10);
            cout << "exiting........";
        }

        gotoxy(17 + i, 21);
        cout << "";
    }
    textcolor(WHITE);
    textbackground(RED);
    clrscr();
}
//function to take entery//

void enter() {
    _setcursortype(_NORMALCURSOR);
    int ch;
    char c1[] = "monitor", c2[] = "speaker", c3[] = "RAM", c4[] = "CPU", c5[] = "HDD";
    int choice;
    log phy;
    ofstream ptr;
    do {
        do {
            clrscr();
            gotoxy(5, 3);
            cout << "  1\t\t2\t\t3\t\t4\t\t5";
            gotoxy(5, 5);
            cout << "monitors\tspeakers\tRAM\t        CPU\t       HDD";
            gotoxy(5, 10);
            cout << "NOTE: All the asseseries such as casing, floppy drives and cddrives \n\t \
                are included to change the specifications contact ourasinistrator \n\t\t\t\tTHANK YOU";
            gotoxy(5, 15);
            cout << "\n\tenter product no. to enter (6 for any other) : ";
            cin >> choice;
            if (choice >= 1 && choice <= 6)
                break;
            else {
                gotoxy(5, 17);
                cout << "invalid entry re enter : ";

            }
        } while (1);

        do {
            ptr.open("record.dat", ios::app);
            clrscr();
            gotoxy(10, 10);
            if (choice == 1) strcpy(phy.article, c1);
            if (choice == 2) strcpy(phy.article, c2);
            if (choice == 3) strcpy(phy.article, c3);
            if (choice == 4) strcpy(phy.article, c4);
            if (choice == 5) strcpy(phy.article, c5);
            if (choice == 6) {
                cout << "Enter name of Article : ";
                gets(phy.article);
            }

        } while (alphachk(phy.article, strlen(phy.article)) || emptychk(phy.article));
        do {
            clrscr();
            gotoxy(10, 10);
            cout << "Enter name of Manufecturer/Brand : ";
            gets(phy.brand);

        } while ((alphachk(phy.brand, strlen(phy.brand))) || (emptychk(phy.brand)));
        do {
            clrscr();
            gotoxy(10, 10);
            cout << "Enter Modle : ";
            gets(phy.modle);
        } while ((doublechk(phy.modle)) || (emptychk(phy.modle)));

        do {
            clrscr();
            gotoxy(10, 10);
            if (choice == 3 || choice == 4)
                cout << "Enter Memory/Clock speed : ";
            else if (choice == 1)
                cout << "Enter size in inches : ";
            else if (choice == 2)
                cout << "Enter power : ";
            else if (choice == 5)
                cout << "enter capacity in GB : ";
            else
                cout << "any specifications : ";
            gets(phy.sep);
        } while (emptychk(phy.sep));

        clrscr();
        gotoxy(10, 10);
        cout << "Enter Quantity : ";
        cin >> phy.quant;
        clrscr();
        gotoxy(10, 10);
        cout << "Enter Price : ";
        cin >> phy.price;
        ptr.write((char*)&phy, sizeof phy);
        do {
            clrscr();
            gotoxy(10, 10);
            cout << "Do you want to enter more data : ";
            ch = getche();
            ptr.close();
        } while (!(ch == 'Y' || ch == 'y' || ch == 'N' || ch == 'n'));
    } while (ch == 'y' || ch == 'Y');
    processing();
}

//function to display existing records//

void display() {
    _setcursortype(_NOCURSOR);
    int i = 5;
    ifstream ptr2;
    struct log phy2;
    ptr2.open("record.dat", ios::out);
    gotoxy(2, 2);
    cout << "Article";
    gotoxy(17, 2);
    cout << "Brand";
    gotoxy(32, 2);
    cout << "Model";
    gotoxy(47, 2);
    cout << "Specification";
    gotoxy(62, 2);
    cout << "Price";
    gotoxy(70, 2);
    cout << "Quantity";
    cout << "\n****************************************************************************\n";
    while (ptr2.read((char*)&phy2, sizeof phy2)) {

        gotoxy(2, i);
        cout << phy2.article;
        gotoxy(17, i);
        cout << phy2.brand;
        gotoxy(32, i);
        cout << phy2.modle;
        gotoxy(47, i);
        cout << phy2.sep;
        gotoxy(62, i);
        cout << phy2.price;
        gotoxy(70, i);
        cout << phy2.quant;
        i += 2;
    }
    ptr2.close();
    getch();
    processing();
}
//function to delete records//
void del() {
    _setcursortype(_NORMALCURSOR);
    log phy4;
    int delcount = 0;
    char kmodel[18];
    ifstream ptr4;
    ofstream ptr5;
    clrscr();
    char choice;
    int choice1;
    do {
        delcount = 0;
        _setcursortype(_NORMALCURSOR);
        do {
            clrscr();
            gotoxy(10, 10);
            cout << "Are You Sure To Delete Records (y/n) : ";
            cin >> choice;
        } while (!(choice == 'y' || choice == 'n'));
        clrscr();
        if (choice == 'n') {}
        else if (choice == 'y') {
            gotoxy(10, 8);
            cout << "NOTE: the compatibility is highly case sensitive ";
            gotoxy(10, 10);
            cout << "enter the product name to be deleted :";
            gets(kmodel);
            searching = 1;
            processing();
            ofstream ptr5;
            ptr4.open("record.dat", ios::in);
            ptr5.open("removerecord.dat", ios::out);
            while ((ptr4.read((char*)&phy4, sizeof(phy4)))) {
                if ((strcmp(kmodel, phy4.article)) != 0) {
                    ptr5.write((char*)&phy4, sizeof(phy4));
                }
                else
                    delcount++;
            }
            ptr4.close();
            ptr5.close();
            ofstream ptr6;
            ifstream ptr7;
            ptr6.open("record.dat", ios::out);
            ptr7.open("removerecord.dat", ios::in);

            while (ptr7.read((char*)&phy4, sizeof phy4)) {
                ptr6.write((char*)&phy4, sizeof phy4);
            }
            ptr6.close();
            ptr7.close();
            ptr7.open("removerecord.dat", ios::out);
            ptr7.close();
            if (delcount == 0) {
                gotoxy(10, 10);
                cout << "NO SUCH RECORD FOUND \n          UNABLE TO DELETE DATA";
            }
            else {
                deletion = 1;
                processing();
            }
        }
        getch();
        do {
            clrscr();
            gotoxy(10, 10);
            cout << "1 : return to deletion menu ";
            gotoxy(10, 12);
            cout << "2 : exit ";
            cin >> choice1;
        } while (!(choice1 == 1 || choice1 == 2));
    } while (choice1 == 1);

    //else;
}

//function to search arecord//

void search() {
    _setcursortype(_NORMALCURSOR);
    searching = 1;
    ifstream ptr3;
    log phy6;
    char choice;
    do {
        searching = 1;
        int i = 5;
        _setcursortype(_NORMALCURSOR);
        clrscr();
        ptr3.open("record.dat", ios::in);
        char kmodel[18];
        gotoxy(10, 8);
        cout << "NOTE : the search is highly case sensitive ";
        gotoxy(10, 10);
        cout << "enter a product to search : ";
        gets(kmodel);
        processing();
        clrscr();
        cout << "\n***********************\n";
        gotoxy(2, 3);
        cout << "Article";
        gotoxy(17, 3);
        cout << "Brand";
        gotoxy(32, 3);
        cout << "Model";
        gotoxy(47, 3);
        cout << "Specification";
        gotoxy(62, 3);
        cout << "Price";
        gotoxy(70, 3);
        cout << "Quantity";

        while ((ptr3.read((char*)&phy6, sizeof(phy6)))) {
            if ((strcmp(kmodel, phy6.article)) == 0) {
                gotoxy(2, i);
                cout << phy6.article;
                gotoxy(17, i);
                cout << phy6.brand;
                gotoxy(32, i);
                cout << phy6.modle;
                gotoxy(47, i);
                cout << phy6.sep;
                gotoxy(62, i);
                cout << phy6.price;
                gotoxy(70, i);
                cout << phy6.quant;
                i++;
            }
        }
        ptr3.close();
        if (i == 5) {
            _setcursortype(_NORMALCURSOR);
            clrscr();
            gotoxy(10, 10);
            cout << "NO RECORD FOUND, MODIFY THE SEARCH";
            gotoxy(10, 11);
            cout << "search again (y/n)";
            cin >> choice;
        }
        else
            break;
    } while (choice == 'y');

    getch();
}

//endofprogramm//
M. Saqib: Saqib is Master-level Senior Software Engineer with over 14 years of experience in designing and developing large-scale software and web applications. He has more than eight years experience of leading software development teams. Saqib provides consultancy to develop software systems and web services for Fortune 500 companies. He has hands-on experience in C/C++ Java, JavaScript, PHP and .NET Technologies. Saqib owns and write contents on mycplus.com since 2004.
Related Post