Forum studentów Geoinformatyki UMCS

Żeby było nam wszystkim wygodniej!

  • Nie jesteś zalogowany.
  • Polecamy: Moda

#1 2017/12/18 14:07:09

kwiatuszek94

Nowy użytkownik

Zarejestrowany: 2017/12/18
Posty: 3

Zróóóóób_to_sam

PLIKI Z PROJEKT 2
package finanse;
public class Kwota {
   private int zlote;
   private int grosze;

   public Kwota(int zlote, int grosze) {
      //sprawdzamy czy zlote i grosze są ujemne, jeśli są to   
         wyrzuca wyjątek
       if (zlote < 0 || grosze < 0) {
           throw new IllegalArgumentException();
       } else {
       //jeśli groszę wynoszą więcej niż 99 wtedy odpowiednio
          przelicza xD
           if (grosze > 99) {
        // dlatego int mamy - usuwa nam końcówkę i gdy grosze   
           = 510 to po podzieleniu ile = 5                     
               int ile = grosze / 100;             
               grosze = grosze - 100 * ile; // grosze = 510-(100*5)
    da nam wynik 10gr
    zlote = zlote + 1 * ile;    // zlote = zlote+(1*5)
           }
           this.zlote = zlote; //Przypisuje nam wartości do zmiennej
                                globalnej
           this.grosze = grosze;
       }
   }
   public int getZlote() {
       return zlote;
   }          //generujemy (PPM) - get pobiera nam dane
   public int getGrosze() {
       return grosze;
   }
   public Kwota() { } // pusty konstruktor, który tworzymy aby móc
podłączyć bean'a
// Tworzymy toString: Zamienia nam wartości liczbowe zmiennych (złotówki i grosze) na łańcuch znaków.
   @Override
   public String toString() {                       
       if (grosze > 9) {                             
           return zlote + "," + grosze;
       } else {
           return zlote + ",0" + grosze;                   
        }
  }

   public Kwota dodaj(Kwota druga) {  // Dodajemy. Jako parametr
deklarujemy "drugą" kwotę.
       int zl = this.zlote + druga.zlote;
       int gr = this.grosze + druga.grosze;
       if (gr>99){               //gdy grosze większe od 99 wtedy:
           zl ++;                 zwiększamy ilość złotówek o 1. aod 
           gr = gr - 100;         groszy odejmujemy 100
// wtedy:  gdy gr = 155 -> (nowe) gr = 155 - 100 i wtedy dostajemy dobre grosze
       }
       return new Kwota(zl, gr);
   }

   public Kwota pomnoz(int liczba){                  //Mnożenie. Mnożymy przez liczbę, dlatego ze w sklepie możemy sprzedać ilość jednego produktu.
       int gr = (this.grosze * liczba)%100;                        // gdy dzielimy z % dostajemy resztę czyli nasze grosze
       int zl = this.zlote * liczba + this.grosze * liczba / 100;  //  Przykład (int daje nam zaokrągloną wartość) zl = 4 * 5 + 65 * 5 / 100;
       return new Kwota(zl,gr);
   }
   @Override
   public boolean equals(Object o) {                         
if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Kwota kwota = (Kwota) o;

       if (zlote != kwota.zlote) return false;
       return grosze == kwota.grosze;
   }
   @Override
   public int hashCode() {
       int result = zlote;
       result = 31 * result + grosze;
       return result;
   }







LOGGER.JAVA
package api;

public interface Logger {
   void log(String message);
   void setName(String name);
   void setVersion(int version);
}
//Biblioteka do logowania LOGGER ma za zadanie przekazać komunikat
// wygenerowany w kodzie - np. info, że jakaś operacja się nie powiodła.
// do odpowiedniego miejsca (np. standardowe wyjście konsoli, plik, serwer zdalny).
// Logi trafiaja do plików (U NAS ZAPISYWANE SĄ PRZY POMOCY PLIKU LoggerImplFile)




LOGGERIMPL.JAVA
package impl;

import api.Logger;  //importujemy Klasę Logger (nasz interfejs)
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

@Service
public class LoggerImpl implements Logger { // Nasza klasa
implementuje interface Logger
   @Value("${name}")
   private String name = "Logger";
   @Value("${version}")
   private int version;

   public LoggerImpl(String name, int version) {    // konstruktor
       this.name = name;
       this.version = version;
   }
   public LoggerImpl(){}            // pusty konstruktor do bean'a

   public void log(String message) {  // W jaki sposób ma wyświetlać
                                         się nam message
                                  ===WARNING v.3 : "treść warningu"
       System.out.println("===" + name + " v." + version + ": " +
message);
   }

   public void setName(String name) {                 //set ustawia
       this.name = name;
   }

