Buscar

Relatório


Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 27 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Continue navegando


Prévia do material em texto

UNIVERSIDADE FEDERAL DE MINAS GERAIS
INSTITUTO DE CIÊNCIAS EXATAS
DISCIPLINA ALGORITOS E ESTRUTURA DE DADOS I
TRABALHO PRÁTICO FINAL
por
 Clarisse Simões Ribeiro
Aluna de Graduação do curso de Engenharia Elétrica
Belo Horizonte, 03 de julho de 2009
RESUMO
	O Trabalho Prático Final constitui a elaboração de um programa em C++ de uma Agenda, utilizando para isso os conceitos trabalhados durante o semestre nesta disciplina. O programa deveria conter pelo menos sete funcionalidades descritas na apresentação do problema, exibidas em um menu de opções que aparece quando o usuário o executa. Para escolha de uma opção, o usuário digita o número correspondente a ela e o programa executa o módulo correspondente. Ao terminar a execução, o programa volta para o menu. 
	
INTRODUÇÃO
	Através do desenvolvimento de um algoritmo e de um programa correspondente em C++, deveria ser feita uma agenda com funcionalidades específicas, sendo cada uma delas representada por um módulo. Este relatório apresenta detalhadamente o desenvolvimento do trabalho, descrevendo seu problema, as soluções encontradas e o processo de desenvolvimento do programa e do algoritmo correspondente, que vêm como anexos. 
 O Problema
Usando o conceito de estruturas de dados heterogêneas, construir um programa para
administrar uma agenda contendo dados sobre pessoas:
• nome,
• endereço (logradouro, numero, apartamento, bairro, cidade, etc.) ,
• telefone,
• data de aniversário,
• e-mail,
• e outros dados que você achar de interesse.
Esses dados deverão ser obrigatoriamente armazenados em uma variável composta
heterogênea com capacidade de armazenar pelo menos 100 pessoas.
Para administração da agenda o programa deverá ter as seguintes funcionalidades:
• Inserção de novos dados na agenda – esta função permite inserção de registros
completos de pessoas com todos os dados disponíveis.
• Atualização de dados – a partir do nome da pessoa o programa deverá pesquisar
na tabela de nomes e permitir que o usuário altere o próprio nome, ou qualquer
dos demais dados.
• Remoção de dados da agenda – neste caso a partir do nome pesquisado, o
programa deverá apagar todos os dados de uma determinada pessoa. E para não
ficar o registro vazio, o programa deverá deslocar todos os registros seguintes de
forma a ocupar a posição vazia.
• Imprimir a agenda – neste caso o programa deverá imprimir os dados de todas as
pessoas cadastradas na agenda.
• Salvar a agenda – salvar, em um arquivo, os dados cadastrados na agenda.
• Carregar a agenda – ler os dados salvos anteriormente em um arquivo e remontar
a agenda na estrutura de dados da memória.
• Ordenar a agenda por ordem alfabética de nomes – usando algoritmos de
ordenação o programa deverá trocar os registros de posição dentro da variável
composta de forma que eles fiquem em armazenados em ordem alfabética de
nome na variável composta.
• Outras funcionalidades poderão se implementadas a critério dos projetistas.
Para escolha da função o programa deverá exibir no inicio uma tela de opções de
funções numeradas ou identificadas por letra. O usuário então escolhe uma função
(pelo número, ou pela letra) e o programa executa o módulo correspondente. Ao terminar o módulo, o programa retorna ao menu. No menu deverá haver uma opção para terminar o programa – neste caso não esquecer de salvar a agenda atual.
2.1 Solução Adotada
Para resolver o problema proposto, o primeiro passo foi a construção de um algoritmo. Cada uma das funcionalidades do programa, incluindo o menu, pôde ser desenvolvida separadamente, mas utilizando os dados das que foram utilizadas previamente. Segue abaixo o algoritmo de cada parte do programa com suas respectivas explicações. 
2.1.2 Algoritmos
2.1.2.1 Menu
	Para a escolha das funcionalidades, o usuário precisa digitar um número que será armazenado na variável inteira x. Cada valor de x corresponde à execução de um módulo, sendo o valor 9 correspondente à impressão do menu. Assim, é estabelecido um valor de x que não corresponde a nenhum dos módulos (10, no caso) e o programa é executado enquanto x não possui esse valor. O algoritmo correspondente é:
Enquanto x != 10 faça
 {Módulo 1 – Escrever o menu}
se x = 9
 então escreva “Menu”
	 escreva “1.Insercao de novos dados na agenda”
	 escreva “2.Atualizacao de dados”
 	 escreva “3.Remocao de dados da agenda”
 	 escreva “4.Imprimir a agenda”
	 escreva “5.Salvar a agenda”
	 escreva “6.Carregar a agenda ”
	 escreva “7.Ordenar a agenda por ordem alfabetica de nomes”
	 escreva “8.Finalizar programa”
	 escreva “Digite o valor correspondente ao que voce quer fazer e tecle enter:”
 leia x
fim se
	Uma dificuldade encontrada na implementação do programa em C++ foi a utilização do comando cin juntamente com o comando gets. Após o uso de algum comando cin, o programa ignorava a execução do comando gets que viesse em seguida. Para resolver o problema, foram criadas variáveis temporárias em string (Temp e opcao) e foi utilizada a função atoi para convertê-las em números inteiros, armazenados nas variáveis numéricas. 
2.1.2.2 Inserção de novos dados na agenda
Para a inserção de novos contatos na agenda, primeiro precisou-se criar um novo tipo registro, cujo nome é RegFunc. Esse registro armazena os dados contatos como nome, telefone, endereço, etc, todos como strings:
Tipo RegFicha = registro
 nome, telefone, logradouro, apto, numero, CEP, bairro, cidade, estado, dia, mes, ano, email : literal
fim registro
Foi criada também uma subrotina de nome LeRegistro, que recebe por parâmetro a variável Pessoa e lê todos os dados de um respectivo contato. 
subrotina LeRegistro ( Pessoa )
	 {Declaração de parâmetro}
	 Declare Pessoa RegFicha
 {Leitura de dados}
	 escreva “Telefone:”
 	 leia Pessoa.telefone
	 escreva “Logradouro:”
 leia Pessoa.logradouro
	 escreva “Numero:”
 leia Pessoa.numero
	 escreva “Apto:”
 leia Pessoa.apto
	 escreva “CEP:”
 leia Pessoa.CEP
	 escreva “Bairro:”
 leia Pessoa.bairro
	 escreva “Cidade:”
 leia Pessoa.cidade
 escreva “Estado(sigla):”
 leia Pessoa.estado
 escreva “Bairro:”
 leia Pessoa.bairro
 escreva “Data de Aniversario(dd/mm/aa):”
 escreva “Dia:”
 leia Pessoa.di
 escreva “Mes:”
 leia Pessoa.mes
 escreva “Ano:”
 leia Pessoa.ano
 escreva “Email:”
 leia Pessoa.emai
fim subrotina 
	Com isso, o programa pede para a pessoa digitar o número de contatos que ela vai inserir e este valor fica armazenado em uma variável n. A variável composta que armazena os contatos foi chamada de Amigo[100], e é do tipo RegFicha. A variável que funciona como índice desta última é i. Utilizando a subrotina acima dentro de um comando de repetição que manda o índice i de Amigo variar de 0 até n, lê-se os dados dos contatos:
se x = 1
 então escreva “Inserção de novos dados na agenda”
	 escreva “Quantos contatos voce vai inserir?”
	 leia n
 para i ( 1 até i <= n passo 1 faça
	LeRegistro ( Amigo[i-1] )
 fim para
 x ( 9
fim se
Ao final da leitura, declara-se o valor de x como 9 para que o menu seja impresso novamente. Vale ressaltar que, no programa em C++, para que os strings de cada dado não ultrapassassem o valor máximo de caracteres declarados, foi realizado um teste que verifica quantos existem em cada um e, caso o valor esteja acima do limite, o programa pede o usuário para digitar novamente.
2.1.2.3 Atualização de dados
Para a atualização de contatos na agenda, foi elaborado um sistema de busca de através de comparação das strings armazenadas na variável Amigo[i].nome com o nome buscado, que é armazenado na string nomeBuscado. O programa então compara este último com os dados já existentes na memória e, caso o nome seja encontrado, ele utilizaa subrotina de inserção de contatos para que o usuário redigite os dados de quem buscou. Caso o nome não seja encontrado, são oferecidas as opções de realizar uma nova busca - que reinicia a execução do módulo - ou de voltar para o menu. 
 {Módulo 3 – Atualização de dados}
se x = 2
 escreva “"Digite o nome completo e sem acentuacao do contato a ser buscado e entao entre novamente com seus dados:”
	 leia nomeBuscado
	 opção ( 999
	 para i( 1 até i <= n passo 1 faça
		se nomeBuscado = Amigo[i].nome
		 então LeRegistro (Amigo[i])
			 opção ( 0
	 fim se
		se opção ( 999
		 então escreva “O contato não foi encontrado.”
			 opcao ( 0
 fim se
	 escreva “Deseja realizar uma nova busca? Digite 2 para SIM e 9 para NÃO:”
	 leia opção
	 se opção = 9
	 então x(9
	 fim se
	 se opção = 2
	 então x(2
	 fim se
	fim se
2.1.2.4 Remoção de dados da agenda
Assim como no caso da inserção de dados, foi criada uma rotina para remoção dos mesmos da agenda. Ela consiste, na verdade, em uma rotina de cópia. Dentro de um índice local j, o contato que será apagado tem seus dados na variável Amigo[i] substituídos pelos do próximo (Amigo[i+1]), e o contador do número de registros n tem seu valor diminuído de uma unidade. A subrotina de remoção RegDel tem como parâmetros duas variáveis do tipo RegFicha(Pessoa e ProxPessoa), e uma variável numérica que é o número máximo de contatos:
subrotina RegDel ( Pessoa, ProxPessoa, maxcontatos )
	 {Declaração de parâmetros}
	 Declare Pessoa RegFicha
	 Declare ProxPessoa RegFicha
	 Declare maxcontatos numérico
	 {Declaração de variáveis locais}
	 Declare j numérico
	 {Copiar os dados de um contato para o outro}
	 para j (0 até j<=maxcontatos passo 1 faça
 ProxPessoa.nome = Pessoa.nome 
 	 ProxPessoa.telefone = Pessoa.telefone
 	 ProxPessoa.logradouro = Pessoa.logradouro
 	 ProxPessoa.apto = Pessoa.apto, 
 		 ProxPessoa.numero =Pessoa.numero
 	 ProxPessoa.CEP = Pessoa.CEP
 ProxPessoa.bairro = Pessoa.bairro
 		 ProxPessoa.cidade = Pessoa.cidade
 	 ProxPessoa.estado = Pessoa.estado
 	 ProxPessoa.dia = Pessoa.dia
 	 	 ProxPessoa.mes = Pessoa.mes
 	 ProxPessoa.ano = Pessoa.ano
 	 ProxPessoa.email = Pessoa.email
	 fim para
fim subrotina 
O sistema de busca é o mesmo utilizado no item anterior. Após encontrar o contato, o programa pede o usuário para confirmar a sua exclusão e então executa a rotina acima. Ao fim, pergunta-se ao usuário se ele deseja excluir mais alguém ou voltar ao menu, e então é lido o valor de x. 
 se x = 3
 então escreva “Busca:”
 escreva “Digite o nome completo e sem acentuacao do contato a ser buscado:”
 leia nomeBuscado
	 para i ( 1 até i <=n 
		se nomeBuscado = Amigo[i].nome
		 	 escreva “Tem certeza que deseja remover o contato " nomeBuscado “ ? Digite 1 para SIM e 2 para NAO:"
			 leia opção
			 se opção = 1
			 RegDel (Amigo[i], Amigo[i+1], n)
				n = n – 1
 fim se
	 fim para
	 escreva "Deseja remover mais algum contato? Digite 3 para SIM e 9 para NAO:"
	 leia x
 fim se
2.1.2.4 Imprimir a agenda
A impressão da agenda é feita de uma forma muito simples: o programa imprime os dados do contato Amigo[i], com i variando de 1 até n (número máximo de contatos). 
se x = 4
 então 
	 para i ( 1 até i <=n passo 1 faça
 escreva “Nome:” Amigo[i].nome
 escreva “Telefone:” Amigo[i].telefone
 escreva “Logradouro:” Amigo[i].logradouro
 	 escreva “Numero:” Amigo[i].numero
 	 escreva “Apto:” Amigo[i].apto
 	 escreva “CEP:” Amigo[i].CEP
	 escreva “Bairro:” Amigo[i].bairro
	 escreva “Cidade:” Amigo[i].cidade
	 escreva “Estado(sigla):” Amigo[i].estado
	 escreva “Bairro:” Amigo[i].bairro
	 escreva “Data de Aniversario(dd/mm/aa):”
	 escreva “Dia:” Amigo[i].dia
	 escreva “Mes:” Amigo[i].mes
 	 escreva “Ano:” Amigo[i].ano
	 escreva “Email:” Amigo[i].email
	 fim para
	 escreva " Digite 9 para voltar ao menu:"
	 leia x
fim se
2.1.2.5 Salvar a agenda
Este módulo começa confirmando se o usuário deseja realmente salvar a agenda. Com a confirmação, são abertos três arquivos no formato txt: agenda.txt, memoria.txt e maxcontatos.txt. O primeiro armazena os dados no mesmo formato em que eles são impressos na tela durante a execução do item anterior. O segundo e o terceiro funcionam como a memória de armazenamento e leitura de dados para a execução do programa, sendo memoria.txt o arquivo que armazena as informações de cada contato e maxcontatos.txt um arquivo que armazena o valor da variável n, já que, no caso do programa precisar abrir um arquivo salvo, não haverá um valor previamente estabelecido durante aquela execução. Mais uma vez, utilizando o índice i para a variável Amigo[i], o programa escreve as respectivas informações em cada arquivo e avisa ao usuário que a operação foi concluída. Novamente, é pedido que ele digite o valor 9 para a variável x e o menu volta a ser impresso na tela.
se x = 5
 então 
	 escreva “Tem certeza que deseja salvar a agenda? Digite 1 para SIM e 2 para NÃO:” 
	leia opção
	se opção = 1
	 então abrir agenda.txt escrita
		 abrir memoria.txt escrita
		 abrir maxcontatos.txt escrita
		 para i ( 0 até i<= n passo 1 faça
 	 			 escreva “Nome:” agenda.Amigo[i].nome
	 			 escreva “Telefone:” agenda.Amigo[i].telefone
	 			 escreva “Logradouro:” agenda.Amigo[i].logradouro
	 			 escreva “Numero:” agenda.Amigo[i].numero
	 			 escreva “Apto:” agenda.Amigo[i].apto
	 			 escreva “CEP:” agenda.Amigo[i].CEP
	 			 escreva “Bairro:” agenda.Amigo[i].bairro
	 			 escreva “Cidade:” agenda. Amigo[i].cidade
	 			 escreva “Estado(sigla):” agenda.Amigo[i].estado
	 			 escreva “Bairro:” agenda.Amigo[i].bairro
				 escreva “Data de Aniversario(dd/mm/aa):”
				 escreva “Dia:” agenda. Amigo[i].dia
				 escreva “Mes:” agenda.Amigo[i].mes
				 escreva “Ano:” agenda.Amigo[i].ano
				 escreva “Email:” agenda.Amigo[i].email
			 	 escreva memoria.Amigo[i].nome
	 			 escreva memoria.Amigo[i].telefone
				 escreva memoria.Amigo[i].logradouro
				 escreva memoria.Amigo[i].numero
				 escreva memoria.Amigo[i].apto
				 escreva memoria.Amigo[i].CEP
				 escreva memoria.Amigo[i].bairro
				 escreva memoria. Amigo[i].cidade
				 escreva memoria.Amigo[i].estado
				 escreva memoria.Amigo[i].bairro
				 escreva memoria. Amigo[i].dia
				 escreva memoria.Amigo[i].mes
				 escreva memoria.Amigo[i].ano
				 escreva memoria.Amigo[i].email
				 escreva nmaximocontatos.n
 		 fim para 
 		 fechar agenda.txt
		 fechar memoria.txt
		 fechar maxcontatos.txt
 		 escreva "Sua agenda esta salva no arquivo agenda.txt , armazenado na mesma pasta que este programa. Voce pode fazer copias de seguranca caso deseje comecar uma nova agenda. “
	 fim se
 	 escreva ”Para continuar digite 9:”
 	 	 leia x
fim se
2.1.2.6 Carregar a agenda
Assim como o anterior, este módulo começa confirmando se o usuário deseja realmente executar esta operação. Com a confirmação, são abertos os arquivos maxcontatos.txt e memoria.txt, de onde são lidos, respectivamente, o valor da variável n, necessária para limitar a função para, e os dados de cada contato, que são lidos dentro da mesma. Para isso, novamentevaria-se o índice i de 1 até n e cada linha do texto armazenado no bloco de notas é transferida como um dado do contato. Ao terminar, o valor de x é definido como 9 e o menu é impresso na tela. 
se x = 6
 	 escreva “Tem certeza que deseja carregar a agenda? Digite 1 para SIM e 2 para NAO”
	 leia opcao
	 se opcao = 1
	 abrir maxcontatos.txt leitura
	 abrir memoria.txt leitura
	 n ( maxcontatos
	 para i ( 0 até i<=n passo 1 faça
		 leia memoria.Amigo[i].nome
		 leia memoria.Amigo[i].telefone
		 leia memoria.Amigo[i].logradouro
		 leia memoria.Amigo[i].numero
		 leia memoria.Amigo[i].apto
		 leia memoria.Amigo[i].CEP
		 leia memoria.Amigo[i].bairro
		 leia memoria.Amigo[i].cidade
		 leia memoria.Amigo[i].estado
		 leia memoria.Amigo[i].dia
		 leia memoria.Amigo[i].mes
		 leia memoria.Amigo[i].ano
		 leia memoria.Amigo[i].email
	 fim para
	 fim se
	x(9
	fim se
2.1.2.7 Colocar a agenda em ordem alfabética
Para colocar a agenda em ordem alfabética, o programa verifica e compara os nomes de todos os contatos, dois a dois. Caso o segundo nome seja posterior ao primeiro, os dados do primeiro são copiados para uma variável auxiliar Aux, do tipo RegFunc. Para isso, mais uma vez foi utilizada uma subrotina de nome RegCopy, que tem como parâmetros duas variáveis do tipo RegFicha(Pessoa e ProxPessoa). De forma semelhante a rotina RegDel, ela copia os dados de ProxPessoa para Pessoa. Após isso, os dados do segundo(Amigo[i+1]) contato são copiados para o primeiro(Amigo[i]) e os dados deste último, que estavam armazenados em Aux, são copiados, por sua vez, para Amigo[i+1]. Assim, eles “trocam de lugar”. 
subrotina RegCopy ( Pessoa, ProxPessoa)
	 {Declaração de parâmetros}
	 Declare Pessoa RegFicha
	 Declare ProxPessoa RegFicha
	 {Copiar os dados de um contato para o outro}
 ProxPessoa.nome = Pessoa.nome 
 	 ProxPessoa.telefone = Pessoa.telefone
 	 ProxPessoa.logradouro = Pessoa.logradouro
 	 ProxPessoa.apto = Pessoa.apto, 
 		 ProxPessoa.numero =Pessoa.numero
 	 ProxPessoa.CEP = Pessoa.CEP
 ProxPessoa.bairro = Pessoa.bairro
 		 ProxPessoa.cidade = Pessoa.cidade
 	 ProxPessoa.estado = Pessoa.estado
 	 ProxPessoa.dia = Pessoa.dia
 	 	 ProxPessoa.mes = Pessoa.mes
 	 ProxPessoa.ano = Pessoa.ano
 	 ProxPessoa.email = Pessoa.email
	 fim para
fim subrotina 
se x = 7
	 para i ( 0 até i < n passo 1 faça
		 se Amigo[i].nome > Amigo[i+1].nome
		 então RegCopy(Amigo[i], Aux)
 		 RegCopy(Amigo[i+1], Amigo[i])
 		 RegCopy(Aux, Amigo[i+1])
		 fim se
	 fim para
	 escreva “Sua agenda foi ordenada em alfabeticamente. Voce pode salva-la novamente caso deseje. Para continuar, digite 9.”
	 leia x
	fim se
2.1.2.7 Finalizar o programa
Antes de finalizar o programa, é oferecida ao usuário a opção de salvar a agenda. Neste caso, é utilizado o mesmo algoritmo do módulo já desenvolvido para isso. Depois, o valor de x é declarado como 10, o que faz a execução da impressão do menu e das outras funcionalidades parar de acontecer, como explicado em 2.1.2.1. 
se x =8
	 escreva “Deseja salvar sua agenda antes de sair? Digite 1 para SIM e 2 para NAO:”
	 leia opção
	 se opção = 1
	 então abrir agenda.txt escrita
		 abrir memoria.txt escrita
		 abrir maxcontatos.txt escrita
		 para i ( 0 até i<= n passo 1 faça
 	 	 	 escreva “Nome:” agenda.Amigo[i].nome
	 		 escreva “Telefone:” agenda.Amigo[i].telefone
		 	 escreva “Logradouro:” agenda.Amigo[i].logradouro
			 escreva “Numero:” agenda.Amigo[i].numero
		 	 escreva “Apto:” agenda.Amigo[i].apto
			 escreva “CEP:” agenda.Amigo[i].CEP
			 escreva “Bairro:” agenda.Amigo[i].bairro
			 escreva “Cidade:” agenda. Amigo[i].cidade
		 	 escreva “Estado(sigla):” agenda.Amigo[i].estado
			 escreva “Bairro:” agenda.Amigo[i].bairro
		 	 escreva “Data de Aniversario(dd/mm/aa):”
			 escreva “Dia:” agenda. Amigo[i].dia
			 escreva “Mes:” agenda.Amigo[i].mes
		 	 escreva “Ano:” agenda.Amigo[i].ano
			 escreva “Email:” agenda.Amigo[i].email
		 	 escreva memoria.Amigo[i].nome
		 	 escreva memoria.Amigo[i].telefone
	 		 escreva memoria.Amigo[i].logradouro
		 	 escreva memoria.Amigo[i].numero
			 escreva memoria.Amigo[i].apto
			 escreva memoria.Amigo[i].CEP
			 escreva memoria.Amigo[i].bairro
		 	 escreva memoria. Amigo[i].cidade
			 escreva memoria.Amigo[i].estado
			 escreva memoria.Amigo[i].bairro
			 escreva memoria. Amigo[i].dia
			 escreva memoria.Amigo[i].mes
			 escreva memoria.Amigo[i].ano
			 escreva memoria.Amigo[i].email
		 	 escreva nmaximocontatos.n
 		 fim para 
 		 fechar agenda.txt
		 fechar memoria.txt
		 fechar maxcontatos.txt
			 fim se
 x(10
	fim se
2.2 Conclusão
O trabalho de conclusão da matéria AEDS I representou um grande desafio. Utilizando as técnicas aprendidas durante o semestre, foi possível perceber a aplicabilidade do conhecimento adquirido. Apesar das dificuldades encontradas na elaboração, principalmente, do programa em C++, foi absolutamente satisfatório observar o resultado final, como mostra a figura abaixo:
Em anexos, se encontram o algoritmo completo e o código do programa Agenda em C++. 
2.3 Referência Bibliográficas
FARRER, Harry; BECKER, Christiano; FARIA, Eduardo; MATOS, Helton; SANTOS, Augusto; MAIA, Miriam. Algoritmos Estruturados. Belo Horizonte. Editora Santuário, 1999.
FRANÇA, Júnia. Manual para Normalização de Publicações Ténico-Científicas. Belo Horizonte. Editora UFMG, 2007.
ANEXOS
1 . Algoritmo do programa
Algoritmo
Tipo RegFicha = registro
nome, telefone, logradouro, apto, numero, CEP, bairro, cidade, estado, dia, mes, ano, email : literal
fim registro
subrotina LeRegistro ( Pessoa )
	 {Declaração de parâmetro}
	 Declare Pessoa RegFicha
	 {Leitura de dados}
	 escreva “Telefone:”
 leia Pessoa.telefone
	 escreva “Logradouro:”
 leia Pessoa.logradouro
	 escreva “Numero:”
 leia Pessoa.numero
	 escreva “Apto:”
 leia Pessoa.apto
	 escreva “CEP:”
 leia Pessoa.CEP
	 escreva “Bairro:”
 leia Pessoa.bairro
	 escreva “Cidade:”
 leia Pessoa.cidade
	 escreva “Estado(sigla):”
 leia Pessoa.estado
	 escreva “Bairro:”
 leia Pessoa.bairro
	 escreva “Data de Aniversario(dd/mm/aa):”
	 escreva “Dia:”
 leia Pessoa.dia
	 escreva “Mes:”
 leia Pessoa.mes
	 escreva “Ano:”
 leia Pessoa.ano
	 escreva “Email:”
 leia Pessoa.email
fim subrotina 
subrotina RegDel ( Pessoa, ProxPessoa, maxcontatos )
	 {Declaração de parâmetros}
	 Declare Pessoa RegFicha
	 Declare ProxPessoa RegFicha
	 Declare maxcontatos numérico
	 {Declaração de variáveis locais}
	 Declare j numérico
	 {Copiar os dados de um contato para o outro}
	 para j (0 até j<=maxcontatos passo 1 faça
 ProxPessoa.nome = Pessoa.nome 
 	 ProxPessoa.telefone = Pessoa.telefone
 	 ProxPessoa.logradouro = Pessoa.logradouro
 	 ProxPessoa.apto = Pessoa.apto, 
 		 ProxPessoa.numero =Pessoa.numero
 	 ProxPessoa.CEP = Pessoa.CEP
 ProxPessoa.bairro = Pessoa.bairro
 		 ProxPessoa.cidade = Pessoa.cidade
 	 ProxPessoa.estado = Pessoa.estado
 	 ProxPessoa.dia = Pessoa.dia
 	 	 ProxPessoa.mes = Pessoa.mes
 	 ProxPessoa.ano = Pessoa.ano
 	 ProxPessoa.email = Pessoa.email
	 fim para
fimsubrotina 
subrotina RegCopy ( Pessoa, ProxPessoa)
	 {Declaração de parâmetros}
	 Declare Pessoa RegFicha
	 Declare ProxPessoa RegFicha
	 {Copiar os dados de um contato para o outro}
 ProxPessoa.nome = Pessoa.nome 
 	 ProxPessoa.telefone = Pessoa.telefone
 	 ProxPessoa.logradouro = Pessoa.logradouro
 	 ProxPessoa.apto = Pessoa.apto, 
 		 ProxPessoa.numero =Pessoa.numero
 	 ProxPessoa.CEP = Pessoa.CEP
 ProxPessoa.bairro = Pessoa.bairro
 		 ProxPessoa.cidade = Pessoa.cidade
 	 ProxPessoa.estado = Pessoa.estado
 	 ProxPessoa.dia = Pessoa.dia
 	 	 ProxPessoa.mes = Pessoa.mes
 	 ProxPessoa.ano = Pessoa.ano
 	 ProxPessoa.email = Pessoa.email
	 fim para
fim subrotina 
 
{Declaração de variáveis}
Declare x, i, n, opção, maximocaracteres numérico
Declare Amigo[1:100] RegFicha
Declare Temp[1:20], nomeBuscado[1:30] literal
{Declaração de arquivos que serão lidos e escritos pelo programa}
Declare agenda, {arquivo que salva a impressão da agenda de forma semelhante à impressão do programa}
 memoria, {arquivo de memoria da agenda}
 maxcontatos, {arquivo que armazena o numero máximo de contatos da agenda}
 arquivo seqüencial de RegFunc 
{Especificação do valor para x que imprime o menu}
X ( 9
Enquanto x != 10 faça
 {Módulo 1 – Escrever o menu}
se x = 9
 então escreva “Menu”
	 escreva “1.Insercao de novos dados na agenda”
	 escreva “2.Atualizacao de dados”
 	 escreva “3.Remocao de dados da agenda”
 	 escreva “4.Imprimir a agenda”
	 escreva “5.Salvar a agenda”
	 escreva “6.Carregar a agenda ”
	 escreva “7.Ordenar a agenda por ordem alfabetica de nomes”
	 escreva “8.Finalizar programa”
	 escreva “Digite o valor correspondente ao que voce quer fazer e tecle enter:”
 leia x
fim se
 {Módulo 2 – Inserção de novos dados na agenda}
se x = 1
 então escreva “Inserção de novos dados na agenda”
	 escreva “Quantos contatos voce vai inserir?”
	 leia n
 para i ( 1 até i <= n passo 1 faça
	LeRegistro ( Amigo[i-1] )
 fim para
 x ( 9
fim se
 {Módulo 3 – Atualização de dados}
se x = 2
 escreva “"Digite o nome completo e sem acentuacao do contato a ser buscado e entao entre novamente com seus dados:”
	 leia nomeBuscado
	 opção ( 999
	 para i( 1 até i <= n passo 1 faça
		se nomeBuscado = Amigo[i].nome
		 então LeRegistro (Amigo[i])
			 opção ( 0
	 fim se
		se opção ( 999
		 então escreva “O contato não foi encontrado.”
			 opcao ( 0
fim se
	 escreva “Deseja realizar uma nova busca? Digite 2 para SIM e 9 para NÃO:”
	 leia opção
	 se opção = 9
	 então x(9
	 fim se
	 se opção = 2
	 então x(2
	 fim se
	fim se
 {Módulo 4– Remoção de dados da agenda}
se x = 3
 então escreva “Busca:”
 escreva “Digite o nome completo e sem acentuacao do contato a ser buscado:”
 leia nomeBuscado
	 para i ( 1 até i <=n 
		se nomeBuscado = Amigo[i].nome
		 	 escreva “Tem certeza que deseja remover o contato " nomeBuscado “ ? Digite 1 para SIM e 2 para NAO:"
			 leia opção
			 se opção = 1
			 RegDel (Amigo[i], Amigo[i+1], n)
				n = n – 1
 fim se
	 fim para
	 escreva "Deseja remover mais algum contato? Digite 3 para SIM e 9 para NAO:"
	 leia x
fim se
 
 {Módulo 5– Imprimir a agenda}
se x = 4
 então 
	 para i ( 1 até i <=n passo 1 faça
	 escreva “Nome:” Amigo[i].nome
	 escreva “Telefone:” Amigo[i].telefone
	 escreva “Logradouro:” Amigo[i].logradouro
	 escreva “Numero:” Amigo[i].numero
	 escreva “Apto:” Amigo[i].apto
	 escreva “CEP:” Amigo[i].CEP
	 escreva “Bairro:” Amigo[i].bairro
	 escreva “Cidade:” Amigo[i].cidade
	 escreva “Estado(sigla):” Amigo[i].estado
	 escreva “Bairro:” Amigo[i].bairro
	 escreva “Data de Aniversario(dd/mm/aa):”
	 escreva “Dia:” Amigo[i].dia
	 escreva “Mes:” Amigo[i].mes
	 escreva “Ano:” Amigo[i].ano
	 escreva “Email:” Amigo[i].email
	 fim para
	 escreva " Digite 9 para voltar ao menu:"
	 leia x
fim se
 {Módulo 6– Salvar a agenda}
se x = 5
 então 
	 escreva “Tem certeza que deseja salvar a agenda? Digite 1 para SIM e 2 para NÃO:” 
	leia opção
	se opção = 1
	 então abrir agenda.txt escrita
		 abrir memoria.txt escrita
		 abrir maxcontatos.txt escrita
		 para i ( 0 até i<= n passo 1 faça
		 	 escreva “Nome:” agenda.Amigo[i].nome
	 escreva “Telefone:” agenda.Amigo[i].telefone
	 escreva “Logradouro:” agenda.Amigo[i].logradouro
	 escreva “Numero:” agenda.Amigo[i].numero
	 escreva “Apto:” agenda.Amigo[i].apto
	 escreva “CEP:” agenda.Amigo[i].CEP
	 escreva “Bairro:” agenda.Amigo[i].bairro
	 escreva “Cidade:” agenda. Amigo[i].cidade
	 escreva “Estado(sigla):” agenda.Amigo[i].estado
	 escreva “Bairro:” agenda.Amigo[i].bairro
	 escreva “Data de Aniversario(dd/mm/aa):”
	 escreva “Dia:” agenda. Amigo[i].dia
	 escreva “Mes:” agenda.Amigo[i].mes
	 escreva “Ano:” agenda.Amigo[i].ano
	 escreva “Email:” agenda.Amigo[i].email
		 	 escreva memoria.Amigo[i].nome
	 escreva memoria.Amigo[i].telefone
	 escreva memoria.Amigo[i].logradouro
	 escreva memoria.Amigo[i].numero
	 escreva memoria.Amigo[i].apto
	 escreva memoria.Amigo[i].CEP
	 escreva memoria.Amigo[i].bairro
	 escreva memoria. Amigo[i].cidade
	 escreva memoria.Amigo[i].estado
	 escreva memoria.Amigo[i].bairro
	 escreva memoria. Amigo[i].dia
	 escreva memoria.Amigo[i].mes
	 escreva memoria.Amigo[i].ano
	 escreva memoria.Amigo[i].email
	 escreva nmaximocontatos.n
 fim para 
 fechar agenda.txt
		 fechar memoria.txt
		 fechar maxcontatos.txt
 			 escreva "Sua agenda esta salva no arquivo agenda.txt , armazenado na mesma pasta que este programa. Voce pode fazer copias de seguranca caso deseje comecar uma nova agenda. “
	fim se
 escreva ”Para continuar digite 9:”
 leia x
fim se
 {Módulo 7– Carregar a agenda}
se x = 6
 	 escreva “Tem certeza que deseja carregar a agenda? Digite 1 para SIM e 2 para NAO”
	 leia opcao
	 se opcao = 1
	 abrir maxcontatos.txt leitura
	 abrir memoria.txt leitura
	 n ( maxcontatos
	 para i ( 0 até i<=n passo 1 faça
		 leia memoria.Amigo[i].nome
		 leia memoria.Amigo[i].telefone
		 leia memoria.Amigo[i].logradouro
		 leia memoria.Amigo[i].numero
		 leia memoria.Amigo[i].apto
		 leia memoria.Amigo[i].CEP
		 leia memoria.Amigo[i].bairro
		 leia	memoria.Amigo[i].cidade
		 leia	memoria.Amigo[i].estado
		 leia	memoria.Amigo[i].dia
		 leia	memoria.Amigo[i].mes
		 leia	memoria.Amigo[i].ano
		 leia	memoria.Amigo[i].email
	 fim para
	 fim se
	x(9
	fim se
 
 {Módulo 8– Colocar a agenda em ordem alfabetica}
se x = 7
	 para i ( 0 até i < n passo 1 faça
		 se Amigo[i].nome > Amigo[i+1].nome
		 então RegCopy(Amigo[i], Aux)
 		 RegCopy(Amigo[i+1], Amigo[i])
 		 RegCopy(Aux, Amigo[i+1])
		 fim se
	 fim para
	 escreva “Sua agenda foi ordenada em alfabeticamente. Voce pode salva-la novamente caso deseje. Para continuar, digite 9.”
	 leia x
	fim se
 {Módulo 9– finalizar o programa}
se x =8
	 escreva “Deseja salvar sua agenda antes de sair? Digite 1 para SIM e 2 para NAO:”
	 leia opção
	 se opção = 1
	 então abrir agenda.txt escrita
		 abrir memoria.txt escrita
		 abrir maxcontatos.txt escrita
		 para i ( 0 até i<= n passo 1 faça
		 	 escreva “Nome:” agenda.Amigo[i].nome
	 escreva “Telefone:” agenda.Amigo[i].telefone
	 escreva “Logradouro:” agenda.Amigo[i].logradouro
	 escreva “Numero:” agenda.Amigo[i].numero
	 escreva “Apto:” agenda.Amigo[i].aptoescreva “CEP:” agenda.Amigo[i].CEP
	 escreva “Bairro:” agenda.Amigo[i].bairro
	 escreva “Cidade:” agenda. Amigo[i].cidade
	 escreva “Estado(sigla):” agenda.Amigo[i].estado
	 escreva “Bairro:” agenda.Amigo[i].bairro
	 escreva “Data de Aniversario(dd/mm/aa):”
	 escreva “Dia:” agenda. Amigo[i].dia
	 escreva “Mes:” agenda.Amigo[i].mes
	 escreva “Ano:” agenda.Amigo[i].ano
	 escreva “Email:” agenda.Amigo[i].email
		 	 escreva memoria.Amigo[i].nome
	 escreva memoria.Amigo[i].telefone
	 escreva memoria.Amigo[i].logradouro
	 escreva memoria.Amigo[i].numero
	 escreva memoria.Amigo[i].apto
	 escreva memoria.Amigo[i].CEP
	 escreva memoria.Amigo[i].bairro
	 escreva memoria. Amigo[i].cidade
	 escreva memoria.Amigo[i].estado
	 escreva memoria.Amigo[i].bairro
	 escreva memoria. Amigo[i].dia
	 escreva memoria.Amigo[i].mes
	 escreva memoria.Amigo[i].ano
	 escreva memoria.Amigo[i].email
	 escreva nmaximocontatos.n
 fim para 
 fechar agenda.txt
		 fechar memoria.txt
		 fechar maxcontatos.txt
			 fim se
 x(10
	fim se
fim algoritmo
1 . Programa em C++
#include <cstdlib>
#include <iostream>
#include <cstdio>
#include <fstream>
#include <cstring>
using namespace std;
struct RegFicha 
{ char nome[45];
char telefone[15];
char logradouro[35];
char apto[6];
char numero[6];
char CEP[15];
char bairro[30];
char cidade[30];
char estado[4];
char dia[4];
char mes[4];
char ano[4];
char email[35];
};
void LeRegistro(RegFicha& Pessoa)
{
system( "CLS" );
system ( "COLOR F8" );
cout << "\t \t Insercao de novos dados na agenda \n \n " << "\n Nota: nao digite acentuacao \n \n" ;
fflush(stdin);
cout << "Nome Completo:";
gets(Pessoa.nome);
if (strlen (Pessoa.nome) >= 45)
{cout << "\n Erro. Por favor, digite um nome com menos de 45 caracteres: \n";
gets(Pessoa.nome);}
fflush(stdin);
cout << "Telefone: " ;
fflush(stdin);
gets(Pessoa.telefone);
if (strlen (Pessoa.telefone) >= 15)
{cout << "Erro. Por favor, digite um telefone com menos de 15 caracteres:";
gets(Pessoa.telefone);}
cout << "Logradouro: " ;
fflush(stdin);
gets(Pessoa.logradouro);
if (strlen (Pessoa.logradouro) >= 35)
{cout << "Erro. Por favor, digite um endereco com menos de 35 caracteres:";
gets(Pessoa.logradouro);}
cout << "Numero: " ;
fflush(stdin);
gets(Pessoa.numero);
if (strlen (Pessoa.numero) >= 6)
{cout << "Erro. Por favor, digite um numero com menos de 6 caracteres:";
gets(Pessoa.numero);}
cout << "Apto: " ;
fflush(stdin);
gets(Pessoa.apto);
if (strlen (Pessoa.apto) >= 6)
{cout << "Erro. Por favor, digite um numero com menos de 6 caracteres:";
gets(Pessoa.apto);}
cout << "CEP: " ;
fflush(stdin);
gets(Pessoa.CEP);
if (strlen (Pessoa.CEP) >= 15)
{cout << "Erro. Por favor, digite um CEP com menos de 15 caracteres:";
gets(Pessoa.CEP);}
cout << "Bairro: " ;
fflush(stdin);
gets(Pessoa.bairro);
if (strlen (Pessoa.bairro) >= 30)
{cout << "Erro. Por favor, digite um bairro com menos de 30 caracteres:";
gets(Pessoa.bairro);}
cout << "Cidade: " ;
fflush(stdin);
gets(Pessoa.cidade);
if (strlen (Pessoa.cidade) >= 30)
{cout << "Erro. Por favor, digite uma cidade com menos de 30 caracteres:";
gets(Pessoa.cidade);}
cout << "Estado(sigla): " ;
fflush(stdin);
gets(Pessoa.estado);
if (strlen (Pessoa.estado) >= 4)
{cout << "Erro. Por favor, digite uma sigla para o estado com 2 caracteres:";
gets(Pessoa.estado);}
cout << "Data de Aniversario(dd/mm/aa)\nDia: " ;
fflush(stdin);
gets(Pessoa.dia);
if (strlen (Pessoa.dia) >= 4)
{cout << "Erro. Por favor, digite um numero com 2 caracteres:";
gets(Pessoa.dia);}
cout << "Mes: " ;
fflush(stdin);
gets(Pessoa.mes);
if (strlen (Pessoa.mes) >= 4)
{cout << "Erro. Por favor, digite um numero com 2 caracteres:";
gets(Pessoa.mes);}
cout << "Ano: " ;
fflush(stdin);
gets(Pessoa.ano);
if (strlen (Pessoa.ano) >= 4)
{cout << "Erro. Por favor, digite um numero com 2 caracteres:";
gets(Pessoa.ano);}
cout << "Email: " ;
fflush(stdin);
gets(Pessoa.email);
if (strlen (Pessoa.email) >= 35)
{cout << "Erro. Por favor, digite um email com menos de 35 caracteres:";
gets(Pessoa.email);}
}
void RegDel(RegFicha& Pessoa, RegFicha& ProxPessoa, int maxcontatos)
{ int j;
 for (j=0; j<maxcontatos ; j++)
 { 
 strcpy (Pessoa.nome, ProxPessoa.nome);
 strcpy (Pessoa.telefone, ProxPessoa.telefone);
 strcpy (Pessoa.logradouro, ProxPessoa.logradouro);
 strcpy (Pessoa.apto, ProxPessoa.apto);
 strcpy (Pessoa.numero, ProxPessoa.numero);
 strcpy (Pessoa.CEP, ProxPessoa.CEP);
 strcpy (Pessoa.bairro, ProxPessoa.bairro);
 strcpy (Pessoa.cidade, ProxPessoa.cidade);
 strcpy (Pessoa.estado, ProxPessoa.estado);
 strcpy (Pessoa.dia, ProxPessoa.dia);
 strcpy (Pessoa.mes, ProxPessoa.mes);
 strcpy (Pessoa.ano, ProxPessoa.ano);
 strcpy (Pessoa.email, ProxPessoa.email);
 }
}
void RegCopy(RegFicha& Pessoa, RegFicha& ProxPessoa)
{ strcpy (ProxPessoa.nome, Pessoa.nome);
 strcpy (ProxPessoa.telefone, Pessoa.telefone);
 strcpy (ProxPessoa.logradouro, Pessoa.logradouro);
 strcpy (ProxPessoa.apto, Pessoa.apto);
 strcpy (ProxPessoa.numero, Pessoa.numero);
 strcpy (ProxPessoa.CEP, Pessoa.CEP);
 strcpy (ProxPessoa.bairro, Pessoa.bairro);
 strcpy (ProxPessoa.cidade, Pessoa.cidade);
 strcpy (ProxPessoa.estado, Pessoa.estado);
 strcpy (ProxPessoa.dia, Pessoa.dia);
 strcpy (ProxPessoa.mes, Pessoa.mes);
 strcpy (ProxPessoa.ano, Pessoa.ano);
 strcpy (ProxPessoa.email, Pessoa.email);
 }
 
int main()
{
int x, i, n, opcao, maximocaracteres=0;
RegFicha Amigo[100];
RegFicha Aux;
char Temp[20];
char nomeBuscado[30];
x=9;
while (x != 10)
{ 
 if (x == 9){//Menu
 system ( "COLOR FC" );
 system ("CLS");
 cout << "\t \t Menu \n \n 1.Insercao de novos dados na agenda \n 2.Atualizacao de dados \n 3.Remocao de dados da agenda \n 4.Imprimir a agenda \n 5.Salvar a agenda \n 6.Carregar a agenda \n 7.Ordenar a agenda por ordem alfabetica de nomes \n 8.Finalizar programa \n \n Digite o valor correspondente ao que voce quer fazer e tecle enter:" ; 
 gets (Temp); 
 x = atoi (Temp) ; 
 }
 if (x == 1){//Insercao de novos dados na agenda
 system ("CLS");
 system ( "COLOR F8" );
 cout << "\t \t Insercao de novos dados na agenda \n \n" ;
 cout << "Quantos contatos voce vai inserir?\n" ;
 gets (Temp);
 n = atoi (Temp);
 for (i = 1; i <= n ; i++ )
 {LeRegistro(Amigo[i-1]);}
 x = 9; 
 }
 if (x == 2){//Atualizacao de dados
 system ( "COLOR F5" );
 system ("CLS");
 cout << "\t \t Atualizacao de dados \n \n" ;
 cout << "Busca: \n \n \n" ;
 cout << "Digite o nome completo e sem acentuacao do contato a ser buscado e entao entre novamente com seus dados:\n" ;
 gets (nomeBuscado);
 opcao = 999;
 for (i = 0; i < n ; i++ )
 { if (strcmp(nomeBuscado, Amigo[i].nome) == 0)
 { LeRegistro(Amigo[i]);
 opcao = 0; }
 } 
 if (opcao == 999)
 {cout << "O contato nao foi encontrado. \n";
 opcao = 0;}
 cout << "\nDeseja realizar uma nova busca? Digite 2 para SIM e 9 para NAO:\n";
 gets (Temp); 
 opcao = atoi (Temp) ;
 if (opcao == 9)
 {x = 9;}
 if (opcao == 2)
 {x = 2; }
 }
 
 if (x == 3){//Remocaode dados da agenda
 system ("CLS");
 system ( "COLOR F1" );
 cout << "\t \t Remocao de dados da agenda \n \n" ;
 cout << "Busca: \n \n \n" ;
 cout << "Digite o nome completo e sem acentuacao do contato a ser buscado:\n" ;
 gets (nomeBuscado);
 for (i = 0; i < n ; i++ )
 { if (strcmp(nomeBuscado, Amigo[i].nome) == 0)
 { 
 cout << "\n \n \n Tem certeza que deseja remover o contato " << nomeBuscado << " ? Digite 1 para SIM e 2 para NAO:"; 
 gets (Temp); 
 opcao = atoi (Temp) ;
 if (opcao == 1)
 {RegDel(Amigo[i], Amigo[i+1], n);
 n = n - 1; } 
 } 
 
 }
 cout << "Deseja remover mais algum contato? Digite 3 para SIM e 9 para NAO:";
 gets (Temp); 
 x = atoi (Temp) ;
 }
 
 if (x == 4){//Imprimir Agenda
 system ("CLS");
 system ( "COLOR 0D" );
 cout << "\t \t Agenda \n \n" ;
 for (i = 0; i < n ; i++ )
 { cout << i + 1 << " ) " << Amigo[i].nome << "\n"; 
 cout << "Telefone: " << Amigo[i].telefone << "\n";
 cout << "Logradouro: " << Amigo[i].logradouro << "\n";
 cout << "Numero: " << Amigo[i].numero;
 cout << " Apto: " << Amigo[i].apto << "\n";
 cout << "CEP: " << Amigo[i].CEP << "\n";
 cout << "Bairro: " << Amigo[i].bairro << "\n";
 cout << "Cidade: " << Amigo[i].cidade ;
 cout << " / " << Amigo[i].estado << "\n";
 cout << "Data de nascimento(dd/mm/aa): " << Amigo[i].dia ;
 cout << " / " << Amigo[i].mes ;
 cout << " / " << Amigo[i].ano << "\n";
 cout << "Email: " << Amigo[i].email ;
 cout << "\n \n \n"; 
 }
 cout << "Digite 9 para voltar ao menu:";
 gets (Temp); 
 x = atoi (Temp) ;
 }
 
 
 if (x == 5 ){//Salvar Agenda
 system ("CLS");
 system ( "COLOR 2E" );
 cout << "Tem certeza que deseja salvar a agenda? Digite 1 para SIM e 2 para NAO:" ;
 gets (Temp);
 opcao = atoi(Temp);
 if(opcao == 1)
 {ofstream salvar("agenda.txt");
 ofstream agendamemoria("memoria.txt");
 ofstream nmaximodecontatos("maxcontatos.txt");
 
 for (i=0; i<n ; i++)
 { salvar << i + 1 << " ) " << Amigo[i].nome << "\n"; 
 salvar << "Telefone: " << Amigo[i].telefone << "\n";
 salvar << "Logradouro: " << Amigo[i].logradouro << "\n";
 salvar << "Numero: " << Amigo[i].numero;
 salvar << "Apto: " << Amigo[i].apto << "\n";
 salvar << "CEP: " << Amigo[i].CEP << "\n";
 salvar << "Bairro: " << Amigo[i].bairro << "\n";
 salvar << "Cidade: " << Amigo[i].cidade ;
 salvar << " / " << Amigo[i].estado << "\n";
 salvar << "Data de nascimento(dd/mm/aa): " << Amigo[i].dia ;
 salvar << " / " << Amigo[i].mes ;
 salvar << " / " << Amigo[i].ano << "\n";
 salvar << "Email: " << Amigo[i].email ;
 salvar << "\n \n \n"; 
 
 agendamemoria << Amigo[i].nome << "\n"; 
 agendamemoria << Amigo[i].telefone << "\n";
 agendamemoria << Amigo[i].logradouro << "\n";
 agendamemoria << Amigo[i].numero << "\n";
 agendamemoria << Amigo[i].apto << "\n";
 agendamemoria << Amigo[i].CEP << "\n";
 agendamemoria << Amigo[i].bairro << "\n";
 agendamemoria << Amigo[i].cidade << "\n";
 agendamemoria << Amigo[i].estado << "\n";
 agendamemoria << Amigo[i].dia << "\n";
 agendamemoria << Amigo[i].mes << "\n";
 agendamemoria << Amigo[i].ano << "\n";
 agendamemoria << Amigo[i].email << "\n";
 
 nmaximodecontatos << n; 
 }
 cout << "Sua agenda esta salva no arquivo agenda.txt , armazenado na mesma pasta que este programa. Voce pode fazer copias de seguranca caso deseje comecar uma nova agenda. ";
 }
 
 cout << "Para continuar, digite 9 : \n" ; 
 gets(Temp);
 x = atoi(Temp);
 }
 
 if (x == 6 ){//Carregar Agenda
 system ("CLS");
 system ( "COLOR 8B" );
 cout << "Tem certeza que deseja carregar a agenda? Digite 1 para SIM e 2 para NAO:" ;
 gets (Temp);
 opcao = atoi(Temp);
 if(opcao == 1)
 {
 ifstream lemaximo("maxcontatos.txt");
 lemaximo.get(Temp, 2);
 n = atoi(Temp);
 ifstream lememoria("memoria.txt");
 
 for (i=0; i<n ; i++)
 { fflush(stdin);
 lememoria.get(Amigo[i].nome, 45); 
 lememoria.ignore (45, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].telefone, 15);
 lememoria.ignore (15, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].logradouro, 35);
 lememoria.ignore (35, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].numero,6);
 lememoria.ignore (6, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].apto, 6);
 lememoria.ignore (6, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].CEP, 15);
 lememoria.ignore (15, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].bairro, 30);
 lememoria.ignore (30, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].cidade, 30) ;
 lememoria.ignore (30, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].estado,3);
 lememoria.ignore (3, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].dia,3);
 lememoria.ignore (3, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].mes,3);
 lememoria.ignore (3, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].ano,3);
 lememoria.ignore (3, '\n');
 fflush(stdin);
 lememoria.get(Amigo[i].email, 35);
 lememoria.ignore (35, '\n');
 fflush(stdin); 
 }
 }
 x = 9;
 }
 
 if (x == 7 ){//Ordem alfabetica
 system ("COLOR F4");
 system ("CLS");
 
 
 for (i = 0 ; i < n -1 ; i++) 
 { if( strcmp(Amigo[i].nome, Amigo[i+1].nome ) > 0 )
 { RegCopy(Amigo[i], Aux);
 RegCopy(Amigo[i+1], Amigo[i]);
 RegCopy(Aux, Amigo[i+1]);
 }
 }
 cout << "Sua agenda foi ordenada em alfabeticamente. Voce pode salva-la novamente caso deseje. Para continuar, digite 9. \n" ;
 gets (Temp);
 x=atoi(Temp);
 
 }
 if (x == 8 ){//Finalizar o programa
 system ("CLS");
 
 cout << "Deseja salvar sua agenda antes de sair? Digite 1 para SIM e 2 para NAO:\n" ;
 gets(Temp);
 opcao = atoi(Temp);
 
 if (opcao == 1)
 { ofstream salvar("agenda.txt");
 ofstream agendamemoria("memoria.txt");
 ofstream nmaximodecontatos("maxcontatos.txt");
 
 for (i=0; i<n ; i++)
 { salvar << i + 1 << " ) " << Amigo[i].nome << "\n"; 
 salvar << "Telefone: " << Amigo[i].telefone << "\n";
 salvar << "Logradouro: " << Amigo[i].logradouro << "\n";
 salvar << "Numero: " << Amigo[i].numero;
 salvar << "Apto: " << Amigo[i].apto << "\n";
 salvar << "CEP: " << Amigo[i].CEP << "\n";
 salvar << "Bairro: " << Amigo[i].bairro << "\n";
 salvar << "Cidade: " <<Amigo[i].cidade ;
 salvar << " / " << Amigo[i].estado << "\n";
 salvar << "Data de nascimento(dd/mm/aa): " << Amigo[i].dia;
 salvar << " / " << Amigo[i].mes ;
 salvar << " / " << Amigo[i].ano << "\n";
 salvar << "Email: " << Amigo[i].email ;
 salvar << "\n \n \n"; 
 
 agendamemoria << Amigo[i].nome << "\n"; 
 agendamemoria << Amigo[i].telefone << "\n";
 agendamemoria << Amigo[i].logradouro << "\n";
 agendamemoria << Amigo[i].numero << "\n";
 agendamemoria << Amigo[i].apto << "\n";
 agendamemoria << Amigo[i].CEP << "\n";
 agendamemoria << Amigo[i].bairro << "\n";
 agendamemoria << Amigo[i].cidade << "\n";
 agendamemoria << Amigo[i].estado << "\n";
 agendamemoria << Amigo[i].dia << "\n";
 agendamemoria << Amigo[i].mes << "\n";
 agendamemoria << Amigo[i].ano << "\n";
 agendamemoria << Amigo[i].email << "\n";
 
 nmaximodecontatos << n; }
 }
 
 x = 10;
 
 }
 
}
system( "PAUSE" );
return EXIT_SUCCESS;
}