PDA

View Full Version : صدورکارنامه ماهانه



amirkazem
جمعه 06 آذر 1394, 23:57 عصر
باسلام خدمت دوستان ارجمند
می خواهیم دربرنامه ای که تهیه کرده ایم(مدیریت اموردانش آموزان) یک امکان بانام (کارنامه ماهانه) داشته باشیم.
کارنامه ماهانه راطبق تصویرپیوست درمحیط اکسل دریک فرم(قسمت بالا اسامی دانش آموزان ودرقسمت سمت راست نام دروس) ونمرات مربوط به هرماه رادریک (sheet)جداگانه ثبت می کردیم وسپس براساس محتویات شیت مربوط به هرماه، برای هردانش آموزیک کارنامه مربوط به ماه موردنظرصادرمی کردیم.
دربرنامه موجود با بانک اطلاعاتی اکسس که حاوی جداول(دانش آموزان، دروس و...) می باشد، میخواهیم درفرمی شبیه فرم تصویرضمیمه(بوسیله استرینگ گرید یاهرابزاری که دوستان پیشنهاد کنند) نمرات مربوط به یک ماه (مثلاً مهر که برای هردرس فقط یک نمره ثبت می شود.)رابرای تمام دانش آموزان کلاس موردنظرثبت کنیم وبتوانیم کارنامه ماهانه صادرکنیم.
دوستان محبتی بفرماییدوراهنمایی کنید.
آرزوی توفیق!

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

hadisalahi2
شنبه 07 آذر 1394, 09:31 صبح
البته این جدولت باید یک تغییری انجام بدی
باید جای سطر ستون ها رو عوض کنی
یعنی درسها بشه اسم ستون ها یا همون فیلدها و اسامی بشه رکورد ها

دیگه ساختنش هم راحت اره
فقط باید Insert Select بزنی

یک راه دیگه هم استفاده از CrossTab در فست ریپورت هستش

amirkazem
شنبه 07 آذر 1394, 22:25 عصر
ضمن تشکرمجدد، منظورتون استفاده از استرینگ گریدهستش؟
حالاوقتی جای ستونها وسطرها روعوض کردیم، پس تکلیف نام ماه (مهر،آبان و...)چجوری میشه؟
ضمناً از fastreportهم استفاده میکنم.(یعنی گزارشات خروجی برنامه بافست ریپورت هستش)
میشه لطف کنیدودراین زمینه کمی توضیح بدید؟به نظرشما، کدام راه وروش ساده ترومطمئنترهست؟
ممنون!

hadisalahi2
یک شنبه 08 آذر 1394, 09:42 صبح
منظورتون استفاده از استرینگ گریدهستش؟
نه منظورم همون DBGrid هستش



حالاوقتی جای ستونها وسطرها روعوض کردیم، پس تکلیف نام ماه (مهر،آبان و...)چجوری میشه؟
خوب تاریخ رو هم در بانک ذخیره میکنی و هر ماهی رو که لازم داشتی اطلاعاتش رو Select میکنی
خودت نوشتی دیگه کارنامه ماهیانه



ضمناً از fastreportهم استفاده میکنم.(یعنی گزارشات خروجی برنامه بافست ریپورت هستش)


در فست ریپورت یک امکان وجود داره به نام CrossTable که به شما اجازه میده این نوع اطلاعات رو به صورتی که مد نظر شما هستش ایجاد کنید
اگه راهنماش رو بخونید با یک مثال ساده بهشون روش کار با این کنترل رو توضیح داده

hp1361
یک شنبه 08 آذر 1394, 17:00 عصر
باسلام خدمت دوستان ارجمند
می خواهیم دربرنامه ای که تهیه کرده ایم(مدیریت اموردانش آموزان) یک امکان بانام (کارنامه ماهانه) داشته باشیم.
کارنامه ماهانه راطبق تصویرپیوست درمحیط اکسل دریک فرم(قسمت بالا اسامی دانش آموزان ودرقسمت سمت راست نام دروس) ونمرات مربوط به هرماه رادریک (sheet)جداگانه ثبت می کردیم وسپس براساس محتویات شیت مربوط به هرماه، برای هردانش آموزیک کارنامه مربوط به ماه موردنظرصادرمی کردیم.
دربرنامه موجود با بانک اطلاعاتی اکسس که حاوی جداول(دانش آموزان، دروس و...) می باشد، میخواهیم درفرمی شبیه فرم تصویرضمیمه(بوسیله استرینگ گرید یاهرابزاری که دوستان پیشنهاد کنند) نمرات مربوط به یک ماه (مثلاً مهر که برای هردرس فقط یک نمره ثبت می شود.)رابرای تمام دانش آموزان کلاس موردنظرثبت کنیم وبتوانیم کارنامه ماهانه صادرکنیم.
دوستان محبتی بفرماییدوراهنمایی کنید.
آرزوی توفیق!

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

اگر تعداد دروس تغییر نمیکنه و ثابته (این فرض برای دانش آموزان وجود نداره) همون تغییری که دوستمون گفتند بدین(تغییر جای سطر و ستون). حالت CrossTable برای زمانیه که هم سطر و هم ستون شما تعدادش متغیره.(که بعید میدونم به کار شما بیاد).

شما برای ذخیره اطلاعات میتونید اینطور عمل کنید:
1-در یک جدول اطلاعات دانش آموزان رو دارید.
2-در یک جدول اطلاعات دروس
3-در جدول دیگه نمرات هر دانش آموز در یک درس خاص در ماه خاص

ارتباط این جداول هم که با کلید خارجی خواهد بود.

برای گزارش گیری هم که از جدول نمرات(با جوین جدول دروس و دانش آموزان) رکورد های یک ماه خاص رو دریافت میکنی و نمایش میدی

موفق باشیم

amirkazem
یک شنبه 08 آذر 1394, 17:38 عصر
خیلی محبت کردید، موفق باشیم!:بوس:

amirkazem
دوشنبه 09 آذر 1394, 00:21 صبح
اگر تعداد دروس تغییر نمیکنه و ثابته (این فرض برای دانش آموزان وجود نداره) همون تغییری که دوستمون گفتند بدین(تغییر جای سطر و ستون). حالت CrossTable برای زمانیه که هم سطر و هم ستون شما تعدادش متغیره.(که بعید میدونم به کار شما بیاد).

شما برای ذخیره اطلاعات میتونید اینطور عمل کنید:
1-در یک جدول اطلاعات دانش آموزان رو دارید.
2-در یک جدول اطلاعات دروس
3-در جدول دیگه نمرات هر دانش آموز در یک درس خاص در ماه خاص

ارتباط این جداول هم که با کلید خارجی خواهد بود.

برای گزارش گیری هم که از جدول نمرات(با جوین جدول دروس و دانش آموزان) رکورد های یک ماه خاص رو دریافت میکنی و نمایش میدی

موفق باشیم

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

hadisalahi2
دوشنبه 09 آذر 1394, 09:43 صبح
اگه برایت دیدن توی فرم های دلفی مهم نیست ، میتونی از همون CrossTab فست ریپورت استفاده کنی
اما اگه نمایش این اطلاعات مهم هستش ، به نظر من باید این حالت رو شبیه سازی کنی و البته من کامپوننتی سراغ ندارم که این کار رو انجام بده

اما یک راه ساده تر به ذهن من میرسه که بیای جداول مربوط به هر کلاس رو جدا کنی
اینطوری دیگه تعداد درس ها متغیر نمیشه و هر جدولی تعداد خاصی فیلد داره و راحت میتونی از همون روشهای بالا کار نمایش اطلاعات رو انجام بدی

hp1361
دوشنبه 09 آذر 1394, 15:03 عصر
ضمن تشکرویژه ازشمادوستان بزرگوار،
دربرنامه موردنظر، تعدادوعنوان دروس برای پایه های مختلف تحصیلی متفاوت هستش.دقیقاضهمان گونه که تعداددانش آموزان یک کلاس ونیز تعدادکلاسهای هرپایه تحصیلی ممکن است متغیرباشد.
باروشی که دوستان پیشنهادکرده بودند، متأسفانه به نتیجه نرسیدم. بنابه دلیل احتمال متغیربودن تعداددروس وعناوین و...برای هرپایه تحصیلی
اگردوستان روش مناسب تری سراغ دارید، محبت بفرمایید.
آرزوی توفیق!:لبخندساده:

سلام

تعداد دروس در پایه های مختلف متفاوته و این به معتی متغیر بودن نیست. شما پایه اول داری با تعداد دروس ثابت! مثلا 20 درس. پایه دوم 23 و ...
یعنی میتونی با تفکیک پایه دروس رو هم مشخص کنی

استفاده از CrossTable رو پیشنهاد نمیکنم چون در زمان پرینت گرفتن حتما حتما همکاراتون از روش پرینتش سر در نمیارن(نحوه صفحه بندی) و گیج میزنن و اعتراض خواهند کرد.

موفق باشیم

hadisalahi2
سه شنبه 10 آذر 1394, 09:45 صبح
استفاده از CrossTable رو پیشنهاد نمیکنم چون در زمان پرینت گرفتن حتما حتما همکاراتون از روش پرینتش سر در نمیارن(نحوه صفحه بندی) و گیج میزنن و اعتراض خواهند کرد.

با اینکه منم این راه رو گزینه دوم میدونم
اما با این جمله هم که از روش چاپ سر در نمیارن موافق نیستم
چون خود فست جدولش رو خیلی شیک و مجلسی میسازه و فقط کافیه شما روی دکمه پرینت کلیک کنید.

اما روش پیشنهادی اولم رو بیشتر تاکید میکنم
استفاده از جداول جداگانه برای هر دوره تحصیلی

amirkazem
سه شنبه 10 آذر 1394, 13:05 عصر
ضمن تشکرمجددازهمه دوستان، به نظرشمادوستان گرامی آیااین کاربااسترینگ گرید(String Griade) انجام نمیشه؟

hadisalahi2
چهارشنبه 11 آذر 1394, 12:37 عصر
ضمن تشکرمجددازهمه دوستان، به نظرشمادوستان گرامی آیااین کاربااسترینگ گرید(String Griade) انجام نمیشه؟

چرا میشه
اما یک کم سخت تره و باید خودت همه اطلاعات رو توی گرید بنویسی و سرعت هم به نظرم خیلی پایین تر از استفاده از dbgrid هستش

