Você está na página 1de 43

1

SISTEMA DE ENSINO PRESENCIAL CONECTADO SUPERIOR DE TECNOLOGIA EM ANLISE E DESENVOLVIMENTO DE SISTEMAS CARLOS EDUARDO MIRANDA DA SILVA HERBERTH ROSENO VERSIANI RAFAEL RODRIGUES SANTOS RICARDO BATISTA BORGES

PRODUO TEXTUAL INTERDISCIPLINAR - GRUPO

Virgem da Lapa 2011

CARLOS EDUARDO MIRANDA DA SILVA HERBERTH ROSENO VERSIANI RAFAEL RODRIGUES SANTOS RICARDO BATISTA BORGES

PRODUO TEXTUAL INTERDISCIPLINAR GRUPO

Trabalho apresentado ao Curso Superior de Tecnologia em Anlise e Desenvolvimento de Sistemas da UNOPAR - Universidade Norte do Paran, para a disciplina Atividades Interdisciplinares. Professores: Roberto Yukio Nishimura, Marcio Chiaveli, Merris Mozer e Simone Tanaka.

Virgem da Lapa 2011

3 SUMRIO 1 - INTRODUO......................................................................................................04 2 MODELAGEM......................................................................................................06 2.1 DIAGRAMA DE CLASSES ASTAH................................................................06 3 - IMPLEMENTAO NO BANCO DE DADOS ORACLE.....................................08 4 - INTERFACE GRFICA........................................................................................18 5 - ESTRUTURAS DE DADOS..................................................................................22 6 - CONCLUSO.......................................................................................................41 7 - REFERNCIAS.....................................................................................................42

4 1 INTRODUO Neste Portflio de Atividades Interdisciplinares, iremos abordar atividades das matrias estudadas no mdulo III. Utilizei os conceitos passados nas tele aulas, livros didticos e pesquisas com outros estudantes do mesmo curso, confesso que algumas partes fiquei perdido e tive que optar pela busca de um aprimoramento do conteudo na internet. O objetivo deste projeto a modelagem conceitual e fsica do banco de dados do controle de alunos, professores, turmas, disciplinas e contas a pagar de uma nova escola. A partir desta modelagem, ser implementado um prottipo do sistema pelo qual ser possvel experimentar a seqncia para efetuar os pagamentos das faturas da escola assim como o cadastro destas. Pelo Grupo pelo forum chegamos um nome fantasia para a escola, neste trabalho: Education The Life no limits (Educao A vida sem limites). Breve introduo: Entrando no Papel da Escola:

Education The life no Limits, logotipo Exemplo. Fonte: Criao Prpria Adobe Photoshop Cs5. Fonte logotipo Unopar: Google Imagens

5 Uma instituio de ensino apresenta como atividade principal promover o ensino de seus alunos. Porm em torno deste objetivo necessrio o cumprimento de diversos outros processos administrativos e operacionais tambm importantes seno fundamentais para a viabilizao de uma nova escola. Na anlise para a concepo de um sistema que atenda s necessidades imediatas de uma nova escola foram listadas as funcionalidades primrias: Modulo Acadmico: Cadastro de Alunos, Turmas, Cursos, Disciplinas, funcionrios. Modulo Global Cadastro de pessoas Fsicas e Jurdicas e

localidades/endereos e contatos. Mdulo Financeiro Controle de Contas a pagar e receber

A partir destas funcionalidades primrias, o sistema poder ento ser ampliado de forma a automatizar e satisfazer estratgia da escola. A seu tempo, a escola poder ativar novos mdulos a serem desenvolvidos. O benefcio do desenvolvimento sob demanda est em ratear os custos de aquisio, customizao, treinamento e manuteno em longo prazo em relao aquisio completa de um sistema ERP, por exemplo. E ainda, com o processo de desenvolvimento as necessidades sero priorizadas de forma mais objetiva sem que se aloquem recursos extras para treinamento e operao de funes do sistema que no so prioritrias, mas seriam dependentes para as que so funcionarem. Neste processo, automaticamente criada uma equipe com conhecimento especializado sobre a necessidade desta escola principalmente quando uma equipe de desenvolvimento interno.

