The Virtual ATM is a software-based ATM system that allows users to manage their bank accounts, perform transactions, and receive notifications. It has been implemented in two different architectures:
- Monolithic Architecture 🏗️
- Microservices Architecture 🌐
Both implementations provide a functional ATM experience with features like authentication, balance inquiries, deposits, withdrawals, transaction history, and notifications.
- Single application handling all functionalities.
- Integrated SQLite database for accounts and transactions.
- GTK-based graphical user interface.
- Status bar notifications for login, transactions, and errors.
- CSV export for transaction history.
- Programming Language: C
- Frontend: GTK (GObject)
- Database: SQLite
git clone https://github.com/stephenombuya/Virtual-ATM
cd virtual-atm/monolithic
make
./virtual_atm
- Modular design with independent services:
- Account Service (User authentication & balance management)
- Transaction Service (Deposits, withdrawals, history management)
- Notification Service (Real-time status updates)
- Frontend (GTK-based UI communicating via APIs)
- REST API communication between services.
- Dockerized deployment.
- Backend: Python (Flask, SQLite)
- Frontend: GTK (PyGObject)
- Containerization: Docker + Docker Compose
git clone https://github.com/your-username/virtual-atm.git
cd virtual-atm
docker-compose up --build
Feature | Monolithic | Microservices |
---|---|---|
Scalability | Limited | High |
Maintainability | Harder | Easier |
Performance | Slower under load | Faster, optimized services |
Deployment | Simple | Requires containerization |
Fault Isolation | Low | High |
- Fork the repository.
- Create a new branch (
git checkout -b feature-branch
). - Make your changes and commit (
git commit -m 'Add feature'
). - Push the branch (
git push origin feature-branch
). - Open a Pull Request.
This project is licensed under the GNU License.