PDA

View Full Version : سوال: ثبت نام اشخاص در کلاس های فرهنگی هنری با سقف محدود



neda_dela
سه شنبه 25 خرداد 1389, 00:17 صبح
سلام دوستان
برنامه ای که من نوشتم تقریبا تکمیله و فعلا هم کاربر تعداد زیادی رکورد توش ثبت کرده
البته تا الان محدودیتی در ثبت رکورد نذاشتم
اما به درخواست کاربرم باید سقف کلاسها معلوم باشه و این تعداد عدد ممکنه هر ترم فرق کنه.
من باید برایتعیین سقف هر کلاس چند پارامتر رو در نظر بگیرم یعنی هر کلاس با این تعداد فیلدهایی که نام می برم معلوم میشه: نام کلاس(نقاشی، خطاطی، قرآن، ...) ، نام مربی، نام ترم (تابستان پاییز زمستان) و سال برگزاری
مثلا کاربر میخاد که سقف نام نویسی در کلاس قرآن با مربی گری خانم X در ترم تابستان سال 89 ، 25 نفر باشه و اگه کاربر بخاد نفر 26 رو ثبت نام کنه سیستم دیگه اجازه نده
امیدوارم کامل توضیح داده باشم:لبخندساده:

ricky22
سه شنبه 25 خرداد 1389, 03:33 صبح
دوست عزیزم سلام شما برای هر سکشن یک کد تعریف کن و کد را به همراه محدودیت در بانک اطلاعاتی ذخیره کن.
کلاس قرآن با مربی گری خانم X در ترم تابستان سال 89 کد 8080
در بانک تعریف کن کد 8080 26 نفر. با هر بار ثبت نام هم یک select از پایگاه بگیر ببین ثبت نام تکمیل شده یا نه؟
موفق باشی

M.YasPro
سه شنبه 25 خرداد 1389, 08:08 صبح
سلام
شما باید
1.یه جدول داشته باشید که هنرجو هاتون توش باشه که فیلدهاش مثلا :
idو نام و فامیل و ....

2. یه جدول که کلاس ها رو برای هر دوره درج کنید .
idونام کلاس و نام مربی و ظرفیت و تارخ شروع و تاریخ پایان و ....



3.یه جدول هم که لیست کلاسیتون هست . ClassList
id و ای دی کلاس و id هنرجو و ....

شما یک بار نام هنرجو ها رو وارد می کنید .

به ازای هر کلاس جدیدی که میخواهید برگزار کنید یه رکورد تو جدول کلاس ها درج می کنید . با فیلد ظرفیت

و به ازای هر بار ثبت نام هر هنرجو توی یه کلاس بخصوص ، یه رکورد توی لیست کلاسیتون درج میکنید .



حالا مشکلتون :
راه حلش فکر کنم مشخص شده باشه .
شما در مورد شماره 2 می تونید ظرفیت هر کلاس رو مشخص کنید . برای اطلاع از اینکه ظرفیت کلاس مورد نظر پر شده یا نه می تونید با یه کوئری مثل :


select count(*) from ClassList where ClassCode=8080

تعداد افرادی رو که توی کلاس شماره 8080 رو ثبت نام کردن بدست بیارید . اگر مثلا بیشتر از فیلد ظرفیت کلاس رکورد جدید رو درج نکنه و پیغام بده .


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

ricky22
سه شنبه 25 خرداد 1389, 08:20 صبح
سلام
شما باید
1.یه جدول داشته باشید که هنرجو هاتون توش باشه که فیلدهاش مثلا :
idو نام و فامیل و ....

2. یه جدول که کلاس ها رو برای هر دوره درج کنید .
idونام کلاس و نام مربی و ظرفیت و تارخ شروع و تاریخ پایان و ....



3.یه جدول هم که لیست کلاسیتون هست . ClassList
id و ای دی کلاس و id هنرجو و ....

شما یک بار نام هنرجو ها رو وارد می کنید .

به ازای هر کلاس جدیدی که میخواهید برگزار کنید یه رکورد تو جدول کلاس ها درج می کنید . با فیلد ظرفیت

و به ازای هر بار ثبت نام هر هنرجو توی یه کلاس بخصوص ، یه رکورد توی لیست کلاسیتون درج میکنید .



حالا مشکلتون :
راه حلش فکر کنم مشخص شده باشه .
شما در مورد شماره 2 می تونید ظرفیت هر کلاس رو مشخص کنید . برای اطلاع از اینکه ظرفیت کلاس مورد نظر پر شده یا نه می تونید با یه کوئری مثل :


select count(*) from ClassList where ClassCode=8080

تعداد افرادی رو که توی کلاس شماره 8080 رو ثبت نام کردن بدست بیارید . اگر مثلا بیشتر از فیلد ظرفیت کلاس رکورد جدید رو درج نکنه و پیغام بده .


امیدوارم مفید واقع بشه . سوالی بود مطرح کنید .
موفق باشید .
سلام
خب اگه یک کلاس با یک استاد در 2 ساعت برگزار شه چی؟
مثلا کلاس ریاضی استاد کیاست یکی ساعت 8 تا 10 یکی هم 10 تا 12
شما باید برای هر کدام از این کلاس ها یک جدول بسازی!

M.YasPro
سه شنبه 25 خرداد 1389, 08:47 صبح
تو جدول کلاسها ، به ازای هر کلاسی که جدیدا می خواد برگزار بشه یه رکورد جدید درج میشه .
جواب سوالتونو گرفتید ؟

saed2006
چهارشنبه 26 خرداد 1389, 08:54 صبح
راه اصولی استفاده از تریگر در دیتا بیس هست شما میتوانید با اعمال محدودیت روی جدول مورد نظر به کاربر اجازه ورود اطلاعات غیر مجاز را ندهید
موفق باشید

mmd2009
چهارشنبه 26 خرداد 1389, 09:01 صبح
سلام

من این کارو واسه یکی از برنامه ها کردم 6 ماه پیش و العا هم ازش خیلی راضی هستند

شما بهتره یک بخش رو به عنوان مدیریت کلاس ها درست کنید

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

امیدوارم منظورم رو رسونده باشم

زنده باد یوونتوس

saed2006
چهارشنبه 26 خرداد 1389, 10:11 صبح
دستور ساخت تریگر روی جدول:

CREATE TRIGGER trg
ON your table
before INSERT, UPDATE, DELETE
AS

شرط ها و محدودیت ها رو اینجا بنویس
GO

mmd2009
چهارشنبه 26 خرداد 1389, 10:15 صبح
دستور ساخت تریگر روی جدول:

CREATE TRIGGER trg
ON your table
before INSERT, UPDATE, DELETE
AS

شرط ها و محدودیت ها رو اینجا بنویس
GO

دوست عزیز یک سوال

این تریگر که شما گفتی اگه قرار باشه سال بعدی تعداد کلاس ها از 30 به 40 افزایش پیدا کنه بازم اعتبار داره ؟

زنده با یوونتوس

ricky22
چهارشنبه 26 خرداد 1389, 10:55 صبح
دوست عزیز یک سوال

این تریگر که شما گفتی اگه قرار باشه سال بعدی تعداد کلاس ها از 30 به 40 افزایش پیدا کنه بازم اعتبار داره ؟

زنده با یوونتوس
خب اون موقع باید عوض کنه شرط تریگر رو
به نظر من اگه برنامه قراره پویایی داشته باشه باید محدودیت ها یه جا ذخیره شه که تغییرش دست کاربر باشه.

mmd2009
چهارشنبه 26 خرداد 1389, 11:13 صبح
مشکل هم همینجاست که باید برنامه 100% پویا باشه مخصوصا واسه اموزشگاه هایی که همه ساله با تغییراتی رو به رو هستند خصوصا تو ایران :افسرده:

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

زنده باد یوونتوس

goolestan
چهارشنبه 26 خرداد 1389, 13:41 عصر
یه توصیه برای دوستان تاجای که میتونی از Trigger استفاده نکنید مخصوصا برای دیتابیس های پیچیده و اگر هم استفاده کردی باید خیلی هواست بهش باشه
ضمنا تاجای که میتونی برنامه ات را به دیتابیس وابسطه نکن تا اگه روزی خواستی بانکت را عوض کنی به کد برنامه ات دست نزنی
موفق باشید

neda_dela
پنج شنبه 27 خرداد 1389, 10:52 صبح
تو جدول کلاسها ، به ازای هر کلاسی که جدیدا می خواد برگزار بشه یه رکورد جدید درج میشه .
جواب سوالتونو گرفتید ؟
مرسی دوست من
خوب من جدول 1 رو که گفته بودید دارم . یه جدول دیگه هم دارم که اطلاعات کلاس ها توش قرار می گیره نام کلاس و نام مربی و ترم و سال و ساعت و ...
حالا جدول سومی که گفته بودید فکر کنم باید اون فیلدهایی که نام برده بودم باید توش باشن + ظرفیت درسته ؟
یعنی همون نام کلاس و نام مربی و ساعت و ترم و روزهای برگزاری و + ظرفیت هر کلاس
من اسم جدول دومی رو که گفته بودید رو می ذارم جدول ظرفیت کلاسها
جدول سوم هم که همون جدولیه که من اطلاعات کلاس هام رو الان توش ذخیره کردم و موجوده
حالا اون 80 80 که گفته بودید کد کلاسه باید فیلدش توی کدوم یک از جدولهایی که نام بردید قرار بگیره ؟ توی جدول ظرفیت کلاسها یا نه جدول اطلاعات کلاسی؟
یه کم بیشتر تر کمکم کنید. من جداول رو می سازم اگه اشکال برام پیش اومد دوباره می پرسم
ممنون از شما:لبخندساده:

M.YasPro
پنج شنبه 27 خرداد 1389, 11:41 صبح
خوب من جدول 1 رو که گفته بودید دارم . یه جدول دیگه هم دارم که اطلاعات کلاس ها توش قرار می گیره نام کلاس و نام مربی و ترم و سال و ساعت و ...
حالا جدول سومی که گفته بودید فکر کنم باید اون فیلدهایی که نام برده بودم باید توش باشن + ظرفیت درسته ؟
یعنی همون نام کلاس و نام مربی و ساعت و ترم و روزهای برگزاری و + ظرفیت هر کلاس
من اسم جدول دومی رو که گفته بودید رو می ذارم جدول ظرفیت کلاسها

ببینید شما باید هر چیزی توی برنامه تون رو به صورت یک موجودیت در نظر بگیرید.
کلاس یک موجودیت هست که میتونیم از اون کلاس 1 کلاس 2 کلاس 3 رو نمونه سازی کنیم .
حالا شما این موجودیت (کلاس) رو یک جدول در دیتابیس در نظر گرفتیم که هر رکورد داخل این جدول ، یک نمونه از این موجودیت هست .
خصوصیت ظرفیت مربوط به چه موجودیتی میشه ؟ هنرجو یا کلاس؟ مطمئنا کلاس .


البته من فکر میکنم شما جدول 2 رو با جدول 3 اشتباه گرفتید .

جدول 2 مثلا با اسم Classes موجودیت کلاس رو تعریف می کنه .
جدول 3 لیست افراد حاضر در کلاس رو بیان می کنه .


در ضمن ما جدول ظرفیت کلاسی نداریم و نخواهیم داشت .
متاسفانه من sqlserver ندارم و گرنه براتون یه دیتابیس میفرستادم
سوالی بود مطرح کنید .
در ضمن چرا به جای یه select ساده از triger استفاده کنیم ؟
موفق باشید.

neda_dela
پنج شنبه 27 خرداد 1389, 15:38 عصر
ببینید شما باید هر چیزی توی برنامه تون رو به صورت یک موجودیت در نظر بگیرید.
کلاس یک موجودیت هست که میتونیم از اون کلاس 1 کلاس 2 کلاس 3 رو نمونه سازی کنیم .
حالا شما این موجودیت (کلاس) رو یک جدول در دیتابیس در نظر گرفتیم که هر رکورد داخل این جدول ، یک نمونه از این موجودیت هست .
خصوصیت ظرفیت مربوط به چه موجودیتی میشه ؟ هنرجو یا کلاس؟ مطمئنا کلاس .


البته من فکر میکنم شما جدول 2 رو با جدول 3 اشتباه گرفتید .

جدول 2 مثلا با اسم Classes موجودیت کلاس رو تعریف می کنه .
جدول 3 لیست افراد حاضر در کلاس رو بیان می کنه .


در ضمن ما جدول ظرفیت کلاسی نداریم و نخواهیم داشت .
متاسفانه من sqlserver ندارم و گرنه براتون یه دیتابیس میفرستادم
سوالی بود مطرح کنید .
در ضمن چرا به جای یه select ساده از triger استفاده کنیم ؟
موفق باشید.
مرسی آره من دو جدول رو اشتباه گرفته بودم
خب پس لطفا من رو برای تیبل جدیدی که قراره بسازم راهنمایی کنین
گفتم من جدول 1 که شامل اطلاعات هنرجو ها هست رو دارم
جدول دیگه ای هم دارم که اطلاعات کلاسها توش ذخیره میشه و بدون محدودیت توش رکورد ثبت میشه که همون اطلاعات کلاسها باشه
حالا جدول 3 چه فیلدهایی باید داشته باشه؟

M.YasPro
پنج شنبه 27 خرداد 1389, 16:41 عصر
تصویر ضمیمه جداول مربوط رو نشون میده .
1. تمام هنرجوها باید داخل جدول اطلاعات پایه (students) ثبت بشن .
2. به ازای هر کلاس جدیدی که راه اندازی میشه شما یک رکورد به جدول classes اضافه می کنی . فیلد ظرفیت رو هم اینجا براش در نظر می گیری .
تا اینجا که مشکلی ندارید ؟ کار خاصی نیست فقط درج در دیتابیس .

توی جدول ClassDetail تمام کسانی رو که میخوان توی کلاسها ثبت نام کنند رو درج می کنید . هر هنرجو یک شماره منحصر به فرد داره (StudentID ) ، هر کلاس هم یک شماره منحصر به فرد داره که نسبت به کلاس درخواستی کدش (ClassID) توی جدول ClassDetail درج میشه .

حالا شما برای چک کردن ظرفیت قبل از اینکه یک ثبت نام جدید در جدول ClassDetail انجام بدی ، این کوئری رو اجرا کن :



Select Count(*) from ClassDetail Where ClassDetail.ClassID=8080

این کوئری تعداد هنرجو های ثبت نام شده در کلاس کد 8080 رو بر می گردونه .



Select Capacity from Classes where ClassId=8080


این کوئری هم ظرفیت کلاس کد 8080 رو بر میگردونه .

با یه if ساده بین خروجی های این دو کوئری شما می تونید تشخیص بدید که ظرفیت کلاس پر شده یا نه .

شما با این روش میتونید n تا در هرزمان کلاس ایجاد کنید با ظرفیت های داینامیک .

در ضمن من برای جدول ها فقط فیلدهای اصلی رو گذاشتم .
موفق باشید .

neda_dela
پنج شنبه 27 خرداد 1389, 23:08 عصر
تصویر ضمیمه جداول مربوط رو نشون میده .

مرسی کاملا متوجه شدم و دارم پیاده سازیش می کنم اما حتما باز سوال برام پیش خواهد آمد مرسی

neda_dela
پنج شنبه 31 تیر 1389, 19:17 عصر
تصویر ضمیمه جداول مربوط رو نشون میده .
1. تمام هنرجوها باید داخل جدول اطلاعات پایه (students) ثبت بشن .
2. به ازای هر کلاس جدیدی که راه اندازی میشه شما یک رکورد به جدول classes اضافه می کنی . فیلد ظرفیت رو هم اینجا براش در نظر می گیری .
تا اینجا که مشکلی ندارید ؟ کار خاصی نیست فقط درج در دیتابیس .
...

بعد از مدتها دوباره سلام
راستی من یه سری از فیلدهام بین دو تا تنیبل مشترک میشه
مثلا کاربر که میخاد یه کلاس جدید رو ثبت کنه خوب باید علاوه بر کد مخصوص اون یه سری از ویژگی های اون کلاس رو هم وارد کنه دیگه مثل همون هایی که نام بردم : نام کلاس و ساعت و مربی و ...
حالا وقتی میخاد یه نفر رو توی اون کلاس خاص ثبت نام کنه باید دوباره این اطلاعات رو وارد کنه که فکر کنم خیلی user firendly نباشه
حالا چطوری میشه که وقت ثبت نام یه نفر توی یه کلاس خاص وقتی که کاربر کد کلاس رو وارد کرد بقیه اطلاعات و مشخصات کلاس با زدن دکمه ثبت در بانک درج بشه و دیگه نیازی نباشه که کاربر اطلاعات تکراری وارد کنه؟
متشکرم

M.YasPro
یک شنبه 10 مرداد 1389, 10:27 صبح
سلام ببخشید دیر جواب میدم
دیتابیستون رو مثل بنده توضیح بدید. چون با توضیحاتی که من بالا ارائه کردم چنین مشکلی قاعدتا نباید پیش بیاد . چون به ازای هر کلاس یک رکورد تو جدول classes و به ازای هر ثبت نام یک دانش آموز یک رکورد در جدول classDetail باید اضافه بشه . با استخراج هر رکورد از جدول classdetail میتونید به کد دانش اموز و کد کلاس ثبت نام شده دسترسی داشته باشید . توی این حالت افزونگی داده نخواهیم داشت و دیتابیس هم استاندارد هست .
کجاش مشکل داره از نظر شما ؟ لطفا دقیق توضیح بدید .

davood59
یک شنبه 10 مرداد 1389, 12:47 عصر
دوست عزیز جناب M.YasPro
طبق راهنمایی های شما فکر کنم شما در این زمینه زیاد کار کردید. آیا نمیتونید نمونه دیتابیسی در این زمینه نوشته و در سایت قرار دهید.
آخه من هم میخوام برای یه کلاس زبان وب سایتی طراحی کنم که دقیقا مشکل دوستمون رو دارم.
میشه با ارائه یک مثال، مشکلات مشترک را حل کنید؟(از جمله افزونگی، رعایت حداکثر نفرات و...)

violet87
یک شنبه 10 مرداد 1389, 13:53 عصر
سلام به دوستان
شما یه جدول دارید که اسم کلاساتون و کد و .... درش ذخیره می شه
شما می تونید یه لیست کشویی از کلاسایی که دارید درست کنید و با انتخاب یکی از اون ها نوع کلاس مشخص می شه دیگه با اتصال جدول کلاساتون و جدولی که اطلاعات ثبت نامی رو نگه می دارید می تونید گزارش بگیرید


امیدوارم به دردتون بخوره

M.YasPro
یک شنبه 10 مرداد 1389, 14:03 عصر
نه ، اتفاقا توی این فاز کار نکردم.
ولی اگر تونستم یه نمونه میزارم . دوستان طراح دیتابیس بیشتر میتونن تو این فیلد کاری کمک کنن .
موفق باشید .

M.YasPro
دوشنبه 11 مرداد 1389, 14:03 عصر
یه دیتابیس میزارم چند تا sp توش هست که اون چیزایی رو که میخواین براتون بر می گردونه
اگر سوالی بود مطرح کنید .