Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
Univerzitet u Novom Sadu
Tehnički fakultet
»MihajloPupin«
Zrenjanin
SEMINARSKI RAD
Predmet: Softversko inženjerstvo 2
Tema: Veb aplikacija za unos rasporeda časova na fakultetu
Profesor : doc. dr Ljubica Kazi Student: Miloš Stambolija
Asistent : doc. dr Ljubica Kazi Indeks: IT 67/15
Smer: Informacione tehnologije
Zrenjanin, 2018. godina
Sadržaj
1. Predmetni cilj ........................................................................................................................................ 4
2. Prijava studentskog projekta ................................................................................................................ 5
3. Uvod ...................................................................................................................................................... 9
4. Korišćene tehnologije ......................................................................................................................... 10
4.1 MySQL ......................................................................................................................................... 10
4.2 HTML ........................................................................................................................................... 10
4.3 CSS ............................................................................................................................................... 10
4.4 PHP .............................................................................................................................................. 10
5. Implementacija web aplikacije............................................................................................................ 11
5.1 UML dijagrami ............................................................................................................................. 11
5.1.1 Use Case dijagrami .............................................................................................................. 11
5.1.2 Dijagram komponenti ......................................................................................................... 12
5.1.3 Dijagram razmeštaja ........................................................................................................... 13
5.1.4 Dijagram klasa ..................................................................................................................... 14
5.1.5 Dijagram sekvenci ............................................................................................................... 15
5.2 Tabelarni prikaz višeslojne arhitekture softvera ......................................................................... 16
5.3 Opis baze podataka ..................................................................................................................... 17
6. Prikaz razvijene veb aplikacije za evidenciju softverskih zahteva ....................................................... 27
6.1 Forma za unos rasporeda casova ................................................................................................ 27
6.2 Tabelarni prikaz rasporeda nakon unosa i biranje semestra i smera ......................................... 28
6.3 Izmena i brisanje su mogući unutar prikaza i prikazano je na sledećoj slici ............................... 29
7. Delovi koda sa objašnjenjima.............................................................................................................. 30
7.1 Prezentacioni sloj ........................................................................................................................ 30
7.2 Sloj poslovne logike ..................................................................................................................... 34
7.2.1 Poslovna pravila .................................................................................................................. 34
7.3 Sloj za rad sa podacima ............................................................................................................... 38
8. Zaključak.............................................................................................................................................. 39
9. Literatura............................................................................................................................................. 40
1. Predmetni cilj
Osnovni cilj predmeta je sinteza stečenih znanja iz informatike usmerena na primenu savremenih
alata za razvoj softverskih proizvoda. Poseban cilj predmeta je osposobljavanje studenta za
samostalan rad pri izradi softverskog proizvoda.
Zadaci koje ovaj predmet treba da ostvari je ovladavanje teorijskim, metodološkim i praktičnim
znanjima razvoja softverskog inženjeringa, koja se primenjuju kroz upotrebu savremenih
projektantskih alata. Posebni zadaci se odnose na:
izradu web aplikacije
višeslojnu arhitekturu softvera
realizaciju poslovnog sloja sa poslovnim entitetima i poslovnim pravilima
2. Prijava studentskog projekta
TEMA: Raspored časova
TIP: pojedinacni / timski
KATEGORIJA: unapredjenje / nov
VREME IZRADE: (datum od, datum do): 20.10.2018. – 22.11.2018.
UCESNICI: a) RUKOVODILAC ... Miloš Stambolija
b) UCESNIK ... Miloš Stambolija
c) ZAINTERESOVANA STRANA ... Fakultet
d) KORISNIK ... Fakultet
OPIS POSLA (tok
poslovnih procesa):
Raspored časova se kreira na osnovu raspodele predmeta na
nastavno osoblje – nastavnike i saradnike fakulteta. Posebno se
kreira za zimski i letnji semestar.
SNIMAK STANJA: unošen u excel fajl koji je kasnije bio upload-ovan na sajt fakulteta.
ANALIZA
DOKUMENTACIJE:
Pravna regulativa: Pravilnik o organizaciji nastave
Obrasci dokumenata: Izgled rasporeda časova sa sajta fakulteta
Standardi: -
ANALIZA POSTOJEĆIH
REŠENJA U SVETU U
OVOJ OBLASTI:
Schedule - sistemi za raspored rada i raspored časova u školama.
ZAHTEVI KORISNIKA: Osoba zadužena za unos rasporeda:
- validacija unosa podataka
- provera postojećih podataka u odnosu na izabrane
- tabelarni prikaz rasporeda za sve smerove
- novi dizajn (opcionalno)
POTREBE KORISNIKA: Pojednostavljenje prikaza rasporeda
INTERESI
ZAINTERESOVANIH
STRANA:
Jednostavnost i ekonomicnost procesa administracije rasporeda
časova.
PREDNOSTI OVOG
RESENJA U ODNOSU
NA RANIJA RESENJA:
Lakša realizacija u oblasti izrade rasporeda časova.
OCEKIVANI
REZULTATI
1. modeli – model funkcija, model podataka
2. baza podataka – SQL skript
3. program – korisnički interfejs i izvorni kod
4. dokumentacija – opis posla, snimak stanja, specifikacija zahteva
korisnika, korisničko uputstvo
PLANIRANI OBUHVAT
FUNKCIJA I PROFILI
KORISNIKA:
Profil korisnika – admin:
Unos predmeta, nastavnika
Unos rasporeda časova
Izmena rasporeda časova
Profil korisnika – neimenovani korisnik sajta:
Prikaz rasporeda časova o svim smerovima
OGRANICENJA
PROJEKTA I PROCENA
RIZIKA:
- vreme izrade – kratko vreme izrade (RIZIK)
- broj ljudi na projektu – samo jedan učesnik (RIZIK)
- raspolozivi alati – na raspolaganju su, nema rizika
- raspolozivi finansijski resursi – nema, ali nema potrebe ni rizika
INTEGRACIJA SA
POSTOJECIM I NOVIM
SISTEMOM:
Trenutno nema postojeće web aplikacije.
METRIKE KVALITETA
PROJEKTA:
karakteristike projekta:
Troskovi – nema troskova
Kvalitet – kvalitet softvera (baze podataka, programa,
dokumentacije)
Vreme – realizovan projekat na vreme
karakteristike programa:
Usklađenost rešenja sa strateškim ciljevima organizacije,
potrebama i zahtevima korisnika i interesima
zainteresovanih strana
o Dizajn korisničkog interfejsa – funkcionalni (intuitivni,
jednostavan za korišćenje, minimizacija napora i broja
akcija za željeni cilj, interaktivan sa obaveštenjima,
automatizmi kojima se ubrzava i skraćuje rad (uz
korišćenje transakcija), vizualni (pregledan, prijatne boje)
o Performanse – brzina rada
o Pouzdanost – da ne puca, testiran na greske, ima kontrolu
grešaka
o Pogodnost za integraciju u postojeći sistem, pogodnost za
održavanje (složenost rešenja, raspoloživost alata,
otvoreni kod, raspoloživost osoblja za uslugu održavanja)
NACIN REALIZACIJE PROJEKTA:
Nacin komunikacije
ucesnika
/
Rizici, SWOT analiza SWOT:
- Strength (snaga): prethodno predznanje u radu sa različitim
tehnologijama
- Weakness (slabost): samo 1 učesnik, ne mnogo iskustva u php
programiranju
- Opportunity: dobra referenca u biografiji, iskustvo
- Treat: ako ne uspe realizacija web aplikacije, teža organizacija
svih aktivnosti u koordinaciji rada velikog broja studentskih
projekata
RIZICI REŠENJA
Nema
Potrebna sredstva (alati,
materijal)
Operativni sistem: Windows 10, Home Edition
DBMS: MYSQL
Vizualni alat za rad sa bazom podataka: MYSQL Workbench
Jezik programiranja: PHP
Alat za programiranje: Visual Studio Code
Potrošni materijal:
1. CD
Troskovi (alat, materijal,
transport)
Sopstvena sredstva
Aktivnosti (ko, kad, sta
radi)
Sve aktivnosti radi Miloš Stambolija.
Aktivnosti uključuju:
1. Kreiranje novog dizajna – 1 nedelja
2. Kreiranje provere podataka – 1 nedelja
3. Provera validacije i postojanja unetih podataka i njihov upis
u bazu podataka – 2 nedelje
4. Tabelarni prikaz rasporeda – 1 nedelja
3. Uvod
Ovaj seminarski rad je rađen na temu Web aplikacije, kod kojeg se koriste dve glavne
tehnologije. Za front-end je HTML i CSS, a za back-end je korišćen PHP koji komunicira sa
MySQL bazom podataka.
PHP je jedan od najpoznatijih jezika koji se koristi za razvoj web aplikacija. Korišćena je
najnovija verzija PHP-a a to je PHP 7.2.7. Aplikacija je jednostavna što se tiče broja tehnologija
koje se koriste, ali sama funkcionalnost aplikacije je dosta komplikovana. Moguće je razraditi
aplikaciju i osigurati je što se tiče unosa podataka.
4. Korišćene tehnologije
4.1 MySQL
MySQL je jedan od najpopularnijih “open source” SQL baza podataka koje postoje [7]. Razlog
korišćenja MySQL baze podatak jeste zbog toga što je jako brza, skalabilna i jako lako se koristi.
MySQL se nalazi pod GPL licencom (GNU General Public Licence). MySQL server je
prvobitno bio kreiran da bi se rešili problemi oko same brzine rada baze (kod velikih baza), što
ostali serveri za rad sa bazom podataka nisu do tad pružali.
4.2 HTML
HTML je pisan ručno i dizajn je rađen po izboru.
4.3 CSS
Što se tiče CSS-a, u okviru HTML-a se koristi link prema fajlu koji je ručno pisan. Kada se
HTML kod izvršava, sa pomenutog linka se preuzima CSS fajl koji služi sa uređivanje HTML
stranice.
4.4 PHP
PHP predstavlja programski jezik koji je među najzastupljenijim programskim jezicima za izradu
web aplikacija.
5. Implementacija web aplikacije
5.1 UML dijagrami
5.1.1 Use Case dijagrami
Slika 1 Use Case dijagram
5.1.2 Dijagram komponenti
Slika 2 Prikaz dijagrama komponenti
5.1.3 Dijagram razmeštaja
Slika 3 Prikaz dijagrama razmestaja
5.1.4 Dijagram klasa
Slika 4 Prikaz klasa koje se koriste
5.1.5 Dijagram sekvenci
Slika 5 Prikaz dijagrama jednog slučaja korišćenja
5.2 Tabelarni prikaz višeslojne arhitekture softvera
Glavni sloj MVC dizajn patern Podsloj Tehnološka
implementacija
Prezentacioni sloj View Korisnički interfejs HTML i CSS
Fajlovi: index.php,
header.php i footer.php
Control Klase prezentacione
logike
Fajlovi:
RasporedForma.php
Servisni sloj Web servis Apache veb server
Sloj poslovne logike Klase za mapiranje
slojeva
Radni tokovi
Model Poslovni objekti Klase koje predstavljaju
poslovne objekte koji se
po nazivu razlikuju od
naziva tabela iz baze
podataka
Poslovna pravila Provera poslovnih
pravila se vrsi u okviru
klase za proveru
Fajlovi:
BusinessLogic.php
Sloj za rad sa podacima Rad sa relacionom
bazom podataka
Rad sa podacima iz
tabele podataka
DBMS sa bazom
podataka
Relaciona baza
podataka sa tabelama i
relacijama kao i klasa
koja se bavi
upravljanjem podacima
u bazi podataka
Fajlovi: Konekcija.php
Rad sa drugim
formatima podataka
XML
Objekat unutar PHP-a
za za čitanje XML fajla
Fajlovi: metoda unutar
klase Konekcija
5.3 Opis baze podataka
Opis baze podataka i skripta za formiranje iste je prikazana u nastavku ovog poglavlja.
Slika 6 Prikaz opisa baze podataka
U ovom projektu se kao baza podataka koristi MySQL baza podataka koja je lokalna i SQL
skript je prikazan u nastavku:
-- phpMyAdmin SQL Dump
-- version 4.8.2
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: Dec 03, 2018 at 09:37 PM
-- Server version: 10.1.34-MariaDB
-- PHP Version: 7.2.7
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS
*/;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `rasporedcasova`
--
CREATE DATABASE rasporedcasova;
USE rasporedcasova;
-- --------------------------------------------------------
--
-- Table structure for table `cas`
--
CREATE TABLE `cas` (
`idCas` int(10) NOT NULL,
`idProfesor` int(10) DEFAULT NULL,
`idDan` int(10) DEFAULT NULL,
`idSmer` int(10) DEFAULT NULL,
`idVreme` int(10) DEFAULT NULL,
`idPredmet` int(10) DEFAULT NULL,
`idPredaje` int(10) DEFAULT NULL,
`ucionica` varchar(5) DEFAULT NULL,
`trajanje` int(5) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `cas`
--
INSERT INTO `cas` (`idCas`, `idProfesor`, `idDan`, `idSmer`, `idVreme`, `idPredmet`,
`idPredaje`, `ucionica`, `trajanje`) VALUES
(331, 4, 1, 1, 4, 2, 5, 'a30', 3),
(332, 4, 1, 1, 5, 2, 5, 'a30', 3),
(333, 4, 1, 1, 6, 2, 5, 'a30', 3),
(337, 5, 1, 2, 4, 1, 2, 'a30', 3),
(338, 5, 1, 2, 5, 1, 2, 'a30', 3),
(339, 5, 1, 2, 6, 1, 2, 'a30', 3),
(340, 5, 1, 4, 4, 1, 4, 'a30', 2),
(341, 5, 1, 4, 5, 1, 4, 'a30', 2),
(342, 3, 3, 1, 4, 7, 8, 'a29', 3),
(343, 3, 3, 1, 5, 7, 8, 'a29', 3),
(344, 3, 3, 1, 6, 7, 8, 'a29', 3);
-- --------------------------------------------------------
--
-- Table structure for table `dan`
--
CREATE TABLE `dan` (
`idDan` int(10) NOT NULL,
`NazivDana` varchar(12) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `dan`
--
INSERT INTO `dan` (`idDan`, `NazivDana`) VALUES
(1, 'Ponedeljak'),
(2, 'Utorak'),
(3, 'Sreda'),
(4, 'Cetvrtak'),
(5, 'Petak'),
(6, 'Subota');
-- --------------------------------------------------------
--
-- Table structure for table `predmet`
--
CREATE TABLE `predmet` (
`idPredmet` int(10) NOT NULL,
`NazivPredmeta` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `predmet`
--
INSERT INTO `predmet` (`idPredmet`, `NazivPredmeta`) VALUES
(1, 'Matematika 1'),
(2, 'Matematika 2'),
(3, 'Matematika 3'),
(4, 'Baze podataka 1'),
(5, 'Baze podataka 2'),
(6, 'Informacioni sistemi 1'),
(7, 'Informacioni sistemi 2'),
(8, 'Softversko inzenjerstvo 1'),
(9, 'Softversko inzenjerstvo 2'),
(10, 'Multimedijalni sistemi');
-- --------------------------------------------------------
--
-- Table structure for table `profesor`
--
CREATE TABLE `profesor` (
`idProfesor` int(10) NOT NULL,
`Ime` varchar(20) DEFAULT NULL,
`Prezime` varchar(35) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `profesor`
--
INSERT INTO `profesor` (`idProfesor`, `Ime`, `Prezime`) VALUES
(1, 'Ljubica', 'Kazi'),
(2, 'Dragica', 'Radosav'),
(3, 'Zoltan', 'Kazi'),
(4, 'Dragana', 'Draskovic'),
(5, 'Momcilo', 'Bjelica'),
(6, 'Dragana', 'Glusac'),
(7, 'Dusanka', 'Milanov');
-- --------------------------------------------------------
--
-- Table structure for table `profesorpredaje`
--
CREATE TABLE `profesorpredaje` (
`idPredaje` int(10) NOT NULL,
`idProfesor` int(10) DEFAULT NULL,
`idSmer` int(10) DEFAULT NULL,
`idPredmet` int(10) DEFAULT NULL,
`tippredavanja` varchar(10) DEFAULT NULL,
`semestar` int(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `profesorpredaje`
--
INSERT INTO `profesorpredaje` (`idPredaje`, `idProfesor`, `idSmer`, `idPredmet`,
`tippredavanja`, `semestar`) VALUES
(1, 5, 1, 1, 'Predavanja', 1),
(2, 5, 2, 1, 'Predavanja', 1),
(3, 5, 3, 1, 'Predavanja', 1),
(4, 5, 4, 1, 'Predavanja', 1),
(5, 4, 1, 2, 'Vezbe', 1),
(6, 4, 4, 1, 'Vezbe', 1),
(7, 1, 1, 7, 'Predavanja', 1),
(8, 3, 1, 7, 'Vezbe', 1);
-- --------------------------------------------------------
--
-- Table structure for table `smer`
--
CREATE TABLE `smer` (
`idSmera` int(10) NOT NULL,
`NazivSmera` varchar(60) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `smer`
--
INSERT INTO `smer` (`idSmera`, `NazivSmera`) VALUES
(1, 'Informacione tehnologije - inzenjerstvo'),
(2, 'Inzenjerski menadzment'),
(3, 'Masinsko inzenjerstvo'),
(4, 'Industrijsko inzenjerstvo u eksploataciji nafte i gasa');
-- --------------------------------------------------------
--
-- Table structure for table `vreme`
--
CREATE TABLE `vreme` (
`idVreme` int(10) NOT NULL,
`pocetak` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `vreme`
--
INSERT INTO `vreme` (`idVreme`, `pocetak`) VALUES
(1, '8:00 - 8:45'),
(2, '8:45 - 9:30'),
(3, '9:45 - 10:30'),
(4, '10:30 - 11:15'),
(5, '11:30 - 12:15'),
(6, '13:15 - 14:00'),
(7, '14:15 - 15:00'),
(8, '15:00 - 15:45'),
(9, '16:00 - 16:45'),
(10, '16:45 - 17:30'),
(11, '17:45 - 18:30'),
(12, '18:30 - 19:15'),
(13, '19:30 - 20:15'),
(14, '20:15 - 21:00');
--
-- Indexes for dumped tables
--
--
-- Indexes for table `cas`
--
ALTER TABLE `cas`
ADD PRIMARY KEY (`idCas`),
ADD KEY `FK_PROFESOR_REFERENCE_PREDMET` (`idPredmet`),
ADD KEY `FK_PROFESOR_REFERENCE_PROFESOR` (`idProfesor`),
ADD KEY `FK_PROFESOR_REFERENCE_SMER` (`idSmer`),
ADD KEY `FK_PROFESOR_REFERENCE_VREME` (`idVreme`),
ADD KEY `FK_PROFESOR_REFERENCE_DAN` (`idDan`),
ADD KEY `FK_PROFESORPREDAJE_REFERENCE_CAS` (`idPredaje`);
--
-- Indexes for table `dan`
--
ALTER TABLE `dan`
ADD PRIMARY KEY (`idDan`);
--
-- Indexes for table `predmet`
--
ALTER TABLE `predmet`
ADD PRIMARY KEY (`idPredmet`);
--
-- Indexes for table `profesor`
--
ALTER TABLE `profesor`
ADD PRIMARY KEY (`idProfesor`);
--
-- Indexes for table `profesorpredaje`
--
ALTER TABLE `profesorpredaje`
ADD PRIMARY KEY (`idPredaje`),
ADD KEY `FK_PROFESORPREDAJE_REFERENCE_PREDMET` (`idPredmet`),
ADD KEY `FK_PROFESORPREDAJE_REFERENCE_PROFESOR` (`idProfesor`),
ADD KEY `FK_PROFESORPREDAJE_REFERENCE_SMER` (`idSmer`);
--
-- Indexes for table `smer`
--
ALTER TABLE `smer`
ADD PRIMARY KEY (`idSmera`);
--
-- Indexes for table `vreme`
--
ALTER TABLE `vreme`
ADD PRIMARY KEY (`idVreme`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `cas`
--
ALTER TABLE `cas`
MODIFY `idCas` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=345;
--
-- AUTO_INCREMENT for table `dan`
--
ALTER TABLE `dan`
MODIFY `idDan` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=7;
--
-- AUTO_INCREMENT for table `predmet`
--
ALTER TABLE `predmet`
MODIFY `idPredmet` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=11;
--
-- AUTO_INCREMENT for table `profesor`
--
ALTER TABLE `profesor`
MODIFY `idProfesor` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=8;
--
-- AUTO_INCREMENT for table `profesorpredaje`
--
ALTER TABLE `profesorpredaje`
MODIFY `idPredaje` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=9;
--
-- AUTO_INCREMENT for table `smer`
--
ALTER TABLE `smer`
MODIFY `idSmera` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;
--
-- AUTO_INCREMENT for table `vreme`
--
ALTER TABLE `vreme`
MODIFY `idVreme` int(10) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=15;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `cas`
--
ALTER TABLE `cas`
ADD CONSTRAINT `FK_PROFESORPREDAJE_REFERENCE_CAS` FOREIGN KEY
(`idPredaje`) REFERENCES `profesorpredaje` (`idPredaje`),
ADD CONSTRAINT `FK_PROFESOR_REFERENCE_DAN` FOREIGN KEY (`idDan`)
REFERENCES `dan` (`idDan`),
ADD CONSTRAINT `FK_PROFESOR_REFERENCE_PREDMET` FOREIGN KEY
(`idPredmet`) REFERENCES `predmet` (`idPredmet`),
ADD CONSTRAINT `FK_PROFESOR_REFERENCE_PROFESOR` FOREIGN KEY
(`idProfesor`) REFERENCES `profesor` (`idProfesor`),
ADD CONSTRAINT `FK_PROFESOR_REFERENCE_SMER` FOREIGN KEY (`idSmer`)
REFERENCES `smer` (`idSmera`),
ADD CONSTRAINT `FK_PROFESOR_REFERENCE_VREME` FOREIGN KEY
(`idVreme`) REFERENCES `vreme` (`idVreme`);
--
-- Constraints for table `profesorpredaje`
--
ALTER TABLE `profesorpredaje`
ADD CONSTRAINT `FK_PROFESORPREDAJE_REFERENCE_PREDMET` FOREIGN
KEY (`idPredmet`) REFERENCES `predmet` (`idPredmet`),
ADD CONSTRAINT `FK_PROFESORPREDAJE_REFERENCE_PROFESOR` FOREIGN
KEY (`idProfesor`) REFERENCES `profesor` (`idProfesor`),
ADD CONSTRAINT `FK_PROFESORPREDAJE_REFERENCE_SMER` FOREIGN KEY
(`idSmer`) REFERENCES `smer` (`idSmera`);
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
XML fajl iz kojeg se uzimaju podaci za bazu podataka sadrži sledeće:
<?xml version="1.0" encoding="utf-8"?>
<konekcija>
<host>localhost:3306</host>
<korisnik>root</korisnik>
<sifra></sifra>
<nazivbaze>rasporedcasova</nazivbaze>
</konekcija>
6. Prikaz razvijene veb aplikacije za evidenciju
softverskih zahteva
6.1 Forma za unos rasporeda casova
Slika 7 Prikaz forme za unos
6.2 Tabelarni prikaz rasporeda nakon unosa i biranje semestra
i smera
Slika 8 Izbor smera i semestra
Slika 9 Tabelarni prikaz rasporeda
6.3 Izmena i brisanje su mogući unutar prikaza i prikazano je
na sledećoj slici
Slika 10 Prikaz mogućnosti izbora za izmenu i brisanje
7. Delovi koda sa objašnjenjima
7.1 Prezentacioni sloj
Prezentacioni sloj realizuje fajl RasporedForma.php i on nam služi za prikazivanje
rasporeda i izgleda ovako:
<?php
class RasporedForma extends Konekcija{
public function PrikaziRaspored($id,$semestar){
$this->connect();
$q = "SELECT cas.idSmer,smer.NazivSmera FROM cas JOIN smer ON
smer.idSmera = cas.idSmer WHERE idSmer = $id ";
$izvrsiQ = mysqli_query($this->konekcijaMYSQL,$q)
or die(mysqli_error($this->konekcijaMYSQL));
$dajSmer = mysqli_fetch_row($izvrsiQ);
$brojRedova = mysqli_num_rows($izvrsiQ);
//NIJE DOBRO - start
if($brojRedova == 0){
echo "<p class='error'>Nema unetih casova!!!</p>";
$this->disconnect();
include("include/footer.php");
exit();
//NIJE DOBRO - end
}else{
$sql_vreme = "SELECT idVreme,pocetak FROM vreme ORDER BY
idVreme ASC";
$sql_query_vreme = mysqli_query($this-
>konekcijaMYSQL,$sql_vreme)
or die(mysqli_error($this->konekcijaMYSQL));
echo "<table border='1' class='tabela_ispis'>
<tr class='naslovTabeleSmer'><td colspan='7'>".$dajSmer[1]."</td><tr>
<tr>
<th>R.B.</th>
<th>Vreme</th>
<th>Ponedeljak</th>
<th>Utorak</th>
<th>Sreda</th>
<th>Cetvrtak</th>
<th>Petak</th>
</tr>";
echo "<tr>";
while($vreme_row =
mysqli_fetch_array($sql_query_vreme,MYSQLI_NUM)){
echo
"<tr><td>".$vreme_row[0].".</td><td>".$vreme_row[1]."</td>";
for($i = 1; $i < 6; $i++){
$sql_cas = "SELECT profesor.IdProfesor,
profesor.Ime,
profesor.Prezime,
predmet.NazivPredmeta,
dan.NazivDana,
profesorpredaje.tippredavanja,
profesorpredaje.semestar,
cas.ucionica,
vreme.pocetak,
smer.NazivSmera,
cas.trajanje,
cas.idCas,
smer.idSmera,
cas.idPredaje,
predmet.idPredmet
FROM profesor JOIN cas ON
cas.idProfesor = profesor.idProfesor
JOIN smer ON
cas.idSmer = smer.idSmera
JOIN predmet
ON cas.idPredmet = predmet.idPredmet
JOIN dan ON
cas.idDan = dan.idDan
JOIN vreme
ON cas.idVreme = vreme.idVreme
JOIN
profesorpredaje ON profesorpredaje.idPredaje = cas.idPredaje
WHERE dan.idDan = $i
AND smer.IdSmera = $id
AND profesorpredaje.semestar =
$semestar
AND vreme.idVreme = $vreme_row[0]
";
$query_cas = mysqli_query($this-
>konekcijaMYSQL,$sql_cas) or
die(mysqli_error($this->konekcijaMYSQL));
$broj = mysqli_num_rows($query_cas);
if($broj == 0){
echo "<td>";
echo "<table class='prazna_tabela'
border='1'>
<tr><td>------- -------</td>
<td rowspan='4'>----
</td></tr>
<tr><td>-------</td></tr>
<tr><td>-------</td></tr>
<tr>
<td class='footer-
cell'>";
echo "<a href='upisi.php'
class='upisi' />Upisi cas</a>";
echo "</td>
</tr>";
echo "</table>";
echo "</td>";
}else{
while($row_cas =
mysqli_fetch_array($query_cas,MYSQLI_NUM)){
echo "<td>";
echo "<table class='dan'
border='1'>
<tr><td>".$row_cas[1]." ".$row_cas[2]."</td>
<td
rowspan='4'>".$row_cas[7]."</td></tr>
<tr><td>".$row_cas[3]."</td></tr>
<tr><td>".$row_cas[5]."</td></tr>
<tr>
<td
class='footer-cell'>
<a
href='izmeni.php?t=$row_cas[10]&
semestar=$row_cas[6]&
smer=$row_cas[12]&
predmet=$row_cas[14]&
idProfesor=$row_cas[0]&
dan=$i&
vreme=$vreme_row[0]&
ucionica=$row_cas[7]&
idPredaje=$row_cas[13]' class='izmeni' />Izmeni</a>
<a
href='obrisi.php?t=$row_cas[10]&
smer=$row_cas[12]&
dan=$i&
vreme=$vreme_row[0]&
ucionica=$row_cas[7]&
idPredaje=$row_cas[13]&
predmet=$row_cas[14]&
idProfesor=$row_cas[0]&
semestar=$row_cas[6]' class = 'obrisi' />Obrisi</a>
</td>
</tr>";
echo "</table>";
echo "</td>";
}
}
mysqli_free_result($query_cas);
}
echo "</tr>";
}
echo "</tr>";
echo "</table>";
}
}
}
?>
7.2 Sloj poslovne logike
7.2.1 Poslovna pravila
Poslovna pravila nam realizuje fajl koji se zove BusinessLogic.php i njegov sadržaj izgleda
ovako:
<?php
class BusinessLogic extends Konekcija{
public function ProveriProfesora($smer,$predmet,$profesor,$tipPredavanja){
$this->connect();
$query_smer = "SELECT idSmera FROM smer WHERE NazivSmera =
'$smer'";
$izvrsi_smer = mysqli_query($this->konekcijaMYSQL,$query_smer) or
die(mysqli_error($this->konekcijaMYSQL));
$id_smer = mysqli_fetch_row($izvrsi_smer);
$query_predmet = "SELECT idPredmet FROM predmet WHERE
NazivPredmeta = '$predmet'";
$izvrsi_predmet = mysqli_query($this->konekcijaMYSQL,$query_predmet) or
die(mysqli_error($this->konekcijaMYSQL));
$id_predmet = mysqli_fetch_row($izvrsi_predmet);
$query_profesor = "SELECT idProfesor FROM profesor WHERE
CONCAT(Ime,' ',Prezime) = '$profesor'";
$izvrsi_profesor = mysqli_query($this->konekcijaMYSQL,$query_profesor) or
die($this->konekcijaMYSQL);
$id_profesor = mysqli_fetch_row($izvrsi_profesor);
$query_provera = "SELECT idPredmet,idSmer,idProfesor,tippredavanja FROM
profesorpredaje
WHERE idPredmet = ".$id_predmet[0]." AND
idSmer = ".$id_smer[0]." AND
idProfesor = ".$id_profesor[0]." AND
tippredavanja = '$tipPredavanja' ";
$izvrsi_provera = mysqli_query($this->konekcijaMYSQL,$query_provera) or
die(mysqli_error($this->konekcijaMYSQL));
$brojRedova = mysqli_num_rows($izvrsi_provera);
if($brojRedova != 1){
echo "<p class='error'>Profesor ne predaje izabrani predmet!!!</p>";
mysqli_free_result($izvrsi_provera);
$this->disconnect();
include("include/footer.php");
exit();
}else{
return true;
}
}
public function ProfesorVecPredaje($dan,$vremePocetkaCasa,$profesor,$ucionica,$smer){
$this->connect();
$proveriProfesora = "SELECT cas.ucionica,profesor.Ime,profesor.Prezime,vreme.pocetak,
dan.NazivDana,smer.NazivSmera FROM cas JOIN vreme ON vreme.idVreme = cas.idVreme
JOIN dan ON dan.idDan = cas.idDan
JOIN smer ON smer.idSmera = cas.idSmer
JOIN profesor ON profesor.idProfesor = cas.idProfesor
WHERE smer.NazivSmera <> '$smer'
AND dan.NazivDana = '$dan'
AND vreme.pocetak = '$vremePocetkaCasa'
AND concat(profesor.Ime,' ',profesor.Prezime) = '$profesor'
AND cas.ucionica <> '$ucionica'";
$izvrsi_provera = mysqli_query($this->konekcijaMYSQL,$proveriProfesora) or
die(mysqli_error($this->konekcijaMYSQL));
$brojRedova = mysqli_num_rows($izvrsi_provera);
if($brojRedova != 0){
echo "<p class='error'>Izabrani profesor predaje u drugoj ucionici ili drugom smeru za izabrani
dan i vreme!!!</p>";
mysqli_free_result($izvrsi_provera);
$this->disconnect();
include("include/footer.php");
exit();
}else{
return true;
}
}
public function
ProveriCas($dan,$profesor,$smer,$predmet,$ucionica,$vremePocetkaCasa,$trajanjeCasa,$semestar){
$this->connect();
$proveraDaLiCasPostoji = "SELECT dan.NazivDana,predmet.NazivPredmeta,
concat(profesor.Ime,' ',profesor.Prezime),smer.NazivSmera,
cas.ucionica,cas.trajanje,vreme.pocetak,profesorpredaje.idPredaje
FROM cas JOIN vreme ON vreme.idVreme = cas.idVreme
JOIN dan ON dan.idDan = cas.idDan JOIN predmet ON predmet.idPredmet =
cas.idPredmet JOIN
profesor ON profesor.idProfesor = cas.idProfesor JOIN smer ON smer.idSmera =
cas.idSmer
JOIN profesorpredaje ON profesorpredaje.idPredaje = cas.idPredaje
WHERE dan.NazivDana = '$dan' AND concat(profesor.Ime,' ',profesor.Prezime)
= '$profesor'
AND smer.NazivSmera = '$smer' AND predmet.NazivPredmeta = '$predmet'
AND cas.ucionica = '$ucionica'
AND vreme.pocetak = '$vremePocetkaCasa' AND cas.trajanje = $trajanjeCasa AND
profesorpredaje.semestar = $semestar";
$CasPostoji = mysqli_query($this->konekcijaMYSQL,$proveraDaLiCasPostoji) or
die(mysqli_error($this->konekcijaMYSQL));
$brojRedova = mysqli_num_rows($CasPostoji);
if($brojRedova != 0){
echo "<p class='error'>Cas koji ste uneli vec postoji!!!</p>";
mysqli_free_result($CasPostoji);
$this->disconnect();
include("include/footer.php");
exit();
}else{
return true;
}
}
public function ProveriUcionicu($vremePocetkaCasa,$ucionica,$semestar,$smer,$dan){
$proveriUcionicu = "SELECT cas.ucionica,vreme.pocetak,dan.NazivDana,smer.NazivSmera,
profesorpredaje.semestar FROM cas
JOIN vreme ON vreme.idVreme = cas.idVreme JOIN dan ON dan.idDan = cas.idDan
JOIN smer ON smer.idSmera = cas.idSmer JOIN profesorpredaje ON profesorpredaje.idPredaje =
cas.idPredaje
WHERE cas.ucionica = '$ucionica' AND dan.NazivDana = '$dan' AND vreme.pocetak =
'$vremePocetkaCasa'
AND smer.NazivSmera = '$smer' AND profesorpredaje.semestar = $semestar ";
$ucionicaZauzeta = mysqli_query($this->konekcijaMYSQL,$proveriUcionicu) or
die(mysqli_error($this->konekcijaMYSQL));
$brojRedova = mysqli_num_rows($ucionicaZauzeta);
if($brojRedova != 0){
echo "<p class='error'>Ucionica je zauzeta!!!</p>";
mysqli_free_result($ucionicaZauzeta);
$this->disconnect();
include("include/footer.php");
exit();
}else{
return true;
}
}
public function
ZauzetoVeme($vremePocetkaCasa,$smer,$dan,$semestar,$ucionica,$profesor,$trajanjeCasa){
$this->connect();
$uzmiPodatkeVreme = "SELECT idVreme,pocetak FROM vreme WHERE pocetak =
'$vremePocetkaCasa' ";
$queryVreme = mysqli_query($this->konekcijaMYSQL,$uzmiPodatkeVreme)
or die(mysqli_error($this->konekcijaMYSQL));
$VremePodatak = mysqli_fetch_row($queryVreme);
for($j = 0; $j < $trajanjeCasa; $j++){
$DaLiPostoji = "SELECT concat(profesor.Ime,' ',profesor.Prezime),smer.NazivSmera,
dan.NazivDana,vreme.idVreme,cas.idVreme,profesorpredaje.semestar,
cas.idDan FROM cas JOIN profesor ON profesor.idProfesor = cas.idProfesor
JOIN dan ON dan.idDan = cas.idDan JOIN vreme ON vreme.idVreme = cas.idVreme
JOIN smer ON smer.idSmera = cas.idSmer
JOIN profesorpredaje ON profesorpredaje.idPredaje = cas.idPredaje
WHERE dan.NazivDana = '$dan' AND smer.NazivSmera = '$smer'
AND profesorpredaje.semestar = $semestar
AND cas.ucionica <> '$ucionica'
AND concat(profesor.Ime,' ',profesor.Prezime) <> '$profesor'
AND vreme.idVreme = ($VremePodatak[0] + $j) ";
$izvrsiDaLiPostoji = mysqli_query($this->konekcijaMYSQL,$DaLiPostoji)
or die(mysqli_error($this->konekcijaMYSQL));
$brojDaLiPostoji = mysqli_num_rows($izvrsiDaLiPostoji);
if($brojDaLiPostoji != 0){
echo "<p class='error'>Postoji vec upisan cas za izabrano vreme!!!</p>";
mysqli_free_result($izvrsiDaLiPostoji);
$this->disconnect();
include("include/footer.php");
exit();
}else{
if($j == $trajanjeCasa){
return true;
}else{
continue;
}
}
}
}
}
?>
7.3 Sloj za rad sa podacima
Ovaj sloj predstavlja u suštini kod koji se nalazi u klasi BusinessLogic.php, jer se u njoj vrši
obrada podataka i njihova provera koja je u skladu sa poslovnim pravilima.
8. Zaključak
U ovom projektu su korišćene HTML i CSS tehnologije za izradu front-end-a, a za izradu back-
end-a tj. same funkcionalnosti je korišćen PHP jezik.
9. Literatura
Linkovi ka stranicama sajtova:
1. https://www.php.net
2. https://www.stackoverflow.com
3. https://www.w3schools.com
Indeks slika
Rb. i naziv slike Broj stranice
Slika1 Use Case dijagram 10
Slika 2 Dijagram komponenti 11
Slika 3 Dijagram razmestaja 12
Slika 4 Dijagram klasa 13
Slika 5 Dijagram sekvenci 14
Slika 6 Opis baze podataka 16
Slika 7 Forma za unos 26
Slika 8 Izbor smera i semestra 27
Slika 9 Tabelarni prikaz rasporeda 27
Slika 10 Izmena i brisanje 28