Доброй Всем ночи!
Не могу исправить код из книги, чтобы работал…
Или сам чего напортачил… Помогите разобраться!
Задание такое:
создать класс для манипуляции коллекцией книг.
класс 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 последней книги…. И больше ничего…
До внесенных мною изменений – код не выполнялся…
Ответить
|