#include #include #include #include #include #include // Dosya işlemleri için gerekli using namespace std; struct Urun { string isim; double fiyat; int stok; int satilan; // Satılan miktarı tutacak yeni alan }; class KahveOtomati { private: vector urunler; double kasa; double gunlukSatislar; public: KahveOtomati() : kasa(500.0), gunlukSatislar(0.0) { urunler = { {"Şekersiz Çay", 2.25, 100, 0}, {"Şekerli Çay", 2.50, 100, 0}, {"Sade Kahve", 3.25, 100, 0}, {"Sütlü Şekersiz Kahve", 3.50, 100, 0}, {"Sütsüz Şekerli Kahve", 3.50, 100, 0}, {"Sütlü Şekerli Kahve", 3.75, 100, 0}, {"Filtre Kahve", 3.25, 100, 0}, {"Türk Kahvesi", 2.25, 100, 0}, {"Sıcak Çikolata", 4.25, 100, 0}, {"Salep", 2.75, 100, 0}, }; } void baslat() { setlocale(LC_ALL, "Turkish"); while (true) { menuGoster(); string secim; cout << "\nÜrün numarasını veya yönetici kodunu giriniz:"; cin >> secim; if (secim == "0000") { if (yoneticiGiris()) { gunSonuRaporuGoster(); } continue; // Yönetici girişi sonrası menüye geri dön } int urunNo = stoi(secim) - 1; if (urunNo < 0 || urunNo >= urunler.size() || urunler[urunNo].stok <= 0) { cout << "Geçersiz seçim veya stokta yok.\n"; continue; } int miktar = miktarSec(); if (miktar <= 0) continue; double toplamFiyat = hesaplaFiyat(urunNo, miktar); if (toplamFiyat > 0) { odemeAl(toplamFiyat); urunler[urunNo].stok -= miktar; // Stoktan düş urunler[urunNo].satilan += miktar; // Satılan miktarı kaydet gunlukSatislar += toplamFiyat; // Günlük satışlara ekle } } } private: bool yoneticiGiris() { string sifre; while (true) { cout << "Yönetici raporuna erişmek için şifreyi giriniz: "; cin >> sifre; if (sifre == "0099") { return true; } else { cout << "Yanlış şifre. Tekrar deneyin veya '9999' tuşlayınız: "; cin >> sifre; if (sifre == "9999") { return false; } } } } void gunSonuRaporuGoster() { cout << "\nGün sonu raporu:\n"; cout << "Kasa başlangıç miktarı: 500 TL\n"; cout << "Gün sonu toplam satış: " << fixed << setprecision(2) << gunlukSatislar << " TL\n"; ofstream raporDosyasi("rapor.txt"); raporDosyasi << fixed << setprecision(2); raporDosyasi << "\nGün sonu raporu:\n"; raporDosyasi << "Kasa başlangıç miktarı: 500 TL\n"; raporDosyasi << "Gün sonu toplam kazanç: " << gunlukSatislar << " TL\n"; for (const auto& urun : urunler) { cout << urun.isim << " - Satılan: " << urun.satilan << ", Kalan Stok: " << urun.stok << "\n"; raporDosyasi << urun.isim << " - Satılan: " << urun.satilan << ", Kalan Stok: " << urun.stok << "\n"; } raporDosyasi.close(); // Dosyayı kapat cout << "\nGün sonu raporu 'gunSonuRaporu.txt' dosyasına kaydedildi.\n"; } void menuGoster() { cout << "\n *************HOŞGELDİNİZ*************" << endl; cout << "\nSeçtiğiniz ürünün yanında bulunan sayıyı giriniz.\n" << endl; for (int i = 0; i < urunler.size(); i++) { cout << i + 1 << ". " << urunler[i].isim << " - " << fixed << setprecision(2) << urunler[i].fiyat << " TL - Stok: " << urunler[i].stok << "\n"; cout << " ****************************************" << endl; } } int miktarSec() { int miktar; cout << "Kaç adet almak istiyorsunuz? "; cin >> miktar; return miktar; } double hesaplaFiyat(int urunNo, int miktar) { if (miktar <= urunler[urunNo].stok) { return urunler[urunNo].fiyat * miktar; } else { cout << "Yeterli stok yok, mevcut stok: " << urunler[urunNo].stok << "\n"; return 0; } } void odemeAl(double toplamFiyat) { double odeme = 0.0; cout << "Toplam tutar " << fixed << setprecision(2) << toplamFiyat << " TL, lütfen ödeyiniz: "; cin >> odeme; while (odeme < toplamFiyat) { double eksik = toplamFiyat - odeme; cout << "Eksik ödeme yaptınız, kalan " << fixed << setprecision(2) << eksik << " TL daha ödeyiniz: "; cin >> eksik; odeme += eksik; } if (odeme > toplamFiyat) { double paraUstu = odeme - toplamFiyat; cout << "Para üstünüz: " << fixed << setprecision(2) << paraUstu << " TL\n"; } cout << "Buyrun içeceğiniz, teşekkür ederiz!\n"; } }; int main() { KahveOtomati otomat; otomat.baslat(); return 0; }