duplicityyy

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

Jun 29th, 2020
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.13 KB | None | 0 0
  1. Аптека Problem 4 (1 / 3)
  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(290+ASCII(c1))+ASCII(c2))+ASCII(c3))%102780 каде зборот w=c1c2c3c4c5…. е составен од сите големи букви.
  9.  
  10. Исто така за лековите да се направи посебна класа која како атрибути ќе ги има наведените карактеристики на лекот во системот.
  11.  
  12. Име на класата: Apteka.
  13.  
  14. Sample input
  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. Sample output
  43. Nema takov lek
  44. HYDROCYKLIN20
  45. NEG
  46. 113
  47. 20
  48. Napravena naracka
  49.  
  50. ---------------------------------------------------------------------------------------------------------------------------------------
  51.  
  52. import java.io.BufferedReader;
  53. import java.io.IOException;
  54. import java.io.InputStreamReader;
  55.  
  56. class SLLNode<E> {
  57.     protected E element;
  58.     protected SLLNode<E> succ;
  59.  
  60.     public SLLNode(E elem, SLLNode<E> succ) {
  61.         this.element = elem;
  62.         this.succ = succ;
  63.     }
  64.  
  65.     @Override
  66.     public String toString() {
  67.         return element.toString();
  68.     }
  69. }
  70.  
  71. class MapEntry<K extends Comparable<K>,E> implements Comparable<K> {
  72.  
  73.     // Each MapEntry object is a pair consisting of a key (a Comparable
  74.     // object) and a value (an arbitrary object).
  75.     K key;
  76.     E value;
  77.  
  78.     public MapEntry (K key, E val) {
  79.         this.key = key;
  80.         this.value = val;
  81.     }
  82.  
  83.     public int compareTo (K that) {
  84.         // Compare this map entry to that map entry.
  85.         @SuppressWarnings("unchecked")
  86.         MapEntry<K,E> other = (MapEntry<K,E>) that;
  87.         return this.key.compareTo(other.key);
  88.     }
  89.  
  90.     public String toString () {
  91.         return "<" + key + "," + value + ">";
  92.     }
  93. }
  94.  
  95. class CBHT<K extends Comparable<K>, E> {
  96.  
  97.     // An object of class CBHT is a closed-bucket hash table, containing
  98.     // entries of class MapEntry.
  99.     private SLLNode<MapEntry<K,E>>[] buckets;
  100.  
  101.     @SuppressWarnings("unchecked")
  102.     public CBHT(int m) {
  103.         // Construct an empty CBHT with m buckets.
  104.         buckets = (SLLNode<MapEntry<K,E>>[]) new SLLNode[m];
  105.     }
  106.  
  107.     private int hash(K key) {
  108.         // Translate key to an index of the array buckets.
  109.         return Math.abs(key.hashCode()) % buckets.length;
  110.     }
  111.  
  112.     public SLLNode<MapEntry<K,E>> search(K targetKey) {
  113.         // Find which if any node of this CBHT contains an entry whose key is
  114.         // equal
  115.         // to targetKey. Return a link to that node (or null if there is none).
  116.         int b = hash(targetKey);
  117.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  118.             if (targetKey.equals(((MapEntry<K, E>) curr.element).key))
  119.                 return curr;
  120.         }
  121.         return null;
  122.     }
  123.  
  124.     public void insert(K key, E val) {      // Insert the entry <key, val> into this CBHT.
  125.         MapEntry<K, E> newEntry = new MapEntry<K, E>(key, val);
  126.         int b = hash(key);
  127.         for (SLLNode<MapEntry<K,E>> curr = buckets[b]; curr != null; curr = curr.succ) {
  128.             if (key.equals(((MapEntry<K, E>) curr.element).key)) {
  129.                 // Make newEntry replace the existing entry ...
  130.                 curr.element = newEntry;
  131.                 return;
  132.             }
  133.         }
  134.         // Insert newEntry at the front of the 1WLL in bucket b ...
  135.         buckets[b] = new SLLNode<MapEntry<K,E>>(newEntry, buckets[b]);
  136.     }
  137.  
  138.     public void delete(K key) {
  139.         // Delete the entry (if any) whose key is equal to key from this CBHT.
  140.         int b = hash(key);
  141.         for (SLLNode<MapEntry<K,E>> pred = null, curr = buckets[b]; curr != null; pred = curr, curr = curr.succ) {
  142.             if (key.equals(((MapEntry<K,E>) curr.element).key)) {
  143.                 if (pred == null)
  144.                     buckets[b] = curr.succ;
  145.                 else
  146.                     pred.succ = curr.succ;
  147.                 return;
  148.             }
  149.         }
  150.     }
  151.  
  152.     public String toString() {
  153.         String temp = "";
  154.         for (int i = 0; i < buckets.length; i++) {
  155.             temp += i + ":";
  156.             for (SLLNode<MapEntry<K,E>> curr = buckets[i]; curr != null; curr = curr.succ) {
  157.                 temp += curr.element.toString() + " ";
  158.             }
  159.             temp += "\n";
  160.         }
  161.         return temp;
  162.     }
  163.  
  164. }
  165.  
  166. class Lek{
  167.     protected int negPoz;
  168.     protected int cena;
  169.     protected int brojParcinja;
  170.  
  171.     public Lek(int negPoz, int cena, int brojParcinja){
  172.         this.negPoz = negPoz;
  173.         this.cena = cena;
  174.         this.brojParcinja = brojParcinja;
  175.     }
  176. }
  177.  
  178. public class Apteka {
  179.     public static void main(String[] args) throws IOException {
  180.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  181.         int N = Integer.parseInt(br.readLine());
  182.         CBHT<String, Lek> hashTabela = new CBHT<>(N+1);
  183.  
  184.         for(int i=0;i<N;i++){
  185.             String line = br.readLine();
  186.             String[] things = line.split(" ");
  187.             int negPoz = Integer.parseInt(things[1]);
  188.             int cena = Integer.parseInt(things[2]);
  189.             int brojParcinja = Integer.parseInt(things[3]);
  190.             Lek lek = new Lek(negPoz, cena, brojParcinja);
  191.             hashTabela.insert(things[0], lek);
  192.         }
  193.  
  194.         //System.out.println(hashTabela.toString());
  195.  
  196.         String line = br.readLine().toUpperCase();  //upperCase() na nizata koja kje ja sporeduvate so key elementot od hashtabelata
  197.         while(!line.equals("KRAJ")){                //za da bidat i dvete uppercase i da ne ispuka greshka
  198.             N = Integer.parseInt(br.readLine());
  199.             SLLNode<MapEntry<String, Lek>> node = hashTabela.search(line);
  200.             if(hashTabela.search(line) != null){
  201.                 if(N > node.element.value.brojParcinja){
  202.                     System.out.println("Nema dovolno lekovi");
  203.                 }else{
  204.                     System.out.println(node.element.key);
  205.                     if(node.element.value.negPoz == 1) {
  206.                         System.out.println("POZ");
  207.                     }
  208.                     else {
  209.                         System.out.println("NEG");
  210.                     }
  211.                     System.out.println(node.element.value.cena);
  212.                     System.out.println(node.element.value.brojParcinja);
  213.                     node.element.value.brojParcinja = node.element.value.brojParcinja - N; //update na zalihata na lekovi
  214.                     System.out.println("Napravena naracka");
  215.                 }
  216.             }
  217.             else
  218.                 System.out.println("Nema takov lek");
  219.  
  220.             line = br.readLine().toUpperCase();
  221.         }
  222.     }
  223. }
Add Comment
Please, Sign In to add comment