2020. február 6., csütörtök

Java programozas órai feladat


Egy osztály hiányzásai állnak rendelkezésére a naplo.txt fájlban. Tömböt kell használni a megoldáshoz.
 A hiányzások naponként csoportosítva szerepelnek, minden napot a # karakter kezd, majd egy-egy szóközzel elválasztva a hónap és a nap sorszáma következik. Az aznapi hiányzások tanulónként külön sorokban vannak, a tanuló napi hiányzásait egy hét karakterből álló karaktersorozat írja le. A karaktersorozat minden karaktere egy-egy órát ad meg. Értéke az O betű, ha a tanuló jelen volt az adott órán, az X utal az igazolt, az I az igazolatlan távollétre, végül N betű jelzi, ha a tanulónak akkor nem volt órája. Például: # 01 15 Kiss Alfonz OXXXXXN # 01 16 Alma Hedvig OOOOOIO Kiss Alfonz XXXXXXX A fenti példa a január 15-16-i hiányzásokat tartalmazza.

Kiss Alfonznak január 15-én hat órája lett volna, de csak az első órán volt jelen, utána igazoltan hiányzott.
Alma Hedvignek január 16-án hét órája lett volna, de a 6. óráról igazolatlanul távol maradt.
Az állomány legfeljebb 600 sort tartalmaz, az osztályba pedig legfeljebb 50 tanuló jár. Feltételezheti, hogy az osztályban nincs két azonos nevű tanuló, továbbá hogy minden tanulónak egy vezeték és egy utóneve van. Felhasználhatja, hogy a jelenlétre vonatkozó bejegyzés mindig 7 karakterből áll.
Készítsen programot, amely az állomány adatait felhasználva az alábbi kérdésekre válaszol!

A program forráskódját hianyzasok néven mentse! (A program megírásakor a felhasználó által megadott adatok helyességét, érvényességét nem kell ellenőriznie, és feltételezheti, hogy a rendelkezésre álló adatok a leírtaknak megfelelnek.) A képernyőre írást igénylő részfeladatok eredményének megjelenítése előtt írja a képernyőre a feladat sorszámát (például: 3. feladat:)!

Ha a felhasználótól kér be adatot, jelenítse meg a képernyőn, hogy milyen értéket vár! Az eredmények kiírásánál utaljon a kiírt adat jelentésére! A mintától eltérő, valamint az ékezetmentes kiírás is elfogadott.


1.Olvassa be és tárolja el a naplo.txt fájl tartalmát!

2.Határozza meg és írassa ki, hogy hány sor van a fájlban, ami hiányzást rögzít! (A fenti példában 3 ilyen bejegyzés van.)

3.Számolja meg és írassa ki, hogy összesen hány óra igazolt és hány óra igazolatlan hiányzás volt a félév során! Néhány tanár azt feltételezi, hogy a tanulók bizonyos órákról gyakrabban hiányoznak. A következő három feladatban ennek vizsgálatát kell előkészítenie.

4.Készítsen függvényt hetnapja néven, amely a paraméterként megadott dátumhoz (hónap, nap) megadja, hogy az a hét melyik napjára esik (hétfő, kedd...). Tudjuk, hogy az adott év nem volt szökőév, továbbá azt is, hogy január elseje hétfőre esett. Használhatja az alábbi algoritmust is, ahol a tömbök indexelése 0-val kezdődik, de ettől eltérő megoldású függvényt is készíthet.

Függvény hetnapja(honap:egesz, nap:egesz): szöveg napnev[]:= ("vasarnap", "hetfo", "kedd", "szerda", "csutortok", "pentek", "szombat") napszam[]:= (0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 335) napsorszam:= (napszam[honap-1]+nap) MOD 7 hetnapja:= napnev[napsorszam] Függvény vége

5.Kérjen be egy dátumot (hónap, nap), és a hetnapja függvény felhasználásával írassa ki, hogy az a hét melyik napjára esett!

6.Kérje be a hét egy tanítási napjának nevét és egy aznapi tanítási óra óraszámát (például: kedd 3)! Írassa ki a képernyőre, hogy a félév során az adott tanítási órára összesen hány hiányzás jutott!

7.Írassa ki a képernyőre a legtöbb órát hiányzó tanuló nevét! Ha több ilyen tanuló is van, akkor valamennyi neve jelenjen meg szóközzel elválasztva!

Naplo.txt tartalma
# 01 15
Kiss Alfonz OXXXXXX
# 01 16
Alma Hedvig OOOOOIO
Kiss Alfonz XXXXXXX
# 01 17
Alma Hedvig OOIOOOO
 Kiss Alfonz XXXXXXX
Maracuja Kolos OOIOOOO
# 01 23
Alma Hedvig XXXXXXX
Kajszi Berta XXXXXXX
Licsi Orsolya XXXXXXX
Szeder Botond XXXXXXX
# 01 24
Alma Hedvig XXXXXXX
Kajszi Berta OXXXXXX
Licsi Orsolya XXXXXXX
# 01 25
Alma Hedvig XXXXXXX
Kajszi Berta XXXXXXX
Licsi Orsolya XXXXXXX
# 01 30
Meggy Albin XXXXXXX
# 01 31
Kivi Adrienn XXXXXXX
Som Klaudia XXXXXXX
# 02 01
Som Klaudia XXXXXXX
# 02 02
Kiss Alfonz XXXXXXX
# 02 05
Jujuba Ibolya IIXXXXX
# 02 06
Naspolya Frigyes XXXXXXX
# 02 09
Kiss Alfonz XXXXXXN
Kajszi Berta XXXXXXN
Licsi Orsolya XXXXXXN
# 02 12
Kajszi Berta XXOOOON
Licsi Orsolya XXXXXXX
# 02 13
Kajszi Berta XXXXXXX
Kuruba Vendel XXXXXXX
Eper Lehel OOOOOXX
Licsi Orsolya XXXXXXX
# 02 22
Eper Lehel XXXXXXX
# 02 23
Eper Lehel XXXXXXN
# 02 26
Eper Lehel XXXXXXX
# 02 27
Eper Lehel XXXXXXX
# 02 28
Eper Lehel XXXXXXX
Jujuba Ibolya XOIOOOO
Kivi Adrienn OOIIOOO
Lime Korinna XXXXXXX
# 03 01
Jujuba Ibolya XXXXXXX
Lime Korinna XXXXXXX
Naspolya Frigyes XXXXXXX
Ribizli Matild XXXXXXX
# 03 02
Kiss Alfonz XXXXXXN
Jujuba Ibolya XXXXXXN
Kajszi Berta OOOXXXN
Lime Korinna OOOXXXN
# 03 05
Jujuba Ibolya XXXXXXX
# 03 06
Jujuba Ibolya XXXXXXX
# 03 07
Alma Hedvig OOIOOOO
Som Klaudia XXXXXXX
Szilva Bence XXXXXXX
# 03 19
Szeder Botond XXXXXXX
# 03 21
Egres Ulrik XXXXXXX
Kajszi Berta XXXXXXX
# 03 22
Egres Ulrik XXXXXXX
# 03 23
Egres Ulrik XXXXXXN
Kiss Alfonz OXXXXXN
# 03 26
Jujuba Ibolya IXXXXXX
Maracuja Kolos XXXXXXX
# 03 27
Jujuba Ibolya XXXXXXX
Maracuja Kolos XXXXXXX
Som Klaudia XXXXXXX
# 03 28
Jujuba Ibolya XXXXXXX
Kuruba Vendel XXXXXXX
Maracuja Kolos OOIOOOO
# 03 29
Jujuba Ibolya XXXXXXX
Som Klaudia XXXXXXX
# 03 30
Kiss Alfonz XXXXXXN
Jujuba Ibolya XXXXXXN
Kuruba Vendel XXXXXXN
# 04 02
Kivi Adrienn XXXXXXX
# 04 04
Kivi Adrienn XXXXXXX
Kuruba Vendel OOOXXXX
Naspolya Frigyes OOOXXXX
Lime Korinna OOIOOOO
Ribizli Matild XXXXXXX
# 04 19
Kivi Adrienn XXXXXXX
# 04 20
Berkenye Anna XXXXXXN
Kivi Adrienn XXXXXXN
# 04 23
Kivi Adrienn XXXXXXX
# 04 24
Kivi Adrienn XXXXXXX
# 04 25
Kajszi Berta XXXXXXX
Kivi Adrienn XXXXXXX
# 04 26
Kajszi Berta XXXXXXX
Kivi Adrienn XXXXXXX
Kuruba Vendel XXXXXOO
# 04 27
Kajszi Berta XXXXXXN
Kivi Adrienn XXXXXXN
Kuruba Vendel XXXXXXN
# 05 07
Birs Judit XXXXXXX
# 05 08
Datolya Vilmos XXXXXXX
# 05 09
Berkenye Anna XXXXXXX
Egres Ulrik XXXXXXX
Kumkvat Hunor OOIOOOO
Kuruba Vendel OOXOOOO
Nektarin Csepke XXXXXXX
Ribizli Matild XXXXXXX
Szilva Bence OOIOOOO
# 05 10
Birs Judit XXXXXXX
Egres Ulrik XXXXXXX
# 05 11
Alma Hedvig OOOXXXN
Egres Ulrik OOOXXXN
# 05 14
Citrom Lajos XXXXXXX
# 05 15
Citrom Lajos XXXXXXX
Egres Ulrik XXXXXXX
Kuruba Vendel XXXXXXX
# 05 16
Berkenye Anna XXXXXXX
Citrom Lajos XXXXXXX
Datolya Vilmos OOXOOOO
Egres Ulrik OOXOOOO
Dinnye Emese XXXXXXX
Lime Korinna XXXXXXX
# 05 17
Citrom Lajos XXXXXXX
# 05 18
Citrom Lajos XXXXXXN
# 05 22
Cseresznye Leila XXXXXXX
# 05 23
Berkenye Anna XXXXXXX
Kumkvat Hunor OOIOOOO
Kuruba Vendel OOIOOOO
Pomelo Ede XXXXXXX
Szilva Bence XXXXXXX
# 05 24
Kuruba Vendel XXXXXXX
# 05 25
Datolya Vilmos XXXXXXN
Kuruba Vendel XXXXXXN
# 06 01
Nektarin Csepke XXXXXXX
# 06 04
Datolya Vilmos OOOXXOO
# 06 05
Alma Hedvig XXXXXXX
# 06 06
Berkenye Anna OOIOOOO
Papaja Inez XXXXXXX
Egres Ulrik XXXXXXX
# 06 07
Papaja Inez XXXXXXX
# 06 08
Papaja Inez XXOXXXN
# 06 11
Papaja Inez XXXXXXX
# 06 13
Birs Judit OOIOOOO
Papaja Inez XXXXXXX
Datolya Vilmos XXXXXXX
# 06 14
Papaja Inez OOXXXXX
# 06 15
Kumkvat Hunor XXOXXXN
------------------txt vége
TÖBBFÉLE MEGOLDÁS LÉTEZIK

Adattárolás tömb létrehozása feltöltése.
Adattároló osztály:
/**
 HIANYZAS ROGZITESE
 */
package hianyzas_szabo_hianyzasok;

public class Hianyzo
{
  private String nev;
  private int honap;
  private int nap;
  private String hianyzas;
  
  public Hianyzo(String[] tomb, String datum)
  {
    nev = tomb[0] + " " + tomb[1];
    String[] tmp = datum.split(" ");
    honap = Integer.parseInt(tmp[1]);
    nap = Integer.parseInt(tmp[2]);
    hianyzas = tomb[2];
  }

  public String getNev()
  {
    return nev;
  }

  public int getHonap()
  {
    return honap;
  }

  public int getNap()
  {
    return nap;
  }

  public String getHianyzas()
  {
    return hianyzas;
  }

  @Override
  public String toString()
  {
    return "Hianyzo{" + "nev=" + nev + ", honap="
      + honap + ", nap=" + nap + ", hianyzas="
      + hianyzas + '}';
  }
}

Hiányzás!

/**
 *
 *
 */
package hianyzas;

import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.Scanner;

public class anyzasok_v2
{

  public static void main(String[] args)
  {
    ArrayList<Hianyzo> hianyzasok = new ArrayList<>();
    
    try
    {
      RandomAccessFile raf = new RandomAccessFile("naplo.txt", "r");
      String sor;
      String datum = "";
      for( sor = raf.readLine();sor != null; sor = raf.readLine() )
      {
        if( sor.charAt(0) == '#' )
        {
          datum = sor;
        }
        else
        {
          hianyzasok.add(new Hianyzo(sor.split(" "), datum));
        }
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
    
//    for( int i = 0; i < hianyzasok.length; i++ )
//    {
//      System.out.println(hianyzasok[i].toString());
//    }
    
    System.out.println("2. feladat");
    System.out.println("A naploban " + hianyzasok.size()
      + " bejegyzes van.");
    
    System.out.println("3. feladat");
    int igazolt = 0;
    int igazolatlan = 0;
    for( Hianyzo hianyzo : hianyzasok)
    {
      for( int j = 0; j < 7; j++ )
      {
        if( hianyzo.getHianyzas().charAt(j) == 'X' )
        {
          igazolt++;
        }
        else if( hianyzo.getHianyzas().charAt(j) == 'I')
        {
          igazolatlan++;
        }
      }
    }
    System.out.println("Az igazolt hianyzasok szama "
      + igazolt + ", az igazolatlanoke " + igazolatlan + " ora.");
    
    System.out.println("5. feladat");
    Scanner sc = new Scanner(System.in);
    System.out.print("A honap sorszama=");
    int honap = sc.nextInt();
    System.out.print("A nap sorszama=");
    int nap = sc.nextInt();
    System.out.println("Az adott napon " + hetnapja(honap, nap) + " volt.");
    
    System.out.println("6. feladat");
    sc = new Scanner(System.in);
    System.out.print("A nap neve=");
    String napnev = sc.nextLine();
    System.out.print("Az ora sorszama=");
    int sorszam = sc.nextInt();
    
    int hianyzasDb = 0;
    for( Hianyzo hianyzo : hianyzasok)
    {
      if( hetnapja(hianyzo.getHonap(), hianyzo.getNap()).equals(napnev) )
      {
        if( hianyzo.getHianyzas().charAt(sorszam - 1) == 'X'
          || hianyzo.getHianyzas().charAt(sorszam - 1) == 'I' )
        {
          hianyzasDb++;
        }
      }
    }
    System.out.println("Ekkor osszesen " + hianyzasDb
      + " ora hianyzas tortent.");
    
    System.out.println("7. feladat");
    
    // kivalogatom az egyedi neveket
    ArrayList<String> nevek = new ArrayList<>();
    for( Hianyzo hianyzo : hianyzasok)
    {
      if( !nevek.contains(hianyzo.getNev()) )
      {
        nevek.add(hianyzo.getNev());
      }
    }
    
    // nevenkent osszeszamolom a hianyzasokat
    int[] diakHianyzas = new int[nevek.size()];
    
    for( Hianyzo hianyzo : hianyzasok)
    {
      for( int i = 0; i < hianyzo.getHianyzas().length(); i++ )
      {
        if( hianyzo.getHianyzas().charAt(i) == 'X'
          || hianyzo.getHianyzas().charAt(i) == 'I' )
        {
          // a nevek listajaban a nev helye alapjan novelem
          // a hianyzasok darabszamat tartalmazo tomb
          // azonos helyen levo elemet
          diakHianyzas[nevek.indexOf(hianyzo.getNev())]++;
        }
      }
    }
    
    int max = 0;
    for( int i : diakHianyzas)
    {
      if( i > max )
      {
        max = i;
      }
    }
    
    System.out.print("A legtobbet hianyzo tanulok: ");
    for( int i = 0; i < diakHianyzas.length; i++ )
    {
      if( diakHianyzas[i] == max )
      {
        System.out.print(nevek.get(i) + " ");
      }
    }
    System.out.println();
  }
  
  // 4. feladat
  public static String hetnapja(int honap, int nap)
  {
    String[] napev = {"vasarnap","hetfo","kedd","szerda"
      ,"csutortok","pentek","szombat"};
    int[] napszam = {0,31,59,90,120,151,181,212,243,273,304,335};
    int napsorszam = (napszam[honap-1] + nap) % 7;
    return napev[napsorszam];
  }
}

Nincsenek megjegyzések:

Megjegyzés küldése