Son Fişi Görüntüleme
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası. Ders 37 / 65.
Görev
KolayProfesyonel bir formatta tüm işlem ayrıntılarını görüntüleyen kapsamlı bir son makbuz oluşturarak alışveriş sepeti hesaplayıcı projesini tamamlayan bir program oluşturun. Önceki dersteki indirim sistemini temel alan programınız şunları yapmalıdır:
- Önceki kurulumdaki mevcut ürün kataloğu Map'ini ve alışveriş sepeti işlevselliğini kullanmak
- Müşterilerin sepetlerine eklemek istediği öğeleri temsil eden birden çok string girdisini okumak (girdi,
"cart_done"alındığında sona erecektir) - Her öğe için
containsKey()kullanarak ürün kataloğunda mevcut olup olmadığını kontrol etmek ve geçerli öğeleri sepete eklemek - Sepetteki tüm öğe fiyatlarını toplayarak ara toplamı hesaplamak
- İndirim eşiği tutarını temsil eden bir string girdisi okumak
- Uygulanacak indirim yüzdesini temsil eden bir string girdisi okumak
- İndirimi yalnızca ara toplam eşik tutarına eşit veya bundan büyükse uygulamak
- İndirim tutarını ve indirim uygulandıktan sonraki son toplamı hesaplamak
- Müşteri adını temsil eden bir string girdisi okumak
- İşlem kimliğini temsil eden bir string girdisi okumak
- Aşağıda gösterilen tam biçimde tüm işlem ayrıntılarını içeren eksiksiz bir makbuz oluşturmak ve görüntülemek
Örneğin mağazada "Apple" fiyatı 1.50, "Banana" fiyatı 0.80, "Orange" fiyatı 2.00, "Milk" fiyatı 3.25 olan ürünler varsa, müşteriler sepete "Apple", "Orange", "Milk", "Apple" eklemek istiyorsa, indirim eşiği 5.00, indirim yüzdesi 10, müşteri adı "John Smith" ve işlem kimliği "TXN001" ise programınız şunları üretmelidir:
Shopping Cart Operations:
Adding 'Apple': Item added to cart successfully
Adding 'Orange': Item added to cart successfully
Adding 'Milk': Item added to cart successfully
Adding 'Apple': Item added to cart successfully
Cart Contents: [Apple, Orange, Milk, Apple]
Cost Calculation:
Apple: $1.50
Orange: $2.00
Milk: $3.25
Apple: $1.50
Subtotal: $8.25
Discount Analysis:
Threshold: $5.00
Discount Rate: 10%
Subtotal ($8.25) meets threshold requirement
Discount Applied: $0.83
Final Total: $7.42
========================================
FINAL RECEIPT
========================================
Transaction ID: TXN001
Customer: John Smith
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Apple $1.50
Orange $2.00
Milk $3.25
Apple $1.50
----------------------------------------
Subtotal: $8.25
Discount (10%): -$0.83
----------------------------------------
TOTAL: $7.42
----------------------------------------
Payment Method: Cash
Items Count: 4
Unique Products: 3
Thank you for shopping with us!
========================================Mağazada "Laptop" fiyatı 999.99, "Mouse" fiyatı 25.50, "Keyboard" fiyatı 75.00 olan ürünler varsa, müşteriler sepete "Mouse", "Keyboard" eklemek istiyorsa, indirim eşiği 150.00, indirim yüzdesi 15, müşteri adı "Sarah Johnson" ve işlem kimliği "TXN002" ise programınız şunları üretmelidir:
Shopping Cart Operations:
Adding 'Mouse': Item added to cart successfully
Adding 'Keyboard': Item added to cart successfully
Cart Contents: [Mouse, Keyboard]
Cost Calculation:
Mouse: $25.50
Keyboard: $75.00
Subtotal: $100.50
Discount Analysis:
Threshold: $150.00
Discount Rate: 15%
Subtotal ($100.50) does not meet threshold requirement
Discount Applied: $0.00
Final Total: $100.50
========================================
FINAL RECEIPT
========================================
Transaction ID: TXN002
Customer: Sarah Johnson
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Mouse $25.50
Keyboard $75.00
----------------------------------------
Subtotal: $100.50
Discount (15%): $0.00
----------------------------------------
TOTAL: $100.50
----------------------------------------
Payment Method: Cash
Items Count: 2
Unique Products: 2
Thank you for shopping with us!
========================================Mağazada "Novel" fiyatı 12.99, "Magazine" fiyatı 4.50, "Textbook" fiyatı 89.00 olan ürünler varsa, müşteriler sepete "Novel", "Textbook", "Magazine", "Novel" eklemek istiyorsa, indirim eşiği 75.00, indirim yüzdesi 20, müşteri adı "Mike Davis" ve işlem kimliği "TXN003" ise programınız şunları üretmelidir:
Shopping Cart Operations:
Adding 'Novel': Item added to cart successfully
Adding 'Textbook': Item added to cart successfully
Adding 'Magazine': Item added to cart successfully
Adding 'Novel': Item added to cart successfully
Cart Contents: [Novel, Textbook, Magazine, Novel]
Cost Calculation:
Novel: $12.99
Textbook: $89.00
Magazine: $4.50
Novel: $12.99
Subtotal: $119.48
Discount Analysis:
Threshold: $75.00
Discount Rate: 20%
Subtotal ($119.48) meets threshold requirement
Discount Applied: $23.90
Final Total: $95.58
========================================
FINAL RECEIPT
========================================
Transaction ID: TXN003
Customer: Mike Davis
Date: 2024-01-15
Time: 14:30:25
----------------------------------------
ITEMS PURCHASED:
Novel $12.99
Textbook $89.00
Magazine $4.50
Novel $12.99
----------------------------------------
Subtotal: $119.48
Discount (20%): -$23.90
----------------------------------------
TOTAL: $95.58
----------------------------------------
Payment Method: Cash
Items Count: 4
Unique Products: 3
Thank you for shopping with us!
========================================Programınız son makbuzu uygun hizalama ve boşluklarla biçimlendirmelidir. Müşteri bilgileri, kalem bazında satın alımlar, fiyat hesaplamaları ve özet istatistikleri de dahil olmak üzere tüm işlem ayrıntılarını görüntülemek için string interpolation kullanın. Makbuz, tarih (2024-01-15), saat (14:30:25) ve ödeme yöntemi (Cash) için sabit değerler içermelidir. Tüm para değerlerini tam olarak 2 ondalık basamak gösterecek şekilde biçimlendirin. Öğe sayısını sepet uzunluğunu kullanarak, benzersiz ürünleri ise sepeti bir Set'e dönüştürerek hesaplayın. Girdi biçimi şu şekilde olacaktır: "cart_done" ile sona eren, sepete eklenecek öğe adları; ardından indirim eşiği tutarı, indirim yüzdesi, müşteri adı ve işlem kimliği (tümü string olarak).
Kendin dene
import 'dart:io';
void main() {
// Product catalog
Map<String, double> products = {
'Apple': 1.50,
'Banana': 0.80,
'Orange': 2.00,
'Milk': 3.25,
'Laptop': 999.99,
'Mouse': 25.50,
'Keyboard': 75.00,
'Novel': 12.99,
'Magazine': 4.50,
'Textbook': 89.00
};
List<String> cart = [];
int itemsAdded = 0;
int itemsNotFound = 0;
print('Shopping Cart Operations:');
// Read items until "cart_done"
while (true) {
String? item = stdin.readLineSync();
if (item == 'cart_done') break;
if (products.containsKey(item)) {
cart.add(item!);
print("Adding '$item': Item added to cart successfully");
itemsAdded++;
} else {
print("Adding '$item': Item not found in catalog");
itemsNotFound++;
}
}
print('Cart Contents: $cart');
// Calculate subtotal
print('Cost Calculation:');
double subtotal = 0.0;
for (String item in cart) {
double price = products[item]!;
print('$item: \$${price.toStringAsFixed(2)}');
subtotal += price;
}
print('Subtotal: \$${subtotal.toStringAsFixed(2)}');
// Read discount threshold and percentage
String? thresholdInput = stdin.readLineSync();
String? discountPercentageInput = stdin.readLineSync();
double threshold = double.parse(thresholdInput!);
int discountPercentage = int.parse(discountPercentageInput!);
// Discount analysis
print('Discount Analysis:');
print('Threshold: \$${threshold.toStringAsFixed(2)}');
print('Discount Rate: $discountPercentage%');
double discountAmount = 0.0;
double finalTotal = subtotal;
String discountStatus = 'No discount applied';
if (subtotal >= threshold) {
print('Subtotal (\$${subtotal.toStringAsFixed(2)}) meets threshold requirement');
discountAmount = subtotal * (discountPercentage / 100);
finalTotal = subtotal - discountAmount;
discountStatus = '$discountPercentage% discount applied';
} else {
print('Subtotal (\$${subtotal.toStringAsFixed(2)}) does not meet threshold requirement');
}
print('Discount Applied: \$${discountAmount.toStringAsFixed(2)}');
print('Final Total: \$${finalTotal.toStringAsFixed(2)}');
// Cart summary
Set<String> uniqueProducts = cart.toSet();
print('Cart Summary:');
print('Total items in cart: ${cart.length}');
print('Unique products in cart: ${uniqueProducts.length}');
print('Items successfully added: $itemsAdded');
print('Items not found: $itemsNotFound');
print('Discount Status: $discountStatus');
print('Cart Status: Ready for checkout');
}Mantık & Akış bölümündeki tüm dersler
1İleri Düzey Liste İşlemleri
Liste Özellikleri: first & lastListe Durumu: isEmpty & isNotEmptyBir Listeyi Tersine ÇevirmeListeye Ekleme: insertListeden Silme: removeWhereListede Bulma: indexOfBir Listeyi SıralamaBir Listeyi KarıştırmaÖzet - Liste Düzenleyici4İleri Seviye Map İşlemleri
Map Üzerinde GezinmeAnahtar ve Değer KontrolüMap Özellikleri: keys & valuesKoşullu Ekleme: putIfAbsentMap'ten Öge Kaldırmaİç İçe Map'lerÖzet - Envanter Güncelleme7İleri Seviye Fonksiyonlar
Anonim FonksiyonlarFonksiyonları Argüman Olarak AktarmaClosure'ları AnlamakÖzyinelemeye GirişÖzyinelemeli Fonksiyon: Geri SayımÖzyinelemeli Fonksiyon: FaktöriyelÖzet - Liste İşleyici10Son Meydan Okumalar
Meydan Okuma: Not SıralayıcıMeydan Okuma: Sesli Harf SayacıMeydan Okuma: FizzBuzz2Fonksiyonel Liste İşlemleri
'map' ile Dönüştürme'where' ile Filtreleme'.toList()' Kullanımı'any' ile Koşul Kontrolü'every' ile Koşullar'firstWhere' ile BulmaÖzet - Veri Filtreleme5Proje: Alışveriş Sepeti Hesaplayıcı
Proje KurulumuSepete Ürün Ekleme3Kümeler
Küme Nedir?Küme OluşturmaKümelere Eleman Ekleme ve ÇıkarmaKüme İçinde Eleman KontrolüListeyi Kümeye DönüştürmeKüme BirleşimiKüme KesişimiKüme FarkıÖzet - Benzersiz Davetli ListesiKendi başına pratik yap: Online Dart derleyicisi