Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- product_data = [
- "PE316,Zvukotesna vlozka SPIRE pro redukci hluku,104,51",
- "RI080,FAN COOLER PASIVNI,491,88",
- "QE091,Nabijecka PENTAGRAM Pocket USB,608,30",
- "QU286,RAMECEK ViPower VYMENNY PLAST ATA,572,95",
- "PU441,RAZER LYCOSA Gaming Keyboard,160,56",
- "QE170,ICON,136,47",
- "SE125,UTP OCHRANA KONEKTORU,310,17",
- "TI390,PCI Express,415,56",
- "TO120,PRINTSERVER Digitus Fast Ethernet USB,674,38",
- "QO071,230V Belkin Powerline Turbo Networking adapter,796,81",
- "QO350,WIFI ANTENA smerova parabolicka,585,88",
- "QE042,WIFI ANTENA smerova,398,81",
- "RU090,TP-LINK router TL-R,646,92",
- "SE447,ADSL WELL PC,155,-1000", # CHYBNY STAV SKLADU
- "PI287,VoIP Perfect GW,-999,23", #CHYBNA CENA
- "QA255,STOJANEK POD MONITOR cerny se zasuvkou,277,90",
- "SE433,Brasna ultracese pro Notebook 15,425,80",
- "SA309,BATOH pro Notebook BacPac Easy DICOTA,511,52",
- "XX449,LOGO SAFE obal na Notebook neopren pro,328,80", #CHYBNY KOD
- "TI185,PORTE Blue Laser samolepici folie pro NTB,383,56",
- "TO280,PORTE Yellow Cosmo samolepici folie pro NTB,506,97",
- "RI443,Evolve sportovni hodinky SPORT,682,17",
- "PO040,PCMCIA SERIOVY PORT STLabs,584,10",
- "TU116,Notebook HP EliteBook 8730w,142,11",
- "QO408,Notebook ASUS Lamborghini VX5-6X002J,23441,12",
- "RA222,Notebook LENOVO THINKPAD W700,34587,98",
- "RI407,Notebook TOSHIBA Qosmio X300-15G,35890,25",
- "PI422,Notebook SONY VAIO Z41XD/B/ C2D P9700,45691,75",
- "PE217,Notebook APPLE MacBook Pro,55165,25",
- "QI168,Notebook UMAX VisionBook,18230,56",
- "SO999,Notebook HP EliteBook 8730w,20741,98" #CHYBNY KOD
- ]
- order_data = [
- "1,PE316,-100", #CHYBNY POCET VYROBKU
- "2,RI080,40",
- "3,QE091,45",
- "4,QU286,62",
- "5,PU441,8",
- "6,QE170,40",
- "7,SE125,34",
- "8,TI390,52",
- "9,TO120,2",
- "10,QO071,15",
- "11,QO350,32",
- "12,QE042,38",
- "13,RU090,54",
- "14,SE447,52",
- "15,PI287,70",
- "16,QA255,54",
- "17,SE433,20",
- "18,SA309,66",
- "19,XX449,57", #CHYBNY KOD
- "20,TI185,54",
- "21,TO280,69",
- "22,RI443,13",
- "23,PO040,55",
- "24,TU116,67",
- "25,QO408,7",
- "26,RA222,32",
- "27,RI407,18",
- "28,PI422,35",
- "29,PE217,31",
- "30,QI168,1",
- "31,SO999,54", #CHYBNY KOD
- "32,PA001,54" #NEEXISTUJICI VYROBEK
- ]
- class Product
- attr_reader :code, :name, :price, :instore, :sold
- # validuje data, vyhazuje vyjimky v pripade chyby
- def initialize(code, name, price, instore)
- @code = code
- @name = name
- @price = price
- @instore = instore
- @sold = 0
- unless @code =~ /(^P|Q|R|S|T)(A|E|I|O|U)[001-450$]/
- raise Exception.new("#{@code}: Not enough items in store")
- end
- unless @price > 0
- puts "#{@code}: Wrong price"
- end
- # DOPLNTE KONTROLU SPRAVNOSTI DAT
- # V PRIPADE CHYBY VYHODTE VYJIMKU
- end
- # kontroluje mnozstvi na sklade, vyhazuje vyjimku kdyz sklad nestaci
- def buy(amount)
- if amount > @instore
- raise Exception.new("#{@code}: Not enough items in store")
- else
- @sold = amount
- end
- end
- end
- class Order
- attr_reader :number, :code, :amount
- # validuje data, vyhazuje vyjimky v pripade chyby
- def initialize(number, code, amount)
- @number = number
- @code = code
- @amount = amount
- # DOPLNTE KONTROLU SPRAVNOSTI DAT
- # V PRIPADE CHYBY VYHODTE VYJIMKU
- end
- end
- class Store
- attr_reader :products, :orders, :profit_notebooks, :profit_other
- # Nacte data z textovych radku, osetruje pripadne vyjimky
- def initialize(product_data, order_data)
- @products = []
- @orders = []
- product_data.each do |prod|
- data = prod.split(",")
- product_object = Product.new(data[0],data[1],data[2].to_i,data[3].to_i)
- @products << product_object
- # DOPLNTE OSETRENI VYJIMEK
- end
- order_data.each do |order|
- data = order.split(",")
- order_object = Order.new(data[0].to_i,data[1],data[2].to_i)
- @orders << order_object
- # DOPLNTE OSETRENI VYJIMEK
- end
- end
- # Projde objednavky - pokusi se najit vyrobek a koupit
- # Osetruje vyjimky v pripade nenalezeni vyrobku nebo kdyz neni skladem
- def process_orders
- @orders.each do |order|
- begin
- prod = find_product(order.code)
- prod.buy(order.amount)
- rescue Exception => e
- puts "Cancelling order #{order.number} - #{e}"
- end
- end
- end
- # Spocita zist a ulozi do promennych @profit_notebooks a @profit_other
- # Za notebook se povazuje kazdy produkt, jehoz nazev zacina na "Notebook"
- def calculate_profit
- # DOPLNTE IMPLEMENTACI METODY
- end
- private
- # Najde a vrati produkt podle kodu, nebo vyhodi vyjimku
- def find_product(code)
- @products.each do |product|
- return product if product.code == code
- end
- raise Exception.new("#{code}: Product not found")
- end
- end
- store = Store.new(product_data, order_data)
- store.process_orders
- store.calculate_profit
- PI287: Wrong price
- C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:81:in `initialize': XX449: Not enough items in store (Exception)
- from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:121:in `initialize'
- from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:119:in `each'
- from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:119:in `initialize'
- from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:164
Add Comment
Please, Sign In to add comment