You are on page 1of 15

UNIVERSIDADE DE PASSO FUNDO

FACULDADE DE ENGENHARIA E ARQUITETURA


CURSO DE ENGENHARIA MECÂNICA

Relatório Trabalho Final

Disciplina: Informática Aplicada à Engenharia


Acadêmicos: Edirlei Vieira
Elisandro Setti

Professor: Wu Xiao Bing

Passo Fundo, junho de 2005


Introdução/Objetivos

Este trabalho tem por finalidade consolidar os conhecimentos adquiridos durante


o semestre da disciplina de Informática Aplicada à Engenharia.
Durante este semestre aprendemos e exercitamos a linguagem de programação
Fortran 90, com o intuito de adquirir conhecimentos sobre essa ferramenta que auxilia
na solução de problemas no dia-a-dia do engenheiro.
Nosso trabalho refere-se a um software para gerenciamento de estoque e venda
que pode ser utilizado por pequenas empresas.
Problema:
Em uma empresa, temos muitos produtos e, por isso, há dificuldade em manter o
controle do estoque, bem como a atualização dos custos.

Justificativa:
Este software irá auxiliar a administrar o estoque, custos, vendas, faturamento e
lucratividade de empresas, facilitando o acesso aos dados através de banco de dados.

Metodologia:
Este programa está dividido em 04 módulos diferentes: cadastro, alterações,
relatórios e venda.
No módulo de cadastro, o usuário irá cadastrar o produto através da descrição.
Também irá cadastrar o custo, preço de venda e a quantidade em estoque do produto.
Durante o cadastro, o software executa algumas verificações para que o usuário
não cadastre dois produtos com o mesmo nome, bem como o preço de venda menor que
o custo. Também verifica se o banco de dados não está lotado, com um limite de 100
produtos.
No módulo alterações, o usuário localiza o produto através da descrição e
consegue alterar os dados cadastrados.
No módulo relatórios, o usuário tem a opção de relatório de estoque ou
financeiro, onde o primeiro lista todos os produtos cadastrados, mostrando a descrição,
custo, preço de venda e estoque, enquanto o segundo relatório lista o faturamento e o
lucro obtidos até o momento.
No módulo venda, o usuário executa a venda dos produtos cadastrados, onde
através da descrição localiza o produto. Se o produto for localizado, solicita para que
seja digitada a quantidade de venda, onde a mesma é verificada com o estoque atual. Se
o estoque for maior que a quantidade de venda, a venda prossegue e é solicitada ao
usuário a porcentagem de desconto que será dado para este produto.
O software calcula o valor de venda para o produto e debita do estoque a
quantidade vendida. Na seqüência, imprime na tela a quantidade vendida e o valor total
do produto.
Após, solicita ao usuário a finalização da venda, onde se o usuário finalizar, será
apresentado na tela todos os produtos vendidos, com respectivas quantidades e valores,
e o valor total da venda. Se o usuário não finalizar a venda, serão repetidos os passos de
localização do produto, quantidade de venda, desconto e impressão parcial da venda.
Os dados cadastrados são salvos em um arquivo no formato txt, para que sejam
lidos cada vez que inicia-se o software. Na inicialização, é solicitado ao usuário a
limpeza do banco de dados, onde se for aceito, o banco será sobrescrito, excluindo os
dados previamente cadastrados.
Algoritmos
INICIO

OPEN(estoque.txt)

LEIA("Limpar Dados?", inc)

inc /= 'S' F ESCR ("Banco dados limpo")

READ(estoque.txt)

CLOSE(estoque.txt)

DO

MENU

LEIA ("Opcao", op)

op==1 F

op==2 F

V
CALL cadastro
op==3 F

V
CALL alteracao
op==4 F

V
CALL relatorios
op==5 F

V
CALL venda

ESCR("Opcao Invalida")

OPEN(estoque.txt)

WRITE(estoque.txt)

CLOSE(estoque.txt)
EXIT

FIM
CADASTRO

i = npc

i <= 100 F

V FIM

i == 100 V

F ESCR("Banco Dados Lotado")

LEIA("Produto", prod_i) npc = i

z=0
FIM
x=1

x <= i V
prod_i == prod(x) V ESCR("Produto Ja Cadastrado")
F

