Você está na página 1de 23

UNIVERSIDADE EDUARDO MONDLANE

FACULDADE DE ENGENHARIA

DEPARTAMENTO DE ENGENHARIA ELECTROTÉCNICA

Curso: Engenharia Informática (PL)

2.º Ano

Cadeira: Programação Orientada à Objectos I (POO I)

4.º Grupo

Tema: Sistema de Gestão de Impostos

Discentes: Docentes:

Das Neves, António Alberto Eng.ª Tatiana Kovalenko

Langa, Edson António Eng.ª Leila Omar

Massalonga, Eden Carlos

Munezero, Ivan

Quembo, Wilson José

Ramijane, Juvenaldo Andrade

Victor, Luvina Cármen

Maputo, Abril de 2016


Índice
1. Introdução..................................................................................................................1

2. Objectivos..................................................................................................................2

2.1. Objectivos gerais.................................................................................................2

2.2. Objectivos específicos........................................................................................2

3. Descrição do problema...............................................................................................2

4. Algoritmo...................................................................................................................3

5. Análise do problema..................................................................................................4

6. Fluxograma................................................................................................................4

7. Diagrama de classes (Sem relacionamentos entre classes)........................................6

8. Código do projecto.....................................................................................................7
1.1. Introdução
No âmbito do emprego das faculdades e habilidades adquiridas na disciplina de POO I,
é desenvolvido o trabalho que aborda a realização de um Sistema de Gestao de
Impostos. Para o desenvolvimento deste foi realizada uma pesquisa com base em
entrevistas, documentos (relatórios e formulários) com abordagem do assunto em
questão.

1
2.1. Objectivos
2.1. Objectivos gerais
Desenvolver um sistema que foca a gestão dos pagamentos de impostos.

2.2. Objectivos específicos


Descrever o problema;

Criar o diagrama de Classes usando UML;

Desenvolver o código correspondente ao algoritmo modelado, usando a linguagem de


programação java com orientação a objectos.

3.1. Descrição do problema


Os impostos são as prestações obrigatórias, avaliáveis em dinheiro, exigidas por uma
entidade pública para a prossecução de fins públicos, sem contraprestação
individualizada, e cujo facto tributário assenta em manifestações de capacidade
contributiva.

O seu pagamento é feito mediante o preenchimento do formulário e apresentação do


valor monetário, sob varias formas correspondentes ao imposto que se pretende pagar.

Este processo é acompanhado por enchentes ocasionais que dificultam a realização do


mesmo de forma ordeira e tranquila. Pelo que se pretende desenvolver um sistema de
gestão que será capaz de facilitar e agiliza-lo.

Este trabalho terá como foco principal os impostos autárquicos que são:

 Imposto Predial Autárquico (IPA);


 Imposto Sobre Veículos (ISV); e
 Taxa de Radio Difusão (TRD).

Os quais são aplicáveis a todos os tipos de contribuintes, independentemente da sua área


de actividade. No entanto, os outros impostos e taxas não foram excluídos deste
projecto, serão abordados apenas quando aplicáveis a cada contribuinte que será
entrevistado.

2
4.1. Algoritmo
1. Ler dados do contribuinte num ficheiro de texto já existente onde por sua vez o
mesmo contem todos dados dos contribuintes registados;
2. Digitar o código do contribuinte que deseja efectuar o pagamento do imposto;
3. Depois do passo anterior, verificar se o código do contribuinte existe no ficheiro
de texto dos contribuintes registados;
4. Caso não exista exibe uma mensagem com a negação da existência do
contribuinte no ficheiro e exibe também a lista de todos os contribuintes;
5. Depois do passo anterior, caso exista o código do contribuinte, por sua vez o
usuário será lhe questionado pelo programa qual imposto deseja pagar (O
contribuinte só ira pagar no máximo 3 impostos diferentes);
6. Depois do passo anterior, o usuário será questionado se o contribuinte deseja
efectuar pagamento de um imposto diferente do pagamento do imposto anterior;
7. Após o término do processo do pagamento serão exibido na tela os impostos que
o contribuinte corrente efectuou;
8. Depois do passo anterior, o programa voltara para o passo numero 2 caso não
haja um novo contribuinte para efectuar pagamento de imposto, fim de
operação.

3
5.1. Análise do problema

6.1. Fluxograma

4
5
7.1. Diagrama de classes (Sem relacionamentos entre classes)

6
8.1. Código do projecto
//Classe Contribuinte
import java.io.*;
public class Contribuinte {
private int codigo;
private String nome;
private Endereco end;
private Contacto con;
private Validacoes val;

public Contribuinte(int c, String n, Endereco e, Contacto co) {


codigo = c;
nome = n;
end = e;
con = co;
}
public int getCodigo (){
return codigo;
}
public String getNome () {
return nome;

7
}
public String toString ()
{
return codigo+";"+nome+";"+end.toString()+";"+con.toString();
}
}

