C#学习笔记--关于银行存取款的小实验

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 list1 = new List();
        private static List list2 = new List();
        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;
                }

            }
        }

    }
}

你可能感兴趣的:(c#学习笔记)