2020. szeptember 2., szerda

Tantárgyfelosztás - Felkészülés a Középszintű Szakmai informatikai érettségi feladat mintapélda és megoldása

A tantárgyfelosztás a tanév tervezésének alapvető dokumentuma. A tantárgyfelosztás azt
tartalmazza, hogy a tanárok a tantárgyaikat mely osztályokban, hány órában tanítják. Ebben
a feladatban egy négy évfolyamos gimnázium tantárgyfelosztásának adatait kell elemeznie.
A tantárgyfelosztást ezúttal egy adatbázis-kezelő programmal előállított, egyszerű
szerkezetű szöveges állományban kapja az alábbi minta szerint (Minden bejegyzést négy sor
tárol.):
Albatrosz Aladin
biologia
9.a
2
Albatrosz Aladin
osztalyfonoki
9.a
1
Csincsilla Csilla
matematika
9.x
2
Az első bejegyzés megadja, hogy Albatrosz Aladin tanár úr biológiát (biologia) fog tanítani
a 9.a osztályban heti 2 órában. Ha az osztály betűjele x, akkor évfolyam szintű csoportról van
szó. Példánkban Csincsilla Csilla tanárnő a 9. évfolyam részére heti 2 órás matematika órát tart.
Az osztályfőnököket arról ismerhetjük fel, hogy ők tartják az osztályfőnöki (osztalyfonoki) órát.
A megoldás során felhasználhatja, hogy a fájl maximum 1000 bejegyzést (azaz legfeljebb
4000 sort) tartalmaz. Az iskolában legfeljebb 100 tanár és legfeljebb 50 osztály van, továbbá
minden osztálynak pontosan egy osztályfőnöke van.
Készítsen programot, amely a beosztas.txt állomány adatait felhasználva az alábbi
kérdésekre válaszol! A program forráskódját mentse tanfel néven! (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 esetén – a mintához tartalmában hasonlóan – írja
ki a képernyőre a feladat sorszámát (például: 3. feladat:), és utaljon a kiírt tartalomra is!
Ha a felhasználótól kér be adatot, jelenítse meg a képernyőn, hogy milyen értéket vár! Mindkét
esetben az ékezetmentes kiírás is elfogadott.
1. Olvassa be és tárolja el a beosztas.txt állományban talált adatokat, és annak
felhasználásával oldja meg a következő feladatokat!
2. Hány bejegyzés található az állományban? Az eredményt írassa ki a képernyőre!
3. A fenntartó számára fontos információ, hogy az iskolában hetente összesen hány tanítási
óra van. Határozza meg ezt az adatot és írassa ki a képernyőre!
4. Kérje be a felhasználótól egy tanár nevét, és írassa ki a képernyőre, hogy hetente hány
órában tanít!
 
Informatika
emelt szint
1711 gyakorlati vizsga 11 / 12 2019. május 13.
Azonosító
jel:

5. Készítse el az of.txt fájlt, amely az osztályfőnökök nevét tartalmazza osztályonként
az alábbi formában (az osztályok megjelenítésének sorrendje a mintától eltérhet):
9.a - Albatrosz Aladin
9.b - Hangya Hanna
9.c - Zerge Zenina
6. Egyes osztályokban bizonyos tantárgyakat a tanulók csoportbontásban tanulnak: ekkor az
adott tantárgyra és osztályra két bejegyzést is tartalmaz a tantárgyfelosztás. Kérje be egy
osztály azonosítóját, valamint egy tantárgy nevét, és írassa ki a képernyőre, hogy az adott
osztály a megadott tantárgyat csoportbontásban vagy osztályszinten tanulja-e!
(Feltételezheti, hogy a megadott osztály tanulja a megadott tantárgyat.) 

Megoldása

Adattároló osztály:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_19majma_tantargyfelosztas;
 
public class Adat
{
  private String tanar;
  private String tantargy;
  private String osztaly;
  private int db;
  private boolean osztalyfonok;
   
  public Adat(String sor1, String sor2, String sor3, String sor4)
  {
    tanar = sor1;
    tantargy = sor2;
    osztaly = sor3;
    db = Integer.parseInt(sor4);
    if( tantargy.equals("osztalyfonoki"))
    {
      osztalyfonok = true;
    }
  }
 
  public String getTanar()
  {
    return tanar;
  }
 
  public String getTantargy()
  {
    return tantargy;
  }
 
  public String getOsztaly()
  {
    return osztaly;
  }
 
  public int getDb()
  {
    return db;
  }
 
  public boolean isOsztalyfonok()
  {
    return osztalyfonok;
  }
 
  @Override
  public String toString()
  {
    return "Adat{" + "tanar=" + tanar + ", tantargy="
      + tantargy + ", osztaly=" + osztaly + ", db="
      + db + ", osztalyfonok=" + osztalyfonok + '}';
  }
}
A feladat megoldásai:

/**
 *
 * @author https://webotlet.hu
 */
package webotlet_19majma_tantargyfelosztas;
 
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.Scanner;
 
public class Webotlet_19majma_tantargyfelosztas
{
 
  public static void main(String[] args)
  {
    Adat[] adatok = null;
    try
    {
      RandomAccessFile raf = new RandomAccessFile("beosztas.txt", "r");
      String sor;
      int db = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        db++;
      }
       
      adatok = new Adat[db / 4];
      raf.seek(0);
       
      int hely = 0;
      for( sor = raf.readLine(); sor != null; sor = raf.readLine() )
      {
        adatok[hely] = new Adat(sor, raf.readLine(),
          raf.readLine(), raf.readLine());
        hely++;
      }
      raf.close();
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
     
//    for( int i = 0; i < adatok.length; i++ )
//    {
//      System.out.println(adatok[i].toString());
//    }
 
    System.out.println("2. feladat");
    System.out.println("A fajlban " + adatok.length
      + " bejegyzes van.");
     
    System.out.println("3. feladat");
    int orak = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      orak += adatok[i].getDb();
    }
     
    System.out.println("Az iskolaban a heti osszoraszam: " + orak);
     
    System.out.println("4. feladat");
    Scanner sc = new Scanner(System.in);
    System.out.print("Egy tanar neve= ");
    String tanar = sc.nextLine();
    int tanarOrak = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      if( adatok[i].getTanar().equals(tanar) )
      {
        tanarOrak += adatok[i].getDb();
      }
    }
     
    System.out.println("A tanar heti oraszama: " + tanarOrak);
     
    try
    {
      RandomAccessFile ki = new RandomAccessFile("of.txt", "rw");
      ki.setLength(0);
      for( int i = 0; i < adatok.length; i++ )
      {
        if( adatok[i].isOsztalyfonok() )
        {
          ki.writeBytes(adatok[i].getOsztaly() + " - "
            + adatok[i].getTanar() + "\n");
        }
      }
    }
    catch( IOException e )
    {
      System.out.println("HIBA");
    }
     
    System.out.println("6. feladat");
    System.out.print("Osztaly= ");
    String osztaly = sc.nextLine();
    System.out.print("Tantargy= ");
    String tantargy = sc.nextLine();
    int db = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      if( adatok[i].getOsztaly().equals(osztaly)
        && adatok[i].getTantargy().equals(tantargy) )
      {
        db++;
      }
    }
     
    if( db == 2 ) // feltetelezzuk, hogy nincs nagyobb bontas
    {
      System.out.println("Csoportbontasban tanuljak.");
    }
    else
    {
      System.out.println("Osztalyszinten tanuljak.");
    }
     
    System.out.println("7. feladat");
     
    String[] tanarok = new String[adatok.length];
    int hely = 0;
    for( int i = 0; i < adatok.length; i++ )
    {
      boolean benne = false;
      for( int j = 0; j < hely; j++ )
      {
        if( tanarok[j].equals(adatok[i].getTanar()) )
        {
          benne = true;
          break;
        }
      }
       
      if( !benne )
      {
        tanarok[hely] = adatok[i].getTanar();
        hely++;
      }
    }
     
    System.out.println("Az iskolaban " + hely + " tanar tanit.");
  }
   
}

https://www.webotlet.hu/?p=2968

Nincsenek megjegyzések:

Megjegyzés küldése