Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Diegopeterbilt

Cadastro de Produtos

Recommended Posts

Boa tarde pessoal, preciso de uma ajuda, fiz esse código para cadastrar produtos. O que não estou conseguindo fazer é ordenar os produtos em ordem alfabética quando seleciono a opção 'B'. O que posso fazer?

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct lista{
char nome[50];
char fornecedor [50];
char validade [50];
char preço[50];
char variedade [50];
char origem [50];
unsigned long int codigo;
struct lista* prox;
char aux [50];
}Lista;

//Declaração de funções.
Lista* inserir_produtos(Lista* primeiro);
void listar_produtos(Lista* primeiro);
Lista* excluir_produtos(Lista* primeiro);
void alterar_produtos(Lista* primeiro);
main()
{
//Declaração de variáveis
Lista *primeiro= NULL;
char opcao;

//Artifício para repetir o programa.
while(opcao!='s')
{
//Menu de opções
printf(" %c----------------------------------------------------------------------------%c\n",201,187);
printf(" | ");printf("\t\t\t CADASTRO DE PRODUTOS");printf("\t\t\t |\n");
printf(" %c----------------------------------------------------------------------------%c\n",200,188);
printf("\t %c----------%c\t\t\t\t ",201,187);
printf("\t\t\t | MENU ");printf("|\t\t\t\t \n");
printf(" %c-----------%c----------%c------------%c \n",201,200,188,187);
printf(" | <A> Novo cadastro |\n");
printf(" |-----------------------------------|\n");
printf(" | <B> Listar |\n");
printf(" |-----------------------------------|\n");
printf(" | <C> Excluir cadastro |\n");
printf(" |-----------------------------------|\n");
printf(" | <D> Alterar cadastro |\n");
printf(" |-----------------------------------|\n");
printf(" | <S> Sair |\n");
printf(" %c-----------------------------------%c",200,188);
printf("\n\n\n\n");
printf("\t\t\t By Diego, Jefferson e Felipe");

//Lendo a opcao do menu
fflush(stdin);
opcao= getch();

//Menu de opções
switch(opcao)
{
case 'A':
case 'a':
//Inserindo os produtos.
fflush(stdin);
system("cls");
printf(" %c----------------------------------------------------------------------------%c\n",201,187);
printf(" | ");printf("\t\t\t NOVO CADASTRO ");printf("\t\t\t |\n");
printf(" %c----------------------------------------------------------------------------%c\n",200,188);
primeiro= inserir_produtos(primeiro);
getch();
system("cls");
break;

case 'B':
case 'b':
//Listando os produtos.
system ("cls");
printf(" %c----------------------------------------------------------------------------%c\n",201,187);
printf(" | ");printf("\t\t\t PRODUTOS CADASTRADOS");printf("\t\t\t |\n");
printf(" %c----------------------------------------------------------------------------%c\n",200,188);
listar_produtos(primeiro);
getch();
system("cls");
break;

case 'C':
case 'c':
//Excluindo produtos da lista.
system ("cls");
printf(" %c----------------------------------------------------------------------------%c\n",201,187);
printf(" | ");printf("\t\t\t EXCLUIR CADASTROS");printf("\t\t\t |\n");
printf(" %c----------------------------------------------------------------------------%c\n",200,188);
primeiro= excluir_produtos(primeiro);
getch();
system("cls");
break;
case 'D':
case 'd':
//Alterando produtos da lista.
system ("cls");
printf(" %c----------------------------------------------------------------------------%c\n",201,187);
printf(" | ");printf("\t\t\t ALTERAR CADASTRADOS");printf("\t\t\t |\n");
printf(" %c----------------------------------------------------------------------------%c\n",200,188);
alterar_produtos(primeiro);
getch();
system("cls");
break;

case 'S':
case 's':
//Artifício para sair do programa.
opcao='s';
break;

default:
//Artifício que previne a situação de um usuário qualquer, digitar uma opcão inexistente no menu.
system("cls");
break;
}
}
}
Lista* inserir_produtos (Lista *primeiro){
Lista produto;
Lista *atual= primeiro;
char identificador= 'F';

//Lendo as informações dos produtos.
printf(" Nome: ");
fflush (stdin); fgets(produto.nome, 50, stdin); printf ("\n");
printf(" C%cdigo: ",162);
scanf("%u",&produto.codigo);printf ("\n");
printf(" Fornecedor: ");
fflush (stdin); fgets(produto.fornecedor, 50, stdin); printf ("\n");
printf(" Validade (dd/mm/aaaa): ");
fflush (stdin); fgets(produto.validade, 50, stdin); printf ("\n");
printf(" Pre%co: R$",135);
fflush (stdin); fgets(produto.preço, 50, stdin); printf ("\n");
printf(" Variedade: ");
fflush (stdin); fgets(produto.variedade, 50, stdin); printf ("\n");
printf(" Origem: ");
fflush (stdin); fgets(produto.origem, 50, stdin); printf ("\n");


//Verificando se o cadastro já existe.
for(atual=primeiro; atual!=NULL; atual=atual->prox){
if(atual->codigo==produto.codigo){
identificador= 'V';
break;
}
}
if(identificador!='V' && (strlen(produto.nome)!=1 && (strlen(produto.fornecedor)!=1 && strlen(produto.preço)!=1))){
//Alocando os espaços e guardando as informações do produto.
Lista* NovoProduto=(Lista*) malloc (sizeof(Lista));
strcpy(NovoProduto->nome, produto.nome);
strcpy(NovoProduto->fornecedor, produto.fornecedor);
strcpy(NovoProduto->validade, produto.validade);
strcpy(NovoProduto->variedade, produto.variedade);
strcpy(NovoProduto->origem, produto.origem);
strcpy(NovoProduto->preço, produto.preço);
NovoProduto->codigo= produto.codigo;
NovoProduto->prox= primeiro;
printf(" Cadastro realizado com sucesso.");
printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
return NovoProduto;
}else{
printf(" Cadastro inv%clido.",160);
printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
return primeiro;
}
}
void listar_produtos (Lista* primeiro){
Lista* atual;//Ponteiro para percorrer a lista sem perder a referência do primeiro elemento da lista.

//Imprimindo os produtos da lista, e suas repectivas informações.
for(atual= primeiro ; atual!= NULL; atual= atual->prox){
printf("\n Nome: ");
printf("%s", atual->nome);
printf("\n C%cdigo: ",162 );
printf("%u", atual->codigo);
printf("\n");
printf("\n Fornecedor: ");
printf("%s", atual->fornecedor);
printf("\n Validade (dd/mm/aaaa): ");
printf("%s", atual->validade);
printf("\n Pre%co: R$",135);
printf("%s", atual->preço);
printf("\n Variedade: ");
printf("%s", atual->variedade);
printf("\n Origem: ");
printf("%s", atual->origem);
printf("\n\n");
}
if(primeiro==NULL)
printf(" Nenhum produto cadastrado.");
printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
}
Lista* excluir_produtos(Lista *primeiro){

Lista *anterior= NULL;//Ponteiro para saber o elemento anterior ao elemento atual da lista.
Lista *atual= primeiro;//Ponteiro para percorrer a lista sem perder o primeiro elemento da lista.
unsigned long int codigo=0;

//Requisitando e lendo o código do produto a ser excluído.
printf(" C%cdigo do produto a ser exclu%cdo: ", 162,161);
fflush(stdin);
scanf("%u",&codigo);

//Procurando o produto na lista.
while(atual!= NULL && atual->codigo!=codigo){
anterior= atual;
atual= atual->prox;
}

//Mensagem caso o produto não seja encontrado.
if(atual==NULL){
printf("\n Produto n%co encontrado.", 198);
printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
return primeiro;
}

//Excluindo o primeiro produto da lista.
if(anterior==NULL){
printf("\n Conte%cdo exclu%cdo com sucesso.", 163,161);
primeiro= atual->prox;
//Excluindo um produto do meio da lista.
}else{
printf("\n Conte%cdo exclu%cdo com sucesso.", 163,161);
anterior->prox= atual->prox;
}

//Desalocando o espaço da memória.
free(atual);
printf("\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");
return primeiro;
}
//Função para alterar produtos.
void alterar_produtos(Lista* primeiro){
char nome_substituto[40], fornecedor_substituto[40], validade_substituto[40], preco_substituto[40], variedade_substituto[40], origem_substituto[40];
unsigned long int codigo;
Lista* atual=primeiro;

//Requisitando e lendo o código do produto a ser alterado.
printf(" C%cdigo do produto a ser alterado: ", 162);
fflush(stdin);
scanf("%u",&codigo);

//Procurando o produto na lista.
while(atual!= NULL && atual->codigo!=codigo){
atual= atual->prox;
}

//Alterando os dados do produto.
if(atual!=NULL){
printf("\n Novo nome: ");
fflush (stdin); fgets(nome_substituto, 50, stdin);
strcpy(atual->nome,nome_substituto);
printf("\n Novo pre%co: R$",135);
fflush (stdin); fgets(preco_substituto, 50, stdin);
strcpy(atual->preço,preco_substituto);
printf("\n Novo fornecedor: ");
fflush (stdin); fgets(fornecedor_substituto, 50, stdin);
strcpy(atual->fornecedor,fornecedor_substituto);
printf("\n Nova validade (dd/mm/aaaa): ");
fflush (stdin); fgets(validade_substituto, 50, stdin);
strcpy(atual->validade,validade_substituto);
printf("\n Nova variedade: ");
fflush (stdin); fgets(variedade_substituto, 50, stdin);
strcpy(atual->variedade,variedade_substituto);
printf("\n Nova origem: ");
fflush (stdin); fgets(origem_substituto, 50, stdin);
strcpy(atual->origem,origem_substituto);
printf ("\n");
printf(" Dados alterados com sucesso.");
}else{
printf("\n Produto n%co encontrado.",198);
}
printf("\n\n\n PRESSIONE QUALQUER TECLA PARA VOLTAR AO MENU PRINCIPAL.");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tire o fflush(stdin) e use o scanf corretamente ou fgets.

Pesquise algum método de ordenação e implemente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Xinitrc
      Estou fazendo ainda em design uma calculadora de decimo terceiro salário em QT Creator com linguagem C com GTK.
       
      Tem 3 TextEdit
      Tem 3 Labels
      Tem 3 Buttons
       
      Botão Calcular
      Botão Apagar
      Botão Sair
       
      O botão calcular deve calcular da seguinte maneira
       
      TextEdit3=TextEdit1 * TextEdit2/12, que vai dar o decimo terceiro salário,a logica está certa,mas não está funcionando meu programa no QT Creator.
       
      Alguém pode me ajudar?
    • Por JoaoV-26
      olá,
       
      Eu preciso fazer uma matriz 7x7 que imprima caractere 'x' e 'o' porém o x precisar ser nas duas diagonais, fazer a matriz e imprimir o x em uma diagonal eu consegui porém não estou conseguindo de jeito nenhum imprimir na outra diagonal, a matriz precisa sair assim: 
       
      x o o o o o x
      o x o o o x o
      o o x o x o o 
      o o o x o o o
      o o x o x o o
      o x o o o x o
      x o o o o o x
       
      a minha está saindo assim (foto em anexo)
       
      Meu código:

       
      #include<stdio.h> int main(){          int i, j;     char str[2]="x", str1[2]="o";                for(i=1; i<=7; i++){         for(j=1;j<=7; j++)              if(i+j == 7+1){                      printf("%s", str);                      }else                      printf("%s", str1);                      printf("\n");          }      } Alguém pode me ajudar, como faço para outra diagonal sair 'x' também ?????

    • Por llucaahenri
      Bom dia!
      Sou iniciante nessa área de programação, estou aprendendo sobre vetores e matrizes e gostaria de saber como faço para calcular elementos de um vetor e de uma matriz, eu tentei fazer usando laço For, mas não consegui.
      Esse exercício que estou tentando fazer.  
      Leia um vetor de 12 posições e em seguida ler também dois valores X e Y quaisquer correspondentes a duas posições no vetor. Ao final seu programa deverá escrever a soma dos valores encontrados nas respectivas posições X e Y.
      Meu código!
       
      #include <stdio.h> #include <stdlib.h> #include <locale.h> int main() {     setlocale(LC_ALL, "Portuguese");     int VetorX[12], VetorY[12];     int Result, X, Y, i, j;     for(i = 1; i < 13; i++){ // Ler os Valores;         printf("[%d] Digite um número do Vetor X. \n", i);         scanf("%d", &X);     }     for(i = 1; j < 13; j++){ // Ler os Valores;         printf("[%d] Digite um número do Vetor Y. \n", j);         scanf("%d", &Y);     }         for(i = 0; i < 13; i++){             Result =+ VetorX;             printf("O resultado é%d", Result);         }     return 0; }
       
    • Por thisis_paulo
      Olá pessoal, sou iniciante tanto aqui no fórum tanto na linguagem c++.
      Estou tentando resolver o seguinte algoritmo:
       
      Calcule as médias das notas escolares de um aluno (media 1º bimestre, media 2º bimestre, media final) sendo que:
      As notas das provas parciais 1 e 2 equivalem a 30% da nota total do bimestre 1 e 2;
      As notas das provas oficiais 1 e 2 equivalem a 70% da nota total do bimestre 1 e 2;
      A nota total do bimestre 1 equivale a 40% da nota final do semestre;
      A nota total do bimestre 2 equivale a 60% da nota final do semestre;
       
      Utilize structs para armazenar a notas e medias e referencie cada elemento por ponteiros no main.
       
      Segue abaixo, a minha tentativa.
      Não estou conseguindo guardar as notas pedidas no main no vetor de notas dentro da struct, estou usando cin para fazer isso, uma solução mais adequada para realizar este procedimento?
       
      - Biblioteca
      typedef struct notas { float parcial[2], *p1, *p2; float oficial[2], *of1, *of2; float exame, *ex; } NotasProvas; void NotaBim1 (NotasProvas &notas, float *p1, float *of1); void NotaBim2 (NotasProvas &notas, float *p2, float *of2); void NotaExame (NotasProvas &notas, float *ex); typedef struct medias { float mediaB1, mediaB2, *m1, *m2; float notaFinal, *nf; float notaTotal, *nt; } MediasNotas; void MediaBim1 (MediasNotas &medias, float *m1); void MediaBim2 (MediasNotas &medias, float *m2); void MediaFinal (MediasNotas &medias, float *m1, float *m2); void MediaTotal (MediasNotas &medias, float *nf, float *ex);  
      - Procedimentos 
      #include "notas.h" void NotaBim1 (NotasProvas &notas, float *p1, *of1) { *p1 = &NotasProvas.parcial[1]; *of1= &NotasProvas.oficial[1]; MediasNotas.mediaB1 = (p1 * 0.3) + (of1 * 0.7); } void NotaBim2 (NotasProvas &notas, float *p2, *of2) { *p2 = &NotasProvas.parcial[2]; *of2 = &NotasProvas.oficial[2]; MediasNotas.mediaB2 = (p2 * 0.3) + (of2 * 0.7); } void MediaFinal (MediasNotas &medias, float *m1, *m2) { *m1 = &MediasNotas.mediaB1; *m2 = &MediasNotas.mediaB2; MediasNotas.notaFinal = (m1 * 0.4) + (m2 * 0.6); } void MediaTotal (MediasNotas &medias, float *nf, *ex) { *nf = &MediasNotas.notaFinal; *ex = &NotasProvas.exame; MediasNotas.notaTotal = (nf + ex) / 2; } - Função Main
      #include <iostream> #include "notas.h" using namespace std; int main() { cout << "\t\t CALCULANDO NOTAS " << endl; cout << endl; cout << "Qual a sua nota da Prova Parcial 01? " << endl; cin >> NotasProvas.p1; cout << "Qual a sua notas da Prova Oficial 01? " << endl; cin >> NotasProvas.of1; cout << "Nota do 1º bimestre: " << MediasNotas.m1 << endl; cout << "\t\t Segundo Bimestre" << endl; cout << endl; cout << "Qual a sua nota na Prova Parcial 02? " << endl; cin >> NotasProvas.p2; cout << "Qual a sua nota na Prova Oficial 02? " << endl; cin >> NotasProvas.of2; cout << "Nota do 2º bimestre: " << MediasNotas.m2 << endl; cout << "Media Final: " << MediasNotas.nf << endl; system("PAUSE"); return 0; } Desde já, agradeço pelas ajudas!
       
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.