Prof. Dr. Alois Schütte1 Web-basierte Verbuchung eines Wareneingangs Alois Schütte schuette/...
-
Upload
adelonda-werder -
Category
Documents
-
view
114 -
download
2
Embed Size (px)
Transcript of Prof. Dr. Alois Schütte1 Web-basierte Verbuchung eines Wareneingangs Alois Schütte schuette/...

Prof. Dr. Alois Schütte 1
Web-basierte Verbuchung eines Wareneingangs
Alois Schütte http://www.fbi.fh-darmstadt.de/~schuette/
Inhalt Problemstellung Projekt „Wertpapiergeschäft - Erfassen und Buchen“
Analyse Konzeption Realisierung
Diskussion

Prof. Dr. Alois Schütte 2
Problemstellung
Eine Bank braucht eine Anwendung, bei der eine Einlieferung von Wertpapieren (Wareneingang)
z.B. 100 Apple-Aktion (mengenmäßig) zum aktuellen Kurs (wertmäßig)
in ein Kundendepot über ein Web-Frontend von einem Bankmitarbeiter für einen Bank-Kunden durchgeführt werden kann.
Die IT-Abteilung der Bank gibt vor, dass die Anwendung über eine bestehende 3-Ebenen-Architektur auf die Backend-Daten (Depots, Kunden, ...) zugreift. Die Datenhaltung soll in der Anwendung selbst in einer eigenen
relationalen freien Datenbank erfolgen. Die Schnittstelle zu den Bank-eigenen Systemen erfolgt durch die
Bank. Live Demo http://hal.local/WP/php/

Prof. Dr. Alois Schütte 3
Analyse
Wir als Softwarehaus haben Erfahrung mit Php und MySql Aus der Problemstellung leiten sich 3 Komponenten ab:
Visualisierung mittels HTML in einem Web-Browser (keine Java-Anwendung)
Anwendungslogik per Php auf einem Anwendungs-Server (keine J2EE Anwendung)
Speicherung in einer MySql-Datenbank
Aus den Anforderungen resultiert folgende Anwendungsarchitektur:
Application-Server
DatenbankServer
Backend-Systeme
Visualisierung Anwendungslogik Speicherung

Prof. Dr. Alois Schütte 4
Analyse
Beteiligte Projektmitarbeiten werden benötigt aus den Bereichen: Design (HTML-Masken) Programmierung (Php) Datenbankspezialisten (MySql)
Der Kern der Anwendung ist ein Datenmodell, dass die Speicherung von WP-Transaktionen für Kunden abbilden kann.

Prof. Dr. Alois Schütte 5
Konzeption: ER-Modell
Der konzeptionelle Entwurf ist der Vorgang, bei dem das konzeptionelle Modell aus der Realität abgeleitet wird. Er mündet im konzeptionellen Datenmodell. Als Modell für die konzeptionelle Phase verwenden wird das Entity-Relationship Modell. Es definiert die Entitäten einer Anwendung zusammen mit ihren Beziehungen:
Entity (Objekttyp): Rechteck
Relationship (Beziehungstyp): Raute
Attribute: Ovale
Beziehungsart
Kunde
besitzt
KuNr
1 n

Prof. Dr. Alois Schütte 6
Konzeption: ER-Modell (Ausschnitt) - Entitäten
Kunde
KuNr
Name
Adresse

Prof. Dr. Alois Schütte 7
Konzeption: ER-Modell (Ausschnitt) - Entitäten
Kunde
KuNr
Name
Adresse
Depot
DeNr
Abr-Konto
WertAuf eine valutengerechteBetrachtung wird der Einfachheit halber verzichtet.

Prof. Dr. Alois Schütte 8
Konzeption: ER-Modell (Ausschnitt) - Entitäten
Kunde Depot
KuNr
Name
Adresse
DeNr
Abr-Konto
Wert
Wertpapier
WKN
Kurs
Bez.
Auf eine valutengerechteBetrachtung wird der Einfachheit halber verzichtet.

Prof. Dr. Alois Schütte 9
Konzeption: ER-Modell (Ausschnitt) - Beziehungen
Kunde Depot
KuNr
Name
Adresse
DeNr
Abr-Konto
Wert
Wertpapier
WKN
Kurs
besitzt
Bez.
n1
Auf eine valutengerechteBetrachtung wird der Einfachheit halber verzichtet.
1 zu n

Prof. Dr. Alois Schütte 10
Konzeption: ER-Modell (Ausschnitt) - Beziehungen
Kunde Depot
KuNr
Name
Adresse
DeNr
Abr-Konto
Wert
Wertpapier
WKN
Kurs
besitzt beinhaltet
Bez.
n1 nm
Anzahl
Auf eine valutengerechteBetrachtung wird der Einfachheit halber verzichtet.
n zu m

Prof. Dr. Alois Schütte 11
Konzeption: ER-Modell (Ausschnitt) - Beziehungen
Kunde Depot
KuNr
Name
Adresse
DeNr
Abr-Konto
Wert
Wertpapier
WKN
Kurs
besitzt beinhaltet
Bez.
n1 nmn
m
OrderNr
ordertkauft/verkauft
Anzahl
Anzahl
Auf eine valutengerechteBetrachtung wird der Einfachheit halber verzichtet.
3 stellig

Prof. Dr. Alois Schütte 12
Konzeption: ER-Modell -> Relationalen Modell
Verfahren: ER-Modell -> Relationenmodell: Abbildung von Entity-Typen auf Relationenschematas Abbildung von Beziehungstypen auf Relationenschemata Attribute werden zu Attributen des Relationenschemas Schlüssel werden übernommen Wenn möglich: Verschmelzung von Relationenschemata von Entity-
und Beziehungstypen Einführung von Fremdschlüsseln in verbleibenden
Relationenschemata zur Referenzierung der Entities Normalisierung des entstandenen Schemas

Prof. Dr. Alois Schütte 13
Konzeption: ER-Modell -> Relationalen Modell
Kunde
KuNr
Name
Adresse
Name Attribut:Type
Kunde KuNr: Integer
Name:String
Adresse:String
Entität Relation

Prof. Dr. Alois Schütte 14
Konzeption: ER-Modell -> Relationalen Modell
Name Attribut:Type
beinhaltet(WpBestand)
DeNr: Integer
WKN:String
Anzahl:Integer
Beziehung Relation
Depot
DeNr
Abr-Konto
Wert
Wertpapier
WKN
Kurs
beinhaltet
Bez.
nm
Anzahl

Prof. Dr. Alois Schütte 15
Konzeption: Relationenschema
Name Attribut_ Typ
Kunde KuNr:Integer
Name:String
Adresse:String
Depot DeNr:Integer
KuNr:Kunde.KuNr
Wert:String
KoNr:Konto.KoNr
Wertpapier WKN:Integer
Bezeichnung:String
Kurs:Float
WpBestand DeNr:Integer
WKN:Wertpapier.WKN
Anzahl:Integer
WpUmsatz OrNr:Integer
DeNr:Depot.DeNr
Ausführung:Date
WKN:Integer
Anzahl:Integer
Konto KoNr:Integer
KuNr:Kunde.KuNr
Saldo:Float
GeldUmsatz UmNr:Integer
KoNr:Kunde.KuNr
Ausführung:Date
Betrag:Float
Relationenschema insgesamt (nach Vereinfachung und Normalisierung)

Prof. Dr. Alois Schütte 16
Konzeption: Design
Die Konzeption der Design-Komponente wird hier nicht näher betrachtet.
Als einzigen Aspekt wird die Anforderung nach Validierung von Formularfeldern erörtert: In Formularfelder soll die Benutzereingabe auf
korrekte Typen sinnvolle Wertegeprüft werden.
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (LZW)“
benötigt.

Prof. Dr. Alois Schütte 17
Konzeption: Anwendungslogik
Php bietet die Möglichkeit, objektorientiert zu programmieren. Somit sind die elementaren Bestandteile in Klassen zu „verpacken“. Grundlegende Funktionalitäten, z.B.:
Allgemeiner Datenbankzugriff Benutzerauthentifizierung Kursimport
Klassen für Entitäten, Beziehungen und Anwendungsfunktionalitäten, z.B.: Kunde Buchen
Der Zugriff auf eine MySQL-Datenbank erfolgt über Php spezifische API‘s.

