project-init
This commit is contained in:
commit
65691a0aee
7 files changed
+897
No files matched your search
@@ -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.
|
||||
Reference in new issue
Block a user