private void DataGridViewArtistas_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex == -1)
            {
                return;
            }

            if (e.ColumnIndex == DataGridViewArtistas.Columns["Editar"].Index)
            {
                if (IsFormOpen("ArtistaForm"))
                {
                    MessageBox.Show("Não é possível abrir outro formulário do mesmo tipo", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    new ArtistaForm(e.RowIndex).Show();
                }
            }
            else if (e.ColumnIndex == DataGridViewArtistas.Columns["Remover"].Index)
            {
                if (MessageBox.Show("Tem certeza que deseja remover este artista? Todos as músicas e álbuns que contém este artista também serão excluídos.", "Aviso!", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    // Remove as músicas que contém o artista a ser removido para evitar problemas
                    General.Cancao.RemoverArtista(General.Artistas[e.RowIndex].Codigo);

                    // Remove os álbuns que contém o artista a ser removido para evitar problemas
                    General.Album.RemoverArtista(General.Artistas[e.RowIndex].Codigo);

                    // Remove o email do empresário da tabela hash
                    HashTable.Remove(General.Artistas[e.RowIndex].EmailEmpresarioTabelaHash);

                    // Remove o artista
                    General.Artista.RemoveAt(e.RowIndex);

                    UpdateRows(DataGrid.Albuns);
                    UpdateRows(DataGrid.Musicas);
                    UpdateRows(DataGrid.Artistas);
                }
            }
        }
Ejemplo n.º 2
0
        private void Salvar_Click(object sender, EventArgs e)
        {
            string erro = "";

            int codigo = 0;

            if (Codigo.Text != "" && (!int.TryParse(Codigo.Text, out codigo) || codigo <= 0))
            {
                erro += "- O código precisa ser um número maior que zero\n";
            }

            if (NomeVerdadeiro.Text == "" || NomeArtistico.Text == "" || DataAniversario.Text == "" || (BandaSN.Checked && Banda.Text == "") || Email.Text == "" || Telefone.Text == "" || NomeEmpresario.Text == "" || EmailEmpresario.Text == "" || TipoTrabalho.SelectedIndex == -1 || NAlbunsLancados.Text == "" || NComposicoes.Text == "")
            {
                erro += "- Todos os campos precisam ser prenchidos com excessão do código\n";
            }

            if (!DateTime.TryParse(DataAniversario.Text, out DateTime aniversario))
            {
                erro += "- O campo Data de Aniversário não está em um formato válido, utilize o formato dia/mês/ano\n";
            }

            if (!int.TryParse(NAlbunsLancados.Text, out int nAlbunsLancados))
            {
                erro += "- O número de álbuns lançados precisa ser um número\n";
            }

            if (!int.TryParse(NComposicoes.Text, out int nComposicoes))
            {
                erro += "- O número de composições precisa ser um número\n";
            }

            if (!decimal.TryParse(CacheMinimo.Text, out decimal cacheMinimo))
            {
                erro += "- O campo cache mínimo precisa ser um número\n";
            }

            if (Index == -1 && BinarySearch.BinarySearchDisplay(Array.ConvertAll(General.Artistas, a => a.Codigo).Where(a => a > 0).ToArray(), codigo) != -1)
            {
                erro += "- Este código já está sendo utilizado\n";
            }

            if (!ValidateMail(Email.Text))
            {
                erro += "- Formato de e-mail do artista inválido, tente o formato [email protected]\n";
            }

            if (!ValidateMail(EmailEmpresario.Text))
            {
                erro += "- Formato de e-mail do empresário inválido, tente o formato [email protected]\n";
            }

            if (erro != "")
            {
                MessageBox.Show(erro, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            General.Artista.TipoTrabalho tipoTrabalho = TipoTrabalho.SelectedIndex switch
            {
                0 => General.Artista.TipoTrabalho.Cantor,
                1 => General.Artista.TipoTrabalho.Compositor,
                2 => General.Artista.TipoTrabalho.Ambos,
                _ => throw new ArgumentOutOfRangeException(),
            };

            if (Codigo.Text == "")
            {
                codigo = General.ArtistasSize != 0 ? General.Artistas[General.ArtistasSize - 1].Codigo + 1 : 1;
            }

            if (Index == -1)
            {
                General.Artistas[General.ArtistasSize++] = new General.Artista()
                {
                    Codigo                    = codigo,
                    NomeVerdadeiro            = NomeVerdadeiro.Text,
                    NomeArtistico             = NomeArtistico.Text,
                    Aniversario               = aniversario,
                    BandaBool                 = BandaSN.Checked,
                    NomeBanda                 = Banda.Text,
                    Email                     = Email.Text,
                    Telefone                  = Telefone.Text,
                    NomeEmpresario            = NomeEmpresario.Text,
                    EmailEmpresario           = EmailEmpresario.Text,
                    EmailEmpresarioTabelaHash = HashTable.QuadraticHashInsert(EmailEmpresario.Text),
                    TipoDeTrabalho            = tipoTrabalho,
                    NumeroAlbunsLancados      = nAlbunsLancados,
                    NumeroComposicoes         = nComposicoes,
                    CacheMinimo               = cacheMinimo
                };

                // A função Array.ConvertAll pega o vetor da struct Album e retorna um vetor de inteiros com os códigos de cada uma
                // A função Where remove todos os índices de código 0 pois nestes casos o vetor não está preenchido e não deve ser ordenado
                MergeSort.Sort(General.Artistas, Array.ConvertAll(General.Artistas, a => a.Codigo).Where(a => a > 0).ToArray());
            }
            else
            {
                if (EmailEmpresario.Text != General.Artistas[Index].EmailEmpresario)
                {
                    HashTable.Edit(General.Artistas[Index].EmailEmpresarioTabelaHash, EmailEmpresario.Text);
                }

                General.Artistas[Index] = new General.Artista()
                {
                    Codigo                    = General.Artistas[Index].Codigo,
                    NomeVerdadeiro            = NomeVerdadeiro.Text,
                    NomeArtistico             = NomeArtistico.Text,
                    Aniversario               = aniversario,
                    BandaBool                 = BandaSN.Checked,
                    NomeBanda                 = Banda.Text,
                    Email                     = Email.Text,
                    Telefone                  = Telefone.Text,
                    NomeEmpresario            = NomeEmpresario.Text,
                    EmailEmpresario           = EmailEmpresario.Text,
                    EmailEmpresarioTabelaHash = General.Artistas[Index].EmailEmpresarioTabelaHash,
                    TipoDeTrabalho            = tipoTrabalho,
                    NumeroAlbunsLancados      = nAlbunsLancados,
                    NumeroComposicoes         = nComposicoes,
                    CacheMinimo               = cacheMinimo
                };
            }

            Program.globalForm.UpdateRows(Main.DataGrid.Artistas);
            Close();
        }
        private void InserirDadosIniciais()
        {
            #region Artistas
            General.Artistas[0] = new General.Artista()
            {
                Codigo                    = 1,
                NomeVerdadeiro            = "Saul Hudson",
                NomeArtistico             = "Slash",
                Aniversario               = Convert.ToDateTime("23/07/1965"),
                BandaBool                 = true,
                NomeBanda                 = "Guns N'Roses",
                Email                     = "*****@*****.**",
                Telefone                  = "+5511987654321",
                NomeEmpresario            = "Empresário do Slash",
                EmailEmpresario           = "*****@*****.**",
                EmailEmpresarioTabelaHash = HashTable.QuadraticHashInsert("*****@*****.**"),
                TipoDeTrabalho            = General.Artista.TipoTrabalho.Compositor,
                NumeroAlbunsLancados      = 1,
                NumeroComposicoes         = 1,
                CacheMinimo               = 100000
            };
            General.ArtistasSize++;

            General.Artistas[1] = new General.Artista()
            {
                Codigo                    = 2,
                NomeVerdadeiro            = "Pedro Henrique Loureiro",
                NomeArtistico             = "Kiko Loureiro",
                Aniversario               = Convert.ToDateTime("16/06/1972"),
                BandaBool                 = true,
                NomeBanda                 = "Megadeth",
                Email                     = "*****@*****.**",
                Telefone                  = "+5511987654321",
                NomeEmpresario            = "Empresário do pedro",
                EmailEmpresario           = "*****@*****.**",
                EmailEmpresarioTabelaHash = HashTable.QuadraticHashInsert("*****@*****.**"),
                TipoDeTrabalho            = General.Artista.TipoTrabalho.Compositor,
                NumeroAlbunsLancados      = 2,
                NumeroComposicoes         = 2,
                CacheMinimo               = 100000
            };
            General.ArtistasSize++;

            General.Artistas[2] = new General.Artista()
            {
                Codigo                    = 3,
                NomeVerdadeiro            = "Adrian Frederick Smith",
                NomeArtistico             = "Adrian Smith",
                Aniversario               = Convert.ToDateTime("27/02/1957"),
                BandaBool                 = true,
                NomeBanda                 = "Iron Maiden",
                Email                     = "*****@*****.**",
                Telefone                  = "+5511987654321",
                NomeEmpresario            = "Empresário do adriano",
                EmailEmpresario           = "*****@*****.**",
                EmailEmpresarioTabelaHash = HashTable.QuadraticHashInsert("*****@*****.**"),
                TipoDeTrabalho            = General.Artista.TipoTrabalho.Compositor,
                NumeroAlbunsLancados      = 3,
                NumeroComposicoes         = 3,
                CacheMinimo               = 100000
            };
            General.ArtistasSize++;

            General.Artistas[3] = new General.Artista()
            {
                Codigo                    = 4,
                NomeVerdadeiro            = "Edward Louis Severson III",
                NomeArtistico             = "Eddie Vedder",
                Aniversario               = Convert.ToDateTime("23/12/1964"),
                BandaBool                 = true,
                NomeBanda                 = "Pearl Jam",
                Email                     = "*****@*****.**",
                Telefone                  = "+5511987654321",
                NomeEmpresario            = "Empresário do edvaldo",
                EmailEmpresario           = "*****@*****.**",
                EmailEmpresarioTabelaHash = HashTable.QuadraticHashInsert("*****@*****.**"),
                TipoDeTrabalho            = General.Artista.TipoTrabalho.Compositor,
                NumeroAlbunsLancados      = 4,
                NumeroComposicoes         = 4,
                CacheMinimo               = 100000
            };
            General.ArtistasSize++;

            UpdateRows(DataGrid.Artistas);
            #endregion

            #region Musicas
            #region CancoesSlash
            General.Cancoes[0] = new General.Cancao()
            {
                Codigo           = 1,
                Titulo           = "World on Fire",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 1,
                CodigoArtistaPrimeiraGravacao = 1
            };
            General.CancoesSize++;

            General.Cancoes[1] = new General.Cancao()
            {
                Codigo           = 2,
                Titulo           = "Shadow Life",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 1,
                CodigoArtistaPrimeiraGravacao = 1
            };
            General.CancoesSize++;

            General.Cancoes[2] = new General.Cancao()
            {
                Codigo           = 3,
                Titulo           = "Automatic Overdrive",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 1,
                CodigoArtistaPrimeiraGravacao = 1
            };
            General.CancoesSize++;

            General.Cancoes[3] = new General.Cancao()
            {
                Codigo           = 4,
                Titulo           = "Wicked Stone",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 1,
                CodigoArtistaPrimeiraGravacao = 1
            };
            General.CancoesSize++;

            General.Cancoes[4] = new General.Cancao()
            {
                Codigo           = 5,
                Titulo           = "30 Years to Life",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 1,
                CodigoArtistaPrimeiraGravacao = 1
            };
            General.CancoesSize++;
            #endregion

            #region CancoesKiko
            General.Cancoes[5] = new General.Cancao()
            {
                Codigo           = 6,
                Titulo           = "OVERFLOW",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 2,
                CodigoArtistaPrimeiraGravacao = 2
            };
            General.CancoesSize++;

            General.Cancoes[6] = new General.Cancao()
            {
                Codigo           = 7,
                Titulo           = "EDM (E-DEPENDENT MIND)",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 2,
                CodigoArtistaPrimeiraGravacao = 2
            };
            General.CancoesSize++;

            General.Cancoes[7] = new General.Cancao()
            {
                Codigo           = 8,
                Titulo           = "IMMINENT THREAT",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 2,
                CodigoArtistaPrimeiraGravacao = 2
            };
            General.CancoesSize++;

            General.Cancoes[8] = new General.Cancao()
            {
                Codigo           = 9,
                Titulo           = "LIQUID TIMES",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 2,
                CodigoArtistaPrimeiraGravacao = 2
            };
            General.CancoesSize++;

            General.Cancoes[9] = new General.Cancao()
            {
                Codigo           = 10,
                Titulo           = "SERTAO",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 2,
                CodigoArtistaPrimeiraGravacao = 2
            };
            General.CancoesSize++;
            #endregion

            #region CancoesAdrian
            General.Cancoes[10] = new General.Cancao()
            {
                Codigo           = 11,
                Titulo           = "Somewhere in Time",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 3,
                CodigoArtistaPrimeiraGravacao = 3
            };
            General.CancoesSize++;

            General.Cancoes[11] = new General.Cancao()
            {
                Codigo           = 12,
                Titulo           = "The Old Woman",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 3,
                CodigoArtistaPrimeiraGravacao = 3
            };
            General.CancoesSize++;

            General.Cancoes[12] = new General.Cancao()
            {
                Codigo           = 13,
                Titulo           = "The Journey Back in Time",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 3,
                CodigoArtistaPrimeiraGravacao = 3
            };
            General.CancoesSize++;

            General.Cancoes[13] = new General.Cancao()
            {
                Codigo           = 14,
                Titulo           = "A Day Together",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 3,
                CodigoArtistaPrimeiraGravacao = 3
            };
            General.CancoesSize++;

            General.Cancoes[14] = new General.Cancao()
            {
                Codigo           = 15,
                Titulo           = "Rhapsody on a Theme of Paganini",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 3,
                CodigoArtistaPrimeiraGravacao = 3
            };
            General.CancoesSize++;
            #endregion

            #region CancoesEddie
            General.Cancoes[15] = new General.Cancao()
            {
                Codigo           = 16,
                Titulo           = "Setting Forth",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 4,
                CodigoArtistaPrimeiraGravacao = 4
            };
            General.CancoesSize++;

            General.Cancoes[16] = new General.Cancao()
            {
                Codigo           = 17,
                Titulo           = "No Ceiling",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 4,
                CodigoArtistaPrimeiraGravacao = 4
            };
            General.CancoesSize++;

            General.Cancoes[17] = new General.Cancao()
            {
                Codigo           = 18,
                Titulo           = "Far Behind",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 4,
                CodigoArtistaPrimeiraGravacao = 4
            };
            General.CancoesSize++;

            General.Cancoes[18] = new General.Cancao()
            {
                Codigo           = 19,
                Titulo           = "Rise",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 4,
                CodigoArtistaPrimeiraGravacao = 4
            };
            General.CancoesSize++;

            General.Cancoes[19] = new General.Cancao()
            {
                Codigo           = 20,
                Titulo           = "Long Nights",
                Letra            = "Letra",
                Melodia          = "Melodia",
                CodigoCompositor = 4,
                CodigoArtistaPrimeiraGravacao = 4
            };
            General.CancoesSize++;
            #endregion

            UpdateRows(DataGrid.Musicas);
            #endregion

            #region Albums
            General.Albums[0] = new General.Album()
            {
                Codigo         = 1,
                Titulo         = "World on Fire",
                CodigosMusicas = new int[5] {
                    1, 2, 3, 4, 5
                },
                DataLancamento        = Convert.ToDateTime("15/07/2014"),
                NumeroCopiasVendidas  = 10000,
                ArtistasParticipantes = new int[1] {
                    1
                }
            };
            General.AlbumsSize++;

            General.Albums[1] = new General.Album()
            {
                Codigo         = 2,
                Titulo         = "OPEN SOURCE",
                CodigosMusicas = new int[5] {
                    6, 7, 8, 9, 10
                },
                DataLancamento        = Convert.ToDateTime("10/07/2020"),
                NumeroCopiasVendidas  = 10000,
                ArtistasParticipantes = new int[1] {
                    2
                }
            };
            General.AlbumsSize++;

            General.Albums[2] = new General.Album()
            {
                Codigo         = 3,
                Titulo         = "Somewhere in Time",
                CodigosMusicas = new int[5] {
                    11, 12, 13, 14, 15
                },
                DataLancamento        = Convert.ToDateTime("29/09/1986"),
                NumeroCopiasVendidas  = 10000,
                ArtistasParticipantes = new int[1] {
                    3
                }
            };
            General.AlbumsSize++;

            General.Albums[3] = new General.Album()
            {
                Codigo         = 4,
                Titulo         = "Into the Wild",
                CodigosMusicas = new int[5] {
                    16, 17, 18, 19, 20
                },
                DataLancamento        = Convert.ToDateTime("18/09/2007"),
                NumeroCopiasVendidas  = 10000,
                ArtistasParticipantes = new int[1] {
                    4
                }
            };
            General.AlbumsSize++;

            UpdateRows(DataGrid.Albuns);
            #endregion
        }