این پروژه یک اپلیکیشن آموزشی است که با زبان برنامهنویسی پایتون طراحی شده و هدف اصلی آن یادگیری مفاهیم برنامهنویسی و پیادهسازی یک سیستم واقعی است.
این پروژه به شما امکان میدهد که با مفاهیم ورودی و خروجی داده، مدیریت دادهها، منوها و فرمها، ثبت و ویرایش اطلاعات و پیادهسازی منطق مدیریتی به صورت کاربردی آشنا شوید.
تمامی بخشهای این پروژه به گونهای طراحی شدهاند که قابل فهم برای دانشجویان و معلمان تازهکار باشند و مسیر یادگیری مرحلهبهمرحله را تسهیل کنند.
هدف از این پروژه، ساخت یک کنسول اپلیکیشن مدیریت دورههای آموزشی است که بتواند:
- افزودن دورههای جدید به همراه تعداد جلسات
- افزودن لیست دانشجویان به هر دوره
- ثبت حضور و غیاب دانشجویان برای هر جلسه
- ثبت نمره میانترم و پایانترم
- ویرایش یا حذف اطلاعات دانشجو
- ویرایش یا حذف اطلاعات دوره
این سیستم باید به گونهای باشد که مدیریت دورهها، دانشجویان و جلسات به شکل ساده و منظم انجام شود و تجربه کاربری روان و قابل درک برای معلم ایجاد کند.
تصور کنید شما معلم یک مرکز آموزشی هستید که چندین دورهی متنوع برگزار میکند. مدیریت همهی این دورهها، دانشجویان و جلسات میتواند پیچیده و زمانبر باشد. اپلیکیشن مدیریت دورهها این کار را به شکل ساده، روان و بسیار کارآمد انجام میدهد، بدون اینکه شما نیاز داشته باشید به جزئیات فنی فکر کنید.
وقتی برنامه برای اولین بار اجرا میشود، صفحهای باز میشود که سه گزینه واضح و قابل درک دارد: ورود، ثبتنام و خروج.
- ثبتنام: اگر شما معلم جدید هستید، با انتخاب این گزینه وارد یک فرم ساده و دلپذیر میشوید که اطلاعات پایهی شما مثل نام، ایمیل، شماره تماس و رمز عبور را میگیرد. در اینجا حس میکنید دارید یک کارت شناسایی دیجیتال برای خودتان ایجاد میکنید که در ادامه تمام تعاملات شما با سیستم را امکانپذیر میکند. پس از ثبتنام موفق، برنامه شما را به منوی اصلی هدایت میکند.
- ورود: اگر قبلاً ثبتنام کردهاید، با وارد کردن ایمیل و رمز عبور وارد محیط برنامه میشوید. در این مرحله، برنامه با یک پیام خوشآمدگویی شما را به سمت داشبورد اصلی هدایت میکند و حس امنیت و کنترل کامل روی دادههایتان ایجاد میکند.
- خروج: این گزینه ساده، برای زمانی است که بخواهید برنامه را ببندید یا از صفحه ورود خارج شوید.
تنها معلمانی که ثبتنام کرده و وارد شدهاند، میتوانند به امکانات اصلی دسترسی داشته باشند. این فرآیند امنیت و اختصاصی بودن محیط را تضمین میکند.
پس از ورود موفق، معلم با یک منوی اصلی واضح و خوشساخت مواجه میشود. این منو حکم مرکز فرماندهی شما را دارد و تمام مسیرهای مدیریت دورهها از اینجا آغاز میشوند.
بخشهای منو شامل:
- مدیریت دورهها
- مدیریت دانشجویان
- مدیریت جلسات و حضور و غیاب
- مدیریت نمرات
- گزارشها و خلاصه اطلاعات
- مدیریت پروفایل معلم
هر بخش با آیکون و توضیح کوتاه نمایش داده شده است. حتی معلمان تازهکار میتوانند بدون آموزش خاصی، تمام امکانات را پیدا کنند.
این بخش مثل یک دفترچه دیجیتال برای همه دورههای شماست. شما حس میکنید که هر دوره یک پوشه مستقل دارد که تمام اطلاعات مربوط به آن در یک نگاه قابل مشاهده است.
- افزودن دوره جدید: وارد یک فرم میشوید که نام دوره، تعداد جلسات و توضیح کوتاه درباره محتوا را وارد میکنید. حس میکنید دارید یک کارت دیجیتال برای هر دوره ایجاد میکنید.
- ویرایش دوره: تغییر نام، تعداد جلسات یا توضیحات دوره به راحتی ممکن است. حس میکنید یک پوشه واقعی جلوی شماست و میتوانید برگهها را مرتب کنید.
- حذف دوره: در صورت لغو یا پایان دوره، آن را حذف میکنید. برنامه قبل از حذف، تاییدیه میگیرد تا از حذف ناخواسته جلوگیری شود.
- نمایش دورهها: همه دورهها در یک لیست قابل مشاهده هستند و با انتخاب هر دوره، جزئیات آن، دانشجویان و جلسات مرتبط نمایش داده میشود.
این بخش مانند دفترچه تلفن ویژه هر دوره است، اما امکانات بیشتری دارد:
- افزودن دانشجو به دوره: فرم ثبت نام باز میشود و اطلاعات پایه دانشجو وارد میشود. حس میکنید دانشجوی جدید به دفترچه دوره اضافه شده و آماده پیگیری تحصیلی است.
- ویرایش اطلاعات دانشجو: امکان اصلاح اطلاعات دانشجویان وجود دارد.
- حذف دانشجو: دانشجویانی که دوره را ترک کردهاند، حذف میشوند. برنامه قبل از حذف، تاییدیه میخواهد.
- مشاهده لیست دانشجویان: همه دانشجویان در یک جدول ساده قابل مشاهده هستند و وضعیت حضور و نمرات آنها نیز نمایش داده میشود.
در این بخش، معلم حس میکند کنترل کامل کلاس را دارد:
- ثبت حضور و غیاب: برای هر جلسه، حضور یا غیاب دانشجویان با یک کلیک ثبت میشود. حس میکنید دفتر حضور و غیاب واقعی جلوی شماست، اما بدون کاغذبازی.
- سابقه حضور: تاریخچه حضور هر دانشجو قابل مشاهده است.
- جلسات آینده: امکان اضافه کردن جلسات جدید و بهروزرسانی برنامه کلاس وجود دارد.
این بخش امکان پیگیری پیشرفت تحصیلی دانشجویان را فراهم میکند:
- ثبت نمره میانترم و پایانترم: نمرات به راحتی وارد و مرتب نمایش داده میشوند.
- ویرایش نمره: امکان اصلاح نمرات اشتباه وجود دارد.
- مشاهده وضعیت تحصیلی: میانگین و وضعیت تحصیلی هر دانشجو با یک نگاه قابل مشاهده است.
این بخش حکم داشبورد مدیریتی شما را دارد:
- مشاهده لیست کامل دانشجویان هر دوره
- مشاهده تاریخچه جلسات و وضعیت حضور و غیاب
- مشاهده نمرات و میانگین دوره
- امکان خروجی گرفتن یا مشاهده گرافیکی اطلاعات
معلم با این داشبورد حس میکند همه اطلاعات تحت کنترل است و هیچ چیزی از قلم نمیافتد.
این بخش امکان شخصیسازی حساب کاربری را فراهم میکند:
- مشاهده و ویرایش اطلاعات شخصی: نام، ایمیل، شماره تماس و جزئیات دیگر قابل ویرایش هستند.
- تغییر رمز عبور: امنیت حساب تضمین میشود.
- حذف حساب کاربری: امکان حذف کامل حساب با تاییدیه وجود دارد.
این بخش حس کنترل و مالکیت کامل روی حساب کاربری را منتقل میکند.
- ورود به برنامه → انتخاب ثبتنام یا ورود
- پس از ورود موفق → منوی اصلی
- انتخاب بخش موردنظر: مدیریت دورهها، دانشجویان، جلسات، نمرات، گزارشها، پروفایل
- در هر بخش → انجام عملیات مربوطه: افزودن، ویرایش، حذف، مشاهده
- مشاهده داشبورد و خلاصه اطلاعات → تصمیمگیری سریع و دقیق
برای حل این مسئله، دو رویکرد متفاوت به کار گرفته شده است:
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
-
README.md:
شامل توضیحات کامل پروژه، سناریو، راهنمای اجرا، معماری و توضیحات آموزشی برای دو رویکرد. -
requirements.txt:
فهرست کتابخانهها و بستههای مورد نیاز، مخصوصاً برای بخش OOP که sqlite3 و سایر کتابخانهها را شامل میشود. -
LICENSE:
مشخصکننده مجوز استفاده از پروژه (مثل MIT). -
.gitignore:
تعیین فایلها و پوشههایی که نباید در گیت دنبال شوند، مانند فایلهای دیتابیس و pycache.
-
file_connection.py:
مسئول خواندن و نوشتن دادهها در فایلها (CSV یا JSON). مدیریت ذخیرهسازی، لود دادهها و مدیریت فایلها. -
helpers.py:
توابع کمکی برای پردازش دادهها و تبدیل فرمتها بین فایل و ساختار دیکشنری یا لیست.
-
course.py:
تعریف مدل دادهای دورهها و توابع مرتبط (افزودن، حذف، ویرایش دوره). -
student.py:
مدل دانشجویان و توابع مدیریت اطلاعات آنها (افزودن، ویرایش، حذف). -
attendance.py:
نگهداری و مدیریت اطلاعات حضور و غیاب دانشجویان در جلسات.
در رویکرد فانکشنال، این فایلها عمدتاً شامل توابع هستند.
- course_view.py: نمایش اطلاعات دورهها و دریافت ورودی مرتبط.
- student_view.py: نمایش اطلاعات دانشجویان و دریافت ورودی برای عملیاتهای دانشجو.
- report_view.py: نمایش گزارشها و خلاصه اطلاعات (حضور و غیاب و نمرات).
ویوها هیچ منطق دادهای ندارند و فقط رابط کاربری هستند.
- course_controller.py: هماهنگی بین مدل و ویو برای مدیریت دورهها.
- student_controller.py: مدیریت عملیات دانشجویان و هماهنگی بین مدل و ویو.
- attendance_controller.py: مدیریت حضور و غیاب و هماهنگی بین مدل و ویو.
کنترلرها شامل منطق اصلی برنامه و رابط بین مدل و ویو هستند.
- نقطه شروع اجرای برنامه.
- نمایش منوی اصلی، مدیریت مسیر کاربر و فراخوانی کنترلرها.
- connection.py: ایجاد و مدیریت کانکشن دیتابیس SQLite و اجرای queryها.
- init_db.py: ایجاد جداول اولیه (دورهها، دانشجویان، حضور و غیاب، نمرات) و آمادهسازی دیتابیس.
- course.py, student.py, attendance.py, grade.py:
تعریف کلاسها برای هر موجودیت با متدهای CRUD و ارتباط با دیتابیس SQLite.
- course_view.py, student_view.py, report_view.py:
رابط کاربری مشابه فانکشنال برای نمایش و دریافت داده.
هیچ منطق دادهای در این بخش وجود ندارد.
- course_controller.py, student_controller.py, attendance_controller.py:
مدیریت منطق برنامه، هماهنگی بین مدلها و ویوها و اجرای عملیات CRUD روی دیتابیس.
- نقطه شروع اجرای برنامه.
- مدیریت مسیر کاربر و فراخوانی کنترلرها برای عملیاتها.
- test_structural/: تست واحد برای رویکرد فانکشنال، بررسی توابع مدلها، کنترلرها و ذخیرهسازی.
- test_OOP/: تست واحد برای رویکرد شیگرا، بررسی کلاسها، متدها و ارتباط با دیتابیس.
تضمین میکند هر دو رویکرد مستقل و قابل اطمینان هستند.
- انعطافپذیری بالا و توسعه مستقل هر بخش
- تفکیک واضح مسئولیتها بین مدل، ویو و کنترلر
- قابلیت تستپذیری با پوشه
tests - پشتیبانی از دو رویکرد مستقل: ساختیافته و شیگرا
- نگهداری آسان و مقیاسپذیری بدون تاثیر بر سایر بخشها
این پروژه شامل دو پیادهسازی مستقل از یک مسئله واحد است:
- پیادهسازی ساختیافته (Functional / Structural)
- پیادهسازی شیگرا (Object-Oriented / OOP)
هر کدام از این دو بخش بهصورت جداگانه قابل اجرا هستند و به یکدیگر وابستگی ندارند.
قبل از اجرای پروژه، مطمئن شوید موارد زیر روی سیستم شما نصب شدهاند:
- Python نسخه 3.8 یا بالاتر
- Git (اختیاری، فقط برای کلون کردن ریپازیتوری)
بررسی نسخه پایتون:
python --versiongit clone <repository-url>
cd CourseManagement- ورود به پوشه مربوطه:
cd structural- اجرای برنامه:
python main.py- پس از اجرا، منوی کنسولی برنامه نمایش داده میشود و میتوانید:
-
ثبتنام یا ورود معلم را انجام دهید
-
دورهها، دانشجویان، حضور و غیاب و نمرات را مدیریت کنید
این نسخه با رویکرد شیگرایی پیادهسازی شده و از دیتابیس SQLite برای ذخیرهسازی اطلاعات استفاده میکند.
- ورود به پوشه OOP:
cd OOP- (اختیاری اما توصیهشده) ایجاد جداول دیتابیس:
python db/init_db.py- اجرای برنامه:
python main.py- تمام اطلاعات در دیتابیس SQLite ذخیره میشوند و بهصورت دائمی باقی میمانند.
برای اطمینان از صحت عملکرد بخشهای مختلف، تست واحد برای هر دو رویکرد در نظر گرفته شده است.
اجرای همه تستها:
python -m unittestاجرای تستهای رویکرد ساختیافته:
python -m unittest tests/test_structuralاجرای تستهای رویکرد شیگرا:
python -m unittest tests/test_OOPپوشههای structural و OOP کاملاً مستقل هستند.
-
هر دو نسخه یک مسئله را با دو رویکرد متفاوت حل میکنند.
-
این پروژه صرفاً آموزشی است و برای درک بهتر معماری MVC، تفکیک مسئولیتها و مقایسه دو سبک برنامهنویسی طراحی شده است.
-
میتوانید هر بخش را بدون تأثیر روی بخش دیگر توسعه یا تغییر دهید.
📌 توجه: این پروژه صرفاً آموزشی و تمرینی است و برای یادگیری مفاهیم برنامهنویسی پایتون طراحی شده است.