PDA

View Full Version : طراحی کارنامه ماهیانه



kolait
سه شنبه 25 تیر 1398, 11:21 صبح
سلام وعرض ادب خدمت عزیزان..
میخواهم فایلی برای ثبت نمرات هفتگی مدرسه طراحی کنم ....
روش کار به صورت زیر هست:
هردانش آموز ممکنه در درسی ودرماه بین 1تا4 نمره داشته باشد..
هرمعلم میتونه درمدرسه چندکلاس وچنددرس داشته باشه..
هردانش آموز درسال یک کلاس ودروس مختلف داردوچندین دبیر...
جداول زیر ساختم:
دانش آموز(کد(کلیداصلی)،نام،نام خانوادگی،رشته وکلاس)
دبیر(کد(کلیدتصلی)،نام،نام خانوادگی،رشته یا درس مورد تدریس)
دروس(کددرس کلید اصلی)،نام درس،تعداد واحد
نمرات(کددانش آموز،کددرس،تاریخ ثبت،نمره(که هم میتونم 4فیلد برای 4 هفته باشه وهم یک نمره برای یک ماه)
اصل گیرم نوع ثبت نمرات هست...چطوری وچه فرمی بسازم که باانتخاب کلاس ورشته ودرس،یه لیست بیاد ازدانش آموزان ونمرات....وقتی ثبت کردم،وباتغییرکلاس لیست بعدی بیاد..
اگه از جدول نمرات سابفرم بسازم که اطلاعاتی نداره که فیلتر بشه..اگه کویری بسازم از دوجدول که بازهم چون نمره ای نیست پس لیستی نمیاد..
شکل جداول ونوع فرمی که ساختم به پیوست ارسال میشه..
خواهش میکنم دوستان راهنمایی فرمایند..خیلی نیازش دارم..

mazoolagh
پنج شنبه 27 تیر 1398, 10:38 صبح
مبنای کار رو باید روی درس بگذارین و نه نمره - به این شکل که هر درس برای هر سال و هر دوره تحصیلی منحصر به فرد باید باشه.

خیلی ساده جداول شما اینها میشن:
پایه های تحصیلی Grades
عناوین درسها CourseTitles
درسها Courses
آموزگاران (مربیان) Instructors
دانش آموزان Students
نمرات Gradings

همزمان با ثبت نام دانش آموزان برای هر درس، یک رکورد بازای هر دانش آموز در جدول Gradings میسازین،
بنابراین برای ثبت نمره لیست دانش آموزان آماده است.

150488

kolait
جمعه 28 تیر 1398, 13:00 عصر
سلام وعرض ادب..خیلی ممنونم....جداول انجام میدم ومزاحمتون میشم..ممنون که وقت گذاشتید..

kolait
شنبه 29 تیر 1398, 01:37 صبح
سلام دوست عزیز..جداول طبق فرمایشتون،ساختم..اینکه چطوری دانش آموزان را برای درسها راثبت نام کنم،متوجه نشدم..هرفرمی ساختم باید یکی یکی دانش آموز انتخاب کنم..یا راهشو نوع فرمو بلد نبودم..ممنونم راهنمایی فرمایید..به این فایل وراهنمایی دوستان خیلی نیاز دارم...ممنونم..

mazoolagh
شنبه 29 تیر 1398, 12:08 عصر
نمونه میگذارم براتون
time ...

kolait
شنبه 29 تیر 1398, 23:57 عصر
سلام..یک دنیا ممنونم..خیلی لطف میکنید ...
azad1353@

نوشیروانی
سه شنبه 08 مرداد 1398, 14:49 عصر
سلام
ببخشید دوست عزیزمن به این تاپیک خیلی علاقمند شدم .....
نمونه ای که فرمودید . آماده نشد

mazoolagh
چهارشنبه 09 مرداد 1398, 13:35 عصر
یک time گذاشته بودم تو پست آخر، چون وقت کافی نداشتم.

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

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

mazoolagh
چهارشنبه 09 مرداد 1398, 13:38 عصر
عناوین دروس:
150538

دروس:
150540

mazoolagh
چهارشنبه 09 مرداد 1398, 13:39 عصر
نمرات:
150541

mazoolagh
چهارشنبه 09 مرداد 1398, 13:47 عصر
هر درس یک ID داره (CourseID) که با کد میسازیم و از فیلدهای زیر ترکیب میشه: سال، ترم، عنوان درس، پایه تحصیلی و کد مدرس

هنگام ثبت دانش آموزان برای هر درس، بازاء هر دانش آموز یک رکورد در جدول نمرات ساخته میشه که شامل کد درس و کد دانش و نمرات خالی هست

برای ثبت نمرات هر درس، بر اساس کد درس فیلتر میکنیم.

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

mazoolagh
چهارشنبه 09 مرداد 1398, 13:52 عصر
فرم ثبت دروس:
150542

Option Compare Database
Option Explicit
Dim v
Private Sub AddCourse_Click()
Dim CourseID, InstructorID As Long
CourseID = Year & Term & Format(CourseTitle, "00") & Format(Grade, "00")
If DCount("*", "Courses", "CourseID=" & CourseID) = 0 Then
DoCmd.RunSQL "INSERT INTO Courses (CourseID,Year,Term,Grade,CourseTitleID,Instructor ID) VALUES (" & CourseID & "," & Year & "," & Term & "," & Grade & "," & CourseTitle & "," & Instructor & ")"
v = MsgBox("Course Registered", , "")
Else
v = MsgBox("Course Alreday Registered!", vbInformation, "")
End If
End Sub
Private Sub CourseTitle_AfterUpdate()
Check
End Sub
Private Sub CourseTitle_NotInList(NewData As String, Response As Integer)
Me.CourseTitle.Undo
Me.CourseTitle.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Form_Load()
Dim i As Long
For i = 1390 To 1400
Me.Year.AddItem i
Next
End Sub
Private Sub Grade_AfterUpdate()
Check
End Sub
Private Sub Grade_NotInList(NewData As String, Response As Integer)
Me.Grade.Undo
Me.Grade.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Instructor_AfterUpdate()
Check
End Sub
Private Sub Term_AfterUpdate()
Check
End Sub
Private Sub Term_NotInList(NewData As String, Response As Integer)
Me.Term.Undo
Me.Term.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Year_AfterUpdate()
Check
End Sub
Private Sub Year_NotInList(NewData As String, Response As Integer)
Me.Year.Undo
Me.Year.Dropdown
Response = acDataErrContinue
End Sub
Sub Check()
Me.AddCourse.Enabled = Not (IsNull(Year) Or IsNull(Term) Or IsNull(Grade) Or IsNull(CourseTitle) Or IsNull(Instructor))
End Sub

mazoolagh
چهارشنبه 09 مرداد 1398, 13:55 عصر
فرم ثبت نام دانش آموزان برای درس مشخص:
150543

Option Compare Database
Option Explicit
Const RecSrc = "SELECT S.FullName,G.* FROM Gradings G INNER JOIN Students S ON G.StudentID=S.StudentID WHERE G.CourseID="
Dim CourseID As Long
Dim v
Private Sub AddStudent_Click()
If Nz(CourseID, 0) = 0 Or Nz(Me.Student, 0) = 0 Then Exit Sub
If DCount("*", "Gradings", "CourseID=" & CourseID & " AND StudentID=" & Me.Student) = 0 Then
DoCmd.RunSQL "INSERT INTO Gradings (CourseID,StudentID) VALUES(" & CourseID & "," & Student & ")"
Me.Requery
Else
v = MsgBox("Alredey registered", vbExclamation, Me.Student.Column(2))
End If
End Sub
Private Sub CourseTitle_AfterUpdate()
GetData
End Sub
Private Sub CourseTitle_NotInList(NewData As String, Response As Integer)
Me.CourseTitle.Undo
Me.CourseTitle.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Form_Load()
Dim i As Long
For i = 1390 To 1400
Me.Year.AddItem i
Next
Me.RecordSource = RecSrc & 0
End Sub
Private Sub Grade_AfterUpdate()
Me.CourseTitle.Requery
GetData
End Sub
Private Sub Grade_NotInList(NewData As String, Response As Integer)
Me.Grade.Undo
Me.Grade.Dropdown
Response = acDataErrContinue
End Sub
Private Sub RemoveStudent_Click()
If MsgBox("Are you sure?", vbQuestion + vbYesNo + vbDefaultButton2, "") = vbYes Then
DoCmd.RunSQL "DELETE FROM Gradings WHERE CourseID=" & CourseID & " AND StudentID=" & Me.StudentID
Me.Requery
End If
End Sub
Private Sub Term_AfterUpdate()
Me.Grade.Requery
GetData
End Sub
Private Sub Term_NotInList(NewData As String, Response As Integer)
Me.Term.Undo
Me.Term.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Year_AfterUpdate()
Me.Term.Requery
GetData
End Sub
Private Sub Year_NotInList(NewData As String, Response As Integer)
Me.Year.Undo
Me.Year.Dropdown
Response = acDataErrContinue
End Sub
Sub GetData()
Dim InsID As Long
CourseID = Year & Term & Format(CourseTitle, "00") & Format(Grade, "00")
InsID = Nz(DLookup("InstructorID", "Courses", "CourseID=" & CourseID), 0)
If InsID = 0 Then
Me.MSG.Caption = "Course Not Registered"
Else
Me.MSG.Caption = ""
End If
Me.Student.Enabled = (InsID > 0)
Me.AddStudent.Enabled = (InsID > 0)
Me.Instructor = DLookup("FullName", "Instructors", "InstructorID=" & InsID)
Me.RecordSource = RecSrc & CourseID
End Sub

mazoolagh
چهارشنبه 09 مرداد 1398, 13:58 عصر
فرم ثبت نمرات:
150544

Option Compare Database
Option Explicit
Const RecSrc = "SELECT S.FullName,G.* FROM Gradings G INNER JOIN Students S ON G.StudentID=S.StudentID WHERE G.CourseID="
Private Sub CourseTitle_AfterUpdate()
GetData
End Sub
Private Sub CourseTitle_NotInList(NewData As String, Response As Integer)
Me.CourseTitle.Undo
Me.CourseTitle.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Form_Load()
Me.RecordSource = RecSrc & 0
End Sub
Private Sub Grade_AfterUpdate()
Me.CourseTitle.Requery
GetData
End Sub
Private Sub Grade_NotInList(NewData As String, Response As Integer)
Me.Grade.Undo
Me.Grade.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Term_AfterUpdate()
Me.Grade.Requery
GetData
End Sub
Private Sub Term_NotInList(NewData As String, Response As Integer)
Me.Term.Undo
Me.Term.Dropdown
Response = acDataErrContinue
End Sub
Private Sub Year_AfterUpdate()
Me.Term.Requery
GetData
End Sub
Private Sub Year_NotInList(NewData As String, Response As Integer)
Me.Year.Undo
Me.Year.Dropdown
Response = acDataErrContinue
End Sub
Sub GetData()
Dim InsID, CrsID As Long
CrsID = Year & Term & Format(CourseTitle, "00") & Format(Grade, "00")
InsID = Nz(DLookup("InstructorID", "Courses", "CourseID=" & CrsID), 0)
Me.Instructor = DLookup("FullName", "Instructors", "InstructorID=" & InsID)
Me.RecordSource = RecSrc & CrsID
End Sub

mazoolagh
چهارشنبه 09 مرداد 1398, 14:03 عصر
این دیتابیس نمونه فقط جنبه آموزشی داره و نه طراحی جداول و نه کدها بهینه نشدن و با یک برنامه واقعی و کاربردی فاصله دارن.
ولی اصول کار همین هست و میتونه راهنمای خوبی باشه.

amirzazadeh
چهارشنبه 09 مرداد 1398, 17:37 عصر
دست مريزاد و خدا قوت.

kolait
جمعه 11 مرداد 1398, 14:28 عصر
سلام وعرض ادب....
خیلی خیلی ممنونم که وقت گذاشتید...فایل ودیتا را میسازم وسوالی بود،می پرسم.....خدا خیرتون بده..ممنونم

mazoolagh
شنبه 12 مرداد 1398, 12:47 عصر
دست مريزاد و خدا قوت.

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

mazoolagh
شنبه 12 مرداد 1398, 12:49 عصر
سلام وعرض ادب....
خیلی خیلی ممنونم که وقت گذاشتید...فایل ودیتا را میسازم وسوالی بود،می پرسم.....خدا خیرتون بده..ممنونم
سلام
موفق باشید
پرسشی داشتین حتما مطرح کنین

نوشیروانی
یک شنبه 13 مرداد 1398, 08:03 صبح
سلام
موفق باشید
پرسشی داشتین حتما مطرح کنین
با سلام خدمت شما دوستان عزیزخصوصا آقای mazoolagh (http://barnamenevis.org/member.php?9893-mazoolagh)
خواهشی داشتم .میشه همین دیتابیس را بدون کدنویسی و براساس ارتباط جداول موجود طراحی کرد . و فرمی برای ورود اطلاعات ایجادکنید .؟؟
آخه بنده کدنویسی بلد نیستم ولی براساس توضیحات جنابعالی جدول را ساختم ولی نتیجه نگرفتم



خیلی ساده جداول شما اینها میشن:
پایه های تحصیلی Grades
عناوین درسها CourseTitles
درسها Courses
آموزگاران (مربیان) Instructors
دانش آموزان Students
نمرات Gradings

ممنون میشم ازهمه دوستان عزیز

mazoolagh
دوشنبه 14 مرداد 1398, 12:34 عصر
با سلام خدمت شما دوستان عزیزخصوصا آقای mazoolagh (http://barnamenevis.org/member.php?9893-mazoolagh)
خواهشی داشتم .میشه همین دیتابیس را بدون کدنویسی و براساس ارتباط جداول موجود طراحی کرد . و فرمی برای ورود اطلاعات ایجادکنید .؟؟
آخه بنده کدنویسی بلد نیستم ولی براساس توضیحات جنابعالی جدول را ساختم ولی نتیجه نگرفتم



سلام و روز خوش
اینکه نوشتین کدنویسی بلد نیستین رو میگذارم بحساب شکسته نفسی شما، چون در چندین و چند تاپیک دیدم پست های شما رو و اینکه برنامه هم پیوست کردین.


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

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