Доброй Всем ночи!
 
Не могу исправить код из книги, чтобы работал…
 
Или сам чего напортачил… Помогите разобраться!
 
Задание такое:
 
создать класс для манипуляции коллекцией книг.
 
класс BookStore должен использовать объекты Book для представления книг.
 
класс Book содержит свойства, моделирующие физический объект, который он представляет
 
(номер ISBN, название книги, количество страниц, цену и т.д.)
 
Каждая книга может иметь >=1 автора, поэтому свойство Authors - это коллекция, и реализуется
 
при помощи класса Authors.
 
 
схема такая:
 
класс BookStore - контейнер для класса Book, и предоставляет методы для добавления в и удаления из коллекции.
 
класс Book - контейнер для класса Authors
 
 
 
Public Class BookStore
 
    Private allBooks As New ArrayList()
 
 
    Public Function GetBookByISBN(ByVal ISBN As String) As Book 'в примере - без скобок: Book
 
        Dim i As Integer
 
        For i = 0 To allBooks.Count - 1
 
            If CType(allBooks(i), Book).ISBN = ISBN Then
 
                Return CType(allBooks(i), Book)
 
            End If
 
        Next
 
        Return Nothing
 
    End Function
 
 
    Public Function GetAutorBooks(ByVal AutorName As String) As Book() 'в примере - со скобками: Book()
 
        
 
    End Function
 
 
    Public Function AddBook(ByVal thisBook As Book) As Boolean
 
        allBooks.Add(thisBook)
 
    End Function
 
 
    Public Function RemoveBook(ByVal thisBook As Book) As Boolean
 
        allBooks.Remove(thisBook)
 
    End Function
 
 
    Public Class Book
 
        Private _Title As String
 
        Private _ISBN As String
 
        Private _Subtitle As String
 
        Private _Pages As Integer
 
        Private _Price As Decimal
 
        
 
        Public BookAuthors As New Authors()
 
 
        Public Property Title() As String
 
            Get
 
                Title = _Title
 
            End Get
 
            Set(ByVal value As String)
 
                _Title = value
 
            End Set
 
        End Property
 
 
        Public Overridable Property ISBN() As String
 
            Get
 
                ISBN = _ISBN
 
            End Get
 
            Set(ByVal value As String)
 
                _ISBN = value
 
            End Set
 
        End Property
 
 
        Public Property Subtitle() As String
 
            Get
 
                Subtitle = _Subtitle
 
            End Get
 
            Set(ByVal value As String)
 
                _Subtitle = value
 
            End Set
 
        End Property
 
 
        Public Property Pages() As Integer
 
            Get
 
                Pages = _Pages
 
            End Get
 
            Set(ByVal value As Integer)
 
                _Pages = value
 
            End Set
 
        End Property
 
 
        Public Property Price() As Decimal
 
            Get
 
                Price = _Price
 
            End Get
 
            Set(ByVal value As Decimal)
 
                _Price = value
 
            End Set
 
        End Property
 
 
        Public Class Authors
 
            Inherits ArrayList
 
        End Class
 
    End Class
 
End Class 
 
 
Тестирование класса...
 
добавил на форму ListView, в котором планируется вывод основных свойств объекта Book.
 
ДАЛЕЕ:
 
 
 
Imports BookStore.BookStore 'добавлено мной
 
 
Public Class Form1
 
 
 
    Dim bs As New BookStore()   'этой строки небыло в примере
 
    Dim aBook As New Book()	'перенес сюда из события Load формы
 
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
 
        bs = New BookStore() 'этой строки небыло в примере
 
        aBook = New Book()
 
        aBook.ISBN = "0123456780"
 
        aBook.Title = "Book Title 1"
 
        aBook.Price = CDec(10.99)
 
	'Books.AddBook(aBook) - в примере было так, но пришлось переписать так:
 
        bs.AddBook(aBook)
 
 
        bs = New BookStore() 'этой строки небыло в примере
 
        aBook = New Book()
 
        aBook.ISBN = "012345671"
 
        aBook.Title = "Book Title 2"
 
        aBook.Price = CDec(13.99)
 
        aBook.BookAuthors.Add("Book 2 - Author 1")
 
        aBook.BookAuthors.Add("Book 2 - Author 2")
 
        bs.AddBook(aBook)
 
 
        bs = New BookStore() 'этой строки небыло в примере
 
        aBook = New Book()
 
        aBook.ISBN = "012345672"
 
        aBook.Title = "Book Title 3"
 
        aBook.Price = CDec(23.29)
 
        aBook.BookAuthors.Add("Book 3 - Author 1")
 
        aBook.BookAuthors.Add("Book 3 - Author 2")
 
        aBook.BookAuthors.Add("Book 3 - Author 3")
 
        aBook.BookAuthors.Add("Book 3 - Author 4")
 
        bs.AddBook(aBook)
 
 
        ShowAllTitles()
 
 
    End Sub
 
 
    Sub ShowAllTitles()
 
	Dim aBook as New Bookstore.Book() ' эта строка удалена мною
 
	        
 
        Dim LItem As ListViewItem
 
        Dim au As Integer
 
 
        ListView1.Items.Clear()
 
 
        For Each aBook In bs.allBooks ‘в примере было: For Each aBook In Books
 
 
            LItem= New ListViewItem()
 
            LItem.Text = aBook.ISBN
 
            ListView1.Items.Add(LItem)
 
            LItem.SubItems.Add(aBook.Title)
 
            LItem.SubItems.Add(aBook.Price.ToString)
 
            For au = 0 To Math.Min(0, aBook.BookAuthors.Count - 1)
 
                LITEM.SubItems.Add(aBook.BookAuthors.Item(0).ToString) ‘добавил  .ToString
 
            Next
 
            For au = 1 To aBook.BookAuthors.Count - 1
 
                LItem = New ListViewItem()
 
                LItem.SubItems.Add("")
 
                LItem.SubItems.Add("")
 
                LItem.SubItems.Add(aBook.BookAuthors.Item(au).ToString) ‘добавил  .ToString
 
                ListView1.Items.Add(LItem)
 
            Next
 
        Next
 
    End Sub
 
 
End Class
 
 
 
 
В итоге…
 
В ListView выводится только ISBN последней книги…. И больше ничего…
 
До внесенных мною изменений – код не выполнялся…
Ответить
        |