Mitrezzz

АПС Лаб 6 Аптека

Dec 27th, 2018
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.64 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.  
  15. import java.util.HashMap;
  16. import java.util.Hashtable;
  17. import java.util.Map;
  18. import java.util.Scanner;
  19.  
  20. public class Apteka {
  21.  
  22.     public static void main(String[] args) {
  23.        
  24.         Scanner scan = new Scanner(System.in);
  25.         Map<CureName, Cure> table = new HashMap<>();
  26.        
  27.         int n = scan.nextInt();
  28.         scan.nextLine();
  29.        
  30.         for (int i=0; i<n; ++i) {
  31.             String line = scan.nextLine();
  32.             String parts[] = line.split(" ");
  33.             String name = parts[0];
  34.             int positive = Integer.parseInt(parts[1]);
  35.             int price = Integer.parseInt(parts[2]);
  36.             int number = Integer.parseInt(parts[3]);
  37.             Cure cure = new Cure(name, positive, price, number);
  38.             CureName cureName = new CureName(name);
  39.             table.put(cureName, cure);
  40.         }
  41.        
  42.         while (true) {
  43.            
  44.             String name = scan.nextLine();
  45.             if (name.equals("KRAJ"))
  46.                 break;
  47.             int number = Integer.parseInt(scan.nextLine());
  48.             CureName cureName = new CureName(name);
  49.             if (table.containsKey(cureName)) {
  50.                 Cure cure = table.get(cureName);
  51.                 System.out.println(cure);
  52.                 if (cure.makeOrder(number))
  53.                     System.out.println("Napravena naracka");
  54.                 else
  55.                     System.out.println("Nema dovolno lekovi");
  56.             }
  57.             else
  58.                 System.out.println("Nema takov lek");
  59.            
  60.         }
  61.     }
  62. }
  63.  
  64. class Cure {
  65.    
  66.     String name;
  67.     int positive;
  68.     int price;
  69.     int number;
  70.    
  71.     Cure(String name, int positive, int price, int number) {
  72.         this.name = name.toUpperCase();
  73.         this.positive = positive;
  74.         this.price = price;
  75.         this.number = number;
  76.     }
  77.    
  78.     String getPositive() {
  79.         if (positive == 1)
  80.             return "POZ";
  81.         else
  82.             return "NEG";
  83.     }
  84.  
  85.     boolean makeOrder(int n) {
  86.         if (number >= n){
  87.             number -=n;
  88.             return true;
  89.         }
  90.         return false;
  91.     }
  92.    
  93.     @Override
  94.     public String toString() {
  95.         StringBuilder sb = new StringBuilder();
  96.         sb.append(name + "\n");
  97.         sb.append(getPositive() + "\n");
  98.         sb.append(price + "\n");
  99.         sb.append(number);
  100.         return sb.toString();
  101.     }
  102.  
  103.        
  104. }
  105.  
  106. class CureName {
  107.    
  108.     String name;
  109.    
  110.     public CureName(String name){
  111.         this.name = name.toUpperCase();
  112.     }
  113.    
  114.     @Override
  115.     public int hashCode() {
  116.         return (29 * (29 * (29 * 0 + name.charAt(0)) + name.charAt(1))+ name.charAt(2)) % 102780;
  117.     }
  118.  
  119.     @Override
  120.     public boolean equals(Object obj) {
  121.         if (this == obj)
  122.             return true;
  123.         if (obj == null)
  124.             return false;
  125.         if (getClass() != obj.getClass())
  126.             return false;
  127.         CureName other = (CureName) obj;
  128.         if (name == null) {
  129.             if (other.name != null)
  130.                 return false;
  131.         } else if (!name.equals(other.name))
  132.             return false;
  133.         return true;
  134.     }
  135. }
  136.  
  137.  
  138. Sample input
  139. 20
  140. ACEROLA 0 100 1000
  141. ACIKLOVIR 1 1650 87
  142. ACIPAN 1 300 25
  143. ADIMICIN 0 500 0
  144. VENTOR 1 0 25
  145. VALSACOR 1 1090 10
  146. TYVERB 0 62696 1
  147. ULCODIN 1 47 100
  148. TRICAL 0 0 0
  149. RUBENS 0 2315 0
  150. IBALGIN 1 0 100
  151. HYDROCYKLIN 0 55 10
  152. GENTAMICIN 1 152 90
  153. FORTEO 1 0 0
  154. FORVITAC 1 0 150
  155. CHIROCAINE 1 0 10
  156. BRONLES 1 0 0
  157. BELOGENT 0 143 30
  158. BEDOXIN 1 0 100
  159. HYDROCYKLIN20 0 113 20
  160. hydroCyklinn
  161. 2
  162. hydroCyklin20
  163. 2
  164. KRAJ
  165. Sample output
  166. Nema takov lek
  167. HYDROCYKLIN20
  168. NEG
  169. 113
  170. 20
  171. Napravena naracka
Add Comment
Please, Sign In to add comment