コード例 #1
0
        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");
        }
コード例 #2
0
ファイル: EstabelecimentoDAO.cs プロジェクト: rgllm/uminho
        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);
        }