public string getResposta(string pedido) { float clAux; switch (estado) { case INICIAL: if (pedido.Equals("pesquisa") || pedido.Equals("Apetece-me algo")) { estado = PESQUISA1; return("O que deseja hoje?"); } if (pedido.Equals("adicionar preferencia")) { estado = ADDPREFERENCIA; return("Introduza uma preferência que pretenda registar ou introduza \"cancelar\" para voltar atrás"); } if (pedido.Equals("adicionar nao-preferencia")) { estado = ADDNAOPREFERENCIA; return("Introduza uma não-preferência que pretenda registar ou introduza \"cancelar\" para voltar atrás"); } if (pedido.Equals("ajuda")) { return("Estão disponíveis os seguintes comandos:\n-Pesquisa\n-Registar preferência\n*-Remover preferência\n*-Listar preferências\n*-Histórico\n (* não implementados)"); } break; case PESQUISA1: SortedDictionary <int, Estabelecimento> aux = pesq.getEstabelecimentos(pedido); if (aux.Count == 0) { estado = INICIAL; return("Sem resultados."); } // ORDENAÇÃO DOS RESULTADOS float exp = 0.0001f; int cont = 1; SortedDictionary <float, Estabelecimento> es = new SortedDictionary <float, Estabelecimento>(); foreach (Estabelecimento e1 in aux.Values) { float classi = e1.getClassificacao(); HashSet <String> ings = e1.getRefeicoes().ElementAt(0).getIngredientes(); int asdf = ings.Count; int breakPoint = 0; for (int i = 0; i < ings.Count(); i++) { if (p.preferencias.Contains(ings.ElementAt(i).Trim())) { classi += 10.0f; } else if (p.naoPreferencias.Contains(ings.ElementAt(i).Trim())) { classi = -100000000; } } if (classi >= 0) { if (es.ContainsKey(classi)) { es.Add(classi + (cont + 1) * exp, e1); } else { es.Add(classi, e1); } } } resultPesquisa = es; clAux = resultPesquisa.Keys.Max(); Estabelecimento e = resultPesquisa[clAux]; resultPesquisa.Remove(clAux); estado = PESQUISA2; return(e.getDesignacao() + "\n" + "Classificação: " + e.getClassificacao() + " estrelas\n" + "Morada: " + e.getMorada() + "\n(introduza \"proximo\" para ver mais resultados)"); case PESQUISA2: if (pedido.Equals("proximo")) { if (resultPesquisa.Count == 0) { estado = INICIAL; return("Sem mais resultados."); } clAux = resultPesquisa.Keys.Max(); Estabelecimento e1 = resultPesquisa[clAux]; resultPesquisa.Remove(clAux); return(e1.getDesignacao() + "\n" + "Classificação: " + e1.getClassificacao() + " estrelas\n" + "Morada: " + e1.getMorada() + "\n"); } estado = INICIAL; return("Apresentação dos resultados cancelada."); case ADDPREFERENCIA: if (pedido.Equals("cancelar")) { estado = INICIAL; return("Operação cancelada"); } p.registaPreferencia(idUser, pedido, ""); estado = INICIAL; return("Preferência registada!"); case ADDNAOPREFERENCIA: p.registaNaoPreferencia(idUser, pedido, ""); estado = INICIAL; return("Não-preferência registada!"); } return("ERRO"); }
public SortedDictionary <int, Estabelecimento> getEstabelecimentos(string refe) { SortedDictionary <int, Estabelecimento> estabelecimentos = new SortedDictionary <int, Estabelecimento>(); SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder(); builder.DataSource = "your.azure.server"; builder.UserID = "id"; builder.Password = "******"; builder.InitialCatalog = "xxx"; using (SqlConnection conn = new SqlConnection(builder.ConnectionString)) { conn.Open(); try { SqlParameter designacao = new SqlParameter("@designacao", System.Data.SqlDbType.NVarChar, 40); designacao.Value = refe; SqlDataReader reader = null; SqlCommand est = new SqlCommand("select id_refeiçao, designaçao, tipo_de_cozinha, descriçao, foto_path from li4.dbo.Refeiçao where designaçao=@designacao", conn); est.Parameters.Add(designacao); reader = est.ExecuteReader(); while (reader.Read()) { int idRefeiçao = Int32.Parse(reader["id_refeiçao"].ToString()); string descriçao = reader["descriçao"].ToString().TrimEnd(); string tipo_de_cozinha = reader["tipo_de_cozinha"].ToString().TrimEnd(); string foto_path = reader["foto_path"].ToString().TrimEnd(); HashSet <string> ings = new HashSet <string>(); using (SqlConnection con = new SqlConnection(builder.ConnectionString)) { con.Open(); SqlParameter idRefeicao = new SqlParameter("@idRefeicao", System.Data.SqlDbType.NVarChar, 40); idRefeicao.Value = idRefeiçao; SqlDataReader reader2 = null; SqlCommand ing = new SqlCommand("select designaçao from Ingrediente inner join IngredienteRefeiçao on IngredienteRefeiçao.id_ingrediente = Ingrediente.id_ingrediente " + " where IngredienteRefeiçao.id_refeiçao=@idRefeicao", con); ing.Parameters.Add(idRefeicao); reader2 = ing.ExecuteReader(); while (reader2.Read()) { ings.Add(reader2["designaçao"].ToString().TrimEnd()); } } Refeicao refeicao = new Refeicao(descriçao, refe, tipo_de_cozinha, foto_path, ings); using (SqlConnection con = new SqlConnection(builder.ConnectionString)) { con.Open(); SqlParameter idRefeicao = new SqlParameter("@idRefeicao", System.Data.SqlDbType.NVarChar, 40); idRefeicao.Value = idRefeiçao; SqlDataReader reader3 = null; SqlCommand ests = new SqlCommand("select Estabelecimento.id_estabelecimento, designaçao, NIF, telefone, rede_social, url_site, classificaçao, morada, codigo_postal from li4.dbo.Estabelecimento inner join li4.dbo.EstabelecimentoRefeiçao on Estabelecimento.id_estabelecimento = EstabelecimentoRefeiçao.id_estabelecimento where EstabelecimentoRefeiçao.id_refeiçao=@idRefeicao", con); ests.Parameters.Add(idRefeicao); reader3 = ests.ExecuteReader(); while (reader3.Read()) { int idEstabelecimento = Int32.Parse(reader3["id_estabelecimento"].ToString()); string designaçao = reader3["designaçao"].ToString().TrimEnd(); int NIF = Int32.Parse(reader3["NIF"].ToString()); int telefone = Int32.Parse(reader3["telefone"].ToString()); string rede_social = reader3["rede_social"].ToString().TrimEnd(); string url_site = reader3["url_site"].ToString().TrimEnd(); float classificaçao = float.Parse(reader3["classificaçao"].ToString()); string codigo_postal = reader3["codigo_postal"].ToString().TrimEnd(); string morada = reader3["morada"].ToString().TrimEnd(); if (!estabelecimentos.ContainsKey(idEstabelecimento)) { HashSet <Refeicao> r = new HashSet <Refeicao>(); r.Add(refeicao); Estabelecimento estabelecimento = new Estabelecimento(url_site, codigo_postal, designaçao, rede_social, telefone, NIF, classificaçao, r, morada); estabelecimentos.Add(idEstabelecimento, estabelecimento); } else { estabelecimentos[idEstabelecimento].addRefeicao(refeicao); } } } } } catch (Exception e) { Console.WriteLine(e.ToString()); } } return(estabelecimentos); }