Ir ao conteúdo
  • Cadastre-se

C Exercicio em C Cadastro de Estados e Municipios


WashingtonJunior

Posts recomendados

Ola, não estou conseguindo resolver uma tarefa que me foi passada e gostaria de pedir a ajuda de vocês.

 

Enunciado: Faça um sistema para cadastrar censo no Brasil. O sistema irá cadastrar Estado: Nome do estado, Unidade Federativa, até 3 municípios(nome, quantidade populacional). O sistema terá que realizar uma Pesquisa por Nome do Estado ou Unidade Federativa, caso encontre exiba: Nome do Estado, Unidade Federativa, os Municípios cadastrados nesse estado, quantidade total dos habitantes no Estado. O sistema também irá Pesquisar por Nome do Município. Caso Encontre exiba: Unidade Federativa, Nome do Estado, Nome do município, Quantidade de Pessoas nesse município. Devem ser cadastrado pelo menos 3 estados e devem ser usados procedimento e registro.

 

Problema: Meu problema é sobre as partes envolvendo o municipio, tanto na parte de exibição quanto na parte da pesquisa...Fiz o codigo utilizando vetores para cadastrar os estados e em cada estado tive que usar um novo vetor para cadastrar os 3 municipios de cada estado, e ate a parte dos cadastros ocorre tudo normalmente. porém na pesquisa pelo nome dos municipios ou unidade federativa não aparecem os respectivos municipios cadastrados naquele estado, nesse caso sempre aparece somente os ultimos municipios cadastrados...por exemplo digamos que eu cadastro: 1 - Estado Sao Paulo e municipio Campinas, 2 - RJ e Municipio Niteroi, 3 - Espirito Santo e municipio Linhares, e na parte da pesquisa eu escolho o estado numero 2 RJ, exibe o nome do estado RJ normalmente mas o municipio exibido é o cadastrado no numero 3 que nesse caso é linhares. Na parte da pesquisa a mesma coisa, os dados so são exibidos se o municipio pesquisado for o terceiro cadastrado.

 

Não sei porque isso acontece mas imagino que o erro é provavelmente em como usei o vetor de municipio, porém n faço ideia de como corrigir.

 

Abaixo o meu codigo:

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct Municipio{
	char nomemunicipio[15];
	int quantpopmun;
}Municipio;

typedef struct{
	char nomeestado[15];
	char unifederativa[15];
	Municipio mun[3];
}Censo;
Censo censo[3];

void Cadastro();
void Pesquisar();
void Pesquisarmunicipio();
void Menu();

int main(){
	Menu();
	system("pause");
}

void Cadastro(){
	printf("-----CADASTRO-----");
	for(int i=0;i<3;i++){//For Estado
		printf("\n\nDigite o %i Estado: ",i+1);
		fflush(stdin);
		gets(censo[i].nomeestado);
		printf("\nDigite a unidade federativa: ");
		fflush(stdin);
		gets(censo[i].unifederativa);
		for(int i=0;i<3;i++){//For municipio
			printf("\nDigite o nome do %i municipio: ",i+1);
			fflush(stdin);
			gets(censo[i].mun[i].nomemunicipio);
			printf("\nDigite a qtd populacional do municipio: ");
			scanf("%i",&censo[i].mun[i].quantpopmun);
		}//Fim for cadastro Municipio
	}//Fim for cadastro Estado
	printf("\n\nCADASTROS REALIZADOS COM SUCESSO!!\n");
}//Fim Cadastro

void Pesquisar(){
	char pesquisa[15];
	int achou, total=0;
	printf("-----PESQUISA ESTADO OU UNIDADE FEDERATIVA-----");
	printf("\nDIGITE O ESTADO OU UNIDADE FEDERATIVA QUE DESEJA PESQUISAR: ");
	fflush(stdin);
	gets(pesquisa);
	for(int i=0;i<3;i++){
		if((strcmp(pesquisa,censo[i].nomeestado)==0)||(strcmp(pesquisa,censo[i].unifederativa)==0)){
			printf("\nESTADO: %s",censo[i].nomeestado);
			printf("\nUNIDADE FEDERATIVA: %s",censo[i].unifederativa);
			for(int i=0;i<3;i++){
				printf("\nMUNICIPIOS: %s",censo[i].mun[i].nomemunicipio);
				total+=censo[i].mun[i].quantpopmun;
			}//Fim for municipio
			printf("\nTOTAL DE HABITANTES CADASTRADOS: %i",total);
		}//If else para pesquisa
	}//Fim For
		printf("\nACHOU?\n1 - SIM \n2 - NAO\n");
		scanf("%i",&achou);
		if(achou==1){
			printf("\nESTADO CADASTRADO COM SUCESSO!!!\n");
		}else{
			printf("\nESTADO NAO CADASTRADO!!!\n");
		}//Fim Else
}//Fim Pesquisar

void Pesquisarmunicipio(){
	char pesquisa[15];
	int achou;
	printf("-----PESQUISA MUNICIPIO-----");
	printf("\nDIGITE O MUNICIPIO QUE DESEJA PESQUISAR: ");
	fflush(stdin);
	gets(pesquisa);
	for(int i=0;i<3;i++){
		if(strcmp(pesquisa,censo[i].mun[i].nomemunicipio)==0){
			printf("\nUNIDADE FEDERATIVA: %s",censo[i].unifederativa);
			printf("\nESTADO: %s",censo[i].nomeestado);
			printf("\nMUNICIPIO: %s",censo[i].mun[i].nomemunicipio);
			printf("\nQUANTIDADE DE PESSOAS NO MUNICIPIO: %i",censo[i].mun[i].quantpopmun);
		}//If else para pesquisa
	}//Fim For
		printf("\nACHOU?\n1 - SIM \n2 - NAO\n");
		scanf("%i",&achou);
		if(achou==1){
			printf("\nESTADO CADASTRADO COM SUCESSO!!!\n");
		}else{
			printf("\nESTADO NAO CADASTRADO!!!\n");
		}//Fim Else
}

void Menu(){
	int sd=1;
	do{
	printf("-----SISTEMA CENSO BRASILEIRO-----");
	printf("\n\n1 - CADASTRO");
	printf("\n2 - PESQUISAR ESTADO OU UNIDADE FEDERATIVA");
	printf("\n3 - PESQUISAR MUNICIPIO");
	printf("\n0 - SAIR");
	printf("\nESCOLHA UMA OPCAO: ");
	scanf("%i",&sd);
	system("cls");
	switch(sd){
		case 1:
			Cadastro();
			system("pause");
			system("cls");
			break;
			
		case 2:
			Pesquisar();
			system("pause");
			system("cls");
			break;
			
		case 3:
			Pesquisarmunicipio();
			system("pause");
			system("cls");
			break;
			
		case 0:
			exit(0);
		
		default:
			printf("OPCAO INVALIDA\n");
			system("pause");
			system("cls");
			break;	
	}//Fim switch
	}while(sd!=0);//Fim Do While
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

typedef struct Municipio{
	char nomemunicipio[15];
	int quantpopmun;
}Municipio;

typedef struct{
	char nomeestado[15];
	char unifederativa[15];
	Municipio mun[3];
}Censo;
Censo censo[3];

void Cadastro();
void Pesquisar();
void Pesquisarmunicipio();

 

Escreva seu programa em torno dos dados. Sempre. E preste atenção ao modelo que está criando: ele deve refletir a realidade. Se ele ficar longe da realidade seu programa fica mais difícil conforme a distância. E impossível num instante.

 

Os municípios ficam dentro dos Estados, como no mundo real.

 

Não use variáveis globais. Numa empresa geralmente é proibido, numa escola geralmente perderá pontos, num hobby só vai ter mais problemas...

 

Não retorne void. Em geral é um erro ou um desperdício.

 

void Pesquisar()? Não. Nunca. Escreva 
 

    int pesquisar_estado     (char* estado, Censo* Censo);
    int pesquisar_municipio  (char* municipio, Censo* Censo);

 

14 horas atrás, NLDDHades disse:

Não sei porque isso acontece mas imagino que o erro é provavelmente em como usei o vetor de municipio, porém n faço ideia de como corrigir.

 

Falta um nível de estruturas

 

Veja algo diferente

typedef struct
{
	int		id;
	char	nomemunicipio[15];
	int		quantpopmun;

}	Municipio;

typedef struct 
{
	int		id;
	char	nomeestado[15];
	char	unifederativa[15];
}	UF;

typedef struct
{
	UF		uf[30];
}	Censo;

int pesquisar_estado(char* estado, Censo* Censo);
int pesquisar_municipio(char* municipio, Censo* Censo);

void Cadastro();
void Pesquisar();
void Pesquisarmunicipio();
void Menu();

int main(void)
{
	Censo pais;
	return 0;
}

 

adicionado 1 minuto depois

Não use menus e entrada e saida no meio do processamento. Só vai tornar sua vida mais difícil. Você não deve ler dados no meio da função de pesquisa. Os dados são o argumento.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!