Guest User

Untitled

a guest
Apr 20th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.49 KB | None | 0 0
  1. product_data = [
  2. "PE316,Zvukotesna vlozka SPIRE pro redukci hluku,104,51",
  3. "RI080,FAN COOLER PASIVNI,491,88",
  4. "QE091,Nabijecka PENTAGRAM Pocket USB,608,30",
  5. "QU286,RAMECEK ViPower VYMENNY PLAST ATA,572,95",
  6. "PU441,RAZER LYCOSA Gaming Keyboard,160,56",
  7. "QE170,ICON,136,47",
  8. "SE125,UTP OCHRANA KONEKTORU,310,17",
  9. "TI390,PCI Express,415,56",
  10. "TO120,PRINTSERVER Digitus Fast Ethernet USB,674,38",
  11. "QO071,230V Belkin Powerline Turbo Networking adapter,796,81",
  12. "QO350,WIFI ANTENA smerova parabolicka,585,88",
  13. "QE042,WIFI ANTENA smerova,398,81",
  14. "RU090,TP-LINK router TL-R,646,92",
  15. "SE447,ADSL WELL PC,155,-1000", # CHYBNY STAV SKLADU
  16. "PI287,VoIP Perfect GW,-999,23", #CHYBNA CENA
  17. "QA255,STOJANEK POD MONITOR cerny se zasuvkou,277,90",
  18. "SE433,Brasna ultracese pro Notebook 15,425,80",
  19. "SA309,BATOH pro Notebook BacPac Easy DICOTA,511,52",
  20. "XX449,LOGO SAFE obal na Notebook neopren pro,328,80", #CHYBNY KOD
  21. "TI185,PORTE Blue Laser samolepici folie pro NTB,383,56",
  22. "TO280,PORTE Yellow Cosmo samolepici folie pro NTB,506,97",
  23. "RI443,Evolve sportovni hodinky SPORT,682,17",
  24. "PO040,PCMCIA SERIOVY PORT STLabs,584,10",
  25. "TU116,Notebook HP EliteBook 8730w,142,11",
  26. "QO408,Notebook ASUS Lamborghini VX5-6X002J,23441,12",
  27. "RA222,Notebook LENOVO THINKPAD W700,34587,98",
  28. "RI407,Notebook TOSHIBA Qosmio X300-15G,35890,25",
  29. "PI422,Notebook SONY VAIO Z41XD/B/ C2D P9700,45691,75",
  30. "PE217,Notebook APPLE MacBook Pro,55165,25",
  31. "QI168,Notebook UMAX VisionBook,18230,56",
  32. "SO999,Notebook HP EliteBook 8730w,20741,98" #CHYBNY KOD
  33. ]
  34.  
  35. order_data = [
  36. "1,PE316,-100", #CHYBNY POCET VYROBKU
  37. "2,RI080,40",
  38. "3,QE091,45",
  39. "4,QU286,62",
  40. "5,PU441,8",
  41. "6,QE170,40",
  42. "7,SE125,34",
  43. "8,TI390,52",
  44. "9,TO120,2",
  45. "10,QO071,15",
  46. "11,QO350,32",
  47. "12,QE042,38",
  48. "13,RU090,54",
  49. "14,SE447,52",
  50. "15,PI287,70",
  51. "16,QA255,54",
  52. "17,SE433,20",
  53. "18,SA309,66",
  54. "19,XX449,57", #CHYBNY KOD
  55. "20,TI185,54",
  56. "21,TO280,69",
  57. "22,RI443,13",
  58. "23,PO040,55",
  59. "24,TU116,67",
  60. "25,QO408,7",
  61. "26,RA222,32",
  62. "27,RI407,18",
  63. "28,PI422,35",
  64. "29,PE217,31",
  65. "30,QI168,1",
  66. "31,SO999,54", #CHYBNY KOD
  67. "32,PA001,54" #NEEXISTUJICI VYROBEK
  68. ]
  69.  
  70. class Product
  71. attr_reader :code, :name, :price, :instore, :sold
  72. # validuje data, vyhazuje vyjimky v pripade chyby
  73. def initialize(code, name, price, instore)
  74. @code = code
  75. @name = name
  76. @price = price
  77. @instore = instore
  78. @sold = 0
  79. # DOPLNTE KONTROLU SPRAVNOSTI DAT
  80. # V PRIPADE CHYBY VYHODTE VYJIMKU
  81. end
  82.  
  83. # kontroluje mnozstvi na sklade, vyhazuje vyjimku kdyz sklad nestaci
  84. def buy(amount)
  85. if amount > @instore
  86. raise Exception.new("#{@code}: Not enough items in store")
  87. else
  88. @sold = amount
  89. end
  90. end
  91. end
  92.  
  93. class Order
  94. attr_reader :number, :code, :amount
  95. # validuje data, vyhazuje vyjimky v pripade chyby
  96. def initialize(number, code, amount)
  97. @number = number
  98. @code = code
  99. @amount = amount
  100. # DOPLNTE KONTROLU SPRAVNOSTI DAT
  101. # V PRIPADE CHYBY VYHODTE VYJIMKU
  102. end
  103. end
  104.  
  105. class Store
  106. attr_reader :products, :orders, :profit_notebooks, :profit_other
  107. # Nacte data z textovych radku, osetruje pripadne vyjimky
  108. def initialize(product_data, order_data)
  109. @products = []
  110. @orders = []
  111.  
  112. product_data.each do |prod|
  113. data = prod.split(",")
  114. product_object = Product.new(data[0],data[1],data[2].to_i,data[3].to_i)
  115. @products << product_object
  116. # DOPLNTE OSETRENI VYJIMEK
  117. end
  118.  
  119. order_data.each do |order|
  120. data = order.split(",")
  121. order_object = Order.new(data[0].to_i,data[1],data[2].to_i)
  122. @orders << order_object
  123. # DOPLNTE OSETRENI VYJIMEK
  124. end
  125. end
  126.  
  127. # Projde objednavky - pokusi se najit vyrobek a koupit
  128. # Osetruje vyjimky v pripade nenalezeni vyrobku nebo kdyz neni skladem
  129. def process_orders
  130. @orders.each do |order|
  131. begin
  132. prod = find_product(order.code)
  133. prod.buy(order.amount)
  134. rescue Exception => e
  135. puts "Cancelling order #{order.number} - #{e}"
  136. end
  137. end
  138. end
  139.  
  140. # Spocita zist a ulozi do promennych @profit_notebooks a @profit_other
  141. # Za notebook se povazuje kazdy produkt, jehoz nazev zacina na "Notebook"
  142. def calculate_profit
  143. # DOPLNTE IMPLEMENTACI METODY
  144. end
  145.  
  146. private
  147.  
  148. # Najde a vrati produkt podle kodu, nebo vyhodi vyjimku
  149. def find_product(code)
  150. @products.each do |product|
  151. return product if product.code == code
  152. end
  153. raise Exception.new("#{code}: Product not found")
  154. end
  155. end
  156.  
  157. store = Store.new(product_data, order_data)
  158. store.process_orders
  159. store.calculate_profit
Add Comment
Please, Sign In to add comment