Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
- */
- /**
- *
- * @author 143035
- */
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.io.PrintWriter;
- import java.util.ArrayList;
- import java.util.Collections;
- import java.util.List;
- import java.util.Scanner;
- /**
- * Transactions 2015/11/14 first midterm
- */
- public class TransactionsTest {
- public static void main(String[] args) {
- Transactions transactions = new Transactions();
- List<String> invalid = transactions.readData(System.in);
- System.out.println("=== INVALID DATES ===");
- for (String s : invalid) {
- System.out.println(s);
- }
- System.out.println("=== TRANSACTIONS 2001 ===");
- transactions.writeData(2001, System.out);
- System.out.println("=== TRANSACTIONS 2007 ===");
- transactions.writeData(2007, System.out);
- System.out.println("=== TRANSACTIONS 2013 ===");
- transactions.writeData(2013, System.out);
- }
- }
- class Constants {
- public static final float USD = 50;
- public static final float EUR = 61.5f;
- public static final int DAYS[] = {
- 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
- };
- }
- class Transactions {
- ArrayList<Transakcija> t;
- public Transactions() {
- t = new ArrayList<>();
- }
- public List<String> readData(InputStream inputStream) {
- Scanner s = new Scanner(inputStream);
- ArrayList<String> log = new ArrayList<>();
- while (s.hasNextLine()) {
- boolean f = true;
- String vlezRed = s.nextLine();
- String[] v = vlezRed.split(";");
- String[] datum = v[0].split("/");
- if (Integer.parseInt(datum[1]) > 12) f = false;
- int god = Integer.parseInt(datum[0]);
- int mesec = Integer.parseInt(datum[1]);
- int days = Integer.parseInt(datum[2]);
- if ((god % 4 == 0)&&(god % 100 != 0) && (god % 400 == 0)) {
- if (v[1].equals("02")) {
- if (days > Constants.DAYS[1] + 1) {
- f = false;
- }
- }
- } else if (days > Constants.DAYS[mesec - 1]) {
- f = false;
- }
- if (!f) {
- log.add(v[0]);
- }
- else t.add(new Transakcija(v));
- }
- return log;
- }
- public void writeData(int year, OutputStream out) {
- Collections.sort(t);
- PrintWriter printer = new PrintWriter(out);
- double balance = 0.0;
- for (Transakcija a : t) {
- if (a.getYear() == year) {
- printer.printf("%s %10.2f %s\n", a.datum, a.vrednost, a.valuta);
- balance += a.getDenari();
- }
- }
- printer.printf("Balance: %10f MKD\n", balance);
- printer.flush();
- }
- }
- class Transakcija implements Comparable<Transakcija> {
- String datum;
- double vrednost;
- String valuta;
- public Transakcija(String[] vlez) {
- vrednost = Double.parseDouble(vlez[1]);
- valuta = vlez[2];
- datum = vlez[0];
- }
- public int getYear() {
- String[] d = datum.split("/");
- int year = Integer.parseInt(d[0]);
- return year;
- }
- public double getDenari() {
- if (valuta.equals("USD"))
- return vrednost * Constants.USD;
- else if (valuta.equals("EUR"))
- return vrednost * Constants.EUR;
- return vrednost;
- }
- @Override
- public int compareTo(Transakcija t) {
- if (datum.equals(t.datum)) {
- if (vrednost > t.vrednost) return 1;
- else if (vrednost < t.vrednost) return -1;
- else return 0;
- } else {
- return datum.compareTo(t.datum);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement