Jump to content

Parque de Estacionamento


Zebugamadruga
 Share

Recommended Posts

Boas

Antes de mais este é o meu primeiro post, por isso peço desculpa se cometer alguma calinada.

Vinha por este meio a apelar a paciência de alguma alma caridosa(visto que estamos perto do Natal) a ceder uma ajuda a este trabalho final de semestre que tenho de concluir.

O que se passa é que não sei por onde começar e gostaria se possivel que alguem me desse umas dicas ATENÇÃO-Não estou a pedir que me façam o trabalho!!!.

Deixo aqui o que me foi pedido para fazer e agradecia que comentassem com críticas construtivas e/ou dicas em como devo fazer o trabalho(Quantas variáveis serão precisas, os métodos a utilizar[if's, Do's ... etc]) em vez da resposta normal -"Começa do ínicio"

Agradeço desde já o vosso tempo e disponibilidade. 😄

TRABALHO

Pretende-se que realize uma aplicação em VB.Net que faça a gestão de um Parque de Estacionamento.

O trabalho a realizar apresenta-se dividido em cinco fases de desenvolvimento, totalmente independentes. Tenha sempre presente no desenvolvimento da aplicação o aspecto gráfico. Assume-se no projecto que o programa é iniciado apenas uma vez e nunca sofre interrupções.

Fase 1 (10 valores)

1 - Admita que o parque tem uma capacidade para 100 lugares e que sempre que entra um veículo no parque é acrescentado ao número de carros que deram entrada no parque, através de um clique em um botão.

2 - O programa deve calcular o valor a pagar pelo utente, após a indicação do número de horas e minutos de utilização do parque, de acordo com as seguintes condições:

a) Preço hora – 1 €.

b) A unidade mínima de facturação são 15 minutos. Exemplo 1h e 10 m, deve ser taxado como 1h e 15m.

c) Após as primeiras 24 horas, é sempre taxado o valor por um dia de utilização, no valor de 5 Euros/dia. Exemplo : 50 horas de utilização, deve pagar:

1º dia – 24 Euros

2º dia - 5 Euros

3º dia – 5 Euros

d) Os residentes devem pagar apenas 50% dos valores apresentados acima.

e) Aos veículos pesados é acrescentada uma taxa fixa de 1 euro, após o cálculo, de acordo com as regras anteriores.

3 - Implemente um sistema de ajuda, para o utilizador do programa.

4 - Incremente automaticamente o número de veículos que utilizaram o parque.

5- Implemente a funcionalidade, que apenas permite utilizar a aplicação mediante a apresentação de um login e de uma senha.

6- Admita que periodicamente uma câmara de vigilância coloca uma imagem de nome: “foto.jpg” no directório “/imagens”. Implemente a funcionalidade que permite visualizar a referida imagem actualizada.

Fase 2 (3 valores)

Após o cálculo do montante a pagar e indicado o valor que o utente entregou para pagamento, o programa deve:

1 - Indicar o troco a entregar.

2 - Admitindo que existe um número ilimitado de notas e moedas na caixa, indicar as moedas e notas a entregar, respeitando o critério que devem ser entregues sempre o menor número de moedas e notas.

3 - Apresente o troco a entregar de forma gráfica, com recurso a imagens de moedas e notas.

Nota – Considere que o valor máximo de pagamento nunca excede os 50 euros.

Fase 3 (3 valores)

1- Se o utente pretender recibo deve:

a) Pedir o nome, número de contribuinte e data.

b) Gravar e imprimir o respectivo recibo, com os dados necessários. Deve estar presente no recibo, informação relativa às taxas aplicadas no parque.

c) Incrementar o número do recibo automaticamente.

2- Deve ser possível, em cada momento, saber o valor já facturado.

Fase 4 (2 valores)

1- Torne possível a alteração da capacidade do parque e o número de carros presentes em cada momento no parque.

2- Calcule o número de carros presente em cada momento no parque, tenha em atenção os valores calculados em1) e 4) da fase 1.

3- Sempre que é atingida a capacidade máxima do parque deve ser emitido um sinal sonoro e uma mensagem no écran. O botão que faz a gestão da entrada dos carros deve passar a “disable” sempre que for atingida a lotação do parque ou a “enable” sempre que a capacidade do parque não esteja lotada.

Fase 5 (2 valores)

1- Implemente uma rotina que mediante a indicação da data/hora inicial e a data/hora final, permita calcular o número de horas e minutos do ponto 2 da fase 1.

2- Acrescente funcionalidades que julgue melhorar a aplicação.

Link to comment
Share on other sites

  • Replies 101
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Olá.

Desculpa parecer intrometido mas, se falas em trabalho de semestre estás tendo, ou tiveste formação em programação, e por isso deverias ter conhecimentos para pelo menos estruturares o teu programa.

No entanto, caso tenhas alguma dúvida mais especifica, certamente algum membro deste forum te ajudará.

Só que nada garante que alguém te dirá quantas instruções e variaveis terás de utilizar.

Nota: Não percebo porque te pedem a fase 2. Será para utilizadores imigrados de fora da zona Euro?!

O caminho mais curto para conseguir fazer muitas coisas é fazer uma de cada vez. Samuel Smiles

Link to comment
Share on other sites

Nota: Não percebo porque te pedem a fase 2. Será para utilizadores imigrados de fora da zona Euro?!

São fases do projecto. O que tem uma coisa a haver com outra? 😉

Zebugamadruga, existem, sem exagerar, talvez centenas de abordagens diferentes para este problema.

É muito difícil fazer um levantamento do que é necessário, até porque eu posso ver as coisas de uma maneira que não entendes, e vice-versa.

Acho que vou mesmo sugerir o que pediste para não sugerir: "Começa do início"... já tentaste fazer um levantamento do que precisas? Do que parece ser necessário?

Começa a escrevinhar no papel. Esquematiza o que te pedem. As coisas por extenso parecem sempre maiores.

Se te serve de alguma coisa, o que me parece que precisas de considerar logo de imediato é a individualização de cada carro.

Parece-me que cada carro terá de ser um objecto consciente de onde está, quando entrou e o que é.

Outra abordagem implicaria o mesmo conceito mas a consciência global estaria centralizada noutro sítio que não cada carro.

Pode parecer pouco, mas o que oferecemos aqui é ajuda. Se nesta fase te dessem algo, estariam na verdade a fazer-te o trabalho.

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other sites

Agradeço desde já a vossa resposta mas acho que quem percebeu mais ou menos o que eu queria foi o ribeiro55. De facto pode parecer que quero o trabalho feito mas volto a dizer-lhes que estão enganados. De facto estou com problemas em começar.Não consigo "partir" o problema de forma a resolve-lo. Outra coisa, e agora para o utilizador FreiNando ao contrário do que se pensa desde o processo de Bolonha entrou em vigor o trabalho dos professores ficou facilitado agora é mais a base do "ñ sabes vai a procura".Muito do que é pedido para este programa não foi dado na aula( Isto é um programa da cadeira de Programação I). Vou comprar um livro de programação amanhã a ver se me ajuda em algo. Visto que querem que faça uma pergunta concreta, aqui vai:

-  Como implemento a funcionalidade, que apenas permite utilizar a aplicação mediante a apresentação de um login e de uma senha? ?

Já que estou com dificuldades em começar deveria criar uma esquematização do que me é pedido?

Link to comment
Share on other sites

acho que o problema principal aqui é quereres fazer tudo de uma vez em vez de começares por problemas pequenos.

faz o top-down do teu programa, divide-o em partes e começa a tratar de cada parte.

isto com a ajuda de uma descrição do problema (em texto corrido), é capaz de ajudar.

começas por escrever que tens de desenvolver uma aplicação tal e para isso precisas de fazer 'isto e aquilo', tens de começar por este passo e depois passar para outro. estás a perceber onde quero chegar com isto?

parecem demagogias mas acho que entendes onde quero chegar.

acho que assim consegues iniciar por algum lado e à medida que avanças vais ver o teu programa resolvido.

já agora, a questão relacionada com o login encontras certamente aqui http://www.macoratti.net/vbn_log1.htm

cumps

Link to comment
Share on other sites

Bem, acho que o login não terá de ser tão complicado, no enunciado não fala em bases de dados. Podes criar um novo formulário com duas textbox, e um botão, que irá validar o input. Os dados de acesso que irás comparar podem estar dentro do programa, sob forma de variáveis, por exemplo, a função clique do teu botão de validar:

Dim theUser as String = "username"
Dim thePass as String = "password"

if txtUser.text = theUser and txtPass.text = thePass then
  ' abrir o formulário com a capacidade do parque, etc
else
  ' não acertou na pass, dar uma simples mensagem de erro.
end if

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Se queres um trabalho mais rico, devias iniciar por estruturar uma base de dados, o que te daria pontos, essa base de dados pode te guardar todos os registos e assim podes fazer estatísticas, tipo a que horas tem mais entradas etc...

depois pode começar por fazer um caminho de quem entra no estacionamento, e assim vais estruturando o teu trabalho.

Cumps Paulo Silva

Link to comment
Share on other sites

Gostaria de agradecer a todos pelas dicas que me deram foram mais do que uteis; vou começar então por estruturar o trabalho em papel e ver o que preciso fazer para resolver os problemas passo a passo. O programa neste semestre, não se deve usar bases de dados pois será usado no programa do semestre seguinte(mas agradeço a mesma a ideia).Vou fazer o melhor que posso e se tiver alguma dúvida espero que possam ajudar-me a mesma.

Mais uma vez extremamente agradecido pelo vosso tempo e ajuda.

Link to comment
Share on other sites

Dim theUser as String = "username"
Dim thePass as String = "password"

if txtUser.text = theUser and txtPass.text = thePass then
  ' abrir o formulário com a capacidade do parque, etc -
Nesta parte criei um novo formulario que sera o menu.Chamei a form de Menu e nesta parte meti apenas Menu.Show, mas da me erro.O que se passa?
else
  ' não acertou na pass, dar uma simples mensagem de erro.
end if

Link to comment
Share on other sites

Olá outra vez.

Procurei aqui no fórum e acabei por usar outro código que resultou melhor ainda e fiquei todo contente

Public Class Form1
    Dim r As Integer
    Dim Password As String
    Dim Username As String


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Username = InputBox("Login")
        If Username = "Morador" Then
            MsgBox("Nome correcto")
        Else
            MsgBox("Nome incorrecto")
            End
        End If
        Password = InputBox("Password")
        If Password = "123" Then
            r = MsgBox("Abrir", vbYesNo)
            If r = vbNo Then
                End
            ElseIf r = vbYes Then
                MsgBox("Seja Bemvindo")
            End If
        Else
            MsgBox("Password incorrecta")
            End
        End If

    End Sub
End Class

Ficou melhor do que eu pensei. Agora estou a trabalhar no menu, a tentar decifrar quantos botões vou precisar.

Mais uma vez obrigado pela ajdua.

Link to comment
Share on other sites

Peço desculpa por ser chato mas já encravei outra vez nos seguintes pontos:

2 - O programa deve calcular o valor a pagar pelo utente, após a indicação do número de horas e minutos de utilização do parque, de acordo com as seguintes condições:

a) Preço hora – 1 €.

b) A unidade mínima de facturação são 15 minutos. Exemplo 1h e 10 m, deve ser taxado como 1h e 15m.

c) Após as primeiras 24 horas, é sempre taxado o valor por um dia de utilização, no valor de 5 Euros/dia. Exemplo : 50 horas de utilização, deve pagar:

1º dia – 24 Euros

2º dia - 5 Euros

3º dia – 5 Euros

d) Os residentes devem pagar apenas 50% dos valores apresentados acima.

e) Aos veículos pesados é acrescentada uma taxa fixa de 1 euro, após o cálculo, de acordo com as regras anteriores.

A parte de facturar 15m está me a deixar cheio de dúvidas. Eu só consegui chegar a isto

       vtempo = txtempo.Text
       vhoras = vtempo \ 60
       vmin = vtempo Mod 60

Sendo que vtempo é variavel que vai controlar o tempo e as outras 2 as horas e os minutos respectivamente como faço para ele aceitar me os 15m?

Alguém pode me ajudar?

Link to comment
Share on other sites

A questão dos minutos podes fazer assim: divides o tempo total em parcelas de 15 minutos, isto é, divides o número total de minutos por 15. Como uma regra do parque é, se estiver 5 minutos paga como se estivesse 15, se estiver 22, já paga como 30, podes arredondar o resultado da divisão sempre por excesso. Por exemplo:

5 minutos

5 / 15 = 0.33333333 -> arredondar por excesso, fica 1, logo 1 * 0.25 = 0.25

16 / 15 = 1.46666667 -> arrendador por excesso, fica 2, logo 2 * 0.25 = 0.50

Notas:

- Os 0.25 correspondem a 1/4 de euro, tal como 15 minutos correspondem a 1/4 de hora

- Podes usar a função Math.Ceiling para arredondar por excesso

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Para calculares o pagamento por dias e utilizado o mesmo esquema do softclean

Podes fazer assim:

Ao nº de horas que o carro permaneceu no parque retiras logo a partida 24 horas depois divides as horas que te sobra por 24 e fazes o tal arredondamento por excesso e por fim somas 24 assim dá o valor do carro com mais de 24 horas no parque.

Exemplo:

Carro com 50 horas

50 – 24 = 26

26/24 =1.08333 arredondar por execsso (2)

2*5+24 =34

c) Após as primeiras 24 horas, é sempre taxado o valor por um dia de utilização, no valor de 5 Euros/dia. Exemplo : 50 horas de utilização, deve pagar:

1º dia – 24 Euros

2º dia - 5 Euros

3º dia – 5  Euros

Link to comment
Share on other sites

Conforme ja foi dito, antes de te lancares a programar comeca por uma analise do problema, podes inclusive utilizares um pseudo-codigo para te ajudar na tua analise, o que muitas das vezes permite um melhor entendimento da estrura do programa.

Assim muio de repente e lendo um pouco na diagonal:

Objectos

Parque - Capacidade

Carro - Entrada

Saida

Morador

Pesado

Veiculos no Parque, sao todos os objectos veiculos cuja data de saida esta a <null>

Procedimento - Entrada de Veiculos (botao)

Se numero de veiculos no parque = capacidade, nao permite entrada

Adiciona o veiculo ao parque, e marca a hora de entrada do veiculo

Procedimento - Saida de veiculos

( Caixa )

Saber o veiculo que vai sair (normalmente e entregue um ticket na entrada)

Marcar a hora de Saida

Hora da Saida menos a Hora de entrada = tempo de utilizacao do parque

Valor a Pagar = Efectuar calculo do valor a pagar(tempo de utilizacao do parque)

Function - Calculo de valor a pagar de acordo com as regras (utilizar a ajuda que ja foi concedida em posts anteriores).

E morador dimiuir o valor calculado em 50%

E pesado aumentar 1€ ao valor calculado

......

Link to comment
Share on other sites

Antes de mais muito obrigado a todos pela ajuda e em especial ao Pwyll, softclean e ao Zeant. Estou a perceber mais ou menos o que querem dizer. Portanto preciso de 2 objectos(carros e parque) e 2 procedimentos.

A minha questão é a seguinte na aula foi usado um "contador" penso que isso poderia ser aplicado aqui na contagem dos carros.Ou estou errado? Neste momento no Menu estou com um NumericUpDown para o utilizador por o nº de carros no parque e um botão "Adicionar viatura", se bem que ao ultrapassar o nº máximo de capacidade do parque, aparece uma messagebox a dizer que excedeu o nº.

vcont = 0
        If Lotação.Value > 100 Then
            MsgBox("A lotação deste parque é apenas de 100 lugares", vbYes)
        End If
        Do

            vcont = vcont + 1
            If vcont > 100 Then
                MsgBox("Lotação Cheia")
                btadicionar.Visible = False
            End If

        Loop Until vcont = 100
    End Sub

Funciona, e faz o  que é pedido no trabalho(se bem) que não fala nada em NumericUpDown.Vou utilizar o que o Pwyll disse e ver o que dá, se alguém tiver mais alguma sugestão agradeço.

Um Muito Obrigado a todos.

Link to comment
Share on other sites

Isso depende se o interesse é adicionar carros automaticamente, ou a pedido (ao clicar num botão). Acho que o interesse é ser a pedido, por isso acho que esse código não serve. De forma básica, a cada pedido de entrada no parque efectuado com sucesso, incrementas esse tal contador, mas só nessa situação, e apenas uma vez (não precisas de usar o while, mas os ifs necessitas sempre para verificar se já excedeu o limite ou não.

Recomendo-te ainda a utilizar uma variável global para o limite, em vez de indicares explicitamente 100, porque segundo o que li do teu enunciado, numa fase posterior vai ser possível aumentar ou diminuir este limite, por isso numa variável vai-te facilitar o trabalho no futuro. Para já, podes definir essa variável a começar em 100. Nas fases seguintes, só terás de a alterar.

Quanto ao ceiling, vê a secção de exemplos desta página: http://msdn.microsoft.com/en-us/library/zx4t0t48.aspx

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Portanto neste caso vou utilizar

Dim a As Double
Dim returnValue As Double

returnValue = Math.Ceiling(a)

Sendo que "a" é a minha variável "valor" e em vez de Double fica Integer?

Quando ao Do tive a rever e acho que tens razão pois só deve ser com If's porque tenho que controlar tudo.

Mais uma questão em relação ao procedimento de entrada estava a pensar o utilizador ao clicar no botão "adicionar viatura" poderia aparecer um msgbox a perguntar logo se era, morador, pesado ou normal.

Como crio uma msgbox assim? Sei que sim ou não é apenas vbYesNo, mas se eu quiser fazer uma com 3 botões como descrevi em cima?

Private Sub btadicionar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btadicionar.Click
        'MsgBox("Qual o tipo de viatura?"vb????????)
        vcont = 0
        vcont = vcont + 1
        vcapacidade = 100
        vlimite = Lotação.Value
        If Lotação.Value > 100 Then
            MsgBox("A lotação deste parque é apenas de 100 lugares", vbYes)
        End If
        If vcarro = vlimite Then
            MsgBox("Lotação Cheia")
            btadicionar.Visible = False
        End If


    End Sub

Tenho que usar 3 variaveis para cada tipo de carro? Sendo assim a alinea

If vcarro = vlimite Then

Estará mal?

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.