amirkazem
چهارشنبه 11 آذر 1394, 18:29 عصر
باسلام، ضمن عرض تسلیت اربعین سالاروسرورشهیدان عالم حضرت اباعبدالله الحسین ویاران وفادارش، وآرزوی قبولی عزاداری وسوگواری شماخوبان، وضمن تشکرمجددازراهنمایی های اساتیدبزرگوار،
عرض کنم که دربانک موردنظر جداول زیرراداریم:
1.جدول studentحاوی مشخصات کامل دانش آموزان
2.جدول دروس (ازطریق یک فرمی درهنگام سازماندهی مدرسه، نام دروس بصورت کلی(برای همه پایه های تحصیلی همان مقطع) ثبت می شود.که شامل فیلدهای کد درس ونام درس می باشد.
3.جدول (Graide) یاهمان نمره که حاوی فیلدهای: کدملی دانش آموزو کددرس ونمره

طبق تصویرضمیمه می خواهیم:
1.ابتداازطریق adoquery تمام پایه های موجودرابدست آوریم.(انجام شده)
2.ازطریق adoquery دیگر، کلاسهای مربوط به پایه انتخابی رابدست بیاوریم.(انجام شده)
3.ازطریق کلیک برروی نام کلاس موردنظرف اسامی دانش آموزان همان کلاس، در(ِDBgride)موجوددرصفحه نمایش داده شوند.
4.DBGride موردنظر حاوی فیلدهای:1.نام ونام خانوادگی دانش آموزان2.نام هردرس دریک فیلد(ستون)جداگانه می باشد.
5.درردیفهای موردنظر(جلوی اسم دانش آموز) نمرات هرستون که مربوط به درس خاصی هستش راثبت کنیم.

ازطریق DBGrideکه دوستان پیشنهادکردند، چگونه یک DBGide داشته باشیم که فقط قسمت نام ونام خانوادگی دانش آموزان، نمایش داده شودوقسمت ثبت نمره درهردیف، خالی باشد؟

دوستان محبت بفرماییدوارشادکنید.
ممون ازلطفتان!

amirkazem
جمعه 13 آذر 1394, 22:00 عصر
:گیج::متفکر::لبخندساده:

hadisalahi2
شنبه 14 آذر 1394, 10:45 صبح
ازطریق DBGrideکه دوستان پیشنهادکردند، چگونه یک DBGide داشته باشیم که فقط قسمت نام ونام خانوادگی دانش آموزان، نمایش داده شودوقسمت ثبت نمره درهردیف، خالی باشد؟


خوب هدفت از این کار چیه؟
نمره ها رو دستی بزنی؟
همونطور که از کلاسها و دانش آموزان و درس ها select زدی
حالا برای نمره ها هم همین کار رو انجام بده

amirkazem
شنبه 14 آذر 1394, 23:22 عصر
1.هدف ازاین کار، صدورکارنامه ماهانه برای دانش آموزان درتمامی دروس هستش.(درپایان هرماه برای کلیه دروس که دبیران دردفترنمره، برای دانش آموزان نمره درج کرده اند وبه منظوراطلاع رسانی ازروندآموزشی دانش آموزان درهرماه به والدین آنان این کارانجام میشه.)

2.بله بایدنمره هاازطریق یک فرم ودرون یک لیست مادر(لیست کلی شامل اسامی دانش آموزان هرکلاس ونام دروس دربالای هرستون) به برنامه داده بشه تابتونیم خروجی رابه صورت کارنامه انفرادی دریافت کنیم.

3.ضمناً وقتی هنوزبرای هیچ یک ازدانش آموزان نمره ای واردنکرده ایم، چگونه نمره (select)بزنیم.
ضمن اینکه ستونهایی که نام دروس رادارند، من برای (dbgride)موجود درصفحه، چندستون به صورت دستی اضافه کرده ام ونام دروس رابرای آنها گذاشته ام. واین درحالی است که این ستونها به هیچ فیلدی متصل نیستند.
4.ضمن اینکه میخواهیم نمرات رادریک جدولی ذخیره کنیم، سپس خروجیهارابه صورت کارنامه انفرادی دریافت کنیم.(آنهم برای هردانش آموز ودر هرماه خاص)
ممنون میشم اگه لطف کنید!:بوس:

hp1361
یک شنبه 15 آذر 1394, 10:14 صبح
سلام

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


TStudent = class
private
FId: Integer;
FFirstName: string;
FLastName: string;
public
property Id: Integer read FId write FId;
property FirstName: string read FFirstName write FFirstName;
property LastName: string read FLastName write FLastName;
end;

TStudy = class
private
FId: Integer;
FName: string;
public
property Id: Integer read FId write FId;
property Name: string read FName write FName;
end;

TScore = class
private
FId: Integer;
FScore: Integer;
FStudentId: Integer;
FStudyId: Integer;
public
property Id: Integer read FId write FId;
property Score: Integer read FScore write FScore;
property StudentId: Integer read FStudentId write FStudentId;
property StudyId: Integer read FStudyId write FStudyId;
end;


به عنوان یک راه حل ساده می تونید لیست دانش آموزان رو در یک لیست باکس و لیست دروس نیز در لیست باکس دیگه نشون بدید. حالا با توجه به انتخاب های این دو لیست باکس، نمره مربوطه رو در یک DBEdit میتونید نمایش داده و یا از کاربر دریافت کنید.

موفق باشیم

amirkazem
یک شنبه 15 آذر 1394, 22:52 عصر
hp1361بسیارلطف می کنید وباحوصله راهنمایی می فرمایید. ولی حقیقت اینه که از کدهای شما سر درنیاوردم.(البته به علت کمی سوادبرنامه نویسی ازطرف خودم) :گیج:

hp1361
یک شنبه 15 آذر 1394, 23:35 عصر
سلام

شما هر کدوم از Property های این کلاس ها رو یک فیلد از جدول در نظر بگیر.StudentId و StudyId رو هم کلید خارجی در نظر بگیر(تا اینجا شد فیلد های جداولت).
بقیه هم که واضحه
اگر از لیست باکس هم نیاز به توضیح بیشتر داری بگو تصویر بزارم

موفق باشیم

hadisalahi2
دوشنبه 16 آذر 1394, 11:29 صبح
عزیز من داری واسه خودت کار رو پیچیده میکنی
ساده ترین و سریع ترین راه ممکن رو من بهت پیشنهاد دادم
ساخت جدول برای هر دوره
چون تعداد دورس دیگه ثابته

در غیر این صورت باید با دستورات select اطلاعاتت رو استخراج کنی و در یک جدول ثانویه بریزی و در grid خودت نمایش بدی

hp1361
دوشنبه 16 آذر 1394, 12:44 عصر
عزیز من داری واسه خودت کار رو پیچیده میکنی
ساده ترین و سریع ترین راه ممکن رو من بهت پیشنهاد دادم
ساخت جدول برای هر دوره
چون تعداد دورس دیگه ثابته

در غیر این صورت باید با دستورات select اطلاعاتت رو استخراج کنی و در یک جدول ثانویه بریزی و در grid خودت نمایش بدی

سلام

اگر ممکنه زحمت بکشید کد SQL INSERT SELECT و نحوه استفادش در DBGrid رو توضیح بدید که هم من یاد بگیرم و هم دوستمون استفاده کنه.

ممنون

amirkazem
دوشنبه 16 آذر 1394, 22:23 عصر
عزیز من داری واسه خودت کار رو پیچیده میکنی
ساده ترین و سریع ترین راه ممکن رو من بهت پیشنهاد دادم
ساخت جدول برای هر دوره
چون تعداد دورس دیگه ثابته

در غیر این صورت باید با دستورات select اطلاعاتت رو استخراج کنی و در یک جدول ثانویه بریزی و در grid خودت نمایش بدی
میشه محبت بفرمایید ویک مثال کوچک بزنید.
منظورم:
1.داشتن جدولstudent
2.داشتن جدولlesson
3.داشتن جدولmonth
4.وجداول دوره ای شما میفرمایید
5.درنهایت فراخوانی اسامی دانش آموزان واسامی دروس ودرنهایت ثبت نمره وذخیره نمره درجدول مربوطه
6.صدورکارنامه ماهانه
بسیارممنون میشم!
یاحق!

hadisalahi2
سه شنبه 17 آذر 1394, 13:02 عصر
3.داشتن جدولmonth


این جدولت کلا زیادیه
چون این کار رو میتونی دو همون جدول یک فیلد تاریخ داشته باشی و وقتی هم تاریخ داری یعنی هر ماهی رو هم که بخوای قابل استخراج هستش

خوب حالا ببین عزیزم ، یک جدول درس داری و یک جدول دانش آموز

حالا یک جدول دیگه میسازی برای نگهداری نمره ها که توش اسم و فرضا کد ملی دانش آموزه و درسهای مربوطه به همراه نمراتشون و تاریخ یا همون ماه مربوطه

حالا دیگه از اینجا به بعدش کاری نداره
فقط کافیه یک دستور Select بزنی و لیست دانش آموزان به همراه درسها رو در ماهی که مد نظرته استخراج کنی

حالا متوجه شدی چطوریه؟

خوب حالا

amirkazem
سه شنبه 17 آذر 1394, 23:30 عصر
باسلام وضمن تشکرمجددوعذرزحمات،
همانگونه که دوستان عزیزعلی الخصوص جناب hadisalahi2راهنمایی کردند، طبق تصویرضمیمه، بااستفاده ازslectهای متعدد، اسامی ونمرات دروس دانش آموزان راازجدول (graids)استخراج کرده ام.
البته براساس : ابتدا انتخاب پایه، سپس انتخاب کلاس ودرنهایت هم باانتخاب ماه موردنظر، اطلاعات مربوطه استخراج میشه.
ولی 2تامشکل هنوزهست.
1. هردانش آموزبه تعداددروسی که درآن درس نمره داره براش ردیف(رکورد) نمایش داده میشه.به عنوان مثال: دانش آموز مهدی، به ازای تمامی دروس که درماه مهربریش نمره ثبت شده رکورد داره.
2.مشکل دوم به این صورت هستش که (dbgride)بایدبه این صورت باشه: عناوین ستونها به ترتیب: 1نام 2نام خانوادگی3نام پدر4.نام اولین درس5.نام دومین درس6.نام سومین درس ...وهمینطورتاآخر که نام آخرین درس باشدودرقسمت ردیف فقط نمرات باشند.

ضمناً عرض شودکه این نمرات به صورت دستی (فعلاً) توی جدول (graids)درج شده است.وبه صورت رندم.
ولی تصمیم داریم که نمرات فقط ازطریق فرم طراحی شده(جداگانه) واردشوند.

ابوالفضل عباسی
چهارشنبه 18 آذر 1394, 09:40 صبح
سلام
دوستان راهنمایی های جامعی به شما داده اند.ولی شما ببین این کارمن جواب گو شما هست یانه:
1-طبق اولین عکسی که گذاشتی یک dbgrid بگذار که به بانک اصلی که شامل اسم و فامیل دانش آموز و نام پدر و تمامی دروس و کلاس و پایه باشه(یه فیلد به اسم ماه هم باشه).
بعد یه فرم جدید بساز به اسم مثلا کارنامه ماهانه .
2- براساس ماه و کلاس و پایه یک adoquery رو فیلتر کن (مطابق عکس آخر)بعد اگر جدول اول درست باشه هرنفر یک رکورد داره با تمامی نمرات دردرس های مختلف.(فیلدهای dbgrid باید مثل بانک اصلی باشه)
3-بعد روی هر رکورد که انتخاب کرد و بعد راست کلیک کرد توی فرم فست ریپورت یه پیش نمایش ازکارنامه ماهانه آن نفری که انتخاب شده نشان داده بشه.
واگر خواست چاپ بگیره.
4-برای ورود اطلاعات هم در جایی که بانک اصلی هست یه فرم جدید بیاد که اسم دانش آموز و نمرات درسیش وارد بشه و ماه رو هم انتخاب کنه (مثلا مهر) و بعد ثبت کنه.

به این روال پیش برو کارت راه می افته و سعی کن بیشتر درباره برنامه نویسی دلفی مقاله بخونی که فرمان ها و راهنمایی هایی که دوستان میگویند رو متوجه بشوی.:لبخند:

درضمن نیاز به جدول month یا پایه نیست با یک radiobutton و یا radio group button این کار رو انجام بده اصلا نیازی به dbgrid های اضافی نیست.(در تکمیل حرف های دوست عزیزم)

amirkazem
چهارشنبه 18 آذر 1394, 23:07 عصر
باسلام وضمن تشکرازمحبت تمامی دوستان.آقای عباسی!
خدمتتون عرض شودکه بنده یک جدول دارم به نام(graids)که نمرات درآن ثبت میشه.شامل فیلدهای:1.کدملّی دانش‌آموز2.کددرس3.کدماه4.نم ه درس(نرمال سازی).ضمن اینکه این برنامه منحصراً دریک مقطع تحصیلی ویک سری دروس ثابت قرارنیست استفاده بشه.(لذادرهرمقطع ممکن است تعدادپایه هاتغییرکنه ونیزتعدادکلاسهاوهمچنین تعداددروس)پس مجبوریم نرمال سازی رارعایت کنیم. ولی اگرتعداددروس ثابت باشن، فرمایش شماصحیح هست واونوقت میتونیم درهمان جدول(graids)نام تمامی دروس رابه صورت فیلداستفاده کنیم.
درادامه تصویرضمیمه راملاحظه کنیدو بفرمایید که اصلاً طراحی جدول (graids)به این صورت صحیح هست یانه؟
درموردسفارشتون جهت انتخاب پایه وکلاس بایدعرض کنم که :آیامجبورنیستیم ازطریق(adoquery) پایه های موجودوکلاسهای مربوطه رافراخوانی کنیم؟(دراین زمینه اگرنظردیگری دارید، بفرمایید، ممنون میشم.)
درموردانتخاب ماه، بله فرمایش شماصحیح هست، میتونیم ازیک رادیوباتن استفاده کنیم.

hp1361
پنج شنبه 19 آذر 1394, 10:07 صبح
سلام مجدد

ببین دوست عزیز. به نظر من اگر بخواهی از DBGrid استفاده کنی به صورتی که در عنوان ستون ها اسم درس ها قرار بگیره و در ستون اول اسم دانش آموزان، باید یه همچین جدولی داشته باشی:
1-StudentId که یک کلید خارجیه از جدول Students که در این جدول اطلاعات دانش آموزان قرار داره.
2- نمره درس یک(مثلا تاریخ)
3- نمره درس دو (مثلا ریاضی)
.
.
4- نمره در ان ام (درس فلان)
5- شماره ماه (بین 1 تا 12 میتونه وارد بشه)

توضیحات :
در پست های قبلی عرض کردم، با توجه به اینکه تعداد دروس هر مقطع ثابته، شما برای هر مقطع یکی از این جداول رو خواهی داشت. مثلا جدول نمرات مقطع اول راهنمایی، دوم راهنمایی و....

*نکته اساسی اینه که شما در ابتدای هر ماه باید بصورت سیستمی برای تک تک دانش آموزان رکورد به این جدول اضافه کنید. البته رکوردی که فقط StudentId و شماره ماه در اون مشخص شده و بقیه فیلد ها که نمرات درس ها باشه خالی خواهند بود.
** حالا در زمان ورود اطلاعات توسط کاربر با یک کوئری رکورد های ماه مشخص رو از دیتابیس واکشی میکنید که در این کوئری با استفاده از Join بجای StudentId ، اسم دانش آموز نمایش داده میشه و کاربر به راحتی میتونه تغییرات رو در DBGrid وارد کنه و با زدن اینتر تغییرات در دیتابیس ذخیره خواهد شد.

اما اگر به اینصورت مد نظرت نیست، مثلا اینکه کسی که نمرات رو وارد میکنه خود معلمه و نیازی نیست تمام دروس رو در آن واحد ببینه و فقط درس خودش کافیه، یا اصلا مشتری نیازش اینجوره ، اونوقت باید تغییراتی که قبلا هم با مثال توضیح دادم انجام بدی.(مثال استفاده از لیست باکس)

موفق باشیم

amirkazem
پنج شنبه 19 آذر 1394, 12:07 عصر
باسلام، ازتوضیحات بسیارمفیدتان کمال تشکرمجددرادارم.
برنامه موردنظر، بایستی توسط یک کاربر(معمولاً معاون اجرایی مدارس که همان دفتردارسابق هستش)انجام بشه.پس کاربرفقط یک نفرهستش وبایدهمه دروس رایک نفرثبت کنه.
بنده هم دقیقاً همین کارهاکه شمافرمودیدراکرده ام.
1.student idکه همان کدملّی دانش آموزهستش ازجدول studentگرفته شده.
2.برای ماه های سال هم درجدول(graids)فقط کدهرماه نوشته شده که انهم به عنوان کلیدخارجی ازجدول(mah)گرفته شده.
3.نام دروس هم درجدول(graids) فقط کدهردرس که به عنوان کلیدخارجی هستش ازجدول (lesson)گرفته شده.
4.همه مواردفوق دقیقاً درتصویرقبلی(دومی) آورده شده.
5.ان شاء الله ادامه کارراطبق فرمایش شماانجام خواهم داد.
آرزوی توفیق!
آرزوی سلامتی برای همه شمادوستان بزرگواروارزشمند!