Составить алгоритм и программу определения самых старых зданий, подлежащих реконструкции - VB
Формулировка задачи:
Имеется список 60-ти зданий города, подлежащих реконструкции. Сведения о каждом здании содержат название микрорайона, улицу, номер дома и год постройки. Составить алгоритм и программу определения самых старых зданий, подлежащих реконструкции. Сформировать списки, содержащие полные сведения об этих домах по микрорайонам. Если в микрорайоне таких домов нет, выдать соответствующее сообщение.
реализация проекта: со стандартным модулем и двумя формами и вводом с клавиатуры,
Помогите или посоветуйте как сделать а то, даже плана решения нет
Решение задачи: «Составить алгоритм и программу определения самых старых зданий, подлежащих реконструкции»
textual
Листинг программы
Option Explicit On
Imports System.IO
Module Module1
Public A() As String 'массив из текстового файла
Public MicroRayon(), nMicroRayon(), Ulica() As String
Public God(), Ndoma() As Integer
Public n As Integer = -1
Public Result As String
'Процедура вывода строки
Sub vivod(ByVal M() As String, ByVal Lb As ListBox, ByVal k As Integer)
Dim i As Integer
For i = 0 To k
Lb.Items.Add(M(i))
Next i
End Sub
'процедура вывода строки , состоящей из целых чисел
Sub vivodInt(ByVal M() As Integer, ByVal Lb As ListBox, ByVal k As Integer)
Dim i As Integer
For i = 0 To k
Lb.Items.Add(M(i))
Next i
End Sub
'процедура вывода списков, содержащие сведения о домах
Sub vivod(ByVal Z As String, ByVal T As TextBox)
T.Text = CStr(Z)
End Sub
'процедура чтения из файла
Sub readfile(ByRef M() As String)
Dim OpenFiledialog1 As New OpenFileDialog
OpenFiledialog1.InitialDirectory = "C:\"
OpenFiledialog1.Filter = "Текстовые файлы (*.txt)|*.txt"
If OpenFiledialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
Try
FileOpen(1, OpenFiledialog1.FileName, OpenMode.Input)
Do Until EOF(1)
n = n + 1
ReDim Preserve A(n)
A(n) = LineInput(1)
Loop
Catch ex As Exception
MsgBox("Ошибка при чтении")
Finally
FileClose(1)
End Try
End If
End Sub
'процедура распределения частей строки из файла по Listbox
Sub sp(ByRef M() As String, ByRef MicroRayon() As String, ByRef Ulica() As String, _
ByRef Ndoma() As Integer, ByRef God() As Integer)
Dim i As Integer
Dim sved() As String
For i = 0 To n
sved = M(i).Split(CChar(","))
MicroRayon(i) = sved(0)
Ulica(i) = sved(1)
Ndoma(i) = CInt(sved(2))
God(i) = CInt(sved(3))
Next i
End Sub
'процедура сравнивающая микрорайоны
Sub unical(ByRef MicroRayon() As String, ByRef sved() As String)
Dim i, j, f, k As Integer
k = 0
nMicroRayon(k) = MicroRayon(0)
For i = 0 To UBound(MicroRayon) 'Цикл формирует массив MicroRayon(), который
'будет содержать уникальные названия районов (если какое-либо название будет
'повторятся, то в массив записыватся уже не будет).
f = 0
For j = 0 To k
If MicroRayon(i) = nMicroRayon(j) Then ' MicroRayon(i)- строка, содержащая
'название текущего района.
f = 1
Exit For
End If
Next j
If f = 0 Then 'Название не повторяется, тогда:
k = k + 1
nMicroRayon(k) = MicroRayon(i)
End If
Next i
ReDim Preserve nMicroRayon(k)
End Sub
Sub Resh(ByRef MicroRayon() As String, ByRef Ulica() As String, ByRef Ndoma() As Integer, ByRef God() As Integer, _
ByRef nMicroRayon() As String, ByRef Result As String)
Dim mingod, j, k, i As Integer
Result = ""
For i = 0 To k
mingod = 2015
Result = Result + nMicroRayon(i) + ":" + vbNewLine ' Строка Result поочередно
'присваивается район
For j = 0 To UBound(MicroRayon)
If nMicroRayon(i) = MicroRayon(j) Then
If God(j) < mingod Then ' если год 2015 больше года сооружения,
'то запоминает год сооружения, далее сравнивает последующие
'года сооружения пока не выведет самые старые.
mingod = God(j)
k = j
End If
Result = Result + Ulica(j) + "," + CStr(Ndoma(j)) + "," + CStr(God(j)) + vbNewLine
'если названия j-го района совпадает с названием в ячейке MicroRayon(i), строка Result
'построчно запоминает сведения о зданиях в этом районе (улицу, номер дома, год сооружения).
End If
Next j
Next i
End Sub
End Module
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
readfile(A)
ReDim MicroRayon(n), Ulica(n), Ndoma(n), God(n)
sp(A, MicroRayon, Ulica, Ndoma, God) 'вызов процедуры распределения частей строки из файла по Listbox
vivod(MicroRayon, ListBox1, n)
vivod(Ulica, ListBox2, n)
vivodInt(Ndoma, ListBox3, n)
vivodInt(God, ListBox4, n)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Form2.Show() ' показывается форма 2
Me.Hide() ' закрывается форма1
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
End
End Sub
End Class
Public Class Form2
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ReDim nMicroRayon(n)
unical(MicroRayon, nMicroRayon)
Resh(MicroRayon, Ulica, Ndoma, God, nMicroRayon, Result)
vivod(Result, TextBox1)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Form1.Show() 'показывается форма 1
Me.Close() 'закрывается форма 2
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
End
End Sub
End Class