Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

پروژه آموزشی: اپلیکیشن مدیریت دوره‌ها


🔹 توضیح کلی

این پروژه یک اپلیکیشن آموزشی است که با زبان برنامه‌نویسی پایتون طراحی شده و هدف اصلی آن یادگیری مفاهیم برنامه‌نویسی و پیاده‌سازی یک سیستم واقعی است.

این پروژه به شما امکان می‌دهد که با مفاهیم ورودی و خروجی داده، مدیریت داده‌ها، منوها و فرم‌ها، ثبت و ویرایش اطلاعات و پیاده‌سازی منطق مدیریتی به صورت کاربردی آشنا شوید.
تمامی بخش‌های این پروژه به گونه‌ای طراحی شده‌اند که قابل فهم برای دانشجویان و معلمان تازه‌کار باشند و مسیر یادگیری مرحله‌به‌مرحله را تسهیل کنند.


🔹 طرح مسئله

هدف از این پروژه، ساخت یک کنسول اپلیکیشن مدیریت دوره‌های آموزشی است که بتواند:

  1. افزودن دوره‌های جدید به همراه تعداد جلسات
  2. افزودن لیست دانشجویان به هر دوره
  3. ثبت حضور و غیاب دانشجویان برای هر جلسه
  4. ثبت نمره میان‌ترم و پایان‌ترم
  5. ویرایش یا حذف اطلاعات دانشجو
  6. ویرایش یا حذف اطلاعات دوره

این سیستم باید به گونه‌ای باشد که مدیریت دوره‌ها، دانشجویان و جلسات به شکل ساده و منظم انجام شود و تجربه کاربری روان و قابل درک برای معلم ایجاد کند.


🔹 سناریوی جامع اپلیکیشن مدیریت دوره‌ها

تصور کنید شما معلم یک مرکز آموزشی هستید که چندین دوره‌ی متنوع برگزار می‌کند. مدیریت همه‌ی این دوره‌ها، دانشجویان و جلسات می‌تواند پیچیده و زمان‌بر باشد. اپلیکیشن مدیریت دوره‌ها این کار را به شکل ساده، روان و بسیار کارآمد انجام می‌دهد، بدون اینکه شما نیاز داشته باشید به جزئیات فنی فکر کنید.

1️⃣ ورود و ثبت‌نام معلم

وقتی برنامه برای اولین بار اجرا می‌شود، صفحه‌ای باز می‌شود که سه گزینه واضح و قابل درک دارد: ورود، ثبت‌نام و خروج.

  • ثبت‌نام: اگر شما معلم جدید هستید، با انتخاب این گزینه وارد یک فرم ساده و دلپذیر می‌شوید که اطلاعات پایه‌ی شما مثل نام، ایمیل، شماره تماس و رمز عبور را می‌گیرد. در اینجا حس می‌کنید دارید یک کارت شناسایی دیجیتال برای خودتان ایجاد می‌کنید که در ادامه تمام تعاملات شما با سیستم را امکان‌پذیر می‌کند. پس از ثبت‌نام موفق، برنامه شما را به منوی اصلی هدایت می‌کند.
  • ورود: اگر قبلاً ثبت‌نام کرده‌اید، با وارد کردن ایمیل و رمز عبور وارد محیط برنامه می‌شوید. در این مرحله، برنامه با یک پیام خوش‌آمدگویی شما را به سمت داشبورد اصلی هدایت می‌کند و حس امنیت و کنترل کامل روی داده‌هایتان ایجاد می‌کند.
  • خروج: این گزینه ساده، برای زمانی است که بخواهید برنامه را ببندید یا از صفحه ورود خارج شوید.

تنها معلمانی که ثبت‌نام کرده و وارد شده‌اند، می‌توانند به امکانات اصلی دسترسی داشته باشند. این فرآیند امنیت و اختصاصی بودن محیط را تضمین می‌کند.

2️⃣ منوی اصلی

پس از ورود موفق، معلم با یک منوی اصلی واضح و خوش‌ساخت مواجه می‌شود. این منو حکم مرکز فرماندهی شما را دارد و تمام مسیرهای مدیریت دوره‌ها از اینجا آغاز می‌شوند.

