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 = "";
// }
// }
//}