   public void setVersion(int version) {
       this.version = version;
   }
}





LOGGERIMPLFILE.JAVA
package impl;

import api.Logger; //importuje Klasę Logger
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;

import java.io.File; // biblioteka, umożliwiająca działania na pliku
import java.io.FileWriter;  // Jest to klasa która służy do
                               zapisywania ciągu znaków do pliku
tekstowego, przy użyciu domyślnego kodowania.
import java.io.PrintWriter;   // zapisuje nam dane z pliku

public class LoggerImplFile implements Logger { 
// Klasa LoggerImplFile jest implementacją interface'u Logger
   private String name;
   private int version;
   private File file = new File("plik.log");     
//utworzyć obiekt przechowujący dane pliku to File
   private PrintWriter pw;                                 

   public LoggerImplFile(){  //konstruktor do beana                                     
       try {
           pw = new PrintWriter(new FileWriter(file, true));   
//dodaj do pliku
       } catch (Exception e) {
           System.out.println("Wyjatek");
       }
   }
   public void log(String message) {                       
       pw.append(message + "\n");        // append - dodaje
       pw.flush();                       // opróżnia sprumień - aby
                                           wyczyścic
   }
   public void setName(String name) { //ustawia Name
       this.name = name;
   }             
   public void setVersion(int version) {    //ustawia wersje
       this.version = version;
   }         
}




PRODUCT.JAVA
package impl;
import finanse.Kwota;  //import klasy Kwota

public class Product {
   private String name;
   private Kwota price;
   private int amount;

   public String getName() { return name;}    //metody typu get
pobiera nam nazwę, cenę, ilość
   public Kwota getPrice() { return price;}
   public int getAmount() { return amount;}
   public void setPrice(Kwota price) { //metody typu set do price i
                                         amount
       this.price = price;
   }
   public void setAmount(int amount) { this.amount = amount;}
   public Product(String name, Kwota price, int amount) {
       this.name = name;            //konstruktor
       this.price = price;
       this.amount = amount;
   }
   @Override    // Tworzy się przy pomocy (PPM)
   public String toString() {
       return "Product{" +
               "name='" + name + '\'' +
               ", price=" + price +
               ", amount=" + amount +
               '}';
   }
   @Override
   public boolean equals(Object o) {
       if (this == o) return true;
       if (o == null || getClass() != o.getClass()) return false;

       Product product = (Product) o;
       return name.equals(product.name);
   }
   @Override
   public int hashCode() {
       return name.hashCode();
   }
}
PRODUCTREPOSITORY.JAVA
package api;
import impl.Product;
import java.util.Set;

public interface ProductRepository {

   void setLogger(Logger logger);
   Product findByName(String name);
   Product create(Product product);
   Product update(Product product);
   void delete(String name);
   Set<Product> findAll();
}





PRODUCTREPOSITORYIMPL.JAVA
package impl;

import api.Logger;
import api.ProductRepository;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

@Service
public class ProductRepositoryImpl implements ProductRepository {

       private Product product;
       private Map<String, Product> database = new
HashMap<String,Product>()
//specjalnej kolekcji, która pozwala do danego parametru przypisać wartość klucza.
// Dzięki temu, znając wartość klucza, jesteśmy wstanie wyciągnąć z mapy interesujące nasze dane.
       private Logger logger;

   public ProductRepositoryImpl(Logger logger){
           //System.out.println("Tworzenie repozytorium;");
           this.logger = logger;
       }
   public void setProduct(Product product) {
           this.product=product;
       }

   public void setLogger(Logger logger) {
           this.logger=logger;

   }

   public Product findByName(String name) {
       logger.log("wyszukiwanie produktu o nazwie: "+name);
       return database.get(name);
       }
   public Set<Product> findAll() {
       logger.log("Tworzenie zbioru produktow");
       Set<Product> set = new HashSet<Product>(database.values());
       return set;
   }
   public void delete(String name){
       logger.log("Usuwanie produktu o nazwie: "+name);
       database.remove(name);
       }

   public Product create(Product product){
        logger.log("Proba wstawienia do bazy istniejacy produkt");
         if(exists(product.getName())){
             throw new IllegalArgumentException("Nie mozna zdublowac produktu");
          } else{
          logger.log("Wstawienie do bazy produktu o nazwie: "+
product.getName());
          database.put(product.getName(),product);
               return product;
           }
       )
   private boolean exists(String name) {
       boolean ok = database.containsKey(name);
       logger.log("W bazie istnieje uzytkownik o loginie: "+name+"
                   wynik: "+ok);
       return ok;
   }
   public Product update(Product product){
logger.log("Modyfikacja (lub dodanie) uzytkownika o loginie:
"+product.getName());
       database.put(product.getName(), product);
       return product;

       }
   }

//Mapa - obiekt mapujący wartości parametrów na podstawie klucza.
// W danej mapie może istnieć tylko jeden unikatowy klucz.
// Szeroko stosowany w komunikacji między aplikacjami,
// dzięki możliwości przypisanie wartości do stałych, ustalonych parametrów.

//Map<String, Integer> Oceny = new HashMap<String, Integer>();
//Oceny.put("Matematyka", 5);
//Oceny.put("Polski", 2);

//Zaimplementowana mapa to HashMap



STORE.JAVA
package impl;

import api.Logger;
import api.ProductRepository;
import finanse.Kwota;
import org.springframework.stereotype.Service;

import java.util.HashSet;
import java.util.Set;

@Service
public class Store implements ProductRepository {

   private ProductRepository repository;

   public Store(ProductRepository repository) {
       this.repository = repository;
   }

   public void productDelivery(String name, Kwota price, int amount) {

       //dostawa produktu do magazynu
       //przyjmiemy, ze nowa cena ma byc ustawiona a ilosc zwiekszona

       Product product = repository.findByName(name);
       if (product == null) {
           repository.create(new Product(name, price, amount));
       } else {
           repository.update(new Product(name, price, amount));
       }

   }

   public void productSale(String name, int amount) {

       Product product = repository.findByName(name);
       if ((product == null) || product.getAmount() < amount) {
           throw new IllegalArgumentException();
       } else {
           repository.update(new Product(name, product.getPrice(), product.getAmount() - amount));

       }
       //jesli sie nie da, wyrzucic IllegalArgumentException
       //zaktualizowac baze danych
       //kwote do zaplay za amount jednostek produktu o nazwie name
   }

   public Kwota priceToPay(String name, int amount) {
       Product product = repository.findByName(name);
       if (product == null)
           throw new IllegalArgumentException();
       return product.getPrice().pomnoz(amount);
   }

   public Kwota productPrice(String name) {


       Product product = repository.findByName(name);
       if (product != null) {
           return product.getPrice();
       } else {
           return null;
       }
   }

   public int productAmount(String name) {
       Product product = repository.findByName(name);
       if (product != null) {
           return product.getAmount();
       } else {
           return 0;
       }
   }

   public void setLogger(Logger logger) {

   }

   public Product findByName(String name) {
       return null;
   }

   public Product create(Product product) {
       return null;
   }

   public Product update(Product product) {
       return null;
   }

   public void delete(String name) {

   }

   public Set<Product> findAll() {
       return null;
   }

   public String toString() {
       HashSet<Product> set = (HashSet) repository.findAll();
       String s = "";
       for (Product i : set) {
           s = s + i.toString() + "\n";
       }
       return s;
   }
}



STOTETEST.JAVA
package impl;

import finanse.Kwota;
import org.junit.Assert;
import org.junit.Test;

public class StoreTest {

   private Store sklep = new Store(new ProductRepositoryImpl(new LoggerImplFile()));

   @Test
   public void should_deliver_product_when_no_exists(){
       //when
       sklep.productDelivery("kurtka", new Kwota(80,99), 7);
       //then
       Assert.assertEquals(7,sklep.productAmount("kurtka"));
       Assert.assertEquals(new Kwota(80,99), sklep.productPrice("kurtka"));
   }

   @Test
   public void should_deliver_product_when_exists(){
       //given
       sklep.productDelivery("pasek", new Kwota(70,20), 2);
       //when
       sklep.productDelivery("pasek", new Kwota(70,20), 5 );
       //then
       Assert.assertEquals(7, sklep.productAmount("pasek"));
       Assert.assertEquals(new Kwota(70,20), sklep.productPrice("pasek"));
   }

   @Test
   public void should_sale_product_when_exists(){
       //given
       sklep.productDelivery("spodnie", new Kwota(12,99), 5);
       //when
       sklep.productSale("spodnie",2);
       //then
       Assert.assertEquals(3,sklep.productAmount("spodnie"));
       Assert.assertEquals(new Kwota(12,99),sklep.productPrice("spodnie"));
   }

   @Test
   public void counts_price_to_pay_when_product_exists(){
       //given
       sklep.productDelivery("krawat", new Kwota(12,20), 16);
       //when
       sklep.priceToPay("krawat",3);
       //then
       Assert.assertEquals(new Kwota(36,60), sklep.priceToPay("krawat", 3));
   }

   @Test(expected = IllegalArgumentException.class)
   public void  should_throw_when_trying_to_count_price_when_no_exists(){
       sklep.priceToPay("buty",2);

   }

   @Test(expected = IllegalArgumentException.class)
   public void  should_throw_when_trying_to_sale_product_when_no_exists(){
       sklep.productDelivery("skarpety",new Kwota(5,50), 4);
       sklep.productSale("skarpety", 6);
   }

   @Test(expected = IllegalArgumentException.class)
   public void  should_throw_when_trying_to_sale_product_when_not_enought(){
       //given
       sklep.productDelivery("bluzka",new Kwota(20,99), 5);
       //when
       sklep.productSale("bluzka",6);
   }
}



MAIN.JAVA
import finanse.Kwota;
import impl.Store;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.Scanner;

public class Main {

   public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("konfiguracja.xml");
       Store store = context.getBean("store", Store.class);

       int nr = 0;
       Scanner sc = new Scanner(System.in);

       while (nr != 4) {
           hello();
           menu();
           nr = Integer.parseInt(sc.nextLine());
           switch (nr) {
               case 1:
                   System.out.println(store.toString());
                   break;
               case 2:
                   sale(store);
                   break;
               case 3:
                   delivery(store);
                   break;
               case 4:
                   goodbye();
           }
       }
   }

   private static void delivery(Store store) {
       String name;
       int i;
       int zl, gr;
       String price;
       Scanner sc = new Scanner(System.in);
       try {
           System.out.print("Podaj nazwę: ");
           name = sc.nextLine();
           System.out.print("Podaj ilosc: ");
           i = Integer.parseInt(sc.nextLine());
           System.out.print("Podaj cene w formacie zl,gr: ");
           price = sc.nextLine();
           zl = Integer.parseInt(price.substring(0, price.indexOf(",")));
           gr = Integer.parseInt(price.substring(price.indexOf(",") + 1));
           store.productDelivery(name, new Kwota(zl, gr), i);
       } catch (IllegalArgumentException iae) {
           System.out.println("Błąd, spróbuj jeszcze raz");
       }
   }

   private static void sale(Store store) {
       String name;
       int i;
       int zl, gr;
       String price;
       Scanner sc = new Scanner(System.in);
       try {
           System.out.print("Podaj nazwę produktu do kupienia: ");
           name = sc.nextLine();
           System.out.print("Podaj ilosc: ");
           i = Integer.parseInt(sc.nextLine());
           int nr = store.productAmount(name);
           if (nr == 0) {
               System.out.println("Brak produktu w sklepie");
           } else if (i <= nr) {
               System.out.println("Do zaplaty: " + store.priceToPay(name, i));
               store.productSale(name, i);
           } else {
               System.out.println("Za mało produktu w sklepie");
           }
       } catch (IllegalArgumentException iae) {
           System.out.println("Błąd, spróbuj jeszcze raz");
       }
   }

   private static void menu() {
       String menu = " 1. Wyswietl produkty\n 2. Kup produkt\n 3. Dostawa produktu do sklepu\n 4. Koniec ";
       System.out.println("Wybierz opcję:");
       System.out.println(menu);
   }

   private static void hello() {
       System.out.println("=============================");
       System.out.println(" Aplikacja obsługująca sklep");
       System.out.println("=============================");
   }

   private static void goodbye() {
       System.out.println("=============================");
       System.out.println("        KONIEC");
       System.out.println("=============================");
   }
}


KONFIGURACJA.XML
<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
      xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
      xmlns:context = "http://www.springframework.org/schema/context"
      xsi:schemaLocation = "http://www.springframework.org/schema/beans
  http://www.springframework.org/schema/b … ns-3.0.xsd
  http://www.springframework.org/schema/context
  http://www.springframework.org/schema/c … ">
   <context:property-placeholder location="file:C:\Documents and Settings\student\Java_GRI\ProjektDrugi\properties.txt"/>
   <context:annotation-config/>
   <context:component-scan base-package="impl"/>
<bean id = "store" class = "impl.Store">
   <constructor-arg ref="repo"/
</bean>

<bean id="repo" class="impl.ProductRepositoryImpl">
   <constructor-arg ref="logger"/>
</bean>
<bean id="logger" class="impl.LoggerImpl"/>
<bean id="logger" class="impl.LoggerImpl"/>
</beans>



POM.TXT
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>org.umcs.monika</groupId>
   <artifactId>ProjektDrugi</artifactId>
   <version>1.0-SNAPSHOT</version>
   <dependencies>
       <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>4.10</version>
       </dependency>
       <dependency>
           <groupId>org.springframework</groupId>
           <artifactId>spring-context</artifactId>
           <version>5.0.1.RELEASE</version>
       </dependency>
   </dependencies>
</project>

Offline

 

Stopka forum

RSS
Powered by PunBB
© Copyright 2002–2008 PunBB
Polityka cookies - Wersja Lo-Fi


Darmowe Forum | Ciekawe Fora | Darmowe Fora
www.zyciewlasne.pun.pl www.tril2010.pun.pl www.metin2privcenter.pun.pl www.haxteam.pun.pl www.nakazdytemat.pun.pl