2 MODELAGEM

6 2.1 - DIAGRAMA DE CLASSES ASTAH A partir dos requisitos do sistema da escola, so identificadas as classes que compem os principais mdulos do sistema. Financeiro.Gerenciador um artifcio adicionado ao modelo para administrar sob um nvel mais amplo, s operaes do setor financeiro. O Gerente que opera este Gerenciar tem acesso a seus principais mtodos.

Diagrama de Classe de uso. Onde Gerente controla todas as opes Fonte: Criao Prpria - ASTAH

Financeiro.Fatura: Representa cada fatura a ser paga. Em sua abstrao de modelagem, possui como dependente a classe Pagamento. Posteriormente, na fase de implementao, veremos que esta dependncia adaptada com o objetivo de uma implementao mais rpida do prottipo. Local Pacote de classes composto pelo Endereo, Bairro, Cidade e Unidade Federal. Um local pode ser atribudo a qualquer outra classe que precise especificar uma localizao geogrfica. Partindo da meta de que o sistema ser

7 ampliado, a separao dos atributos destas classes em classes independentes permite a reutilizao de seus dados uma vez que um local um conceito generalizado e muito comum. Pessoa.Pessoa Conjunto de classes para representar as categorias mais comuns herdadas da Classe Pessoa. Assim como o pacote Local, o pacote Pessoa procura generalizar suas caractersticas de forma que possam ser adequadas ao uso comum por outras classes. Escola: Pacote onde esto as classes responsveis pelo agendamento e controle das disciplinas. So elas: Disciplina, ministrada por Professor, e que em conjunto predefinido caracterizam um Curso e aplicada a Alunos. Estes em conjunto de horrio estimado formam uma Turma. Print Screen da pgina de criao:

Diagrama de Classe Fonte: Criao Prpria ASTAH

Diagrama de Sequencia utilizada Fonte: Criao Prpria - ASTAH

3 - IMPLEMENTAO NO BANCO DE DADOS ORACLE Utilizando-se do banco de dados Oracle, as classes foram mapeadas para SQL e ento aplicadas como tabelas, gatilhos, relacionamentos e demais caractersticas do modelo relacional do Oracle. Abaixo o Print e o cd gerado pelo oracle. Tabela Aluno CREATE TABLE "ALUNO" ( "MATRICULA" NUMBER(*,0) NOT NULL ENABLE, "PFID" NUMBER(*,0) NOT NULL ENABLE, "TURMAID" NUMBER(*,0) NOT NULL ENABLE, CONSTRAINT "PK_ALUNO" PRIMARY KEY ("MATRICULA") ENABLE, CONSTRAINT "FK_PessoaFisica" FOREIGN KEY ("PFID") REFERENCES "FISICA" ("ID") ENABLE, CONSTRAINT "FK_TURMA" FOREIGN KEY ("TURMAID") REFERENCES "TURMA" ("ID") ENABLE )

Tabela Turma CREATE TABLE "TURMA" ( "ID" NUMBER NOT NULL ENABLE, "HORARIO" TIMESTAMP (6) NOT NULL ENABLE, CONSTRAINT "PK_TURMA" PRIMARY KEY ("ID") ENABLE )

10 Tabela Disciplina CREATE TABLE "DISCIPLINA" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "NOME" VARCHAR2(100), "CARGAHORARIA" NUMBER(*,0), CONSTRAINT "PK_DISCIPLINA" PRIMARY ENABLE )

KEY

("ID")

Tabela Curso CREATE TABLE "CURSO" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "NOME" VARCHAR2(255) NOT NULL ENABLE, CONSTRAINT "PK_CURSO" PRIMARY KEY ("ID") ENABLE )

11

12 Tabela Professor CREATE TABLE "PROFESSOR" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "INICIO" DATE, "FORMAO" VARCHAR2(100), CONSTRAINT "PK_PROFESSOR" PRIMARY KEY ("ID") ENABLE, CONSTRAINT "FK_PROFESSOR_0" FOREIGN KEY ("ID") REFERENCES "FUNCIONARIO" ("ID") ENABLE )

Tabela Funcionrio CREATE TABLE "FUNCIONARIO" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "ADMISSAO" DATE, "SALARIO" FLOAT(10), "PFID" NUMBER(*,0) NOT NULL ENABLE, CONSTRAINT "PK_FUNCIONARIO" PRIMARY KEY ("ID") ENABLE, CONSTRAINT "FK_FUNCIONARIO_0" FOREIGN KEY ("PFID") REFERENCES "FISICA" ("ID") ENABLE )

13

Tabela Fsica CREATE TABLE "FISICA" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "SEXO" CHAR(1), "GENERO" CHAR(10), "RACE" CHAR(10), "PESSOAID" NUMBER(*,0) NOT NULL ENABLE, CONSTRAINT "PK_FISICA" PRIMARY KEY ("ID") ENABLE, CONSTRAINT "FK_FISICA_0" FOREIGN KEY ("PESSOAID") REFERENCES "PESSOA" ("ID") ENABLE )

14 Tabela Jurdica CREATE TABLE "JURIDICA" ( "CNPJ" NUMBER(*,0) NOT NULL ENABLE, "INSCESTADUAL" NUMBER(*,0), "INSCMUNICIPAL" NUMBER(*,0), "ABERTURA" DATE, "NOMEFANTASIA" VARCHAR2(100), "CNAE" NUMBER(*,0), "PESSOAID" NUMBER(*,0) NOT NULL ENABLE, CONSTRAINT "PK_JURIDICA" PRIMARY KEY ("CNPJ") ENABLE, CONSTRAINT ("PESSOAID") REFERENCES "PESSOA" ("ID") ENABLE ) "FK_JURIDICA_0" FOREIGN KEY

Tabela Gerente CREATE TABLE "GERENTE" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "ID_0" NUMBER(*,0) NOT NULL ENABLE, CONSTRAINT "PK_GERENTE" PRIMARY KEY ("ID") ENABLE, CONSTRAINT "FK_GERENTE_0" FOREIGN KEY ("ID_0") REFERENCES "FUNCIONARIO" ("ID") ENABLE )

15

Tabela Fatura CREATE TABLE "FATURA" ( "NUMDOC" VARCHAR2(10) NOT NULL ENABLE, "VALOR" FLOAT(126), "VENCIMENTO" DATE, "CANCELADA" NUMBER(*,0), "TIPO" VARCHAR2(10), CONSTRAINT "PK_FATURA" PRIMARY KEY ("NUMDOC") ENABLE )

16 Tabela Pagamento CREATE TABLE "PAGAMENTO" ( "FATURA" VARCHAR2(10) NOT NULL ENABLE, "VALOR" FLOAT(10), "DATA" DATE, CONSTRAINT "PK_PAGAMENTO" PRIMARY KEY ("FATURA") ENABLE, CONSTRAINT ("FATURA") REFERENCES "FATURA" ("NUMDOC") ENABLE ) "FK_PAGAMENTO_0" FOREIGN KEY

Tabela Pessoa CREATE TABLE "PESSOA" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "NOME" VARCHAR2(255) NOT NULL ENABLE, "TELEFONE" NUMBER(*,0), "CELULAR" NUMBER(*,0), CONSTRAINT "PK_PESSOA" PRIMARY KEY ("ID") ENABLE )

17

Tabela Endereo CREATE TABLE "ENDERECO" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "LOGRADOURO" VARCHAR2(10), "COMPLEMENTO" VARCHAR2(10), "CEP" NUMBER(*,0), CONSTRAINT "PK_ENDERECO" PRIMARY ENABLE )

