Advertisement
popovstefan

[NP] Transakcii

Nov 14th, 2018
527
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.83 KB | None | 0 0
  1. Како дел од вашиот систем за водење двојно сметководство имплементирајте класа
  2. Transactions за обработка на податоци за трансакции. Во оваа класа треба да ги
  3. имплементирате следните методи:
  4. • Transactions() - default конструктор
  5. • List<String> readData(InputStream inputStream) – метод кој ги вчитува податоците за
  6. трансакциите кои се во следниот формат:
  7. yyyy/mm/dd;[value];[currency], пример 2003/02/14;1795;USD
  8. Некои од датумите не се валидни, односно денот за одреден месец го надминува
  9. максималниот за тој месец (пример 02/30 ). Исто така, водете сметка и за престапните
  10. години. Сите датуми кои не се валидни треба да ги вратите во листата од стрингови
  11. (секој датум како посебен стринг) како резултат од методот.
  12. void writeData(int year, OutputStream outputStream) – метод за запишување на сите
  13. трансакции во одредена година подредени според датумот/вредноста во растечки
  14. редослед. Сите елементи се разделени со едно празно место, а вредноста се печати со
  15. 10 места од кои 2 децимални. На крајот запишете го балансот (сумата) на сите
  16. трансакции во денари. Деновите во месеците како и вредностите на валутите за
  17. конверзија ви се дадени како константи во класата Constants.
  18.  
  19. Почетен код:
  20.  
  21.  
  22.  
  23. public class TransactionsTest {
  24.     public static void main (String [] args) {
  25.         Transactions transactions = new Transactions();
  26.         System.out.println(transactions.getClass());
  27.         List<String> invalid = transactions.readData(System.in);
  28.         System.out.println("=== INVALID DATES ===");
  29.         for (String s : invalid) {
  30.             System.out.println(s);
  31.         }
  32.         System.out.println("=== TRANSACTIONS 2001 ===");
  33.         transactions.writeData(2001, System.out);
  34.         System.out.println("=== TRANSACTIONS 2007 ===");
  35.         transactions.writeData(2007, System.out);
  36.         System.out.println("=== TRANSACTIONS 2013 ===");
  37.         transactions.writeData(2013, System.out);
  38.     }
  39. }
  40.  
  41. class Constants {
  42.     static final float USD = 50;
  43.     static final float EUR = 61.5f;
  44.     static final int [] DAYS = {
  45.       31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  46.     };
  47. }
  48.  
  49.  
  50. Решение:
  51.  
  52.  
  53.  
  54. import java.io.*;
  55. import java.util.ArrayList;
  56. import java.util.Collections;
  57. import java.util.List;
  58.  
  59. public class TransactionsTest {
  60.     public static void main (String [] args) {
  61.         Transactions transactions = new Transactions();
  62.         System.out.println(transactions.getClass());
  63.         List<String> invalid = transactions.readData(System.in);
  64.         System.out.println("=== INVALID DATES ===");
  65.         for (String s : invalid) {
  66.             System.out.println(s);
  67.         }
  68.         System.out.println("=== TRANSACTIONS 2001 ===");
  69.         transactions.writeData(2001, System.out);
  70.         System.out.println("=== TRANSACTIONS 2007 ===");
  71.         transactions.writeData(2007, System.out);
  72.         System.out.println("=== TRANSACTIONS 2013 ===");
  73.         transactions.writeData(2013, System.out);
  74.     }
  75. }
  76.  
  77. class Constants {
  78.     static final float USD = 50;
  79.     static final float EUR = 61.5f;
  80.     static final int [] DAYS = {
  81.       31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  82.     };
  83. }
  84.  
  85. class Transactions {
  86.     List<Transaction> transactions;
  87.  
  88.     Transactions () {
  89.         this.transactions = new ArrayList<>();
  90.     }
  91.  
  92.     List<String> readData(InputStream inputStream) {
  93.         List<String> result = new ArrayList<>();
  94.         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
  95.         String line;
  96.         try {
  97.             while ((line = bufferedReader.readLine()) != null) {
  98.                 String [] parts = line.split(";");
  99.                 String [] dateParts = parts[0].split("/");
  100.  
  101.                 int year = Integer.parseInt(dateParts[0]);
  102.                 int month = Integer.parseInt(dateParts[1]);
  103.                 int day = Integer.parseInt(dateParts[2]);
  104.  
  105.                 double value = Double.parseDouble(parts[1]);
  106.                 String currency = parts[2];
  107.  
  108.                 Transaction t = new Transaction(year, month, day, value, currency);
  109.                 this.transactions.add(t);
  110.  
  111.                 if (isLeapYear(year)) {
  112.                     if (month == 2 && day > 29)
  113.                         result.add(parts[0]);
  114.                     else if (day > Constants.DAYS[month])
  115.                         result.add(parts[0]);
  116.                 }
  117.                 else if (day > Constants.DAYS[month])
  118.                     result.add(parts[0]);
  119.  
  120.             }
  121.         } catch (IOException e) {
  122.             e.printStackTrace();
  123.         }
  124.         return result;
  125.     }
  126.  
  127.     private boolean isLeapYear(int year) {
  128.         return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
  129.     }
  130.  
  131.     void writeData(int year, OutputStream outputStream) {
  132.         PrintWriter printWriter = new PrintWriter(outputStream);
  133.         this.transactions.stream()
  134.                 .sorted()
  135.                 .filter(it -> it.year == year)
  136.                 .forEach(printWriter::println);
  137.  
  138.         /*Collections.sort(transactions);
  139.         for (Transaction t : transactions)
  140.             if (t.year == year)
  141.                 printWriter.println(t);*/
  142.         printWriter.flush();
  143.     }
  144.  
  145. }
  146.  
  147. class Transaction implements Comparable<Transaction> {
  148.     int year;
  149.     int month;
  150.     int day;
  151.     double value;
  152.     String currency;
  153.  
  154.     Transaction(int year, int month, int day, double value, String currency) {
  155.         this.year = year;
  156.         this.month = month;
  157.         this.day = day;
  158.         this.value = value;
  159.         this.currency = currency;
  160.     }
  161.  
  162.     @Override
  163.     public int compareTo(Transaction o) {
  164.         if (year != o.year)
  165.             return Integer.compare(year, o.year);
  166.         else if (month != o.month)
  167.             return Integer.compare(month,o.month);
  168.         else if (day != o.day)
  169.             return Integer.compare(day, o.day);
  170.         else
  171.             return Double.compare(value, o.value);
  172.     }
  173.  
  174.     @Override
  175.     public String toString() {
  176.         return String.format("%d %d %d %10.2f %s", year, month, day, value, currency);
  177.     }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement