• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Zebugamadruga

Parque de Estacionamento

102 mensagens neste tópico

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. :D

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas

se colocasses o topico na parte de VB.Net iras ter mais respostas certamente..

ja agora o projecto envolve base de dados?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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?!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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? :hmm:

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que erro te dá? Certifica-te que deste mesmo o nome "Menu" ao formulário na janela de propriedades.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

......

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Antes de mais perdoa a minha ignorancia softclean mas nunca usei essa função Math.Ceiling seria possivel dares me um exemplo por favor? Desculpa a minha insistência!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

Podes fazer logo um local onde indicas todas as informações que o teu parque de estacionamento possui. Por ex: Do responsável do parque até à capacidade do mesmo.

Depois pegas na variável que contém a informação da capacidade e indo actualizando-a conforme vão entrando e saindo veículos.

Ps: Não esqueças que o parque pode ter a lotação total dividida em duas partes: uma para ligeiros e outra para pesados ou não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros 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?

O tipo de dados não é muito importante, mas se consultares a documentação, ele devolve double por causa de limites, mas podes usar como se fosse um integer, mesmo sendo um double.

(...) 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?

Para isto o ideal é abrires um formulário e fazeres tudo lá. Mas não é um formulário convencional, mas sim o Dialog form. Ou seja, um daqueles que não deixa ir para a janela de baixo, enquanto não deres uma resposta válida. Na cadeira, deste alguma matéria relativa a Dialog forms? Se sim, peço que revejas os teus apontamentos, pois assim explicar-te à pressa ainda te deixo mais confuso. Se não deste, o melhor é procurar outra solução.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não dei isso nas aulas nem falo ideia do que seja.

Acabei por desistir da ideia e estou a utilizar radio button (Morador,Ligeiro e Pesado).Está a funcionar.

vtempo=txttempo.text
vtemponoparque=vtempo-24
vpagar=Math.Ceiling(vtemponoparque)/24
vtotal=vpagar*5+24
If Rpesado.Checked Then
vtotal=vtotal+1
ElseIf Rmorador.Checked Then
vtotal=vtotal-(vtotal*50)/100
End If
lblresultado.text="Total a pagar" & vtotal & "€"

Neste momento o Menu contem, 3 radiobutton(Rpesado,Rligeiro,Rmorador), uma textbox onde se insere o tempo que a viatura esteve no parque, um botão pagar, um NumericUpDown para controlar o numero de viaturas e um botao "Adicionar Viatura".

A minha dúvida agora é a seguinte como ligo estes 2 procedimentos ("Adicionar viatura" com"Tipo de viatura e pagar").

A funcionalidade controlar os veiculos que ja estao no parque é como o vcontador?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Alguém sabe como mudar imagens usando um timer?Tenho 4 imagens e queria que elas mudassem de x em x tempo.A fingir que seria imagens captadas por uma camara de vigilancia.Usei o comando Visible, mas elas tem de mudar por si.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

No enunciado pareceu-me ver que só te pediam uma única imagem, mas se quiseres fazer com 4 imagens podes fazer o seguinte: cria uma variável global do tipo inteiro, seja nrCam, iniciada a 1. Na pasta correcta, cria as 4 imagens, com os nomes foto1.jpg, foto2.jpg, foto3.jpg e foto4.jpg.

A tua função de timer terá agora de incrementar uma unidade por cada imagem, para a rodar. Por exemplo:

if nrCam > 4 then
    nrCam = 1
end if

picCamera.image = String.format("imagens/foto{0}.jpg", nrCam )
nrCam +=1

A função String.format foi usada para evitar estar a concatenar números, mas podes usar a concatenação, se preferires. De resto, acho que a ideia é explicita. O intervalo do timer pode ser um da tua escolha, conforme a duração de transição que queres passar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora