Jump to content
João Victor Maciel

Programa de cadastro de uma oficina em C

Recommended Posts

João Victor Maciel

Estou aprimorando um código antigo meu e to tentando adicionar novas funções nele, exibir todos os cadastros, alterar e excluir. Só que no meio disso esbarrei em alguns problemas:

 

1- na hora que vou realizar cadastros e depois faço a busca específica do cadastro ele está sobrescrevendo um cadastro anterior e misturando os dados

2- minha função emitir tudo só mostra um cadastro

3- não estou entendendo como posso fazer as funções alterar e excluir

 

O que está comentado são as coisa que não fiz ainda. Na função de emitir todas os fread comentado foram tentativas de fazer a emissão sem usar o while.

Vou deixar o que já fiz aqui em baixo

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <locale.h>


struct carro{

	char placa[10], marca[50], modelo[50], ano[10];
};

struct cliente{
	struct carro y;
	char nome[100], CPF[20], RG[20], endereco[200];
};

struct manutencao{

	char data[15], mecanico[50], itens[200], valor[50], placa[15];
};


void cabecalho();

void cadastrarCliente(struct cliente x, struct carro y);
void cadastarServ(struct manutencao z, struct carro y);
void buscarOrdem(struct carro y, struct cliente x, struct manutencao z);
void emitirTudo(struct carro y, struct cliente x, struct manutencao z);
//void alterarCad(struct carro y, struct cliente x, struct manutencao z);
//void excluirOrdem(struct carro y, struct cliente x, struct manutencao z);

int main()
{
    setlocale(LC_ALL, "portuguese");

	struct cliente x;
	struct carro y;
	struct manutencao z;
	int op, wo;

	do{
		cabecalho();
        printf("\t\t\t\t###########################################\n");
		printf("\t\t\t\t##\t1 - CADASTRAR CLIENTE            ##\n");
		printf("\t\t\t\t##\t2 - CRIAR ORDEM DE SERVIÇO       ##\n");
		printf("\t\t\t\t##\t3 - BUSCAR ORDEM DE SERVIÇO      ##\n");
        printf("\t\t\t\t##\t4 - MAIS OPÇÕES                  ##\n");
		printf("\t\t\t\t##\t5 - SAIR                         ##\n");
        printf("\t\t\t\t###########################################\n");
		printf("\t\t\t\t\tDIGITE UMA OPÇÂO --> ");
        scanf("%d", &op);


		switch(op)
		{
			case 1:
				cadastrarCliente(x, y);
				break;

			case 2:
				cadastrarServ(z, y);
				break;

			case 3:
			    buscarOrdem(y, x, z);
				break;

            case 4:
                    do
                    {
                        cabecalho();
                        printf("\t\t\t\t###########################################\n");
                        printf("\t\t\t\t##\t1 - EXIBIR TODAS AS ORDENS       ##\n");
                        printf("\t\t\t\t##\t2 - ALTERAR CADASTRO             ##\n");
                        printf("\t\t\t\t##\t3 - EXCLUIR ORDEM                ##\n");
                        printf("\t\t\t\t##\t4 - VOLTAR                       ##\n");
                        printf("\t\t\t\t###########################################\n");
                        printf("\t\t\t\t\tDIGITE UMA OPÇÃO -> ");
                        scanf("%d", &wo);

                        switch (wo)
                        {
                            case 1:
                                emitirTudo(y, x, z);
                                break;

                            case 2:
                                //alterarCad(y, x, z);
                                break;

                            case 3:
                                //excluirOrdem(y, x, z);
                                break;

                            case 4:
                                printf("\t\t\t\t\tVOLTANDO...");
                                Sleep(300);
                                break;

                            default:
                                printf("\t\t\t\t\tOPÇÃO INVÁLIDA!!!");
				                getch();
                                break;
                        }
                    } while (wo != 4);

                break;

			case 5:
				printf("\t\t\t\t\tSAINDO...\n");
				Sleep(400);
				break;

			default:
				printf("\t\t\t\t\tOPÇÃO INVÁLIDA!!!");
				getch();
				break;
		}
	}while(op != 5);
};



void cadastrarCliente(struct cliente  x,struct carro y){
	FILE *fp;
	FILE *f;


	fp = fopen("cliente.txt", "ab");
	f = fopen("carro.txt", "ab");
	if(fp == NULL){
		printf("\t\t\t\t\tNÃO FOI POSSÍVEL CRIAR O ARQUIVO!!\n");
	}
	else{
		do{
			cabecalho();
			fflush(stdin);
			printf("NOME DO CLIENTE: ");
			gets(x.nome);

			printf("CPF: ");
			gets(x.CPF);

			printf("RG: ");
			gets(x.RG);

			printf("ENDEREÇO: ");
			gets(x.endereco);

			fwrite(&x, sizeof(struct cliente),1,fp);


			printf("INFORME A PLACA DO CARRO: ");
			gets(y.placa);

			printf("MARCA DO CARRO: ");
			gets(y.marca);

			printf("MODELO: ");
			gets(y.modelo);

			printf("ANO DE FABRICAÇÃO: ");
			gets(y.ano);


			fwrite(&y, sizeof(struct carro), 1, f);
			fclose(f);
            fclose(fp);
			printf("DESEJA CONTINUAR REALIZANDO CADASTROS? [ S / N ]");

		}while(getch() == 's');
	}
}

void cadastrarServ(){
	FILE *fs;
	FILE *fp;
	struct manutencao z;
	struct carro y;
    char placa[15];
    int tam, i, w = 0;

	fs = fopen("manutenção.txt", "ab");
    fp = fopen("carro.txt", "r+b");

	if(fs == NULL){
		printf("\t\t\t\t\tNÃO FOI POSSÍVEL CRIAR O ARQUIVO!!\n");
	}
	else{
		do{
			cabecalho();
			fflush(stdin);
			printf("DIGITE A DATA DA MANUTENÇÃO: ");
			gets(z.data);

			printf("INFORME O MECÂNICO QUE FARA A MANUTENÇÃO: ");
			gets(z.mecanico);

			printf("ITENS QUE SERÃO UTILIZADOS NA MANUTEÇÃO: ");
			gets(z.itens);

			printf("VALOR TOTAL DO SERVIÇO: ");
			gets(z.valor);

            do
            {
                printf("DIGITE A PLACA: ");
                gets(placa);

                //PESQUISA DENTRO DO ARQUIVO SE A PLACA INFORMADA ESTÁ CADASTRADA
                fseek(fp, 0, SEEK_END);
                tam = ftell(fp)/sizeof(struct carro);
                rewind(fp);
                for(i = 0; i < tam; i++)
                {
                    fseek(fp, i* sizeof (struct carro), SEEK_SET);
                    fread(&y, sizeof(struct carro), 1, fp);
                    if (strcmp(placa, y.placa)== 0)
                    {
                        w = 1;
                        strcpy(z.placa, placa);
                    }
                }
                if(w == 0)
                {
                    printf("\nPLACA NÃO CADASTRADA!!\n");
                }
                fwrite(&z, sizeof(struct manutencao), 1, fs);
            }
            while(w != 1);

            fclose(fp);
            fclose(fs);

            printf("DESEJA CONTINUAR REALIZANDO CADASTROS? [ S / N ]");
        } while(getch() == 's');

    }

}

void buscarOrdem(struct carro y, struct cliente x, struct manutencao z)
{
    FILE *fp;
    FILE *fs;
    FILE *f;
    char placa[10];


    int j, t, v = 0;

    fp = fopen("cliente.txt", "r+b");
    fs = fopen("manutenção.txt", "r+b");
    f = fopen("carro.txt", "r+b");

    if(fp, fs, f == NULL)
    {
        printf("\t\t\t\t\tNÃO FOI POSSÍVEL ABRIR O ARQUIVO!!\n");
        getch();
    }
    else
    {
        cabecalho();
        fflush(stdin);
        do
        {
            printf("DIGITE A PLACA DO CARRO: ");
            gets(placa);

            //BUSCA A ORDEM DE SERVIÇO BASEADO NA PLACA INFORMADA
            fseek(f, 0, SEEK_END);
            t = ftell(f)/sizeof(struct carro);
            rewind(f);
            for(j = 0; j < t; j++){
                fseek(f, j* sizeof(struct carro), SEEK_SET);
                fread(&y, sizeof(struct carro), 1, f);
                if(strcmp(placa, y.placa)== 0){
                    v = 1;
                    strcpy(y.placa, placa);
                    //CASO A PLACA ESTIVER CADASTRADA, O PROGRAMA IRÁ IMPRIMIR
                    printf("MODELO: %s\n", y.modelo);
                    printf("MARCA: %s\n", y.marca);
                    printf("ANO DE FABRICAÇÃO: %s\n", y.ano);


                    fread(&x, sizeof(struct cliente), 1, fp);
                    printf("NOME DO CLIENTE: %s\n", x.nome);
                    printf("CPF: %s\n", x.CPF);
                    printf("RG: %s\n", x.RG);
                    printf("ENDEREÇO: %s\n", x.endereco);

                    fread(&z, sizeof(struct manutencao), 1, fs);
                    printf("DATA DE INÍCIO DA MANUTENÇÃO: %s\n", z.data);
                    printf("MECÂNICO: %s\n", z.mecanico);
                    printf("ITENS UTILIZADOS: %s\n", z.itens);
                    printf("VALOR FINAL: %s\n",z.valor);
                }
            }
            if(v == 0){
                printf("CARRO NÃO CADASTRADO!!\n\n");
            }
        }while(v != 1);
        fclose(f);
        fclose(fp);
        fclose(fs);
        getch();
    }

}

