Jump to content

Projeto de gerir uma lista de compras


hezzDD

Recommended Posts

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 nao 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 nao 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 sao 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 to comment
Share on other sites

Vais ter que apresentar quais os erros que a compilação te dá e também em que acções tens dúvidas concretamente, tal como apresentar código que penses que seja o correcto para essas acções. Vai ser complicado alguém olhar apenas para o teu código e dizer-te de caras o que está mal!

Kurt Cobain - Grunge misses you

Nissan GT-R - beast killer

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
×
×
  • 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.