z=1

z == 0 F

V
npc = i
prod(i) = prod_i
y=0

LEIA("Sair", c)

y == 0 F LEIA("Estoque", est(i))

V
c == 's' ou 'S' F
LEIA("Custo", cus(i))
LEIA("Preco Venda", pv(i)) V

npc = i + 1
EXIT
pv(i) >= cus(i) V y=1

F FIM

ESCR("Preco Venda menor Custo")


ALTERACOES

DO

LEIA("Produto", busc)

p=0
i=1

i <= npc-1 F

p == 0 V ESCR("Produto Nao Cadastrado")

F
F busc == prod(i)

V
LEIA("Sair", c)

p=1

ESCR(prod(i), cus(i), pv(i), est(i)) c == 's' ou 'S' V EXIT

F
MENU FIM

LEIA("Opcao", o)

o == 1 F

o == 2 F

LEIA("Produto", prod(i)) V

o == 3 F

DO o == 4 F

V V

DO

LEIA("Custo", cus(i)) V LEIA("Estoque", est(i))

LEIA("Preco Venda", pv(i))

V cus(i) > pv(i)

F
V pv(i) < cus(i)

ESCR(prod(i), cus(i), pv(i), est(i)) F


EXIT

EXIT
RELATORIOS

MENU

LEIA("Opcao", o)

o == 1 F

o == 2 F ESCR("Opcao Invalida")
ESCR("Rel Estoque")
V

i == 1
ESCR("Rel Financeiro")
ESCR(fat, lucro)

i <= npc-1 F

V FIM

ESCR(prod(i), cus(i), pv(i), est(i))


VENDA

t_vend = 0
x=0

DO

LEIA("Produto", busc)

p=0
i=1

i <= npc-1 F

p == 0 V ESCR("Produto nao Cadastrado")

F
F busc == prod(i)

V
LEIA("Finalizar", c)

p=1

ESCR(prod(i), cus(i), pv(i), est(i)) c == 'f' ou 'F' F

DO n=1

LEIA("Quantidade", qv) ESCR(prod_v(n),


n <= x V qtd(n), t_prod(n))

EXIT
qv > est(i) F t_pr = qv * pv(i) ESCR("Total Venda", t_vend)
est(i) = est(i) - qv
V
fat = fat + t_vend
LEIA("Desconto", desc)
ESCR("Estoque Insuficiente") EXIT

x=x+1
FIM
prod_v(x) = busc
qtd(x) = qv
t_prod(x) = (t_pr - (t_pr * (desc/100)))
t_vend = t_vend + t_prod(x)
lucro = lucro + (t_prod(x) - (cus(i) * qtd(x)))

ESCR(prod_v(x), qtd(x), t_prod(x))


Código Fonte
program estoque
implicit none
character (len=15)::prod(100)
real::cus(100), est(100), pv(100), fat, lucro
integer::npc=1, x
character::op, a, inc=0

open(unit=6, file="c:\estoque.txt")

print '(25/,15x,a)', "***** Limpar Banco de Dados? *****"


print '(/,10x,a)',"Se for a primeira vez que inicia o progrma LIMPAR o banco!!!"
print '(/,10x,a,\)',"Digite S para Sim => "
read '(a)',inc

if (inc/='S') then
read (6,100) prod
read (6,200) cus, est, pv, fat, lucro
read (6,300) npc
close (unit=6)
else
print '(25/,15x,a)', "***** BANCO DE DADOS LIMPO *****"
read '(a)', a
end if

100 format (a20)


200 format (f10.2)
300 format (i3)

do
print '(30/,15x,a)', "CONTROLE DE ESTOQUE"
print '(2/,10x,a)', "OPCOES:"
print '(/,10x,a)', "1 - Cadastro de Produto"
print '(/,10x,a)', "2 - Alteracoes"
print '(/,10x,a)', "3 - Relatorios"
print '(/,10x,a)', "4 - Venda"
print '(/,10x,a)', "5 - Sair"
print '(2/,10x,a,\)', "Digite a Opcao: "
read*, op
select case (op)
case ('1')
call cadastro(prod, cus, pv, est, npc)
case ('2')
call alteracoes(prod, cus, pv, est, npc)
case ('3')
call relatorios(prod, cus,pv , est, npc, fat, lucro)
read '(a)', a
case ('4')
call venda(prod, cus, pv, est, npc, fat, lucro)
case ('5')
exit
case default
print '(5/,10x,a)', "Opcao invalida!!!"
read '(a)', a
end select
end do
open(unit=6, file="c:\estoque.txt")
write (6,100) prod
write (6,200) cus, est, pv, fat, lucro
write (6,300) npc
close (unit=6)
end program