void emitirTudo(struct carro y, struct cliente x, struct manutencao z)
{
    FILE *fp;
    FILE *fs;
    FILE *f;
    int retorno, cont = 0;

    fp = fopen("cliente.txt", "r+b");
    fs = fopen("manutenção.txt", "r+b");
    f = fopen("carro.txt", "r+b");

    if (fp, fs, f == NULL) {
        printf("\t\t\t\t\tNÃO FOI POSSÍVEL ABRIR OS ARQUIVOS!!\n");
        getch();
    }
    else
    {
        retorno = fread(&x, sizeof(struct cliente), 1, fp);
        retorno = fread(&y, sizeof(struct carro), 1, f);
        retorno = fread(&z, sizeof(struct manutencao), 1, fs);
        while( retorno == 0 )
        {
            system("cls");
            cabecalho();
            cont++;
            //fread(&x, sizeof(struct cliente), 1, fp);
            printf("NOME DO CLIENTE: %s\n", x.nome);
            printf("CPF: %s\n", x.CPF);
            printf("RG: %s\n", x.RG);
            printf("ENDEREÇO: %s\n", x.endereco);
            //fread(&y, sizeof(struct carro), 1, f);
            printf("PLACA DO CARRO: %s\n", y.placa);
            printf("MODELO: %s\n", y.modelo);
            printf("MARCA: %s\n", y.marca);
            printf("ANO DE FABRICAÇÃO: %s\n", y.ano);
            //fread(&z, sizeof(struct manutencao), 1, fs);
            printf("DATA DO INÍCIO DA MANUTENÇÃO: %s\n", z.data);
            printf("MECÂNICO: %s\n", z.mecanico);
            printf("ITENS UTILIZADOS: %s\n", z.itens);
            printf("VALOR FINAL: %s\n",z.valor);
            retorno = fread(&x, sizeof(struct cliente), 1, fp);
            retorno = fread(&y, sizeof(struct carro), 1, f);
            retorno = fread(&z, sizeof(struct manutencao), 1, fs);
            printf("--------------------------------------------------------------------------\n\n\n");
        }
        fclose(fp);
        fclose(fs);
        fclose(f);
        getch();
    }
}

/*
void alterarCad(struct carro y, struct cliente x, struct manutencao z)
{
    FILE *fp;
    FILE *fs;
    FILE *f;
    char placa[10];
    int j, t, v = 0;

    fp = fopen("cliente.txt", "rb");
    f = fopen("carro.txt", "rb");
    fs = fopen("manutenção.txt", "rb");

    if (fp, fs, f == NULL) {
        printf("\t\t\t\t\tNÃO FOI POSSÍVEL ABRIR OS ARQUIVOS!!\n");
        getch();
    }
    else {
        cabecalho();
        fflush(stdin);

        do {
            printf("DIGITE A PLACA DO CARRO PARA ALTERAR O CADASTRO: ");
            gets(placa);

            fseek(f, 0, SEEK_END);
            t = ftell(f)/sizeof(struct carro);
            rewind(f);
            for(j = 0; j < t; j++){
                fseek(f, j* sizeof(struct carro), SEEK_SET);
                fread(&y, sizeof(struct carro), 1, f);
                if(strcmp(placa, y.placa)== 0){
                    v = 1;
                    strcpy(y.placa, placa);
                }
            }

            printf("DESEJA REALIZAR OUTRAS ALTERAÇÕES? [ S / N ]");
        }while(getch() == 's');
    }
}
*/

void cabecalho()
{
    system("cls");
    printf("\t\t\t########################################################\n");
    printf("\t\t\t##                                                    ##\n");
    printf("\t\t\t##     SISTEMA DE CADASTRO DE MANUTENÇÃO E VENDAS     ##\n");
    printf("\t\t\t##                                                    ##\n");
    printf("\t\t\t########################################################\n\n");
}

 

Share this post


Link to post
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.