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