Ir ao conteúdo
  • Cadastre-se

Dúvida com Cadastro em C


Marcelo José

Posts recomendados

Boa tarde pessoal, me chamo Marcelo e tenho uma dúvida em relação a um desafio que o professor passou:

Você foi contratado para fazer um sistema de uma loja de carros usados. O gerente lhe mandou fazer um sistema que controlasse a entrada e saída de carros da loja. Cada carro terá que ter suas características salvas para consulta posterior. Além de gerenciar entrada e saída de carros da loja, você também terá de fazer um pequeno “caixa” para mostrar os ganhos e as perdas para cada transação realizada.

Ou seja, o menú do seu software terá as seguintes opções:

• Cadastrar um novo veículo

Inserir as características (Cor, Ano, Modelo, Marca, Valor, Multas)

• Saída de Veículo

Dados da transação (Nome do cliente, Endereço do Cliente, Valor pago)

• Saldo do Caixa

Dados de entrada e saída de dinheiro (Qtde de Vendas, Saldo do Dia, Saldo Geral)

Lembre que seu gerente é louco e pode comprar infinitos carros para deixá-los a venda, então seria prudente não haver limites na quantidade de dados que seu programa armazena. E claro, os carros não esgotam no final do dia, então você precisa criar uma pequena base de dados para que quando a loja abrir no próximo dia não ser preciso recadastrar todos os carros da loja.

Até a parte de cadastro de novos veículo tudo bem. Mas o que eu não estou conseguindo fazer é a parte da Saída de Veículo e Saldo de Caixa. de que modo eu posso fazer isso ?

OBS.: segue o código até a parte de Cadastro de Veículos:


#include<string.h>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>

struct agenda {
int cod;
char marca[20];
char modelo[20];
char cor[20];
int ano;
int valor;
int multas;
int vazio;
} registros[100];


void cadastrar(int cod, int pos);
void consultar();
int verifica_pos();
void zerar();
int verifica_cod(int cod);
void excluir();

int main() {

zerar();
int op=0, retorno, codaux, posicao;
while(op!=4){
printf("\n\n\t\t\t\t** AGENCIA DE CARROS **\n\n\nMENU\n\n1 - Cadastrar\n2 - Consultar\n3 - Excluir\n4 - Sair\n\nOpcao: ");
scanf("%d",&op);
system("cls");
switch(op) {
case 1: {
posicao=verifica_pos();
if (posicao!=-1) {
printf("\nEntre com o codigo desejado\n");
scanf("%d",&codaux);fflush(stdin);
retorno=verifica_cod(codaux);
if (retorno==1)
cadastrar(codaux,posicao);
else
printf("\nCodigo ja existente\n");
}
else
printf("\nA agenda esta cheia\n");
break;
}
case 2: {
consultar();
break;
}
case 3: {
excluir();
break;
}
case 4: {
printf("\n\nTchau");
break;
default :
printf("Opcao Invalida");
break;
}
}
}
getch();
}

void cadastrar(int cod, int pos) {
pos=verifica_pos();
registros[pos].cod=cod;
printf("\n Marca:\n");
gets(registros[pos].marca);
printf("\n Modelo:\n");
scanf("%s",&registros[pos].modelo);
printf("\n Cor:\n");
scanf("%s",&registros[pos].cor);
printf("\n Ano:\n");
scanf("%d",&registros[pos].ano);
printf("\n Valor: \n");
scanf("%f",&registros[pos].valor);
printf("\n Multas: \n");
scanf("%f",&registros[pos].multas);
registros[pos].vazio=1;
printf("\nCadastro Realizado com Sucesso!\n\n");
}

void consultar() {
int cont=0, cod;
printf("\nEntre com o codigo\n");
scanf("%d",&cod);
while(cont<=100) {
if (registros[cont].cod==cod) {
if (registros[cont].vazio==1) {
printf("\n Marca: %s",registros[cont].marca);
printf("\n Modelo: %s",registros[cont].modelo);
printf("\n Cor: %s",registros[cont].cor);
printf("\n Ano: %d",registros[cont].ano);
printf("\n Valor: %f",registros[cont].valor);
printf("\n Multas: %f",registros[cont].multas);
break;
}
}
cont++;
if (cont>100)
printf("\nCodigo nao encontrado\n");
}
}

int verifica_pos() {
int cont=0;
while (cont<=100) {
if (registros[cont].vazio==0)
return(cont);
cont++;
}
return(-1);
}

void zerar() {
int cont;
for (cont=0;cont<=100;cont++)
registros[cont].vazio=0;
}

int verifica_cod(int cod) {
int cont=0;
while (cont<=100) {
if (registros[cont].cod==cod)
return(0);
cont++;
}
return(1);
}

void excluir() {
int cod, cont=0;
printf("\nEntre com o codigo do registro que deseja excluir\n");
scanf("%d",&cod);


while (cont<=100) {
if (registros[cont].cod==cod)
if (registros[cont].vazio==1) {
registros[cont].vazio=0;
printf("\nExclusao feita com sucesso\n");
break;
}
cont++;
if (cont>100)
printf("\nCodigo nao encontrado\n");
}
}
/[spoiler]

OBS 2: eu uso o windows XP e a IDE é o Dev-C++

Link para o comentário
Compartilhar em outros sites

Dividi a estrutura principal, criando mais duas, sendo uma para valor de compra e outra pra venda. Melhorando assim a visualização e compreensão do código.

A remoção eu fiz pelo controle do valor de compra, se for diferente de zero, então poderá ser removido.

Segue código:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

struct Compra
{
float valor;
float multas;
};

struct Venda
{
float valor;
};

struct agenda {
int cod;
char marca[20];
char modelo[20];
char cor[20];
int ano;
struct Compra compra;
struct Venda venda;
} registros[100];

void cadastrar(int cod, int pos);
void consultar();
int verifica_pos();
void zerar();
int verifica_cod(int cod);
void excluir();

int main(void)
{

int op = 0;
int retorno;
int codaux;
int posicao;

zerar();

while ( op != 4 )
{
printf("\n\n\t\t\t\t** AGENCIA DE CARROS **\n\n\nMENU\n\n1 - Cadastrar\n2 - Consultar\n3 - Excluir\n4 - Sair\n\nOpcao: ");
scanf("%d",&op);

system("cls");

switch (op)
{
case 1:
{
posicao = verifica_pos();

if ( posicao != -1 )
{
printf("\nEntre com o codigo desejado\n");
scanf("%d",&codaux);fflush(stdin);

retorno = verifica_cod(codaux);

if ( retorno == 1 )
cadastrar(codaux,posicao);
else
printf("\nCodigo ja existente\n");
}
else
printf("\nA agenda esta cheia\n");

break;
}
case 2:
{
consultar();
break;
}
case 3:
{
excluir();
break;
}
case 4:
{
printf("\n\nTchau");
break;
} // ERRO: Faltou o fecha chaves
default :
{ // ERRO: Faltou o abre chaves
printf("Opcao Invalida");
break;
}
}
}

getch();

return 0;
}

void cadastrar(int cod, int pos)
{
pos = verifica_pos();

registros[pos].cod = cod;

printf("\n Marca:\n");
gets(registros[pos].marca);

printf("\n Modelo:\n");
scanf("%s", registros[pos].modelo); // Toda string (vetor de char) é um ponteiro para estrutura

printf("\n Cor:\n");
scanf("%s", registros[pos].cor); // Toda string (vetor de char) é um ponteiro para estrutura

printf("\n Ano:\n");
scanf("%d", &registros[pos].ano);

printf("\n Valor: \n");
scanf("%f", &registros[pos].compra.valor);

printf("\n Multas: \n");
scanf("%f", &registros[pos].compra.multas);

registros[pos].venda.valor = 0;

printf("\nCadastro Realizado com Sucesso!\n\n");
}

void consultar()
{
int cont = 0;
int cod;

printf("\nEntre com o codigo\n");
scanf("%d",&cod);

for ( cont = 0; cont < 100; cont++ )
{
if ( registros[cont].cod == cod )
{
if ( registros[cont].compra.valor != 0 ) // Caso o veiculo ainda esteja no cadastro
{
printf("\n Marca: %s", registros[cont].marca);
printf("\n Modelo: %s", registros[cont].modelo);
printf("\n Cor: %s", registros[cont].cor);
printf("\n Ano: %d", registros[cont].ano);
printf("\n Valor: %f", registros[cont].compra.valor);
printf("\n Multas: %f", registros[cont].compra.multas);
}
return; // retorna se encontrou o veiculo
}
}

printf("\nCodigo nao encontrado\n"); // Sera mostrado apenas se nao encontrar

}

int verifica_pos()
{
int cont = 0;

for ( cont = 0; cont < 100; cont++ )
if ( registros[cont].compra.valor == 0 )
return cont;

return -1;
}

void zerar()
{
int cont = 0;

for ( cont = 0; cont < 100; cont++ ) // 'for' de 0 até <= 100, resulta em 101 valores
{
registros[cont].cod = 0;
strcpy(registros[cont].marca, "");
strcpy(registros[cont].modelo, "");
strcpy(registros[cont].cor, "");
registros[cont].ano = 0;
registros[cont].compra.valor = 0;
registros[cont].compra.multas = 0;
registros[cont].venda.valor = 0;
}
}

int verifica_cod(int cod)
{
int cont = 0;

for ( cont = 0; cont < 100; cont++ )
{
if ( registros[cont].cod == cod )
return 0;
}

return 1;
}

void excluir()
{
int cod = 0;
int cont = 0;

printf("\nEntre com o codigo do registro que deseja excluir\n");
scanf("%d",&cod);

for ( cont = 0; cont < 100; cont++ )
{
if ( registros[cont].cod == cod )
{
if ( registros[cont].compra.valor != 0 ) // Controle pelo valor de compra
{
registros[cont].cod = 0;
strcpy(registros[cont].marca, "");
strcpy(registros[cont].modelo, "");
strcpy(registros[cont].cor, "");
registros[cont].ano = 0;
registros[cont].compra.valor = 0;
registros[cont].compra.multas = 0;
registros[cont].venda.valor = 0;

printf("\nExclusao feita com sucesso\n");
}

return; // Retorna se encontrou o codigo
}
}

printf("\nCodigo nao encontrado\n"); // Sera mostrado apenas se nao encontrar
}

Link para o comentário
Compartilhar em outros sites

Arquivado

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

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

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

×
×
  • Criar novo...

 

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!