بخش‌های منو شامل:

  • مدیریت دوره‌ها
  • مدیریت دانشجویان
  • مدیریت جلسات و حضور و غیاب
  • مدیریت نمرات
  • گزارش‌ها و خلاصه اطلاعات
  • مدیریت پروفایل معلم

هر بخش با آیکون و توضیح کوتاه نمایش داده شده است. حتی معلمان تازه‌کار می‌توانند بدون آموزش خاصی، تمام امکانات را پیدا کنند.

3️⃣ مدیریت دوره‌ها

این بخش مثل یک دفترچه دیجیتال برای همه دوره‌های شماست. شما حس می‌کنید که هر دوره یک پوشه مستقل دارد که تمام اطلاعات مربوط به آن در یک نگاه قابل مشاهده است.

  • افزودن دوره جدید: وارد یک فرم می‌شوید که نام دوره، تعداد جلسات و توضیح کوتاه درباره محتوا را وارد می‌کنید. حس می‌کنید دارید یک کارت دیجیتال برای هر دوره ایجاد می‌کنید.
  • ویرایش دوره: تغییر نام، تعداد جلسات یا توضیحات دوره به راحتی ممکن است. حس می‌کنید یک پوشه واقعی جلوی شماست و می‌توانید برگه‌ها را مرتب کنید.
  • حذف دوره: در صورت لغو یا پایان دوره، آن را حذف می‌کنید. برنامه قبل از حذف، تاییدیه می‌گیرد تا از حذف ناخواسته جلوگیری شود.
  • نمایش دوره‌ها: همه دوره‌ها در یک لیست قابل مشاهده هستند و با انتخاب هر دوره، جزئیات آن، دانشجویان و جلسات مرتبط نمایش داده می‌شود.

4️⃣ مدیریت دانشجویان

این بخش مانند دفترچه تلفن ویژه هر دوره است، اما امکانات بیشتری دارد:

  • افزودن دانشجو به دوره: فرم ثبت نام باز می‌شود و اطلاعات پایه دانشجو وارد می‌شود. حس می‌کنید دانشجوی جدید به دفترچه دوره اضافه شده و آماده پیگیری تحصیلی است.
  • ویرایش اطلاعات دانشجو: امکان اصلاح اطلاعات دانشجویان وجود دارد.
  • حذف دانشجو: دانشجویانی که دوره را ترک کرده‌اند، حذف می‌شوند. برنامه قبل از حذف، تاییدیه می‌خواهد.
  • مشاهده لیست دانشجویان: همه دانشجویان در یک جدول ساده قابل مشاهده هستند و وضعیت حضور و نمرات آنها نیز نمایش داده می‌شود.

5️⃣ مدیریت جلسات و حضور و غیاب

در این بخش، معلم حس می‌کند کنترل کامل کلاس را دارد:

  • ثبت حضور و غیاب: برای هر جلسه، حضور یا غیاب دانشجویان با یک کلیک ثبت می‌شود. حس می‌کنید دفتر حضور و غیاب واقعی جلوی شماست، اما بدون کاغذبازی.
  • سابقه حضور: تاریخچه حضور هر دانشجو قابل مشاهده است.
  • جلسات آینده: امکان اضافه کردن جلسات جدید و به‌روزرسانی برنامه کلاس وجود دارد.

6️⃣ مدیریت نمرات

این بخش امکان پیگیری پیشرفت تحصیلی دانشجویان را فراهم می‌کند:

  • ثبت نمره میان‌ترم و پایان‌ترم: نمرات به راحتی وارد و مرتب نمایش داده می‌شوند.
  • ویرایش نمره: امکان اصلاح نمرات اشتباه وجود دارد.
  • مشاهده وضعیت تحصیلی: میانگین و وضعیت تحصیلی هر دانشجو با یک نگاه قابل مشاهده است.

7️⃣ گزارش‌ها و خلاصه اطلاعات

این بخش حکم داشبورد مدیریتی شما را دارد:

  • مشاهده لیست کامل دانشجویان هر دوره
  • مشاهده تاریخچه جلسات و وضعیت حضور و غیاب
  • مشاهده نمرات و میانگین دوره
  • امکان خروجی گرفتن یا مشاهده گرافیکی اطلاعات

