project-init

This commit is contained in:
srikar committed 2026-09-25 08:14:04 -07:00
commit 65691a0aee
7 files changed
+897

No files matched your search

+83
View File
@@ -0,0 +1,83 @@
# 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.0.1.40: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.0.1.40
# 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 [PyMySQL](https://pymysql.readthedocs.io/), a pure-Python MySQL
client — 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.