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

2023-11-16

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;
                }

            }
        }

    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Fabric java sdk 1.4简明教程

    在超级账本Fabric区块链中 应用通过节点的RPC协议接口访问链码 Java应用可以使用官方提供的Fabric sdk java开发包来实现对链码的访问 开发包封装了Fabric区块链的GRPC链码访问协议 有利于开发人员聚焦于业务逻辑
  • TCP报文的交互过程

    TCP建立连接和断开连接的过程如下图所示 在TCP 协议提供可靠的连接服务时 采用三次握手建立一个连接 采用四次握手来关闭一个连接 建立TCP连接的三次握手 第一次握手 建立连接时 客户端发送 SYN 包到服务器 等待服务器确认 第二次握手
  • Docker的简介、镜像及优化

    1 docker的安装 1 配置yum源 vim etc yum repo d docker ce repo 编辑内容 vim etc yum repo d CentOS Base repo 编辑内容 2 安装docker yum inst
  • 医疗保健行业中的区块链

    区块链技术是世界上最重要和最具颠覆性的技术之一 多个行业正在采用区块链技术来创新其运作方式 希望采用区块链的行业之一是医疗保健行业 在本指南中 我们将熟悉区块链 特别是有助于打破这个行业原有桎梏的功能 此外 我们将研究医疗行业的未来将会是什
  • 推荐系统实践(八)----评分预测

    目前为止都是在讨论 T o p N TopN TopN 推荐 即给定一个用户 如何给他生成一个长度为 N N
  • JVM 内存模型

    JVM 内存模型 1 JVM 内存模型共分为5个区 Java虚拟机栈 本地方法栈 堆 程序计数器 方法区 元空间 2 各个区各自的作用 a 本地方法栈 用于管理本地方法的调用 里面并没有我们写的代码逻辑 其由native修饰 由 C 语言实
  • 卷积神经网络之-Lenet

    更多内容请关注 机器视觉CV 公众号 原文地址 前言 Lenet 是一系列网络的合称 包括 Lenet1 Lenet5 由 Yann LeCun 等人在1990 年 Handwritten Digit Recognition with a
  • 一个将XM音频导入小宇宙的工具

    这个喜马拉雅语音导出工具 能够帮助你导出喜马拉雅中的音频节目 下载后的音频文件 可以复制到小宇宙设备文件夹里面 这样我们就可以用小宇宙播放我们导入的音频文件啦 windows电脑版 https jscs lanzouw com imVZ40
  • 负载均衡原理分析与源码解读

    上一篇文章一起学习了Resolver的原理和源码分析 本篇继续和大家一起学习下和Resolver关系密切的Balancer的相关内容 这里说的负载均衡主要指数据中心内的负载均衡 即RPC间的负载均衡 传送门 服务发现原理分析与源码解读 基于
  • 强化学习之Grid World的时序差分算法解析【MiniWorld】SYSU_2023SpringRL

    强化学习之Grid World的Monte Carlo算法解析 MiniWorld SYSU 2023SpringRL 题目以及思路 代码 运行结果 算法解析 代码算法流程 题目以及思路 环境在这篇博客强化学习原理及应用作业之动态规划算法
  • c语言输出斐波那契数列前40项

    分析 对于斐波那契数列数列来说 就是前一项和前前一项的和 就是当前项 就比如 1 1 2 3 5 其中2就是1 1 3就是1 2 5就是2 3 所以 在c语言中就可以定义数组的方式 去实现 当然 如果一行输出 不美观 于是利用if语句 将i
  • Streamlit项目: 轻松搭建部署个人博客网站

    文章目录 1 前言 1 1 探索 Streamlit 轻松创建交互式应用 1 2 最全 Streamlit 教程专栏 2 我的个人博客网站已上线 2 1 一个集成了智能中医舌诊 中e诊专栏的博客网站 2 2 前期准备 2 3 使用 Stre
  • MS-RTOS 内核模块动态装载

    1 MS RTOS 内核模块动态装载简介 MS RTOS 支持内核模块动态装载功能 用户可以根据需要 在不需要对内核重新编译的情况下 使用 insmod rmmod 等命令动态地将模块加入或移出内核 这样可以提高 MS RTOS 的灵活性
  • 使用clion链接liunx同步项目并编译

    一 clion的下载和安装 下载官网CLion A Cross Platform IDE for C and C by JetBrains 安装后有30天使用日期 学生可以获得免费教育许可证JetBrains 学习产品 二 clion项目的
  • 注解方式、ServletContext 与 ServletConfig和请求

    回顾 http 协议的定义和组成 请求行 请求头 请求体 响应行 响应头 响应体 常见响应状态码的含义 200 成功 404 未找到 405 方法不支持 500 服务器出现异常 常见请求头 Host 主机 User Agent 客户端类型
  • HarmonyOS云开发基础认证练习题

    系列文章目录 HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 HarmonyOS云开发基础认证练习题 文章目录 系列文章目录 前言 一 判断 二 单选 三 多选 前言 本文所有内容来源于个人进行Har
  • kali 上下载GitHub文件失败

    出现 Failed to connect to github com port 443 Connection refused 把命令 git clone https github com git 换成 git clone git githu
  • 用Excel做简单的数据分析

    一 使用的数据 1 做月销量的柱状图 按住Ctrl可跨区选中 1 选中数据 2 选择柱状图 一般柱状图都使用2D 3 为图加上数据标签 更加直观 2 以同样的方式做饼图 1 如图 一般饼图都是做3D的 3 求月销售额 单价 X 月销量 1
  • 使用VS Code进行Qt开发

    使用VS Code进行Qt开发 文章目录 使用VS Code进行Qt开发 测试环境 步骤 1 将Qt的bin目录添加到环境变量 2 安装VS Code扩展 3 使用Qt Creator创建CMake项目 4 在VS Code中打开项目 5
  • C#学习笔记--关于银行存取款的小实验

    C 面向对象程序设计 编程模拟实现个人银行的存款业务 要求 1 提供两种账户 活期存款账户CheckingCustom和定期存款账户FixedCustom 2 创建活期账户时 必须提供账户名和开户金额 而账号则根据存款分类自动生成 3 不论