Prof. Dr. Alois Schütte 18
Realisierung: Datenbank
Aus dem Relationenschema wird nach dem konzeptionellen Entwurfs eine Datenbank erzeugt, die dann Ausgangspunkt für die Implementierung ist.
SQL-Anweisungen:create table kunde ( KuNr integer primary key, Name varchar(100), Adresse varchar(100)) type=innodb;
create table konto ( KoNr integer primary key, KuNr integer not null references kunde.KuNr on delete cascade, Saldo float) type=innodb;...
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (LZW)“
benötigt.

Prof. Dr. Alois Schütte 19
Realisierung: Anwendungslogik - Grundlage Php
Die Anwendungslogik wird in Php realisiert. Im praktischen Umfeld würde man große Teile allerdings in PL/SQL als Stored-Procedure umsetzen.
Php ist Server-seitig ausführbarer Kode, der in HTML-Seiten eingefügt ist und vom Server ausgeführt wird, wenn die HTML Seite aufgerufen wird. Das Ergebnis ist eine an der aufrufenden Browser zurück gelieferte HTML-Seite.
Php Beispiel:http://hal.local/WP/php/erstesProgramm.php
<html>
<head><title>Beispiel</title>
</head>
<body>
<p>php start </p>
<?php
echo "Hallo, ich bin ein PHP-Skript!";
?>
<p>php end</p>
</body>
</html>

