mrchebik

Чепушня

Dec 4th, 2019
419
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /******************************************************************************
  2.  
  3. Welcome to GDB Online.
  4. GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
  5. C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
  6. Code, Compile, Run and Debug online from anywhere in world.
  7.  
  8. *******************************************************************************/
  9. import java.util.*;
  10.  
  11. public class Main
  12. {
  13.     static String[] categories = {"toy", "car",  "candies", "cake", "milk", "fish", "apple", "watermelon" };
  14.    
  15.     public static void main(String[] args) {
  16.         /*StockService stock = new Stock();
  17.         stock.generateProducts();
  18.         stock.print();*/
  19.        
  20.         Stock stock = new Stock(Currency.Grn);
  21.         stock.generateProducts();
  22.         stock.print();
  23.                
  24.         Wallet wallet = new Wallet(10, Currency.Dollars);
  25.         wallet.print();
  26.        
  27.         Basket basket = new Basket();
  28.         basket.putRandomItemsFromStock(stock);
  29.        
  30.         System.out.println("=== BUY ===");
  31.         List<Product> successed = wallet.transaction(basket);
  32.         System.out.println("=== END - BUY ===");
  33.        
  34.         wallet.print();
  35.     }
  36.    
  37.     static class Basket {
  38.         List<Product> toBuy;
  39.        
  40.         Basket() {
  41.             toBuy = new ArrayList();
  42.         }
  43.        
  44.         void putRandomItemsFromStock(Stock stockService) {
  45.             List<Product> products = stockService.getAll();
  46.            
  47.             for (int i = 0; i < products.size(); i++) {
  48.                 if (Generator.bool()) {
  49.                     toBuy.add(products.get(i));
  50.                 }
  51.             }
  52.         }
  53.        
  54.         List<Product> getAll() {
  55.             return toBuy;
  56.         }
  57.     }
  58.    
  59.     static class Money {
  60.         double value;
  61.         Currency currency;
  62.        
  63.         Money(double value, Currency currency) {
  64.             this.value = value;
  65.             this.currency = currency;
  66.         }
  67.     }
  68.    
  69.     static class Wallet {
  70.         double money;
  71.         Currency currency;
  72.      
  73.         Wallet(double money, Currency currency) {
  74.             this.money = money;
  75.             this.currency = currency;
  76.         }
  77.      
  78.         Wallet(Wallet wallet) {
  79.             this.money = wallet.money;
  80.             this.currency = wallet.currency;
  81.         }
  82.        
  83.         List<Product> transaction(Basket basket) {
  84.             List<Product> buyedProducts = new ArrayList();
  85.             List<Product> basketProducts = basket.getAll();
  86.            
  87.             for (int i = 0; i < basketProducts.size(); i++) {
  88.                 if (this.transaction(basketProducts.get(i).price, basketProducts.get(i).category))
  89.                     buyedProducts.add(basketProducts.get(i));
  90.             }
  91.            
  92.             return buyedProducts;
  93.         }
  94.        
  95.         boolean transaction(Money money, String name) {
  96.             double tmpMoney = this.money;
  97.            
  98.             tmpMoney -= this.currency == money.currency ?
  99.                 money.value
  100.                 :
  101.                 currency.getDependence(money.currency) * money.value;
  102.                
  103.             if (tmpMoney > -1) {
  104.                 this.money = tmpMoney;
  105.                
  106.                 System.out.println("=== TRANSACTION ===\nPrice: " + money.value + "\nResult: " + this.money + "\n -- Name: " + name);
  107.                
  108.                 return true;
  109.             }
  110.                
  111.             return false;
  112.         }
  113.        
  114.         boolean transaction(Money money) {
  115.             double tmpMoney = this.money;
  116.            
  117.             tmpMoney -= this.currency == money.currency ?
  118.                 money.value
  119.                 :
  120.                 currency.getDependence(money.currency) * money.value;
  121.                
  122.             if (tmpMoney > -1) {
  123.                 this.money = tmpMoney;
  124.                
  125.                 System.out.println("======= TRANSACTION ======\nPrice: " + money.value + "\nResult: " + this.money);
  126.                
  127.                 return true;
  128.             }
  129.                
  130.             return false;
  131.         }
  132.      
  133.         Wallet convert(Currency convertTo) {
  134.             Wallet oldWallet = new Wallet(this);
  135.      
  136.             this.money *= currency.getDependence(convertTo);
  137.             this.currency = convertTo;
  138.      
  139.             System.out.println("===== CONVERT =====\n" + oldWallet.money + " " + oldWallet.currency + " in " + convertTo + " = " + this.money + convertTo.flag + "\n");
  140.      
  141.             return this;
  142.         }
  143.      
  144.         void print() {
  145.             System.out.println(this);
  146.         }
  147.      
  148.         @Override
  149.         public String toString() {
  150.             return "===== WALLET ======\nMoney: " + money + "\nCurrency: " + currency;
  151.         }
  152.     }
  153.      
  154.     enum Currency {
  155.         Euro("eur", 1.10, 0.014, 0.038),
  156.         Dollars("$", 0.90909090909, 0.016, 0.042),
  157.         Rub("rub", 70.93, 63.98, 2.67),
  158.         Grn("grn", 26.53, 23.89, 0.37);
  159.      
  160.         String flag;
  161.         double[] dependency;
  162.      
  163.         Currency(String flag, double... dependency) {
  164.             this.flag = flag;
  165.             this.dependency = dependency;
  166.         }
  167.      
  168.         double getDependence(Currency a) {
  169.             int index = a.ordinal() -
  170.                     (ordinal() == 0 || (a.ordinal() > ordinal() && ordinal() != dependency.length) ? 1 : 0);
  171.      
  172.             return dependency[index];
  173.         }
  174.     }
  175.    
  176.     interface StockService {
  177.         StockService generateProducts();
  178.         List<Product> getAll();
  179.         void print();
  180.     }
  181.    
  182.     static class Stock {
  183.         List<Product> products;
  184.         Currency currOfProducts;
  185.        
  186.         Stock(Currency currOfProducts) {
  187.             products = new ArrayList();
  188.            
  189.             this.currOfProducts = currOfProducts;
  190.         }
  191.        
  192.         Stock generateProducts() {
  193.             int col = Generator.generateNumber(6) + 3;
  194.             for (int i = 0; i < col; i++)  {
  195.                 products.add(new Product(
  196.                     Generator.generateName(),
  197.                     categories[Generator.generateNumber(categories.length)],
  198.                     Generator.generateNumber(5) + 1,
  199.                     new Money(Generator.generateNumber(100) + 20,
  200.                             currOfProducts)));
  201.             }
  202.            
  203.             return this;
  204.         }
  205.        
  206.         List<Product> getAll() {
  207.             return products;
  208.         }
  209.        
  210.         void print() {
  211.             System.out.println(getStockName(82));
  212.             System.out.println(generateProductDescription());
  213.             for (Product product : products) {
  214.                 System.out.println(product);
  215.             }
  216.         }
  217.        
  218.         void print(List<Product> products) {
  219.             System.out.println(getStockName(82));
  220.             System.out.println(generateProductDescription());
  221.             for (Product product : products) {
  222.                 System.out.println(product);
  223.             }
  224.         }
  225.        
  226.         private String getStockName(int length) {
  227.             String data = "Stock";
  228.             StringBuilder builderFill = new StringBuilder();
  229.            
  230.             for (int i = 0; i < (length - data.length() - 2) / 2; i++) {
  231.                 builderFill.append("=");
  232.             }
  233.            
  234.             String fill = builderFill.toString();
  235.            
  236.             return fill + ((length - data.length()) % 2 == 0 ? "" : " ") + " " + data + " " + fill;
  237.         }
  238.        
  239.         private String generateProductDescription() {
  240.             StringBuilder lineBuilder = new StringBuilder();
  241.            
  242.             lineBuilder.append(generateDataField("ID", 10));
  243.             lineBuilder.append(generateDataField("NAME", 14));
  244.             lineBuilder.append(generateDataField("CATEGORY", 16));
  245.             lineBuilder.append(generateDataField("MASS", 12));
  246.             lineBuilder.append(generateDataField("PRICE", 12));
  247.             lineBuilder.append(generateDataField("CURRENCY", 12));
  248.            
  249.             return lineBuilder.toString();
  250.         }
  251.        
  252.         private String generateDataField(String data, int length) {
  253.             StringBuilder builderFill = new StringBuilder();
  254.            
  255.             for (int i = 0; i < (length - data.length() - 6) / 2; i++) {
  256.                 builderFill.append(" ");
  257.             }
  258.            
  259.             String fill = builderFill.toString();
  260.            
  261.             return fill + ((length - data.length()) % 2 == 0 ? "" : " ") + " - " + data + " - " + fill + " ";
  262.         }
  263.     }
  264.    
  265.     static class Product {
  266.         int id;
  267.         String name;
  268.         String category;
  269.         double mass;
  270.         /*double price;
  271.         Currency currency;*/
  272.         Money price;
  273.         //double col;
  274.        
  275.         Product() { }
  276.        
  277.         Product(int id, String name, String category, double mass, Money price) {//double price) {//, double col) {
  278.             this.id = id;
  279.             this.name = name;
  280.             this.category = category;
  281.             this.mass = mass;
  282.             this.price = price;
  283.             //this.col = col;
  284.         }
  285.        
  286.         Product(String name, String category, double mass, Money price) {//double price, Currency currency) {//, double col) {
  287.             this.id = Generator.generateId();
  288.             this.name = name;
  289.             this.category = category;
  290.             this.mass = mass;
  291.             this.price = price;
  292.             //this.col = col;
  293.         }
  294.        
  295.         private String toString(int number, int length) {
  296.             return toString(String.valueOf(number), length);
  297.         }
  298.        
  299.         private String toString(double number, int length) {
  300.             return toString(String.valueOf(number), length);
  301.         }
  302.        
  303.         private String toString(String data, int length) {
  304.             StringBuilder builderFill = new StringBuilder();
  305.            
  306.             for (int i = 0; i < (length - data.length()) / 2; i++) {
  307.                 builderFill.append(" ");
  308.             }
  309.            
  310.             String fill = builderFill.toString();
  311.            
  312.             return fill + ((length - data.length()) % 2 == 0 ? "" : " ") + data + fill;
  313.         }
  314.        
  315.         @Override
  316.         public String toString() {
  317.             return toString(id, 10) + "|" +
  318.                     toString(name, 14) + "|" +
  319.                     toString(category, 16) + "|" +
  320.                     toString(mass, 12) + "|" +
  321.                     toString(price.value, 12) + "|" +
  322.                     toString(String.valueOf(price.currency), 12);
  323.         }
  324.     }
  325.    
  326.     static class Generator {
  327.         static Random random;
  328.        
  329.         static {
  330.             random = new Random();
  331.         }
  332.        
  333.         static int generateInt() {
  334.             return random.nextInt(Short.MAX_VALUE * 2 + 1) - Short.MAX_VALUE;
  335.         }
  336.        
  337.         static int generateId() {
  338.             return random.nextInt(Short.MAX_VALUE);
  339.         }
  340.        
  341.         static int generateNumber(int upscale)  {
  342.             return random.nextInt(upscale);
  343.         }
  344.        
  345.         static char generateLetter() {
  346.             int letter = generateNumber(25);
  347.            
  348.             return (char) (97 + letter);
  349.         }
  350.        
  351.         static boolean bool() {
  352.             return random.nextBoolean();
  353.         }
  354.        
  355.         static String generateName() {
  356.             StringBuilder builder = new StringBuilder();
  357.            
  358.             int length = generateNumber(4) + 6;
  359.             for (int i = 0; i < length; i++) {
  360.                 builder.append(generateLetter());
  361.             }
  362.            
  363.             return builder.toString();
  364.         }
  365.     }
  366. }
Add Comment
Please, Sign In to add comment