Guest User

Untitled

a guest
Apr 20th, 2018
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.25 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.  
  80. unless @code =~ /(^P|Q|R|S|T)(A|E|I|O|U)[001-450$]/
  81. raise Exception.new("#{@code}: Not enough items in store")
  82. end
  83. unless @price > 0
  84. puts "#{@code}: Wrong price"
  85. end
  86. # DOPLNTE KONTROLU SPRAVNOSTI DAT
  87. # V PRIPADE CHYBY VYHODTE VYJIMKU
  88. end
  89.  
  90. # kontroluje mnozstvi na sklade, vyhazuje vyjimku kdyz sklad nestaci
  91. def buy(amount)
  92. if amount > @instore
  93. raise Exception.new("#{@code}: Not enough items in store")
  94. else
  95. @sold = amount
  96. end
  97. end
  98. end
  99.  
  100. class Order
  101. attr_reader :number, :code, :amount
  102. # validuje data, vyhazuje vyjimky v pripade chyby
  103. def initialize(number, code, amount)
  104. @number = number
  105. @code = code
  106. @amount = amount
  107. # DOPLNTE KONTROLU SPRAVNOSTI DAT
  108. # V PRIPADE CHYBY VYHODTE VYJIMKU
  109. end
  110. end
  111.  
  112. class Store
  113. attr_reader :products, :orders, :profit_notebooks, :profit_other
  114. # Nacte data z textovych radku, osetruje pripadne vyjimky
  115. def initialize(product_data, order_data)
  116. @products = []
  117. @orders = []
  118.  
  119. product_data.each do |prod|
  120. data = prod.split(",")
  121. product_object = Product.new(data[0],data[1],data[2].to_i,data[3].to_i)
  122. @products << product_object
  123. # DOPLNTE OSETRENI VYJIMEK
  124. end
  125.  
  126. order_data.each do |order|
  127. data = order.split(",")
  128. order_object = Order.new(data[0].to_i,data[1],data[2].to_i)
  129. @orders << order_object
  130. # DOPLNTE OSETRENI VYJIMEK
  131. end
  132. end
  133.  
  134. # Projde objednavky - pokusi se najit vyrobek a koupit
  135. # Osetruje vyjimky v pripade nenalezeni vyrobku nebo kdyz neni skladem
  136. def process_orders
  137. @orders.each do |order|
  138. begin
  139. prod = find_product(order.code)
  140. prod.buy(order.amount)
  141. rescue Exception => e
  142. puts "Cancelling order #{order.number} - #{e}"
  143. end
  144. end
  145. end
  146.  
  147. # Spocita zist a ulozi do promennych @profit_notebooks a @profit_other
  148. # Za notebook se povazuje kazdy produkt, jehoz nazev zacina na "Notebook"
  149. def calculate_profit
  150. # DOPLNTE IMPLEMENTACI METODY
  151. end
  152.  
  153. private
  154.  
  155. # Najde a vrati produkt podle kodu, nebo vyhodi vyjimku
  156. def find_product(code)
  157. @products.each do |product|
  158. return product if product.code == code
  159. end
  160. raise Exception.new("#{code}: Product not found")
  161. end
  162. end
  163.  
  164. store = Store.new(product_data, order_data)
  165. store.process_orders
  166. store.calculate_profit
  167.  
  168.  
  169.  
  170.  
  171.  
  172. PI287: Wrong price
  173. C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:81:in `initialize': XX449: Not enough items in store (Exception)
  174. from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:121:in `initialize'
  175. from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:119:in `each'
  176. from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:119:in `initialize'
  177. from C:\Users\Hanicka\Desktop\SDP_XA03_Simulace_zpracovani_objednavek\lib\main.rb:164
Add Comment
Please, Sign In to add comment