//Classe Imposto
import java.io.*;
public class Imposto {
private int numero;
private String descricao;
private double valor;
private Validacoes val;

public Imposto () throws IOException {


val = new Validacoes ();
impostoValDesc ();
}
//Metodo resposavel pela escolha dos imposto a pagar (inicializacao dos atributos)
private void impostoValDesc (){
int op;
String msg = "Que Imposto deseja Pagar: "+"\n\t1-Imposto Pessoal Autarquico
(IPA)"
+ "\n\t2-Imposto Autarquico de Veiculos (IAV)"
+ "\n\t3-Taxa de Radio Difusao (TRD)";

op = val.validarInt (1,6,msg);
switch (op){
case 1: {
numero = 1;

8
descricao = "Imposto Pessoal Autarquico (IPA)";
valor = 295;
break;
}
case 2: {
numero = 2;
descricao = "Imposto Autarquico de Veiculos (IAV)";
valor = 400;
break;
}
case 3: {
numero = 3;
descricao = "Taxa de Radio Difusao (TRD)";
valor = 150;
break;
}
}
}
public String getDescricao() {
return descricao;
}
public double getValor (){
return valor;
}
public String toString (){
return numero+";"+descricao+";"+valor;
}
}
//Classe Endereço
import java.io.*;

9
public class Endereco {
private String provincia, cidade, bairro;
private Validacoes val;

public Endereco () //throws IOException


{
try
{
val = new Validacoes ();
provincia = val.validarString("Introduza a Provincia: ");
cidade = val.validarString("Introduza a Cidade: ");
bairro = val.validarString("Introduza o bairro: ");
}
catch (IOException io){
io.printStackTrace ();
}
}
public Endereco(String p, String c, String b) {
provincia = p;
cidade = c;
bairro = b;
}
public String toString (){
return provincia+";"+cidade+";"+bairro;
}
}

