Kame3

Аптека lab6.4

Dec 19th, 2020 (edited)
1,034
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.07 KB | None | 0 0
  1. Аптека Problem 4 (0 / 0)
  2.  
  3. Потребно е да се направи компјутерска апликација со која ќе се забрза работењето на една аптека. Притоа апликацијата треба да му овозможи на корисникот (фармацевтот) брзо да пребарува низ огромното множество со лекови кои се внесени во системот. Начинот на кој тој треба да пребарува е следен: доволно е да ги внесе првите 3 букви од името на лекот за да може да му се излиста листа од лекови кои ги има во системот. Работата на фармацевтот е да провери дали внесениот лек го има во системот и да му даде информација на клиентот. Информацијата што треба да му ја даде на клиентот е дали лекот се наоѓа на позитивната листа на лекови, која е цената и колку парчиња од лекот има на залиха. Доколку лекот постои клиентот го нарачува со што кажува колку парчиња ќе купи. Оваа акција фармацевтот треба да ја евидентира на системот (односно да ја намали залихата на лекови за онолку парчиња колку што му издал на клиентот). Доколку нарачката на клиентот е поголема од залихата на лекот што ја има во системот, не се презема никаква акција.
  4.  
  5. Влез: Од стандарден влез прво се дава број N кој претставува број на лекови кои ќе бидат внесени во системот. Во наредните N реда се дадени имињата на лековите, дали ги има на позитивната листа (1/0), цената и број на парчиња, сите разделени со по едно празно место. Потоа се даваат редови со имиња на лекови и број на парчиња нарачани од клиентот. За означување на крај се дава зборот KRAJ.
  6.  
  7. Излез: На стандарден излез треба да се испечати за секој од влезовите следната информација: IME POZ/NEG CENA BR_LEKOVI. Доколку лекот не е најден се печати Nema takov lek. Доколку нарачката на клиентот е поголема од залихата се печати Nema dovolno lekovi инаку Napravena naracka.
  8.  
  9. Забелешка: Задачата да се реши со хeш табела. Функцијата со која се врши мапирање на имињата на лековите во број е следна: h(w)=(29(29(290+ASCII(c1))+ASCII(c2))+ASCII(c3))%102780 каде зборот w=c1c2c3c4c5…. е составен од сите големи букви.
  10.  
  11. Исто така за лековите да се направи посебна класа која како атрибути ќе ги има наведените карактеристики на лекот во системот.
  12.  
  13. Име на класата: Apteka.
  14.  
  15.  
  16. package com.example;
  17.  
  18. import java.io.BufferedReader;
  19. import java.io.IOException;
  20. import java.io.InputStreamReader;
  21. import java.util.HashMap;
  22. import java.util.Objects;
  23.  
  24. class Lek {
  25.     String name;
  26.     int poz;
  27.     int price;
  28.     int stock;
  29.     public Lek(){}
  30.     public Lek(String name, int poz, int price, int stock){
  31.         this.name = name.toUpperCase();
  32.         this.poz = poz;
  33.         this.price = price;
  34.         this.stock = stock;
  35.     }
  36.     String getPositive() {
  37.         if (poz == 1) {
  38.             return "POZ";
  39.         } else {
  40.             return "NEG";
  41.         }
  42.     }
  43.     boolean makeOrder(int n) {
  44.         if (stock >= n) {
  45.             stock -= n;
  46.             return true;
  47.         } else {
  48.             return false;
  49.         }
  50.     }
  51. }
  52. class imeLek {
  53.     String name;
  54.     public imeLek(){}
  55.     public imeLek(String name) {
  56.         this.name = name;
  57.     }
  58.  
  59.     @Override
  60.     public boolean equals(Object o) {
  61.         if (this == o) return true;
  62.         if (o == null || getClass() != o.getClass()) return false;
  63.         imeLek imeLek = (imeLek) o;
  64.         return Objects.equals(name, imeLek.name);
  65.     }
  66.  
  67.     @Override
  68.     public int hashCode() {
  69. //        (29∗(29∗(29∗0+name.charAt(0))+name.charAt(1))+name.charAt(2))%102780
  70.         return (29 * (29 * (29 * 0 + name.charAt(0)) + name.charAt(1)) + name.charAt(2)) % 102780;
  71.     }
  72. }
  73.  
  74. public class Main {
  75.     public static void main(String[] args) throws IOException {
  76.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  77.  
  78.         int n = Integer.parseInt(br.readLine());
  79.         HashMap<imeLek,Lek> lekovi = new HashMap<>();
  80.         String s = br.readLine();
  81.         String[] pomniza = s.split(" ");
  82.         for (int i=0; i<n; i++) {
  83.             String name = pomniza[0];
  84.             int poz = Integer.parseInt(pomniza[1]);
  85.             int price = Integer.parseInt(pomniza[2]);
  86.             int stock = Integer.parseInt(pomniza[3]);
  87.             Lek lek = new Lek(name,poz,price,stock);
  88.             imeLek ime = new imeLek(name);
  89.             lekovi.put(ime,lek);
  90.         }
  91.  
  92.         while (true) {
  93.             String name = br.readLine();
  94.             if (name.equals("KRAJ")) {
  95.                 break;
  96.             }
  97.             int order = Integer.parseInt(br.readLine());
  98.             imeLek L = new imeLek(name); // key
  99.             if (lekovi.containsKey(L)) {
  100.                 Lek lek = lekovi.get(L); // value
  101.                 System.out.println(lek.name);
  102.                 System.out.println(lek.poz);
  103.                 System.out.println(lek.price);
  104.                 System.out.println(lek.stock);
  105.                 if (lek.makeOrder(order)) {
  106.                     System.out.println("Napravena naracka");
  107.                 } else {
  108.                     System.out.println("Nema dovolno lekovi");
  109.                 }
  110.             } else {
  111.                 System.out.println("Nema takov lek");
  112.             }
  113.         }
  114.     }
  115. }
  116.  
  117.  
  118.  
  119.  
  120. Sample input
  121.  
  122. 20
  123. ACEROLA 0 100 1000
  124. ACIKLOVIR 1 1650 87
  125. ACIPAN 1 300 25
  126. ADIMICIN 0 500 0
  127. VENTOR 1 0 25
  128. VALSACOR 1 1090 10
  129. TYVERB 0 62696 1
  130. ULCODIN 1 47 100
  131. TRICAL 0 0 0
  132. RUBENS 0 2315 0
  133. IBALGIN 1 0 100
  134. HYDROCYKLIN 0 55 10
  135. GENTAMICIN 1 152 90
  136. FORTEO 1 0 0
  137. FORVITAC 1 0 150
  138. CHIROCAINE 1 0 10
  139. BRONLES 1 0 0
  140. BELOGENT 0 143 30
  141. BEDOXIN 1 0 100
  142. HYDROCYKLIN20 0 113 20
  143. hydroCyklinn
  144. 2
  145. hydroCyklin20
  146. 2
  147. KRAJ
  148.  
  149. Sample output
  150.  
  151. Nema takov lek
  152. HYDROCYKLIN20
  153. NEG
  154. 113
  155. 20
  156. Napravena naracka
  157.  
  158.  
Add Comment
Please, Sign In to add comment