معلم با این داشبورد حس می‌کند همه اطلاعات تحت کنترل است و هیچ چیزی از قلم نمی‌افتد.

8️⃣ مدیریت پروفایل معلم

این بخش امکان شخصی‌سازی حساب کاربری را فراهم می‌کند:

  • مشاهده و ویرایش اطلاعات شخصی: نام، ایمیل، شماره تماس و جزئیات دیگر قابل ویرایش هستند.
  • تغییر رمز عبور: امنیت حساب تضمین می‌شود.
  • حذف حساب کاربری: امکان حذف کامل حساب با تاییدیه وجود دارد.

این بخش حس کنترل و مالکیت کامل روی حساب کاربری را منتقل می‌کند.

مسیر حرکت کاربر

  1. ورود به برنامه → انتخاب ثبت‌نام یا ورود
  2. پس از ورود موفق → منوی اصلی
  3. انتخاب بخش موردنظر: مدیریت دوره‌ها، دانشجویان، جلسات، نمرات، گزارش‌ها، پروفایل
  4. در هر بخش → انجام عملیات مربوطه: افزودن، ویرایش، حذف، مشاهده
  5. مشاهده داشبورد و خلاصه اطلاعات → تصمیم‌گیری سریع و دقیق

🔹 رویکردهای پیاده‌سازی

برای حل این مسئله، دو رویکرد متفاوت به کار گرفته شده است:

1.رویکرد ساخت‌یافته (Structural):

  • پوشه‌ی structural شامل تمام فایل‌ها و کدهای مربوط به پیاده‌سازی سنتی و ساخت‌یافته پروژه است.
  • این نسخه برای آشنایی با توابع، ساختار داده‌ها و منطق برنامه‌نویسی مرحله‌به‌مرحله مناسب است.

2.رویکرد شی‌گرا (OOP):

  • پوشه‌ی OOP شامل پیاده‌سازی کامل پروژه با استفاده از کلاس‌ها، اشیاء و اصول شی‌گرایی است.
  • این نسخه به شما امکان می‌دهد با اصول شی‌گرایی، نگهداری کد و مقیاس‌پذیری سیستم آشنا شوید.

هر دو رویکرد به صورت مستقل یک پروژه کامل و قابل اجرا هستند و می‌توانید هر کدام را به دلخواه انتخاب کنید.


🔹 ساختار پوشه‌بندی و ماژول‌ها

CourseManagement/
│
├── README.md
├── requirements.txt
├── LICENSE
├── .gitignore
│
├── structural/
│   ├── storage/
│   │   ├── __init__.py
│   │   ├── file_connection.py
│   │   └── helpers.py
│   │
│   ├── models/
│   │   ├── __init__.py
│   │   ├── course.py
│   │   ├── student.py
│   │   └── attendance.py
│   │
│   ├── views/
│   │   ├── __init__.py
│   │   ├── course_view.py
│   │   ├── student_view.py
│   │   └── report_view.py
│   │
│   ├── controllers/
│   │   ├── __init__.py
│   │   ├── course_controller.py
│   │   ├── student_controller.py
│   │   └── attendance_controller.py
│   │
│   └── main.py
│
├── OOP/
│   ├── db/
│   │   ├── __init__.py
│   │   ├── connection.py
│   │   └── init_db.py
│   │
│   ├── models/
│   │   ├── __init__.py
│   │   ├── course.py
│   │   ├── student.py
│   │   ├── attendance.py
│   │   └── grade.py
│   │
│   ├── views/
│   │   ├── __init__.py
│   │   ├── course_view.py
│   │   ├── student_view.py
│   │   └── report_view.py
│   │
│   ├── controllers/
│   │   ├── __init__.py
│   │   ├── course_controller.py
│   │   ├── student_controller.py
│   │   └── attendance_controller.py
│   │
│   └── main.py
│
└── tests/
    ├── __init__.py
    ├── test_structural/
    │   ├── test_course.py
    │   └── test_student.py
    └── test_OOP/
        ├── test_course.py
        └── test_student.py

🔹 توضیح مفصل نقش هر فایل و ماژول