//Classe Contacto
import java.io.*;
public class Contacto {

10
private int telefone;
private String email;
private Validacoes val;

public Contacto () throws IOException {


val = new Validacoes ();
telefone = val.validarInt(100000000,999999999,"Introduza o numero de telefone:
");
email = val.validarString("Introduza o email: ");
}
public Contacto(int t, String e) {
telefone = t;
email = e;
}
public String toString() {
return telefone + ";" + email;
}
}

//Classe PagImposto (Pagamento de Imposto)


import java.io.*;
public class PagImposto implements Serializable {
private int codigo;
private String nome;
private String desc;
private double valor;

public PagImposto (int c, String n, String d, double v){


codigo = c;
nome = n;
desc = d;

11
valor = v;
}
public String getNome() {
return nome;
}
public double getValor() {
return valor;
}
public String toString () {
return codigo+";"+nome+";"+desc+";"+valor;
}
}

//Classe Validacoes
import java.io.*;
import java.util.StringTokenizer;
public class Tarefas {
private int cont, contAux;
private Contribuinte c[];
private Validacoes val;

public Tarefas () {
cont = 0;
contAux = 0;
c = new Contribuinte [100];
val = new Validacoes ();
}

//Metodo responsavel pela leitura de dados dos Contribuintes no ficheiro de Texto


public void LerContribuinte ()
{
12
String fich = "Contribuinte.txt";
String linha = "";
try {

FileReader fr = new FileReader (fich);


BufferedReader br = new BufferedReader (fr);

while (linha != null) {


linha = br.readLine();
if (linha != null){
StringTokenizer tk = new StringTokenizer (linha,";");
int codigo = Integer.parseInt (tk.nextToken());
String nome = tk.nextToken();

String provincia = tk.nextToken();


String cidade = tk.nextToken();
String bairro = tk.nextToken();
Endereco end = new Endereco (provincia, cidade, bairro);

int telefone = Integer.parseInt (tk.nextToken());


String email = tk.nextToken();
Contacto con = new Contacto (telefone,email);

//Gravacao de dados de Contribuinte no Array


try{
c [cont]= new Contribuinte (codigo, nome, end, con);
}catch (ArrayIndexOutOfBoundsException io){
System.out.println (io.getMessage());
}
//br.readLine();
13
cont++;
} //else
//System.out.println("Fim do Ficheiro");
}

//Exibicao de Contribuintes garavdos no Array


System.out.println ("\nContribuintes Registados ");
for (int i=0; i<cont; i++)
System.out.println ("\t"+c[i].toString());

br.close();

} catch (IOException io) {


System.out.println(io.getMessage());
}

public void pagarImposto ()


{
PagImposto listaPagamentos [] = new PagImposto [100];
char resp = ' ';
String fich = "Imposto.dat";
int indice , j=0;

try {

FileOutputStream fo = new FileOutputStream (fich);


ObjectOutputStream ob = new ObjectOutputStream (fo);

int cod = val.validarInt (111,1000,"Introduza o codigo do Contribuinte");

14
//Procurando a existencia de Contribuinte com o codigo dado
indice = verificaContribuinte (cod, c);

if (indice != -1) {
do
{
int cdg = c [indice].getCodigo();
String nom = c [indice].getNome ();
Imposto i = new Imposto ();

listaPagamentos [j] = new PagImposto (cdg, nom, i.getDescricao(),


i.getValor());
System.out.println ("\nDados do Pagamento Realizado: \n\
t"+listaPagamentos[j].toString()+"\n");
j++;

resp = val.validarChar ('S','s','N','n',"Deseja pagar mais impostos? (Sim ou


Nao)");
} while (resp == 'S' || resp == 's');
ob.writeObject(listaPagamentos);

} else
System.out.println("O contribuinte com codigo "+cod+" nao esta registado!");
ob.close();
} catch (IOException io) {
System.out.println(io.getMessage());
}
}

//Metodo que verifica a existencia do Contribuinte


public int verificaContribuinte (int cd, Contribuinte a []) {
15
int indice = -1;

for (int i=0; i<cont; i++) {


if (cd == a [i].getCodigo()) {
indice = i;
break;
}
}
return indice;
}
//Metodo para exibicao dos conteudos
public void visualiza (){

int op = val.validarInt (1,3,"O que deseja visualizar: \n\t1 - Contribuintes


Registados\n\t2 - Impostos Pagos\n\t3 - Valor total de Impostos Pagos");
String fich;

try {
//Bloco de Instrucoes para exibicao dos Contribuintes
if (op == 1) {
fich = "Contribuinte.txt";
String linha = "";

FileReader fr = new FileReader (fich);


BufferedReader br = new BufferedReader (fr);

linha = br.readLine();
while (linha != null) {

StringTokenizer tk = new StringTokenizer (linha,";");


int codigo = Integer.parseInt (tk.nextToken());

16
String nome = tk.nextToken();

String provincia = tk.nextToken();


String cidade = tk.nextToken();
String bairro = tk.nextToken();
Endereco end = new Endereco (provincia, cidade, bairro);

int telefone = Integer.parseInt (tk.nextToken());


String email = tk.nextToken();
Contacto con = new Contacto (telefone,email);

Contribuinte c = new Contribuinte (codigo, nome, end, con);

System.out.println ("Dados do "+(contAux+1)+"_o Contribuinte


Registado: \n\t"+c.toString()+"\n");

linha = br.readLine();
contAux++;
}
br.close();
}
//Bloco de Instrucoes para Exibicao de Pagamentos de Impostos Realizados
if (op == 2) {

fich = "Imposto.dat";
PagImposto pg [] = new PagImposto [100];

FileInputStream fs = new FileInputStream (fich);


ObjectInputStream os = new ObjectInputStream (fs);

//Criacao de Objecto com os dados provenientes do ficheiro de objecto

17
String msg = "";
pg = (PagImposto []) os.readObject();

//Preparacao dos Dados para Exibicao


for (int i=0; i<=cont; i++) {
if (pg[i] != null)
msg+=pg[i]+"\n";
}
//Exibicao dos Valores Lidos do Ficheiro de Objecto
System.out.println("\nImpostos Pagos\n\n"+msg);
os.close();
//cont++;
}

//Bloco de Instrucoes para o calculo e exibicao do total


if (op == 3) {

fich = "Imposto.dat";
PagImposto pg [] = new PagImposto [100];

FileInputStream fs = new FileInputStream (fich);


ObjectInputStream os = new ObjectInputStream (fs);

//Criacao de Objecto com os dados provenientes do ficheiro de objecto


double total = 0;
pg = (PagImposto []) os.readObject();

//Calculo do Total do valor


for (int i=0; i<=cont; i++) {
if (pg[i] != null)
total+=pg[i].getValor();
18
}
//Exibicao dos Valores Lidos do Ficheiro de Objecto
System.out.println("\nTotal de Impostos Pagos\n\t"+total);
os.close();
//cont++;
}
} catch (FileNotFoundException fe){
System.out.println(fe.getMessage());
} catch (ClassNotFoundException ce) {
System.out.println(ce.getMessage());
} catch (IOException io){
System.out.println(io.getMessage());
}
}
}

//Classe Menu
public class Menu {
private Tarefas t;
private Validacoes val;

public Menu () {
t = new Tarefas ();
val = new Validacoes ();
seleciona ();
}
//Metodo para Selecao das Operacoes
public void seleciona () {
int op;

do
19
{
op = val.validarInt (1,4,"\nQue Operacao deseja realizar: \n\t1 - Ler Dados dos
Contribuintes Registados\n\t2 - Pagar Impostos"
+ " \n\t3 - Visualizar\n\t4 - Sair");
switch (op) {
case 1: { registar (); break; }
case 2: { pagar (); break; }
case 3: { visualizar (); break; }
case 4: { System.out.println(); break; }
}
}
while (op != 4);
}
//Metodo para registar Clientes (Dados do Ficheiro)
public void registar () {
t.LerContribuinte();
}

//Metodo para o pagamento de Impostos


public void pagar () {
t.pagarImposto();
}

//Metodo para a visualizacao dos conteudos


public void visualizar () {
t.visualiza();
}
}

//Classe Executavel
import java.io.*;

20
public class Executavel {
public static void main(String[] args) throws IOException
{
//Chamada do Menu
Menu m = new Menu ();
}
}

21

Você também pode gostar