1. O documento apresenta um trabalho sobre a bonificação natalina da empresa ABC desenvolvido para a disciplina de Algoritmos II.
2. O trabalho propõe um sistema com funcionalidades como cadastro de funcionários, pesquisa por nome e código, relatório e salvar dados.
3. O objetivo é aplicar conceitos de programação estruturada em C como comandos de seleção, repetição, registros e structs, manipulação de arquivos.
Projeto airsoftware emca 2010 - centro paula souza - taubaté,sp
Bonificação natalina abc
1. UNIVERSIDADE DO ESTADO DE MATO GROSSO/UNEMAT
CAMPUS UNIVERSITÁRIO DO VALE DO TELES PIRES
LICENCIATURA PLENA EM COMPUTAÇÃO
ASPECTOS FORMAIS DA COMPUTAÇÃO E ALGORITMOS II - AFCAII
Alexandro Nardeli Leite
Douglas Silva da Rocha
Everson Wolf
Uanderson de Jesus Coelho
Venerson Martins Rodrigues
BONIFICAÇÃO NATALINA DA EMPRESA “ABC”
Colíder - MT
2011
2. ii
Alexandro Nardeli Leite
Douglas Silva da Rocha
Everson Wolf
Uanderson de Jesus Coelho
Venerson Martins Rodrigues
BONIFICAÇÃO NATALINA DA EMPRESA “ABC”
Trabalho apresentado ao Cur-
so de Licenciatura em compu-
tação da Universidade Esta-
dual de Mato Gros-
so/UNEMAT, para a disciplina
Aspectos Formais da Compu-
tação e Algoritmos II – AFCA
II.
Professor: Maicon A. Sartin
Colíder - MT
2011
ii
3. Sumário
1 Introdução _________________________________________________________________ 4
1.1 EXEMPLO (CRIAÇÃO DE MENU) ___________________________________________________ 5
1.1.1 Structs ................................................................................................................................ 6
1.1.2 Justificativa ....................................................................................................................... 6
1.1.3 Objetivo Geral ................................................................................................................... 7
2 Referencial Teórico __________________________________________________________ 7
2.1 COMANDOS DE SELEÇÃO _________________________________________________________ 7
2.2 ESTRUTURA DE REPETIÇÃO _______________________________________________________ 9
2.3 REGISTROS E STRUCT ___________________________________________________________ 10
2.4 FUNÇÕES ____________________________________________________________________ 11
2.5 MANIPULAÇÃO DE ARQUIVOS_____________________________________________________ 12
2.5.1 Abrindo e Fechando um Arquivo .................................................................................... 12
3 Desenvolvimento ___________________________________________________________ 13
3.1 SUBSEÇÃO DE EXEMPLO (SE HOUVER) _____________________________________________ 14
Subseção 1 de exemplo (se houver) .......................................................................................... 14
4 Conclusão_________________________________________________________________ 15
5 Referências Bibliográficas ___________________________________________________ 16
4. Lista de Figuras
Figura 1 Funcionalidades Básicas do Sistema (Menu Principal) ...................................................................................... 5
2
6. 1 Introdução
É evidente, que há necessidade de que as unidades que compõem um computador se comuni-
quem entre si para que qualquer usuário possa desempenhar um bom trabalho. Por exemplo, quando
o usuário precisa buscar na memória um dado ou informação fornecida pelo teclado anteriormente,
e que foi armazenado; quando precisar realizar uma operação aritmética, e assim por diante.
Mas a verdade é que para que um computador tenha alguma utilidade, ele deve executar um
programa que tenha uma finalidade específica, como: games (jogos) que são programas que têm
como objetivo propiciar entretenimento aos seus usuários, o pacote Office que oferece uma grade
de aplicativos como processador de texto, planilhas eletrônicas, programa para a criação e exibição
de apresentação de slides, dentre outros. E ainda podemos citar os navegadores que são programas
que conectam os usuários à rede mundial de computar, e os gravadores para gravar CD e DVD.
Tudo tem um início e, no mundo dos programas não é diferente, para desenvolver aplicativos
como esses citados acima, são necessários anos de estudos e pesquisas, sem mencionar que nesse
período vários testes são executados. E aqui chegamos à importância da disciplina de Aspectos
Formais da Computação e Algoritmos I e II, ou simplesmente Algoritmos I e II do curso de Licen-
ciatura em Computação.
Começa o desafio, é uma caminhada longa e que exige muito esforço e dedicação para quem
quer chegar a ser um bom programador, esse é só mais um passo, o primeiro já foi dado, ao concluir
a disciplina de Aspectos Formais da Computação e Algoritmos I, onde se estuda uma introdução à
programação, mas precisamente uma introdução a programação em linguagem C. Agora é a vez de
concluir a disciplina de Aspectos Formais da Computação e Algoritmos II. Só que não mais com
uma pequena introdução, mas já com algumas noções mais complexas de programação em lingua-
gem C. Essa disciplina é de importância fundamental para todo aquele que quer ser programador, e
é desenvolvendo trabalhos como esse, que os acadêmicos despertam o interesse e desenvolvem suas
habilidades na elaboração de algoritmos e posteriormente, a transcrição desses para uma linguagem
de programação, transformando-o em um eficiente aplicativo.
Neste trabalho foi proposto e desenvolvido um programa dentro do conteúdo que já foi estu-
dado, que será utilizado por uma empresa para bonificação de seus funcionários.
O programa chama-se Sistema de Bonificação Natalina da Empresa ABC.
O programa é composto de quatro funcionalidades principais, sendo uma para cadastrar os
funcionários, outra para pesquisar um funcionário pelo nome, outra para pesquisar um funcionário
pelo código e uma para exibir um relatório como todos os dados processados pelo sistema. Ainda
conta com uma funcionalidade para salvar todos os dados manipulados pelo sistema e também uma
4
7. funcionalidade extra que é para sair do sistema.
Figura 1 Funcionalidades Básicas do Sistema (Menu Principal)
O desenvolvimento desse trabalho é de fundamental importância para aprimorar e adquirir
conhecimentos, e tem como objetivo proporcionar os conceitos básicos relacionados com a criação
de algoritmos e programas um pouco mais complexos, também despertar nos acadêmicos o interes-
se pela programação estruturada e a importância da prática na perfeição de cada algoritmo.
1.1 Exemplo (criação de menu)
Para se criar um menu usando um algoritmo em linguagem C, normalmente descrevemos as
opções no código e depois usamos uma estrutura de seleção( chamada SWITCH), para separar cada
opção escolhida pelo usuário do sistema porém, quando precisamos repetir o menu partimos para o
uso de uma estrutura de repetição (nesses casos as mais utilizadas são WHILE e DO – WHILE),
nesse algoritmo foi utilizado o WHILE no menu principal e o DO – WHILE nos submenus.
Figura 2 Criação interna de um Menu
5
8. 1.1.1 Structs
Podemos fazer a declaração de todas as principais variáveis de um algoritmo usando uma
única estrutura ou um registro, um registro ou estrutura é uma coleção de várias variáveis, possi-
velmente de tipos diferentes. Na linguagem C, registros são conhecidos como structs (abreviatura
de structures).
Figura 3 Declaração de várias variáveis dentro de uma estrutura
1.1.2 Justificativa
Devido às grandes transformações na Indústria, no Comércio e também na Educação, a cada
dia muitos se perguntam: acompanharemos essas transformações? Conseguiremos administrar essas
inovações tecnológicas? Pensando nesse referencial que as universidades cada vez mais inovam na
criação e reorganização de cursos para a formação de novos cientistas e tecnólogos.
Com isso destacam-se os cursos de formação de profissionais que atuarão principalmente no
atendimento dos campos acima descritos, que são os cursos para formação de programadores. Pro-
gramadores são profissionais que trabalham no desenvolvimento de softwares (programas e aplica-
tivos), esses por sua vez são classificados de várias formas, podemos citar duas que são aplicativos
comerciais e aplicativos educativos, dentre outros.
O curso para o qual se destina esse trabalho é o Curso de Licenciatura em Computação, co-
mo o nome já diz não é um curso para a formação de programadores e sim para a formação de pro-
fessores, porém com uma avaliação positiva por todos aqueles que ingressam no curso com a inten-
são de se tornar um programador, sendo esse o primeiro passo, com a conclusão do curso se faz
necessário que o profissional procure uma especialização na área.
O desenvolvimento desse trabalho é de grande importância, e serve como estímulo a todo
aquele que querem continuar no caminho para ser futuros profissionais da programação. Desenvol-
6
9. vendo assim a criatividade, o desejo de pesquisa e principalmente o raciocínio lógico, um dos prin-
cipais requisitos para a conclusão do trabalho, bem como da disciplina de Algoritmos II. Uma vez
que a prática desse algoritmo requer a utilização de todos os conceitos abordados até o presente
momento e também uma pesquisa em busca de novos conceitos e aplicações dos conhecimentos
adquiridos, testando assim o raciocínio de cada integrante do grupo.
1.1.3 Objetivo Geral
Proporcionar ao acadêmico de forma clara e objetiva os conceitos, e o uso dos programas
feitos em C, permitindo que a partir daí o mesmo possa desenvolver novas habilidades, apreender e
compreender o conteúdo empregando na construção e execução de novos algoritmos.
2 Referencial Teórico
Aqui estão descritos alguns dos principais conceitos utilizados para o desenvolvimento desse
trabalho:
2.1 Comandos de Seleção
C suporta dois tipos de comandos de seleção: if e switch. Além disso, o operador é uma alter-
nativa ao if em certas circunstâncias.
if
A forma geral da sentença if é
if (expressão)comando;
else comando;
onde comando pode ser um único comando, um bloco de comandos ou nada (no caso de comandos
vazios). A cláusula else é opcional.
if(funcionario[pos].cargo == 1)
{
funcionario[pos].cargo=15.00;
funcionario[pos].perc_bonif=0.25;
printf("ntAUXILIAR!nn");
}
if(funcionario[pos].cargo == 2)
{
funcionario[pos].cargo=35.00;
funcionario[pos].perc_bonif=0.15;
7
10. printf("ntSUPERVISOR!nn");
}
if(funcionario[pos].cargo == 3)
{
funcionario[pos].cargo=60.00;
funcionario[pos].perc_bonif=0.10;
printf("ntGERNETE!nn");
}
ifs aninhados
Um if aninhado é um comando if que é o objeto de outro if ou else, ifs aninhados são muito
comuns em programação. Em c, um comando else sempre se refere ao comando if mais próximo,
que está dentro de mesmo bloco do else e não está associado a outro if.
if(funcionario[cont].matricula == cod)
{
if (funcionario[cont].vazio==1)
{
printf("n--------------------------------------------------------------------------------
nn");
printf("nFUNCIONARIO ENCONTRADO n");
printf("n--------------------------------------------------------------------------------
nn");
printf("t MATRICULA : %dn",funcionario[cont].matricula);
printf("t NOME : %sn",funcionario[cont].nome);
printf("t CELULAR : %ldn",funcionario[cont].cel);
printf("t TELEFONE : %ldn",funcionario[cont].tel);
printf("t RG : %ldn",funcionario[cont].rg);
printf("t CPF : %sn",funcionario[cont].cpf);
A escada if-else-if
Uma construção comum em programação é a forma if-else-if, algumas vezes chamada de es-
cada if-else-if devido a sua aparência. A sua forma geral é:
If(expressão)comando;
else
if(expressão)comando;
else
if(expressão)comando;
.
.
.
else comando;
if(funcionario[cont].cargo==15)
{
printf(" AUXILIARt");
}
8
11. else if(funcionario[cont].cargo==35)
{
printf(" SUPERVISORt");
}
else
{
printf(" GERENTEt");
}
2.2 Estrutura de Repetição
O comando for
O comando for é uma estrutura de repetição que repete a execução de uma dada sequência de
comandos um número de vezes que pode ser determinado pelo próprio programa, devendo ser es-
crito com a seguinte sintaxe:
for (inicializações; condições de manutenção da repetição; incrementos)
{
sequência de comandos
}
for(cont=0; cont<raiz; cont++)
{
printf("n %dt %st",funcionario[cont].matricula, funciona-
rio[cont].nome);
if(funcionario[cont].cargo==15)
{
printf(" AUXILIARt");
}
else if(funcionario[cont].cargo==35)
{
printf(" SUPERVISORt");
}
else
{
printf(" GERENTEt");
}
printf("R$%.2f R$%.2ft
R$%.2f",funcionario[cont].salario,funcionario[cont].bonif,funcionario[cont].s
alario+funcionario[cont].bonif);
}
O comando while
O segundo laço disponível em C é o laço while. A sua forma geral é
while (Expressão)
9
12. {Sequência de comandos}
Onde a sequência de comandos é um conjunto vazio, um comando simples ou um bloco de
comandos. A condição pode ser qualquer expressão, e verdadeiro é qualquer valor não-zero. O
laço se repete se a condição for verdadeira.
int cont=0;
while (cont<=100)
{
if (funcionario[cont].matricula==matricula)
return(0);
cont++;
}
return(1);
O comando do while
Como dissemos na seção anterior, o número de execuções da sequência de comandos associa-
da a um comando while pode ser zero. Há situações onde é importante se garantir a execução de
uma sequência de comandos pelo menos uma vez. Uma situação onde isto é importante é a verifica-
ção da consistência dos dados de entrada. Esta ação consiste em se dotar o programa de recursos
para recusar dados incompatíveis com a entrada do programa, só "recebendo" dados que satisfaçam
às especificações (lógicas ou estabelecidas) dos dados de entrada. Nesse programa será exibida a
validação das opções do menu.
do {
scanf("%d",&opcao);
system("cls");
if(opcao<2 || opcao>2)
printf("nnDIGITE [2] PARA VOLTAR AO MENU PRINCIPAL: ");
} while(opcao<2 || opcao>2);
2.3 Registros e Struct
Um registro (= record) é uma coleção de várias variáveis, possivelmente de tipos diferentes.
Na linguagem C, registros são conhecidos como structs (abreviatura de structures).
O exemplo abaixo declara um registro x com três campos (ou membros) inteiros:
struct {
int dia;
10
13. int mes;
int ano;
} x;
A estrutura do programa deste projeto foi exemplificada em imagem um pouco mais acima,
porém aqui será apresentado código.
struct dados_funcionario
{
int matricula,cargo;
int vazio;
char nome[50];
unsigned long int rg;
char cpf[12];
unsigned long int cel,tel;
float horas_trab,horas_ext,salario,bonif;
float perc_bonif;
} funcionario[100];
2.4 Funções
Um programa em C pode (e deve) ser escrito como um conjunto de funções que são executa-
das a partir da execução de uma função denominada main (). Cada função pode conter declarações
de variáveis, instruções, ativações de funções do sistema e de outras funções definidas pelo progra-
mador. Naturalmente, o objetivo de uma função deve ser a realização de alguma "sub-tarefa" espe-
cífica da tarefa que o programa pretende realizar. Aqui a função verifica_mat, responsável por veri-
ficar se a matricula do funcionário já existe ou não no sistema;
int verifica_mat(int matricula)
{
int cont=0;
while (cont<=100)
{
if (funcionario[cont].matricula==matricula)
return(0);
cont++;
}
return(1);
}
11
14. 2.5 Manipulação de Arquivos
2.5.1 Abrindo e Fechando um Arquivo
O sistema de entrada e saída do ANSI C é composto por uma série de funções, cu-
jos protótipos estão reunidos em stdio.h . Todas estas funções trabalham com o conceito
de "ponteiro de arquivo". Este não é um tipo propriamente dito, mas uma definição usando
o comando typedef. Esta definição também está no arquivo stdio.h. Podemos declarar
um ponteiro de arquivo da seguinte maneira:
FILE *p;
p será então um ponteiro para um arquivo. É usando este tipo de ponteiro que vamos po-
der manipular arquivos no C.
2.5.1.1 - fopen
Esta é a função de abertura de arquivos. Seu protótipo é:
FILE *fopen (char *nome_do_arquivo,char *modo);
O nome_do_arquivo determina qual arquivo deverá ser aberto. Este nome deve ser
válido no sistema operacional que estiver sendo utilizado. O modo de abertura diz à fun-
ção fopen() que tipo de uso você vai fazer do arquivo.
Aqui a função carregar, responsável por carregar e abrir os arquivos para serem lidos e para
que possa ser acrescentados mais dados.
void carregar(void)
{
FILE *fp;
int i;
if ((fp=fopen("cadastro.b", "rb"))==NULL)
{
printf("O arquivo nao pode ser aberto.n");
return;
}
for (i=0; i<100; i++)
{
if (fread(&funcionario[i], sizeof(struct dados_funcionario), 1, fp)!=1)
{
if (feof(fp))
break;
printf("Erro de leitura no arquivo.n");
}
}
raiz=i-1;
fclose(fp);
printf("n---------------------------------------------------------------------n");
printf("Dados carregados com sucesso!n");
//printf("Melhor visualizado em tela cheia.n");
printf("n---------------------------------------------------------------------n");
system("pause");
12
15. system("cls");
}
3 Desenvolvimento
O programa inicia-se após a inclusão das bibliotecas (os includes), com a declaração da
estrutura a ser utilizado no programa, dos protótipos das funções implementadas, tais como menu,
cadastrar, salvar, e relatório dentre outras, em seguida houve a declaração de variáveis globais, a
variável do tipo estruct foi declarada como funcionário.
Após a função principal (main) foi implementada a função menu, cuja a finalidade é retornar
a tela principal do programa, possibilitando assim, que o usuário possa escolher uma das opções
oferecidas, ou seja, cadastrar um novo funcionário, pesquisar um registro já existente, bem como
exibir um relatório de todos os cadastros já efetuados, através da opção relatório.
Cadastrar
A função cadastro inicia com a verificação da posição dos cadastros, para evitar a repetição
de código (matricula), mas isso não é mostrado ao usuário, e em seguida uma solicitação para que o
usuário insira os dados do funcionário a ser cadastrado.
Todos os dados são armazenados na estrutura, para tal, fez-se o uso das funções scanf, e
gets, quando é solicitado para que o usuário insira os dados do funcionário, é apresentado um menu
com as opções do tipo de funcionário que venha a ser o mesmo, se é um auxiliar, um supervisor ou
um gerente para que se possa calcular seu salario e sua bonificação.
Pesquisar Código e Pesquisar Nome
Temos ainda duas funções de pesquisa, uma pesquisa pelo código, onde compara primeiro
se existe cadastros no sistema de depois se o código ou matricula solicitado na pesquisa é igual ao
mesmo já armazenado anteriormente, se for ele mostra se não exibe uma mensagem de não encon-
trado.
A outra pesquisa pelo nome, função idêntica a primeira a diferença é que compara o nome
ao invés do código.
Relatório
O Relatório exibe em tela um relatório com os principais dados dos funcionários cadastra-
dos, a função compara se têm dados cadastrados ele mostra se não tem exibe uma mensagem de
“Não existe dados no sistema”.
13
16. Salvar e Carregar
Com as funções salvar e carregar, os dados do sistema são gravados em disco, e quando
solicitados pelo usuário os mesmo são exibidos pelo sistema, para que possa pesquisar dados já
existente e até incluir novos dados, estrutura FILE, definida em stdio.h, que contem informações
usadas para processar o arquivo, a declaração do ponteiro *fp, para a estrutura FILE, seguida pelo
condicional if para verificar se há dados na estrutura, bem como para verificar se o arquivo existe,
ao ponteiro de arquivo *fp é atribuído um ponteiro para a estrutura FILE do arquivo aberto com
fopen. A função fopen exige dois argumentos: um nome de arquivo e um modo de abertura de ar-
quivo. O modo de abertura de arquivo "rb" indica que o arquivo deve ser aberto para gravação.
Se o arquivo não existir e for aberto para gravação, fopen cria o arquivo. Se um arquivo exis-
tente for aberto para gravação, os dados são adicionados (gravados no final “wb”), o if é usada para
determinar se o ponteiro de arquivo *fp é NULL (i.e., o arquivo não está aberto). Se ele for NULL,
é impressa uma mensagem de erro e o programa é encerrado. Caso contrário, a entrada é processada
e gravada no arquivo.
A função fwrite grava um bloco (número específico de bytes) de dados em um arquivo. Em
nosso programa, a instrução:
(fwrite(&funcionario[i], sizeof(struct dados_funcionario), 1, fp)!=1),
faz com que a estrutura funcionario de tamanho sizeof (struct dados_funcionario) seja gravada no
arquivo apontado por fp. O operador de sizeof retorna o tamanho em bytes do objeto contido entre
parênteses (nesse caso dados_funcionario).
A função fclose é usada para fechar o arquivo, liberando recursos (memória). Os dados es-
tão efetivamente gravados em disco.
3.1 Subseção de exemplo (se houver)
Subseção 1 de exemplo (se houver)
14
17. 4 Conclusão
Em virtude dos aspectos apresentados, durante o presente trabalho pode-se afirmar que
apesar das dificuldades encontradas no desenvolvimento do mesmo, devido à complexidade do con-
teúdo e pouco tempo de estudo, sua realização foi de fundamental importância para a ampliação do
ensino-aprendizagem, pois com o avanço na área computacional, as linguagens de programação têm
se desenvolvido e se expandido em diferentes setores, portanto mesmo com alguns pontos ainda por
explorar a concretização deste foi de grande relevância para o desenvolvimento do raciocínio e am-
pliação dos conhecimentos sobre as linguagens de programação C, até então quase que desconheci-
das por parte dos acadêmicos, acredita-se que a elaboração e realização do mesmo teve um imensu-
rável valor, pois os conhecimentos poderão ser utilizados na criação de programas para serem
usados em diversas áreas, mas o principal de tudo é a compreensão dos conceitos de linguagem de
programação para que quando do uso de outra linguagem já se tenha uma base de algoritmo.
15
18. 5 Referências Bibliográficas
[1] Schildt, Herbert ; (tradução e revisão técnica) C complete e total – 3ª edição revista e
atualizada, Robertos Carlos Mayer; São Paulo: Makron Books, 1996.
[2] Jamsa, Kris Ph.D/ Klander, Lars – Programando em C/C++, A Bíblia - Tradução e
revisão técnica por Jeremias René D. pereira dos Santos, São Paulo - MAKRON Bo-
oks, 1999.
[3] Evaristo, Jaime: Apostila “Aprendendo a Progamar, Programando na Linguagem
C para iniciantes”. Terceira Edição-Revista/Ampliada – Edição digital.
[4] Disponível em <http://www.ime.usp.br/~pf/algoritmos/aulas/stru.html> acessado em
Nov. 2011.
[5] Disponivel em
<http://www.ime.usp.br/~elo/IntroducaoComputacao/Manipulacao%20de%20arquivo.h
tm.
16