1️⃣ فایل‌های اصلی ریپازیتوری

  • README.md:
    شامل توضیحات کامل پروژه، سناریو، راهنمای اجرا، معماری و توضیحات آموزشی برای دو رویکرد.

  • requirements.txt:
    فهرست کتابخانه‌ها و بسته‌های مورد نیاز، مخصوصاً برای بخش OOP که sqlite3 و سایر کتابخانه‌ها را شامل می‌شود.

  • LICENSE:
    مشخص‌کننده مجوز استفاده از پروژه (مثل MIT).

  • .gitignore:
    تعیین فایل‌ها و پوشه‌هایی که نباید در گیت دنبال شوند، مانند فایل‌های دیتابیس و pycache.


2️⃣ پوشه structural/ (فانکشنال و ساختیافته)

2.1 پوشه storage/

  • file_connection.py:
    مسئول خواندن و نوشتن داده‌ها در فایل‌ها (CSV یا JSON). مدیریت ذخیره‌سازی، لود داده‌ها و مدیریت فایل‌ها.

  • helpers.py:
    توابع کمکی برای پردازش داده‌ها و تبدیل فرمت‌ها بین فایل و ساختار دیکشنری یا لیست.

2.2 پوشه models/

  • course.py:
    تعریف مدل داده‌ای دوره‌ها و توابع مرتبط (افزودن، حذف، ویرایش دوره).

  • student.py:
    مدل دانشجویان و توابع مدیریت اطلاعات آن‌ها (افزودن، ویرایش، حذف).

  • attendance.py:
    نگهداری و مدیریت اطلاعات حضور و غیاب دانشجویان در جلسات.

در رویکرد فانکشنال، این فایل‌ها عمدتاً شامل توابع هستند.

2.3 پوشه views/

  • course_view.py: نمایش اطلاعات دوره‌ها و دریافت ورودی مرتبط.
  • student_view.py: نمایش اطلاعات دانشجویان و دریافت ورودی برای عملیات‌های دانشجو.
  • report_view.py: نمایش گزارش‌ها و خلاصه اطلاعات (حضور و غیاب و نمرات).

ویوها هیچ منطق داده‌ای ندارند و فقط رابط کاربری هستند.

2.4 پوشه controllers/

  • course_controller.py: هماهنگی بین مدل و ویو برای مدیریت دوره‌ها.
  • student_controller.py: مدیریت عملیات دانشجویان و هماهنگی بین مدل و ویو.
  • attendance_controller.py: مدیریت حضور و غیاب و هماهنگی بین مدل و ویو.

کنترلرها شامل منطق اصلی برنامه و رابط بین مدل و ویو هستند.

2.5 فایل main.py

  • نقطه شروع اجرای برنامه.
  • نمایش منوی اصلی، مدیریت مسیر کاربر و فراخوانی کنترلرها.

3️⃣ پوشه OOP/ (شی‌گرا با SQLite)

3.1 پوشه db/

  • connection.py: ایجاد و مدیریت کانکشن دیتابیس SQLite و اجرای query‌ها.
  • init_db.py: ایجاد جداول اولیه (دوره‌ها، دانشجویان، حضور و غیاب، نمرات) و آماده‌سازی دیتابیس.

3.2 پوشه models/

  • course.py, student.py, attendance.py, grade.py:
    تعریف کلاس‌ها برای هر موجودیت با متدهای CRUD و ارتباط با دیتابیس SQLite.

3.3 پوشه views/

  • course_view.py, student_view.py, report_view.py:
    رابط کاربری مشابه فانکشنال برای نمایش و دریافت داده.
    هیچ منطق داده‌ای در این بخش وجود ندارد.

3.4 پوشه controllers/

  • course_controller.py, student_controller.py, attendance_controller.py:
    مدیریت منطق برنامه، هماهنگی بین مدل‌ها و ویوها و اجرای عملیات CRUD روی دیتابیس.

3.5 فایل main.py

  • نقطه شروع اجرای برنامه.
  • مدیریت مسیر کاربر و فراخوانی کنترلرها برای عملیات‌ها.