subroutine cadastro(prod, cus, pv, est,npc)


implicit none
character (len=15)::prod(100), prod_i
character:: c, a
real:: cus(100), est(100), pv(100)
integer::i, npc, x, z, y

do i=npc,100
print '(30/,15x,a)', "CADASTRO DE PRODUTOS"
if (i==100)then
print '(2/,10x,a)', "Banco de Dados Lotado!!!"
npc=i
read '(a)', a
exit
else
print '(2/,10x,a,\)', "Produto: "
read '(a15)', prod_i
z=0
do x=1, i
if (prod_i==prod(x))then
print '(2/,10x,a)', "Produto ja cadastrado!!!"
read '(a)', a
z=1
end if
end do
if (z==0) then
prod(i)=prod_i
y=0
do while (y==0)
print '(/,10x,a,\)', "Custo: R$ "
read*, cus(i)
print '(/,10x,a,\)', "Preco de Venda: R$ "
read*, pv(i)
if (pv(i)>=cus(i)) then
y=1
else
print '(2/,10x,a)', "Preco de Venda menor Custo!!!"
end if
end do
print '(/,10x,a,\)', "Estoque: "
read*, est(i)
else
npc=i
exit
end if
print '(2/,10x,a,\)', "Digite s ou S para sair => "
read '(a)', c
if (c=='s'.or.c=='S')then
npc=i+1
exit
endif
endif
end do
end subroutine cadastro

subroutine alteracoes(prod, cus, pv, est, npc)


implicit none
character (len=15)::prod(100), busc
real::cus(100), est(100), pv(100)
integer::i, npc, p
character::o,c

do
print '(30/,15x,a,/)', "ALTERACOES DO CADASTRO"
print '(2/,10x,a,\)', "Produto: "
read '(a15)', busc
p=0
do i=1,npc-1
if (busc==prod(i)) then
p=1
print '(2/,10x,2a,/,15x,a,f10.2,/,15x,a,f10.2,/,15x,a,f10.2)', "Produto: “
,trim(prod(i)),"Custo: R$ ", cus(i),"Preco de Venda: R$ ", pv(i),"Estoque: ",est(i)
print '(2/,10x,a)', "Digite 1 para alterar Descricao"
print '(/,17x,a)', "2 para alterar Custo"
print '(/,17x,a)', "3 para alterar Preco de Venda"
print '(/,17x,a)', "4 para alterar Estoque"
print '(/,17x,a,\)', "qualquer tecla para outro produto => "
read '(a)', o
select case (o)
case ('1')
print '(2/,10x,a,\)', "Produto: "
read '(a15)', prod(i)
case ('2')
do
print '(/,10x,a,\)', "Custo: R$ "
read*, cus(i)
if (cus(i)>pv(i))then
print '(2/,10x,a)', "Custo maior Preco de Venda!!!"
else
exit
end if
end do
case ('3')
do
print '(/,10x,a,\)', "Preco Venda: R$ "
read*, pv(i)
if (pv(i)<cus(i)) then
print '(2/,10x,a)', "Preco de Venda menor Custo!!!"
else
exit
end if
end do
case ('4')
print '(/,10x,a,\)', "Estoque: "
read*, est(i)
case default
exit
end select
print '(2/,10x,2a,/,15x,a,f10.2,/,15x,a,f10.2,/,15x,a,f10.2)', "Produto: "
,trim(prod(i)),"Custo: R$ ", cus(i),"Preco de Venda: R$ ", pv(i),"Estoque: ",est(i)
end if
end do
if (p==0) then
print '(2/,10x,a)', "Produto nao cadastrado!!!"
end if
print '(2/,10x,a,\)', "Digite s ou S para sair => "
read '(a)', c
if (c=='s'.or.c=='S')then
exit
endif
end do
end subroutine alteracoes

