Решите следующую задачу
Создайте проект для отслеживания продаж билетов на концерты вашего клуба. Цены на билеты зависят от места размещения. Используйте массив для хранения цены каждого типа мест.
Не позволяйте пользователю получать исключение для индекса вне диапазона.
Ваша программа должна рассчитать общее количество проданных билетов на каждую секцию для каждого члена клуба (не менее 10 членов). Имя члена клуба и количество проданных билетов для каждой секции должны быть в текстовом файле (используйте порядок, как показано в таблице ниже.
Если участник не продал никаких билетов на этот раздел, используйте 0 в качестве записи), программа
следует прочитать этот текстовый файл, а затем создать массив с информацией (используйте метод Split).
Программа должна создать двумерный массив результатов (исходный массив плюс общее количество проданных билетов и общий доход для каждого участника (еще 2 столбца) Отображение расписания цен на билеты. Отображение конечного массива в виде списка. В последней строке должны быть подведены итоги.
Используйте запрос LINQ (должен иметь опцию Infer вверху), чтобы найти участников с пятью лучшими продажами, отображающими это в сводной форме
Используйте хорошие методы программирования: например, соответствующий заставочный экран, окно "о программе" и меню. Убедитесь, что вы используете комментарии по всему коду
Тип сидения цена за одно место
Оркестр 40,00
Мезонин 27.50
Вообще Я 15.00
Балкон 10.00
Что я уже пробовал:
Я пробую следующий код, но вопрос говорит о том, чтобы получить массив через текстовый файл, а также запрос LINQ. Если вы прочтете вопрос, вы его получите.
Public Class MainForm Friend PriceDecimal() As Decimal = {40D, 27.5D, 15D, 10D} Friend SectionString() As String = {"Orchestra", "Mezzanine", "General", "Balcony"} Friend NumberInteger As Integer Friend TotalTicketsInteger(3) As Integer Private Sub AboutToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AboutToolStripMenuItem.Click ' Display AboutBox. AboutBox1.ShowDialog() End Sub Private Sub ExitToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ExitToolStripMenuItem.Click ' Close Main Form. Me.Close() End Sub Private Sub ClearToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ClearToolStripMenuItem.Click ' Clear Main Form for next sale. NumberTextBox.Clear() 'Here Purchase Info control is changed from text box to label PurchaseInfoLabel.Text = "" AmountDueTextBox.Clear() With SelectionListBox .SelectedIndex = -1 .Focus() End With End Sub Private Sub DisplayPricesToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DisplayPricesToolStripMenuItem.Click ' Display Price Schedule. ListBox in Price Schedule Form will display section and price. For i = 0 To 3 PriceScheduleForm.PriceScheduleListBox.Items.Add(SectionString(i) & " " & PriceDecimal(i).ToString("C")) Next PriceScheduleForm.ShowDialog() End Sub Private Sub PrintSummaryToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintSummaryToolStripMenuItem.Click ' Begin process for print preview of summary. PrintPreviewDialog1.Document = PrintDocument1 PrintPreviewDialog1.ShowDialog() End Sub Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage ' Handle printing and print preview when printing summary. Dim PrintFont As New Font("Arial", 12) Dim LineHeightSingle As Single = PrintFont.GetHeight + 2 Dim HorizontalPrintLocationSingle As Single = 250 Dim VerticalPrintLocationSingle As Single = e.MarginBounds.Top Dim ColumnEndSingle As Single Dim ColumnXSingle As Single Dim FontSizeF As New SizeF Dim FormattedOutputString As String Dim SalesAmountDecimal(3) As Decimal Dim TotalSalesDecimal As Decimal ' Print page heading. Using HeadingFont As New Font("Arial", 16, FontStyle.Bold) e.Graphics.DrawString("Summary of Ticket Sales", HeadingFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) ' Blank line between heading and data. VerticalPrintLocationSingle += LineHeightSingle * 2 End Using ' Print column headings. e.Graphics.DrawString("Section", PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) HorizontalPrintLocationSingle += 100 e.Graphics.DrawString("# Tickets", PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) HorizontalPrintLocationSingle += 100 e.Graphics.DrawString("Ticket Price", PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) HorizontalPrintLocationSingle += 100 e.Graphics.DrawString("Sales Amount", PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) HorizontalPrintLocationSingle += 100 VerticalPrintLocationSingle += LineHeightSingle ' Print data. For IndexInteger = 0 To 3 HorizontalPrintLocationSingle = 250 ' Section name will be printed in first column e.Graphics.DrawString(Me.SelectionListBox.Items(IndexInteger).ToString, PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) HorizontalPrintLocationSingle += 100 ' Each section's # of tickets sold will be right-aligned in 2nd column. ' Set ending position for right-aligned column. ColumnEndSingle = 400 ' Format the number. FormattedOutputString = TotalTicketsInteger(IndexInteger).ToString ' Calculate the X position of the amount. ' Measure string in this font. FontSizeF = e.Graphics.MeasureString(FormattedOutputString, PrintFont) ' Subtract width of string from the column position. ColumnXSingle = ColumnEndSingle - FontSizeF.Width e.Graphics.DrawString(FormattedOutputString, PrintFont, Brushes.Black, ColumnXSingle, VerticalPrintLocationSingle) HorizontalPrintLocationSingle += 100 e.Graphics.DrawString(FormatCurrency(PriceDecimal(IndexInteger), 2), PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) HorizontalPrintLocationSingle += 100 SalesAmountDecimal(IndexInteger) = TotalTicketsInteger(IndexInteger) * PriceDecimal(IndexInteger) TotalSalesDecimal += SalesAmountDecimal(IndexInteger) e.Graphics.DrawString(FormatCurrency(SalesAmountDecimal(IndexInteger), 2), PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) VerticalPrintLocationSingle += LineHeightSingle Next HorizontalPrintLocationSingle = 500 VerticalPrintLocationSingle += LineHeightSingle * 2 e.Graphics.DrawString("Total Sales: " & FormatCurrency(TotalSalesDecimal, 2), PrintFont, Brushes.Black, HorizontalPrintLocationSingle, VerticalPrintLocationSingle) End Sub Private Sub PurchaseTicketsToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PurchaseTicketsToolStripMenuItem.Click Dim SelectionString As String Dim SelectedPriceDecimal As Decimal ' Add number of tickets in current sale to total tickets sold for selected seating section. Try ' Convert number of tickets purchased to numeric. NumberInteger = Integer.Parse(NumberTextBox.Text) Try SelectionString = SelectionListBox.SelectedItem SelectedPriceDecimal = PriceDecimal(SelectionListBox.Items.IndexOf(SelectionString)) TotalTicketsInteger(SelectionListBox.Items.IndexOf(SelectionString)) += NumberInteger PurchaseInfoLabel.Text = "Purchased " & NumberInteger & " ticket(s) at " & FormatCurrency(SelectedPriceDecimal, 2) & " per ticket" AmountDueTextBox.Text = FormatCurrency((NumberInteger * SelectedPriceDecimal), 2) Catch SectionException As FormatException MessageBox.Show("You must first select a seating section.", "Missing Data", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) SelectionListBox.Focus() End Try Catch NumberException As FormatException MessageBox.Show("Enter desired number of tickets.", "Missing Data", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) With NumberTextBox .Focus() .SelectAll() End With End Try End Sub Private Sub frmTicketSales_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load For i = 0 To 3 SelectionListBox.Items.Add(SectionString(i)) Next End Sub End Class