Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Аптека Problem 4 (0 / 0)
- Потребно е да се направи компјутерска апликација со која ќе се забрза работењето на една аптека. Притоа апликацијата треба да му овозможи на корисникот (фармацевтот) брзо да пребарува низ огромното множество со лекови кои се внесени во системот. Начинот на кој тој треба да пребарува е следен: доволно е да ги внесе првите 3 букви од името на лекот за да може да му се излиста листа од лекови кои ги има во системот. Работата на фармацевтот е да провери дали внесениот лек го има во системот и да му даде информација на клиентот. Информацијата што треба да му ја даде на клиентот е дали лекот се наоѓа на позитивната листа на лекови, која е цената и колку парчиња од лекот има на залиха. Доколку лекот постои клиентот го нарачува со што кажува колку парчиња ќе купи. Оваа акција фармацевтот треба да ја евидентира на системот (односно да ја намали залихата на лекови за онолку парчиња колку што му издал на клиентот). Доколку нарачката на клиентот е поголема од залихата на лекот што ја има во системот, не се презема никаква акција.
- Влез: Од стандарден влез прво се дава број N кој претставува број на лекови кои ќе бидат внесени во системот. Во наредните N реда се дадени имињата на лековите, дали ги има на позитивната листа (1/0), цената и број на парчиња, сите разделени со по едно празно место. Потоа се даваат редови со имиња на лекови и број на парчиња нарачани од клиентот. За означување на крај се дава зборот KRAJ.
- Излез: На стандарден излез треба да се испечати за секој од влезовите следната информација: IME POZ/NEG CENA BR_LEKOVI. Доколку лекот не е најден се печати Nema takov lek. Доколку нарачката на клиентот е поголема од залихата се печати Nema dovolno lekovi инаку Napravena naracka.
- Забелешка: Задачата да се реши со хeш табела. Функцијата со која се врши мапирање на имињата на лековите во број е следна: h(w)=(29∗(29∗(29∗0+ASCII(c1))+ASCII(c2))+ASCII(c3))%102780 каде зборот w=c1c2c3c4c5…. е составен од сите големи букви.
- Исто така за лековите да се направи посебна класа која како атрибути ќе ги има наведените карактеристики на лекот во системот.
- Име на класата: Apteka.
- package com.example;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.util.HashMap;
- import java.util.Objects;
- class Lek {
- String name;
- int poz;
- int price;
- int stock;
- public Lek(){}
- public Lek(String name, int poz, int price, int stock){
- this.name = name.toUpperCase();
- this.poz = poz;
- this.price = price;
- this.stock = stock;
- }
- String getPositive() {
- if (poz == 1) {
- return "POZ";
- } else {
- return "NEG";
- }
- }
- boolean makeOrder(int n) {
- if (stock >= n) {
- stock -= n;
- return true;
- } else {
- return false;
- }
- }
- }
- class imeLek {
- String name;
- public imeLek(){}
- public imeLek(String name) {
- this.name = name;
- }
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- imeLek imeLek = (imeLek) o;
- return Objects.equals(name, imeLek.name);
- }
- @Override
- public int hashCode() {
- // (29∗(29∗(29∗0+name.charAt(0))+name.charAt(1))+name.charAt(2))%102780
- return (29 * (29 * (29 * 0 + name.charAt(0)) + name.charAt(1)) + name.charAt(2)) % 102780;
- }
- }
- public class Main {
- public static void main(String[] args) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- int n = Integer.parseInt(br.readLine());
- HashMap<imeLek,Lek> lekovi = new HashMap<>();
- String s = br.readLine();
- String[] pomniza = s.split(" ");
- for (int i=0; i<n; i++) {
- String name = pomniza[0];
- int poz = Integer.parseInt(pomniza[1]);
- int price = Integer.parseInt(pomniza[2]);
- int stock = Integer.parseInt(pomniza[3]);
- Lek lek = new Lek(name,poz,price,stock);
- imeLek ime = new imeLek(name);
- lekovi.put(ime,lek);
- }
- while (true) {
- String name = br.readLine();
- if (name.equals("KRAJ")) {
- break;
- }
- int order = Integer.parseInt(br.readLine());
- imeLek L = new imeLek(name); // key
- if (lekovi.containsKey(L)) {
- Lek lek = lekovi.get(L); // value
- System.out.println(lek.name);
- System.out.println(lek.poz);
- System.out.println(lek.price);
- System.out.println(lek.stock);
- if (lek.makeOrder(order)) {
- System.out.println("Napravena naracka");
- } else {
- System.out.println("Nema dovolno lekovi");
- }
- } else {
- System.out.println("Nema takov lek");
- }
- }
- }
- }
- Sample input
- 20
- ACEROLA 0 100 1000
- ACIKLOVIR 1 1650 87
- ACIPAN 1 300 25
- ADIMICIN 0 500 0
- VENTOR 1 0 25
- VALSACOR 1 1090 10
- TYVERB 0 62696 1
- ULCODIN 1 47 100
- TRICAL 0 0 0
- RUBENS 0 2315 0
- IBALGIN 1 0 100
- HYDROCYKLIN 0 55 10
- GENTAMICIN 1 152 90
- FORTEO 1 0 0
- FORVITAC 1 0 150
- CHIROCAINE 1 0 10
- BRONLES 1 0 0
- BELOGENT 0 143 30
- BEDOXIN 1 0 100
- HYDROCYKLIN20 0 113 20
- hydroCyklinn
- 2
- hydroCyklin20
- 2
- KRAJ
- Sample output
- Nema takov lek
- HYDROCYKLIN20
- NEG
- 113
- 20
- Napravena naracka
Add Comment
Please, Sign In to add comment