subroutine relatorios(prod, cus, pv, est, npc, fat, lucro)


implicit none
character (len=15)::prod(100)
real::cus(100), est(100), pv(100), fat, lucro
integer::i, npc
character::o
print '(30/,15x,a)', "RELATORIOS"
print '(2/,10x,a,/,17x,a,\)',"Digite 1 - Relatorio Estoque","2 - Relatorio Financeiro => "
read *, o

select case (o)


case ('1')
print '(30/,15x,a)', "Relatorio Estoque"
do i=1,npc-1
print '(2/,10x,2a,/,15x,a,f10.2,/,15x,a,f10.2,/,15x,a,f10.2)', "Produto: "
,trim(prod(i)),"Custo: R$ ", cus(i),"Preco de Venda: R$ ", pv(i),"Estoque: ",est(i)
end do
case ('2')
print '(30/,15x,a)', "Relatorio Financeiro"
print '(2/, 10x, a, f10.2,/,10x,a,f10.2)', "Faturamento: R$ ", fat, "Lucro: R$ ", lucro
case default
print '(5/,10x,a)', "Opcao invalida!!!"
end select
end subroutine relatorios

subroutine venda(prod, cus, pv, est, npc, fat, lucro)


implicit none
character (len=15)::prod(100), prod_v(100), busc
real::cus(100), est(100), pv(100), qv,qtd(100), t_prod(100), t_pr, fat, lucro, t_vend,desc
integer::i, npc, p, n, x
character::o,c
t_vend=0
x=0

do
print '(30/,15x,a,/)', "MODULO DE VENDA"
print '(2/,10x,a,\)', "Produto: "
read '(a15)', busc
p=0
do i=1,npc-1
if (busc==prod(i)) then
p=1
print '(2/,10x,2a,/,15x,a,f10.2,/,15x,a,f10.2,/,15x,a,f10.2)', "Produto: "
,trim(prod(i)),"Custo: R$ ", cus(i),"Preco de Venda: R$ ", pv(i),"Estoque: ",est(i)
do
print '(2/,10x,a,\)', "Quantidade: "
read *, qv
if (qv>est(i)) then
print '(2/,10x,a)', "Estoque insuficiente!!!"
else
exit
end if
end do
t_pr=qv*pv(i)
est(i)=est(i)-qv
print '(2/,10x,a,\)', "Desconto (%): "
read *, desc
x=x+1
prod_v(x)=busc
qtd(x)=qv
t_prod(x)=(t_pr-(t_pr*(desc/100)))
t_vend=t_vend+t_prod(x)
lucro=lucro+(t_prod(x)-(cus(i)*qtd(x)))
print '(2/,10x,2a,/,15x,a,f10.2,/,15x,a,f10.2)', "Produto:
",trim(prod_v(x)),"Quantidade: " , qtd(x), "Sub-Total: R$ ", t_prod(x)
end if
end do
if (p==0) then
print '(2/,10x,a)', "Produto nao cadastrado!!!"
end if
print '(2/,10x,a,\)', "Digite f ou F para Finalizar => "
read '(a)', c
if (c=='f'.or.c=='F')then
print '(25/,15x,a)',"***** RELATORIO DA VENDA *****"
do n=1, x
print '(2/,10x,2a,/,15x,a,f10.2,/,15x,a,f10.2)', "Produto:
",trim(prod_v(n)),"Quantidade: " , qtd(n), "Sub-Total: R$ ", t_prod(n)
end do
print '(/,15x,a,f10.2,a)', "***** TOTAL DA VENDA => R$ ", t_vend, " *****"
fat=fat+t_vend
read '(a)', c
exit
endif
end do
end subroutine venda
Conclusão
Com a realização deste trabalho foi possível fortalecer o conhecimento adquirido
durante o semestre com relação a programação em Fortran 90. Este trabalho exigiu a
utilização de tudo o que foi visto em aula e um pouco de pesquisa.
Podemos dizer que, essa ferramenta nos será útil para simplificação, organização,
enfim, solução de vários problemas que encontraremos no dia-a-dia com agilidade e
facilidade.

You might also like