KuNr

Werbung
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
1
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
2
Analyse

Aus den Anforderungen resultiert folgende Anwendungsarchitektur:
ApplicationServer
Datenbank
Server
BackendSysteme
Visualisierung


Anwendungslogik
Speicherung
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 JavaAnwendung)
 Anwendungslogik per Php auf einem Anwendungs-Server (keine
J2EE Anwendung)
 Speicherung in einer MySql-Datenbank
Prof. Dr. Alois Schütte
3
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
4
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 EntityRelationship Modell. Es definiert die Entitäten einer Anwendung
zusammen mit ihren Beziehungen:
 Entity (Objekttyp): Rechteck
Kunde

Relationship (Beziehungstyp): Raute
besitzt

Attribute: Ovale

Beziehungsart
KuNr
1
Prof. Dr. Alois Schütte
n
5
Konzeption:
ER-Modell (Ausschnitt) - Entitäten
Kunde
KuNr
Name
Adresse
Prof. Dr. Alois Schütte
6
Konzeption:
Kunde
ER-Modell (Ausschnitt) - Entitäten
Depot
KuNr
DeNr
Name
Abr-Konto
Adresse
Prof. Dr. Alois Schütte
Wert
Auf eine valutengerechte
Betrachtung wird der
Einfachheit halber verzichtet.
7
Konzeption:
ER-Modell (Ausschnitt) - Entitäten
Kurs
Bez.
WKN
Wertpapier
Kunde
Depot
KuNr
DeNr
Name
Abr-Konto
Adresse
Prof. Dr. Alois Schütte
Wert
Auf eine valutengerechte
Betrachtung wird der
Einfachheit halber verzichtet.
8
Konzeption:
ER-Modell (Ausschnitt) - Beziehungen
Kurs
1 zu n
Bez.
WKN
Wertpapier
Kunde
1
besitzt
n
Depot
KuNr
DeNr
Name
Abr-Konto
Adresse
Prof. Dr. Alois Schütte
Wert
Auf eine valutengerechte
Betrachtung wird der
Einfachheit halber verzichtet.
9
Konzeption:
ER-Modell (Ausschnitt) - Beziehungen
Kurs
n zu m
Bez.
WKN
Wertpapier
m
Kunde
1
besitzt
n
Depot
n
KuNr
DeNr
Name
Abr-Konto
Adresse
Prof. Dr. Alois Schütte
Wert
beinhaltet
Anzahl
Auf eine valutengerechte
Betrachtung wird der
Einfachheit halber verzichtet.
10
Konzeption:
ER-Modell (Ausschnitt) - Beziehungen
Kurs
3 stellig
Anzahl
Bez.
OrderNr
WKN
m
ordert
kauft/verkauft
n
Wertpapier
m
Kunde
1
besitzt
n
Depot
n
KuNr
DeNr
Name
Abr-Konto
Adresse
Prof. Dr. Alois Schütte
Wert
beinhaltet
Anzahl
Auf eine valutengerechte
Betrachtung wird der
Einfachheit halber verzichtet.
11
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 Entityund Beziehungstypen
 Einführung von Fremdschlüsseln in verbleibenden
