我一直在学习C#并尝试创建一个小型银行系统,存款,取款和创建账户选项。但是当我尝试创建一个帐户而不是默认帐户时我遇到了麻烦(每次我创建一个新帐户时都应该增加)。我一直得到这个:“System.IndexOutOfRangeException:'索引超出了数组的范围。'”甚至在没有数组的行中。你能帮助我吗?以下是您可能需要的所有代码:
编辑:我认为我从注释中获得了数组的问题,但是为什么数组大小不会随着maximocontas而增加,一旦它应该增加一个帐户被创建。因此,如果限制为1,我会创建一个帐户,然后由于maximocontas ++,限制现在应该是2;和contas [maximocontas];,不应该吗?
我的问题在于AbreConta() Form1.cs(我的问题所在的函数是哪里)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Banco
{
public partial class Form1 : Form
{
private int maximocontas = 1; //maximo de contas
private int contascriadas = 0;
private Conta[] contas;// declara uma variavel tipo conta chamada contas
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
this.contas = new Conta[maximocontas];
}
public void AbreConta(Conta conta)
{
maximocontas++;
this.contas[this.contascriadas] = conta;
MessageBox.Show(Convert.ToString(contascriadas));
contascriadas++;
ComboContas.Items.Add("titular: " + conta.Titular.Nome);
DestinoTransfBox.Items.Add("titular:" + conta.Titular.Nome);
}
private void BotaoDeposito_Click(object sender, EventArgs e)
{
string valorDigitado = TextoValor.Text;
double valorOperavel = Convert.ToDouble(valorDigitado);
int busca = ComboContas.SelectedIndex;
Conta selecionada = contas[busca];
if (valorOperavel > 0)
{
double valor;
valor = Convert.ToDouble(TextoValor.Text);
selecionada.Deposita(valor);
TextoSaldo.Text = Convert.ToString(selecionada.Saldo);
}
else
{
MessageBox.Show("Valor não depositavel");
}
}
private void BotaoSaque_Click(object sender, EventArgs e)
{
string valorDigitado = TextoValor.Text;
double valorOperavel = Convert.ToDouble(valorDigitado);
int busca = ComboContas.SelectedIndex;
Conta selecionada = this.contas[busca];
if (selecionada.Saldo >= valorOperavel)
{
double valor;
valor = Convert.ToDouble(TextoValor.Text);
selecionada.Saque(valor);
TextoSaldo.Text = Convert.ToString(selecionada.Saldo);
}
else
{
MessageBox.Show("Saldo Indisponivel");
}
}
private void BotaoBuscar_Click(object sender, EventArgs e)
{
if(ComboContas.SelectedIndex <= maximocontas-1)
{
int busca = ComboContas.SelectedIndex;
Conta selecionada = this.contas[busca];
TextoNumero.Text = Convert.ToString(selecionada.Numero);
TextoSaldo.Text = Convert.ToString(selecionada.Saldo);
TextoTitular.Text = selecionada.Titular.Nome;
}
else
{
MessageBox.Show("Essa conta não existe!");
}
}
private void ComboContas_SelectedIndexChanged(object sender, EventArgs e)
{
int busca = ComboContas.SelectedIndex;
Conta selecionada = contas[busca];
TextoTitular.Text = selecionada.Titular.Nome;
TextoSaldo.Text = Convert.ToString(selecionada.Saldo);
TextoNumero.Text = Convert.ToString(selecionada.Numero);
}
private void DestinoTransfBox_SelectedIndexChanged(object sender, EventArgs e)
{
int busca = DestinoTransfBox.SelectedIndex;
Conta selecionada = contas[busca];
}
private void BotaoTransferir_Click(object sender, EventArgs e)
{
int busca = ComboContas.SelectedIndex;
int dest = DestinoTransfBox.SelectedIndex;
Conta destino = contas[dest];
Conta selecionada = contas[busca];
double valor = Convert.ToDouble(ValorTransferencia.Text);
if(selecionada.Saldo >= valor)
{
Conta.Transferir(valor, selecionada, destino);
TextoSaldo.Text = Convert.ToString(selecionada.Saldo);
MessageBox.Show("Operação Concluida");
}
else
{
MessageBox.Show("Saldo Insuficiente Para a Transferencia");
}
}
private void BotaoNovaAcc_Click(object sender, EventArgs e)
{
Form2 formularioDeAbertura = new Form2(this);
formularioDeAbertura.ShowDialog();
}
}
}
Form2(帐户创建表单)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Banco
{
public partial class Form2 : Form
{
private Form1 formPrincipal;
public Form2(Form1 formPrincipal)
{
this.formPrincipal = formPrincipal;
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e)
{
}
private void BotaoCriar_Click(object sender, EventArgs e)
{
Conta novaConta = new ContaCorrente();
novaConta.Titular = new Cliente(TextNovoNome.Text);
novaConta.Numero = Convert.ToInt32(TextNovoNumero.Text);
this.formPrincipal.AbreConta(novaConta);
}
}
}
Conta.cs(与所有与帐户相关的事物)
namespace Banco
{
public class Conta
{
public int Numero { get ; set; }
public double Saldo { get; protected set; } // set/gets privados não podem ser lidas por quem esta fora nem pelos herdeiros, os protected podem ser lidos pelos herdeiros mas nao por quem esta fora
public Cliente Titular { get; set; }
public virtual void Deposita(double valor)
{
this.Saldo += valor;
}
public virtual void Saque(double valor)
{
this.Saldo -= valor;
}
public static void Transferir(double value, Conta origem, Conta destino)
{
origem.Saldo -= value;
destino.Saldo += value;
}
}
public class ContaPoupanca : Conta //lê-se CountaPoupanca herda Conta, ela herdara todos os atributos, metodos e etc da class Conta
{
public override void Deposita(double valor) // o override pode ser feito tanto assim
{
this.Saldo += valor - 0.10;
}
public override void Saque(double valor) //como assim
{
base.Saque(valor + 0.10);
}
//A palavra base chama o comportamento que queremos reaproveitar, chama o metodo saca e passa como parametro valor + 0.10
}
public class ContaCorrente : Conta
{
public override void Deposita(double valor)
{
base.Deposita(valor - 0.10);
}
public override void Saque(double valor)
{
base.Saque(valor + 0.5);
}
}
public class TotalizadorDeContas
{
public double ValorTotal { get; private set; }
public void Soma(Conta conta)
{
ValorTotal += conta.Saldo;
}
}
}
Cliente.cs(使用Cliente [客户]类)
namespace Banco
{
public class Cliente
{
private string documentos;
public string Nome { get; set; }
public string Documentos{ get { return this.documentos; } set { this.documentos = value; } }
public Cliente(string nome)
{
this.Nome = nome;
}
}
}
在这里您可以找到Form1 Designer:http://pastebin.com/4L944Dxd 在这里您可以找到Form2 Designer:http://pastebin.com/KYaRyeUv