Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Imports System.IO
- Imports System.Text
- Public Enum ТипЧеловек
- Автор1 = 1
- Автор2 = 2
- End Enum
- 'объявление структуры описывающей песню
- Public Structure ТипОписание
- Dim Название As String
- Dim ДатаИздания As String
- Dim ФИОАвтора As ТипЧеловек
- Dim Жанр As String
- Function ЧитатьИзПотока(Поток As StreamReader) As Boolean
- Try
- Название = Поток.ReadLine
- ДатаИздания = Поток.ReadLine
- ФИОАвтора = Поток.ReadLine
- Жанр = Поток.ReadLine
- Return True
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- Return False
- End Try
- End Function
- Function ПисатьВПоток(Поток As StreamWriter) As Boolean
- Try
- Поток.WriteLine(Название)
- Поток.WriteLine(ДатаИздания)
- Поток.WriteLine(ФИОАвтора)
- Поток.WriteLine(Жанр)
- Return True
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- Return False
- End Try
- End Function
- Function ЧитатьИзФормы(Форма As FrmПесня) As Boolean
- Try
- Название = Форма.txtНазвание.Text
- Select Case Форма.cbxФИОАвтора.SelectedItem.ToString
- Case "Автор 1"
- ФИОАвтора = 1
- Case Else
- ФИОАвтора = 2
- End Select
- Жанр = Форма.txtЖанр.Text
- ДатаИздания = Форма.txtДатаИздания.Text
- Return True
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- Return False
- End Try
- End Function
- Function ПисатьВФорму(Форма As FrmПесня) As Boolean
- Try
- Форма.txtНазвание.Text = Название
- Форма.cbxФИОАвтора.Text = IIf(ФИОАвтора = 1, "Автор1", "Автор2")
- Форма.txtЖанр.Text = Жанр
- Форма.txtДатаИздания.Text = ДатаИздания
- Return True
- Catch ex As Exception
- Console.WriteLine(ex.Message)
- Return False
- End Try
- End Function
- Sub Сбросить()
- Название = ""
- ФИОАвтора = ТипЧеловек.Автор1
- ДатаИздания = ""
- Жанр = ""
- End Sub
- End Structure
- Public Structure ТипКоллекция
- Public Песни() As ТипОписание
- Public Позиция As Integer
- Public ИмяФайла As String
- Sub New(ИмяФайла As String)
- Me.ИмяФайла = ИмяФайла
- ReDim Песни(0)
- Позиция = 0
- End Sub
- ReadOnly Property Количество() As Integer
- Get
- Return UBound(Песни) + 1
- End Get
- End Property
- Function Загрузить() As Boolean
- Dim i As Integer
- Using Файл = New FileStream(
- ИмяФайла, FileMode.Open, FileAccess.Read)
- 'Создание потока для чтения из файла
- Using Поток As New StreamReader(Файл, Encoding.Default)
- ReDim Песни(-1)
- Загрузить = True
- Do Until Поток.EndOfStream
- i = UBound(Песни) + 1
- ReDim Preserve Песни(i)
- If Not Песни(i).ЧитатьИзПотока(Поток) Then
- Загрузить = False
- Exit Do
- End If
- Loop
- Поток.Close()
- End Using
- Файл.Close()
- End Using
- End Function
- Function Сохранить() As Boolean
- Using Файл = New FileStream(ИмяФайла, FileMode.Create, FileAccess.Write)
- 'создание потока для записи в файл
- Using Поток As New StreamWriter(Файл, Encoding.Default)
- Сохранить = True
- For i As Integer = 0 To UBound(Песни)
- If Not Песни(i).ПисатьВПоток(Поток) Then
- Сохранить = False
- Exit For
- End If
- Next
- Поток.Close()
- End Using
- Файл.Close()
- End Using
- End Function
- End Structure
- Public Class FrmПесня
- Private ИмяФайла As String = "Песни.dat"
- Private Коллекция As ТипКоллекция
- Private Sub FrmПесня_Load(sender As Object, e As EventArgs) Handles Me.Load
- Коллекция = New ТипКоллекция(ИмяФайла)
- cbxФИОАвтора.SelectedIndex = 0
- End Sub
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, ПервыйToolStripMenuItem.Click
- Коллекция.Позиция = 0
- Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
- End Sub
- Private Sub btnПредыдущий_Click(sender As Object, e As EventArgs) Handles btnПредыдущий.Click, ПредыдущийToolStripMenuItem.Click
- If Коллекция.Позиция > 0 Then
- Коллекция.Позиция -= 1
- Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
- End If
- End Sub
- Private Sub btnСледующий_Click(sender As Object, e As EventArgs) Handles btnСледующий.Click
- If Коллекция.Позиция < Коллекция.Песни.Count - 1 Then
- Коллекция.Позиция += 1
- Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
- End If
- End Sub
- Private Sub btnДобавить_Click(sender As Object, e As EventArgs) Handles btnДобавить.Click, ДобавитьToolStripMenuItem.Click
- Коллекция.Позиция = Коллекция.Количество
- ReDim Preserve Коллекция.Песни(Коллекция.Позиция)
- With Коллекция.Песни(Коллекция.Позиция)
- .Сбросить()
- .ПисатьВФорму(Me)
- End With
- End Sub
- Private Sub btnУдалить_Click(sender As Object, e As EventArgs) Handles btnУдалить.Click, УдалитьToolStripMenuItem.Click
- If Коллекция.Количество = 1 Then
- With Коллекция.Песни(0)
- .Сбросить()
- .ПисатьВФорму(Me)
- End With
- Else
- For i As Integer = Коллекция.Позиция To Коллекция.Количество - 2
- Коллекция.Песни(i) = Коллекция.Песни(i + 1)
- Next
- ReDim Preserve Коллекция.Песни(Коллекция.Количество - 2)
- Коллекция.Позиция = 0
- Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
- End If
- End Sub
- Private Sub btnСохранить_Click(sender As Object, e As EventArgs) Handles btnСохранить.Click, СохранитьToolStripMenuItem.Click
- If Коллекция.Песни(Коллекция.Позиция).ЧитатьИзФормы(Me) Then
- Коллекция.Сохранить()
- End If
- End Sub
- Private Sub btnЗагрузить_Click(sender As Object, e As EventArgs) Handles btnЗагрузить.Click, ЗагрузитьToolStripMenuItem.Click
- If Коллекция.Загрузить() Then
- Коллекция.Позиция = 0
- Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
- End If
- End Sub
- Private Sub btnВыход_Click(sender As Object, e As EventArgs) Handles btnВыход.Click
- Close()
- End Sub
- Private Sub btnПоследний_Click(sender As Object, e As EventArgs) Handles btnПоследний.Click
- Коллекция.Позиция = Коллекция.Песни.Count - 1
- Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
- End Sub
- End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement