0 / 0 / 0
Регистрация: 26.10.2010
Сообщений: 33
1

Написать программу, проверяющую правильность ввода даты

12.11.2010, 11:59. Показов 15986. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написать программу, проверяющую правильность ввода даты (формат ввода: дд.мм.гг):

- введено нужное количество символов;

- дд и мм являются числами;

- 1 =< дд =< 31;

- 1 =< мм =<12.

В случае неправильного ввода заставить пользователя повторить ввод. Если ввод прошел успешно, то введенная дата должно выдаваться в окне сообщения в виде списка:

День: дд;

Месяц: мм;

Год: гг.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2010, 11:59
Ответы с готовыми решениями:

Написать программу, проверяющую правильность ввода даты
Написать программу, проверяющую правильность ввода даты (формат ввода: дд.мм.гг): - ...

Проверить правильность ввода в TextBox даты и времени
Подскажите пожалуйста, как проверить правильность введения в текстбокс Даты и времени, то есть что...

Составить программу проверяющую корректность введенной даты с помощью Property методов
Составить программу, которая должна считывать с клавиатуры значение календарной даты и проверять...

Написать программу, проверяющую, является ли частью данного слова
1)Написать программу, проверяющую, является ли частью данного слова. Ответ должен быть 'да' или...

14
128 / 23 / 3
Регистрация: 23.09.2010
Сообщений: 62
12.11.2010, 15:59 2
FARAON166,
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Sub MyFirstDateCode()
Dim vData As String
vData = InputBox("Введите дату по образцу: дд.мм.гг")
If vData = "" Then Exit Sub
If IsDate(vData) = True And vData Like "##.##.##" = True And CLng(Left(vData, 2)) > 0 And CLng(Left(vData, 2)) <= 31 _
    And CLng(Mid(vData, 4, 2)) > 0 And CLng(Mid(vData, 4, 2)) <= 12 Then
    MsgBox "День: " & Left(vData, 2) & vbCr & "Месяц: " & Mid(vData, 4, 2) & vbCr & "Год: " & Right(vData, 2)
Else
    MsgBox "Повторите ввод"
End If
End Sub
2
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
12.11.2010, 16:19 3
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub YourNextDateCode()
Dim vData As String
Do
    vData = InputBox("Введите дату по образцу: дд.мм.гг", "Ввод даты", vData)
 
    If IsDate(vData) And vData Like "*#.*#.##" Then
        MsgBox "День: " & Day(vData) & _
        vbCr & "Месяц: " & Month(vData) & " (" & MonthName(Month(vData)) & ")" & _
        vbCr & "Год: " & Year(vData), vbInformation
        Exit Do
    End If
Loop
 
End Sub
Используется возможность не вводить лишние нули — секретарши будут рады!

Также удобно то, что можно отредактировать — а не вновь печатать! — ошибочный текст.
0
128 / 23 / 3
Регистрация: 23.09.2010
Сообщений: 62
12.11.2010, 16:25 4
Sasha_Smirnov, я код плохо протестировал. Из 5 строчки моего кода можно вот это убрать (оно там лишнее):
Visual Basic
1
IsDate(vData) = True And
0
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
12.11.2010, 23:31 5
А вот ещё более удобный (что может и не подтвердиться!) вариант.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub YourLastDateCode()
Static vData As String
Do
    vData = InputBox("Введите дату по шаблону: дд.мм.гг", "Ввод даты", vData)
    If vData = vbNullString Then MsgBox "Ну пока!", vbExclamation: Exit Sub
    
    If IsDate(vData) And Trim(vData) Like "*#.*#.*#" Then
        MsgBox "День: " & vbTab & Day(vData) & _
        vbCr & "Месяц: " & vbTab & Month(vData) & " (" & MonthName(Month(vData)) & ")" & _
        vbCr & "Год: " & vbTab & Year(vData) & _
        vbCr & "Век: " & 1 + (Year(vData) - 1) \ 100 & "-й" & vbCr & _
        vbCr & "День недели: " & WeekdayName(Weekday(vData)), vbInformation
        Exit Do
    End If
Loop
 
MsgBox "Результат: " & Format(vData, "dd.mm.yy"), vbInformation
End Sub
Честно сказать, предыдущий я почти не тестировал; просто предъявил встроенные возможности!
Миниатюры
Написать программу, проверяющую правильность ввода даты  
0
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
13.11.2010, 23:33 6
вот, на всякий случай, еще более правильный способ контроля ввода даты. проверяйте https://www.cyberforum.ru/visu... post659997
1
Заблокирован
14.11.2010, 13:36 7
Я считаю, что этот вариант самый лучший. Кто не согласен?
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub dat()
Dim vData As String
On Error GoTo metka
vData = InputBox("Введите дату по образцу: дд.мм.гг")
If vData = "" Then Exit Sub
If vData Like "##.##.##" = True Then
    If Left(DateValue(vData), 6) & Right(DateValue(vData), 2) = vData Then
        MsgBox "День: " & Left(vData, 2) & vbCr & "Месяц: " & Mid(vData, 4, 2) & vbCr & "Год: " & Right(vData, 2)
    Else
metka:
        MsgBox "Такой даты в календаре не существует"
    End If
Else
    MsgBox "Дата введена не по образцу"
End If
End Sub
Можно ли этот код сделать без ошибки? Ошибка возникает, если ввести то, что не может быть переведено в дату, например, 32.13.10.
Может быть есть что-нибудь наподобие FileSystemObject только связанное с датами?
0
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
14.11.2010, 13:48 8
Цитата Сообщение от Busine2009 Посмотреть сообщение
Я считаю, что этот вариант самый лучший. Кто не согласен?
Я. Ибо нет предела!.. Да ты и сам указал на огрехи.

С тем, что даты не существует, прекрасно справлялась функция IsDate (для 100—9999 годов).
1
Заблокирован
14.11.2010, 14:14 9
Оказывается можно вот так ещё упростить задачу:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub dat()
Dim vData As String
vData = InputBox("Введите дату по образцу: дд.мм.гг")
If vData = "" Then Exit Sub
If vData Like "##.##.##" = True And IsDate(vData) = True Then
    If Format(DateValue(vData), "dd.mm.yy") = vData Then
        MsgBox "День: " & Left(vData, 2) & vbCr & "Месяц: " & Mid(vData, 4, 2) & vbCr & "Год: " & Right(vData, 2)
    Else
        MsgBox "Такой даты в календаре не существует"
    End If
Else
    MsgBox "Дата введена не по образцу и (или) нет такой даты в календаре"
End If
End Sub
1
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
14.11.2010, 23:03 10
Изящно! Но не будем закрывать глаза и на это:
Цитата Сообщение от FARAON166 Посмотреть сообщение
В случае неправильного ввода заставить пользователя повторить ввод.
Что неплохо, я считаю, год тому назад реализовано в приложенном документе.

Код там, конечно, не учебный, но (опять-таки по-моему) вполне дружественный.
Вложения
Тип файла: doc DateShift2009.doc (92.5 Кб, 107 просмотров)
0
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
15.11.2010, 18:29 11
Год, день и месяц я предлагаю (а как заставишь-то!) вводить по отдельности.

Вообще, обычно выбором делают — чтоб не не мучиться.

Добавлено через 42 минуты
И есть две замечательные функции (самодельные).
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Function DayOfYear(d, M, Y, Optional OldStyle) As Integer
'функция получает число, месяц и год (возможно, по старому стилю) и возвращает номер дня в году'
Dim visokos As Integer
If IsMissing(OldStyle) Then OldStyle = False Else OldStyle = True
 
If Y Mod 4 = 0 Then visokos = 1
If Y Mod 100 = 0 Then If Not OldStyle Then visokos = 0
If Y Mod 400 = 0 Then visokos = 1
 
If visokos = 1 Then MsgBox Y & "-й " & IIf(OldStyle, "юл", "григор") & "ианский год високосный (366 дней)."
 
Select Case M
    Case 1:  DayOfYear = d
    Case 2:  DayOfYear = 31 + d
    Case 3:  DayOfYear = 31 + 28 + visokos + d
    Case 4:  DayOfYear = 31 + 28 + visokos + 31 + d
    Case 5:  DayOfYear = 31 + 28 + visokos + 31 + 30 + d
    Case 6:  DayOfYear = 31 + 28 + visokos + 31 + 30 + 31 + d
    Case 7:  DayOfYear = 31 + 28 + visokos + 31 + 30 + 31 + 30 + d
    Case 8:  DayOfYear = 31 + 28 + visokos + 31 + 30 + 31 + 30 + 31 + d
    Case 9:  DayOfYear = 31 + 28 + visokos + 31 + 30 + 31 + 30 + 31 + 31 + d
    Case 10: DayOfYear = 31 + 28 + visokos + 31 + 30 + 31 + 30 + 31 + 31 + 30 + d
    Case 11: DayOfYear = 31 + 28 + visokos + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + d
    Case 12: DayOfYear = 334 + visokos + d
End Select
End Function
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Function CalendarDate(yearnumber, x, Optional OldStyle) As String
'функция получает номер года (возможно, юлианского) и его день x и возвращает строку с датой'
Dim visokos As Integer
If IsMissing(OldStyle) Then OldStyle = False Else OldStyle = True
 
If yearnumber Mod 4 = 0 Then visokos = 1
If yearnumber Mod 100 = 0 Then If Not OldStyle Then visokos = 0
If yearnumber Mod 400 = 0 Then visokos = 1
 
Select Case x
    Case Is < 32:            CalendarDate = Format(x, "00") & ".01."
    Case Is < 60 + visokos:  CalendarDate = Format(x - 31, "00") & ".02."
    Case Is < 91 + visokos:  CalendarDate = Format(x - 59 - visokos, "00") & ".03."
    Case Is < 121 + visokos: CalendarDate = Format(x - 90 - visokos, "00") & ".04."
    Case Is < 152 + visokos: CalendarDate = Format(x - 120 - visokos, "00") & ".05."
    Case Is < 182 + visokos: CalendarDate = Format(x - 151 - visokos, "00") & ".06."
    Case Is < 213 + visokos: CalendarDate = Format(x - 181 - visokos, "00") & ".07."
    Case Is < 244 + visokos: CalendarDate = Format(x - 212 - visokos, "00") & ".08."
    Case Is < 274 + visokos: CalendarDate = Format(x - 243 - visokos, "00") & ".09."
    Case Is < 305 + visokos: CalendarDate = Format(x - 273 - visokos, "00") & ".10."
    Case Is < 335 + visokos: CalendarDate = Format(x - 304 - visokos, "00") & ".11."
    Case Is < 366 + visokos: CalendarDate = Format(x - 334 - visokos, "00") & ".12."
    Case Else: MsgBox "Неверно вычислен день " & yearnumber & " года: " & x
End Select
    
CalendarDate = CalendarDate + Format(yearnumber, "0000")
End Function
0
Заблокирован
15.11.2010, 20:26 12
Sasha_Smirnov,
напиши по пунктам, чем тебе мой (так сказать - хотя собран из многих источников) код не нравится?
0
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
15.11.2010, 23:03 13
Мне не нравится заставлять. Как упражнение код подходящий, он не плох!

И всё же мы как-то замяли тему — неясно: хоть что-то подошло. Вопрошавший, ау!
0
1180 / 631 / 39
Регистрация: 30.05.2010
Сообщений: 715
15.11.2010, 23:07 14
Здравствуйте FARAON166.
один их самых простых способов проверить "..правильность ввода даты.." - использование функции IsDate:
Visual Basic
1
2
3
Function toDate(v) as string
    If IsDate(v) Then toDate = Format(v, "dd.mm.yyyy") Else toDate = Empty
End function
применение:
Visual Basic
1
2
3
Sub Text1_LostFocus
   Text1.Text = toDate(Text1.Text)
   ...
Евгений.
2
Заблокирован
15.11.2010, 23:26 15
Цитата Сообщение от Sasha_Smirnov Посмотреть сообщение
Вопрошавший, ау!
у него сейчас такой период, что ему не интересно - ему главное получить диплом.

Добавлено через 4 минуты
Teslenko_EA,
Visual Basic
1
IsDate
эта функция читает сначала слева направо. Если данные не подходят, то читает справа налево. Если не подходит, то выдаёт False.

Добавлено через 39 секунд
Цитата Сообщение от Teslenko_EA Посмотреть сообщение
dd.mm.yyyy
речь шла о формате dd.mm.yy.
0
15.11.2010, 23:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2010, 23:26
Помогаю со студенческими работами здесь

Написать программу, проверяющую, можно ли из данных букв составить данное слово
Двумерный массив n х m содержит некоторые буквы русского алфавита, расположенные в произвольном...

Написать программу, проверяющую, можно ли из русских букв составить данное слово S
Двумерный массив n×m содержит некоторые буквы русского алфавита, расположенные в произвольном...

Написать программу для младших школьников, проверяющую знание ими таблицы умножения от 2 до 12
Помогите пожалуйста! Надо написать программу для младших школьников, проверяющую знание ими...

Написать программу, проверяющую правильность расстановки скобок
1 «Арифметическое выражение». Исходные данные - арифметическое выражение. Написать программу,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru