Ir ao conteúdo

Posts recomendados

Postado

Tenho que criar um programa em c porém encontrei alguns problemas

anexarei alguns criterios que me deram

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#include <conio.h>
typedef struct {
    int codigo;
    char titulo[100];
    float preco;
}LIVRO;
//-----------------------------------------------------------------------------------------------------------------
typedef struct {
    int Codvenda;
    int Codlivro;
    char data[11];
    int qtd;
    float Valortotal;
}VENDA;
//------------------------------------------------------------------------------------------------------------------
int pos_lv()
{
    LIVRO livros;
    int qnt = 0;

    FILE *pLivros;
    pLivros = fopen("livros.txt","r");

    fread(&livros, sizeof(LIVRO), 1, pLivros);
    while(!feof(pLivros))
    {
        fread(&livros, sizeof(LIVRO), 1, pLivros);
        qnt+=1;
    }
    fclose(pLivros);

    return qnt;
}
int pos_vd()
{
    VENDA Vendas;

    int qnt = 0;
    FILE *pVendas;
    pVendas = fopen("vendas.txt","r");

    fread(&Vendas,sizeof(VENDA),1,pVendas);
    while(!feof(pVendas))
    {
        fread(&Vendas,sizeof(VENDA),1,pVendas);
        qnt +=1;
    }
    fclose(pVendas);

    return qnt;
}
//------------------------------------------------------------------------------------------------------------------
void Cadastrarlivros()
{
    LIVRO Livros;

    system("cls");
    printf("\n------------------------------------------------------------------------------");
    printf("\n Cadastro de livros");
    printf("\n------------------------------------------------------------------------------");
    Livros.codigo = pos_lv() + 1;
    printf("\n Código: %d", Livros.codigo);
    fflush(stdin);
    printf("\n Título: ");
    gets(Livros.titulo);
    printf(" Preço: ");
    scanf("%f",&Livros.preco);

    FILE *pLivros;
    pLivros = fopen("livros.txt","a");
    fwrite(&Livros, sizeof(LIVRO), 1, pLivros);
    fclose(pLivros);
}
void mostratodososlivros()
{
    LIVRO Livros;

    int i,lcod;
    float *plpreco = &Livros.preco;
    int *plcod = &Livros.codigo;
    char *pltitu = &Livros.titulo;

    system("cls");
    printf("\n-------------------------------------------------------------------------------------------");
    printf("\nTodos os livros cadastrados");
    printf("\n-------------------------------------------------------------------------------------------");
    FILE *pLivros;
    pLivros = fopen("livros.txt","r");
    for(i=0;i>= *plcod;i++)
    {
    printf("\nCódigo do Livros:%d",*plcod);
    printf("\nTítulo..........:%d",*pltitu);
    printf("\nPreço...........:%d",*plpreco);
    plcod++;
    pltitu++;
    plpreco++;
    }
        fclose(pLivros);
}
//------------------------------------------------------------------------------------------------------------------
void registrovenda()
{
    LIVRO Livros;
    VENDA Vendas;

    float* pend;
    float preco;
    int quant,cont,contmt,codrec,plcod;

    system("cls");
    printf("\n------------------------------------------------------------------------------");
    printf("\n Registro de vendas");
    printf("\n------------------------------------------------------------------------------");
    Vendas.Codvenda = pos_vd() +1;
    printf("\n Código da venda: %d", Vendas.Codvenda);
    fflush(stdin);
    printf("\n Digite o código do livro:");
    scanf("%d", &Vendas.Codlivro, &codrec);
    fflush(stdin);
    printf("\n Digite a data da venda: ");
    gets(Vendas.data);
    puts(" Digite a quantidade de Livros: ");
    scanf("%d",&Vendas.qtd, &quant);
    pend = &Livros.preco;
    codrec = codrec-1;
    for(cont= 0;cont>=codrec;cont++)
        {
        pend++;
        }
    preco= *pend;
    for(contmt=0;contmt<=quant;contmt++)
    {
        preco+= preco;
    }
    Vendas.Valortotal= preco;
    printf("O valor total da venda é: %f",preco);

    FILE *pVendas;
    pVendas = fopen("vendas.txt","a");
    fwrite(&Vendas, sizeof(VENDA), 1, pVendas);
    fclose(pVendas);
}
void mostratodasasvendas()
{
    VENDA Vendas;

    char conteudo[100];
    system("cls");
    printf("\n-------------------------------------------------------------------------------------------");
    printf("\nDados de todas as vendas realizadas");
    printf("\n-------------------------------------------------------------------------------------------");
    FILE *pVendas;
    pVendas = fopen("vendas.txt","r");
    fread(&conteudo, sizeof(char), 100, pVendas);
        printf("\nO CONTEÚDO DO ARQUIVO É:\n %s \n", conteudo);
        fclose(pVendas);
}
void sair()
{
    return;

}
void menu()
{
    int opsel;
    setlocale(LC_ALL, "Portuguese");
    printf("---------------------------------------------------------------------------------");
    printf("\n MENU DE OPÇÕES DO SISTEMA");
    printf("\n---------------------------------------------------------------------------------");
    printf("\n [1] Cadastrar livros");
    printf("\n [2] Mostrar todos os dados de um livro pelo título");
    printf("\n [3] Consultar todos os dados de todos os livros");
    printf("\n [4] Registro de vendas");
    printf("\n [5] Consultar todos os dados de uma venda por título do livro");
    printf("\n [6] Consultar todos os dados de uma venda por período e valor total recebido");
    printf("\n [7] Mostrar todos os dados de todas as vendas realizadas");
    printf("\n [8] Sair\n");
    printf("Opção selecionada:");
    scanf("%d", &opsel);
    //Analisa o número digitadodvendao e abre a função correspondente
    switch(opsel)
    {
    case 1:
        Cadastrarlivros();
        break;
    case 3:
        mostratodososlivros();
        break;
    case 4:
        registrovenda();
        break;
    case 7:
        mostratodasasvendas();
        break;
    case 8:
        sair();
        break;
    default:
    printf("Opção não encontrada.");
    }
}
int main()
{
    menu();
    return 0;
}

 

