Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met.

Slides:



Advertisements
Verwante presentaties
Leer de namen van de noten 1
Advertisements

Module 7 – Hoofdstuk 5 (1) SQL – een begin.
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 14: Eerste echte e-commerce applicatie: Implementatie (vervolg)
OOS Object geOrienteerd Software-ontwerp - 3
PHP & MYSQL LES 03 PHP & DATABASES. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 1.
Databank van een restaurant Download op Twee tabellen: Klanten: Alle klanten die minstens.
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Van domeinklasse tot implementatie
Van Nul naar Drie Normaliseren.
Internetapplicaties - VIII Relationele Databases 1 Internetapplicaties Deel 8: Relationele Databases.
Klassen en objecten.
Leer de namen van de noten 2
Greenfoot Workshop Bobby - Snake.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
Hogeschool van Amsterdam - Interactieve Media – Internet Development – Jochem Meuwese - -
Inleidend probleem Data structuur (hiërarchie van classes)
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
Werken aan Intergenerationele Samenwerking en Expertise.
Workshop PHP Een productencatalogus Met database.
Algoritmiek Object-georiënteerd Programmeren
1 Datastructuren Introductie tot de programmeeropgaven in C++ Jan van Rijn
Java DataBase Connectivity
Hogeschool HZ Zeeland 19 augustus 2003augustus 2003 Data Structuren & Algoritmen Week 3.
Deel 9: Relationele Databases: Oef. & 1e client- server app 1 Internetapplicaties Deel 9: Relationele Databases: Oefeningen en 1e client- serverapplicatie.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
Internetapplicaties - VI Herhaling 1 Internetapplicaties Deel 6: Herhaling.
OO Analyse in de praktijk OO Analyse in de praktijk IV OO basisregels.
Internetapplicaties - V Sessies 1 Internetapplicaties Deel 5: Sessies.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XX Hosting 1 Internetapplicaties Deel XX Hosting.
Deel XII Eerste echte e-commerce applicatie (vervolg) 1 Internetapplicaties Deel 12: Eerste echte e-commerce applicatie: Ontwerp (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Deel X: JSP + Java + database 1 Internetapplicaties Deel 10: JSP + Java + database: Client Server via http.
Deel XI Eerste echte e-commerce applicatie 1 Internetapplicaties Deel 11: Eerste echte e-commerce applicatie: Ontwerp.
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
Datamodellering en –verwerking 8C020 college 9. Terugblik college week 8 Terugkoppeling opdracht deel A Toepassingen van Petri-netten in biologie Oefeningen.
Vervolg C Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Onderwerpen voor vandaag top-down decompositie Opdrachten:
Encapsulatie: Every man is an island upon himself.
Les 0 Structured Query Language SQL. Programma Les 0 – Introductieopdracht Les 1 Les 2 Les 3 Schriftelijke toets.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
ANALYSE 3 INFANL01-3 WEEK CMI Informatica.
Week 3 BIMAIV03 Les B3 BIMAIV03 Les B3. Opdracht 1 Van een artikel mogen maximaal 300 stuks verkocht worden. Verschillende klanten bestellen een aantal.
Week 6 BIMAIV03 les B1. DML en DDL ata D anipulation M anguage L ata D efinition D anguage L.
INFITT01 - Internettechnologie WEEK 3. Programma Sessies JSP.
Java & het Web Programma: Databases (jdbc, JNDI, ORM, JPA)
Week 1 BIMAIV03 Les B2 BIMAIV03 Les B2. Uit het voorgaande... CREATE TABLE... Opdracht om een nieuwe tabel binnen de database te creëren. Aandachtspunten.
Java & het Web Programma: 3rd party libraries Standard actions (E)xpression (L)anguage.
Java & het Web Programma: Sessies JSP. Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Wat is SQL (1)? SQL (Structured Query Language):  is een zeer krachtige taal met een beperkt vocabulaire (aantal ‘woorden’)  is declaratief (‘WAT’ niet.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
– Software development fundamentals
SQL Cursus deel
Gameprogrammeren: Objecten en geheugen
OOS Object geOrienteerd Software-ontwerp - 5
Software Development fundamentals
ASP.NET MVC Web Development
SQL Les 7 24 February 2019.
SQL Les 6 14 April 2019.
Software Development fundamentals
– Software development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 1 Internetapplicaties Deel 13: Eerste echte e-commerce applicatie: Enkele iteraties met implementatie

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 2 1e iteratie Cataloog-pagina  Database: product-tabel C:\mysql\bin>mysql Welcome to the MySQL monitor. Commands end with ; or \g. … mysql> create database ecomm ; … mysql> use ecomm mysql> create table product (product_id integer not null primary key, -> omschrijving char(30), -> omschrijving char(30), -> prijs decimal(12,2)); -> prijs decimal(12,2));… mysql> insert into product values (1, "Dell Dimension 1.0", ); … mysql> insert into product values (2, "Microsoft Mouse 5.0", 10.20); … mysql> insert into product values (3, "SanDisc memory 100 MB", 50.0);

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 3 1e iteratie Cataloog-pagina  GUI: cataloog.jsp (later hernoemd tot winkel.jsp) Momenteel alleen nodig: opvulling van cataloog vanuit product-tabel. Zoals gezegd: grootste deel van java-code zal niet-OO tussenlaagcode bevatten die de link legt tussen de GUI en de database.

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 4 1e iteratie Cataloog-pagina  ecomm\WEB-INF\classes\db\Dbmethoden.java Analoge code als in les 10 (Books.java) We hebben nodig: connect(), disconnect() en viewProducten()  Pas op dat de database ecomm is: con = DriverManager.getConnection( "jdbc:mysql://localhost/ecomm ?user=root&password="); "jdbc:mysql://localhost/ecomm ?user=root&password=");  viewProducten() haalt gewoon alle records uit de product-tabel: public ResultSet viewProducten() throws SQLException, Exception { ResultSet rs = null; ResultSet rs = null; try{ try{ String queryString = "SELECT * FROM Product;" ; String queryString = "SELECT * FROM Product;" ; …

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 5 1e iteratie Cataloog-pagina  ecomm\WEB-INF\classes\db\Item.java  Eenvoudige klasse die dient als type voor de items in de winkelkar. Intern worden de items in een arraylist ‘kar’ geplaatst.  Bevat voorlopig alleen een constructor en eenvoudige getters omdat dat alles wat tot nu toe nodig is. N.B. items zijn gewoon producten. Maar met één item betekent hier echt één concreet product dat je in je handen kunt houden. Dit is anders dan in de database waar bvb 1 fles Cola, precies 1 record is, terwijl er zo duizenden concrete flessen kunnen bestaan. Het is daarom dat we de onhandige ‘item’ moeten gebruiken.  ecomm\WEB-INF\classes\db\Winkelkar.java  Deze klasse bevat voorlopig niets meer dan een ArrayList voor Item- objecten.  In cataloog.jsp wordt een winkelkar als bean gebruikt met session- scope. De winkelkar blijft dus bestaan voor de duur van de sessie.

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 6 1e iteratie Cataloog-pagina  ecomm\WEB-INF\classes\db\cataloog.jsp (wordt later hernoemd tot winkel.jsp)  De linkerzijde bevat de cataloog  De rechterzijde bevat de winkelkar zoals ze in werkelijkheid is: 1 lijn per item in de kar, geen aantallen  Aan de linkerkant kun je producten toevoegen, aan de rechterkant kun je de items weer uit de kar halen.

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 7 1e iteratie Cataloog-pagina

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 8 Herziening GUI  Oorspronkelijk hadden we de volgende opsplitsing:  cataloog.jsp  winkelkar.jsp  bestelling  Technisch hadden we nooit eerder een bean (winkelkar in winkelkar.jsp) opgevuld vanuit een andere pagina (winkelkar). Daarom dacht ik de winkelkar eerst in de cataloog.jsp-pagina te zetten om te kijken of dit al zou werken. Bij nader toezien lijkt dit wel oké om zo te houden. Het is geen schande om het ontwerp aan te passen na het schrijven van wat code. Het zou erger zijn dit proces te verdoezelen en te doen of je dit vooraf had voorzien.

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 9 Herziening GUI  Wijziging:  cataloog.jsp wordt hernoemd tot winkel.jsp winkel.jsp laat zowel de catalogus als de winkelkar zien. De winkelkar heeft ‘dubbels’ zoals in een echte winkelkar. Vanuit deze pagina kun je naar overzicht.jsp gaan. De winkelkar heeft ‘dubbels’ zoals in een echte winkelkar. Vanuit deze pagina kun je naar overzicht.jsp gaan.  overzicht.jsp overzicht.jsp geeft een overzichtelijke lijst van de producten in de winkelkar met aantal stuks per product. Een product met zijn aantal is een Lijn-object. Van hieruit kun je naar bestelling.jsp gaan. overzicht.jsp geeft een overzichtelijke lijst van de producten in de winkelkar met aantal stuks per product. Een product met zijn aantal is een Lijn-object. Van hieruit kun je naar bestelling.jsp gaan.  Bestelling  N.B.: Oorspronkelijk was Item.java eigenlijk Product.java. Zie uitleg slide 5.

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 10 cataloog.jsp wordt winkel.jsp

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 11 2e iteratie overzicht-pagina  ecomm\WEB-INF\classes\db\Lijn.java  Een Lijn-object bevat een Item-object en een aantal-datafield. Dient als lijn binnen de overzicht- pagina  ecomm\WEB- INF\classes\db\Winkelkar.java  Deze klasse wordt uitgebreid met een overz- datafield die een ArrayList van Lijn-objecten is. Deze overz-arraylist moet constant up to date zijn met de kar-arraylist.

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 12 2e iteratie overzicht-pagina  ecomm\WEB-INF\classes\db\Lijn.java (excuses voor de compacte schrijfwijze) package db; public class Lijn{ public Lijn(Item item, int aantal){ public Lijn(Item item, int aantal){ this.item = item; this.item = item; this.aantal = aantal; this.aantal = aantal; } private Item item; private Item item; public Item getItem(){return item;} public Item getItem(){return item;} public int getProduct_id(){ return item.getProduct_id();} public int getProduct_id(){ return item.getProduct_id();} public String getOmschrijving(){ return item.getOmschrijving();} public String getOmschrijving(){ return item.getOmschrijving();} public double getPrijs(){ return item.getPrijs();} public double getPrijs(){ return item.getPrijs();} public double getLijnPrijs(){ return getPrijs() * aantal;} public double getLijnPrijs(){ return getPrijs() * aantal;} private int aantal; private int aantal; public int getAantal(){return aantal;} public int getAantal(){return aantal;} public void verhoogAantal(){aantal++;} public void verhoogAantal(){aantal++;} public void verlaagAantal(){aantal--;} public void verlaagAantal(){aantal--;}}

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 13 2e iteratie overzicht-pagina  ecomm\WEB- INF\classes\db\Winkelkar.java … private ArrayList overz; private ArrayList overz; public Lijn getLijn(int pos){ public Lijn getLijn(int pos){ return (Lijn) overz.get(pos); return (Lijn) overz.get(pos); } public int lijnenSize(){ public int lijnenSize(){ return overz.size(); return overz.size(); }…

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 14 2e iteratie overzicht-pagina  ecomm\WEB-INF\classes\db\Winkelkar.java (vervolg) private ArrayList kar; private ArrayList kar; public Item get(int pos){ public Item get(int pos){ return (Item) kar.get(pos); return (Item) kar.get(pos); } public void add(Item item){ public void add(Item item){ kar.add(item); kar.add(item); boolean gevonden = false; boolean gevonden = false; for (int i = 0; i < overz.size() && ! gevonden; i++){ for (int i = 0; i < overz.size() && ! gevonden; i++){ Lijn lijn = (Lijn) overz.get(i); Lijn lijn = (Lijn) overz.get(i); if ( lijn.getProduct_id() == item.getProduct_id() ){ if ( lijn.getProduct_id() == item.getProduct_id() ){ gevonden = true; gevonden = true; lijn.verhoogAantal(); lijn.verhoogAantal(); } } if ( ! gevonden ) if ( ! gevonden ) overz.add(new Lijn(item,1)); overz.add(new Lijn(item,1)); }

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 15 2e iteratie overzicht.jsp

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 16 3e iteratie: bestelling-pagina  Bestelling wordt geïdentificeerd met de session-id, die eventueel later kan ingegeven worden om de toestand van de bestelling te checken.  Eerst proberen we gewoon de bestelling te bewaren zonder ons iets aan te trekken van wie die bestelling gedaan heeft. We crëeren dus bestellingen zonder klanten (in tegenstelling tot ons database-model)  Later breiden we uit met klanteninformatie (4e iteratie). Zo hadden we het ook gemodelleerd:  Een bestelling kan niet bestaan zonder zijn klant

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 17 3e iteratie: bestelling-pagina  Database: bestelling-tabel Klant_id en date mogen voorlopig null zijn. In de derde iteratie MOET klant_id een bestaande klant zijn. Bestelling_id zal de sessionID bevatten Klant_id en date mogen voorlopig null zijn. In de derde iteratie MOET klant_id een bestaande klant zijn. Bestelling_id zal de sessionID bevatten C :\mysql\bin>mysql mysql> use ecomm mysql> create table bestelling( -> bestelling_id CHAR(50) NOT NULL PRIMARY KEY, -> bestelling_id CHAR(50) NOT NULL PRIMARY KEY, -> klant_id integer, datum date); -> klant_id integer, datum date);  Database: besteldproduct-tabel mysql> create table besteldproduct ( bestelling_id CHAR(50) NOT NULL, -> product_id integer NOT NULL, -> product_id integer NOT NULL, -> aantal integer NOT NULL ); -> aantal integer NOT NULL );

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 18 3e iteratie: bestelling-pagina  Database: bestelling-tabel Na enkele bestellingen kunnen we de geregistreerde bestellingen eens bekijken: Na enkele bestellingen kunnen we de geregistreerde bestellingen eens bekijken: mysql> select bestelling.*, besteldproduct.aantal, product.omschrijving -> from bestelling, besteldproduct, product -> from bestelling, besteldproduct, product -> where bestelling.bestelling_id = besteldproduct.bestelling_id AND -> where bestelling.bestelling_id = besteldproduct.bestelling_id AND -> besteldproduct.product_id = product.product_id -> besteldproduct.product_id = product.product_id -> order by bestelling.bestelling_id, product.omschrijving; -> order by bestelling.bestelling_id, product.omschrijving; | bestelling_id | klant_id | datum | aantal | omschrijving | 5D1547BB747B37970DF20C00AD | NULL | NULL | 1 | Dell Dimension | 5D1547BB747B37970DF20C00AD | NULL | NULL | 3 | Microsoft Mouse | 5D1547BB747B37970DF20C00AD | NULL | NULL | 1 | SanDisc memory | 8A70C2ED57F89D20E6C FEAD | NULL | NULL | 3 | Microsoft Mouse | 8A70C2ED57F89D20E6C FEAD | NULL | NULL | 1 | SanDisc memory | C0BC4C95DC107632D04AD5DD70FBD3CB | NULL | NULL | 4 | Dell Dimension | CBDA50D51482DFA D21FC8 | NULL | NULL | 5 | Dell Dimension | CBDA50D51482DFA D21FC8 | NULL | NULL | 2 | Microsoft Mouse

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 19 3e iteratie: bestelling-pagina  Dbmethoden.java: public void addBestelling(Winkelkar winkelkar, String sessionId) throws SQLException, Exception { public void addBestelling(Winkelkar winkelkar, String sessionId) throws SQLException, Exception { if (con != null) { if (con != null) { try{ try{ PreparedStatement updateBestelling; PreparedStatement updateBestelling; updateBestelling = con.prepareStatement( updateBestelling = con.prepareStatement( "INSERT INTO bestelling VALUES(?,NULL,NULL)"); "INSERT INTO bestelling VALUES(?,NULL,NULL)"); updateBestelling.setString(1,sessionId); updateBestelling.setString(1,sessionId); updateBestelling.execute(); updateBestelling.execute(); PreparedStatement updateBesteldProduct; PreparedStatement updateBesteldProduct; for (int i = 0; i < winkelkar.lijnenSize(); i++ ){ for (int i = 0; i < winkelkar.lijnenSize(); i++ ){ Lijn lijn = winkelkar.getLijn(i); Lijn lijn = winkelkar.getLijn(i); updateBesteldProduct = con.prepareStatement( updateBesteldProduct = con.prepareStatement( "INSERT INTO besteldproduct VALUES(?,?,?)"); "INSERT INTO besteldproduct VALUES(?,?,?)"); updateBesteldProduct.setString(1,sessionId); updateBesteldProduct.setString(1,sessionId); updateBesteldProduct.setInt(2,lijn.getProduct_id()); updateBesteldProduct.setInt(2,lijn.getProduct_id()); updateBesteldProduct.setInt(3,lijn.getAantal()); updateBesteldProduct.setInt(3,lijn.getAantal()); updateBesteldProduct.execute(); updateBesteldProduct.execute(); } …

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 20 3e iteratie: bestelling-pagina

Deel XIII Eerste echte e-commerce applicatie (iteraties + impl ) 21 4e iteratie: klant-gegevens  Voorlopig zien we het zo:  userid, paswoord combinatie bestaat  bestelling wordt toegevoegd aan de database  userid bestaat, paswoord niet  foutpagina  userid bestaat niet  Klantgegevens worden opgevraagd  klant wordt toegevoegd  bestelling wordt toegevoegd aan de database