1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Ajuda em programa de c++(Urgente)(cont)

Discussão em 'Programação' iniciada por KaRrEiRa, 13 de Janeiro de 2008. (Respostas: 0; Visualizações: 1164)

  1. Desculpa inda sou novo nisto....
    "Para o efeito,
    é necessário ter a informação em cada momento em relação às
    características técnicas de cada projecto, assim como do seu estado desde a
    encomenda feita pelo cliente, até à sua aprovação e posterior entrada em execução
    em obra.
    Em cada instante, pretendese
    ter a informação relativa aos projectos, armazenada
    em ficheiro. Havendo neste caso um ficheiro Project_in.txt, que contém a
    informação de cada um dos projectos em execução e outro ficheiro

    Project_out.txt
    , que guarda a informação dos projectos concluídos.
    Os projectos em execução, podemse
    encontrar em dois estados distintos:

    encomenda (1)
    , execução (2) ou concluído (3). Por outro lado, os projectosgrama
    concluídos, podem estar: em aprovação (3), aprovados (4) ou em obra (5).
    Em termos organizaconais, sempre que um projecto em execução, estiver no
    estado concluído, significa que este se encontra preparado para ser apagado do
    ficheiro Project_in.txt e passar para o ficheiro Project_out.txt.

    Em conson
    ância com o exposto, o programa deverá realizar as seguintes tarefas:

    a)
    Efectuar a introdução dos dados, relativos a um novo projecto, cujo estado inicial
    deverá ser encomenda (1), e posterior adição ao ficheiro Project_in.txt;

    b)
    Efectuar a leitura da informação contida em cada um dos ficheiros
    (Project_in.txt e Project_out.txt), para a respectiva estrutura de dados
    adequada;

    c)
    Permitir a impressão do ecrã do computador da informação, relativa a um dado
    projecto, a partir da sua leitura do ficheiro Project_in.txt ou Project_out.txt,
    quer este ainda se encontre no primeiro ou já esteja no segundo. Alterar o
    estado de cada um dos projectos, em função do seu estado actual;

    d)
    Remover um projecto que esteja no estado concluído (3) no ficheiro

    Project_in.txt
    e, adicionálo
    ao ficheiro Project_out.txt, colocando o seu estado
    em aprovação (3);

    e)
    Efectuar a pesquisa dos projectos em cada um dos ficheiros, em função do seu
    estado, ID do Projecto e Nome do Cliente;
    Sugerese
    que no início do programa, se faça sempre o carregamento da
    informação contida em cada um dos ficheiros Project_in.txt ou Project_out.txt,
    caso estes existam, para uma estrutura de dados adequada. Caso não existam

    ainda, estes ficheiros deverão ser criados.

    Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    #include <malloc.h>
     
    typedef struct projecto {
    int id_proj; //ID_Proj = xxxGrupoTurno
    char nome_obra[80];
    int estado;
    float potencia_kw;
    int n_circuito_tomada16;
    int n_circuito_ilumi10;
    int n_circuito_maq20;
    char nome_cliente[80];
    char telf[9];
    char morada[80]; 
    struct projecto *seg, *ant; 
    }projecto;
    int id_proj,estado,n_circuito_tomada16,n_circuito_ilum i10,n_circuito_maq20 ;
    float potencia_kw;
    void pausa(){ 
    char pausa;
    pausa=getch();
    }
    void empresa(){
    system("cls");
    printf("\nEmpresa de Tensão.Lda\n");
    }
    int menu(){ //menu principal
    int op;
    empresa();
    printf("\nQual e a sua opcao?\n");
    printf("\n\t(1) -> Inserir novo projecto;");
    printf("\n\t(2) -> Remover projecto;");
    printf("\n\t(3) -> Alterar projecto;");
    printf("\n\t(4) -> Procurar projecto;");
    printf("\n\t(5) -> Listar projectos;");
    printf("\n\t(6) -> Gravar projectos;");
    printf("\n\t(7) -> Carregar projectos;");
    printf("\n\t(8) -> Ordenar lista;");
    printf("\n\t(9) -> Sair;\n\n");
    do{
    op=getch()-48;
    }while(op<1 || op>9 && !int());
    return op;
    }
    void insere(projecto **inicio, projecto **fim){ 
    projecto *aux;
     
    aux=(projecto*)malloc(sizeof(projecto));
    if(aux==NULL)
    {
    empresa();
    printf("Erro de alocacao de memoria!");
    return;
    }
    empresa();
    printf("\nIntroducao de dados do Projecto:\n");
    scanf("%d",&id_proj);
    printf("\nNome da Obra: ");
    fflush(stdin);
    gets(aux->nome_obra);
     
    printf("\nEstado: ");
    fflush(stdin);
    scanf("%d",&estado);
    printf("\nPotência em KW: ");
    fflush(stdin);
    scanf("%f",&potencia_kw);
    printf("\nNúmero de Circuito com Tomadas com 16A: ");
    scanf("%d",&n_circuito_tomada16);
    printf("\nNúmero de circuitos de iluminação com 10A: ");
    fflush(stdin);
    scanf("%d",&n_circuito_ilumi10);
    printf("\nNúmero de circuitos de maquinas com 20A: ");
    fflush(stdin);
    scanf("%d",&n_circuito_maq20);
    printf("\nNome do Cliente: ");
    fflush(stdin);
    gets(aux->nome_cliente);
    printf("\nNúmero de Telefone: ");
    fflush(stdin);
    gets(aux->telf);
     
    printf("\nMorada do Cliente: ");
    fflush(stdin);
    gets(aux->morada);
     
    if(*inicio==NULL) 
    {
    *inicio=*fim=aux;
    aux->seg=NULL;
    }
    else 
    {
    (*fim)->seg=aux;
    *fim=aux;
    aux->seg=NULL;
    }
    }
    void listar(projecto *inicio){ 
    projecto *aux;
    aux=inicio;
    empresa();
     
    if(!aux) 
    {
    printf("\n\nLista vazia!!");
    }
    else
    {
    do{
    printf("\n\nIntroducao de dados do Projecto: %d",id_proj);
    printf("\n\nNome da Obra: %s", aux->nome_obra);
    printf("\n\tEstado: %d",estado);
    printf("\n\tPotência em KW: %f",potencia_kw);
    printf("\n\tNúmero de Circuito com Tomadas com 16A: %d",n_circuito_tomada16);
    printf("\n\tNúmero de circuitos de iluminação com 10A: %d",n_circuito_ilumi10);
    printf("\n\tNúmero de circuitos de maquinas com 20A: %d",n_circuito_maq20);
    printf("\n\tNome Cliente: %s", aux->nome_cliente);
    printf("\n\tTelefone: %s", aux->telf);
    printf("\n\tMorada do Cliente: %s", aux->morada);
    aux=aux->seg;
    }while(aux!=NULL);
    }
    pausa();
    }
    projecto *remove(projecto **inicio){ 
    projecto *aux, *ant, *ret;
    int av=1;
    char projectos[50];
    empresa();
    printf("Introduza o projecto que pretende eliminar: ");
    fflush(stdin);
    gets(projectos);
     
     
    if(*inicio==NULL) 
    {
    ret=NULL;
    printf("\nO registo %s nao foi encontrado!!\n", &projectos);
    pausa();
    return NULL;
     
    }
    else 
    {
    ant=aux=*inicio;
    while(av){
    if(aux==NULL) 
    av=0;
    else if(!strcmp(aux->nome_obra,projectos)) 
    av=0;
    else 
    {
    ant=aux;
    aux=ant->seg;
    }
    }
     
    if(aux!=NULL)
    {
    ret=aux;
    if(*inicio==aux)
    *inicio=aux->seg;
     
    else
    ant->seg=aux->seg;
     
    }
    else
    ret=NULL;
    }
    return(ret);
    }
    void gravar(projecto *inicio, char n_fich[]){ 
    projecto *info;
    FILE *fp;
    info=inicio;
    if((fp=fopen(n_fich,"w"))==NULL) 
    {
    empresa();
    printf("\nAbertura para escrita de dados nao autorizada!!");
    pausa();
    return;
    }
    empresa();
    printf("\nDados guardados com sucesso!!\n");
    pausa();
    info=inicio;
    while(info)
    {
    fwrite(info,sizeof(*info),1,fp);
    info=info->seg; 
    }
    fclose(fp);
    }
    void carregar(projecto **inicio, projecto **fim, char n_fich[]){ 
    int size;
    projecto *info, *temp;
    FILE *fp;
    if((fp=fopen(n_fich,"r"))==NULL)
    {
    empresa();
    printf("\nNao pode abrir ficheiro para leitura ou o ficheiro nao existe!!");
    pausa();
    menu();
    }
    else{
    printf("\nDados carregados com sucesso!!...");
    pausa();
    size=sizeof(projecto); 
    info=(projecto*)malloc(size); 
     
    if(!info) 
    {
    empresa();
    printf("\nMemoria esgotada!!");
    pausa();
    return;
    }
    *inicio=*fim=info; 
    fread(info,sizeof(*info),1,fp); 
    while(!feof(fp)){
    info->seg=(projecto*)malloc(size);
    if(!info->seg)
    {
    empresa();
    printf("\nMemoria esotada!!");
    pausa();
    return;
    }
    temp=info;
    info=info->seg;
    fread(info,sizeof(*info),1,fp);
    }
    free(temp->seg);
    temp->seg=NULL;
    *fim=temp;
    fclose(fp);
    }
    menu();
    }
    void sair(projecto *inicio){ 
     
    char sai, alt;
    do{ 
    empresa();
    printf("\nTem a certeza que pretende sair (s/n)?\n");
    sai=getch();scanf("%c", &sai);
    }while((sai!='s') && (sai!='S') && (sai!='n') && (sai!='N')); 
    switch(sai){ 
    case 's': case 'S': do{ 
    empresa();
     
    printf("\nDeseja guardar as alteracoes feitas [s/n]?\n");
    alt=getch();scanf("%c", &alt);
    }while((alt!='s') && (alt!='S') && (alt!='n') && (alt!='N'));
     
    switch(alt){
    case 's': case 'S': empresa();
     
    gravar(inicio,"Projectos");
    printf("\n\nPrograma desligado!!\n");
    exit(0);
    break;
    case 'n': case 'N': empresa();
     
    printf("\n\nPrograma desligado!!\n");
    exit(0);
    break;
    }
     
    case 'n': case 'N': menu(); break;
     
    } 
    }
    void troca(projecto *info,projecto *temp){
    projecto *aux;
    aux=(projecto *) malloc (sizeof(*aux)); 
    *aux=*info; 
    *info=*temp;
    *temp=*aux;
    free(aux);
    }
    void ordena (projecto *inicio,projecto *fim){ 
    projecto * info,*temp;
    int houve_troca=1;
    while(houve_troca){
    info=inicio;
    houve_troca=0;
    while(info !=fim){
    if(strcmp(info->nome_obra,info->seg->nome_obra)>0)
    {
    temp=info->seg; 
    troca(info,temp); 
    temp->seg=info->seg;
    info->ant=temp->ant;
    info->seg=temp;
    houve_troca=1L;
    }
    info=info->seg;
    }
    }
    }
     
    void main(){
     
    projecto *cabeca,*cauda,*retirar;
    cabeca=cauda=NULL;
    int opcao;
    char a;
     
     
    do{ 
    opcao=menu();
     
    switch(opcao){ 
    case 1:insere(&cabeca,&cauda); break; 
    case 2:retirar=remove(&cabeca);
     
    empresa();
    if(retirar==NULL)
    {
    printf("Este projecto nao consta no ficheiro!!\7");
    pausa();
    }
    else
    if(!retirar){ 
    do{ 
    empresa();
     
    printf("Tem a certeza que pretende eliminar este projecto [s/n]?\n");
    scanf("%c",&a);
    }while(a!='s' && a!='S' && a!='n' && a!='N'); 
    switch(a){ 
    case 's': case 'S': 
    empresa();
     
    printf("\n\nProjecto %s removido com sucesso!!\n",retirar->nome_obra);
    pausa(); break;
    case 'n': case 'N': menu(); break;
    } 
    } break; 
    // case 3:alterar(cabeca,cauda); break;
     
    // case 4:busca(cabeca,cauda); break;
    case 5:listar(cabeca); break;
    case 6:gravar(cabeca,"Projectos"); break;
    case 7:carregar(&cabeca,&cauda,"Projectos"); break;
    case 8:ordena(cabeca,cauda); break;
    case 9:sair(cabeca); break;
     
    } 
    }while(1)
    }
    ele corre mas nao consigo fazer aquela cena dos ficheiros nem fazer alteração do projecto nem fazer o procurar do projecto....
    Agradecia que me ajudassem. E mesmo urgente...
    cumprimentos
     

Partilhar esta Página