Bartosz Jachnik - Kino I. Opis bazy Prezentowana baza danych stworzona została na potrzeby prowadzenia kina. Zawiera ona 8 tabel, które opisują filmy grane w danym okresie w kinie, wraz ze szczegółowym opisem oraz cały harmonogram seansów. Film opisany jest przez cały szereg własności, w naszej bazie znajdziemy np. informacje na temat jego reżysera, obsady, grupy wiekowej dla jakiej jest przeznaczony oraz technologi w jakiej można go obejrzeć w naszym kinie (3D, 48fps itp.). Podstawową funkcjonalnością jest rezerwacja miejsc na dane seanse. Rezerwacja ta odbywa się pod warunkiem istnienia wolnych miejsc w sali w której odbędzie się seans. Rezerwacja obsługiwana jest przez specjalny wyzwalacz. Znajdziemy też informacje o rodzaju danego filmu. Podobnie wiele informacji znajdziemy na temat konkretnego już seansu, na który możemy się zapisać. Kluczową informacją jest tu maksymalna liczba wolnych miejsc na danej sali. Wprowadzanie danych do bazy obwarowane jest dodatkowo więzami CHECK które uniemożliwiają wprowadzenie seansu który zakończył się jeszcze przed swoim rozpoczęciem, czy który odbywać miałby się w nieistniejącej sali. Baza danych zaopatrzona jest w bardzo proste i niestety nie dokończone GUI napisane w języku JAVA. GUI to pozwala niestety jedynie na wyświetlanie zawartości niektórych tabel. Baza została uzupełniona pewną liczbą przykładowych rekordów. II. Najważniejsze tabele i klucze Baza danych Kino składa się z następujących tabeli: - Film, z kluczem głównym kod filmu - Rodzaje, zawierającą rodzaje wszystkich filmów granych w naszym kinie - Twórcy, w której znajdziemy dodatkowe informacje o twórcach danego filmu i jego obsadzie - Seans, której krotki odpowiadają konkretnym seansom, wraz z ich datami, godzinami rozpoczęcia i zakończenia oraz numerami sal w których dany seans się odbędzie. CREATE DATABASE Kino; III. Kod SQL DROP TABLE film CASCADE; CREATE TABLE IF NOT EXISTS film ( kod_filmu VARCHAR(10) NOT NULL, rodzaj_filmu VARCHAR(20), tytul_filmu VARCHAR(50) NOT NULL UNIQUE DROP TABLE rodzaje CASCADE; CREATE TABLE IF NOT EXISTS rodzaje ( rodzaj VARCHAR(20) NOT NULL DROP TABLE legenda CASCADE; CREATE TABLE IF NOT EXISTS legenda ( skrot VARCHAR(5) NOT NULL, opis TEXT NOT NULL DROP TABLE info CASCADE; CREATE TABLE IF NOT EXISTS info ( kod_filmu VARCHAR(10) NOT NULL, skrot VARCHAR(5) NOT NULL
DROP TABLE seans CASCADE; CREATE TABLE IF NOT EXISTS seans ( kod_seansu SERIAL NOT NULL, kod_filmu VARCHAR (20) NOT NULL, nr_sali INTEGER NOT NULL, data DATE NOT NULL, czas_rozpoczecia TIME NOT NULL, czas_zakonczenia TIME NOT NULL DROP TABLE sala CASCADE; CREATE TABLE IF NOT EXISTS sala ( kod_sali VARCHAR (10) NOT NULL, nr_sali INTEGER NOT NULL, liczba_miejsc INTEGER NOT NULL DROP TABLE tworcy CASCADE; CREATE TABLE IF NOT EXISTS tworcy ( kod_filmu VARCHAR (10) NOT NULL, rezyser VARCHAR (40) NOT NULL, scenariusz VARCHAR (40) NOT NULL, obsada TEXT DROP TABLE zarezerwowane_miejsca CASCADE; CREATE TABLE IF NOT EXISTS zarezerwowane_miejsca ( kod_seansu SERIAL NOT NULL, zarezerwowane_m INTEGER NOT NULL ALTER TABLE film ADD PRIMARY KEY (kod_filmu ALTER TABLE rodzaje ADD PRIMARY KEY (rodzaj ALTER TABLE legenda ADD PRIMARY KEY (skrot ALTER TABLE info ADD PRIMARY KEY (kod_filmu,skrot ALTER TABLE tworcy ADD PRIMARY KEY (kod_filmu ALTER TABLE seans ADD PRIMARY KEY (kod_seansu ALTER TABLE sala ADD PRIMARY KEY (kod_sali ALTER TABLE film ADD FOREIGN KEY (rodzaj_filmu) REFERENCES rodzaje(rodzaj) ALTER TABLE info ADD FOREIGN KEY (kod_filmu) REFERENCES film(kod_filmu) ALTER TABLE info ADD FOREIGN KEY (skrot) REFERENCES legenda(skrot) ALTER TABLE tworcy ADD FOREIGN KEY (kod_filmu) REFERENCES film(kod_filmu) ALTER TABLE seans ADD FOREIGN KEY (kod_filmu) REFERENCES film(kod_filmu) --ALTER TABLE sala ADD FOREIGN KEY (nr_sali) REFERENCES seans(nr_sali) -- ALTER TABLE zarezerwowane_miejsca ADD FOREIGN KEY (kod_seansu) REFERENCES seans(kod_seansu) ALTER TABLE seans ADD CHECK (nr_sali IN (1,2,3,4) ALTER TABLE seans ADD CHECK (czas_rozpoczecia<=czas_zakonczenia INSERT INTO rodzaje (rodzaj) VALUES ('sensacyjny'),('komedia'),('obyczajowy'), ('western'),('dramat'),('science-fiction'),('gangsterski'),('przygodowy' INSERT INTO film (kod_filmu,rodzaj_filmu,tytul_filmu) VALUES ('PF1994QT','sensacyjny','Pulp Fiction'
INSERT INTO film (kod_filmu,rodzaj_filmu,tytul_filmu) VALUES ('OC1972FFC','gangsterski','Ojciec Chrzestny' INSERT INTO film (kod_filmu,rodzaj_filmu,tytul_filmu) VALUES ('OBC1994BS','dramat','Orbitowanie bez cukru' INSERT INTO film (kod_filmu,rodzaj_filmu,tytul_filmu) VALUES ('PZK2003GV','przygodowy','Piraci z Karaibów' INSERT INTO legenda (skrot,opis) VALUES ('3D', 'Seans w 3D' INSERT INTO legenda (skrot,opis) VALUES ('48fps','Film emitowany w technologii 48fps' INSERT INTO legenda (skrot,opis) VALUES ('18+','Film przeznaczony dla widzów dorosłych' INSERT INTO info (kod_filmu, skrot) VALUES ('PF1994QT', '18+' INSERT INTO info (kod_filmu, skrot) VALUES ('OC1972FFC', '18+' INSERT INTO info (kod_filmu, skrot) VALUES ('OBC1994BS', '48fps' INSERT INTO info (kod_filmu, skrot) VALUES ('PZK2003GV', '3D' ('PF1994QT','Quentin Tarantino','Quentin Tarantino','John Travolta, Samuel L. Jackson, Bruce Willis, Uma Thurman' ('OC1972FFC','Francis Ford Coppola','Mario Puzo','Marlon Brando, Al Pacino, James Caan, Robert Duvall, Diane Keaton' ('OBC1994BS','Ben Stiller','Helen Childres','Winona Ryder, Ethan Hawke, Ben Stiller' ('PZK2003GV','Gore Verbinski','Ted Elliot','Johnny Depp, Orlando Bloom, Keira Knightley, Geoffrey Rush' (1,'PF1994QT',1,'2014-01-01','17:05:00','19:30:00' (2,'PF1994QT',1,'2014-01-01','19:45:00','22:20:00' (3,'PF1994QT',1,'2014-01-02','17:05:00','19:30:00' (4,'PF1994QT',1,'2014-01-02','19:45:00','22:20:00' (5,'OC1972FFC',2,'2014-01-01','17:05:00','19:30:00' (6,'OC1972FFC',2,'2014-01-01','19:45:00','22:20:00' (7,'OC1972FFC',2,'2014-01-02','17:05:00','19:30:00' (8,'OC1972FFC',2,'2014-01-02','19:45:00','22:20:00' (9,'OC1972FFC',2,'2014-01-03','17:05:00','19:30:00' (10,'OC1972FFC',2,'2014-01-03','19:45:00','22:20:00' (11,'OBC1994BS',3,'2014-01-01','17:05:00','19:30:00'
(12,'OBC1994BS',3,'2014-01-01','19:45:00','22:20:00' (13,'OBC1994BS',3,'2014-01-02','17:05:00','19:30:00' (14,'OBC1994BS',3,'2014-01-02','19:45:00','22:20:00' (15,'PZK2003GV',4,'2014-01-01','17:05:00','19:30:00' (16,'PZK2003GV',4,'2014-01-01','19:45:00','22:20:00' (17,'PZK2003GV',4,'2014-01-02','17:05:00','19:30:00' (18,'PZK2003GV',4,'2014-01-02','19:45:00','22:20:00' INSERT INTO sala (kod_sali,nr_sali,liczba_miejsc) VALUES ('S1',1,100 INSERT INTO sala (kod_sali,nr_sali,liczba_miejsc) VALUES ('S2',2,125 INSERT INTO sala (kod_sali,nr_sali,liczba_miejsc) VALUES ('S3',3,150 INSERT INTO sala (kod_sali,nr_sali,liczba_miejsc) VALUES ('S4',4,200 DROP TRIGGER IF EXISTS UpdateTrigger ON zarezerwowane_miejsca CASCADE; CREATE TRIGGER UpdateTrigger BEFORE INSERT OR UPDATE ON zarezerwowane_miejsca FOR EACH ROW EXECUTE PROCEDURE MyUpdate( CREATE OR REPLACE FUNCTION MyUpdate() RETURNS TRIGGER AS $$ DECLARE SalaMax INTEGER; BEGIN SELECT DISTINCT INTO SalaMax liczba_miejsc FROM sala NATURAL JOIN seans WHERE NEW.kod_seansu=seans.kod_seansu; IF (NEW.zarezerwowane_m>SalaMax) THEN RAISE EXCEPTION 'Nie ma wolnych miejsc na sali!'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; --INSERT INTO zarezerwowane_miejsca(kod_seansu,zarezerwowane_m) VALUES (1,250 import java.sql.*; public class KinoConnection Connection db; Statement stmt = null; IV. Kod Java GUI public String[] Select(String From) String[] wynik=new String[0]; String[] pomoc; int i=0; int l=0;
stmt = db.createstatement( catch(exception exc) if(from.equals("rodzaje")) "+From+";" ResultSet rs = stmt.executequery( "SELECT * FROM while ( rs.next() ) pomoc=new String[wynik.length+1]; for(l=0;l<wynik.length;l++) pomoc[l]=wynik[l]; wynik=new String[wynik.length+1]; for(l=0;l<wynik.length;l++) wynik[l]=pomoc[l]; String rodzaj = rs.getstring("rodzaj" //System.out.println( "Rodzaj = " + rodzaj wynik[i]= "Rodzaj = " + rodzaj; // System.out.println(wynik.length // System.out.println(wynik[i] i++; rs.close( stmt.close( catch(exception exc) return wynik; public void SetConnection() Class.forName("org.postgresql.Driver" db=drivermanager.getconnection("jdbc:postgresql://localhost:5432/kino", "postgres","tutaj HASLO" catch(exception exc) exc.printstacktrace( System.err.println(exc.getClass().getName()+": "+exc.getmessage() System.exit(0
import java.awt.*; import javax.swing.*; import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowadapter; import java.util.*; import static java.lang.math.*; import javax.swing.*; import java.awt.* ; import java.awt.event.* ; import java.applet.applet; import java.awt.event.keylistener; import java.awt.geom.affinetransform; import javax.swing.*; import java.awt.geom.*; import java.awt.*; import java.awt.event.componentevent; import java.awt.event.componentlistener; public class KinoGUI1 extends JFrame static KinoConnection MyConnection; static KinoGUI1 MyGui; JTextField insert = new JTextField(15 JTextArea display = new JTextArea( JButton SelectButton = new JButton("Select" int i; public KinoGUI1() //setlayout(new FlowLayout() add(insert,borderlayout.north add(selectbutton,borderlayout.south add(display,borderlayout.center event e = new event( SelectButton.addActionListener(e public class event implements ActionListener public void actionperformed(actionevent e) int length=myconnection.select(insert.gettext()).length; String[] Show = new String[length]; Show=MyConnection.Select(insert.getText() for(i=0;i<length;i++)
display.append(show[i] display.append("\n" //System.out.println(insert.getText() public static void main (String[] args) MyConnection = new KinoConnection( MyConnection.SetConnection( MyGui = new KinoGUI1( MyGui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE MyGui.setVisible(true MyGui.setTitle("Baza danych - Kino" MyGui.setSize(200,200 catch(exception exc) exc.printstacktrace( System.err.println(exc.getClass().getName()+": "+exc.getmessage() System.exit(0