Ir para conteúdo
Fórum Script Brasil
  • 0

Problema a criar uma lista de compras para um trabalho na faculdae


hezzDD

Pergunta

Boas eu tenho um projeto na escola que consiste em gerir uma lista de compras onde temos que criar categorias, criar produtos, nome, categoria, caloria, com/sem lactose, criar lista de compras, inserir eliminar e editar produtos, ler e gravar as listas de compras em formato txt, eu fiz o codigo mas não estou a conseguir acabar e tem varios erros gostava que vissem e me dessem dicas como acabar e que erros estou a cometer, neste momento não sei como meter os produtos nem a dizer quantas calorias e lactose.

Aqui vai o codico:

 

#include <stdio.h>
#include <string.h>
#include <locale.h>


//ESTRUTURAS//
struct categoria{
    int carboidratos, verduras, frutas;
    int carnes, laticinios, lipidos;
    char nome[50];
    char lactose[50];
    char categoria[100];
    int kcl;

} lista;

// FUNÇÕES//
void criar_categorias_produto();
void mostrar_categorias();
void criar_produtos();
void inserir_listas();
void menu_principal();
void modificar_lista();
void remover_lista();
void remover_categorias();

//VARIAVES //

int listacount=1;

//FUNÇÃO MAIN//


int main(){
   menu_principal();

}


//FUNÇÕES//

void menu_principal(){
    int opcao;

    printf("\n\n-Menu\n\n");
    printf("1- Criar uma categoria\n");
    printf("2- Inserir uma lista\n");
    printf("3- Remover as listas\n");
    printf("4- Modificar uma lista\n");
    printf("5- Remover os produtos de uma lista\n");
    printf("6- Mostrar uma categoria\n");
    printf("7- Remover uma categoria\n");
    printf("8. Sair\n");
    do
    {
        printf("\n\nO que pretende fazer: ");
        scanf(" %d",&opcao);

        switch (opcao)
        {
        case 1:
            criar_categorias_produto();
            //criaçao das categorias
            break;
        case 2:
            //inserir uma lista
            inserir_lista();
            break;
        case 3:
            //remover listas
            remover_listas();
            break;
        case 4:
            //modificar listas
            modificar_lista();
            break;
        case 5:
            //remover produtos
            remover_produto();
            break;
        case 6:
            //mostrar categorias criadas
            mostrar_categorias();
            break;
        case 7:
            //remover categorias
            remover_categorias();
            exit(0);
            break;
        case 8:
            // terminar o programa
            exit(0);
            break;
        default:
            // opção inválida
            break;
        }
    }
    while (opcao != 8);
}

void criar_categorias_produto(){
// algoritmo para criar uma agenda
    char nome_categoria[50];
    char nome_categoriatxt[50];
    char nome_categoriaics[50];
    char nome_categoriacsv[50];

    FILE *categoria;

    printf("\n\nDigite o nome para a sua categoria: ");
    fflush(stdin); //limpar o buffer do teclado
    gets(nome_categoria); //obtem o nome que o utilizador escreveu

    strcpy(nome_categoriatxt,nome_categoria);
    strcat(&nome_categoriatxt, ".txt"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado
    categoria = fopen(nome_categoriatxt, "w"); // abre em modo de escrita
    if(categoria == NULL)
    {
        printf("Problemas na criacao do arquivo\n");
        return;
    }


    strcpy(nome_categoriaics,nome_categoria);
    strcat(&nome_categoriaics, ".ics");//acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .ics
    categoria = fopen(nome_categoriaics, "w"); // abre em modo de escrita
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }

    strcpy(nome_categoriacsv,nome_categoria);
    strcat(&nome_categoriacsv, ".csv");//acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .csv
    categoria = fopen(nome_categoriacsv, "w"); // abre em modo de escrita
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }

    printf("\nCategoria criada com sucesso em tres formatos de ficheiro (txt, ics, csv) !\n\n");

    fclose(categoria); //fecha o ficheiro agendas
}

