C#面向对象程序设计
编程模拟实现个人银行的存款业务
要求:
(1)提供两种账户:活期存款账户CheckingCustom和定期存款账户FixedCustom
(2)创建活期账户时,必须提供账户名和开户金额,而账号则根据存款分类自动生成
(3)不论是活期存款账户还是定期存款账户都可以随时存款和取款
(4)活期存款账户的账号范围是10001-19999,活期存款利息一律按当前余额的0.5%计算。每次取款时,不论存款时间有多长,都要先根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款是,不进行结算。
(5)定期存款账号的范围是20001-29999,定期存款利息计算方法如下:如果当前余额大于500,利息为6%,否则为3%。每次取款时,不论存款时间有多长,都要先根据当前余额结算一次利息,并将利息附加到现有余额中,然后再从中取出指定的款数。向现有账户追加存款是,不进行结算。
(6)要允许用户随时查询自己的存款信息,查询是要求提供用户名、存款类型和账号
(7)程序要易于扩充,即需要增加存款业务时,能够利用已经实现的功能,通过尽量少的代码快速实现。
解:
(1)创建一个名为BankCustoms的Windows应用程序项目,重命名Form1.cs为FormMain.cs,然后在此窗体上完成个人存款业务处理的设计界面。
(2)添加一个类文件Custom.cs,处理活期存款和定期存款共有的业务。在Custom类中完成下列功能。
① 声明三个私有的成员变量保存帐户对应的信息,分别如下。
accountName:帐户名。
accountNumber:帐户号。
accountBalance:帐户余额。
然后给这三个私有成员定义相应的属性,分别命名为AccountName、AccountNumber和AccountBalance,并处理对应的访问权限。
② 编写一个公共的Deposit方法,向帐户中添加存款。
③ 编写一个公共的Withdraw方法,从帐户中取款。
(3)向项目中添加一个名为CheckingCustom.cs类文件,处理活期存款业务,让其继承自Custom类,在CheckingCustom类中完成下列功能。
① 定义一个静态变量newAccountNumber,提供准备产生的活期存款帐号,初值为0001。注意每使用一次该帐号,其值都要自动加1。
② 分别提供可以让外部访问的属性,包括帐户名、帐户号、余额和利率。
③ 提供一个带参数的构造函数,在构造函数中接收指定的帐户名和开户金额,并利用newAccountNumber产生一个在活期存款规定帐户范围内的合法的帐户号,然后设置对应的属性。
④ 重写基类的Withdraw方法,使之符合活期存款业务的要求。
(4)添加一个名为FixedCustom.cs的类文件,处理定期存款业务,让其继承自Custom类,在FixedCustom类中完成除利息计算方式不同外、其他情况与活期存款业务相似的功能。
(5)在存款业务处理界面的代码文件中完成下列功能。
① 分别定义保存活期存款和定期存款的SortedList泛型列表对象,使用SortedList的目的是为了利用键/值对进行处理。实现代码可以参看源程序。
② 分别实现存款、取款和显示帐户信息功能。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Custom
{
class Custom //基类
{
protected int number; //账号
protected string name; //账户名
protected double account; //账户余额
protected static List<int> numbers = new List<int>();
protected Random r;
protected string type; // 活期/定期
public void deposit(double money) 编写一个公共的deposit方法,向账户中添加存款
{
if (money < 0)
{
Console.WriteLine("存款失败");
return;
}
account += money;
Console.WriteLine("向{0}账户中存入{1}元", number, money);
Console.WriteLine("您的余额为{0}元", account);
}
public void get_info()
{
Console.WriteLine("存款信息如下:");
Console.WriteLine("账户名:{0}\n账号:{1}\n存款类型:{2}\n账号余额:{3}", name, number, type, account);
}
public string Name
{
get
{
return name;
}
}
public int Number
{
get
{
return number;
}
}
}
class CheckingCustom : Custom // 活期存款账户
{
public CheckingCustom(double account_size, string name)
{
this.name = name;
account = account_size;
while (true)
{
r = new Random();
number = r.Next(10001, 19999);
if (!numbers.Contains(number)) break;
}
type = "活期";
Console.WriteLine("您的账号为:{0}", number);
}
public void withdraw(double money)
{
if (money < 0)
{
Console.WriteLine("取款失败");
return;
}
account += account * 0.005;
if (account >= money)
{
account -= money;
Console.WriteLine("从{0}账户中取出{1}元", number, money);
Console.WriteLine("您的余额为{0}元", account);
}
else
{
Console.WriteLine("余额不足");
}
}
}
class FixedCustom : Custom // 定期存款账户
{
public FixedCustom(double account_size, string name)
{
this.name = name;
account = account_size;
while (true)
{
r = new Random();
number = r.Next(20001, 29999);
if (!numbers.Contains(number)) break;
}
type = "定期";
Console.WriteLine("您的账号为:{0}", number);
}
public void withdraw(double money)
{
if (money < 0)
{
Console.WriteLine("取款失败");
return;
}
if (account >= 500)
account += account * 0.06;
else
account += account * 0.03;
if (account >= money)
{
account -= money;
Console.WriteLine("取出{1}元", number, money);
Console.WriteLine("您的余额为{0}元", account);
}
else
Console.WriteLine("余额不足");
}
}
class Program
{
private static List<CheckingCustom> list1 = new List<CheckingCustom>();
private static List<FixedCustom> list2 = new List<FixedCustom>();
public static void create_account()
{
string name;
int open_account;
int type;
Console.WriteLine("请输入账户名:");
name = Console.ReadLine();
try
{
Console.WriteLine("请输入开户金额:");
open_account = Convert.ToInt32(Console.ReadLine());
if (open_account < 0)
{
Console.WriteLine("开户金额不足");
return;
}
Console.WriteLine("请输入账户类型:(0-活期,1-定期)");
type = Convert.ToInt32(Console.ReadLine());
if (type == 0)
{
CheckingCustom c = new CheckingCustom(open_account, name);
list1.Add(c);
}
else if (type == 1)
{
FixedCustom c = new FixedCustom(open_account, name);
list2.Add(c);
}
else Console.WriteLine("请输入0或1");
}
catch (Exception e)
{
Console.WriteLine("输入错误");
}
}
public static void withdraw_money()
{
string name; int number; double amount;
Console.WriteLine("请输入取款账户名:");
name = Console.ReadLine();
try
{
Console.WriteLine("请输入取款账号:");
number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入取款金额:");
amount = Convert.ToInt32(Console.ReadLine());
foreach (CheckingCustom c in list1)
{
if (c.Name == name && c.Number == number)
{
c.withdraw(amount);
return;
}
}
foreach (FixedCustom c in list2)
{
if (c.Name == name && c.Number == number)
{
c.withdraw(amount);
return;
}
}
Console.WriteLine("该账户不存在");
}
catch (Exception e)
{
Console.WriteLine("输入错误");
}
}
public static void deposit_money()
{
string name; int number; double amount;
Console.WriteLine("请输入存款账户名:");
name = Console.ReadLine();
try
{
Console.WriteLine("请输入存款账号:");
number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入存款金额:");
amount = Convert.ToInt32(Console.ReadLine());
foreach (CheckingCustom c in list1)
{
if (c.Name == name && c.Number == number)
{
c.deposit(amount);
return;
}
}
foreach (FixedCustom c in list2)
{
if (c.Name == name && c.Number == number)
{
c.deposit(amount);
return;
}
}
Console.WriteLine("该账户不存在");
}
catch (Exception e)
{
Console.WriteLine("输入错误");
}
}
public static void inquery_account()
{
string name; int number; int type;
Console.WriteLine("请输入存款账户名:");
name = Console.ReadLine();
try
{
Console.WriteLine("请输入存款账号:");
number = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入账户类型:(0-活期,1-定期");
type = Convert.ToInt32(Console.ReadLine());
if (type == 0)
{
foreach (CheckingCustom c in list1)
{
if (c.Name == name && c.Number == number)
{
c.get_info();
return;
}
}
}
if (type == 1)
{
foreach (FixedCustom c in list2)
{
if (c.Name == name && c.Number == number)
{
c.get_info();
return;
}
}
}
Console.WriteLine("该账户不存在");
}
catch (Exception err)
{
Console.WriteLine("输入错误");
}
}
static void Main(string[] args)
{
string choice;
while (true)
{
Console.WriteLine("选择功能(按其它键退出):\n1.创建账户\n2.取款\n3.存款\n4.查询账户");
choice = Console.ReadLine();
if (choice != "1" && choice != "2" && choice != "3" && choice != "4")
{
break;
}
switch (choice)
{
case "1": create_account(); break;
case "2": withdraw_money(); break;
case "3": deposit_money(); break;
case "4": inquery_account(); break;
}
}
}
}
}