Shopping Cart code
unknown
typescript
a year ago
4.4 kB
5
Indexable
// interfaces for different types of products interface Product { id: number; name: string; price: number; } interface Electronic extends Product { brand: string; } interface Clothing extends Product { size: string; } interface Food extends Product { expirationDate: string; } // Class for ShoppingCart class myCart { private items: CartItem[] = []; // Adding product to cart addProduct(product: Product, quantity: number): void { if (quantity <= 0) { throw new Error('Quantity should be a positive number'); } this.items.push({ product, quantity }); } // Calculating total price of items getTotalPrice(): number { return this.items.reduce( (total, item) => total + item.product.price * item.quantity, 0 ); } // Generate receipt generateReceipt(): string { let receipt = ''; receipt += 'Receipt\n\n'; this.items.forEach((item) => { if ('brand' in item.product) { const electronic = item.product as Electronic; receipt += `${electronic.name} (${electronic.brand}): $${electronic.price} x ${item.quantity}\n`; } else if ('size' in item.product) { const clothing = item.product as Clothing; receipt += `${clothing.name} (Size: ${clothing.size}): $${clothing.price} x ${item.quantity}\n`; } else if ('expirationDate' in item.product) { const food = item.product as Food; receipt += `${food.name} (Expires: ${food.expirationDate}): $${food.price} x ${item.quantity}\n`; } }); receipt += `\nTotal: ${this.getTotalPrice()}\n`; return receipt; } } // Class representing a cart item class CartItem { constructor(public product: Product, public quantity: number) {} } // Class representing available items for sale class AvailableItems { private electronics: Electronic[] = []; private clothes: Clothing[] = []; private foods: Food[] = []; // Add electronic item addElectronic(item: Electronic): void { this.electronics.push(item); } // Add clothing item addClothing(item: Clothing): void { this.clothes.push(item); } // Add food item addFood(item: Food): void { this.foods.push(item); } // Display available items displayItems(): void { console.log(' Electronics:'); console.log( this.electronics.map( (item) => `${item.name} (${item.brand}) - $${item.price}` ) ); console.log(' Clothes:'); console.log( this.clothes.map( (item) => `${item.name} (Size: ${item.size}) - $${item.price}` ) ); console.log(' Foods:'); console.log( this.foods.map( (item) => `${item.name} (Expires: ${item.expirationDate}) - $${item.price}` ) ); } } // products const laptop: Electronic = { id: 1, name: 'HP Elitebook', price: 999, brand: 'HP', }; const smartphone: Electronic = { id: 2, name: 'iPhone', price: 899, brand: 'Apple', }; const itel: Electronic = { id: 3, name: 'Deyplay!', price: 99, brand: 'itel' }; const tShirt: Clothing = { id: 4, name: 'T-shirt', price: 20, size: 'M' }; const burger: Food = { id: 5, name: 'Burger', price: 5, expirationDate: '05-15-24', }; const suya: Food = { id: 6, name: 'Suya', price: 3, expirationDate: 'None' }; // Create available items const availableItems = new AvailableItems(); availableItems.addElectronic(laptop); availableItems.addElectronic(smartphone); availableItems.addClothing(tShirt); availableItems.addFood(burger); // Display available items availableItems.displayItems(); // Create a shopping cart and add products const livecart = new myCart(); livecart.addProduct(laptop, 1); livecart.addProduct(smartphone, 2); livecart.addProduct(tShirt, 3); livecart.addProduct(burger, 4); // Display receipt console.log(livecart.generateReceipt()); console.log('$' + livecart.getTotalPrice());
Editor is loading...
Leave a Comment