quarta-feira, 6 de outubro de 2010

Aula 10 parte 3

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#define MAX 10
struct data {
int dia, mes, ano;
};
struct registro {
int id;
char nome[20], endereco[20];
struct data nascimento;
float salariobruto;
};
class funcionario {
private:
int total; //total de registros cadastrados no vetor
struct registro lista[MAX]; //lista de registros
public:
funcionario(); //metodo construtor
int calcularID();
int verificaID(int);
int ler();
void incluir();
void mostrar();
float salarioliquido(float);
void gravar();
};
//--------------------------------------------------------------
funcionario :: funcionario()
{
total = 0;
};
//--------------------------------------------------------------
void funcionario :: incluir()//construção do metodo incluir
{
int d, m, a;
float sb;
printf("\nC A D A S T R O\n");
lista[total].id = calcularID();
printf("Nome:"); gets(lista[total].nome);
printf("Endereco:"); gets(lista[total].endereco);
printf("Data Nascimento (d/m/a):"); scanf("%d %d %d", &d, &m, &a);
printf("Salario Bruto..........:"); scanf("%f", &sb);
lista[total].nascimento.dia = d;//acesso aos membros de uma estrutura.
lista[total].nascimento.mes = m;
lista[total].nascimento.ano = a;
lista[total].salariobruto = sb;
total++;
};
//--------------------------------------------------------------
void funcionario :: mostrar()//construção do metodo mostrar
{
float sl, totalsl=0,totalsb=0;
int i;
for(i=0 ; i < total ; i++) {
sl=salarioliquido(lista[i].salariobruto);
totalsl = totalsl + sl;
totalsb = totalsb + lista[i].salariobruto;
printf("\nReg: %2d\n", i+1);
printf("Id.................: %3d\n",lista[i].id);
printf("Nome...............: %s\n",lista[i].nome);
printf("Endereco...........: %s\n",lista[i].endereco);
printf("Data de Nascimento.: %d/%d/%d\n",lista[i].nascimento.dia,lista[i].nascimento.mes,lista[i].nascimento.ano);
printf("Salario Bruto (R$): %.2f\n",lista[i].salariobruto);
// printf("Desconto %%........: %.2f\n",lista[i].desconto);
printf("Salario Liquido(R$): %.2f\n\n",sl);
}
printf("\n\nRelatorio Final\n");
printf("\nTotal de Registros no Vetor: %d", total);
printf("\nTotal de Salario Bruto.............: %.2f", totalsb);
printf("\nTotal de Salario Salario Liquido...: %.2f", totalsl);
};
//--------------------------------------------------------------
int funcionario :: calcularID()
{
int id, i;
srand(time(NULL)); //gera sequencia diferente
while(1){ //loop enquanto id existir
id = rand()%1000;
for (i = 0; i< total ;i++){
if(lista[i].id == id)break; //achou id
}
if(i == total)break; //interrompe loop infinito
}
return id;
};
//--------------------------------------------------------------
void funcionario :: gravar() //metodo para gerar, gravar dados e fechar um arquivo txt ou csv
{
int i;
FILE *p;//PONTEIRO QUE APONTA PARA O ARQUIVO
//ABRE O ARQUIVO DADOS.001 PARA INPUT/OUTPUT
p = fopen("teste.csv", "r+t");//MODO R PARA VERIFICAR SE O ARQUIVO EXISTE
//MODO R SOMENTE LEITURA R+T LEITURA E GRAVAÇÃO
if (p == NULL)//VERIFICA SE O ARQUIVO EXISTE
p = fopen("teste.csv", "wt");//CRIANDO UM NOVO ARQUIVO E ABRE O ARQUIVO PARA GRAVAÇÃO
//ABRIR NO MODO W CRIA UM NOVO ARQUIVO WT ARQUIVO NOVO PARA E GRAVAÇÃO
else
fseek(p, 0, SEEK_END);//DESLOCA O PONTEIRO PARA O FINAL DO ARQUIVO
for(i=0 ; i < total ; i++){
fprintf(p, "\"%d\";", lista[i].id);
fprintf(p, "\"%s\";", lista[i].nome);
fprintf(p, "\"%s\";", lista[i].endereco);
fprintf(p, "\"%2d/%2d/%4d\";", lista[i].nascimento.dia,lista[i].nascimento.mes,lista[i].nascimento.ano);
fprintf(p, "%.2f\n", lista[i].salariobruto);
}
fclose(p);//FECHA O ARQUIVO
};
//--------------------------------------------------------------
float funcionario :: salarioliquido(float sb)//metodo para calcular o salario liquido e o desconto
{
float sl, desconto;
if(sb < 1200)
desconto = 0;
else
if(sb < 2400)
desconto = 0.15;
else
desconto = 0.27;
sl = sb - (sb * desconto);
return(sl);
};
//--------------------------------------------------------------
int funcionario :: ler()
{
    int i , j , idx = 0 , v[10] ;
    char str[100], campo[50];
    FILE *p; //Ponteiro que aponta para o arquivo
   
    //abre o arquivo dados.001 para input/output
    p = fopen("teste.CSV","rt");//modo r para verificar se o arquivo
                                       //modo r somente leitura
    if (p == NULL){//verifica se o arquivo existe
          printf("\narquivo nao existe\n");
          return(-1);
}
while(!feof(p)) //loop enqto o final do arquivo nao chegar
    {
     fgets(str, sizeof(str),p); //le uma linha do arquivo
                                //e armazena na variavel str
                                printf("\n%s",str);
     //percorre toda a string str contendo caracteres lidos
     //e vai apresentando os campos separadamente
     for(i = 0;i < strlen(str);i++){
           if(str[i] != '"' && str[i] != ';')
           printf("%c", str[i]);
           if(str[i] == ';')printf("\n");
           }
           /*
           lista[idx].id = ??
           lista[idx].nome = ??
           lista[idx].enderco = ??
           lista[idx].nascimento = ??
           lista[idx].salariobruto = ??
           idx++;
           */
        }
        fclose(p);
        return(0);
    }
//--------------------------------------------------------------
int main()
{
int opcao;
funcionario f;//instancia da classe
while(1) { // loop infinito
printf("\n\nS I S T E M A C A D A S T R O\n\n");
printf("1. Incluir\n");
printf("2. Consultar por Nome\n");
printf("3. Relatorio Geral\n");
printf("\nopcao <0> para sair:");
scanf("%d", &opcao);
getchar();
switch(opcao) {
case 0: printf("\nsair\n\n");
break;
case 1: f.incluir();
break;
case 2: printf("\nConsulta por Nome\n");
break;
case 3: f.mostrar();
break;
default: printf("\nopcao invalida\n");
break;
}
if (opcao == 0) break; // sai do loop infinito
} // fim do loop
f.gravar();
system("pause");
return(0);
}

Nenhum comentário:

Postar um comentário