Advertisement
Guest User

Untitled

a guest
Oct 19th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Imports System.IO
  2. Imports System.Text
  3.  
  4.  
  5. Public Enum ТипЧеловек
  6.     Автор1 = 1
  7.     Автор2 = 2
  8. End Enum
  9. 'объявление структуры описывающей песню
  10. Public Structure ТипОписание
  11.     Dim Название As String
  12.     Dim ДатаИздания As String
  13.     Dim ФИОАвтора As ТипЧеловек
  14.     Dim Жанр As String
  15.  
  16.  
  17.     Function ЧитатьИзПотока(Поток As StreamReader) As Boolean
  18.         Try
  19.             Название = Поток.ReadLine
  20.             ДатаИздания = Поток.ReadLine
  21.             ФИОАвтора = Поток.ReadLine
  22.             Жанр = Поток.ReadLine
  23.             Return True
  24.         Catch ex As Exception
  25.             Console.WriteLine(ex.Message)
  26.             Return False
  27.         End Try
  28.     End Function
  29.  
  30.     Function ПисатьВПоток(Поток As StreamWriter) As Boolean
  31.         Try
  32.             Поток.WriteLine(Название)
  33.             Поток.WriteLine(ДатаИздания)
  34.             Поток.WriteLine(ФИОАвтора)
  35.             Поток.WriteLine(Жанр)
  36.             Return True
  37.         Catch ex As Exception
  38.             Console.WriteLine(ex.Message)
  39.             Return False
  40.         End Try
  41.     End Function
  42.  
  43.  
  44.  
  45.     Function ЧитатьИзФормы(Форма As FrmПесня) As Boolean
  46.         Try
  47.             Название = Форма.txtНазвание.Text
  48.             Select Case Форма.cbxФИОАвтора.SelectedItem.ToString
  49.                 Case "Автор 1"
  50.                     ФИОАвтора = 1
  51.                 Case Else
  52.                     ФИОАвтора = 2
  53.             End Select
  54.             Жанр = Форма.txtЖанр.Text
  55.             ДатаИздания = Форма.txtДатаИздания.Text
  56.             Return True
  57.         Catch ex As Exception
  58.             Console.WriteLine(ex.Message)
  59.             Return False
  60.         End Try
  61.     End Function
  62.     Function ПисатьВФорму(Форма As FrmПесня) As Boolean
  63.         Try
  64.             Форма.txtНазвание.Text = Название
  65.             Форма.cbxФИОАвтора.Text = IIf(ФИОАвтора = 1, "Автор1", "Автор2")
  66.             Форма.txtЖанр.Text = Жанр
  67.             Форма.txtДатаИздания.Text = ДатаИздания
  68.             Return True
  69.         Catch ex As Exception
  70.             Console.WriteLine(ex.Message)
  71.             Return False
  72.         End Try
  73.  
  74.     End Function
  75.     Sub Сбросить()
  76.         Название = ""
  77.         ФИОАвтора = ТипЧеловек.Автор1
  78.         ДатаИздания = ""
  79.         Жанр = ""
  80.     End Sub
  81.  
  82. End Structure
  83. Public Structure ТипКоллекция
  84.     Public Песни() As ТипОписание
  85.     Public Позиция As Integer
  86.     Public ИмяФайла As String
  87.     Sub New(ИмяФайла As String)
  88.         Me.ИмяФайла = ИмяФайла
  89.         ReDim Песни(0)
  90.         Позиция = 0
  91.     End Sub
  92.     ReadOnly Property Количество() As Integer
  93.         Get
  94.             Return UBound(Песни) + 1
  95.         End Get
  96.     End Property
  97.     Function Загрузить() As Boolean
  98.  
  99.         Dim i As Integer
  100.         Using Файл = New FileStream(
  101.             ИмяФайла, FileMode.Open, FileAccess.Read)
  102.             'Создание потока для чтения из файла
  103.            Using Поток As New StreamReader(Файл, Encoding.Default)
  104.                 ReDim Песни(-1)
  105.                 Загрузить = True
  106.                 Do Until Поток.EndOfStream
  107.                     i = UBound(Песни) + 1
  108.                     ReDim Preserve Песни(i)
  109.                     If Not Песни(i).ЧитатьИзПотока(Поток) Then
  110.                         Загрузить = False
  111.                         Exit Do
  112.                     End If
  113.                 Loop
  114.                 Поток.Close()
  115.             End Using
  116.             Файл.Close()
  117.         End Using
  118.     End Function
  119.     Function Сохранить() As Boolean
  120.         Using Файл = New FileStream(ИмяФайла, FileMode.Create, FileAccess.Write)
  121.             'создание потока для записи в файл
  122.            Using Поток As New StreamWriter(Файл, Encoding.Default)
  123.                 Сохранить = True
  124.                 For i As Integer = 0 To UBound(Песни)
  125.                     If Not Песни(i).ПисатьВПоток(Поток) Then
  126.                         Сохранить = False
  127.                         Exit For
  128.                     End If
  129.                 Next
  130.                 Поток.Close()
  131.             End Using
  132.             Файл.Close()
  133.         End Using
  134.     End Function
  135. End Structure
  136. Public Class FrmПесня
  137.     Private ИмяФайла As String = "Песни.dat"
  138.     Private Коллекция As ТипКоллекция
  139.     Private Sub FrmПесня_Load(sender As Object, e As EventArgs) Handles Me.Load
  140.         Коллекция = New ТипКоллекция(ИмяФайла)
  141.         cbxФИОАвтора.SelectedIndex = 0
  142.     End Sub
  143.  
  144.     Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click, ПервыйToolStripMenuItem.Click
  145.         Коллекция.Позиция = 0
  146.         Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
  147.     End Sub
  148.  
  149.     Private Sub btnПредыдущий_Click(sender As Object, e As EventArgs) Handles btnПредыдущий.Click, ПредыдущийToolStripMenuItem.Click
  150.         If Коллекция.Позиция > 0 Then
  151.             Коллекция.Позиция -= 1
  152.             Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
  153.  
  154.         End If
  155.     End Sub
  156.     Private Sub btnСледующий_Click(sender As Object, e As EventArgs) Handles btnСледующий.Click
  157.         If Коллекция.Позиция < Коллекция.Песни.Count - 1 Then
  158.             Коллекция.Позиция += 1
  159.             Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
  160.         End If
  161.     End Sub
  162.  
  163.     Private Sub btnДобавить_Click(sender As Object, e As EventArgs) Handles btnДобавить.Click, ДобавитьToolStripMenuItem.Click
  164.         Коллекция.Позиция = Коллекция.Количество
  165.         ReDim Preserve Коллекция.Песни(Коллекция.Позиция)
  166.         With Коллекция.Песни(Коллекция.Позиция)
  167.             .Сбросить()
  168.             .ПисатьВФорму(Me)
  169.         End With
  170.     End Sub
  171.  
  172.     Private Sub btnУдалить_Click(sender As Object, e As EventArgs) Handles btnУдалить.Click, УдалитьToolStripMenuItem.Click
  173.         If Коллекция.Количество = 1 Then
  174.             With Коллекция.Песни(0)
  175.                 .Сбросить()
  176.                 .ПисатьВФорму(Me)
  177.             End With
  178.  
  179.         Else
  180.             For i As Integer = Коллекция.Позиция To Коллекция.Количество - 2
  181.                 Коллекция.Песни(i) = Коллекция.Песни(i + 1)
  182.             Next
  183.             ReDim Preserve Коллекция.Песни(Коллекция.Количество - 2)
  184.             Коллекция.Позиция = 0
  185.             Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
  186.         End If
  187.     End Sub
  188.  
  189.     Private Sub btnСохранить_Click(sender As Object, e As EventArgs) Handles btnСохранить.Click, СохранитьToolStripMenuItem.Click
  190.         If Коллекция.Песни(Коллекция.Позиция).ЧитатьИзФормы(Me) Then
  191.             Коллекция.Сохранить()
  192.         End If
  193.     End Sub
  194.  
  195.     Private Sub btnЗагрузить_Click(sender As Object, e As EventArgs) Handles btnЗагрузить.Click, ЗагрузитьToolStripMenuItem.Click
  196.         If Коллекция.Загрузить() Then
  197.             Коллекция.Позиция = 0
  198.             Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
  199.         End If
  200.     End Sub
  201.  
  202.     Private Sub btnВыход_Click(sender As Object, e As EventArgs) Handles btnВыход.Click
  203.         Close()
  204.     End Sub
  205.  
  206.     Private Sub btnПоследний_Click(sender As Object, e As EventArgs) Handles btnПоследний.Click
  207.         Коллекция.Позиция = Коллекция.Песни.Count - 1
  208.         Коллекция.Песни(Коллекция.Позиция).ПисатьВФорму(Me)
  209.     End Sub
  210. End Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement