Software & Finance





Turbo C++ - Product Master File Creation (Menu Oriented)





I have given here the source code in Turbo C++ product master file creation with menu oriented in text mode.


Source Code


#include <conio.h>

#include <process.h>

#include <dos.h>

#include <iostream.h>

#include <stdio.h>

#include <string.h>

 

 

#pragma pack(2)

struct CProduct

{

public:

    char name[128];

    char category[128];

    char manufacturer[128];

    float price;

};

 

struct CProducts

{

    #define MaxSz  100

    char m_fileName[1024];

    int m_nMaxProducts;

    CProduct m_prodList[MaxSz];

 

    CProducts(const char *filename);

 

    void AddRecord(const char *name, const char *category, const char *manufacturer, float price);

 

    void EditRecord(int pos, const char *name, const char *category, const char *manufacturer, float price);

    void DeleteRecord(int pos);

    int ReadRecords();

    int WriteRecords();

};

 

CProducts::CProducts(const char *filename)

{

      m_nMaxProducts = 0;

      strcpy(m_fileName, filename);

}

 

void CProducts::AddRecord(const char *name, const char *category, const char *manufacturer, float price)

{

      int pos = m_nMaxProducts;

      strcpy(m_prodList[pos].name,name);

      strcpy(m_prodList[pos].category,category);

    strcpy(m_prodList[pos].manufacturer,manufacturer);

      m_prodList[pos].price = price;

      m_nMaxProducts++;

      WriteRecords();

}

 

void CProducts::EditRecord(int pos, const char *name, const char *category, const char *manufacturer, float price)

{

      strcpy(m_prodList[pos].name,name);

      strcpy(m_prodList[pos].category,category);

    strcpy(m_prodList[pos].manufacturer,manufacturer);

      m_prodList[pos].price = price;

      WriteRecords();

}

 

void CProducts::DeleteRecord(int pos)

{

      m_nMaxProducts--;

 

      for(int i = pos; i < m_nMaxProducts; i++)

      {

          m_prodList[i] = m_prodList[i + 1];

      }

      WriteRecords();

}

 

int CProducts::ReadRecords()

{

        FILE *istream = fopen(m_fileName, "rb");

    

        if (istream == 0)

          return 0;

 

      char buf[4096];

        int nTotalRecordsRead = 0;

 

        for(int i = 0; i < MaxSz; i++)

        {

            if(feof(istream))

                break;

            int nBytesRead = fread(buf, 1, sizeof(CProduct), istream);

            if(nBytesRead < sizeof(CProduct))

                break;

          char *p = (char*)(&m_prodList[i]);

            memcpy(p, buf, sizeof(CProduct));

            nTotalRecordsRead++;

        }

 

      fclose(istream);

      m_nMaxProducts = nTotalRecordsRead;

 

      return nTotalRecordsRead;

}

 

int CProducts::WriteRecords()

{

      FILE *ostream = fopen(m_fileName, "wb");

 

        if (ostream == 0)

          return 0;

 

        int nTotalRecordsWritten = 0;

        char buf[4096];

        for(int i = 0; i < m_nMaxProducts; i++)

        {

            fwrite((char*)&m_prodList[i], 1, sizeof(CProduct), ostream);

            nTotalRecordsWritten++;

        }

 

        fclose(ostream);

 

        return nTotalRecordsWritten;

}

 

 

CProducts theProducts("c:\\products.bin");

 

 

int DisplayMainMenu()

{

    ::system("cls");

   

    gotoxy(10,4);

    cout << "Welcome to Product Database Application";

 

    gotoxy(10,5);

    cout << "___________________________________________";

 

    gotoxy(10,6);

    cout << "1. Add Product";

 

    gotoxy(10,7);

    cout << "2. Edit Product";

 

    gotoxy(10,8);

    cout << "3. View Product";

 

    gotoxy(10,9);

    cout << "4. Delete Product";

 

    gotoxy(10,10);

    cout << "5. Exit";

 

    gotoxy(10,11);

    cout << "___________________________________________";

 

    gotoxy(10,13);

    cout << "Enter your Selection: ";

    int m = -1;

    cin >> m;

 

    return m;

}

 

void ViewRecords()

