A Java client-server application for managing laboratory operations, developed as part of the Software Design course at the Faculty of Organizational Sciences, University of Belgrade.
This system enables laboratory staff (laborants) to efficiently manage patients, laboratory analyses, and service invoices. It was built following a simplified Larman software development methodology, covering all phases from requirements gathering and analysis through design and implementation.
- Authentication — Secure login for laboratory staff
- Patient Management — Create, search, update, and delete patient records
- Invoice Management — Create, search, and update service invoices with line items
- Analysis Management — Add and view laboratory analyses
- Position Management — Manage employee positions
- Code tables — Blood type and position registries
| Component | Technology |
|---|---|
| Programming Language | Java 17.0.5 |
| IDE | NetBeans IDE 15 |
| Database | MySQL |
| DB GUI Tool | SQLyog v13.3.1 |
| Communication | Socket-based client-server |
| OS | Windows |
The application follows a three-tier architecture:
Client (LaboratorijaKlijent) — GUI forms and UI controller
Server (LaboratorijaServer) — Request handling, business logic, and database broker
Common (LaboratorijaZajednicki) — Domain objects and transfer classes used by both sides
LaboratorijaKlijent/
├── client/ # Application entry point
├── components/ # Table models (Analiza, Pacijent, Racun, StavkaRacuna)
├── controller/ # ClientController
├── form/ # FormLogin, FormMain
├── form.analiza/ # FormNovaAnaliza, FormPrikaziSveAnalize
├── form.pacijent/ # FormDetaljiPacijenta, FormNoviPacijent, FormPretragaPacijenta
├── form.pozicija/ # FormNovaPozicija
├── form.racun/ # FormDetaljiRacuna, FormNoviRacun, FormPretragaRacuna
├── session/ # Session management
└── validation/ # Input validation
LaboratorijaServer/
├── controller/ # Server controller
├── db/ # DbConnectionFactory, DbRepository
├── db.impl/ # DBBroker (generic database operations)
├── forme/ # ServerskaForma, KonfiguracijaBazeForma
├── niti/ # ClientThread, ServerThread
├── operacije/ # ApstraktnaGenerickaOperacija (template method)
├── operacije.analiza/ # UbaciAnalizuSO, VratiListuSviAnalizaSO
├── operacije.krvnaGrupa/ # VratiListuSviKrvnaGrupaSO
├── operacije.laborant/ # LoginSO, VratiListuSviLaborantSO
├── operacije.pacijent/ # ObrisiPacijentaSO, PretraziPacijentSO, PromeniPacijentSO,
│ # UbaciPacijentSO, VratiListuPacijentSO
├── operacije.pozicija/ # UbaciPozicijuSO
└── operacije.racun/ # PretraziRacunSO, PromeniRacunSO, UbaciRacunSO, VratiListuRacunSO
LaboratorijaZajednicki/
├── domain/ # Analiza, Angazman, KrvnaGrupa, Laborant, OpstiDomenskiObjekat,
│ # Pacijent, Pozicija, Racun, StavkaRacuna
├── transfer/ # Receiver, Request, Response, Sender
└── transfer.util/ # Operation, ResponseStatus
Laborant (idLaborant, ime, prezime, korisnickoIme, sifra, email)
Analiza (idAnaliza, nazivAnalize, cena, preciznost, vremeTrajanja, kolicinaKrvi, standardizacija)
KrvnaGrupa (idKrvnaGrupa, krvnaGrupa, rhesusFaktor, antitela)
Pozicija (idPozicija, nazivPozicije, nivoObrazovanja)
Pacijent (idPacijent, ime, prezime, datumRodjenja, pol, kontakt, email, idKrvnaGrupa)
Racun (idRacun, iznosRacuna, nacinPlacanja, datumUzorkovanja, idLaborant, idPacijent)
StavkaRacuna (idRacun, rb, prodajnaCena, kolicina, iznosStavke, referent, idAnaliza)
Angazman (idLaborant, idPozicija, datumAng)
- Java JDK 17+
- MySQL Server
- NetBeans IDE 15
- Template Method —
ApstraktnaGenerickaOperacijadefines the execution flow for all system operations (open connection → validate → execute → commit/rollback) - Broker —
DBBrokerprovides a generic data access layer via theOpstiDomenskiObjekatinterface, removing the need for entity-specific DAOs - MVC — Clear separation between forms (View), controllers (Controller), and domain/business logic (Model)
- 🗄️ Database schema:
Database/schema.sql - 📄 Full project documentation:
Documentation.pdf