Advertisement
TwiNNeR

Transakcii

Jan 24th, 2016
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.90 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6.  
  7. /**
  8.  *
  9.  * @author 143035
  10.  */
  11. import java.io.InputStream;
  12. import java.io.OutputStream;
  13. import java.io.PrintWriter;
  14. import java.util.ArrayList;
  15. import java.util.Collections;
  16. import java.util.List;
  17. import java.util.Scanner;
  18.  
  19. /**
  20.  * Transactions 2015/11/14 first midterm
  21.  */
  22. public class TransactionsTest {
  23.   public static void main(String[] args) {
  24.     Transactions transactions = new Transactions();
  25.     List<String> invalid = transactions.readData(System.in);
  26.     System.out.println("=== INVALID DATES ===");
  27.     for (String s : invalid) {
  28.       System.out.println(s);
  29.     }
  30.     System.out.println("=== TRANSACTIONS 2001 ===");
  31.     transactions.writeData(2001, System.out);
  32.     System.out.println("=== TRANSACTIONS 2007 ===");
  33.     transactions.writeData(2007, System.out);
  34.     System.out.println("=== TRANSACTIONS 2013 ===");
  35.     transactions.writeData(2013, System.out);
  36.   }
  37. }
  38.  
  39. class Constants {
  40.   public static final float USD = 50;
  41.   public static final float EUR = 61.5f;
  42.   public static final int DAYS[] = {
  43.     31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
  44.   };
  45. }
  46.  
  47. class Transactions {
  48.     ArrayList<Transakcija> t;
  49.     public Transactions() {
  50.         t = new ArrayList<>();
  51.     }
  52.     public List<String> readData(InputStream inputStream) {
  53.         Scanner s = new Scanner(inputStream);
  54.         ArrayList<String> log = new ArrayList<>();
  55.         while (s.hasNextLine()) {
  56.             boolean f = true;
  57.             String vlezRed = s.nextLine();
  58.             String[] v = vlezRed.split(";");
  59.             String[] datum = v[0].split("/");
  60.             if (Integer.parseInt(datum[1]) > 12) f = false;
  61.             int god = Integer.parseInt(datum[0]);
  62.             int mesec = Integer.parseInt(datum[1]);
  63.             int days = Integer.parseInt(datum[2]);
  64.             if ((god % 4 == 0)&&(god % 100 != 0) && (god % 400 == 0)) {
  65.                 if (v[1].equals("02")) {
  66.                     if (days > Constants.DAYS[1] + 1) {
  67.                         f = false;
  68.                     }
  69.                 }
  70.             } else if (days > Constants.DAYS[mesec - 1]) {
  71.                 f = false;
  72.             }
  73.             if (!f) {
  74.                 log.add(v[0]);
  75.             }
  76.             else t.add(new Transakcija(v));
  77.         }
  78.         return log;
  79.     }
  80.     public void writeData(int year, OutputStream out) {
  81.         Collections.sort(t);
  82.         PrintWriter printer = new PrintWriter(out);
  83.         double balance = 0.0;
  84.         for (Transakcija a : t) {
  85.             if (a.getYear() == year) {
  86.                 printer.printf("%s %10.2f %s\n", a.datum, a.vrednost, a.valuta);
  87.                 balance += a.getDenari();
  88.             }
  89.         }
  90.         printer.printf("Balance: %10f MKD\n", balance);
  91.         printer.flush();
  92.     }
  93. }
  94.  
  95. class Transakcija implements Comparable<Transakcija> {
  96.     String datum;
  97.     double vrednost;
  98.     String valuta;
  99.    
  100.     public Transakcija(String[] vlez) {
  101.         vrednost = Double.parseDouble(vlez[1]);
  102.         valuta = vlez[2];
  103.         datum = vlez[0];        
  104.     }
  105.    
  106.     public int getYear() {
  107.         String[] d = datum.split("/");
  108.         int year = Integer.parseInt(d[0]);
  109.         return year;
  110.     }
  111.    
  112.     public double getDenari() {
  113.         if (valuta.equals("USD"))
  114.             return vrednost * Constants.USD;
  115.         else if (valuta.equals("EUR"))
  116.             return vrednost * Constants.EUR;
  117.         return vrednost;
  118.     }
  119.    
  120.     @Override
  121.     public int compareTo(Transakcija t) {
  122.         if (datum.equals(t.datum)) {
  123.             if (vrednost > t.vrednost) return 1;
  124.             else if (vrednost < t.vrednost) return -1;
  125.             else return 0;
  126.         } else {
  127.             return datum.compareTo(t.datum);
  128.         }
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement