Files

78 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Student Management System
A terminal CRUD application for managing **Students**, **Guardians**, and
**Attendance** records, backed by MySQL. Built against the schema in
Tables 9.3–9.5 (STUDENT, GUARDIAN, ATTENDANCE).
## What it does on startup
1. Connects to the MySQL server at `10.10.0.160:3306`.
2. Verifies the `student_db` database exists — creates it if not.
3. Verifies the `GUARDIAN`, `STUDENT`, and `ATTENDANCE` tables exist
(in that order, since STUDENT references GUARDIAN and ATTENDANCE
references STUDENT) — creates any that are missing, with the exact
data types and constraints from the schema (primary keys, foreign
keys, `NOT NULL`, `UNIQUE` on `GPhone`, and the composite primary key
`(AttendanceDate, RollNumber)` on ATTENDANCE).
4. Launches an interactive menu for Create / Read / Update / Delete.
## Setup
1. Install the one dependency:
```bash
pip install -r requirements.txt
```
2. Set your MySQL credentials as environment variables (the host/port/
database default to the assignment's values already):
```bash
export DB_USER=root
export DB_PASSWORD=your_password_here
# optional overrides — these already default correctly:
# export DB_HOST=10.10.0.160
# export DB_PORT=3306
# export DB_NAME=student_db
```
3. Run it:
```bash
python3 main.py
```
## Files
| File | Purpose |
|-----------------|------------------------------------------------------------------|
| `config.py` | Connection settings (reads env vars, falls back to defaults) |
| `db.py` | Connects to MySQL; verifies/creates the database and tables |
| `crud.py` | All Create/Read/Update/Delete operations for the three tables |
| `ui_helpers.py` | Input prompts/validation and table-printing for the terminal |
| `main.py` | The menu-driven application — run this |
## Using the app
The main menu has three sections:
- **Guardian management** — list, view, add, update, delete guardians.
GUID must be a 12-digit number (per the Aadhaar-number schema note);
phone, if given, must be 10 digits and is unique across guardians.
- **Student management** — list, view, add, update, delete students.
Roll number is up to 3 digits; each student must reference an
existing guardian's GUID (add the guardian first).
- **Attendance management** — mark attendance (P/A) for a student on a
date (marking the same student+date again updates it instead of
erroring), view attendance by date or by student, and delete records.
Deleting a guardian who still has students is blocked by the foreign
key (delete or reassign their students first). Deleting a student
cascades and removes their attendance records automatically.
## Notes
- Uses [mysql-connector-python](https://dev.mysql.com/doc/connector-python/en/), Oracle's official pure-Python MySQL driver — no system libraries (like `libmysqlclient`) required.
- All input is validated against the schema's constraints (max lengths, digit counts, date format, P/A status) before hitting the database, and database-level errors (duplicate keys, foreign key violations) are caught and shown as friendly messages rather than crashing.
- Tested end-to-end (connect → create DB/tables → full CRUD → constraint error handling → cascade delete) against a local MySQL/MariaDB instance before delivery.