' myTunes (v0.3) ' rrh@cs.aau.dk ' Form1: den primære form for myTunes Public Class Form1 Structure Sang Dim titel As String Dim spilletid As Integer End Structure Structure album Dim titel As String Dim kunstner As String Dim udgivelsesår As String Dim ihandel As Boolean Dim antal_sange As Integer Dim sange() As Sang End Structure ' Musikdatabasen implementeret som et array Dim albums(100) As album Dim antal_albums As Integer ' global tæller Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim alb As album ' Nulstil databasen antal_albums = 0 opdaterButton.Enabled = False ' Tesdata alb.titel = "Baz" alb.kunstner = "The FooBars" alb.udgivelsesår = 1970 alb.ihandel = True alb.antal_sange = 0 ReDim alb.sange(0) addAlbum(alb) ' Testdata alb.titel = "BASIC" alb.kunstner = "The Visuals" alb.udgivelsesår = 2005 alb.ihandel = True alb.antal_sange = 2 ReDim alb.sange(2) alb.sange(0).titel = "6.0" alb.sange(0).spilletid = 17 alb.sange(1).titel = "C#" alb.sange(1).spilletid = 87 addAlbum(alb) opdaterAlbumliste() End Sub ' tilføj et album til databasen Sub addAlbum(ByVal alb As album) If (antal_albums >= 100) Then MsgBox("Databasen er fuld!") Else albums(antal_albums) = alb antal_albums = antal_albums + 1 End If End Sub ' beregn samlet spilletid for alle sangene på et album Function samlet_spilletid(ByVal index As Integer) As Integer Dim i, sum As Integer sum = 0 For i = 0 To albums(index).antal_sange - 1 sum = sum + albums(index).sange(i).spilletid Next samlet_spilletid = sum End Function ' beregn gennemsnitslig spilletid for sangene på et album ' NOTE: undgå at dividere med 0 Function gns_spilletid(ByVal index As Integer) As Single If albums(index).antal_sange = 0 Then gns_spilletid = 0 Else gns_spilletid = samlet_spilletid(index) / albums(index).antal_sange End If End Function ' opdater visning af album Sub opdaterDisplay(ByVal index As Integer) titelBox.Text = albums(index).titel kunstnerBox.Text = albums(index).kunstner udgaarBox.Text = albums(index).udgivelsesår ihandelCheckbox.Checked = albums(index).ihandel opdaterSangeListe(index) opdaterButton.Enabled = False End Sub ' opdater databasen med de ændringer brugeren har foretaget Sub opdaterDatabase(ByVal index As Integer) albums(index).titel = titelBox.Text albums(index).kunstner = kunstnerBox.Text albums(index).udgivelsesår = udgaarBox.Text albums(index).ihandel = ihandelCheckbox.Checked opdaterSange(index) ' sange håndteres specielt End Sub ' sang databasen opdateres med ændringer Sub opdaterSange(ByVal index As Integer) Dim i As Integer For i = 0 To albums(index).antal_sange albums(index).sange(i).titel = sangebox.Items.Item(i) Next End Sub ' opdater visning af sang-listen Sub opdaterSangeListe(ByVal index As Integer) Dim i As Integer sangebox.Items.Clear() ' fjern gammelt display For i = 0 To albums(index).antal_sange sangebox.Items.Insert(i, albums(index).sange(i).titel) Next End Sub ' opdater visning af album-listen Sub opdaterAlbumliste() Dim i As Integer albumsBox.Items.Clear() ' fjern gammelt display For i = 0 To antal_albums - 1 albumsBox.Items.Insert(i, albums(i).titel) Next End Sub Private Sub albumsBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles albumsBox.SelectedIndexChanged opdaterDisplay(albumsBox.SelectedIndex) End Sub Private Sub titelBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles titelBox.TextChanged opdaterButton.Enabled = True End Sub Private Sub kunstnerBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles kunstnerBox.TextChanged opdaterButton.Enabled = True End Sub Private Sub udgaarBox_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles udgaarBox.TextChanged opdaterButton.Enabled = True End Sub Private Sub ihandelCheckbox_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ihandelCheckbox.CheckedChanged opdaterButton.Enabled = True End Sub Private Sub opdaterButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles opdaterButton.Click opdaterDatabase(albumsBox.SelectedIndex) opdaterButton.Enabled = False End Sub Private Sub sangebox_MouseDoubleClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles sangebox.MouseDoubleClick Dim sang As String sang = InputBox("Indtast ny titel", , sangebox.SelectedItem) sangebox.Items.Item(sangebox.SelectedIndex) = sang opdaterButton.Enabled = True End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim index As Integer index = albumsBox.SelectedIndex MsgBox("Samlet spilletid: " & Str(samlet_spilletid(index)) & vbCrLf & _ "Gennemsnitslig spilletid: " & Str(gns_spilletid(index)), , "Statistik") End Sub End Class