Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- typedef struct func{
- int codigo;
- char nome[50];
- char endereco[100];
- int cpf;
- int numVendas;
- int ativo;
- } strFunc;
- int retornaIndice(codigo){
- int i=0;
- strFunc tmpFunc;
- FILE *ptFile;
- ptFile = fopen("funcionarios.dat", "rb+");
- while(!feof(ptFile)){
- fseek(ptFile, sizeof(strFunc)*i, SEEK_SET);
- fread(&tmpFunc, sizeof(strFunc), 1, ptFile);
- if(codigo != 0 && tmpFunc.ativo){
- if(tmpFunc.codigo == codigo){
- return i;
- }
- }
- i++;
- }
- fclose(ptFile);
- return i;
- }
- int existeFuncionario(int opcao, int chaveInt, char chaveChar[100]){
- int i=0;
- strFunc tmpFunc;
- FILE *ptFile;
- ptFile = fopen("funcionarios.dat", "rb+");
- while(!feof(ptFile)){
- fseek(ptFile, i*sizeof(strFunc), SEEK_SET);
- fread(&tmpFunc, sizeof(strFunc), 1, ptFile);
- if(opcao == 1){ //busca pelo código
- if(tmpFunc.codigo == chaveInt){
- fclose(ptFile);
- return 1;
- }
- } else { //busca pelo nome
- if(strcmp(chaveChar, tmpFunc.nome) == 0){
- return 1;
- }
- }
- i++;
- }
- fclose(ptFile);
- return 0;
- }
- strFunc infoFuncionario(codigo){
- int i=0;
- strFunc funcionario;
- FILE *ptFile;
- ptFile = fopen("funcionarios.dat", "rb+");
- if(!ptFile){
- printf("declarar erro");
- }
- while(!feof(ptFile)){
- fseek(ptFile, i*sizeof(strFunc), SEEK_SET);
- fread(&funcionario, sizeof(strFunc), 1, ptFile);
- if(funcionario.codigo == codigo){
- return funcionario;
- }
- i++;
- }
- fclose(ptFile);
- return funcionario;
- }
- void fazAlteracao(strFunc novoFunc, int indice){
- int i=0, total;
- strFunc tmp;
- FILE *ptFile;
- ptFile = fopen("funcionarios.dat", "r+");
- if(!ptFile){
- printf("Erro");
- }
- fseek(ptFile, indice*sizeof(strFunc), SEEK_SET);
- if(fwrite(&novoFunc, sizeof(strFunc), 1, ptFile)){
- printf("\nAlteracao concluida\n");
- } else {
- printf("\nErro ao alterar funcionario\n");
- }
- fclose(ptFile);
- }
- void cadastraFuncionario(){
- strFunc tmpFunc;
- int ultimoCodigo, prosseguir, cpf, i, total = 100, ehRepetido = 0;
- char tmpNome;
- FILE *ptFile;
- ptFile = fopen("funcionarios.dat", "ab+");
- ultimoCodigo = retornaIndice();
- if(ultimoCodigo == 100){
- printf("Máximo de funcionários cadasatrados");
- } else {
- tmpFunc.codigo = ultimoCodigo;
- tmpFunc.numVendas = 0;
- tmpFunc.ativo = 1;
- printf("\n Nome: ");
- scanf("%s", tmpFunc.nome);
- fflush(stdin);
- printf(" Endereco: ");
- scanf("%s", tmpFunc.endereco);
- fflush(stdin);
- printf(" CPF (numeros somente): ");
- scanf("%d", &tmpFunc.cpf);
- fflush(stdin);
- printf("\nAdicionar funcionário com as seguintes características: \n\n Codigo: %d\n Nome: %s\n Endereço: %s\n CPF: %d\n\n", tmpFunc.codigo, &tmpFunc.nome, &tmpFunc.endereco, tmpFunc.cpf);
- printf("\nDigite 1 para efetuar o cadastro ou 0 para corrigir: ");
- scanf("%d", &prosseguir);
- if(!prosseguir){
- fclose(ptFile);
- cadastraFuncionario();
- }
- if(existeFuncionario(2, 0, tmpFunc.nome)){
- ehRepetido = 1;
- }
- if(ehRepetido){
- printf("\nEsse funcionário já está cadastrado\n\n");
- } else {
- ptFile = fopen("funcionarios.dat", "r+w");
- fseek(ptFile, 0, SEEK_END);
- if(fwrite(&tmpFunc, sizeof(strFunc), 1, ptFile) == 1){
- printf("\nFuncionário cadastrado com sucesso\n");
- } else {
- printf("\nFalha ao cadastrar funcionário\n");
- }
- }
- fclose(ptFile);
- }
- }
- void alteraFuncionario(strFunc funcionario, int tipo){
- int i=0, opcao, indice, alteracao;
- FILE *ptFile;
- strFunc tmpFunc;
- char charAlteracao[100];
- indice = retornaIndice(funcionario.codigo);
- switch(tipo){
- case 0: //ainda nao sei o que o usuario quer alterar
- printf("\nEditar: \n\n [1] - Nome\n [2] - Endereco\n [3] - CPF \n [4] - Numero de vendas\n [5] - Recadastrar (alterar TUTO)\n [0] - Retornar ao menu principal\n\nEscolha: ");
- scanf("%d", &opcao);
- switch(opcao){
- case 0:
- opcao = 9;
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- alteraFuncionario(funcionario, opcao);
- break;
- }
- break;
- case 1: //alterar o nome
- printf("\nAntigo nome: %s\n Novo nome: ", funcionario.nome);
- scanf("%s", funcionario.nome);
- fflush(stdin);
- alteracao = 1;
- break;
- case 2: //alterar o endereco
- printf("\nAntigo endereco: %s\n Novo endereco: ", funcionario.endereco);
- scanf("%s", funcionario.endereco);
- fflush(stdin);
- alteracao = 1;
- break;
- case 3: //alterar o cpf
- printf("\nAntigo CPF: %d\n Novo CPF: ", funcionario.cpf);
- scanf("%d", &funcionario.cpf);
- fflush(stdin);
- alteracao = 1;
- break;
- case 4: //alterar o num vendas
- printf("\nAntigo numero de vendas: %d\n Novo numero de vendas: ", funcionario.numVendas);
- scanf("%d", &funcionario.numVendas);
- fflush(stdin);
- alteracao = 1;
- break;
- case 5: //alterar tuto
- printf("Antigo nome: %s\n Novo nome: ", funcionario.nome);
- scanf("%s", funcionario.nome);
- fflush(stdin);
- printf("Antigo endereco: %s\n Novo endereco: ", funcionario.endereco);
- scanf("%s", funcionario.endereco);
- fflush(stdin);
- printf("Antigo CPF: %d\n Novo CPF: ", funcionario.cpf);
- scanf("%d", &funcionario.cpf);
- fflush(stdin);
- printf("Antigo numero de vendas: %d\n Novo numero de vendas: ", funcionario.numVendas);
- scanf("%d", &funcionario.numVendas);
- fflush(stdin);
- alteracao = 1;
- break;
- case 8: //deletar esse funcionario
- funcionario.ativo = 0;
- alteracao = 1;
- break;
- }
- if(alteracao){
- fazAlteracao(funcionario, indice);
- }
- }
- void exibeFuncionario(){
- strFunc funcionario;
- int codigo, existe=0, posicao, i=0, prosseguir=1, opcao=0;
- FILE *ptFile;
- ptFile = fopen("funcionarios.dat", "rb+");
- if(!ptFile){
- printf("Errrr tratar");
- }
- printf("\nDigite o codigo do funcionario: ");
- scanf("%d", &codigo);
- if(existeFuncionario(1, codigo, 0)){
- funcionario = infoFuncionario(codigo);
- printf("\n Codigo: %d\n Nome: %s \n Endereco: %s \n CPF: %d\n Numero de vendas: %d\n", funcionario.codigo, funcionario.nome, funcionario.endereco, funcionario.cpf, funcionario.numVendas);
- printf("\nOpcoes: \n\n [1] - Editar dados \n [2] - Deletar funcionario \n [0] - Voltar ao menu principal\n\nEscolha: ");
- scanf("%d", &opcao);
- switch(opcao){
- case 1:
- alteraFuncionario(infoFuncionario(codigo), 0);
- break;
- case 2: //deletar
- alteraFuncionario(infoFuncionario(codigo), 8);
- break;
- case 0:
- break;
- default:
- printf("Opcao invalida!");
- break;
- }
- } else {
- printf("\nFuncionario nao encontrado!! \n\n [1] - Fazer outra pesquisa\n [0] - Voltar ao menu principal\n");
- scanf("%d", &prosseguir);
- if(prosseguir){
- exibeFuncionario();
- }
- }
- fclose(ptFile);
- }
- void listaFuncionarios(tipo){
- int i, total, entrada;
- strFunc funcionario;
- FILE *ptFile;
- ptFile = fopen("funcionarios.dat", "rb+");
- total = retornaIndice();
- printf("\n");
- switch(tipo){
- case 0:
- break;
- case 1: //exibe funcionarios ativos somente
- if(total == 1){
- printf("Nao existem funcionarios cadastrados\n");
- }
- for(i=1;i<total;i++){
- fseek(ptFile, (i-1)*sizeof(strFunc), SEEK_SET);
- fread(&funcionario, sizeof(strFunc), 1, ptFile);
- if(funcionario.codigo != 0 && funcionario.ativo){
- printf("Codigo: %d; Nome: %s; Endereco: %s; CPF: %d; Vendas: %d\n", funcionario.codigo, funcionario.nome, funcionario.endereco, funcionario.cpf, funcionario.numVendas);
- }
- }
- break;
- case 2: //exibe todos funcionarios
- if(total == 1){
- printf("\nNao existem funcionarios cadastrados\n");
- }
- for(i=0;i<total;i++){
- fseek(ptFile, i*sizeof(strFunc), SEEK_SET);
- fread(&funcionario, sizeof(strFunc), 1, ptFile);
- if(funcionario.codigo != 0){
- printf("Codigo: %d; Nome: %s; Endereco: %s; CPF: %d; Vendas: %d; Ativo: %d\n", funcionario.codigo, funcionario.nome, funcionario.endereco, funcionario.cpf, funcionario.numVendas, funcionario.ativo);
- }
- }
- break;
- default:
- printf(" [1] - Exibir os funcionarios ativos\n [2] - Exibir todos os funcionarios\n [0] - Voltar ao menu principal\n\nEscolha: ");
- scanf("%d", &entrada);
- switch(entrada){
- case 1:
- listaFuncionarios(1);
- break;
- case 2:
- listaFuncionarios(2);
- break;
- }
- break;
- }
- }
- int main(){
- int menuController = 1, mainInput;
- int cadastrosAlterados = 0, cadastrosFeitos = 0;
- int i, total=100;
- FILE *ptFile;
- strFunc funcionario[total];
- while(menuController){
- printf("\nEscolha uma opcao:\n\n [1] - Cadastrar novo funcionário \n [2] - Procurar funcionario \n [3] - Listar todos os funcionarios\n [0] - Sair do menu\n\nEscolha: ");
- scanf("%d", &mainInput);
- ptFile = fopen("funcionarios.dat", "ab+");
- if(!ptFile) {
- printf("Arquivo nao pode ser lido\n");
- mainInput = 0;
- }
- switch(mainInput){
- case 1:
- cadastraFuncionario();
- break;
- case 2:
- exibeFuncionario();
- break;
- case 3 :
- listaFuncionarios();
- break;
- case 0:
- menuController = 0;
- break;
- default:
- printf("Opção inválida\n");
- break;
- }
- }
- fclose(ptFile);
- printf("Sessão terminada, %d cadastros alterados e %d cadastros feitos", cadastrosAlterados, cadastrosFeitos);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement