Catalog · How the catalog works
SistemaNotasMusicais
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
Sistema de Notas Musicais
🎵 Objetivo
Sistema de gestão de escalas musicais com suporte completo para entrada e saída de dados em arquivos TXT. Este projeto implementa um desafio de processamento de dados musicais, permitindo catalogação, importação e exportação de escalas musicais com validação completa.
Desafio: Sistema de Notas Musicais | Entrada: TXT | Saída: TXT
Funcionalidades Principais
- 📊 Cadastro de Escalas Musicais - Registre novas escalas com notas e tonalidades
- 🎼 Gestão de Tonalidades - Catalogação de tonalidades musicais
- 🎹 Gestão de Notas - Controle de notas musicais disponíveis
- 📁 Importação de Dados - Leia escalas de arquivos TXT
- 💾 Exportação de Dados - Salve escalas em formato TXT
- 🔍 Consulta de Escalas - Visualize todas as escalas cadastradas
- ⚙️ Persistência de Configuração - Memorize preferências de layout das grids
🛠️ Tecnologias Utilizadas
| Tecnologia | Versão | Função |
|---|---|---|
| Delphi/Pascal | 10.2 | Linguagem de programação |
| FireDAC | - | Acesso a banco de dados com suporte multi-plataforma |
| SQL Server | 2014 | Persistência de dados de escalas e referências |
| VCL (Visual Component Library) | - | Framework de componentes visuais |
| Git | - | Controle de versão |
Bibliotecas Utilizadas
Winapi.*- APIs do WindowsSystem.*- Classes do sistema PascalVcl.*- Componentes visuais (Grids, Forms, Dialogs)Data.DB- Acesso a dadosFireDAC.*- Camada de acesso a banco de dadosSystem.IniFiles- Persistência de configurações
🚀 Como Executar
Pré-requisitos
- SQL Server configurado e acessível na rede
- Arquivo executável:
Project2.exe - Arquivo de configuração:
config.ini(deve estar na mesma pasta do.exe)
⚡ Passos Rápidos
1️⃣ Localize os arquivos na pasta de instalação
Na pasta onde está Project2.exe, você encontrará:
SistemaNotasMusicais/
????????? Project2.exe ??? Execut??vel do sistema
????????? config.ini ??? Arquivo de configura????o2️⃣ Edite o arquivo config.ini
Abra o arquivo config.ini com um editor de texto (Bloco de Notas, VS Code, etc.):
[BANCO]
Servidor=SEU_SERVIDOR\INSTANCIA
NomeBanco=NotasMusicais
AutenticacaoWindows=YesAltere os seguintes parâmetros:
| Parâmetro | Descrição | Exemplo |
|---|---|---|
| Servidor | Nome do servidor SQL + instância | localhost\SQLEXPRESS ou 192.168.1.100\SERVERCURSO |
| NomeBanco | Nome do banco de dados (pode manter padrão) | NotasMusicais |
| AutenticacaoWindows | Usar autenticação do Windows | Yes (para Windows) ou No (para SQL Server login) |
Exemplos de configuração:
# Opção 1: SQL Server Express Local
[BANCO]
Servidor=localhost\SQLEXPRESS
NomeBanco=NotasMusicais
AutenticacaoWindows=Yes
# Opção 2: SQL Server em outro computador
[BANCO]
Servidor=192.168.1.100\INSTANCIA
NomeBanco=NotasMusicais
AutenticacaoWindows=Yes
# Opção 3: SQL Server com autenticação de usuário/senha
[BANCO]
Servidor=SERVIDOR\INSTANCIA
NomeBanco=NotasMusicais
AutenticacaoWindows=No
Usuario= (Seu Usuario)
Senha= (sua senha)⚠️ Notas importantes:
- Certifique-se de que o SQL Server está ligado e acessível
- Salve o arquivo após editar
3️⃣ Execute o sistema
Após configurar, simplesmente clique duas vezes em Project2.exe:
Duplo-clique em Project2.exe
???
Aplica????o verifica config.ini
???
Conecta ao SQL Server
???
Cria banco e tabelas (se n??o existirem)
???
Sistema pronto para usar! ???⚠️ Observação:
- Caso não funcione do primeiro modo, baixe o programa, extraia tudo, abra com seu Delphi RAD em "Open Project"
- Na Pasta "DataModulo", vá em "uDmDados.pas"
- Selecione o "FDConexao", abra o "Object Inspector"
- Vá em "Params" e edite colocando as informações do seu SQL SERVER
- Apos esses passos é so usar apertar F9, que o sitema fará o resto
Na primeira execução:
- ✅ O banco de dados
NotasMusicaisserá criado automaticamente - ✅ As 4 tabelas serão criadas:
notas,tipoEscala,tonalidades,escalas - ✅ Dados iniciais serão inseridos (12 notas, 8 tipos de escalas)
4️⃣ Comece a usar o sistema
Quando a tela principal abrir:
- Cadastro → Notas - Visualize as 12 notas musicais criadas
- Cadastro → Tonalidades - Veja tonalidades musicais
- Cadastro → Tipo Escala - Veja 8 tipos de escalas pré-carregados
- Arquivos → Importar/Exportar - Importe escalas do arquivo TXT ou exporte as cadastradas
🏗️ Como Funciona a Inicialização Automática
Quando você abre Project2.exe, o sistema executa automaticamente dois procedimentos:
Procedimento 1: ConfigurarConexaoDinamicamente
O que acontece:
- 🔍 Busca o arquivo
config.inina pasta do executável - 📖 Lê as informações do servidor e banco de dados
- 🔌 Configura a conexão FireDAC automaticamente
Procedimento 2: ConfigurarBancoInicial
O que acontece:
- ✅ Cria o banco de dados
NotasMusicais(se não existir) - ✅ Cria 4 tabelas automaticamente
- ✅ Insere dados iniciais (notas e tipos de escalas)
- ⚠️ Se houver erro, mostra mensagem
📥 📤 Como Importar/Exportar Dados
Padrão de Arquivo TXT para Importação
O sistema utiliza um formato simples e estruturado baseado em delimitadores (|).
Formato da Linha
Nome | Tipo | Tonalidade | Notas | DescricaoEspecificação de Campos
| Campo | Tipo | Tamanho | Obrigatório | Descrição |
|---|---|---|---|---|
| Nome | String | 100 | ✅ Sim | Nome da escala musical (ex: "Escala Diatônica") |
| Tipo | String | 50 | ✅ Sim | Tipo de escala (ex: "Maior", "Menor Natural", "Pentatônica Maior") |
| Tonalidade | String | 50 | ✅ Sim | Tonalidade base (ex: "Dó Maior", "Lá Maior") |
| Notas | String | 255 | ✅ Sim | Notas separadas por vírgula (ex: "Dó, Ré, Mi, Fá, Sol, Lá, Si") |
| Descricao | String | 500 | ❌ Não | Descrição opcional da escala |
Exemplos de Arquivo Válido
Crie um arquivo chamado escalas.txt:
Escala Maior em Dó | Maior | Dó Maior | Dó, Ré, Mi, Fá, Sol, Lá, Si | Escala diatônica maior
Escala Menor em Lá | Menor Natural | Lá Maior | Lá, Si, Dó, Ré, Mi, Fá, Sol | Escala relativa menor
Pentatônica Maior em Sol | Pentatônica Maior | Sol Maior | Sol, Lá, Si, Ré, Mi | Sem 4ª e 7ª
Escala Blues em Mi | Blues | Mi Maior | Mi, Sol, Lá, Si, Ré, Mi | Com blue note✅ Validações Realizadas
O sistema valida cada linha durante a importação:
- Formato: Exatamente 5 campos separados por
| - Campos Obrigatórios: Nome, Tipo, Tonalidade e Notas não podem ser vazios
- Existência no Banco:
- Tipo deve existir na tabela
tipoEscala - Tonalidade deve existir na tabela
tonalidades - Cada nota deve existir na tabela
notas
- Tipo deve existir na tabela
- Duplicidade: Não permite duas escalas com mesmo nome e tonalidade
- Encoding: Arquivo deve estar em UTF-8
Processo de Importação Passo a Passo
- Acesse a Importação:
- Menu: Arquivos → Importar/Exportar
- Ou clique no botão "Importar" na tela principal
- Selecione o arquivo TXT:
- O sistema abre um diálogo de seleção de arquivos
- Escolha um arquivo com extensão
.txtno padrão especificado
- Visualize o preview:
- As linhas aparecem na grid com status: OK ou ERRO
- Coluna "Erro" mostra o motivo da falha (se houver)
- Revise os dados:
- Analise a coluna de status antes de salvar
- Se houver linhas com ERRO, corrija no arquivo TXT original
- Reimporte o arquivo corrigido
- Salve as escalas:
- Clique em "Salvar" para inserir no banco de dados
- Apenas linhas com status OK serão salvas
- Um relatório final mostrará: Salvos ✅ e Erros ❌
Processo de Exportação Passo a Passo
- Acesse a Exportação:
- Menu: Arquivos → Importar/Exportar
- Clique na aba "Consulta"
- Clique em "Exportar"
- Escolha o local e nome:
- Um diálogo de salvar arquivo aparece
- Nome sugerido:
EscalasMusicais_YYYYMMDD_HHmmss.txt - Selecione pasta de destino
- Confirmação:
- Arquivo é salvo em UTF-8
- Mensagem mostra quantidade de escalas exportadas
- Caminho completo do arquivo é exibido
- Arquivo Gerado:
- Contém todas as escalas cadastradas no banco
- Segue o mesmo padrão de importação
- Pode ser reimportado em outro banco sem problemas
📋 Exemplo de Fluxo Completo
Arquivo de entrada: escalas_entrada.txt
Escala Maior em Dó | Maior | Dó Maior | Dó, Ré, Mi, Fá, Sol, Lá, Si | Fundamental
Escala Menor Harmônica | Menor Harmônica | Lá Maior | Lá, Si, Dó, Ré, Mi, Fá, Sol# | Com 7ª aumentadaArquivo de saída após exportação: EscalasMusicais_20260512_173000.txt
Escala Maior em Dó | Maior | Dó Maior | Dó, Ré, Mi, Fá, Sol, Lá, Si | Fundamental
Escala Menor Harmônica | Menor Harmônica | Lá Maior | Lá, Si, Dó, Ré, Mi, Fá, Sol# | Com 7ª aumentada🏗️ Decisões Técnicas
1. Arquitetura e Padrão de Projeto
MVC Parcial com Separação de Responsabilidades
- Model: Classes em
Classes/(ex:cCadEscalaMusical.pas- TEscalas) - View: Componentes Delphi
.dfm(interfaces visuais) - Controller: Units
uArquivos.pas,uPrincipal.pas(lógica de negócio)
Justificativa: Facilita manutenção, testes e reutilização de código. A classe TEscalas encapsula toda a lógica de persistência.
2. Separação de Camadas
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? Apresenta????o (VCL Forms) ???
??? uPrincipal, uArquivos, etc ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? L??gica de Neg??cio (Classes) ???
??? TEscalas, TNota, TTonalidade ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? Acesso a Dados (FireDAC) ???
??? uDmDados (DataModule) ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
??? Banco de Dados ???
??? SQL Server ???
?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????3. Tratamento de Importação/Exportação
Formato de Arquivo: Delimitador Simples (|)
Vantagens:
- ✅ Compatível com Excel/LibreOffice
- ✅ Sem dependência de bibliotecas externas
- ✅ Encoding UTF-8 universal
Validação em Duas Fases
- Fase 1 - Formatação:
- Verifica 5 campos separados por
| - Detecta campos vazios obrigatórios
- Status: OK ou ERRO (formatação)
- Verifica 5 campos separados por
- Fase 2 - Negócio:
- Busca IDs no banco (Tipo, Tonalidade, Notas)
- Valida duplicidade de escalas
- Insere com transaction implícita
- Status: ERRO (validação) ou SALVO (sucesso)
Justificativa: Permite feedback claro ao usuário, possibilita correção de erros antes da persistência.
4. Armazenamento de Escalas
Estrutura de Dados - Tabela escalas
CREATE TABLE escalas (
escalaId INTEGER PRIMARY KEY AUTOINCREMENT,
nome VARCHAR(100) NOT NULL,
tonalidadeId INTEGER NOT NULL FOREIGN KEY,
tipoId INTEGER NOT NULL FOREIGN KEY,
listaNota VARCHAR(255) NOT NULL, -- IDs separadas por vírgula (ex: "1,3,5,7")
descricao VARCHAR(500),
FOREIGN KEY (tonalidadeId) REFERENCES tonalidades(tonalidadeId),
FOREIGN KEY (tipoId) REFERENCES tipoEscala(tipoEscalaId)
);Decisão: Armazenar notas como IDs delimitados por vírgula
Justificativa:
- ✅ Rápido: Evita JOINs complexos na consulta
- ✅ Flexível: Permite notas em qualquer ordem
- ✅ Simples: Fácil de parsear na importação
- ❌ Menos normalizado, mas aceitável para este contexto
5. Persistência de Configuração
Arquivo INI para Conexão de Banco
NomeArquivo: config.ini (mesma pasta do execut??vel)
Formato:
[BANCO]
Servidor=DC-TR-06-VM\SERVERCURSO
NomeBanco=NotasMusicais
AutenticacaoWindows=YesDecisão: Usar arquivo INI para configurações de conexão
Justificativa:
- ✅ Leve e rápido
- ✅ Não requer tabela adicional no banco
- ✅ Fácil debug (legível)
- ✅ Permite alterar sem compilar
6. Gerenciamento de Conexão
Uso de DataModule Centralizado
// uDmDados.pas - Singleton pattern
dmDados.FDConexao // Conexão única reutilizadaVantagens:
- ✅ Evita múltiplas conexões ao banco
- ✅ Compartilhamento seguro de recursos
- ✅ Fácil manutenção da string de conexão
7. Inicialização Automática do Banco
Procedimentos executados no DataModuleCreate
procedure TdmDados.DataModuleCreate(Sender: TObject);
begin
ConfigurarConexaoDinamicamente; // 1º: Lê config.ini
ConfigurarBancoInicial; // 2º: Cria banco e tabelas
end;Decisão: Automatizar criação de banco e tabelas
Justificativa:
- ✅ Primeira execução não requer setup manual
- ✅ Escalável para múltiplos ambientes
- ✅ Sem dependência de scripts SQL externo
- ✅ Melhor experiência do usuário
8. Tratamento de Erros
Validação Granular com Feedback Detalhado
// Cada validação retorna mensagem específica
msgErro := 'Nota "Dó#" não encontrada no banco';
// Grid mostra status individual
cdsImport.FieldByName('Status').AsString := 'ERRO';
cdsImport.FieldByName('Erro').AsString := msgErro;
// Relatório final consolidado
ShowMessage('Salvos: 8 | Erros: 2');Vantagem: Usuário sabe exatamente o que falhou.
📁 Estrutura de Diretórios
SistemaNotasMusicais/
????????? Project2.exe # Execut??vel (abrir para usar)
????????? Project2.dproj # Projeto Delphi (apenas para desenvolvimento)
????????? config.ini # Configura????es de conex??o (EDITAR PARA SEU AMBIENTE)
????????? README.md # Este arquivo
???
????????? uPrincipal.pas / .dfm # Tela principal
????????? uArquivos.pas / .dfm # Gest??o de import/export
????????? TelaHeranca.pas / .dfm # Base para formul??rios
???
????????? Classes/ # Camada de neg??cio
??? ????????? cCadEscalaMusical.pas # Classe TEscalas (CRUD escalas)
??? ????????? cCadNotas.pas # Classe TNota
??? ????????? cCadTonalidades.pas # Classe TTonalidade
??? ????????? cCadTipoEscala.pas # Classe TTipoEscala
??? ????????? cFuncao.pas # Fun????es utilit??rias
??? ????????? uEnum.pas # Enumera????es
???
????????? DataModule/ # Camada de acesso a dados
??? ????????? uDmDados.pas # Conex??o FireDAC + inicializa????o
??? ????????? uDmDados.dfm # Defini????es do DataModule
???
????????? Cadastro/ # Formul??rios de cadastro
??? ????????? uCadNotas.pas / .dfm
??? ????????? uCadTonalidades.pas / .dfm
??? ????????? uCadEscalaMusical.pas / .dfm
??? ????????? uCadTipoEscala.pas / .dfm
???
????????? Win32/ # Arquivos compilados
????????? Img/ # Imagens e recursos🔄 Fluxo de Dados
Inicialização da Aplicação (Automática)
Usu??rio clica em Project2.exe
???
Aplica????o verifica config.ini
???
ConfigurarConexaoDinamicamente()
?????? L?? arquivo config.ini
?????? Configura par??metros de conex??o
???
ConfigurarBancoInicial()
?????? Cria banco NotasMusicais (se n??o existir)
?????? Cria 4 tabelas
?????? Insere dados iniciais
???
Sistema Pronto para Usar! ???Importação
Usu??rio seleciona arquivo .txt
???
LerArquivoTXT()
?????? Parse: 5 campos, valida????o b??sica
?????? Carrega grid com Status OK/ERRO
???
Usu??rio revisa e clica "Salvar"
???
Para cada linha com Status OK:
?????? ValidarESalvarLinha()
?????? Busca IDs (Tipo, Tonalidade, Notas)
?????? Verifica duplicidade
?????? TEscalas.Inserir() ??? Banco
???
Relat??rio final: Salvos ??? | Erros ???Exportação
Usu??rio clica "Exportar"
???
qryArquivos.Open() ??? L?? todas as escalas
???
Para cada escala:
?????? ObterNomesNotas() ??? Converte IDs em nomes
?????? Formata: Nome | Tipo | Tonalidade | Notas | Descri????o
???
Salva em UTF-8
???
Mensagem: Confirma????o + caminho do arquivo🐛 Tratamento de Exceções Conhecidas
| Situação | Tratamento | Resultado |
|---|---|---|
| config.ini não encontrado | Cria com valores padrão | Tenta conectar em localhost\SQLEXPRESS |
| Servidor SQL indisponível | Exception no DataModuleCreate | Mostra mensagem de erro |
| Arquivo vazio | Validação na importação | Mensagem "Arquivo vazio!" |
| Tipo não existente | Validação de negócio | Status ERRO + motivo |
| Nota inválida | Query sem retorno | Status ERRO + nome da nota |
| Duplicidade de escala | COUNT(*) no banco | Status ERRO + mensagem clara |
| Encoding diferente | Carregamento UTF-8 | Caracteres corrompidos (avisar usuário) |
| Campo obrigatório vazio | Trim() + validação | Status ERRO no grid |
📝 Modelo de Dados Conceitual
????????????????????????????????????????????????
??? NOTAS ???
????????????????????????????????????????????????
??? notasId (PK) ???
??? nome ??? (ex: "D??", "R??", "Mi")
????????????????????????????????????????????????
???
??? (listaNota: "1,3,5")
???
????????????????????????????????????????????????????????????????????????
??? ESCALAS ???
????????????????????????????????????????????????????????????????????????
??? escalaId (PK) ???
??? nome ???
??? listaNota (FK) ??? ??? IDs de notas separadas
??? tonalidadeId (FK) ???
??? tipoId (FK) ???
??? descricao ???
????????????????????????????????????????????????????????????????????????
??? ???
??? ??????????????????????????????????????????????????????
??? ???
???????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????
??? TONALIDADES ??? ??? TIPOESCALA ???
???????????????????????????????????????????????????????????? ????????????????????????????????????????????????????????????
??? tonalidadeId (PK)??? ??? tipoEscalaId (PK)???
??? notaId (FK) ??? ??? nome ???
??? nome ??? ????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????Última atualização: 12/05/2026
Versão: 1.2
Autor: viniciente

