Sistema bancário Java OO. como criar classe operações e classe movimento?

Sistema bancário Java OO. como criar classe operações e classe movimento??
tenho um sistema bancário que contém as classes ContaCorrente e ContaPoupanca. Cada uma delas tem os métodos levantar e depositar. Preciso criar uma classe Operações aonde vou executar as operações das duas contas e uma classe movimento que vai guardar o histórico de todas operações (levantamento, deposito e transferencia) feitos nas contas.
Como faço, preciso da vossa ajuda…

Poderia mostrar as classes por favor???
Gostaria de colaborar

aqui tens todas classes já criadas estou precisar da classe movimento e operações.

package codigo;
import java.util.ArrayList;

public class Banco {
	private String nome;
	private ArrayList<Conta> contas = new ArrayList<Conta>();
	private static int numContas;
	
	public Banco(){
		cadastrarUmaConta(new ContaCorrente(new Cliente("Eufânia"),20452.0));
		cadastrarUmaConta(new ContaCorrente(new Cliente("Fátima"),20789.0));
		cadastrarUmaConta(new ContaPoupanca(new Cliente("Gabriel"),632589.0));
		cadastrarUmaConta(new ContaPoupanca(new Cliente("António"),2045288.0));
		
	} 
	
	public void cadastrarUmaConta(Conta Conta){
		contas.add(Conta);
		numContas++;
	}

package codigo;
import java.util.Date;
import java.util.ArrayList;


public class Cliente extends Pessoa {
// Atributos
//private String nome;
private String bi;
private ArrayList<Conta> contas=new ArrayList<Conta> ();

//Construtor com Parametros
public Cliente(String nome,String bi,Date dtnasc){
	super (nome,bi,dtnasc);
}

public Cliente(String nome) {
	super(nome);
}
public ArrayList<Conta>getContas(){
	return contas;
}
public void cadastrarUmaConta(Conta c){
	contas.add(c);
}
public void removerUmaConta(Conta c){
	contas.remove(c);
}

}

package codigo;
import app.*;
import grafico.*;
import java.util.Random;

public abstract class Conta {
	//Atributos
	private int numero,pin,opcao ;
	private String iban ;
	private double saldo ;
	private Cliente titular;
	private double limite;
	private Conta destino;
	private Boolean isblock;
	//private Conta numcontas;

	//Construtor sem Parâmetro
	
	public Conta(){}
	
	//Construtor com Parâmetro.
	public Conta (Cliente titular,double saldo){
		//this.numero=numero;
		//this.pin=pin;
		this.saldo=saldo;
		this.iban=iban;
		this.titular=titular;
		pin= 1000 +(new Random().nextInt(9000));
		numero= 10000 +(new Random().nextInt(90000));
		iban="AO06"+numero;
		isblock=false;
		//Random gerarIban = new Random();
		this.titular=titular;
		this.saldo=saldo;
		
	}
	//metodo
	public void credito(double valor){
		   saldo+=valor;
	}
	public void debito (double valor){
		if(valor<this.saldo+this.limite){
			saldo-=valor;
			
			Sistema.tela().msg("Podes levantar está dentro do limite!");
		}else{
			Sistema.tela().msg("Não Podes levantar está fora do limite!");
		}
		
	}
	 public void transfer_para(double valor,Conta destino) {
		 if (this.saldo> valor) {

	            this.debito(valor);
	            destino.credito(valor);
	        }else{
	        	System.out.println("Saldo insuficiente");
	        }
	 }
	 public void alterarPin(int userPin){
		 if(validaPin(userPin)){
				 Sistema.tela().msg("Digite o Novo Pin: ");
				 int pinNovo=Sistema.teclado().getEntrada();
				 Sistema.tela().msg("Digite o Novamente o Pin: ");
				 if (pinNovo == Sistema.teclado().getEntrada()) {
					 pin=pinNovo;
					 Sistema.tela().msgln("Pin alterado com sucesso");
				 } else{
						Sistema.tela().msgln("Pin nao alterado. ");
				 }
		 } 
	}
	 
	public double consultaSaldo (){
		return saldo ;
	}
	String consultaIban(){
		return iban ;
	}
	public boolean validaPin(int userPin){
		if(pin!=userPin){
			Sistema.tela().msgln("Pin Invalido");
			return false;
		}
		return true;
	}
	
	public int getPin() {
		return pin;
	}
	public void setPin(int pin){
		this.pin=pin;
	}
	public String getTitular(){
		return titular.getNome();
	}
	public void iniciar(){
		int opcao;
		do{
			exibirMenu();
			opcao = Sistema.teclado().getEntrada();
			escolheOpcao (opcao);
		} while(opcao!=5);
	}
	public void exibirMenu(){
		Sistema.tela().msgln("\t Escolha a opção desejada: ");
		Sistema.tela().msgln("1 - Consultar Extrato");
		Sistema.tela().msgln("2 - Levantamento");
		Sistema.tela().msgln("3 - Transferencia");
		Sistema.tela().msgln("4 - Movimento da Conta");
		Sistema.tela().msgln("5 - Sair\n");
		Sistema.tela().msgln("Opção: "+this.opcao);
	}
	public void escolheOpcao(int opcao){

		int i=0;
		double valor;
		switch (opcao){
		case 1:
			extrato();
			break;
		case 2:
			if (i++ <=3){
				Sistema.tela().msgln("Quanto deseja Levantar: ");
				valor = Sistema.teclado().getEntrada();
				this.debito(valor);
			}else{
				Sistema.tela().msgln("Limite do levantamento diários atingidos.\n");
			}
			break;
		case 3:
			Sistema.tela().msgln("Quanto deseja Transferir: ");
            valor = Sistema.teclado().getEntrada();
            this.debito(valor);
            break;
		case 5:
			Sistema.tela().msgln("Sistema encerrado.");
            break;
            
    default:
    	Sistema.tela().msgln("Opção inválida");
		}
	}
	public boolean equals (Conta contas ){
		return (this.numero==contas.numero);
	}
	public void extrato(){
		System.out.println("\n\n\tExtrato");
		System.out.println("Numero da conta:"+this.numero);
		System.out.println("Titular: " + titular.getNome());
		System.out.println("Iban da conta: "+this.iban);
		System.out.println("Saldo atual: "+this.saldo);
		System.out.println("O pin atual é: "+this.pin);
		System.out.println("O teu número é: "+this.numero);
	}

}

package codigo;

public class ContaCorrente extends Conta{
	private double taxaDeOperacao=0.5;
	
	
	public ContaCorrente(Cliente titular,double saldo){
		super(titular,saldo);
		
	}
	@Override
	public void credito(double valor){
		super.credito(valor);
		calcularTaxa();
	}
	private void calcularTaxa()
    {
        super.debito(taxaDeOperacao);
    }
	public void debito(double valor){
		super.debito(valor);
		calcularTaxa();	
	}
	public void transfer_para(Conta destino, double valor){
	       super.debito(valor);
	       destino.credito(valor);
	       calcularTaxa();
	   }
	

}
_________
package codigo;

public class ContaPoupanca extends Conta{
	private double  limite=500.0;
	
	
	public ContaPoupanca(Cliente titular,double saldo){
		super(titular,saldo);
	}
	@Override
	public void credito(double valor){
		super.credito(valor);
	}
	public void debito(double valor){
		if((limite+consultaSaldo()>= valor)){
		super.debito(valor);
		System.err.println("consultasaldo="+ consultaSaldo());
		}
	}
	public void transfer_para(Conta destino, double valor ){
		if((limite+consultaSaldo()>= valor)){
			super.debito(valor);
			destino.credito(valor);
		}
	}
}

package codigo;
import java.util.Date;

public class Funcionario extends Cliente {
	//Atributos 
	private double salario;
	private Date dtContratacao;
	//Métodos
	// Construtor sem Parametro
	
	
	
	public Funcionario(String nome,String bi,Date dtnasc, double salario,Date dtContratacao){
		super(nome,bi,dtnasc);
		this.salario=salario;
		this.dtContratacao=dtContratacao;
	}
	
	public double calcularSalario(){
		return salario;
	}
}

package codigo;
import java.util.Date;

public class Pessoa {
	// Atributos
	private String bi,nome;
	private Date dtnasc;
	// Métodos
	
	
	public Pessoa(String nome) {
		this.nome = nome;
	}

	public Pessoa (String nome, String bi,Date dtnasc){
		this.nome=nome;
		this.bi=bi;
		this.dtnasc=dtnasc;
	}
	
	public String getNome(){
		return nome;
	}
	public String getBi(){
		return bi;
	}
	public Date getDtnasc(){
		return dtnasc;
	}
	public void setNome(String nome){
		this.nome=nome;
	}
	public void setBi(String bi){
		this.bi=bi;
	}

}

package grafico;
import java.util.Scanner;
public class Teclado {
	public Scanner entrada;
	public Teclado(){
		entrada =new Scanner(System.in);}
		public int getEntrada(){
			return entrada.nextInt();
		}

}

package grafico;

public class Tela {
	public void msg(String msg){
		System.out.print(msg);
	}
	public void msgln(String msg){
		System.out.println(msg);
	}

}

por favor espero a vossa ajuda??

Cara voce fez tudo junto a parte grafica com a classe conta?
Reveja seu projeto…

a parte gráfica eu consigo dar conta.
e como eu deferia fazer da-me uma ideia a classe movimento e operações?
.

Achei interessante a maneira de programação utilizando o pacote Grafico.
Copie as classe para seus devidos pacotes, mas na class Conta está gerando o erro relacionado
com Sistema.tela().msg(“Podes levantar está dentro do limite!”);
Sistema o que representa uma class, pacote ou função??? A mensagem de erro que aparece é essa: Sistema cannot be resolved

Sou novo java e estava acompanhando o seu código e pude aprender muito com ele mas me perdi nisso:

package grafico;
import java.util.Scanner;
public class Teclado {
	public Scanner entrada;
	public Teclado(){
		entrada =new Scanner(System.in);}
		public int getEntrada(){
			return entrada.nextInt();
		}

}

,

package grafico;

public class Tela {
	public void msg(String msg){
		System.out.print(msg);
	}
	public void msgln(String msg){
		System.out.println(msg);
	}

}

,

Sistema.tela().msg("Não Podes levantar está fora do limite!");

e

Sistema.teclado().getEntrada();

com vc fez para acessar métodos dessa classe sem antes instanciar o objecto?