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
- Download Code::Blocks dari situs resmi.
- Pilih versi dengan MinGW (termasuk compiler GCC).
- 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)
#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)
#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)
#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
- Di Code::Blocks, buka Project → Add Files dan tambahkan
menu.h
danmenu.cpp
. - Tekan F9 untuk kompilasi dan run.
- 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.