void inserir_lista(){
// algoritmo para inserir uma nova lista em uma categoria
    char nome_categoria[50];
    char nome_categoriatxt[50];
    char nome_categoriaics[50];
    char nome_categoriacsv[50];

    FILE *categoria;

//abre a lista pretendida pelo o utilizador e apresenta as opcoes para adicionar os produtos
    printf("\nDigite o nome da sua lista: ");
    fflush(stdin); //limpar o buffer do teclado
    gets(nome_categoria); //obtem o nome que o utilizador escreveu

    strcpy(nome_categoriatxt,nome_categoria);
    strcat(&nome_categoriatxt, ".txt"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .txt

    strcpy(nome_categoriaics,nome_categoria);
    strcat(&nome_categoriaics, ".ics"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .ics

    strcpy(nome_categoriacsv,nome_categoria);
    strcat(&nome_categoriacsv, ".csv"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .csv

//guarda a variavel titulo indicada pelo o utilizador
    printf("Digite o titulo da lista: ");
    fflush(stdin);
    fgets(lista.categoria,50,stdin);
    lista.categoria[strlen(lista.categoria)-1]='\0';


//guarda a variavel local indicada pelo o utilizador
    printf("Digite o local da lista: ");
    fflush(stdin);
    fgets(lista.nome,50,stdin);
    lista.nome[strlen(lista.nome)-1]='\0';


//guarda a variavel descricao indicada pelo o utilizador
    printf("Digite a descricao do lista: ");
    fflush(stdin);
    fgets(lista.lactose,100,stdin);
    lista.lactose[strlen(lista.lactose)-1]='\0';

//gravaçao no txt
    categoria = fopen(nome_categoriatxt, "a+"); // abre em modo de escrita
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }
    fprintf(categoria,"\nCarboidratos: %d\n",lista.carboidratos);
    fprintf(categoria,"\nVerduras: %d\n",lista.verduras);
    fprintf(categoria,"\nFrutas: %d\n",lista.frutas);
    fprintf(categoria,"\nCarnes: %d\n",lista.carnes);
    fprintf(categoria,"\nLaticinios: %d\n",lista.laticinios);
    fprintf(categoria,"\nLipidos: %d\n",lista.lipidos);


//gravaçao em ics
    categoria = fopen(nome_categoriaics, "a+"); // abre em modo de escrita
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }
    fprintf(categoria,"\nCarboidratos: %d\n",lista.carboidratos);
    fprintf(categoria,"\nVerduras: %d\n",lista.verduras);
    fprintf(categoria,"\nFrutas: %d\n",lista.frutas);
    fprintf(categoria,"\nCarnes: %d\n",lista.carnes);
    fprintf(categoria,"\nLaticinios: %d\n",lista.laticinios);
    fprintf(categoria,"\nLipidos: %d\n",lista.lipidos);

//gravaçao no csv
    categoria = fopen(nome_categoriacsv, "a+"); // abre em modo de escrita
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }
    fprintf(categoria,"\nCarboidratos: %d\n",lista.carboidratos);
    fprintf(categoria,"\nVerduras: %d\n",lista.verduras);
    fprintf(categoria,"\nFrutas: %d\n",lista.frutas);
    fprintf(categoria,"\nCarnes: %d\n",lista.carnes);
    fprintf(categoria,"\nLaticinios: %d\n",lista.laticinios);
    fprintf(categoria,"\nLipidos: %d\n",lista.lipidos);

    printf("\nLista inserida com sucesso!\n\n");

    fclose(categoria);
}

void mostrar_categorias()
{
    // algoritmo para mostrar eventos de uma agenda
    int c;
    int opcao;
    char nome_categoria[50];
    char nome_categoriatxt[50];
    char nome_categoriaics[50];
    char nome_categoriacsv[50];

    FILE *categoria;

    printf("\n\n---------------------Menu----------------------\n\n");
    printf("1. Ficheiro txt\n");
    printf("2. Ficheiro csv\n");
    printf("3. Ficheiro ics\n");
    printf("-----------------------------------------------\n\n");
    scanf(" %d", &opcao);

    printf("\nDigite o nome da sua categoria: ");
    fflush(stdin); //limpar o buffer do teclado
    gets(nome_categoria); //obtem o nome que o utilizador escreveu

    if(opcao==1)
    {
        strcpy(nome_categoriatxt,nome_categoria);
        strcat(&nome_categoriatxt, ".txt"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .txt
        categoria=fopen(nome_categoriatxt,"r");
        if(categoria == NULL)
        {
            printf("Problemas na Criacao do arquivo\n");
            return;
        }
        printf("\n\nEsta e a categoria %s:\n\n",nome_categoriatxt);
        if (categoria)
        {
            while ((c = getc(categoria)) != EOF)
            {
                putchar(c);
            }
        }
    }
    else if(opcao==2)
    {
        strcpy(nome_categoriacsv,nome_categoria);
        strcat(&nome_categoriacsv, ".csv"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .txt
        categoria=fopen(nome_categoriacsv,"r");//abertura do ficheiro em modo leitura
        if(categoria == NULL)
        {
            printf("Problemas na Criacao do arquivo\n");
            return;
        }
        printf("\n\nEsta e a categoria %s:\n\n",nome_categoriacsv);
        if (categoria)
        {
            while ((c = getc(categoria)) != EOF)
            {
                putchar(c);
            }
        }
    }
    else if(opcao==3)
    {
        strcpy(nome_categoriaics,nome_categoria);
        strcat(&nome_categoriaics, ".ics"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .txt
        categoria=fopen(nome_categoriaics,"r");
        if(categoria == NULL)
        {
            printf("Problemas na Criacao do arquivo\n");
            return;
        }
        printf("\n\nEsta e a agenda %s:\n\n",nome_categoriaics);
        if (categoria)
        {
            while ((c = getc(categoria)) != EOF)
            {
                putchar(c);
            }
        }
    }
    else {}
    fclose(categoria);
}


void modificar_lista(){
    // algoritmo para modificar uma lista de uma categoria

    //Menu de edicao dqs listas
    int op_alterar;
    char c;
    int temp;
    int numerolista,linha_lista;
    int num_lista();
    char nome_categoria[50];

    FILE *categoria, *categoria2;

    printf("\n\n---------------------Menu de Edicao----------------------\n");
    printf("\nDigite o nome da categoria que pretende editar: ");
    fflush(stdin); //limpar o buffer do teclado
    gets(nome_categoria); //obtem o nome que o utilizador escreveu
    strcat(&nome_categoria, ".txt"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .txt
    categoria = fopen(nome_categoria, "r"); // abre em modo de leitura
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }

    //pergunta ao utilizador qual o numero do evento que pretende modificar.
    printf("\nQual a lista que pretende mudar: ");
    scanf(" %d",&numerolista);
    linha_lista= (11 * numerolista) - 9;
    //coloca ficheiro categoria no inicio.
    rewind(categoria);
    //abre um copy.txt em modo de escrita
    categoria2 = fopen("copy.txt", "w"); // abre em modo de escrita
    if(categoria2 == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }
    c = getc(categoria);

    while (c != EOF)
    {
        if (c == ' ')
        {
            temp++;
        }
        //até á linha da lista, copia a informaçao de um ficheiro para o outro
        if (temp != linha_lista)
        {
            putc(c, categoria2);
        }
        else //quando a linha da lista aparece
        {
            while ((c = getc(categoria)) != ' ')
            {

                fprintf(categoria,"\nLsta: %d\n",listacount++);
                num_lista();

//escreve no ficheiro txt(categoria) a categoria indicada pelo o utilizador
                printf("Digite a categoria da lista : ");
                scanf(" %d",&lista.carboidratos);
                fprintf(categoria2,"\nCArboidratos: %d\n",lista.carboidratos);

//escreve no ficheiro txt(categoria) a categoria indicada pelo o utilizador
                printf("Digite a categoria da lista : ");
                scanf(" %d",&lista.verduras);
                fprintf(categoria2,"Verduras: %d\n",lista.verduras);

//escreve no ficheiro txt(categoria) a categoria indicada pelo o utilizador
                printf("Digite a categoria da lista: ");
                scanf(" %d",&lista.frutas);
                fprintf(categoria2,"Frutas: %d\n",lista.frutas);

//escreve no ficheiro txt(categoria) a categoria indicada pelo o utilizador
                printf("Digite a categoria da lista: ");
                scanf(" %d",&lista.carnes);
                fprintf(categoria2,"Carnes: %d\n",lista.carnes);

//escreve no ficheiro txt(categoria) a categoria indicada pelo o utilizador
                printf("Digite a categoria da lista: ");
                scanf(" %d",&lista.lipidos);
                fprintf(categoria2,"Lipidos: %d\n",lista.lipidos);

//escreve no ficheiro txt(categoria) a categoria indicada pelo o utilizador
                printf("Digite a categoria da lista: ");
                scanf(" %d",&lista.laticinios);
                fprintf(categoria2,"Laticinios: %d\n",lista.laticinios);
            }

            fflush(stdin);//limpar o buffer do teclado
            putc(' ', categoria2);  //poe ' ' no novo ficheiro
            while ((c = getchar()) != ' ')
            {
                putc(c, categoria2);
                //obtem os dados enviados pelo utilizador e copias para o segundo ficheiro
                fputs(" ", categoria2);
                temp++;
            }
            //continua ate ao fim do ficheiro
            c = getc(categoria);
        }
        //fecha ambos os ficheiros
        fclose(categoria);
        fclose(categoria2);
        //elimina o ficheiro original
        remove(nome_categoria);
        //muda o nome do novo ficheiro para o nome do ficheiro original e abre-o em modo leitura
        rename("copy.txt", nome_categoria);
        categoria=fopen(nome_categoria,"r");
        if(categoria == NULL)
        {
            printf("Problemas na Criacao do arquivo\n");
            return;
        }
        //le o caratere do ficheiro
        c = getc(categoria);
        //ate o ultimo carater do ficheiro ser encontrado
        while (c != EOF)
        {
            printf("%c", c);
            //todos os carateres obtidos são copiados
            c = getc(categoria);
        }
        //fecha o ficheiro
        fclose(categoria);
    }
}

void remover_listas()
{
    // algoritmo para remover um evento de uma agenda
    FILE *categoria;
    char nome_categoria[50];
    char nome_categoriatxt[50];
    char nome_categoriaics[50];
    char nome_categoriacsv[50];

    printf("\nDigite o nome da lista que pretende remover das categorias : ");
    fflush(stdin); //limpar o buffer do teclado
    gets(nome_categoria); //obtem o nome que o utilizador escreveu

    strcpy(nome_categoriatxt,nome_categoria);
    strcat(&nome_categoriatxt, ".txt"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .txt
    categoria=fopen(nome_categoriatxt,"w");
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }

    strcpy(nome_categoriaics,nome_categoria);
    strcat(&nome_categoriaics, ".ics"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .ics
    categoria=fopen(nome_categoriaics,"w");
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }

    strcpy(nome_categoriacsv,nome_categoria);
    strcat(&nome_categoriacsv, ".csv"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .csv
    categoria=fopen(nome_categoriacsv,"w");
    if(categoria == NULL)
    {
        printf("Problemas na Criacao do arquivo\n");
        return;
    }

    printf("\nListas removidas com sucesso\n");
    fclose(categoria);
}

void remover_categorias()
{
    char nome_categoria[50];
    char nome_categoriatxt[50];
    char nome_categoriaics[50];
    char nome_categoriacsv[50];

    printf("\nDigite o nome da categoria que pretende remover: ");
    fflush(stdin); //limpar o buffer do teclado
    gets(nome_categoria); //obtem o nome que o utilizador escreveu

    strcpy(nome_categoriatxt,nome_categoria);
    strcat(&nome_categoriatxt, ".txt"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .txt
    remove(nome_categoriatxt);

    strcpy(nome_categoriaics,nome_categoria);
    strcat(&nome_categoriaics, ".ics"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .ics
    remove(nome_categoriaics);

    strcpy(nome_categoriacsv,nome_categoria);
    strcat(&nome_categoriacsv, ".csv"); //acrescenta ao nome que o utilizador indicou o formato de ficheiro em que vai ser gravado, neste caso .csv
    remove(nome_categoriacsv);

    printf("\nCategoria removida com sucesso\n\n");
}
 

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...