c#模拟银行atm机示例分享
c#模拟银行atm机示例分享
发布时间:2016-12-28 来源:查字典编辑
摘要:账户类Account:Id:账户号码PassWord:账户密码Name:真实姓名PersonId:身份证号码Email:客户的电子邮箱Bal...

账户类Account:

Id:账户号码

PassWord:账户密码

Name:真实姓名

PersonId:身份证号码

Email:客户的电子邮箱

Balance:账户余额

Deposit:存款方法,参数是double型的金额

Withdraw:取款方法,参数是double型的金额

银行的客户分为两种类型:

储蓄账户(SavingAccount)和信用账户(CreditAccount)

两者的区别是储蓄账户不许透支,而信用账户可以透支,并允许用户设置自己的透支额度(使用ceiling表示)

Bank类,

属性如下

(1)当前所有的账户对象的集合

(2)当前账户数量

构造方法

(1)用户开户:需要的参数包括id,密码,姓名,身份证号码,油箱和账户类型

(2)用户登录:参数包括id,密码,返回Account对象

(3)用户存款:参数包括id和存款数额

(4)用户取款:参数包括id和取款数额

(5)设置透支额度:参数包括id和新的额度,这个方法需要哦验证账户是否是信用账户参数

统计方法

(6)统计银行所有账户的余额总数

(7)统计所有信用账户透支额额度总数

源代码:

复制代码 代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ATM

