A full-stack banking application developed as part of the Software Development Project course.
This system simulates a real-world ATM environment consisting of:
The project demonstrates layered architecture, secure authentication, database transactions and full-stack integration.
- Project Overview
- Project Poster
- System Architecture
- Project Goals
- Project Team
- Features Implemented
- Technologies Used
- Backend Setup
- Qt ATM Client
- Authentication Flow
- Test Credentials
- Documentation
- Project Management
- Security Considerations
- License
+----------------------+
| Qt Desktop Client |
| (C++ / Qt Widgets) |
+----------+-----------+
|
| HTTP (JSON, JWT)
v
+----------------------+
| Node.js REST API |
| (Express) |
+----------+-----------+
|
| Stored Procedures
v
+----------------------+
| MySQL Database |
+----------------------+
- Qt client sends HTTP request
- REST API validates JWT and business rules
- Stored procedure executes database logic
- JSON response returned to client
- Implement a layered backend architecture
- Design and implement a REST API
- Use stored procedures for database logic
- Implement authentication with JWT
- Create a working ATM UI in Qt
- Fulfill course minimum and advanced requirements
| Name | Responsibilities |
|---|---|
| Juha Jermalainen | CRUD, Swagger, backend |
| Laura Similä | Backend, REST API, frontend |
| Arttu Jämsä | documentation, frontend, Qt |
| Valtteri Tenhunen | Image upload |
(All members participated in planning, implementation and testing.)
- Debit account support
- Qt application startup user interface
- Card login with PIN verification
- Balance display
- Withdrawal (20€, 40€, 50€, 100€)
- 10 latest transactions
- 10-second PIN timeout
- Full CRUD operations for all database tables
- Credit account support
- Credit limit handling
- Withdrawal of any amount (only €20 and €50 notes at ATM)
- Persistent card locking (stored in database)
- 30-second global inactivity timeout
- Transaction history browsing (pagination)
- Dual card support (debit + credit in one card)
- Account selection after login
- UML state diagram created
- Role-based authorization (admin / user)
- Structured API contract documentation
- Clean MVC-style backend structure
- Additional features:
- Uploading and displaying images
- Swagger documentation
- Logs
- Adding tests to the backend
- CI/CD
- Extra Qt application (admin)
- Node.js
- Express
- MySQL
- JWT authentication
- bcrypt (PIN hashing)
- Stored procedures
- Swagger documentation
- CI/CD
- C++ (Qt Widgets)
- QNetworkAccessManager (API client)
- CMake build system
cd backend
npm installDB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=bank_db
DB_PORT=3306
JWT_SECRET=your-secret-key
PIN_PEPPER=your-pepper-value
PORT=3000cd backend/db
mysql -u root -p bank_db < schema.sql
mysql -u root -p bank_db < procedures.sql
mysql -u root -p bank_db < seed.sqlcd backend
npm startBackend runs at:
http://localhost:3000
Swagger documentation:
http://localhost:3000/docsBackend is managed using PM2 to ensure:
- Automatic restart on crashes
- Process monitoring
- Background execution
- Production-style process control
PM2 configuration:
-
ecosystem.config.js
-
Startup instructions documented in:
SETUP_AUTOSTART.md
If deployed, backend can be started using:
pm2 start ecosystem.config.jsThis setup enables production-style backend management and supports CI/CD workflows.
The project includes CI configuration for backend and frontend.
Continuous Integration:
- Automatic build checks
- Linting
- Optional test execution
This ensures code quality and maintainability.
- Open
bank-automatin Qt Creator - Configure with CMake
- Build and run
The client communicates with the backend using the REST API.
- User enters card ID and PIN
- Backend validates PIN (bcrypt + pepper)
- JWT token issued
- Token stored in memory
- Token sent in Authorization header
- Account selected (if multiple)
- ATM operations performed
- Card:
CARD123456 - PIN:
1234
- Card:
ADMINCARD - PIN:
admin123
- Git + GitHub version control
- Feature branches + Pull Requests
- Kanban board used for task management
- Weekly progress meetings
- Technical specification document created
- UML diagrams (ER, component, state diagram)
- PIN codes stored as bcrypt hashes
- Additional server-side pepper
- JWT authentication
- Role-based access control
- Database access only through stored procedures
- Server-side validation for all financial operations
This project is developed for educational purposes.
MIT License can be applied if published publicly.
