public static void Main(string[] args) { Random random = new Random(); List <Card> list = new List <Card>(); List <Card> hand = new List <Card>(); void GenerateDeck() { for (int i = 2; i < 15; i++) { for (int j = 0; j < 4; j++) { list.Add(new Card { number = i, type = (Type)j }); } } for (int i = 2; i < 15; i++) { for (int j = 0; j < 4; j++) { list.Add(new Card { number = i, type = (Type)j }); } } } void DrawHand() { int line = 0; for (int i = 0; i < 15; i++) { int num = random.Next(0, list.Count); if (Math.Floor(i / 8f) > line) { line++; Console.WriteLine(""); } Console.Write($"{list[num].Value} of {list[num].type} ({i + 1}) | "); hand.Add(list[num]); list.RemoveAt(num); } } void ShowHand() { int line = 0; for (int i = 0; i < hand.Count; i++) { if (Math.Floor(i / 8f) > line) { line++; Console.WriteLine(""); } Console.Write($"{hand[i].Value} of {hand[i].type} ({i + 1}) | "); } } Card Draw() { int num = random.Next(0, list.Count); Card card = list[num]; list.RemoveAt(num); return(card); } GenerateDeck(); DrawHand(); while (true) { if (Console.ReadLine() == "end") { return; } Console.Clear(); hand.RemoveAt(random.Next(0, hand.Count)); hand.Add(Draw()); ShowHand(); } }
// Obs: Não foi possível implementar o primeiro requisito do segundo parágrafo //ou seja, assim que o programa iniciar, mostrar os aniversariantes do dia, //visto que é necessário carregar a agenda primeiro. Além disso, o Menu Inicial perderia sua função de looping, //no caso de haver muitos aniversariantes no dia. //Dessa forma, foi oferecida a opção de mostrar os aniversariantes do dia numa página dedicada. static void Main(string[] args) { Agenda agenda = new Agenda(); Arquivo repositorio = new Arquivo(); int opcao = 0; const string diretorio = @"D:\agenda.txt"; // Obtem o arquivo para verificar se há aniversariantes no dia. agenda = repositorio.ObterAgendaDeArquivo(diretorio); // Exibe aniversariantes do dia. AniversariantesDoDia(agenda); do // Enquanto se desejar o menu vai ficar rodando { Console.WriteLine("\n"); Console.WriteLine("\t\t"+DateTime.Now); Console.WriteLine("\n\n"); Console.WriteLine("\n\t\tGeranciador de Aniversários.\n"); Console.WriteLine("\t\tSelecione uma das opções abaixo:\n"); Console.WriteLine("\t\t1 - Adicionar nova pessoa.\n" + "\t\t2 - Buscar pessoa pelo nome ou sobrenome.\n" + "\t\t3 - Editar dados da Pessoa.\n" + "\t\t4 - Apagar pessoa da agenda.\n" + "\t\t5 - Imprimir agenda.\n" + "\t\t6 - Carregar agenda de arquivo.\n" + "\t\t7 - Gravar agenda em arquivo.\n" + "\t\t8 - Abrir arquivo.\n" + "\t\t9 - Aniversariantes do Dia.\n" + "\t\t0 - Sair.\n"); Console.WriteLine("\n\n\n\t\tQuantidade de pessoas na agenda: "+ agenda.ObterQuantidadePessoas()); opcao = int.Parse(Console.ReadLine()); // Captura a opção escolhida pelo usuário // Opções do menu e seus comandos a serem executados, de a cordo com a opção escolhida pelo usuário switch (opcao) { case 1: // Adiciona nova pessoa na agenda Console.Clear(); AdicionarPessoa(agenda); break; case 2: // Busca pessoa pelo nome ou sobrenome Console.Clear(); BuscarPessoasPeloNome(agenda); break; case 3: // Edita os dados de uma determinada pessoa Console.Clear(); EditarPessoa(agenda); break; case 4: // Apaga pessoa da agenda Console.Clear(); DeletarPessoa(agenda); break; case 5: // Imprime toda a agenda Console.Clear(); ImprimirAgenda(agenda); break; case 6: // Carrega agenda de arquivo já salvo Console.Clear(); agenda = repositorio.ObterAgendaDeArquivo(diretorio); Console.WriteLine("Agenda carregada com sucesso!"); break; case 7: // Grava agenda em arquivo Console.Clear(); repositorio.GravarAgendaEmArquivo(agenda, diretorio); Console.WriteLine("Agenda gravada com sucesso!"); break; case 8: // Abre arquivo da agenda apenas para leitura (se editar o arquivo ele será inutilizado!!!) Console.Clear(); System.Diagnostics.Process.Start(diretorio); Console.WriteLine("Arquivo texto aberto!"); Console.WriteLine("IMPORTANTE: É apenas para você olha ele, lembre de fechar antes de gravar novamente!"); break; case 9: // Exibe os aniversariantes do dia Console.Clear(); AniversariantesDoDia(agenda); break; } } while (opcao != 0); // Digitando o número ZERO o programa é encerrado }
// Busca pessoa pelo nome ou sobrenome public static void BuscarPessoasPeloNome(Agenda agenda) { int idade; Console.WriteLine("\nDigite o nome, ou sobrenome, da pessoa que deseja pesquisar: "); string nome = Console.ReadLine(); Console.WriteLine("\n\n"); List<Pessoa> pessoa = agenda.BuscarPessoasPeloNome(nome); int pessoasEncontradas = 0; for (int i=0;i<pessoa.Count;i++) { pessoasEncontradas++; } if (pessoa == null) { Console.WriteLine("Pessoa não encontrada!"); return; } else { Console.WriteLine(pessoasEncontradas+" Pessoas encontradas: \n\n"); for (int i = 0; i < pessoa.Count; i++) { // Imprime a idade e a quantidade de dias para o próximo aniversário DateTime dataNascimento = pessoa[i].DataNascimento; DateTime hoje = new DateTime(DateTime.Now.Date.Year, DateTime.Now.Date.Month, DateTime.Now.Date.Day); DateTime proximoAniversario = new DateTime(DateTime.Now.Date.Year, dataNascimento.Month, dataNascimento.Day); //.Date elimina a hora TimeSpan diasParaAniversario = proximoAniversario - hoje; if (dataNascimento.Date.Day == DateTime.Now.Date.Day && dataNascimento.Date.Month == DateTime.Now.Date.Month) //Aniversariante do dia { Console.WriteLine(); idade = DateTime.Today.Year - dataNascimento.Year; Console.WriteLine("\t\t***********************************************************\n"); Console.WriteLine("\t\t" + (i + 1) + " ª Pessoa:\n"); Console.WriteLine("\t\tAniversariante do dia!!!\n"); Console.WriteLine("\t\tNome: " + pessoa[i].Nome + " " + pessoa[i].Sobrenome); Console.WriteLine("\t\tData de nascimento: " + pessoa[i].DataNascimento.ToShortDateString()); Console.WriteLine("\t\t" + pessoa[i].Nome + " " + pessoa[i].Sobrenome + " completou hoje " + idade + " anos.\n"); Console.WriteLine("\t\tId: " + pessoa[i].IdPessoa + "\n"); Console.WriteLine("\t\t************************************************************"); Console.WriteLine("\n\n"); } else if (diasParaAniversario.Days < 0) //Caso a data já tenha ocorrido (correção de quantidade negativa) { Console.WriteLine(); Console.WriteLine((i + 1) + "ª Pessoa: "); Console.WriteLine("Id: " + pessoa[i].IdPessoa); Console.WriteLine("Nome: \t " + pessoa[i].Nome + " " + pessoa[i].Sobrenome); Console.WriteLine("Data de Nascimento: " + pessoa[i].DataNascimento.ToShortDateString()); DateTime proximo = new DateTime(DateTime.Now.Date.Year+1, dataNascimento.Month, dataNascimento.Day); // Adiciona 1 ano para o aniversario que já ocorreu TimeSpan dias = proximo - hoje; Console.WriteLine("Faltam " + dias.Days + " dias para o próximo aniversário. Caso 1"); idade = DateTime.Today.Year - dataNascimento.Year; Console.WriteLine(pessoa[i].Nome + " " + pessoa[i].Sobrenome + " tem " + idade + " anos."); } else //Todos os demais casos { Console.WriteLine(); Console.WriteLine((i + 1) + "ª Pessoa: "); Console.WriteLine("Id: " + pessoa[i].IdPessoa); Console.WriteLine("Nome: \t " + pessoa[i].Nome + " " + pessoa[i].Sobrenome); Console.WriteLine("Data de Nascimento: " + pessoa[i].DataNascimento.ToShortDateString()); Console.WriteLine("Faltam " + diasParaAniversario.Days + " dias para o próximo aniversário. Caso 2"); idade = DateTime.Today.Year - dataNascimento.Year - 1; // Ainda não fez aniversário, não completou a idade no presente ano Console.WriteLine(pessoa[i].Nome + " " + pessoa[i].Sobrenome + " tem " + idade + " anos."); } } Console.ReadLine(); } Console.Clear(); }
// Edita os dados de uma determinada pessoa previamente identificada (2 momentos) public static void EditarPessoa(Agenda agenda) { Console.WriteLine("\nDigite o nome da pessoa que deseja editar: "); string id = Console.ReadLine(); Console.WriteLine("\n\n"); // Utiliza função da agenda para pesquisar pessoa Pessoa pessoa = agenda.BuscarPessoaPeloNome(id); if (pessoa == null) { Console.WriteLine("Pessoa não encontrada!"); return; } else { Console.WriteLine("\nOs dados abaixo estão corretos? \n"); Console.WriteLine("Nome completo: " + pessoa.Nome + " " + pessoa.Sobrenome); Console.WriteLine("Data de nascimento: " + pessoa.DataNascimento.ToString("dd/MM/yyyy")); //Confirma ou não os dados pesquisados Console.WriteLine("\n1 - Sim.\n2 - Não.\n"); int insersao = int.Parse(Console.ReadLine()); if (insersao == 1) // Caso os dados confiram com a pessoa a ser inserida na agenda { // Primeiro momento: // Chama a função da agenda para remover a pessoa previamente identificada agenda.Remover(pessoa.IdPessoa); Console.WriteLine("Digite o nome da pessoa que deseja adicionar (apénas o primeiro nome): "); string nome = Console.ReadLine(); Console.WriteLine(); Console.WriteLine("Digite o sobrenome da pessoa: "); // Não consegui fazer split com sobrenome - só aceita 1 palavra string sobrenome = Console.ReadLine(); Console.WriteLine(); Console.WriteLine("Digite a data de nascimento no formato dd/mm/aaaa: "); DateTime DataNascimento = DateTime.ParseExact(Console.ReadLine(), "dd/MM/yyyy", CultureInfo.InvariantCulture); Console.WriteLine(); Console.WriteLine("\nOs dados abaixo estão corretos? \n"); Console.WriteLine("Nome completo: " + nome + " " + sobrenome); Console.WriteLine("Data de nascimento: " + DataNascimento.ToString("dd/MM/yyyy")); Console.WriteLine("\n1 - Sim.\n2 - Não.\n"); int confere = int.Parse(Console.ReadLine()); //Confirma ou não os dados pesquisados if (confere == 1) { // Segundo momento: //Preparar a pessoa para inserir na agenda Pessoa pessoaModificada = new Pessoa(); pessoaModificada.IdPessoa = Guid.NewGuid(); pessoaModificada.Nome = nome; pessoaModificada.Sobrenome = sobrenome; pessoaModificada.DataNascimento = DataNascimento; //Inserir pessoa na agenda agenda.Adicionar(pessoaModificada); Console.WriteLine("Dados adicionados com sucesso na agenda!"); } else if (confere == 2) // Os dados não conferem { Console.WriteLine("Tente digitar novamente."); } Console.Clear(); } else if (insersao == 2) // Novamente os dados não conferem { Console.WriteLine("Tente novamente."); } Console.Clear(); } }