Project C++: Sistem Inventaris Restoran

Project C++: Sistem Inventaris Restoran

Project C++: Membuat Sistem Inventaris Restoran Sederhana (Lengkap Langkahnya!)

Sistem inventaris adalah komponen penting dalam manajemen restoran. Dalam tutorial ini, kita akan membuat aplikasi inventaris berbasis C++ dengan fitur:
✅ Tambah, Lihat, Edit, Hapus (CRUD) data menu
✅ Pencarian berdasarkan nama/kategori
✅ Penyimpanan data dalam file teks
✅ Antarmuka konsol yang user-friendly

Tools yang Dibutuhkan:

  • Code::Blocks (IDE)
  • Compiler GCC/G++

Langkah 1: Instalasi Code::Blocks

  1. Download Code::Blocks dari situs resmi.
  2. Pilih versi dengan MinGW (termasuk compiler GCC).
  3. Install dengan konfigurasi default.
    • Buka Code::Blocks → Create new project → Console Application → Pilih C++.

Langkah 2: Struktur Project

Buat folder project dengan struktur:

📂 inventaris-restoran/
├── 📄 main.cpp        // Program utama
├── 📄 menu.h          // Header class Menu
├── 📄 menu.cpp        // Implementasi class Menu
└── 📄 data_menu.txt   // Database sederhana

Langkah 3: Kode Program Lengkap

1. File menu.h (Header)

cpp
#ifndef MENU_H
#define MENU_H

#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

class Menu {
private:
    string nama;
    string kategori;
    int harga;
    int stok;

public:
    Menu(string nama, string kategori, int harga, int stok);

    // Getter yang diubah menjadi const
    string getNama() const;
    string getKategori() const;
    int getHarga() const;
    int getStok() const;

    // CRUD Operations
    static void tambahMenu(vector<Menu>& daftarMenu);
    static void lihatMenu(const vector<Menu>& daftarMenu);
    static void editMenu(vector<Menu>& daftarMenu);
    static void hapusMenu(vector<Menu>& daftarMenu);
    static void cariMenu(const vector<Menu>& daftarMenu);

    // File Handling
    static void simpanKeFile(const vector<Menu>& daftarMenu);
    static void bacaDariFile(vector<Menu>& daftarMenu);
};

#endif

2. File menu.cpp (Implementasi)

cpp
#include "menu.h"

// Constructor
Menu::Menu(string nama, string kategori, int harga, int stok) {
    this->nama = nama;
    this->kategori = kategori;
    this->harga = harga;
    this->stok = stok;
}

// Getter
string Menu::getNama() const { return nama; }
string Menu::getKategori() const { return kategori; }
int Menu::getHarga() const { return harga; }
int Menu::getStok() const { return stok; }

// Tambah Menu
void Menu::tambahMenu(vector<Menu>& daftarMenu) {
    string nama, kategori;
    int harga, stok;

    cout << "\n== TAMBAH MENU ==" << endl;
    cout << "Nama Menu: "; getline(cin >> ws, nama);
    cout << "Kategori: "; getline(cin >> ws, kategori);
    cout << "Harga: "; cin >> harga;
    cout << "Stok: "; cin >> stok;

    daftarMenu.push_back(Menu(nama, kategori, harga, stok));
    cout << "Menu berhasil ditambahkan!" << endl;
}

// Lihat Menu
void Menu::lihatMenu(const vector<Menu>& daftarMenu) {
    if (daftarMenu.empty()) {
        cout << "\nDaftar menu kosong!" << endl;
        return;
    }

    cout << "\n== DAFTAR MENU ==" << endl;
    for (size_t i = 0; i < daftarMenu.size(); i++) {
        cout << i + 1 << ". " << daftarMenu[i].getNama() 
             << " (" << daftarMenu[i].getKategori() << ")" 
             << " - Rp" << daftarMenu[i].getHarga() 
             << " | Stok: " << daftarMenu[i].getStok() << endl;
    }
}

// Edit Menu
void Menu::editMenu(vector<Menu>& daftarMenu) {
    lihatMenu(daftarMenu);
    if (daftarMenu.empty()) return;

    int pilihan;
    cout << "\nPilih nomor menu yang akan diedit: "; cin >> pilihan;

    if (pilihan < 1 || pilihan > daftarMenu.size()) {
        cout << "Nomor tidak valid!" << endl;
        return;
    }

    Menu& menu = daftarMenu[pilihan - 1];
    cout << "Edit Nama [" << menu.getNama() << "]: "; getline(cin >> ws, menu.nama);
    cout << "Edit Kategori [" << menu.getKategori() << "]: "; getline(cin >> ws, menu.kategori);
    cout << "Edit Harga [" << menu.getHarga() << "]: "; cin >> menu.harga;
    cout << "Edit Stok [" << menu.getStok() << "]: "; cin >> menu.stok;

    cout << "Menu berhasil diupdate!" << endl;
}

// Hapus Menu
void Menu::hapusMenu(vector<Menu>& daftarMenu) {
    lihatMenu(daftarMenu);
    if (daftarMenu.empty()) return;

    int pilihan;
    cout << "\nPilih nomor menu yang akan dihapus: "; cin >> pilihan;

    if (pilihan < 1 || pilihan > daftarMenu.size()) {
        cout << "Nomor tidak valid!" << endl;
        return;
    }

    daftarMenu.erase(daftarMenu.begin() + pilihan - 1);
    cout << "Menu berhasil dihapus!" << endl;
}

// Cari Menu
void Menu::cariMenu(const vector<Menu>& daftarMenu) {
    string keyword;
    cout << "\nMasukkan nama/kategori: "; getline(cin >> ws, keyword);

    bool ditemukan = false;
    for (const Menu& menu : daftarMenu) {
        if (menu.getNama().find(keyword) != string::npos || 
            menu.getKategori().find(keyword) != string::npos) {
            cout << "- " << menu.getNama() << " (" << menu.getKategori() << ")" 
                 << " - Rp" << menu.getHarga() << endl;
            ditemukan = true;
        }
    }

    if (!ditemukan) {
        cout << "Menu tidak ditemukan!" << endl;
    }
}

// Simpan ke File
void Menu::simpanKeFile(const vector<Menu>& daftarMenu) {
    ofstream file("data_menu.txt");
    for (const Menu& menu : daftarMenu) {
        file << menu.getNama() << "," 
             << menu.getKategori() << "," 
             << menu.getHarga() << "," 
             << menu.getStok() << endl;
    }
    file.close();
}

// Baca dari File
void Menu::bacaDariFile(vector<Menu>& daftarMenu) {
    ifstream file("data_menu.txt");
    if (!file.is_open()) return;

    string line;
    while (getline(file, line)) {
        size_t pos = 0;
        string token;
        string data[4];
        int i = 0;

        while ((pos = line.find(",")) != string::npos) {
            token = line.substr(0, pos);
            data[i++] = token;
            line.erase(0, pos + 1);
        }
        data[i] = line;

        daftarMenu.push_back(Menu(data[0], data[1], stoi(data[2]), stoi(data[3])));
    }
    file.close();
}

3. File main.cpp (Program Utama)

cpp
#include <iostream>
#include <vector>
#include "menu.h"

using namespace std;

void tampilkanMenu() {
    cout << "\n=== SISTEM INVENTARIS RESTORAN ===" << endl;
    cout << "1. Tambah Menu" << endl;
    cout << "2. Lihat Menu" << endl;
    cout << "3. Edit Menu" << endl;
    cout << "4. Hapus Menu" << endl;
    cout << "5. Cari Menu" << endl;
    cout << "6. Simpan Data" << endl;
    cout << "7. Keluar" << endl;
    cout << "Pilih opsi: ";
}

int main() {
    vector<Menu> daftarMenu;
    Menu::bacaDariFile(daftarMenu);

    int pilihan;
    do {
        tampilkanMenu();
        cin >> pilihan;

        switch (pilihan) {
            case 1: Menu::tambahMenu(daftarMenu); break;
            case 2: Menu::lihatMenu(daftarMenu); break;
            case 3: Menu::editMenu(daftarMenu); break;
            case 4: Menu::hapusMenu(daftarMenu); break;
            case 5: Menu::cariMenu(daftarMenu); break;
            case 6: Menu::simpanKeFile(daftarMenu); break;
            case 7: cout << "Keluar..." << endl; break;
            default: cout << "Opsi tidak valid!" << endl;
        }
    } while (pilihan != 7);

    return 0;
}

Langkah 4: Kompilasi & Run

  1. Di Code::Blocks, buka Project → Add Files dan tambahkan menu.h dan menu.cpp.
  2. Tekan F9 untuk kompilasi dan run.
  3. Test fitur-fitur:
    • Tambah menu “Nasi Goreng” (Kategori: Makanan, Harga: 15000, Stok: 10).
    • Cari menu dengan keyword “Nas”.


Kesimpulan

Anda telah berhasil membuat:
✅ Sistem inventaris dengan CRUD
✅ Penyimpanan data ke file teks
✅ Antarmuka konsol yang interaktif

Tips Debugging:

  • Gunakan breakpoint di Code::Blocks (klik area sebelah nomor baris).
  • Cek error compiler dengan Build Log.

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *