Guest User

Untitled

a guest
Dec 4th, 2019
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.95 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment