nDray_Dz Posted December 7, 2009 at 05:56 PM Report Share #299098 Posted December 7, 2009 at 05:56 PM Boas tardes. Ora portanto, eu preciso de ajuda num trabalho de C, para final do semestre. Até aqui tudo normal, não fosse eu e o resto do meu grupo percebermos pouco ou nada da linguagem em questão. Normalmente eu até nem viria pedir ajuda, mas a verdade é que o tempo não é propriamente muito e as frequências abundam. 😉 Passando ao problema em questão: (enunciado) • aceitar um pedido de emissão de novo BI; • aceitar um pedido de renovação de um BI; • executar um pedido – neste caso, deverá: 1. escolher o pedido mais antigo; 2. se for nova emissão: validar (numa lista de cidadãos com BI) que não existe ninguém registado com o mesmo nome e data de nascimento. Em caso afirmativo, deve emitir uma mensagem de erro adequada. Caso contrário, o sistema indicará novo número de BI e efectuará o registo do ”novo cidadão”na sua lista; 3. se for uma renovação: o sistema irá verificar se, de facto, já existe BI e, em caso afirmativo, deve registar (mais) uma renovação de BI; caso não exista, deve assinalar o erro e pedir para efectuar nova emissão de BI; • listar os pedidos pendentes ordenados do mais recente para o mais antigo; • contar quantos pedidos estão pendentes e qual a data do mais antigo; • permitir a alteração da fila de pedidos com um pedido urgente; • . . . As listas (de pedidos e de cidadãos já registados) deverão ser implementadas usando estruturas dinâmicas de dados adequadas e serão, na abertura de cada dia, recolhidas de ficheiros FIXOS e, no final de cada dia, armazenadas nesses mesmos ficheiros. Deverá ser disponibilizado um menu interactivo para efectuar (pelo menos) as operações acima descritas e não esquecer que o programa deve apresentar testes de correcção (validação) dos dados com mensagens de erro adequadas. As listas deverão ser implementadas usando estruturas dinâmicas de dados adequadas. O problema aqui é mesmo a falta de tempo e ninguém ter a menor ideia de por onde pegar para começar o programa. Como é obvio não estou a pedir que façam o trabalho por nós. Só queremos assim um empurrãozinho pelo que vos peço era se me podiam ajudar a definir uma estratégia ou "pseudo-código" para o programa de forma a que pelo menos nos possamos orientar. ? Obrigado Link to comment Share on other sites More sharing options...
_7_up_ Posted December 7, 2009 at 08:40 PM Report Share #299128 Posted December 7, 2009 at 08:40 PM Se eu tivesse de fazer esse trabalho começava por definir o tipo abstracto de dados (ADT) que precisava para guardar a informação. Depois adicionava-lhe a funcionalidade de escrever e ler a estrutura de memória para ficheiro. Depois disso era sempre a andar. Para este caso parece-me que um ADT de 1ª ordem é o ideal, ou seja um ADT que seja possível criar várias instâncias, já que vão precisar de um para os BI's já emitidos e outro para os pedidos pendentes de emissão e renovação de BI. E talvez outro para os pedidos urgentes, embora isto dependa da estratégia, já que podem estar todos misturados. Para a implementação do ADT usava uma lista duplamente ligada, já que parece ser o ideal, porque da logo para todas as operações sem complicar muito. Se não souberem como se fazem essas estruturas de dados há muita informação por ai, de qualquer forma deixo um link para uns acetatos que podem ajudar. http://web.ist.utl.pt/fabio.ferreira/material/iaed/acetatos.pdf Boa sorte. Por TheDark: não percebi porque não colocaste o link normalmente Link to comment Share on other sites More sharing options...
IRX773 Posted December 8, 2009 at 12:34 PM Report Share #299236 Posted December 8, 2009 at 12:34 PM Para a fila acho que um vector ou adicionar um id (um int que ia sendo incrementado ao longo dos pedidos todos) já resolvia o problema da data (acho que com uma função existente na biblioteca time.h também dá mas não me recordo da função) e da ordem crescente de pedidos. A fila ser alterada era mostrando uma lista dos pedidos e ter a possiblidade de alterar esse tal id. Saber se existe já pessoal com esse nome era fazer um case(se já existi-se) não deixava registar; else: deixava registar |||| Para saber se já existia era fazer uma pesquisa no ficheiro caso usem ficheiros ou no programa caso sejam dados voláteis. Para a renovaçao de BI's acho que quando fosses a inserir um BI novo podias acrescentar à mão a data do BI logo quando fosse a renovar era só alterar essa data. Épá ... Eu não sei nem soube explicar muito bem mas pergunta que eu ajudo. Link to comment Share on other sites More sharing options...
nDray_Dz Posted December 8, 2009 at 07:48 PM Author Report Share #299348 Posted December 8, 2009 at 07:48 PM Obrigado pelas vossas respostas. Com elas já conseguimos ter algumas luzes sobre o que fazer, mas provavelmente vão surgir (bastantes) dúvidas pelo caminho. Amanhã iremos começar a fazer algumas experiências e em caso de dúvidas iremos postar aqui na esperança de alguma ajuda. Obrigado 😉 Link to comment Share on other sites More sharing options...
IRX773 Posted December 8, 2009 at 07:53 PM Report Share #299350 Posted December 8, 2009 at 07:53 PM Eu tou disposto a ajudar 😉 Link to comment Share on other sites More sharing options...
nDray_Dz Posted December 10, 2009 at 05:37 PM Author Report Share #299671 Posted December 10, 2009 at 05:37 PM Boas. Primeira dúvida: Já conseguimos criar diferentes estruturas. Uma para os bi's que já existem e outra para os pedidos. Agora os problemas... Como fazer para distinguir entre pedidos de emissao e renovaçao de bi's? E já agora, como fazer com que o programa copie os dados de uma estrutura para a outra? Mais para a frente iremos ter outro problema, mas vou colocá-lo já aqui para ficar tratado. A nossa professora ainda não nos falou em como manipular ficheiros, pelo gostaríamos que nos pudessem indicar como fazer para carregar os dados para a memória ao abrir o programa e gravar as alterações ao fechá-lo...isto se for possível. cumps 😄 p.s.: Vimos os acetatos sobre as listas duplamente ligadas, mas sinceramente não conseguimos perceber muito bem 😄 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now