{

    theProducts.ReadRecords();

   

    ::system("cls");

       

    gotoxy(10,4);

    cout << "Welcome to Product Database Application";

 

    gotoxy(10,5);

    cout << "___________________________________________________________________";

 

    gotoxy(10,6);

    cout << "SNo Product Name       Category          Manufacturer        Price ";

 

    gotoxy(10,7);

    cout << "___________________________________________________________________";

 

    int pos = 8;

    // Enable Paging

    for(int i = 0; i < theProducts.m_nMaxProducts; i++)

    {

        gotoxy(10,pos);

      cout << i + 1;

        gotoxy(14,pos);

      cout << theProducts.m_prodList[i].name;

        gotoxy(33,pos);

      cout << theProducts.m_prodList[i].category;

        gotoxy(51,pos);

      cout << theProducts.m_prodList[i].manufacturer;

        gotoxy(72,pos);

    cout << theProducts.m_prodList[i].price;

        pos++;

    }

    gotoxy(10,pos++);

    cout << "___________________________________________________________________";

    pos++;

    gotoxy(10,pos++);

}

 

 

void InputRecords()

{

    while(1)

    {

        ::system("cls");

       

        gotoxy(10,4);

      cout << "Welcome to Product Database Application";

 

        gotoxy(10,5);

      cout << "___________________________________________";

 

        gotoxy(10,6);

      cout << "Product Name: ";

 

        gotoxy(10,7);

      cout << "Category Name: ";

 

        gotoxy(10,8);

      cout << "Manufacturer Name: ";

 

    gotoxy(10,9);

      cout << "Product Price: ";

 

        gotoxy(10,10);

      cout << "___________________________________________";

 

        gotoxy(24,6);

        char name[128];

      cin >> name;

 

        gotoxy(26,7);

        char category[128];

      cin >> category;

 

        gotoxy(29,8);

        char manufacturer[128];

      cin >> manufacturer;

 

    gotoxy(25,9);

        float price;

      cin >> price;

 

        theProducts.AddRecord(name, category, manufacturer, price);

 

        gotoxy(10,12);

      cout << "Do you want to add another record (Y/N)? ";

        char ch = getch();

 

        if(ch == 'Y' || ch == 'y')

            continue;

        else

            break;

    }

}

 

 

void EditRecords()

{

    ViewRecords();

    cout << "Enter the serial number you want to edit: ";

    int m;

    cin >> m;

 

    if(m >= 1 && m <= theProducts.m_nMaxProducts)

    {

        ::system("cls");

        gotoxy(10,4);

      cout << "Welcome to Product Database Application";

 

        gotoxy(10,5);

      cout << "___________________________________________";

 

        gotoxy(10,6);

      cout << "Product Name: ";

 

    gotoxy(10,7);

      cout << "Category Name: ";

 

        gotoxy(10,8);

      cout << "Manufacturer Name: ";

 

    gotoxy(10,9);

      cout << "Product Price: ";

 

        gotoxy(10,10);

      cout << "___________________________________________";

 

    gotoxy(24,6);

        char name[128];

      cin >> name;

 

        gotoxy(26,7);

        char category[128];

      cin >> category;

 

        gotoxy(29,8);

        char manufacturer[128];

      cin >> manufacturer;

 

    gotoxy(25,9);

        float price;

      cin >> price;

 

   

 

        theProducts.EditRecord(m - 1, name, category, manufacturer, price);

        gotoxy(10,13);

      cout << "Record updated. Press any key to return to Main Menu";

      getch();

    }

    else

    {

      gotoxy(10,12);

      cout << "Invalid Entry. Press any key to return to Main Menu";

      getch();

    }

 

}

 

void DeleteRecords()

{

    ViewRecords();

    cout << "Enter the serial number you want to delete: ";

    int m;

    cin >> m;

    if(m >= 1 && m <= theProducts.m_nMaxProducts)

    {

        theProducts.DeleteRecord(m - 1);

      cout << "Record deleted. Press any key to return to Main Menu";

      getch();

    }

    else

    {

      cout << "Invalid Entry. Press any key to return to Main Menu";

      getch();

    }

}

 

int main()

{

    theProducts.ReadRecords();

    while(1)

    {

        int selection = DisplayMainMenu();

 

        switch(selection)

        {

        case 1:

            InputRecords();

            break;

      case 2:

            EditRecords();

            break;

        case 3:

            {

            ViewRecords();

          cout << "Press any key to return to Main Manu: ";

          getch();

          }

            break;

        case 4:

          DeleteRecords();

            break;

 

        case 5:

        default:

            return 0;

        };

    }

}

Output