{

abstract class Account

{

//账户号码

protected long id;

public long ID

{

get { return id; }

set { id = value; }

}

//账户密码

protected string password;

public string PassWord

{

get { return password; }

set { password = value; }

}

//户主的姓名

protected string name;

public string Name

{

get { return name; }

set { name = value; }

}

//身份证号码

protected string personId;

public string PersonId

{

get { return personId; }

set { personId = value; }

}

//email

protected string email;

public string Email

{

get { return email; }

set { email = value; }

}

//余额

protected double balance;

public double Balance

{

get { return balance; }

set { balance = value; }

}

//静态号码生成器

private static long idBuilder = 100000;

public static long IdBuilder

{

get { return idBuilder; }

set { idBuilder = value; }

}

public void Deposit(double sum)//存款

{

if (sum < 0)

throw new InvalidOperationException("输入的金额为负数");

balance += sum;

}

public abstract void Withdraw(double sum);//取款

public Account()

{ }

public Account(string password, string name, string personId, string email)

{

this.id = ++idBuilder;

this.password = password;

this.name = name;

this.personId = personId;

this.email = email;

}

}

//创建CreditAccount类,该类继承抽象类Account

class CreditAccount : Account

{

protected double ceiling;//透支额度

public double Ceiling

{

get { return ceiling; }

set { ceiling = value; }

}

public CreditAccount(string password, string name, string personId, string email)

: base(password, name, personId, email)

{ }

//信用账户的取款操作

public override void Withdraw(double sum)

{

if (sum < 0)

{

throw new InvalidOperationException("输入的金额为负数!");

}

if (sum > balance + ceiling)

{

throw new InvalidOperationException("金额已经超出余额和透支度的总数了");

}

balance -= sum;

}

}

//创建SavingAccount类,该类继承抽象类Account

class SavingAccount : Account

{

public SavingAccount(string password, string name, string personId, string email)

: base(password, name, personId, email)

{ }

public override void Withdraw(double sum)

{

if (sum < 0)

{

throw new InvalidOperationException("输入的金额为负数!");

}

if(sum>balance)

{

throw new InvalidOperationException("金额已经超出金额!");

}

balance -= sum;

}

}

//bank类,对银行中的所有账户进行管理

class Bank

{

//存放账户的集合

private List<Account> accounts;

public List<Account> Accounts

{

get { return accounts; }

set { accounts = value; }

}

//当前银行的账户数量

private int currentAccountNumber;

public int CurrentAccountNumber

{

get { return currentAccountNumber; }

set { currentAccountNumber = value; }

}

//构造函数

public Bank()

{

accounts=new List<Account>();

}

//开户

public Account OpenAccount(string password, string confirmationPassword, string name, string personId, string email, int typeOfAccount)

{

Account newAccount;

if (!password.Equals(confirmationPassword))

{

throw new InvalidOperationException("两次密码输入的不一致");

}

switch (typeOfAccount)

{

case 1: newAccount = new SavingAccount(password, name, personId, email);

break;

case 2: newAccount = new CreditAccount(password,name,personId,email);

break;

default: throw new ArgumentOutOfRangeException("账户类型是1和2之间的整数");

}

//把新开的账号加到集合中

accounts.Add(newAccount);

return newAccount;

}

//根据账户id得到账户对象

private Account GetAccountByID(long id)

{

foreach (Account account in accounts)

{

if (account.ID == id)

{

return account;

}

}

return null;

}

//根据账号和密码登陆账户

public Account SignIn(long id, string password)

{

foreach (Account account in accounts)

{

if (account.ID == id && account.PassWord.Equals(password))

{

return account;

}

}

throw new InvalidOperationException("用户名或者密码不正确,请重试");

}

//存款

public Account Deposit(long id, double sum)

{

Account account = GetAccountByID(id);

if (account != null)

{

account.Deposit(sum);

return account;

}

throw new InvalidOperationException("非法账户!");

}

//取款

public Account Withdraw(long id, double sum)

{

Account account = GetAccountByID(id);

if (account != null)

{

account.Withdraw(sum);

return account;

}

throw new InvalidOperationException("非法账户!");

}

//设置透支额度

public Account SetCeiling(long id, double newCeiling)

{

Account account = GetAccountByID(id);

try

{

(account as CreditAccount).Ceiling = newCeiling;

return account;

}

catch (Exception)

{

throw new InvalidOperationException("次账户不是信用账户!");

}

throw new InvalidOperationException("非法账户");

}

//统计银行所有账户余额

public double GetTotalBalance()

{

double totalBalance = 0;

foreach (Account account in accounts)

{

totalBalance += account.Balance;

}

return totalBalance;

}

//统计所有信用账户透支额度总数

public double GetTotalCeiling()

{

double totalCeiling = 0;

foreach (Account account in accounts)

{

if (account is CreditAccount)

{

totalCeiling += (account as CreditAccount).Ceiling;

}

}

return totalCeiling;

}

}

//进行客户测试

class Program

{

static Account SignIn(Bank icbc)

{

Console.WriteLine("nPlease input your account ID");

long id;

try

{

id = long.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid account ID!");

return null;

}

Console.WriteLine("Please input your password");

string password = Console.ReadLine();

Account account;

try

{

account = icbc.SignIn(id, password);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

return null;

}

return account;

}

static void Main(string[] args)

{

Bank icbc = new Bank();

while (true)

{

Console.WriteLine("Please choose the service your need");

Console.WriteLine("(1) Open a new account");

Console.WriteLine("(2) Desposit");

Console.WriteLine("(3) Withdraw");

Console.WriteLine("(4) Set Ceiling");

Console.WriteLine("(5) Get Total Balance");

Console.WriteLine("(6) Get Total Ceiling");

Console.WriteLine("(0) Exit");

string choice;

choice = Console.ReadKey().KeyChar.ToString();

//ConsoleKey i=Console.ReadKey().Key;

switch (choice)

{

case "1":

{

string personId;

int typeOfAccount;

string password;

Console.WriteLine("nWhich kind of account do you want to open?");

while (true)

{

Console.WriteLine("(1)Saving Accountn(2)Credit Accountn(3)return to Last Menu");

try

{

typeOfAccount = int.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("nInvalid option,please choose again");

continue;

}

if (typeOfAccount < 1 || typeOfAccount > 3)

{

Console.WriteLine("nInvalid option,please choooose again!");

continue;

}

break;

}

if (typeOfAccount == 3)

{

break;

}

Console.WriteLine("nPlease input your name:");

string name = Console.ReadLine();

while (true)

{

Console.WriteLine("Please input your Personal ID");

personId = Console.ReadLine();

if (personId.Length != 18)

{

Console.WriteLine("Invalid Personal ID,please input again!");

continue;

}

break;

}

Console.WriteLine("Please input your E-mail");

string email = Console.ReadLine();

while (true)

{

Console.WriteLine("Please input your password");

password = Console.ReadLine();

Console.WriteLine("Please confirm your password");

if (password != Console.ReadLine())

{

Console.WriteLine("The password doesn't math!");

continue;

}

break;

}

Account account = icbc.OpenAccount(password, password, name, personId, email, typeOfAccount);

Console.WriteLine("The account opened successfully");

Console.WriteLine("Account ID:{0}nAccount Name;{1}nPerson ID:{2}nemail;{3}nBalance:{4}",account.ID,account.Name,account.PersonId,account.Email,account.Balance);

}

break;

case "2":

{

Account account = SignIn(icbc);

if (account == null)

{

break;

}

int amount;

while (true)

{

Console.WriteLine("Please input the amount;");

try

{

amount = int.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid input!");

continue;

}

break;

}

try

{

icbc.Deposit(account.ID, amount);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

break;

}

Console.WriteLine("Deposit successfully,our balance is{0}元",account.Balance);

}

break;

case "3":

{

Account account = SignIn(icbc);

if (account == null)

{

break;

}

int amount;

while (true)

{

Console.WriteLine("Please input the amount");

try

{

amount = int.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid input!");

continue;

}

break;

}

try

{

icbc.Withdraw(account.ID, amount);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

break;

}

Console.WriteLine("Deposit successfully,your balance is{0}yuan",account.Balance);

}

break;

case "4":

{

Account account = SignIn(icbc);

if (account == null)

{

break;

}

double newCeiling;

while (true)

{

Console.WriteLine("Please input the new ceiling");

try

{

newCeiling = double.Parse(Console.ReadLine());

}

catch (FormatException)

{

Console.WriteLine("Invalid input!");

continue;

}

break;

}

try

{

icbc.SetCeiling(account.ID, newCeiling);

}

catch (InvalidOperationException ex)

{

Console.WriteLine(ex.Message);

break;

}

Console.WriteLine("Set ceiling successfully,your new ceiling is{0} yuan",(account as CreditAccount).Ceiling);

}

break;

case "5":

Console.WriteLine("nThe total balance is:"+icbc.GetTotalBalance());

break;

case "6":

Console.WriteLine("nThe total ceiling is:" + icbc.GetTotalCeiling());

break;

case "0":

return;

default:

Console.WriteLine("nInvalid option,plwase choose again!");

break;

}

}

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类