SashkoKlincharov

[Java][АПС] - Аптека

Jan 23rd, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.99 KB | None | 0 0
  1. Аптека Problem 4 (0 / 0)
  2. Потребно е да се направи компјутерска апликација со која ќе се забрза работењето на една аптека. Притоа апликацијата треба да му овозможи на корисникот (фармацевтот) брзо да пребарува низ огромното множество со лекови кои се внесени во системот. Начинот на кој тој треба да пребарува е следен: доволно е да ги внесе првите 3 букви од името на лекот за да може да му се излиста листа од лекови кои ги има во системот. Работата на фармацевтот е да провери дали внесениот лек го има во системот и да му даде информација на клиентот. Информацијата што треба да му ја даде на клиентот е дали лекот се наоѓа на позитивната листа на лекови, која е цената и колку парчиња од лекот има на залиха. Доколку лекот постои клиентот го нарачува со што кажува колку парчиња ќе купи. Оваа акција фармацевтот треба да ја евидентира на системот (односно да ја намали залихата на лекови за онолку парчиња колку што му издал на клиентот). Доколку нарачката на клиентот е поголема од залихата на лекот што ја има во системот, не се презема никаква акција.
  3.  
  4. Влез: Од стандарден влез прво се дава број N кој претставува број на лекови кои ќе бидат внесени во системот. Во наредните N реда се дадени имињата на лековите, дали ги има на позитивната листа (1/0), цената и број на парчиња, сите разделени со по едно празно место. Потоа се даваат редови со имиња на лекови и број на парчиња нарачани од клиентот. За означување на крај се дава зборот KRAJ.
  5.  
  6. Излез: На стандарден излез треба да се испечати за секој од влезовите следната информација: IME POZ/NEG CENA BR_LEKOVI. Доколку лекот не е најден се печати Nema takov lek. Доколку нарачката на клиентот е поголема од залихата се печати Nema dovolno lekovi инаку Napravena naracka.
  7.  
  8. Забелешка: Задачата да се реши со хeш табела. Функцијата со која се врши мапирање на имињата на лековите во број е следна: h(w)=(29∗(29∗(29∗0+ASCII(c1))+ASCII(c2))+ASCII(c3))%102780 каде зборот w=c1c2c3c4c5…. е составен од сите големи букви.
  9.  
  10. Исто така за лековите да се направи посебна класа која како атрибути ќе ги има наведените карактеристики на лекот во системот.
  11.  
  12. Име на класата: Apteka.
  13.  
  14. Пример влез:
  15. 20
  16. ACEROLA 0 100 1000
  17. ACIKLOVIR 1 1650 87
  18. ACIPAN 1 300 25
  19. ADIMICIN 0 500 0
  20. VENTOR 1 0 25
  21. VALSACOR 1 1090 10
  22. TYVERB 0 62696 1
  23. ULCODIN 1 47 100
  24. TRICAL 0 0 0
  25. RUBENS 0 2315 0
  26. IBALGIN 1 0 100
  27. HYDROCYKLIN 0 55 10
  28. GENTAMICIN 1 152 90
  29. FORTEO 1 0 0
  30. FORVITAC 1 0 150
  31. CHIROCAINE 1 0 10
  32. BRONLES 1 0 0
  33. BELOGENT 0 143 30
  34. BEDOXIN 1 0 100
  35. HYDROCYKLIN20 0 113 20
  36. hydroCyklinn
  37. 2
  38. hydroCyklin20
  39. 2
  40. KRAJ
  41.  
  42. Пример излез:
  43. Nema takov lek
  44. HYDROCYKLIN20
  45. NEG
  46. 113
  47. 20
  48. Napravena naracka
  49.  
  50. import java.util.Scanner;
  51.  
  52. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  53.  
  54. // Each MapEntry object is a pair consisting of a key (a Comparable
  55. // object) and a value (an arbitrary object).
  56. K key;
  57. E value;
  58.  
  59. public MapEntry (K key, E val) {
  60. this.key = key;
  61. this.value = val;
  62. }
  63.  
  64. public int compareTo (K that) {
  65. // Compare this map entry to that map entry.
  66. @SuppressWarnings("unchecked")
  67. MapEntry<K,E> other = (MapEntry<K,E>) that;
  68. return this.key.compareTo(other.key);
  69. }
  70.  
  71. public String toString () {
  72. return "<" + key + "," + value + ">";
  73. }
  74. }
  75.  
  76.  
  77. class CBHT<K extends Comparable<K>, E> {
  78.  
  79. // An object of class CBHT is a closed-bucket hash table, containing
  80. // entries of class MapEntry.
  81. private SLLNode<MapEntry<K,E>>[] buckets;
  82.  
  83. @SuppressWarnings("unchecked")
  84. public CBHT(int m) {
  85. // Construct an empty CBHT with m buckets.
  86. buckets = (SLLNode<MapEntry<K,E>>[]) new SLLNode[m];
  87. }
  88.  
  89. private int hash(K key) {
  90. // Translate key to an index of the array buckets.
  91. String k = (String) key;
  92. return ((29 * (29 * (29 * 0 + k.charAt(0)) + k.charAt(1)) + k.charAt(2)) % 102780) % buckets.length;
  93. }
  94.  
  95. public SLLNode<MapEntry<K,E>> search(K targetKey) {
  96. // Find which if any node of this CBHT contains an entry whose key is
  97. // equal
  98. // to targetKey. Return a link to that node (or null if there is none).
  99. int b = hash(targetKey);
  100. for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  101. if (targetKey.equals(((MapEntry<K, E>) curr.element).key))
  102. return curr;
  103. }
  104. return null;
  105. }
  106.  
  107. public void insert(K key, E val) { // Insert the entry <key, val> into this CBHT.
  108. MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
  109. int b = hash(key);
  110. for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  111. if (key.equals(((MapEntry<K, E>) curr.element).key)) {
  112. // Make newEntry replace the existing entry ...
  113. curr.element = newEntry;
  114. return;
  115. }
  116. }
  117. // Insert newEntry at the front of the 1WLL in bucket b ...
  118. buckets[b] = new SLLNode<MapEntry<K,E>>(newEntry, buckets[b]);
  119. }
  120.  
  121. public void delete(K key) {
  122. // Delete the entry (if any) whose key is equal to key from this CBHT.
  123. int b = hash(key);
  124. for (SLLNode<MapEntry<K,E>> pred = null, curr = buckets[b]; curr != null; pred = curr, curr = curr.succ) {
  125. if (key.equals(((MapEntry<K,E>) curr.element).key)) {
  126. if (pred == null)
  127. buckets[b] = curr.succ;
  128. else
  129. pred.succ = curr.succ;
  130. return;
  131. }
  132. }
  133. }
  134.  
  135. public String toString() {
  136. String temp = "";
  137. for (int i = 0; i < buckets.length; i++) {
  138. temp += i + ":";
  139. for (SLLNode<MapEntry<K,E>> curr = buckets[i]; curr != null; curr = curr.succ) {
  140. temp += curr.element.toString() + " ";
  141. }
  142. temp += "\n";
  143. }
  144. return temp;
  145. }
  146.  
  147. }
  148.  
  149.  
  150. class SLLNode<E> {
  151. protected E element;
  152. protected SLLNode<E> succ;
  153.  
  154. public SLLNode(E elem, SLLNode<E> succ) {
  155. this.element = elem;
  156. this.succ = succ;
  157. }
  158.  
  159. @Override
  160. public String toString() {
  161. return element.toString();
  162. }
  163. }
  164.  
  165. class Lek{
  166. protected String imelek;
  167. protected int lista;
  168. protected int cena;
  169. protected int brparcinja;
  170.  
  171. public Lek(String imelek, int lista, int cena, int brparcinja) {
  172. this.imelek = imelek.toUpperCase();
  173. this.lista = lista;
  174. this.cena = cena;
  175. this.brparcinja = brparcinja;
  176. }
  177. }
  178.  
  179. public class Apteka {
  180.  
  181. public static void main(String[] args) {
  182. Scanner input = new Scanner(System.in);
  183. int n = input.nextInt();
  184. input.nextLine();
  185. CBHT<String,Lek> hashtable = new CBHT<String,Lek>(n*2);
  186. for(int i=0;i<n;i++) {
  187. String [] string = input.nextLine().split(" ");
  188. String ime = string[0];
  189. int pozneg = Integer.parseInt(string[1]);
  190. int cena = Integer.parseInt(string[2]);
  191. int brparcinja = Integer.parseInt(string[3]);
  192. Lek lek = new Lek(ime,pozneg,cena,brparcinja);
  193. hashtable.insert(ime.toUpperCase(), lek);
  194. }
  195.  
  196. while(true) {
  197. String barano = input.nextLine();
  198. barano = barano.toUpperCase();
  199. if(barano.equals("KRAJ")) {
  200. break;
  201. }
  202. int broj = input.nextInt();
  203. input.nextLine();
  204. SLLNode<MapEntry<String,Lek>> node = hashtable.search(barano);
  205. if(node!=null) {
  206. System.out.println(node.element.key);
  207. if(node.element.value.lista==1) {
  208. System.out.println("POZ");
  209. }
  210. else {
  211. System.out.println("NEG");
  212. }
  213. System.out.println(node.element.value.cena);
  214. System.out.println(node.element.value.brparcinja);
  215. if(broj<=node.element.value.brparcinja) {
  216. System.out.println("Napravena naracka");
  217. node.element.value.brparcinja = node.element.value.brparcinja - broj;
  218. }else {
  219. System.out.println("Nema dovolno lekovi");
  220. }
  221. }
  222. else {
  223. System.out.println("Nema takov lek");
  224. }
  225. }
  226. }
  227.  
  228. }
Add Comment
Please, Sign In to add comment