hezzDD Posted January 8, 2017 at 01:01 PM Report Share #601903 Posted January 8, 2017 at 01:01 PM 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 More sharing options...
PsySc0rpi0n Posted January 8, 2017 at 06:37 PM Report Share #601905 Posted January 8, 2017 at 06:37 PM 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 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