private void frmManutCidade_Load(object sender, EventArgs e) { FileStream arqCidades = new FileStream("arqCidades.cid", FileMode.OpenOrCreate); // Lê o arquivo de cidades arvoreCidades = new ArvoreDeBusca <Cidade>(); NoArvore <Cidade> raizTemp = arvoreCidades.Raiz; RegistroCidade regCidade = new RegistroCidade(); LeituraDaArvore(0, arqCidades.Length / Cidade.TAMANHO_DO_REGISTRO - 1, ref raizTemp, ref regCidade, ref arqCidades); // não deixa passar propriedade como ref arqCidades.Close(); lstCaminhos.HorizontalScrollbar = true; arvoreCidades.raiz = raizTemp; arvoreCidades.OndeExibir = pnlArvore; FileStream arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.OpenOrCreate); // Lê o arquivo de caminhos listaCaminhos = new ListaCaminhos(); RegistroCaminho regCaminho = new RegistroCaminho(); for (int i = 0; i < arqCaminhos.Length / Caminho.TAMANHO_DO_REGISTRO; i++) { Caminho novoCaminho = new Caminho(new Cidade("", 0D, 0D), new Cidade("", 0D, 0D), int.MaxValue); regCaminho.LerRegistro(arqCaminhos, i, ref novoCaminho); listaCaminhos.inserirEmOrdem(novoCaminho); lstCaminhos.Items.Add(novoCaminho.ToString()); } arqCaminhos.Close(); pnlArvore.Invalidate(); }
private void btnManutCidade_Click(object sender, EventArgs e) { frmManutCidade ManutCidade = new frmManutCidade(); // chama o formulário de manutenção de cidades ManutCidade.ShowDialog(this); grafoCaminhos = new GrafoCidades(null); cidades = new String[GrafoCidades.NUM_VERTICES]; cbxDestino.Items.Clear(); cbxOrigem.Items.Clear(); // Lê os arquivos novamente para atualizar as alterações FileStream arqCidades = new FileStream("arqCidades.cid", FileMode.OpenOrCreate); RegistroCidade regCidade = new RegistroCidade(); for (int i = 0; i < arqCidades.Length / Cidade.TAMANHO_DO_REGISTRO; i++) { Cidade novaCidade = new Cidade("", 0D, 0D); regCidade.LerRegistro(arqCidades, i, ref novaCidade); cidades[i] = novaCidade.ToString(); cbxDestino.Items.Add(novaCidade.ToString()); cbxOrigem.Items.Add(novaCidade.ToString()); grafoCaminhos.NovoVertice(novaCidade); } arqCidades.Close(); FileStream arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.OpenOrCreate); RegistroCaminho regCaminho = new RegistroCaminho(); for (int i = 0; i < arqCaminhos.Length / Caminho.TAMANHO_DO_REGISTRO; i++) { Caminho novoCaminho = new Caminho(new Cidade("", 0D, 0D), new Cidade("", 0D, 0D), int.MaxValue); regCaminho.LerRegistro(arqCaminhos, i, ref novoCaminho); int cid1 = IndiceDe(novoCaminho.Saida.ToString()); int cid2 = IndiceDe(novoCaminho.Destino.ToString()); if (cid1 > 0 && cid2 > 0) { grafoCaminhos.NovaAresta(cid1, cid2, novoCaminho.Distancia); } } arqCaminhos.Close(); panel1.Invalidate(); // atualiza o panel1 }
private void frmManutCidade_FormClosing(object sender, FormClosingEventArgs e) { FileStream arqCidades = new FileStream("arqCidades.cid", FileMode.Truncate); // Abre os arquivos para escrita e RegistroCidade regCidade = new RegistroCidade(); // apaga tudo que estivesse neles anteriormente GravarArquivoCidade(ref arqCidades, ref arvoreCidades.raiz, ref regCidade); // Percurso inordem da árvore e escrita arqCidades.Close(); FileStream arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.Truncate); RegistroCaminho regCaminho = new RegistroCaminho(); int indice = 0; listaCaminhos.IniciarPercursoSequencial(); while (listaCaminhos.PodePercorrer()) // Percorre a lista sequencialmente e salva as informações { regCaminho.GravarRegistro(arqCaminhos, indice, listaCaminhos.Atual.Info); indice++; } arqCaminhos.Close(); DialogResult = DialogResult.OK; }
private void frmBuscaCaminhos_Load(object sender, EventArgs e) { grafoCaminhos = new GrafoCidades(null); cidades = new String[GrafoCidades.NUM_VERTICES]; FileStream arqCidades = new FileStream("arqCidades.cid", FileMode.OpenOrCreate); // abre o arquivo, criando-o se não existir RegistroCidade regCidade = new RegistroCidade(); for (int i = 0; i < arqCidades.Length / Cidade.TAMANHO_DO_REGISTRO; i++) //Enquanto houver registros para ler, o faz { Cidade novaCidade = new Cidade("", 0D, 0D); regCidade.LerRegistro(arqCidades, i, ref novaCidade); // lê o registro e o armazena em novaCidade cidades[i] = novaCidade.ToString(); cbxDestino.Items.Add(novaCidade.ToString()); cbxOrigem.Items.Add(novaCidade.ToString()); grafoCaminhos.NovoVertice(novaCidade); } arqCidades.Close(); // fecha o arquivo de cidades FileStream arqCaminhos = new FileStream("arqCaminhos.cam", FileMode.OpenOrCreate); // abre o arquivo, criando-o se não existir RegistroCaminho regCaminho = new RegistroCaminho(); for (int i = 0; i < arqCaminhos.Length / Caminho.TAMANHO_DO_REGISTRO; i++) //Enquanto houver registros para ler, o faz { Caminho novoCaminho = new Caminho(new Cidade("", 0D, 0D), new Cidade("", 0D, 0D), int.MaxValue); regCaminho.LerRegistro(arqCaminhos, i, ref novoCaminho); // lê o registro e o armazena em novoCaminho int cid1 = IndiceDe(novoCaminho.Saida.ToString()); int cid2 = IndiceDe(novoCaminho.Destino.ToString()); if (cid1 > 0 && cid2 > 0) // se as duas cidades existirem { grafoCaminhos.NovaAresta(cid1, cid2, novoCaminho.Distancia); // cria uma novas aresta entre essa cidades } } arqCaminhos.Close(); //fecha o arquivo de caminhos panel1.Invalidate(); }
/// <summary> /// Lê o arquivo recebido por referência, realizando pesquisa binária para inserir em ordem na árvore /// </summary> /// <param name="inicio">Indíce de início</param> /// <param name="fim">Indíce de fim</param> /// <param name="atual">Nó atual da árvore</param> /// <param name="regCidade">Objeto para leitura dos registros</param> /// <param name="arqCidades">Arquivo a ser lido</param> private void LeituraDaArvore(long inicio, long fim, ref NoArvore <Cidade> atual, ref RegistroCidade regCidade, ref FileStream arqCidades) { if (inicio <= fim) { int meio = (int)(inicio + fim) / 2; Cidade umaCidade = new Cidade("", 0D, 0D); regCidade.LerRegistro(arqCidades, meio, ref umaCidade); atual = new NoArvore <Cidade>(umaCidade); LeituraDaArvore(inicio, meio - 1, ref atual.esquerdo, ref regCidade, ref arqCidades); LeituraDaArvore(meio + 1, fim, ref atual.direito, ref regCidade, ref arqCidades); txtCidade.Items.Add(atual.Info.ToString()); cbxPartida.Items.Add(atual.Info.ToString()); cbxDestino.Items.Add(atual.Info.ToString()); } }
private void GravarArquivoCidade(ref FileStream f, ref NoArvore <Cidade> atual, ref RegistroCidade registro) { if (atual != null) { GravarArquivoCidade(ref f, ref atual.esquerdo, ref registro); registro.GravarRegistro(f, posicao++, atual.Info); GravarArquivoCidade(ref f, ref atual.direito, ref registro); } }