PDA

View Full Version : سوال: ایجاد اخطار هنگام وارد کردن ساعت زمان تکراری



behzadsen
سه شنبه 19 فروردین 1393, 03:13 صبح
دوستان و اساتید محترم سلام، به تازگی یه مشکلی برام پیش اومده که ازتون میخوام لطفا کمکم کنید.
من در حال ساخت برنامه ای هستم که بتونه یه مکان رو در ساعات مختلف رزرو کنه.
مثلا اتاق a رو در ساعت 10:20 تا 11:30 به آقای m اجاره دادیم.
حالا میخوام اگه کس دیگه ای بخواد اتاق a رو توی زمانی که توی مورد بالا ذخیره کردم رزرو کنه برنامه پیغام خطا بده و نزار این رزرو انجام بشه.
در واقع برنامه باید جوری باشه که اگه حتی زمان یه دقیقه هم تداخول داشته باشه پیغام خطا بد.
لطفا اگه میتونید کمکم کنید من توی این شرط گیر کردم، بقیش رو خودم میتونم انجام بدم فقط توی این شرط عقلم به جای قد نمیده.

محمد آشتیانی
سه شنبه 19 فروردین 1393, 09:32 صبح
سلام
با این تابع میتونی مشخص کنی که بازه ها با هم تداخل دارن یا نه ، نتیجه تابع اگر False باشه ، یعنی تداخل ندارن و اگر True باشه یعنی تداخل هست

پارامترهای ورودی این تابع
FirstBegin و FirstEnd میشه ساعت شروع و پایان اجاره اتاق
LastBegin و LastEnd میشه ساعت شروع و پایان جدیدی که میخوای چک کنی


Public Function CheckOverlap(ByVal FirstBegin As String, ByVal FirstEnd As String, ByVal LastBegin As String, ByVal LastEnd As String) As Boolean


Dim FunctionValue As Boolean
Dim FBegin, FEnd, LBegin, LEnd As Integer


FBegin = ConvertToMinutes(FirstBegin)
FEnd = ConvertToMinutes(FirstEnd)
LBegin = ConvertToMinutes(LastBegin)
LEnd = ConvertToMinutes(LastEnd)


If (FBegin < FEnd) And (LBegin < LEnd) Then
If (LBegin > FBegin) And (LBegin > FEnd) Then
FunctionValue = False
ElseIf (LBegin < FBegin) And (LEnd < FBegin) Then
FunctionValue = False
Else
FunctionValue = True
End If
Else
FunctionValue = True
End If


Return FunctionValue


End Function


یه تابع دیگه هم هست که توی تابع بالایی استفاده شده و باید اینم بنویسی تو برنامه
فرمت پارامتر ورودی این تابع حتما HH:MM باید باشه


Private Function ConvertToMinutes(ByVal InputTime As String) As Integer
Dim Segment(1) As String
Segment = Split(InputTime, ":")


ConvertToMinutes = CInt(Segment(0) * 60) + CInt(Segment(1))
End Function



موفق باشید.

behzadsen
سه شنبه 19 فروردین 1393, 15:10 عصر
دوست عزیزم ممنون، آزمایش میکنم بعد بهتون خبر میدم.

behzadsen
چهارشنبه 20 فروردین 1393, 02:09 صبح
خوب آقا محمد من طبق دستور شما عمل کردم و مقادیر رو با استفاده از متغیرها و گذاشتن کد زیر توی یه کلید جا گذاری کردم، حالا چطور باید تابع شمارو توی کلیدم فراخونی کنم؟
For I = 0 To DataGridView1.RowCount - 1
FirstBegin = Mid(DataGridView1.Rows(I).Cells(0).Value, 1, 5)
FirstEnd = Mid(DataGridView1.Rows(I).Cells(0).Value, 7, 11)
LastBegin = Mid(TextBox5.Text, 1, 5)
LastEnd = Mid(TextBox5.Text, 7, 11)
Next

محمد آشتیانی
چهارشنبه 20 فروردین 1393, 02:17 صبح
سلام
کار خاصی نیاز نیست انجام بدی ، شما این متغیر ها رو پر کردی خط بعد از اینا تابعو فراخوانی کن ، شبیه به این



If CheckOverlap(FirstBegin, FirstEnd, LastBegin, LastEnd) = False Then
' زمان ها تداخل ندارند - کد شما
Else
' تداخل زمانی - نمایش پیغام مناسب
End if



به همین سادگی!