Relationenschemata zur Referenzierung der Entities
Normalisierung des entstandenen Schemas
Prof. Dr. Alois Schütte
12
Konzeption:
Entität
Kunde
KuNr
ER-Modell -> Relationalen Modell
Relation
Name
Kunde
Attribut:Type
KuNr:
Integer
Name:
String
Adresse:
String
Name
Adresse
Prof. Dr. Alois Schütte
13
Konzeption:
ER-Modell -> Relationalen Modell
Beziehung
Relation
Kurs
Bez.
WKN
Wertpapier
m
Depot
n
beinhaltet
DeNr
Abr-Konto
Anzahl
Name
beinhaltet
(WpBestand)
Attribut:Type
DeNr:
Integer
WKN:
String
Anzahl:
Integer
Wert
Prof. Dr. Alois Schütte
14
Konzeption:
Relationenschema
Relationenschema insgesamt (nach Vereinfachung und Normalisierung)
Name
Attribut_ Typ
Kunde
KuNr:
Integer
Name:
String
Adresse:
String
Depot
DeNr:
Integer
KuNr:
Kunde.KuNr
Wert:
String
Wertpapier
WKN:
Integer
Bezeichnung:
String
Kurs:
Float
WpBestand
DeNr:
Integer
WKN:
Wertpapier.WKN
Anzahl:
Integer
WpUmsatz
OrNr:
Integer
DeNr:
Depot.DeNr
Ausführung:
Date
Konto
KoNr:
Integer
KuNr:
Kunde.KuNr
Saldo:
Float
GeldUmsatz
UmNr:
Integer
KoNr:
Kunde.KuNr
Ausführung:
Date
Prof. Dr. Alois Schütte
KoNr:
Konto.KoNr
WKN:
Integer
Anzahl:
Integer
Betrag:
Float
15
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 Werte
geprüft werden.
Zur Anzeige wird der QuickTime™
Dekompressor „TIFF (LZW)“
benötigt.
Prof. Dr. Alois Schütte
16
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
17
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;
Zur Anzeige wird der QuickTime™
Dekompressor „TIFF (LZW)“
benötigt.
create table konto (
KoNr
integer primary key,
KuNr
integer not null references kunde.KuNr
on delete cascade,
Saldo
float
) type=innodb;
...
Prof. Dr. Alois Schütte
18
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
19
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:
<?php
class
var
var
var
var
DB {
$host = "localhost";
$user = "jenni";
$passwd = "lopez";
$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
20
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>";
} // while
echo "</table>";
Prof. Dr. Alois Schütte
21
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
22
Realisierung :

Anwendungslogik - Buchen, Php-Klasse verwenden
Verwendung der Klasse „buchen“, um WP-Kauf durchzuführen
(//hal.local/WP/php/):
<body>
<?php
Zur Anzeige wird der QuickTime™
Dekompressor „TIFF (LZW)“
require_once("class/buchen.php");
benötigt.
$kunr
= $HTTP_POST_VARS["kunr"]; // Werte vom Aufruf der Seite
...
// Bestaetigungstext
echo "<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>
Prof. Dr. Alois Schütte
23
Realisierung:


Die
der
Die



Design
Realisierung der Design-Komponente betrachtet nur die Thematik
Validierung von Formularelementen.
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
24
Realisierung:

Design - Validierung von Formulardaten, JavaScript
Funktionsdefinition in 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;
Zur Anzeige wird der QuickTime™
}
Dekompressor „TIFF (LZW)“
</script>
benötigt.
</head>
<body>
...
Prof. Dr. Alois Schütte
25
Realisierung:

Design - Validierung von Formulardaten, JavaScript
Funktionsaufruf in 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>
Zur Anzeige wird der QuickTime™
</body>
Dekompressor „TIFF (LZW)“
benötigt.
</html>
Prof. Dr. Alois Schütte
26
Realisierung:

Design - Validierung von Formulardaten, Php
Formularanzeige
<html>
<head>
</head>
<body>
...
<form method="get" name="Bestand" action="Bestandsrechner.php">
...
<input type="submit" value="berechne" name="rechnen">
</form>
</body>
</html>
Zur Anzeige wird der QuickTime™
Dekompressor „TIFF (LZW)“
benötigt.
Prof. Dr. Alois Schütte
27
Realisierung:

Design - Validierung von Formulardaten, Php
Von Php neu erzeugte Ergebnisseite
<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
}
Zur Anzeige wird der QuickTime™
Dekompressor „TIFF (LZW)“
?>
benötigt.
</body>
</html>
Prof. Dr. Alois Schütte
28
Diskussion



Test und Going Live sind wichtige Phasen, die wir hier unberücksichtigt
lassen.
Vielen Dank für Ihre Aufmerksamkeit!
??
Prof. Dr. Alois Schütte
29
Herunterladen