A compact, educational project that demonstrates the fundamentals of a GUI-based login, patient record, and appointment-scheduling system for a dental office.
Originally written for CS2340 Mini-Project 3 using Java 8 + JavaFX and the NetBeans build system.
| Domain | What it Does | Key Classes / Screens |
|---|---|---|
| Authentication | Username/ID & password prompt that routes to the appropriate portal | loginGUI.java |
| Patient Portal | • View personal demographics • See next appointment • Review procedure details |
patientGUI.java, patAptGUI.java, Patient.java |
| Dentist Portal | • View daily schedule • Inspect individual appointments & patient info |
dentistGUI.java, denAptGUI.java, Dentist.java, AppointmentList.java |
| Appointment Mgmt. | CRUD functions: create, list, look-up appointments; tie Dentist + Patient + Procedure | Appointment.java, AppointmentList.java, Procedure.java |
| Flat-File “DB” | All data stored in colon-delimited text files in miniproject3/: Patients.txt, Dentists.txt, Appointments.txt, Procedures.txt |
- JDK 8 (JavaFX bundled)
- Apache Ant 1.9+ – or NetBeans 8.x (original IDE)
git clone https://github.com/CGFixIT/EMR-System.git
cd EMR-System
Option A – NetBeans
File ▸ Open Project… → select the cloned folder.
Right-click project ➜ Run (NetBeans calls Ant targets automatically).
Option B – Ant (CLI)
bash/batch commands or scripting
# 1) Clean & compile
ant clean jar
# 2) Launch the app (opens the Login GUI)
java -jar dist/EMR-System.jar
If Ant cannot find the four renamed sources, add them to the <srcdir> include pattern inside nbproject/build-impl.xml or keep the original names but list them explicitly.🗂 Folder Layout
EMR-System/
│
├── src/miniproject3/
│ ├── Appointment.java
│ ├── AppointmentList.java
│ ├── Dentist.java
│ ├── Patient.java
│ ├── Person.java
│ ├── Procedure.java
│ ├── loginGUI.java
│ ├── dentistGUI.java
│ ├── denAptGUI.java
│ ├── patientGUI.java
│ └── patAptGUI.java
│
├── build/classes/miniproject3/
│ ├── Patients.txt
│ ├── Dentists.txt
│ ├── Appointments.txt
│ └── Procedures.txt
│
├── build.xml # Ant script (delegates to nbproject/build-impl.xml)
├── nbproject/ # NetBeans metadata
├── manifest.mf # Populated by NetBeans; used in JAR assembly
└── README.md # ← you’re reading it
🏎️ Quick Demo
$ java -jar dist/EMR-System.jar
1. Login screen appears
2. Enter Dentist ID or Patient ID ➜ Press **Login**
3. Dentist sees a schedule grid (denAptGUI) and can click an appointment to open dentistGUI
4. Patient sees personal dashboard (patientGUI) with upcoming appointment from patAptGUI
$ java -jar dist/EMR-System.jar
1. Login screen appears
2. Enter Dentist ID or Patient ID ➜ Press **Login**
3. Dentist sees a schedule grid (denAptGUI) and can click an appointment to open dentistGUI
4. Patient sees personal dashboard (patientGUI) with upcoming appointment from patAptGUI
(Insert screenshots in docs/images and embed here for visual reference.)
⚠ Known Limitations - This was after all a school project but the only thing I spent more than an hour or 2 on learning Java Hard-coded file paths inside several classes:
e.g., Appointment.java uses
C:/Users/Chris/Documents/NetBeansProjects/MiniProject2/build/classes/miniproject2/Appointments.txt
<b>➜ Fix:</B> Replace with a relative path such as ./data/Appointments.txt.
No concurrency control on flat-file writes (single-user demo only).
Tested on JDK 8; Java 11+ not verified (yet)
🛠 Contributing?
Fork → Create Feature Branch (git checkout -b feat/my-feature)
Commit changes with clear messages
Push → Open a Pull Request
Good First Issues
Migrate to SQLite via JDBC
Remove hard-coded absolute paths
Upgrade to Java 17 LTS with OpenJFX
Add JUnit tests & CI workflow
📜 License MIT License – see LICENSE (pending)
🙏 Acknowledgements Developed by Chris Grady for an old school project Inspired by typical electronic medical/dental record workflows. Flat-file persistence idea adapted from course lecture examples. This project is provided “as is” for educational purposes only. Do NOT use in production or for real patient data.
https://x.com/cgfixit
https://bit.ly/CGpsyclaw