Prof. Dr. Alois Schütte 20
Realisierung: Anwendungslogik - Datenbankzugriff
Der Zugriff auf unsere Datenbank erfolgt mittels eine selbst definierten Php-Klasse über Php-API‘s zum Zugriff auf eine MySql Datenbank:
<?phpclass DB { var $host = "localhost"; var $user = "jenni"; var $passwd = "lopez"; var $database = "wp";
function connect() { // Verbindung zur Datenbank $db = mysql_pconnect($this->host, $this->user, $this->passwd) or die("Verbindung zum MySQL Server fehlgeschlagen!"); mysql_select_db($this->database, $db) or die("Verbindung mit $this->database fehlgeschlagen!<br>"); return $db; } function close($db) { // Verbindung zur Datenbank abbrechen mysql_close($db) ; }}?>

Prof. Dr. Alois Schütte 21
Realisierung: Anwendungslogik - Erzeugung dynamischer Inhalte
Als Beispiel für den Zugriff auf Daten in der Datenbank betrachten wir die Kursabfrage (//hal.local/WP/php/):
require_once("class/db.php"); // Datenbank Klasse$wpDB = new DB;$db = $wpDB->connect();// DB Query definieren$sql_query = "SELECT wkn, bezeichnung, kurs " ."FROM wertpapier “;// Query an Datenbank$result = mysql_query($sql_query, $db);echo "<table>";echo " <tr>";echo " <td>WKN</td><td>Bezeichnung</td><td>Kurs</td>";echo " </tr>";while ($row = mysql_fetch_array($result)) { echo " <tr>"; echo " <td>".$row["wkn"]."</td>"; echo " <td>".$row["bezeichnung"]."</td>"; echo " <td>“.$row["kurs"]</td>"; echo " </tr>";} // whileecho "</table>";

Prof. Dr. Alois Schütte 22
Realisierung : Anwendungslogik - Buchen, Php-Klasse definieren
Die eigentliche Buchungslogik ist als Php-Klasse realisiert, in der es Methoden für Wp- und Geld-Transaktionen gibt.
Dabei ist z.B. in der Methode WpKauf, die Geld- und Stückeseite zusammengefasst, so dass die buchhalterischen Einzelaktionen in einer Transaktion gekapselt sind.
class Buchung {... function wpKauf($kunr, $denr, $wkn, $anzahl) { ... // Stückebuchung $resWp = $this->wpOrder($kunr, $denr, $wkn, $anzahl); $sql_query = "select konr from depot " // Geld-Konto zum Depot ... $sql_query = "select kurs from wertpapier " // WP Kurs zur WKN ... $kurs = $row[kurs]; ... $betrag = $anzahl * $kurs; // Geldbuchung $resGeld = $this->belastung($kunr, $konr, $betrag); ...

Prof. Dr. Alois Schütte 23
Realisierung : Anwendungslogik - Buchen, Php-Klasse verwenden
Verwendung der Klasse „buchen“, um WP-Kauf durchzuführen (//hal.local/WP/php/):
<body><?phprequire_once("class/buchen.php");$kunr = $HTTP_POST_VARS["kunr"]; // Werte vom Aufruf der Seite ...// Bestaetigungstextecho "<span style='font-family: Verdana;'>";echo $kuname.",<br><br>";echo "Sie haben folgende <b>WP Kauf</b> abgeschlossen:<br>";echo "Ihr Depot: ".$denr."<br>";echo "Wertpapier: ".$wpinfo."<br>";echo "Anzahl: ".$anzahl."<br><br>";// Buchen durchfuehren mit Methode der Klasse Buchung$buchung = new Buchung();$resultat = $buchung->wpKauf($kunr, $denr, $wkn, $anzahl);if ($resultat) echo "Der Kauf ist gebucht!";else echo "Kauf wg. techn. Probleme nicht gebucht!";?></body>
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (LZW)“
benötigt.

Prof. Dr. Alois Schütte 24
Realisierung: Design
Die Realisierung der Design-Komponente betrachtet nur die Thematik der Validierung von Formularelementen.
Die Validierung kann Client-seitig oder Server-seitig erfolgen: Client-seitig ohne Server-Zugriff mit JavaScript Server-seitig mit Php http://hal.local/WP/php/

Prof. Dr. Alois Schütte 25
Realisierung: Design - Validierung von Formulardaten, JavaScript
<html><head><script language="JavaScript"> function testeZahl(str) { var reg = /^[0-9]+$/; if (!reg.exec(str) || str <= 0 ) return false; return true; } function add(x ,y) { var res; if (!(testeZahl(x) && testeZahl(y))) { alert("Bitte pos. Zahl eingeben!"); } res = parseInt(x) + parseInt(y); return res; }</script></head><body>...
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (LZW)“
benötigt.
Funktionsdefinition in JavaScript

Prof. Dr. Alois Schütte 26
Realisierung: Design - Validierung von Formulardaten, JavaScript
<html><head><script language="JavaScript"> ...</script></head><body> ... <form method="get" name="Bestand"> <input type="button" value="berechne" name="rechnen" onclick="document.Bestand.neu.value = add(document.Bestand.alt.value, document.Bestand.veraenderung.value );" > </form></body></html>
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (LZW)“
benötigt.
Funktionsaufruf in JavaScript

Prof. Dr. Alois Schütte 27
Realisierung: Design - Validierung von Formulardaten, Php
<html><head></head><body> ... <form method="get" name="Bestand" action="Bestandsrechner.php"> ... <input type="submit" value="berechne" name="rechnen">
</form></body></html>
Formularanzeige
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (LZW)“
benötigt.

Prof. Dr. Alois Schütte 28
Realisierung: Design - Validierung von Formulardaten, Php
<html><head></head><body><?php $alt = $HTTP_GET_VARS["alt"]; $ver = $HTTP_GET_VARS["veraenderung"]; if (isset($alt) && isset($ver)) {// Wurde Formular bereits ausgefüllt, // dann erfolgt hier Verarbeitung // der gesendeten Daten $neu = $alt + $ver; echo "Neuer Bestand: " . $neu; } else // zeige Formular {?><form method="get" name="Bestand" action="Bestandsrechner.php">...</form><?php}?></body></html>
Von Php neu erzeugte Ergebnisseite
Zur Anzeige wird der QuickTime™ Dekompressor „TIFF (LZW)“
benötigt.

Prof. Dr. Alois Schütte 29
Diskussion
Test und Going Live sind wichtige Phasen, die wir hier unberücksichtigt lassen.
Vielen Dank für Ihre Aufmerksamkeit! ??