Skip to content

gaga1307/laboratory

Repository files navigation

Laboratory Management System

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.


About the Project

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.


Features

  • 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

Technologies

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

System Architecture

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


Project Structure

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

Database Structure

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)

Prerequisites

  • Java JDK 17+
  • MySQL Server
  • NetBeans IDE 15

Design Patterns Used

  • Template MethodApstraktnaGenerickaOperacija defines the execution flow for all system operations (open connection → validate → execute → commit/rollback)
  • BrokerDBBroker provides a generic data access layer via the OpstiDomenskiObjekat interface, removing the need for entity-specific DAOs
  • MVC — Clear separation between forms (View), controllers (Controller), and domain/business logic (Model)

Resources

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages