C - Folha de pagamento
Tenho que apresentar um programa que simule o mais perto possível um Sistema de Folha de pagamento.
Esse é o trabalho final da cadeira de Algoritmos da faculdade. Já desenvolvi uma parte do código,como mostrado abaixo, porém não consigo prosseguir pois ainda não aprendi em aula como salvar e resgatar dados de um arquivo de texto.
E este conhecimento é requisito indispensável pra finalizar o projeto. Pesquisei na internet e consegui aprender como salvar no arquivo, mas recuperar é que o problema. Segue abaixo a descrição do que deve conter o trabalho.
Ouvi falar de estruturas também e sei que vou ter esse conteúdo, mas não sei se para o meu trabalho essa conteúdo é relevante. Aceito todas as dicas e sugestões oferecidas.
Requisitos do Projeto (O que a solução deve apresentar?)
a) Cadastro de funcionários, com as seguintes informações: número de matrícula (inteiro), ano de contratação
(inteiro), nome (caracter), cargo (caracter), salário base (decimal) e número de dependentes (inteiro).
B) O número de matrícula é único para cada funcionário. O sistema deve garantir isso caso o usuário tente incluir
outro funcionário com um número de matrícula já existente.
c) Procedimento de cálculo do salário líquido:
♦ Salário base - INSS + salário educação
♦ Salário educação é 2.50% sobre o salário base para cada dependente.
d) Relatórios obrigatórios (explore várias possibilidades, além das listadas abaixo):
♦ O sistema deverá fornecer ao usuário uma lista de todos os
funcionários com o salário de cada mês.
♦ Para cada "cargo", o sistema deverá fornecer ao usuário uma
lista de funcionários e seus respectivos salários.
♦ O sistema deverá fornecer o gasto total mensal e anual da
Empresa com a folha de pagamento.
Observações:
Os dados do sistema deverão ser armazenados em arquivos e sempre que o programa for aberto recuperá-los.
Quando o programa for encerrado seus dados não podem ser perdidos.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include <windows.h>
// Define as constantes que serão as opções do menu
#define OP_CADASTRO 1
#define OP_LISTA_FUNC 2
#define OP_LISTA_CARGO 3
#define OP_GASTO_MENSAL 4
#define OP_GASTO_ANUAL 5
#define OP_SAIR 6
calcular_Inss(float salarioBase, float desconto){
const float ISENCAO08=0.08;// É constante que recebe o valor de 8%
const float ISENCAO09=0.09;// É constante que recebe o valor de 9%
const float ISENCAO11=0.11;// É constante que recebe o valor de 11%
const float ISENCAO_MAIOR=334.29;//É constante que recebe o valor de R$ 334,29
//verifica se o salario total do funcionario no ano é menor que R$ 911,70
if (salarioBase <= 911.70) {
//verifica se o salario é menor R$ 911,70 e calcula o valor do desconto
desconto = (salarioBase * ISENCAO08);
}
//verifica se o salario é maior que R$ 911.70 ou é menor R$ 1519,50 e calcula o valor do desconto
else if ((salarioBase > 911.70) && (salarioBase <= 1519.50)) {
//Calcula o valor da isenção
desconto = (salarioBase * ISENCAO09);
}
//verifica se o salario é maior ou igual a R$ 1519,50 ou é menor que R$ 3.038,99
else if (salarioBase > 1519.50 && salarioBase < 3038.99) {
//Calcula o valor da isenção
desconto = (salarioBase * ISENCAO11);
}
//verifica se o salario é maior ou igual a 2500
else if (salarioBase > 3038.99) {
//Calcula o valor da isenção
desconto = ISENCAO_MAIOR;
}
}
int main(int argc, char *argv[]){
const float indice_educacao=0.025;
int i, opcao, matricula, anoContratacao;
char nome[20]; char c;
int tamnome;
char cargo[20];
char usuario[6];
char senha[5];
char enfeite;
float salarioBase, desconto, salarioLiquido, salario_educacao, dependentes;
i = 0; enfeite = 0; desconto = 0.0;
//salarioLiquido = (salarioBase - desconto)+ salario_educacao;
// define a cor de fundo do executavel
system ("color F9");
// Mostra mensagem na tela pedindo que informe o usuario
printf ("\n\t\tDIGITE O NOME DO USUARIO: ");
gets(usuario);
fflush(stdin);
// Mostra mensagem na tela pedindo que informe a senha
printf ("\t\tDIGITE A SUA SENHA: ");
gets(senha);
// Verifica se o usuario é igual a nulo ou seja se não foi digitado nada
if (usuario == NULL){
// Mostra mensagem na tela avisando o usuário que ele não existe
printf("usuario nao existe!");
}
// Faz uma comparação entre o que o usuario digitou e os valores corretos para usuario e senha
if (strcmp(usuario,"admin")==0 && strcmp(senha,"root")==0) {
// Mostra a mensagem na tela informando que os dados estão corretos.
printf ("\t\tOs dados estão corretos!\n");
//system("pause");
do {
// Comando do windows system que limpa a tela
system("cls");
menuEntrada(opcao);
printf ("\n\t\tQUAL A OPCAO VOCE DESEJA? ");
scanf("%d", &opcao);
// Comando do windows system que limpa a tela
system("cls");
switch (opcao) {
case OP_CADASTRO:
// Comando do windows system que limpa a tela
system("cls");
printf ("\n\t\tDIGITE A MATRICULA DO FUNCIONARIO: ");
scanf ("%d", &matricula);
fflush(stdin);
printf ("\n\t\tDIGITE O NOME DO FUNCIONARIO: ");
gets(nome);
fflush(stdin);
printf ("\n\t\tDIGITE O ANO DE CONTRATACAO: ");
scanf ("%d", &anoContratacao);
fflush(stdin);
printf ("\n\t\tQUAL O CARGO DO FUNCIONARIO: ");
gets(cargo);
fflush(stdin);
printf ("\n\t\tDIGITE O SALARIO BASE: ");
scanf ("%f", &salarioBase);
calcular_Inss(desconto, salarioBase);
printf ("\n\t\tQUANTOS DEPENDENTES O FUNCIONARIO TEM? ");
scanf ("%f", &dependentes);
fflush(stdin);
calcular_Inss(salarioBase, desconto);
salario_educacao = (salarioBase * (indice_educacao * dependentes));
salarioLiquido = ((salarioBase + salario_educacao) - desconto);
// Declarar um identificador de fluxo, faça como se fosse uma variável normal:
FILE *fp;//Utilize o asterisco
// Verifica se existe um arquivo bancoDados.txt. O atributo a+ cria um arquivo
if ((fp = fopen("bancoDados.txt","a+")) == NULL){
printf("Impossível criar arquivo");
}
else{
fprintf(fp,"%d", matricula);
fprintf(fp,"\n");
fputs(nome,fp);
fprintf(fp,"\n");
fprintf(fp,"%d", anoContratacao);
fprintf(fp,"\n");
fputs(cargo,fp);
fprintf(fp,"\n");
fprintf(fp,"%.2f", salarioBase);
fprintf(fp,"\n");
fprintf(fp,"%.f", dependentes);
fprintf(fp,"\n");
fprintf(fp,"%.2f", salarioLiquido);
fprintf(fp,"\n");
}
fclose(fp);
// Abre o arquivo pelo windows
system("bancoDados.txt");// quando está na mesma pasta do executavel usa caminho relativo
// Comando do windows system que limpa a tela
system("cls");
break;
case OP_LISTA_FUNC:
break;
case OP_LISTA_CARGO:
break;
case OP_GASTO_MENSAL:
break;
case OP_GASTO_ANUAL:
break;
}
}while (opcao != 6);
}
//getch();
//return 0;
}
menuEntrada(int opcao){
printf ("\n\t\t[%d] CADASTRAR FUNCIONARIO\n", OP_CADASTRO);
printf ("\t\t[%d] LISTAR FUNCIONARIOS\n", OP_LISTA_FUNC);
printf ("\t\t[%d] LISTAR FUNCIONARIOS POR CARGO\n", OP_LISTA_CARGO);
printf ("\t\t[%d] GASTO MENSAL\n", OP_GASTO_MENSAL);
printf ("\t\t[%d] GASTO ANUAL\n", OP_GASTO_ANUAL);
printf ("\t\t[%d] FECHAR PROGRAMA\n", OP_SAIR);
}
Não quero que ninguém faça-o por mim, mas gostaria que me dessem uma ajuda. Me mostrando como faço pra recuperar dados de um arquivo. Eu tenho 4 relatórios pra fazer se alguém puder me ajudar com um deles os outros com certeza conseguirei desenvolver sozinho.
Discussão (21)
Carregando comentários...