Консультация № 175119
10.12.2009, 23:01
35.00 руб.
0 1 1
Здравствуйте, уважаемые эксперты.
Помогите пожалуйста сделать домашнее задание.
Прошу Вас составить алгоритм для реализации на Visual Basic 6.0.
Вот пример готовой программы:

http://elrond.tud.ttu.ee/material/vendelin/kodus/tuba.exe

Но эта программа написана на Visual Basic 2008 , а мне требуется код программы на Visual Basic 6.0.

А вот задание:

(Создать приложение на Visual Basic с моделью комнаты, в которой находятся телевизор, лампа, термометр и электрический радиатор с терморегулятором.)

У лампы и телевизора есть выключатель. Радиатор включается автоматически, если температура комнаты опускается ниже заданного минимума, и постепенно нагревается до максимальной температуры. Если температура поднимается до максимума, радиатор автоматически выключается и комната медленно охлаждается.

Термометр показывает температуру комнаты.

Пользователь может задавать мощности телевизора, лампы и радиатора пока модель не активизирована.

Температуру включения и выключения радиатора можно изменять в любой момент.

В активизированном состоянии модели можно включать/выключать лампу и телевизор, а также изменять предельные температуры радиатора. На форме необходимо постоянно показывать общую потребляемую мощность.


Спасибо.

Обсуждение

Неизвестный
11.12.2009, 18:30
общий
это ответ
Здравствуйте, quperec.
проект в приложении, а это код модуля формы:
Код:

VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
Object = "{0D452EE1-E08F-101A-852E-02608C4D0BB4}#2.0#0"; "FM20.DLL"
Begin VB.Form Room
Caption = "Модель комнаты"
ClientHeight = 4575
ClientLeft = 60
ClientTop = 450
ClientWidth = 7860
LinkTopic = "Form1"
ScaleHeight = 4575
ScaleWidth = 7860
StartUpPosition = 3 'Windows Default
Begin MSComctlLib.ProgressBar barTemperature
Height = 255
Left = 3480
TabIndex = 9
Top = 2040
Width = 4215
_ExtentX = 7435
_ExtentY = 450
_Version = 393216
Appearance = 1
Min = 7
Max = 40
End
Begin VB.CommandButton btnLampOn
Caption = "Включить"
Height = 300
Left = 2280
TabIndex = 2
Top = 1140
Width = 1095
End
Begin VB.CommandButton btnTVOn
Caption = "Включить"
Height = 300
Left = 2280
TabIndex = 1
Top = 240
Width = 1095
End
Begin VB.Timer Timer
Enabled = 0 'False
Interval = 1
Left = 3600
Top = 120
End
Begin VB.CommandButton btnStart
Caption = "Начать"
Height = 495
Left = 6240
TabIndex = 0
Top = 3960
Width = 1215
End
Begin MSComctlLib.Slider sbMaxTemperature
Height = 300
Left = 120
TabIndex = 21
Top = 4080
Width = 4455
_ExtentX = 7858
_ExtentY = 529
_Version = 393216
Min = 10
Max = 40
SelStart = 10
TickFrequency = 10
Value = 10
End
Begin MSComctlLib.Slider sbMinTemperature
Height = 300
Left = 120
TabIndex = 22
Top = 3120
Width = 4455
_ExtentX = 7858
_ExtentY = 529
_Version = 393216
Min = 7
Max = 40
SelStart = 7
TickFrequency = 10
Value = 7
End
Begin VB.Label Label7
Caption = "Мощность"
Height = 255
Left = 4560
TabIndex = 20
Top = 240
Width = 1695
End
Begin VB.Label Label6
Caption = "Максимальная температура"
Height = 300
Left = 120
TabIndex = 19
Top = 3720
Width = 2895
End
Begin VB.Label Label5
Caption = "Минимальная температура"
Height = 300
Left = 120
TabIndex = 18
Top = 2760
Width = 3135
End
Begin VB.Label Label4
Caption = "Термометр"
Height = 300
Left = 4560
TabIndex = 17
Top = 1560
Width = 1215
End
Begin VB.Label Label3
Caption = "Радиатор"
Height = 300
Left = 120
TabIndex = 16
Top = 2040
Width = 1095
End
Begin VB.Label Label2
Caption = "Лампа"
Height = 300
Left = 120
TabIndex = 15
Top = 1140
Width = 1095
End
Begin VB.Label Label1
Caption = "Телевизор"
Height = 300
Left = 120
TabIndex = 14
Top = 240
Width = 1095
End
Begin MSForms.SpinButton sbRadiator
Height = 300
Left = 1920
TabIndex = 13
Top = 2040
Width = 255
Size = "450;529"
SmallChange = 100
End
Begin MSForms.SpinButton sbLamp
Height = 300
Left = 1920
TabIndex = 12
Top = 1140
Width = 255
Size = "450;529"
SmallChange = 5
End
Begin MSForms.SpinButton sbTV
Height = 300
Left = 1920
TabIndex = 11
Top = 240
Width = 255
Size = "450;529"
SmallChange = 5
End
Begin VB.Label lbTemperature
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Height = 300
Left = 6360
TabIndex = 10
Top = 1560
Width = 600
End
Begin VB.Label edMinTemperature
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "7"
Height = 300
Left = 3840
TabIndex = 8
Top = 2760
Width = 600
End
Begin VB.Label edMaxTemperature
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "10"
Height = 300
Left = 3840
TabIndex = 7
Top = 3720
Width = 600
End
Begin VB.Label lbPower
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Height = 300
Left = 6360
TabIndex = 6
Top = 240
Width = 600
End
Begin VB.Label lbRadiator
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "100"
Height = 300
Left = 1320
TabIndex = 5
Top = 2040
Width = 600
End
Begin VB.Label lbLamp
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "5"
Height = 300
Left = 1320
TabIndex = 4
Top = 1140
Width = 600
End
Begin VB.Label lbTV
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "30"
Height = 300
Left = 1320
TabIndex = 3
Top = 240
Width = 600
End
End
Attribute VB_Name = "Room"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