KEY

("ID")

18 Tabela Bairro CREATE TABLE "BAIRRO" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "NOME" VARCHAR2(10), "ENDID" NUMBER(*,0) NOT NULL ENABLE, CONSTRAINT "PK_BAIRRO" PRIMARY KEY ("ID") ENABLE, CONSTRAINT "FK_BAIRRO_0" FOREIGN KEY ("ENDID") REFERENCES "ENDERECO" ("ID") ENABLE )

Tabela Cidade CREATE TABLE "CIDADE" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "NOME" VARCHAR2(10), CONSTRAINT "PK_CIDADE" PRIMARY KEY ("ID") ENABLE )

19 Tabela UF CREATE TABLE "UF" ( "ID" NUMBER(*,0) NOT NULL ENABLE, "NOME" VARCHAR2(10), CONSTRAINT "PK_UF" PRIMARY KEY ("ID") ENABLE )

4 - INTERFACE GRFICA Com o intuito de permitir a implementao extremamente rpida, utilizando recursos suficientes e satisfatrios, foi criada uma API para a interface de interao com o usurio com o objetivo de permitir sua alterao posterior sem que seja necessria a remodelagem ou reescrita do corpo do programa em funo da utilizao de bibliotecas grficas. Assim, inicialmente foi aplicada a esta API o modo texto em console e o tratamento de eventos do teclado para testes da interao entre o usurio e sistema. Esta API baseada na hierarquia entre menus, em um padro de projeto similar popular API javax.swing. Nesta, a partir de um componente raiz, objetos filhos so adicionados a este e a estes podem ser adicionados outros filhos formando uma estrutura em rvore. A navegao sobre a rvore de componentes ocorre a partir da raiz e ao acionar a tecla de cuja letra a inicial do nome de um dos componentes filho a navegao passa para o nvel deste filho e reinicia o processo de ouvir um novo acionamento de tecla (evento), desta vez para os filhos deste ultimo. Esta interao

