Java – Érettségi feladatok – 2006. február (Telefonszámla)

package e2006februar;

import java.io.BufferedReader; // Az idegen megoldás miatt kell
import java.io.InputStreamReader; // Az idegen megoldás miatt kell
import java.io.IOException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;

public class E2006februar {
    public static void main(String[] args) throws IOException {
        // 1. feladat
        System.out.println("1. feladat");
        Scanner sc = new Scanner(System.in);
        System.out.println("Adjon meg egy telefonszámot!");
        String telefonszam = sc.nextLine();
        if (telefonszam.startsWith("39") || telefonszam.startsWith("41") || telefonszam.startsWith("71")) {
            System.out.println("A megadott telefonszám mobil.");
        } else {
            System.out.println("A megadott telefonszám nem mobil.");
        }
        System.out.println("-------------------\n");

        // 2. feladat
        System.out.println("2. feladat");
        /* Én úgy számolom a percekez, hogy ha pl. 12:00:17-kor kezdődőtt a telefonálás és
        12:01:18-kor fejeződött be, akkor az már 2 percnek számít a szolgáltatónál.*/
        int ko, kp, kmp, vo, vp, vmp;
        System.out.println("Adja meg egy telefonbeszélgetés kezdetét óó:pp:mm formátumban!");
        String kezdet = sc.nextLine();
        ko = Integer.parseInt(kezdet.substring(0, 2));
        kp = Integer.parseInt(kezdet.substring(3, 5));
        kmp = Integer.parseInt(kezdet.substring(6, 8));
        System.out.println("Adja meg egy telefonbeszélgetés végét óó:pp:mm formátumban!");
        String veg = sc.nextLine();
        vo = Integer.parseInt(veg.substring(0, 2));
        vp = Integer.parseInt(veg.substring(3, 5));
        vmp = Integer.parseInt(veg.substring(6, 8));

        int elteltIdo = 3600 * (vo - ko) + 60 * (vp - kp) + (vmp - kmp);
        System.out.println("Az eltel idő másodpercben: " + elteltIdo);
        if (elteltIdo % 60 != 0) {
            elteltIdo = elteltIdo / 60 + 1;
        } else {
            elteltIdo /= 60;
        }
        System.out.println("A számlázás szempontjából a fenti beszélgetés " + elteltIdo + " percnek felel meg.");
        System.out.println("-------------------\n");

        // 3. feladat
        System.out.println("3. feladat");
        Scanner scFajl = new Scanner(new FileReader("hivasok.txt"));
        String[] tString;
        ArrayList<Integer> percek = new ArrayList();
        ArrayList<String> telSzamok = new ArrayList();
        
        /* Ez a 4. feladathoz kell majd, mikor a csúcsidős beszélgetések
        számát kell majd meghatározni. Azert ArrayList, mert nem tudjuk, hogy
        hány beszélgeteés van. */
        ArrayList<Integer> kezdetOra = new ArrayList();
        
        /* Ez az 5. feladathoz kell majd. */
        ArrayList<Boolean> fajta = new ArrayList();
        
        while (scFajl.hasNext()) {
            // A percek sorai
            String sor = scFajl.nextLine(); // Beolvasunk egy sort.
            tString = sor.split(" "); // Szóköz mentén darabolunk.            
            kezdetOra.add(Integer.parseInt(tString[0]));
            int beszelgetesIdeje = 0;
            /* Ha a hívás kezdetének másodperce nagyobb, mint a hívás befejezésének
        másodperce, akkor a percek különbségéhez még 1-et hozzá kell adni.
        Egyébként csak a percek különbségét kell venni. */
            if (Integer.parseInt(tString[2]) >= Integer.parseInt(tString[5])) {
                beszelgetesIdeje = Integer.parseInt(tString[4]) - Integer.parseInt(tString[1]);
            } else {
                beszelgetesIdeje = Integer.parseInt(tString[4]) - Integer.parseInt(tString[1]) + 1;
            }

            /* Még az órák helyzetével is foglalkozni kell! Ha átlépünk (legalább)
        egy órát, akkor még azok perceit is hozzá kell adni a belszélgetés idejéhez. */
            if (Integer.parseInt(tString[0]) < Integer.parseInt(tString[3])) {
                beszelgetesIdeje += (60 * (Integer.parseInt(tString[3]) - Integer.parseInt(tString[0])));
            }

            percek.add(beszelgetesIdeje);
            // A telefonszamok sorai
            telSzamok.add(scFajl.nextLine());
        }

        // A percek és a telefonszámok kiírása a percek.txt fájlba
        FileWriter fw = new FileWriter("percek.txt");
        PrintWriter pw = new PrintWriter(fw);
        for (int i = 0; i < percek.size(); i++) {
            pw.print(percek.get(i) + " " + telSzamok.get(i) + "\n");
        }
        pw.close();
        fw.close();

        System.out.println("Az adatok kiírva a \"percek.txt\" fájlba.");
        System.out.println("------------------\n");

        // 4. feladat
        System.out.println("4. feladat");
        int csucsidoben=0, csucsidonKivul=0;
        for (int i : kezdetOra) {
            if (7<=i && i<18) {
                csucsidoben++;
            }else{
                csucsidonKivul++;
            }
        }
        System.out.println(csucsidoben + " beszélgetés volt csúcsidőben és " + csucsidonKivul + " beszélgetés volt csúcsidőn kívül.");
        System.out.println("-------------------\n");
        
        // 5. feladat
        System.out.println("5. feladat");
        int percMobil=0, percVezetekes=0;
        for (int i=0; i< telSzamok.size(); i++) {
            if ( telSzamok.get(i).startsWith("39") || telSzamok.get(i).startsWith("41") || telSzamok.get(i).startsWith("71") ){
                percMobil += percek.get(i);
                fajta.add(Boolean.TRUE);
            }else{
                percVezetekes += percek.get(i);
                fajta.add(Boolean.FALSE);
            }
        }
        System.out.println("Mobillal folytatott beszélgetések " + percMobil + " perc.");
        System.out.println("Vezetékessel folytatott beszélgetések " + percVezetekes + " perc.");
        
        System.out.println("-------------------\n");
        
        // 6. feladat
        System.out.println("6. feladat");
        final int V = 30;
        final float M = 69.175f;
        float fizetendoVezetekes = 0;
        int fizetendoMobil = 0;
        for (int i=0; i<fajta.size(); i++) {
            // igaz = mobil
            if(fajta.get(i)){
                if(7<=kezdetOra.get(i) && kezdetOra.get(i)<18){
                    fizetendoMobil += M * percek.get(i);
                }
            }else{
                if(7<=kezdetOra.get(i) && kezdetOra.get(i)<18){
                    fizetendoVezetekes += V * percek.get(i);
                }
            }
        }
        
        System.out.println("Csúcsidőben való beszélgetésésrt fizetendő " + (fizetendoMobil + fizetendoVezetekes) + " Ft.");
        System.out.println("-------------------\n");        
    }
}
/* IDEGEN MEGOLDÁS az internetről:
(Bocsi, de már nem tudom, hogy honnan van pontosan!) */
////1. feladat
//        System.out.println("Az 1. feladat megoldása");
//        System.out.println("Egy billentyűzetről bekért telefonszám jellegének meghatározása \n");
//        System.out.println("Kérem a telefonszámot!");
//        String telefonSzam = telefonSzamBeolvasas();
//        String jelleg = jellegMeghat(telefonSzam);
//        System.out.println("A megadott telefonszám: " + jelleg);
//        System.out.println("");
//        //2. feladat
//        System.out.println("A 2. feladat megoldása");
//        System.out.println("A hívásidő kiszámítása a bekért időpontok alapján \n");
//        System.out.println("Kérem a hívás kezdetének időpontját óra perc másodperc formátumban");
//        System.out.println("szóközökkel elválasztva!");
//        String[] kezdet = idoPontBeolvasas();
//        int kIdo = idoMeghat(kezdet);
//        System.out.println("Kérem a hívás végének időpontját óra perc másodperc formátumban");
//        System.out.println("szóközökkel elválasztva!");
//        String[] veg = idoPontBeolvasas();
//        int vIdo = idoMeghat(veg);
//        int hivasIdoMp = vIdo - kIdo;
//        int hivasIdo = hivasIdoMeghat(hivasIdoMp);
//        System.out.println("A hívásidő a számlázás szempontjából: " + hivasIdo + " perc. \n");
//        //3. feladat
//        System.out.println("A 3. feladat megoldása");
//        System.out.println("Az adatok beolvasása a hivasok.txt fájlból \n");
//        System.setProperty("file.encoding", "UTF-8"); //karakterkódolás beállítása
//        BufferedReader behozatal;
//        behozatal = new BufferedReader(new FileReader("hivasok.txt"));
//        String elsoSor;
//        String sor;
//        String[] daraboltSor; //Ügyeljünk rá, hogy a darabolt szöveg String tömb!
//        String hivottSzam;
//        elsoSor = behozatal.readLine();
//        //Ha van UTF-8 azonosító a fájl elején, elhagyjuk a sor elejéről:
//        if (elsoSor.charAt(0) == (char) 0xFEFF) {
//            elsoSor = elsoSor.substring(1);
//        }
//        daraboltSor = elsoSor.split(" ");
//        hivottSzam = behozatal.readLine();
//        hivas.add(new HivasTipus(daraboltSor, hivottSzam));
//
//        while ((sor = behozatal.readLine()) != null) {
//            daraboltSor = sor.split(" ");
//            hivottSzam = behozatal.readLine();
//            hivas.add(new HivasTipus(daraboltSor, hivottSzam));
//        }
//        behozatal.close();
//        //Ellenőrzés
//        System.out.println("A beolvasás ellenőrzése ");
//        System.out.println("Az utolsó 5 hívás: \n");
//        for (int i = hivas.size() - 4; i <= hivas.size(); i++) {
//            System.out.print(i + ". hívás kezdete: ");
//            System.out.print(hivas.get(i - 1).kOra + " " + hivas.get(i - 1).kPerc + " "
//                    + hivas.get(i - 1).kMp);
//            System.out.println("");
//            System.out.print(i + ". hívás vége: ");
//            System.out.print(hivas.get(i - 1).vOra + " " + hivas.get(i - 1).vPerc + " "
//                    + hivas.get(i - 1).vMp);
//            System.out.println("");
//            System.out.print(i + ". hívott szám: ");
//            System.out.println(hivas.get(i - 1).hivottSzam);
//            System.out.println("");
//        }
//        for (int i = 1; i <= hivas.size(); i++) {
//            hivasIdoMp = hivas.get(i - 1).vOra * 3600 + hivas.get(i - 1).vPerc * 60 + hivas.get(i - 1).vMp
//                    - hivas.get(i - 1).kOra * 3600 - hivas.get(i - 1).kPerc * 60 - hivas.get(i - 1).kMp;
//            hivas.get(i - 1).hivasIdo = hivasIdoMeghat(hivasIdoMp);
//        }
//        System.out.println("A hívásidők kiírása a percek.txt fájlba \n");
//        PrintWriter kivitel;
//        kivitel = new PrintWriter(new FileWriter("percek.txt"));
//        for (int i = 1; i <= hivas.size(); i++) {
//            kivitel.println(hivas.get(i - 1).hivasIdo + " " + hivas.get(i - 1).hivottSzam);
//        }
//        kivitel.close();
//        System.out.println("A fájlkiírás befejeződött. \n");
//        //4. feladat
//        System.out.println("A 4. feladat megoldása");
//        System.out.println("Hívások száma csúcsidőben és csúcsidőn kívül \n");
//        for (int i = 1; i <= hivas.size(); i++) {
//            if (hivas.get(i - 1).kOra > 6 && hivas.get(i - 1).kOra < 18) {
//                hivas.get(i - 1).csucsIdo = true;
//            }
//        }
//        int csucsDb = 0;
//        int kivulDb = 0;
//        for (int i = 1; i <= hivas.size(); i++) {
//            if (hivas.get(i - 1).csucsIdo == true) {
//                csucsDb++;
//            } else {
//                kivulDb++;
//            }
//        }
//        System.out.println("Csúcsidőben: " + csucsDb);
//        System.out.println("Csúcsidőn kívül: " + kivulDb);
//        System.out.println("");
//
//        //5. feladat
//        System.out.println("Az 5. feladat megoldása");
//        System.out.println("A hívásidő kiszámítása mobil, ill. vezetékes hívásoknál \n");
//        for (int i = 1; i <= hivas.size(); i++) {
//            hivas.get(i - 1).jelleg = jellegMeghat(hivas.get(i - 1).hivottSzam);
//        }
//        int mobilIdo = 0;
//        int vezetekesIdo = 0;
//        for (int i = 1; i <= hivas.size(); i++) {
//            if (hivas.get(i - 1).jelleg.equals("mobil")) {
//                mobilIdo += hivas.get(i - 1).hivasIdo;
//            } else {
//                vezetekesIdo += hivas.get(i - 1).hivasIdo;
//            }
//        }
//        System.out.println("Mobil szám: " + mobilIdo + " perc");
//        System.out.println("Vezetékes szám: " + vezetekesIdo + " perc");
//        System.out.println("");
//        //6. feladat
//        System.out.println("A 6. feladat megoldása");
//        System.out.println("Hívásdíj csúcsidőben \n");
//        double mobilCsucsTarifa = 69.175;
//        double vezetekesCsucsTarifa = 30;
//        double csucsDij = 0;
//        for (int i = 1; i <= hivas.size(); i++) {
//            if (hivas.get(i - 1).csucsIdo == true) {
//                if (hivas.get(i - 1).jelleg.equals("mobil")) {
//                    csucsDij += hivas.get(i - 1).hivasIdo * mobilCsucsTarifa;
//                } else {
//                    csucsDij += hivas.get(i - 1).hivasIdo * vezetekesCsucsTarifa;
//                }
//            }
//        }
//        System.out.printf("A felhasználónak a csúcsidős hívásokért %.2f", csucsDij);
//        System.out.println(" Ft-ot kell fizetnie. \n");
//    }
//
////************************************************************
//    public static String telefonSzamBeolvasas() throws IOException {
//        BufferedReader bill;
//        bill = new BufferedReader(new InputStreamReader(System.in, "Cp1250"));
//        return bill.readLine();
//    }
//
//    public static String jellegMeghat(String telSzam) throws IOException {
//        if (telSzam.substring(0, 2).equals("39") || telSzam.substring(0, 2).equals("41")
//                || telSzam.substring(0, 2).equals("79")) {
//            return "mobil";
//        } else {
//            return "vezetékes";
//        }
//    }
//
//    public static String[] idoPontBeolvasas() throws IOException {
//        BufferedReader bill;
//        bill = new BufferedReader(new InputStreamReader(System.in, "Cp1250"));
//        return bill.readLine().trim().split("\\s+");
//        /*Először eltávolítjuk a beolvasott szöveg széleiről a szóközöket,
// majd egy vagy több egymás melletti szóköz mentén feldaraboljuk*/
//    }
//
//    public static int idoMeghat(String[] ido) {
//        int ora = Integer.parseInt(ido[0]);
//        int perc = Integer.parseInt(ido[1]);
//        int mp = Integer.parseInt(ido[2]);
//        return ora * 3600 + perc * 60 + mp;//Az időt másodpercben számítjuk a nap kezdetétől
//    }
//
//    public static int hivasIdoMeghat(int idoMp) {
//        if (idoMp % 60 == 0) {
//            return idoMp / 60; //Egészosztás, csak az egészrészt adja meg!
//        } else {
//            return idoMp / 60 + 1; //A megkezdett perceket felfelé kerekítjük
//        }
//    }
//    //A tömblista konstruktora
//    static ArrayList<HivasTipus> hivas = new ArrayList<>();
//
//    public static class HivasTipus {
//
//        private final int kOra;
//        private final int kPerc;
//        private final int kMp;
//        private final int vOra;
//        private final int vPerc;
//        private final int vMp;
//        private final String hivottSzam;
//        private int hivasIdo;
//        private boolean csucsIdo;
//        private String jelleg;
//
//        public HivasTipus(String[] idokBe, String hivottSzamBe) //konstruktor
//        {
//            kOra = Integer.parseInt(idokBe[0]);
//            kPerc = Integer.parseInt(idokBe[1]);
//            kMp = Integer.parseInt(idokBe[2]);
//            vOra = Integer.parseInt(idokBe[3]);
//            vPerc = Integer.parseInt(idokBe[4]);
//            vMp = Integer.parseInt(idokBe[5]);
//            hivottSzam = hivottSzamBe;
//            hivasIdo = 0; //Kezdőértékek, futás közben állítjuk be a valódi értéküket
//            csucsIdo = false;
//            jelleg = "";
//        }
//    }
//}