'минимальное и максимальное значения температуры комнаты
Private Const MIN_ROOM_TEMPERATURE = 7
Private Const MAX_ROOM_TEMPERATURE = 40

'теплопотеря комнаты за интервал времени
Private Const ROOM_HEAT_LOSS = 1

'теплоотдача радиатора за интервал времени
Private Const RADIATOR_HEAT_STRENGTH = 2

'интервал времени
Private Const TIMER_INTERVAL = 100

'минимальные и максимальные значения мощностей устройств
Private Const MIN_TV_POWER = 30
Private Const MAX_TV_POWER = 100
Private Const MIN_LAMP_POWER = 5
Private Const MAX_LAMP_POWER = 100
Private Const MIN_RADIATOR_POWER = 100
Private Const MAX_RADIATOR_POWER = 1000


'поля
Private mTemperature As Long
Private mTVOn As Boolean
Private mLampOn As Boolean
Private mRadiatorOn As Boolean

'свойства
Property Get Temperature() As Long
Temperature = mTemperature
End Property

Property Let Temperature(ByVal RHS As Long)
mTemperature = RHS
lbTemperature = RHS
barTemperature.Value = Min(Max(RHS, barTemperature.Min), barTemperature.Max)
End Property


Property Get TVOn() As Boolean
TVOn = mTVOn
End Property

Property Let TVOn(ByVal RHS As Boolean)
mTVOn = RHS
CalculatePower
End Property

Property Get LampOn() As Boolean
LampOn = mLampOn
End Property

Property Let LampOn(ByVal RHS As Boolean)
mLampOn = RHS
CalculatePower
End Property

Property Get RadiatorOn() As Boolean
RadiatorOn = mRadiatorOn
End Property

Property Let RadiatorOn(ByVal RHS As Boolean)
mRadiatorOn = RHS
CalculatePower
End Property


Property Get TVPower() As Long
TVPower = sbTV
End Property