20 ocorre at que se chegue a um componente folha da arvore ou seja, terminao. A qualquer momento e em qualquer nvel da rvore o usurio pode acionar a tecla BACKSPACE para voltar ao nvel anterior (componente pai) (Como sera possvel ver no Prottipo ou logo abaixo nas Estruturas de dados e Scripts Visual C#). Posteriormente implementao genrica, foi feito um prottipo com interface grfica conforme exemplo abaixo:

Menu de Cadastros Fonte: Criao Prpria: Microsoft Visual C# 2008 Ex. Ed.

21

Menu de Consultas Fonte: Criao Prpria: Microsoft Visual C# 2008 Ex. Ed.

Menu de Cadastro de Faturas (Acesso: Menu Cadastros > Faturas) Fonte: Criao Prpria: Microsoft Visual C# 2008 Ex. Ed.

22
Menu de Pagamento de Faturas (Click na fatura na pagina inicial>Faturas>Pagar) Fonte: Criao Prpria: Microsoft Visual C# 2008 Ex. Ed.

Tela Sobre Acesso: Menu > Ajuda > Sobre. Fonte: Criao Prpria Visual C# 2008 Ex. Ed. Fonte: Criao Prpria Visual C# 2008 Ex. Ed.

Exemplo da Tela: Cadastro Disciplinas Fonte: Criao Prpria Visual C# 2008 Ex. Ed

23

OBS: Para melhor entendimento estarei enviando um micro prottipo do programa, e no todo o projeto como de meu costume pelo fato de nossa internet ser muito lenta, at esta presente hora de 00h49minh que estou terminando o trabalho, no estar conseguindo acessar a pagina.

5 - ESTRUTURAS DE DADOS A estrutura de dados System.Collections.Generic.List<T> foi

utilizada para implementao do armazenamento de dados do prottipo do sistema com todas as operaes feitas de forma sncrona (leitura, escrita, alterao). Scrips Copiados do Microsoft Visual C# 2008 Express Edition de forma aleatria, seguindo sua criao. Caso esteja meio confuso use o prottipo criado para um melhor entendimentio. Para todos os efeitos o seu download foi feito apartir da pgina do Colaborar da unopar, link postado pelos tutores. Education.Program using System; using System.Collections.Generic; using System.Linq; using System.Text; using Education.Financeiro; namespace Education { /** * Programa de controle de uma Nova Escola, Education The life no limits. * Verso: 1.2 * Implementados recursos de gerenciamento financeiro / contas a pagar.

24 */ class Program { public static Gerenciador ger = new Gerenciador(); static void Main(string[] args) { msg("INSTRUCOES DE USO:\nTECLE A LETRA ENTRE PARENTESES PARA ACIONAR O MENU DESEJADO\nPRESSIONE <BACKSPACE> PARA VOLTAR AO MENU ANTERIOR.\n<ENTER> para iniciar.\n\n\n\nUNOPAR 2011 - Anlise e Desenvolvimento de Sistemas\nCarlos Eduardo Miranda Da Silva\nHerberth Roseno Versiani\nRafael Rodrigues Santos\nRicardo Batista Borges\n"); //Dados de exemplo: ger.inserir(new Fatura(1, DateTime.Now, "CEMIG")); ger.inserir(new Fatura(2, DateTime.Now, "TELEFONE")); ger.inserir(new Fatura(3, DateTime.Now, "INTERNET")); ger.inserir(new Fatura(4, DateTime.Now, "ALUGUEL")); ger.inserir(new Fatura(5, DateTime.Now, "IPVA")); //Instancia apenas os componentes "graficos" menu primeiro: //Menus MenuItem m_main = new MenuItem("Menu Principal"); MenuItem m_inserir = new MenuItem("Inserir"); MenuItem m_pagar = new MenuItem("Pagar"); MenuItem m_relatorios = new MenuItem("Relatorios"); MenuItem m_rel_abertas = new MenuItem("Abertas"); TelaRelatorios t_rel_abertas = new TelaRelatorios("Abertas"); MenuItem m_rel_todas = new MenuItem("Todas"); TelaRelatorios t_rel_todas = new TelaRelatorios("Todas"); MenuItem m_rel_vencidas = new MenuItem("Vencidas"); TelaRelatorios t_rel_vencidas = new TelaRelatorios("Vencidas"); TelaPagamento t_pagamento = new TelaPagamento(); TelaInclusao t_inclusao = new TelaInclusao(); //Associa cada componente a seu conteudo

25 m_main.add(m_inserir); m_main.add(m_pagar); m_main.add(m_relatorios); m_relatorios.add(m_rel_abertas); m_rel_abertas.add(t_rel_abertas); m_relatorios.add(m_rel_todas); m_rel_todas.add(t_rel_todas); m_relatorios.add(m_rel_vencidas); m_rel_vencidas.add(t_rel_vencidas); m_pagar.add(t_pagamento); m_inserir.add(t_inclusao); m_main.execute(); msg("\n\n\nFIM DO PROGRAMA\nPressione <ENTER> para sair"); } /** * Mensagem interativa (aguarda confirmao de leitura pressionando <ENTER> */ public static void msg(String msg) { Console.WriteLine(msg); Console.ReadLine(); } }

Education.MenuItem /** * Representa um iten de menu de opes. */ public class MenuItem : Componente {

26 String name; public MenuItem(String sname) { this.name = sname; } /** * Obtem a tecla pressionada (sempre em minusculo) * */ public override char getLowerKey() { return name.Substring(0, 1).ToLower()[0]; } /** * O menu executado apresentando sua lista de submenus e iniciado o seu ouvinte de tecla de atalho (evento). */ public override void execute() { repaintAll(); start(this); } /** * Metodo chamado sempre que um evento focalizado pelo ouvinte do teclado. */ public override void focus() { repaintAll(); } /** * Desenha toda a interface do componente. */ public void repaintAll() { Console.Clear();show();Console.WriteLine("-----------------------

27 ----------------------"); foreach (Componente e in itens) { e.show(); } Console.WriteLine("\n\n\n\t<BACKSPACE> para sair"); } /*** * Representacao textual do menu onde destaca a letra correspondente a tecla de atalho (primeira letra) */ public override string ToString() { return ("\t[(" + name.Substring(0, 1).ToUpper() + ")" + name.Substring(1) + "]\t"); } /** * Exibe o menu. */ public override void show() { Console.Write(this); } }

Education.Tela /** * Componente tela */ public abstract class Tela : Componente

28 { String name = null; public Tela(String tname) { this.name = tname; } /** * Obtem a tecla pressionada (sempre em minusculo) * */ public override char getLowerKey() { return (char)13 ; } /** * Gera o conteudo da tela. **/ public abstract void showContent(); /** * Apresenta a tela e seu conteudo */ public override void show() { Console.WriteLine(this); //Apresenta o conteudo da tela showContent(); Console.WriteLine("\n\n\nPressione <BACKSPACE> para voltar para o menu anterior"); } /** * Executa quando um evento da tela disparado pelo teclado. */ public override void execute() {

29 Console.WriteLine("Executando " + this); } /** * Metodo chamado sempre que um evento focalizado pelo ouvinte do teclado. */ public override void focus() { show(); } /** * Representacao do objeto em forma de String */ public override string ToString() { return name; } }

Especializaes de Tela /** * Tela para entrada de dados de pagamento de fatura. */ public class TelaPagamento : Tela { public TelaPagamento() : base("Pagamento") { } /** * Apresenta o conteudo da tela a espera da entrada de dados e posterior acionamento do pagamento da fatura apos validao dos dados.

30 */ public override void showContent() { Console.WriteLine("Informe o numero da fatura a ser paga: "); try { Program.ger.pagar(int.Parse(Console.ReadLine())); } catch (FormatException fex) { Program.msg("Formato invalido!"); } } }

/** * Tela para incluso de nova fatura aberta. */ public class TelaInclusao : Tela { public TelaInclusao() : base("Incluso") { } /** * Apresenta o conteudo da tela a espera da entrada de dados e posterior acionamento do pagamento da fatura apos validao dos dados. */ public override void showContent() { Console.WriteLine("Nova Fatura:"); try {

31 Console.Write("Valor (0,00):"); float valor = float.Parse(Console.ReadLine()); Console.Write("Vencimento (d/m/aaaa): "); DateTime venc = DateTime.Parse(Console.ReadLine()); Console.Write("Tipo: "); String tipo = Console.ReadLine(); Fatura nova = new Fatura(valor, venc, tipo); Program.ger.inserir(nova); Console.WriteLine(nova); } catch(Exception ex){ Console.WriteLine("Formato invalido: " + ex); } } } /** * Apresenta o conteudo da tela de relatorios. */ public class TelaRelatorios : Tela { String query; /** * Cria uma tela de relatorios de cujo conteudo condicionado ao padro de pesquisa (query) especificado como parmentro. */ public TelaRelatorios(String q) : base("Relatorios " + q) { this.query = q; } /** * Apresenta o conteudo da tela filtrado pelo parmetro de pesquisa (query)

32 */ public override void showContent() { //Lgica alternativa a uma linguagem de consulta melhor estruturada if (query == "Todas") Program.ger.listarTodas(); else if (query == "Abertas") Program.ger.listarAbertas(); else if (query == "Vencidas") Program.ger.listarVencidas(); else throw new Exception("Relatrio invlido: " + query); } } /** * Componente grafico. */ public abstract class Componente : EventListener, Event { public abstract void execute(); public abstract char getLowerKey(); public abstract void show(); public abstract void focus(); //public abstract void repaintAll(); }

Classes de Eventos /** * Ouvinte de eventos. */

33 public class EventListener { /** * Lista de eventos monitorados. */ protected List<Event> itens = new List<Event>(); /** * criado um ouvinte de eventos inicialmente vazio. */ public EventListener() { } /** * criado um ouvinte para um evento inicial. */ public EventListener(Event start) { itens.Add(start); } /** * Inicia o processo de ouvir o evento do teclado. */ public void start(Componente parent) { String key = "\0"; do { key = Console.ReadKey(true).KeyChar.ToString().ToLower(); //Console.WriteLine("Pressionado: \"" + (int)key[0] + "\""); foreach (Event e in itens) { if (e.getLowerKey() == key[0]) {

34 e.execute(); parent.focus(); break; } } } while (key[0] != 8); } /*** * Adiciona um novo evento caso j nao tenha outro com a mesma tecla de atalho. */ public void add(Event e) { foreach (Event atual in itens) if (atual.getLowerKey() == e.getLowerKey()) throw new Exception("Ja existe um evento para este comando!"); itens.Add(e); } } /** * Representa um comando de entrada do teclado (evento) */ public interface Event { /** * Obtem o caractere que representa a tecla de atalho (sempre em minusculo). */ char getLowerKey(); /** * chamado pelo ouvinte do evento ao ser acionado o comando correspondente a este evento (tecla de atalho). */

35 void execute(); /** * Metodo chamado sempre que um evento focalizado pelo ouvinte do teclado. */ void focus(); } } Education.Financeiro.Fatura using System; using System.Collections.Generic; using System.Linq; using System.Text; using Education.Pessoa; namespace Education.Financeiro { /** * Uma fatura uma conta a pagar. */ public class Fatura { protected static int auto_increment = 0; private int NumDoc; private float valor; private DateTime vencimento; private DateTime pagamento; private int status=0;//{-1, 0, 1};Cancelada, Aberta, Paga private String tipo; private Education.Pessoa.Pessoa sacado; private Juridica cedente; /**

36 * Numero unico que identifica a fatura. */ public int getNumDoc() { return NumDoc; } /** * Obtem o valor da fatura. */ public float getValor() { return valor; } /** * Informa se a fatura esta cancelada */ public bool estaCancelada() { return this.status==-1; } /** * Informa o tipo descritivo da fatura */ public String getTipo() { return this.tipo; } /** * Constroi uma nova fatura */ public Fatura(float valor, DateTime vencimento, String tipo) { this.NumDoc = ++auto_increment; this.valor=valor; this.vencimento=vencimento; this.tipo = tipo; } /**

37 * Obtem a data de vencimento da fatura. */ public DateTime getVencimento() { return vencimento; } /** * Informa se a fatura ainda nao foi paga e se a data de pagamento ja passou. */ public bool estaVencida() { return (status == 0) && DateTime.Now.CompareTo(this.getVencimento()) > 0; } /** * Informa se a fatura esta paga */ public bool estaPaga() { return (status==1); } /** * Marca a fatura como paga. */ public void pagar() { this.pagar(DateTime.Now); } public void pagar(DateTime data) { this.pagamento = data; this.status = 1; } public void cancelar() { this.status = -1; } /**

38 * Representacao do objeto em forma de String */ public override String ToString() { return this.NumDoc + " - Vcto " + this.vencimento + " - " + this.tipo + "\t- R$ " + this.valor + "\t(" + (status == -1 ? "Cancelada" : (status == 0 ? "Aberta" : (status == 1 ? "Paga em " + pagamento : "COM ERRO"))) + ")\t"; } } }

Education.Financeiro.Gerenciador using System; using System.Collections.Generic; using System.Linq; using System.Text; using Education.Financeiro; namespace Education.Financeiro { /** * Gerenciador Financeiro. Atua nas operaes de controle de faturas. */ class Gerenciador { protected List<Fatura> fatura = new List<Fatura>(); public Gerenciador(){ Console.WriteLine("Iniciando..."); Console.WriteLine("Pronto!"); } /** * Insere uma nova fatura

39 */ internal void inserir(Fatura nova) { fatura.Add(nova); } /** * Efetua o pagamento da fatura * @param: numero da fatura a ser paga. */ public void pagar(int doc) { foreach (Fatura f in fatura) if (f.getNumDoc() == doc) f.pagar(); } /** * Lista todas as faturas abertas (nao pagas e no canceladas). */ public void listarAbertas() { float total = 0; foreach (Fatura f in fatura) if (!f.estaPaga() && !f.estaCancelada()) { total = total + f.getValor(); print(f); } Console.WriteLine("Total: R$ " + total); } /** * Lista todas as faturas */ public void listarTodas() { float total = 0;

40 foreach (Fatura f in fatura) { print(f); total = total + f.getValor(); } Console.WriteLine("Total: R$ " + total); } /** * Lista todas as faturas no pagas que esto vencidas em relao data atual. */ public void listarVencidas() { float total = 0; foreach (Fatura f in fatura) if (f.estaVencida()) { print(f); total = total + f.getValor(); } Console.WriteLine("Total: R$ " + total); } public void print(Fatura f) { Console.WriteLine(f); } } } Education.Financeiro.Pagamento using System; using System.Collections.Generic; using System.Linq; using System.Text;

41 namespace Education.Financeiro { public class Pagamento { private float Valor; private DateTime Data; public bool incluir(float valor, String doc) { return false; } public void listar() { } } }

42

6 CONCLUSO Dispensei o uso de alguns prints, pelo fato de que estarei postando junto com o trabalho o link de um micro prottipo. Onde poderam usar de forma compacta o gerenciador, adicionando/pagando contas e etc. Recomendo que utilizem tambm na forma TEXTO (DOS) para um entendimento mais profundo. Esperamos ter atendido aos requisitos do trabalho, procuramos um bom entendimento no frum, video-aulas e pesquisas na internet. Tentamos criar um trabalho mais completo, com prottipo e derivados, no conseguimos completar por total esse prottipo, mais a verso que estamos postando est basicamente pronta, faltando apenas uma implementao com final e compilao (.exe), para quem sabe um futuro uso. Contamos com esta incrivel ferramenta, o visual c# que mesmo no obtendo muitas aulas sobre o assunto, mostrou ser uma ferramenta inovadora e atual. Tornando assim seu uso, quem sabe indispensvel por seus adeptos.

43

7 - REFERNCIAS TELE AULAS E BIBLIOTECA DIGITAL, UNOPAR Livros: BANCO DE DADOS II, ANLISE DE SISTEMAS II, ALGORITIMOS E ESTRUTURAS DE DADOS E DESENVOLVIMENTO ORIENTADO A OBJETOS I, UNOPAR. BIBLIOTECA DIGITAL, UNOPAR http://www.unopar.br/bibliotecadigital/ COBCAIXA - APLICAO FINANCEIRA. http://www1.caixa.gov.br/download/index.asp C# ON-LINE.NET. UNDERSTANDING GENERICSEXAMINING THE LIST(T) TYPE. http://en.csharponline.net/Understanding_Generics %E2%80%94Examining_the_List%28T%29_Type FLUXO DE CAIXA BB: https://office.bancobrasil.com.br/office/texto/manual/fcmanual.pdf MACORATTI, JOS CARLOS. MODELANDO SISTEMAS EM UML - CASOS DE USO. http://imasters.com.br/artigo/2753?cn=2753&cc=145 PROTTIPO DA CRIAO, EDUCATION THE LIFE NO LIMITS. http://www.4shared.com/file/r4JZpcXA/Trabalho_Interdisciplinar_GRUP.html?