Teil 35 - Kronberg Gymnasium

Werbung
Teil 35 : Formular-GUI mit TCL/TK und HTML-Generator
Das hier verwendete einfache Shellskript-Modellsystem soll drei Zusammenhänge aufzeigen:
1.
2.
3.
Daten werden bei vielen Web- und Office-Anwendungen in einem ersten Schritt geordnet eingelesen, etwa in
eine Tabelle oder eine Datenbank, um dann in einem zweiten Schritt wieder in einem anderen Format
ausgegeben zu werden.
Grafische Benutzeroberfläche werden mittels fertiger Werkzeug-Baukästen zusammengestellt und die
Benutzereingaben werden mit sogenannten Ereignissen verknüpft.
Die für eine Ausgabe notwendige Auszeichnungssprache (z.B. HTML oder LATEX) wird erst dynamisch (z.B.
mittels PHP oder Perl) erzeugt. Die eigentlichen Daten liegen in tabellarischer Form oder in einer Datenbank
(z.B. MySQL) vor.
Schema:
eingabe.tcl
Formulareinträge
ausgabe.sh
geordnete Daten
Webseite
tabelle.csv
tabelle.html
Das Programm eingabe.tcl
Voraussetzung:
Das TCL/TK-Toolkit (z.B. das auch für Windows erhältliche tclx8.4 muss installiert sein,
vgl. http://www.tcl.tk/software/tcltk/)
#!/bin/sh
#\
exec wish "$0"
wm title . Eingabe-Formular
frame
pack
label
pack
.frame1
.frame1
.frame1.einl
.frame1.einl
-borderwidth 10
-side top -fill x
-text "Gib hier Deine Daten ein:"
-side top -fill x
frame
pack
label
entry
label
entry
label
entry
grid
grid
grid
grid
grid
grid
.frame2
.frame2
.frame2.vorl
.frame2.vore
.frame2.nachl
.frame2.nache
.frame2.maill
.frame2.maile
.frame2.vorl
.frame2.vore
.frame2.nachl
.frame2.nache
.frame2.maill
.frame2.maile
-borderwidth 10
-side top -fill x
-text "Vorname:"
-width 40 -textvariable VOR
-text "Nachname:"
-width 40 -textvariable NACH
-text "Gib hier Deine E-Mail-Adresse ein:"
-width 40 -textvariable MAIL
-in .frame2
-row 0 -column 0 -sticky w
-in .frame2
-row 0 -column 1 -sticky e
-in .frame2
-row 1 -column 0 -sticky w
-in .frame2
-row 1 -column 1 -sticky e
-in .frame2
-row 2 -column 0 -sticky w
-in .frame2
-row 2 -column 1 -sticky e
frame
pack
button
button
.frame3
.frame3
.frame3.b1
.frame3.b2
grid
grid
.frame3.b1
.frame3.b2
-borderwidth 10
-side top -fill x
-text "Abbrechen" -command {exit}
-text "OK" -command {
set f [open "tabelle.csv" {RDWR CREAT APPEND}] ;
seek $f 0 end ;
puts $f "\"$VOR\",\"$NACH\",\"$MAIL\"" ;
close $f ;
exit}
-in .frame3
-row 0 -column 0
-in .frame3
-row 0 -column 1
Aufgaben:
1. Erweitere das Eingabeformular um eine Zeile für die Telefonnummer.
2. Schreibe ein neues Eingabeformular für einen vollwertigen Zeugniseingabe-Generator.
3. Für Fortgeschrittene: Überlege, wie die eigentlichen Programmbefehle von der grafischen Oberfläche getrennt
programmiert werden können.
Das Programm ausgabe.sh
#!/bin/bash
echo -e "<html>\n
<head>\n
<title>E-Mail-Liste</title>\n
</head>\n
<body>\n
<h1>E-Mail-Liste</h1>\n
<table border="1" cellpadding="2" cellspacing="1" width="80%">\n
<tr><td>Vorname</td><td>Nachname</td><td>E-Mail-Adresse</td></tr>\n" > tabelle.html
ANZAHL=`echo $(wc -l tabelle.csv) |
for i in `seq 1 $ANZAHL` ; do
echo -e "<tr>
<td>`cat tabelle.csv | sed
<td>`cat tabelle.csv | sed
<td>`cat tabelle.csv | sed
</tr>\n" >> tabelle.html
done
awk '{print $1}'`
-n "$i"p | awk -F, '{print $1}' | sed -e 's/"//g'`</td>
-n "$i"p | awk -F, '{print $2}' | sed -e 's/"//g'`</td>
-n "$i"p | awk -F, '{print $3}' | sed -e 's/"//g'`</td>
echo -e "</table>\n
</body>\n
</html>" >> tabelle.html
Aufgaben:
4. Führe das Programm eingabe.tcl vier bis fünfmal mit veschiedenen Beispieldaten durch und teste dabei
auch verschiedene, scheinbar unsinnige Sonderzeichen.
5. Öffne die Datei tabelle.csv mit einem Texteditor und dann mit OpenOffice Calc.
6. Führe anschließend das Programm ausgabe.sh aus.
7. Verändere es so, dass der Hintergrund der HTML-Seite im Web Browser blau angezeigt wird.
8. Schreibe ein neues Eingabeformular für einen vollwertigen Zeugnisausgabe-Generator.
Optimiere die Druck-Ausgabe für DIN A 4 durch richtiges Hinzufügen in den Header des entstehenden HTMLDokuments:
<style type="text/css">
@media print {
@page {
size: 21cm 29.7cm;
}
}
</style>
9. Begründe, warum in der CSV-Datei die doppelten Hochkommatas "," so wichtig sind.
10. Begründe, warum die Verwendung von Leerzeichen in Dateinamen problematisch sein kann.
11. Installiere und teste kurz die folgenden Entwicklungsumgebungen für verschiedene
Programmiersprachen bzw. Grafik-Bibliotheken. Welche davon sind einfach Plattform übergreifend nutzbar?
JavaKarol
http://www.schule.bayern.de/karol/jkarol.htm
Java
Kara
http://www.swisseduc.ch/informatik/karatojava/ Java
Java Hamster
http://www.java-hamster-modell.de/
Java
BlueJ
http://bluej.org/
Java
Eclipse
http://www.eclipse.org/
Java
Boa Constructor http://boa-constructor.sourceforge.net/
Python
WxGlade
http://wxglade.sourceforge.net/
WxPython
Spe
http://pythonide.stani.be/
Python
Glade
http://glade.gnome.org/
GTK+
Gambas
http://gambas.sourceforge.net/
Basic, QT, GTK+,
12. Für Fortgeschrittene: Wie müsste man einen Zeugnisgenerator erweitern, dass er
- als Argumente notwendigerweise die Eingabe einer Klasse und fakultativ den gewünschten Schülernamen
benötigt?
- Die Daten jeder Klasse in getrennten Listen bzw. in einer Datenbank ablegt?
13. Für extrem Fortgeschrittene:
Installiere lokal einen Apache Webserver mit lauffähigem PHP-Modul und einer MySQL-Anbindung.
Schreibe nun jeweils die entsprechenden PHP oder Perl-Skripte.
Herunterladen