#!/usr/bin/perl use warnings; use strict; use DBI; use Tk; use Data::Dumper; use utf8; use Tk::Dialog; use Tk::Pane; #erstellt neues Fenster mit Standart 500x500 my $window = MainWindow->new(); $window->geometry("700x500+300+0"); #Größerziehen verhindern $window->resizable(0,0); #Titel des Fensters $window->title('Fehlzeiten der Schüler'); #Variablen für Datum global our $tag; our $monat; our $jahr; #Frame wird erstellt my $fo = $window->Frame()->pack(-side => 'top', -expand => 1, -fill => 'both', ); #############################FRAME-OBEN############################# #Frame_Oben wird in Frame fo erstellt my $Frame_Oben = $fo->Frame(-borderwidth => 3, -relief => 'groove', ) ->pack(-side => 'top', -expand => 0, -fill => 'both', ); $Frame_Oben ->Label(-text=>"FEHLZEITEN")->pack(-side=>'top'); #############################FRAME-OBEN############################# #############################FRAME-EINS############################# # Frame1 in FRAME fo my $f1 = $fo->Frame(-borderwidth => 3, -relief => 'groove', ) ->pack(-side => 'left', -expand => 1, -fill => 'both', ); $f1->Label(-text=>'Klassen')->pack(); #Feste Frame Breite $f1->packPropagate(0); #Datenbankverbindung my $dbh = DBI::->connect("dbi:SQLite:dbname=./datenbank.db","","") or die print "FEHLER!! Keine Klassen in der Datenbank"; if (!$dbh) { print "Zugriff verweigert!\n"; exit(1); } #SQL befehl, liefert die namen der Klassen zurück my $sql = "SELECT name FROM klassen"; my $sth = $dbh->prepare($sql) or die print "FEHLER!! Keine Klassen in der Datenbank"; my $rv = $sth->execute or die print "FEHLER!! Keine Klassen in der Datenbank"; if ($rv < 0) { print "Keine Ergebniswerte!\n"; exit (1); } # Erstellt in Frame1 Radiobuttons und belegt diese mit den Daten der Datenbank my $Klasse=1; for(my $i=1;my @row = $sth->fetchrow_array;$i++) { $f1->Radiobutton(-text => $row[0], -variable=>\$Klasse, -value => $i, -command => sub{ &daten_holen($Klasse); #Öffnet die Funktion daten_holen } ) ->pack(-anchor=>'w'); } #############################FRAME-EINS############################# #############################FRAME-ZWEI############################# # SPALTE 2 in FRAME fo my $f2 = $fo->Frame(-borderwidth => 3, -relief => 'groove', ) ->pack(-side => 'left', -expand => 1, -fill => 'both', ); #Überschrift Schueler in Frame 2 $f2->Label(-text=>'Schüler')->pack(); my $Schueler = 1; sub daten_holen() { # DATENBANK ABFRAGE $sql = "SELECT namen_id,name FROM schueler WHERE klassen_id==(?)"; $sth = $dbh->prepare($sql) or die print "FEHLER"; $rv = $sth->execute($Klasse) or die print "FEHLER"; if ($rv < 0) { print "Keine Ergebniswerte!\n"; exit (1); } #Ruft Funktion frame_clear aufund Cleart bei Klassenwechsel &frame_clear_f2(); &frame_clear_f3(); # GIBT NAMEN DER SCHÜLER AUS IN FRAME 2 for(my $i=1;my @row = $sth->fetchrow_array;$i++) { $f2->Radiobutton(-text => $row[1], -variable => \$Schueler, -value => $row[0], - command => sub{ &Fehlzeiten_holen($Klasse,$Schueler); } ) ->pack(-anchor=>'w'); #Feste Frame Breite $f2->packPropagate(0); } } #$dbh->disconnect; #DATENBANK VERBINDUNG TRENNEN #############################FRAME-ZWEI############################# #############################FRAME-DREI############################# # SPALTE 3 in FRAME fo my $f3 = $fo->Frame(-borderwidth => 3, -relief => 'groove', ) ->pack(-side => 'left', -expand => 1, -fill => 'both', ); #Überschrift Schueler in Frame 2 $f3->Label(-text=>'Fehlzeiten')->pack(); sub Fehlzeiten_holen() { # DATENBANK ABFRAGE #$sql = "SELECT fehlzeiten_id FROM fehlzeiten WHERE namen_id==(?)"; $sql = "SELECT fehlzeiten.tag,fehlzeiten.stunden from schueler LEFT JOIN fehlzeiten USING (namen_id) WHERE namen_id ==(?)"; $sth = $dbh->prepare($sql) or die print "FEHLER"; $rv = $sth->execute($Schueler) or die print "FEHLER"; if ($rv < 0) { print "Keine Ergebniswerte!\n"; exit (1); } #Ruft Funktion frame_clear aufund Cleart bei Klassenwechsel &frame_clear_f3(); #$f3->Scrolled('Pane', -scrollbars => "osoe",)->pack; for(my $j=1;my @row = $sth->fetchrow_array;$j++) { $f3->Label( -text => "Wann? $row[0] " )->pack; $f3->Label( -text => "Stunden? $row[1]\n" )->pack; #$f3->Label( -text => "----------------------" )->pack; #print "Wieviele Stunden gesamt: $row[2]\n"; } $f3->Label( -text => "----------------------" )->pack; $f3->Label( -text => "Stunden insgesamt:" )->pack; $f3->Label( -text => "Tage:? " )->pack; #$f3->packPropagate(0); } ################################### #############################FRAME-DREI############################# #Zurück Button wo Programm Schuelerverwaltung aufruft $window->Button(-text=>"Zurück",-command=>sub{ do "Schuelerverwaltung.pl"; $window -> DESTROY; }) ->pack(-side => 'left', -expand => 1, -fill => 'none', -ipadx => 80, -pady => 5,); #Beenden-Button, wo Funktion Beenden_Dialog beim klicken aufruft $window->Button(-text=>'Beenden',-command=>sub{&Beenden_Dialog();}) ->pack(-side => 'left', -expand => 1, -fill => 'none', -ipadx => 80, -pady => 5,); #Cleart das Frame beim Wechseln der Klassen sub frame_clear_f2 { # Children Elemente Frame 2 entfernen um ein frisches Frame zu haben for my $children ( @{$f2->children || []}) { $children->destroy; } $f2->Label( -text => 'Schüler' )->pack; return; } #Cleart das Frame f3 beim Wechseln der Schüler sub frame_clear_f3 { # Children Elemente Frame 3 entfernen um ein frisches Frame zu haben for my $children ( @{$f3->children || []} ) { $children->destroy; } $f3->Label( -text => 'Fehlzeiten' )->pack; return; } #Funktion Beenden_dialog wird ausgeführt wenn auf Beenden geklickt wird sub Beenden_Dialog { # Dialog Ja Nein my $dialog = $window->Dialog(-text => 'Wollen Sie wirklich beenden?', -bitmap => 'question', -title => 'Quit?', -default_button => 'Ja', -buttons => [qw/Ja Nein/], ); my $answer = $dialog->Show(); #Schaut was angeklickt wurde if ($answer =~ /j/i) { print "\nEs wurde ja ausgewaehlt.\n"; exit(0); } # if else { print "\nEs wurde nein ausgewaehlt.\n"; } # else } MainLoop();