4️⃣ پوشه tests/

  • test_structural/: تست واحد برای رویکرد فانکشنال، بررسی توابع مدل‌ها، کنترلرها و ذخیره‌سازی.
  • test_OOP/: تست واحد برای رویکرد شی‌گرا، بررسی کلاس‌ها، متدها و ارتباط با دیتابیس.

تضمین می‌کند هر دو رویکرد مستقل و قابل اطمینان هستند.


✅ جمع‌بندی مزایای این ساختار

  1. انعطاف‌پذیری بالا و توسعه مستقل هر بخش
  2. تفکیک واضح مسئولیت‌ها بین مدل، ویو و کنترلر
  3. قابلیت تست‌پذیری با پوشه tests
  4. پشتیبانی از دو رویکرد مستقل: ساختیافته و شی‌گرا
  5. نگهداری آسان و مقیاس‌پذیری بدون تاثیر بر سایر بخش‌ها

🚀 نحوه اجرای پروژه

این پروژه شامل دو پیاده‌سازی مستقل از یک مسئله واحد است:

  • پیاده‌سازی ساخت‌یافته (Functional / Structural)
  • پیاده‌سازی شی‌گرا (Object-Oriented / OOP)

هر کدام از این دو بخش به‌صورت جداگانه قابل اجرا هستند و به یکدیگر وابستگی ندارند.


📌 پیش‌نیازها

قبل از اجرای پروژه، مطمئن شوید موارد زیر روی سیستم شما نصب شده‌اند:

  • Python نسخه 3.8 یا بالاتر
  • Git (اختیاری، فقط برای کلون کردن ریپازیتوری)

بررسی نسخه پایتون:

python --version

📥 دریافت پروژه

git clone <repository-url>
cd CourseManagement

▶️ اجرای نسخه ساخت‌یافته (Structural) این نسخه با رویکرد فانکشنال پیاده‌سازی شده و از فایل‌ها (مانند JSON یا CSV) برای ذخیره‌سازی داده‌ها استفاده می‌کند.

  1. ورود به پوشه مربوطه:
cd structural
  1. اجرای برنامه:
python main.py
  1. پس از اجرا، منوی کنسولی برنامه نمایش داده می‌شود و می‌توانید:
  • ثبت‌نام یا ورود معلم را انجام دهید

  • دوره‌ها، دانشجویان، حضور و غیاب و نمرات را مدیریت کنید


▶️ اجرای نسخه شی‌گرا (OOP)

این نسخه با رویکرد شی‌گرایی پیاده‌سازی شده و از دیتابیس SQLite برای ذخیره‌سازی اطلاعات استفاده می‌کند.

  1. ورود به پوشه OOP:
cd OOP
  1. (اختیاری اما توصیه‌شده) ایجاد جداول دیتابیس:
python db/init_db.py
  1. اجرای برنامه:
python main.py
  1. تمام اطلاعات در دیتابیس SQLite ذخیره می‌شوند و به‌صورت دائمی باقی می‌مانند.

🧪 اجرای تست‌ها

برای اطمینان از صحت عملکرد بخش‌های مختلف، تست واحد برای هر دو رویکرد در نظر گرفته شده است.

اجرای همه تست‌ها:

python -m unittest

اجرای تست‌های رویکرد ساخت‌یافته:

python -m unittest tests/test_structural

اجرای تست‌های رویکرد شی‌گرا:

python -m unittest tests/test_OOP

📝 نکات مهم

پوشه‌های structural و OOP کاملاً مستقل هستند.

  • هر دو نسخه یک مسئله را با دو رویکرد متفاوت حل می‌کنند.

  • این پروژه صرفاً آموزشی است و برای درک بهتر معماری MVC، تفکیک مسئولیت‌ها و مقایسه دو سبک برنامه‌نویسی طراحی شده است.

  • می‌توانید هر بخش را بدون تأثیر روی بخش دیگر توسعه یا تغییر دهید.


📌 توجه: این پروژه صرفاً آموزشی و تمرینی است و برای یادگیری مفاهیم برنامه‌نویسی پایتون طراحی شده است.

About

This repository contains Python programming educational code. The goal is not just solving a simple example, but rather teaching idea development to nurture a programmer's mindset.

Resources

Stars

11 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors