İndirim Uygulama
Coddy'nin Dart Journey'sinin Mantık & Akış bölümünün bir parçası — ders 36 / 65.
Görev
KolayUygun siparişlere yüzde bazlı indirimler uygulayan bir indirim sistemi ekleyerek alışveriş sepeti hesaplama projesine devam eden bir program oluşturun. Önceki dersteki toplam maliyet hesaplamasının üzerine inşa ederek, programınız şunları yapmalıdır:
- Önceki kurulumdaki mevcut ürün kataloğu Map yapısını ve alışveriş sepeti işlevselliğini kullanın
- Müşterilerin sepetlerine eklemek istedikleri öğeleri temsil eden birden fazla dize girişi okuyun (giriş
"cart_done"aldığınızda sona erecektir) - Her öğe için,
containsKey()kullanarak ürün kataloğunda mevcut olup olmadığını kontrol edin ve geçerli öğeleri sepete ekleyin - Sepetteki tüm öğe fiyatlarını toplayarak ara toplamı hesaplayın
- İndirim eşik tutarını temsil eden bir dize girişi okuyun
- Uygulanacak indirim yüzdesini temsil eden bir dize girişi okuyun
- İndirimi yalnızca ara toplam eşik tutarına eşitse veya bu tutarı aşıyorsa uygulayın
- İndirim miktarını ve indirim uygulandıktan sonraki nihai toplamı hesaplayın
- İndirim hesaplama raporunu tam olarak aşağıda gösterilen formatta görüntüleyin
Örneğin, mağazada 1.50 fiyatıyla "Apple", 0.80 fiyatıyla "Banana", 2.00 fiyatıyla "Orange", 3.25 fiyatıyla "Milk" ürünleri varsa ve müşteriler "Apple", "Orange", "Milk", "Apple" eklemek istiyorsa, indirim eşiği 5.00 ve indirim yüzdesi 10 ise, programınız şu çıktıyı vermelidir:
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
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 10% discount applied
Cart Status: Ready for checkoutEğer mağazada 999.99 fiyatıyla "Laptop", 25.50 fiyatıyla "Mouse", 75.00 fiyatıyla "Keyboard" ürünleri varsa ve müşteriler "Mouse", "Keyboard" eklemek istiyorsa, indirim eşiği 150.00 ve indirim yüzdesi 15 ise, programınız şu çıktıyı vermelidir:
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
Cart Summary:
Total items in cart: 2
Unique products in cart: 2
Items successfully added: 2
Items not found: 0
Discount Status: No discount applied
Cart Status: Ready for checkoutEğer mağazada 12.99 fiyatıyla "Novel", 4.50 fiyatıyla "Magazine", 89.00 fiyatıyla "Textbook" ürünleri varsa ve müşteriler "Novel", "Textbook", "Magazine", "Novel" eklemek istiyorsa, indirim eşiği 75.00 ve indirim yüzdesi 20 ise, programınız şu çıktıyı vermelidir:
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
Cart Summary:
Total items in cart: 4
Unique products in cart: 3
Items successfully added: 4
Items not found: 0
Discount Status: 20% discount applied
Cart Status: Ready for checkoutProgramınız önce ara toplamı hesaplamalı, ardından bir koşullu if ifadesi kullanarak bunun indirim eşiğini karşılayıp karşılamadığını veya aşıp aşmadığını kontrol etmelidir. Eşik karşılanırsa, ara toplamı 100'e bölünmüş indirim yüzdesiyle çarparak indirim miktarını hesaplayın. Nihai toplamı elde etmek için indirim miktarını ara toplamdan çıkarın. Tüm parasal değerleri tam olarak 2 ondalık basamak gösterecek şekilde biçimlendirin. Giriş formatı şu şekilde olacaktır: "cart_done" ile biten sepete eklenecek öğe adları, ardından indirim eşik tutarı ve indirim yüzdesi (her ikisi de uygun sayısal türlere dönüştürülmesi gereken dizeler olarak).
Kendin dene
import 'dart:io';
void main() {
// Product catalog with prices
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
};
// Shopping cart list
List<String> cart = [];
// Counters for summary
int itemsAdded = 0;
int itemsNotFound = 0;
print('Shopping Cart Operations:');
// Read items until "cart_done"
String? item;
while ((item = stdin.readLineSync()) != 'cart_done') {
if (item != null) {
if (products.containsKey(item)) {
cart.add(item);
print("Adding '$item': Item added to cart successfully");
itemsAdded++;
} else {
print("Adding '$item': Item not available in store");
itemsNotFound++;
}
}
}
// Display cart contents
print('Cart Contents: $cart');
// Calculate total cost
print('Cost Calculation:');
double totalCost = 0.0;
for (String cartItem in cart) {
double price = products[cartItem]!;
totalCost += price;
print('$cartItem: \$${price.toStringAsFixed(2)}');
}
print('Total Cost: \$${totalCost.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('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 Listesi