Avaliação A1 - Linguagem de Programação 2020-01 - PROTOCOLO DE APRESENTAÇÃO.pdfBuscando informações... Avaliação A1 - Linguagem de Programação 2020-01.pdfBuscando informações...

adicionado 4 minutos depois

O que não funciona: 

1 para registrar a venda tenho que colocar o valor total da venda que é o preço do livro vezes a quantia, porém terei varios livros registrados e para isso pensei em criar um ponteiro para o campo preço da struct e ai avançar na memoria o numero de vezes x no caso o codigo do livro, e em seguida somar seu preço n vezes até chegar ao quantia de livros que foi comprada.

2 tentei printar todos os livros cadastrados mas acaba printando endereço de memória ao envez do codigo titulo e preço.

adicionado 5 minutos depois

sou iniciante então devem conter diversas coisas erradas

  • Curtir 1
Postado

Você não pode criar um ponteiro para o campo de preço da struct, tem que instanciar uma variável pra apontar pra ela.

adicionado 2 minutos depois
scanf("%d", &Vendas.Codlivro, &codrec); //aqui você faz leitura de duas variáveis, mas só tem um %d.

 

adicionado 10 minutos depois
void registrovenda()
{
    LIVRO Livros;
    VENDA Vendas;

    float* pend;
    float preco;
    int quant,cont,contmt,codrec,plcod;

    system("cls");
    printf("\n------------------------------------------------------------------------------");
    printf("\n Registro de vendas");
    printf("\n------------------------------------------------------------------------------");
    Vendas.Codvenda = pos_vd() +1;
    printf("\n Código da venda: %d", Vendas.Codvenda);
    fflush(stdin);
    printf("\n Digite o código do livro:");
    scanf("%d", &Vendas.Codlivro, &codrec); //duas variáveis com um %d
    fflush(stdin);
    printf("\n Digite a data da venda: ");
    gets(Vendas.data);
    puts(" Digite a quantidade de Livros: ");
    scanf("%d",&Vendas.qtd, &quant); //duas variáveis com um %d
    pend = &Livros.preco; //como vai pegar o preço do livro se você não instanciou ou pegou do arquivo. Está pegando uma variável vazia.
    codrec = codrec-1;
    for(cont= 0;cont>=codrec;cont++)
        {
        pend++;
        }
    preco= *pend;
    for(contmt=0;contmt<=quant;contmt++)
    {
        preco+= preco;
    }
    Vendas.Valortotal= preco;
    printf("O valor total da venda é: %f",preco);

    FILE *pVendas;
    pVendas = fopen("vendas.txt","a");
    fwrite(&Vendas, sizeof(VENDA), 1, pVendas);
    fclose(pVendas);
}

Terá que abrir o arquivo livros.txt e atribuí-lo a uma variável tipo vetor de LIVRO e só assim vai pegar os valores registrados.

adicionado 11 minutos depois

Já testou essa função mostratodososlivros() ?

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Mostrar mais  

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

Mostrar mais  
×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!