-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUAS-REVISI-21.cpp
More file actions
325 lines (280 loc) · 13.4 KB
/
Copy pathUAS-REVISI-21.cpp
File metadata and controls
325 lines (280 loc) · 13.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
#include <iostream>
#include <iomanip>
#include <vector>
using namespace std;
// Struktur untuk menyimpan informasi makanan
struct Makanan {
string namaMakanan; // Nama makanan
int hargaPerPorsi; // Harga per porsi
int jumlahStok; // Jumlah stok yang tersedia
};
// Konstanta untuk jumlah maksimal menu
const int MAX_MENU_ITEMS = 25; // Total menu makanan dan minuman
const int MAX_SEATS = 10; // Kapasitas tempat makan
Makanan daftarMenu[MAX_MENU_ITEMS] = {
{"Soto", 5000, 20},
{"Timlo Komplit", 8000, 25},
{"Nasi Bandeng", 5000, 20},
{"Nasi Usus", 7000, 25},
{"Nasi Ati Lombok Ijo", 7000, 20},
{"Nasi Oseng", 5000, 20},
{"Nasi Sayur", 5000, 20},
{"Nasi Ayam", 11000, 20},
{"Mie Rebus / Goreng", 5000, 20},
{"Mie Rebus / Goreng + Telur", 8000, 25},
{"Gorengan", 1000, 30},
{"Air Es", 1000, 50},
{"Air Mineral", 3000, 30},
{"Teh Panas", 2000, 25},
{"Es Teh", 2500, 20},
{"Jeruk Es / Panas", 3000, 20},
{"Nutrisari Es", 3000, 20},
{"Milo Panas / Es", 3500, 20},
{"Cappuccino Panas / Es", 3500, 20},
{"Beng Beng Panas / Es", 3500, 20},
{"White Coffee Panas / Es", 3000, 20},
{"Good Day Panas / Es", 3000, 25},
{"Susu Panas / Es", 3000, 25},
{"Pop Ice", 3000, 25},
{"Kopi Hitam", 3000, 20}
};
// Fungsi untuk menampilkan daftar menu makanan
void tampilkanMenuMakanan() {
cout << "=============================================" << endl;
cout << setw(5) << left << "NO" << setw(30) << "DAFTAR MENU MAKANAN" << "HARGA" << endl;
cout << string(45, '-') << endl;
for (int i = 0; i < 11; i++) { // 11 makanan
cout << setw(5) << left << (i + 1) << setw(30) << left << daftarMenu[i].namaMakanan
<< setw(10) << daftarMenu[i].hargaPerPorsi << endl;
}
}
// Fungsi untuk menampilkan daftar menu minuman
void tampilkanMenuMinuman() {
cout << "=============================================" << endl;
cout << setw(5) << left << "NO" << setw(30) << "DAFTAR MENU MINUMAN" << "HARGA" << endl;
cout << string(45, '-') << endl;
for (int i = 11; i < MAX_MENU_ITEMS; i++) { // 14 minuman
cout << setw(5) << left << (i + 1) << setw(30) << left << daftarMenu[i].namaMakanan
<< setw(10) << daftarMenu[i].hargaPerPorsi << endl;
}
}
// Fungsi untuk menampilkan semua menu
void tampilkanSemuaMenu() {
cout << endl;
tampilkanMenuMakanan();
cout << endl; // Baris kosong
tampilkanMenuMinuman();
}
int inputMakananYangDibeli(vector<int>& pilihanMenu, vector<int>& jumlahBeli) {
int nomorMenu, jumlahPesan;
char lanjut;
do {
cout << "Pilih menu (No. menu) : ";
cin >> nomorMenu;
cout << "Atur jumlahnya (Angka) : ";
cin >> jumlahPesan;
pilihanMenu.push_back(nomorMenu);
jumlahBeli.push_back(jumlahPesan);
cout << endl;
do {
cout << "Apakah Anda ingin membeli menu yang lain? (y/n) : ";
cin >> lanjut;
if (lanjut == 'y' || lanjut == 'Y') {
break;
} else if (lanjut == 'n' || lanjut == 'N') {
return 1; // Mengembalikan 1 untuk menandakan sukses
} else {
cout << "Input tidak valid! Coba lagi" << endl;
cout << endl;
continue;
}
} while (true);
} while (true);
}
// Fungsi untuk memeriksa ketersediaan stok
bool validasiKetersediaanStok(const vector<int>& pilihanMenu, const vector<int>& jumlahBeli) {
for (size_t i = 0; i < pilihanMenu.size(); i++) { // jumlah elemen (size_t)
if (daftarMenu[pilihanMenu[i] - 1].jumlahStok < jumlahBeli[i]) {
return false; // Jika stok tidak mencukupi
}
}
return true; // Jika stok mencukupi
}
// Fungsi untuk menghitung total harga makanan
int hitungTotalHargaMakanan(const vector<int>& pilihanMenu, const vector<int>& jumlahBeli) {
int totalHarga = 0;
for (size_t i = 0; i < pilihanMenu.size(); i++) {
totalHarga += daftarMenu[pilihanMenu[i] - 1].hargaPerPorsi * jumlahBeli[i];
}
return totalHarga;
}
// Fungsi untuk menerapkan diskon pada total harga
double terapkanDiskon(int totalHarga) {
double diskon = 0; // Inisialisasi diskon
if (totalHarga > 50000) {
diskon = 7000; // Diskon Rp 7000 jika total harga lebih dari 50000
} else if (totalHarga > 30000) {
diskon = 5000; // Diskon Rp 5000 jika total harga lebih dari 30000
} else if (totalHarga > 10000) {
diskon = 2000; // Diskon Rp 2000 jika total harga lebih dari 10000
} else {
diskon = 0;
}
return diskon; // Mengembalikan nilai diskon
}
// Fungsi untuk menghitung pajak PPN
double hitungPPN(int totalHarga) {
const double PPN_RATE = 0.11; // Tarif PPN 11%
return totalHarga * PPN_RATE; // Menghitung total pajak
}
// Fungsi untuk mencetak struk pembelian
int cetakStrukPembelian(const vector<int>& pilihanMenu, const vector<int>& jumlahBeli, double totalHarga, double diskon, double ppn, double uangDibayar, double totalBelanja) {
// Memeriksa apakah uang yang dibayarkan cukup
if (uangDibayar >= totalBelanja) {
cout << "\n ===========================\n";
cout << " WAROENG MAKAN SSS " << endl;
cout << " Jl. Singopuran, Kartasura ";
cout << "\n ---------------------------\n";
for (size_t i = 0; i < pilihanMenu.size(); i++) {
cout << " " << daftarMenu[pilihanMenu[i] - 1].namaMakanan << endl;
cout << " " << jumlahBeli[i] << " X " << daftarMenu[pilihanMenu[i] - 1].hargaPerPorsi << "\t "
<< jumlahBeli[i]*daftarMenu[pilihanMenu[i] - 1].hargaPerPorsi << endl;
}
cout << "\n ---------------------------\n";
cout << " Total Harga : Rp" << totalHarga << endl;
cout << " Total Diskon : Rp" << diskon << endl;
cout << " PPN 11% : Rp" << ppn << endl; // Menampilkan total pajak
cout << " ---------------------------\n";
cout << " Total Belanja : Rp" << totalBelanja << endl; // Menampilkan total setelah diskon dan pajak
cout << " Uang Tunai : Rp" << uangDibayar << endl;
double kembalian = uangDibayar - totalBelanja;
cout << " Kembalian : Rp" << kembalian;
cout << "\n ---------------------------\n";
cout << " Pembayaran berhasil!" << endl;
cout << " Terima kasih atas pembelian Anda" << endl;
}
else {
cout << " Uang Anda tidak cukup!" << endl;
}
}
// Fungsi untuk memilih meja
int pilihMeja() {
int meja;
do {
cout << "Pilih nomor meja (1 - " << MAX_SEATS << ") : ";
cin >> meja;
if (meja < 1 || meja > MAX_SEATS) {
cout << "Input tidak valid! Coba lagi" << endl;
cout << endl;
} else {
break;
}
} while (meja < 1 || meja > MAX_SEATS);
return meja;
}
// Fungsi untuk mencari harga terendah dalam daftar menu
int cariHargaTerendah(const Makanan daftarMenu[], int n) {
int hargaTerendah = daftarMenu[0].hargaPerPorsi; // Inisialisasi dengan harga pertama
for (int i = 1; i < n; i++) {
if (daftarMenu[i].hargaPerPorsi < hargaTerendah) {
hargaTerendah = daftarMenu[i].hargaPerPorsi; // Update jika ditemukan harga lebih rendah
}
}
return hargaTerendah;
}
// Fungsi untuk mencari harga tertinggi dalam daftar menu
int cariHargaTertinggi(const Makanan daftarMenu[], int n) {
int hargaTertinggi = daftarMenu[0].hargaPerPorsi; // Inisialisasi dengan harga pertama
for (int i = 1; i < n; i++) {
if (daftarMenu[i].hargaPerPorsi > hargaTertinggi) {
hargaTertinggi = daftarMenu[i].hargaPerPorsi; // Update jika ditemukan harga lebih tinggi
}
}
return hargaTertinggi;
}
int main() {
// Menampilkan judul
cout << " +===================================================================================================+" << endl;
cout << " | |" << endl;
cout << " | _____ _ _ _____ _ _ _ |" << endl;
cout << " | / ____| | | | | | __ \\ | | | (_) |" << endl;
cout << " | | (___ ___| | __ _ _ __ ___ __ _| |_ | | | | __ _| |_ __ _ _ __ __ _ __| |_ |" << endl;
cout << " | \\___ \\ / _ \\ |/ _` | '_ ` _ \\ / _` | __| | | | |/ _` | __/ _` | '_ \\ / _` | / _` | | |" << endl;
cout << " | ____) | __/ | (_| | | | | | | (_| | |_ | |__| | (_| | || (_| | | | | (_| | | (_| | | |" << endl;
cout << " | |_____/ \\___|_|\\__,_|_| |_| |_|\\__,_|\\__| |_____/ \\__,_|\\__\\__,_|_| |_|\\__, | \\__,_|_| |" << endl;
cout << " | __/ | |" << endl;
cout << " | |___/ |" << endl;
cout << " | |" << endl;
cout << " | __ __ __ __ _ _____ _____ _____ |" << endl;
cout << " | \\ \\ / / | \\/ | | | / ____/ ____/ ____| |" << endl;
cout << " | \\ \\ /\\ / /_ _ _ __ ___ ___ _ __ __ _ | \\ / | __ _| | ____ _ _ __ | (___| (___| (___ |" << endl;
cout << " | \\ \\/ \\/ / _` | '__/ _ \\ / _ \\ '_ \\ / _` | | |\\/| |/ _` | |/ / _` | '_ \\ \\___ \\\\___ \\\\___ \\ |" << endl;
cout << " | \\ /\\ / (_| | | | (_) | __/ | | | (_| | | | | | (_| | < (_| | | | | ____) |___) |___) | |" << endl;
cout << " | \\/ \\/ \\__,_|_| \\___/ \\___|_| |_|\\__, | |_| |_|\\__,_|_|\\_\\__,_|_| |_| |_____/_____/_____/ |" << endl;
cout << " | __/ | |" << endl;
cout << " | |___/ |" << endl;
cout << " | |" << endl;
cout << " +===================================================================================================+" << endl;
char pilihan;
cout << endl;
cout << " Apakah Anda ingin makan di sini? (y/n) : ";
cin >> pilihan;
system("cls");
if (pilihan != 'y' && pilihan != 'Y' && pilihan != 'n' && pilihan != 'N') {
cout << "Input tidak valid! Program keluar secara paksa" << endl;
return 0; // Keluar dari program
}
if (pilihan == 'y' || pilihan == 'Y') {
int mejaDipilih = pilihMeja(); // Memilih meja
system ("cls");
tampilkanSemuaMenu();
} else {
tampilkanSemuaMenu();
}
// Menampilkan harga terendah dan tertinggi
int hargaTerendah = cariHargaTerendah(daftarMenu, MAX_MENU_ITEMS);
int hargaTertinggi = cariHargaTertinggi(daftarMenu, MAX_MENU_ITEMS);
cout << endl;
cout << "Harga terendah : Rp" << hargaTerendah << endl;
cout << "Harga tertinggi : Rp" << hargaTertinggi << endl;
cout << endl;
// Konfirmasi sebelum melanjutkan
cout << "Apakah Anda yakin ingin beli disini? (y/n) : ";
cin >> pilihan;
if (pilihan != 'y' && pilihan != 'Y') {
cout << "Pembelian dibatalkan" << endl;
return 0; // Keluar dari program
}
// Proses pemesanan
vector<int> pilihanMenu; // pilih menu (nomor)
vector<int> jumlahBeli; // atur jumlah pesan
// inputMakananYangDibeli(pilihanMenu, jumlahBeli); // Input makanan yang dibeli
if (inputMakananYangDibeli(pilihanMenu, jumlahBeli) == 1) {
// Lanjutkan dengan proses validasi stok dan pembayaran
}
if (validasiKetersediaanStok(pilihanMenu, jumlahBeli)) {
for (size_t i = 0; i < pilihanMenu.size(); i++) {
daftarMenu[pilihanMenu[i] - 1].jumlahStok -= jumlahBeli[i]; // Kurangi stok
}
int totalHarga = hitungTotalHargaMakanan(pilihanMenu, jumlahBeli);
double diskon = terapkanDiskon(totalHarga); // Terapkan diskon
double ppn = hitungPPN(totalHarga - diskon); // Hitung pajak PPN
double totalBelanja = totalHarga - diskon + ppn;
// Tampilkan total harga dan diskon sebelum pembayaran
cout << endl;
cout << "Total Harga : Rp" << totalHarga << endl;
cout << "Total Diskon : Rp" << diskon << endl;
cout << "PPN 11% : Rp" << ppn << endl;
cout << "Total Belanja : Rp" << totalBelanja << endl;
cout << endl;
double uangDibayar;
cout << "Masukkan uang tunai : Rp";
cin >> uangDibayar;
system("cls");
// Cetak struk pembelian dengan informasi baru
cetakStrukPembelian(pilihanMenu, jumlahBeli, totalHarga, diskon, ppn, uangDibayar, totalBelanja);
} else {
cout << "Maaf, stok tidak mencukupi untuk pesanan Anda" << endl;
}
return 0; // Keluar dari program
}