Property Get LampPower() As Long
LampPower = sbLamp
End Property

Property Get RadiatorPower() As Long
RadiatorPower = sbRadiator
End Property


Property Get MinTemperature() As Long
MinTemperature = sbMinTemperature
End Property

Property Get MaxTemperature() As Long
MaxTemperature = sbMaxTemperature
End Property


'методы
Private Sub CalculatePower()
Dim Power As Long
If TVOn Then
Power = Power + TVPower
End If
If LampOn Then
Power = Power + LampPower
End If
If RadiatorOn Then
Power = Power + RadiatorPower
End If
lbPower = Power
End Sub

Private Sub ChangeControlStates(ByVal Working As Boolean)
btnTVOn.Visible = Working
btnLampOn.Visible = Working
sbTV.Enabled = Not Working
sbLamp.Enabled = Not Working
sbRadiator.Enabled = Not Working

btnStart.Caption = IIf(Working, "Закончить", "Начать")

If Not Working Then
lbPower = ""
lbTemperature = ""
End If
End Sub


'обработчики событий

Private Sub Form_Load()
With sbTV
.Min = MIN_TV_POWER
.Max = MAX_TV_POWER
.Value = MIN_TV_POWER
End With

With sbLamp
.Min = MIN_LAMP_POWER
.Max = MAX_LAMP_POWER
.Value = MIN_LAMP_POWER
End With

With sbRadiator
.Min = MIN_RADIATOR_POWER
.Max = MAX_RADIATOR_POWER
.Value = MIN_RADIATOR_POWER
End With

With barTemperature
.Min = MIN_ROOM_TEMPERATURE
.Max = MAX_ROOM_TEMPERATURE
Temperature = .Value
End With

With Timer
.Enabled = False
.Interval = TIMER_INTERVAL
End With

ChangeControlStates False
End Sub

Private Sub btnStart_Click()
Timer.Enabled = Not Timer.Enabled
Temperature = MIN_ROOM_TEMPERATURE
ChangeControlStates Timer.Enabled
End Sub

Private Sub btnTVOn_Click()
TVOn = Not TVOn
btnTVOn.Caption = IIf(TVOn, "Выключить", "Включить")
End Sub

Private Sub btnLampOn_Click()
LampOn = Not LampOn
btnLampOn.Caption = IIf(LampOn, "Выключить", "Включить")
End Sub



Private Sub sbTV_Change()
lbTV = sbTV
End Sub

Private Sub sbLamp_Change()
lbLamp = sbLamp
End Sub

Private Sub sbRadiator_Change()
lbRadiator = sbRadiator
End Sub

Private Sub sbMaxTemperature_Scroll()
sbMaxTemperature = Max(sbMinTemperature, sbMaxTemperature)
edMaxTemperature = sbMaxTemperature
End Sub

Private Sub sbMinTemperature_Scroll()
sbMinTemperature = Min(sbMinTemperature, sbMaxTemperature)
edMinTemperature = sbMinTemperature
End Sub

Private Sub Timer_Timer()
Temperature = Temperature - ROOM_HEAT_LOSS
If RadiatorOn Then
Temperature = Temperature + RADIATOR_HEAT_STRENGTH
End If

If Temperature > MaxTemperature Then
RadiatorOn = False
ElseIf Temperature < MinTemperature Then
RadiatorOn = True
End If
End Sub



'вспомогательные
Private Function Min(ByVal a, ByVal b)
If a < b Then Min = a Else Min = b
End Function

Private Function Max(ByVal a, ByVal b)
If a > b Then Max = a Else Max = b
End Function

что-то вроде этого...
форма немного отличается(картинки не вставлял)... да и элементы управления по сравнению с Windows.Forms - "бедноватые"...
так что требуются библиотеки: mscomctl.ocx и FM20.DLL, можно конечно обойтись и без них, но будет не так красиво...

на комментарии поскупился, так что что не понятно - спрашивайте...
Успехов.
Прикрепленные файлы:
Форма ответа